Skip to content
KernelIndex
Search⌘K

submission 663912

bhagawan-yantrion · python · License unknown

Use it

Vendorable · source mirrored · license unknownView source →

No package. Vendor the mirrored source: 539 lines, June 9 Researcher Reciprocity License v1.0.

submission.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-mxfp4-mm-663912?include=source"
interfacepython
Compatibility
measured onAMD Instinct MI355X
declared hardwareAMD Instinct MI355X
architecturesgfx950
dtypesbf16, mxfp4

Benchmark evidence

1 measurement across 1 GPU, fastest first.

Operation / workload
Hardware
Latency
Rank
Observed
AMD MXFP4 GEMMsuite of 6 cases
AMD Instinct MI355X
12.7µs
#393 of 1143
2026-03-29

Reported · How evidence levels are derived →

Source and license

sourceavailable
revision digestsha256:ee838da2505a45d8dc182b531bd443ec3cadcd8ce45bad52cada2e42926a7c62
license declaredunknown
license concludedunknown
authorsbhagawan-yantrion
imported2026-08-15

Techniques

Extracted from the mirrored source by pattern, never inferred. Each row cites its line.

fp4MXFP4-MM: Hybrid with direct ASM GEMM launch.
split-klog2_ks = 0 # explicit split-K is slower for all our shapes

Kernel source

submission.py539 lines
#!POPCORN leaderboard amd-mxfp4-mm
#!POPCORN gpu MI355X
"""
MXFP4-MM: Hybrid with direct ASM GEMM launch.
K<=1024: fused HIP quant+GEMM (1 launch)
K>1024:  combined C++ call: HIP quant + ASM gemm (2 launches, 0 Python round-trips)
"""
import os, ctypes, base64, tempfile
import torch
import aiter
from aiter import dtypes
from aiter.ops.triton.quant import dynamic_mxfp4_quant
from aiter.utility.fp4_utils import e8m0_shuffle
from task import input_t, output_t

_SO_B64 = (
    "f0VMRgIBAQAAAAAAAAAAAAMAPgABAAAAAAAAAAAAAABAAAAAAAAAAOBqAAAAAAAAAAAAAEAAOAAJAEAAHgAcAAYAAAAEAAAAQAAA"
    "AAAAAABAAAAAAAAAAEAAAAAAAAAA+AEAAAAAAAD4AQAAAAAAAAgAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAkUQAAAAAAACRRAAAAAAAAABAAAAAAAAABAAAABQAAADBRAAAAAAAAMGEAAAAAAAAwYQAAAAAAAAAMAAAAAAAAAAwAAAAAAAAA"
    "EAAAAAAAAAEAAAAGAAAAMF0AAAAAAAAwfQAAAAAAADB9AAAAAAAAKAIAAAAAAADQAgAAAAAAAAAQAAAAAAAAAQAAAAYAAABYXwAA"
    "AAAAAFiPAAAAAAAAWI8AAAAAAAC4AAAAAAAAADEBAAAAAAAAABAAAAAAAAACAAAABgAAAFhdAAAAAAAAWH0AAAAAAABYfQAAAAAA"
    "ANABAAAAAAAA0AEAAAAAAAAIAAAAAAAAAFLldGQEAAAAMF0AAAAAAAAwfQAAAAAAADB9AAAAAAAAKAIAAAAAAADQAgAAAAAAAAEA"
    "AAAAAAAAUOV0ZAQAAACoTgAAAAAAAKhOAAAAAAAAqE4AAAAAAABcAAAAAAAAAFwAAAAAAAAABAAAAAAAAABR5XRkBgAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAgAAAA"
    "AAAAAAAAAAAAAAAAAAAAABAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAACYAAAAiAAAAAAAAAAAAAAAAAAAAAAAAADUAAAAiAAAAAAAA"
    "AAAAAAAAAAAAAAAAAHQAAAASAAAAAAAAAAAAAAAAAAAAAAAAAKYAAAASAAAAAAAAAAAAAAAAAAAAAAAAAA0BAAASAAAAAAAAAAAA"
    "AAAAAAAAAAAAACgBAAASAAAAAAAAAAAAAAAAAAAAAAAAAGMBAAASAAAAAAAAAAAAAAAAAAAAAAAAAGoBAAASAAAAAAAAAAAAAAAA"
    "AAAAAAAAAIABAAASAAAAAAAAAAAAAAAAAAAAAAAAAIkBAAASAAAAAAAAAAAAAAAAAAAAAAAAAJcBAAASAAAAAAAAAAAAAAAAAAAA"
    "AAAAAKwBAAASAAAAAAAAAAAAAAAAAAAAAAAAAMMBAAASAAAAAAAAAAAAAAAAAAAAAAAAANkBAAASAAAAAAAAAAAAAAAAAAAAAAAA"
    "AA4CAAASAAAAAAAAAAAAAAAAAAAAAAAAAE0AAAASAAwAwGEAAAAAAAD0AAAAAAAAAOAAAAARABIAUH0AAAAAAAAIAAAAAAAAADgB"
    "AAASAAwAUGUAAAAAAACAAQAAAAAAAFMBAAASAAwA0GYAAAAAAAA2BAAAAAAAAI4AAAARABIASH0AAAAAAAAIAAAAAAAAALYAAAAS"
    "AAwAwGIAAAAAAADjAAAAAAAAAPsAAAASAAwAsGMAAAAAAACfAQAAAAAAAPIBAAARABkAiJAAAAAAAAABAAAAAAAAAAAAAQACAAMA"
    "AgAEAAQABAAEAAMABAADAAQABAAEAAQABAADAAEAAQABAAEAAQABAAEAAQABAAEAGwIAADAAAAAQAAAAAQABADQCAAAwAAAAEAAA"
    "AAEAAQBKAgAAMAAAAAAAAAByJwYPAAAEACwCAAAAAAAAUCZ5CwAAAgBCAgAAAAAAAHUaaQkAAAMAVAIAAAAAAAAAAAAAAgAAABIA"
    "AAACAAAAGgAAAAAAARdBICAAAAQEiAiAAAASAAAAFgAAABjq0mqQGTnWSg0wjiGYUnLunGtKGMKPm9odJXy1h9G0AF9fZ21vbl9z"
    "dGFydF9fAF9fcmVnaXN0ZXJfZnJhbWVfaW5mbwBfX2N4YV9maW5hbGl6ZQBfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mbwBfX2Rldmlj"
    "ZV9zdHViX19mdXNlZF9teGZwNF9nZW1tX2tlcm5lbABfX2hpcFBvcENhbGxDb25maWd1cmF0aW9uAGZ1c2VkX214ZnA0X2dlbW1f"
    "a2VybmVsAGhpcExhdW5jaEtlcm5lbABfX2RldmljZV9zdHViX19mdXNlZF9xdWFudF9zaHVmZmxlX2tlcm5lbABmdXNlZF9xdWFu"
    "dF9zaHVmZmxlX2tlcm5lbABsYXVuY2hfZnVzZWRfZ2VtbQBfX2hpcFB1c2hDYWxsQ29uZmlndXJhdGlvbgBoaXBHZXRMYXN0RXJy"
    "b3IAbGF1bmNoX2Z1c2VkX3F1YW50X3NodWZmbGUAbGF1bmNoX2NvbWJpbmVkAG1lbXNldABoaXBNb2R1bGVMYXVuY2hLZXJuZWwA"
    "c25wcmludGYAaGlwTW9kdWxlTG9hZABoaXBNb2R1bGVHZXRGdW5jdGlvbgBfX2hpcFJlZ2lzdGVyRmF0QmluYXJ5AF9faGlwUmVn"
    "aXN0ZXJGdW5jdGlvbgBfX2hpcFVucmVnaXN0ZXJGYXRCaW5hcnkAX19oaXBfY3VpZF81MDIzZGY0M2ZhYzhkYTU3AF9fY3hhX2F0"
    "ZXhpdABsaWJhbWRoaXA2NC5zby43AGhpcF80LjIAbGliZ2NjX3Muc28uMQBHQ0NfMy4wAGxpYmMuc28uNgBHTElCQ18yLjIuNQAv"
    "b3B0L3JvY20tNy4xLjAvbGliAGxpYnN0ZGMrKy5zby42AGxpYm0uc28uNgAAAAAwfQAAAAAAAAgAAAAAAAAAMGEAAAAAAAA4fQAA"
    "AAAAAAgAAAAAAAAAEGsAAAAAAABAfQAAAAAAAAgAAAAAAAAAcGEAAAAAAABYjwAAAAAAAAgAAAAAAAAAWI8AAAAAAABojwAAAAAA"
    "AAgAAAAAAAAAABAAAAAAAAAofwAAAAAAAAYAAAABAAAAAAAAAAAAAAAwfwAAAAAAAAYAAAACAAAAAAAAAAAAAAA4fwAAAAAAAAYA"
    "AAADAAAAAAAAAAAAAABAfwAAAAAAAAYAAAAEAAAAAAAAAAAAAABIfQAAAAAAAAEAAAASAAAAAAAAAAAAAABQfwAAAAAAAAYAAAAT"
    "AAAAAAAAAAAAAABIfwAAAAAAAAYAAAAWAAAAAAAAAAAAAABQfQAAAAAAAAEAAAAXAAAAAAAAAAAAAACQjwAAAAAAAAcAAAACAAAA"
    "AAAAAAAAAACYjwAAAAAAAAcAAAADAAAAAAAAAAAAAACgjwAAAAAAAAcAAAAEAAAAAAAAAAAAAACojwAAAAAAAAcAAAAFAAAAAAAA"
    "AAAAAACwjwAAAAAAAAcAAAAGAAAAAAAAAAAAAAC4jwAAAAAAAAcAAAAHAAAAAAAAAAAAAADAjwAAAAAAAAcAAAAIAAAAAAAAAAAA"
    "AADIjwAAAAAAAAcAAAAJAAAAAAAAAAAAAADQjwAAAAAAAAcAAAAKAAAAAAAAAAAAAADYjwAAAAAAAAcAAAALAAAAAAAAAAAAAADg"
    "jwAAAAAAAAcAAAAMAAAAAAAAAAAAAADojwAAAAAAAAcAAAANAAAAAAAAAAAAAADwjwAAAAAAAAcAAAAOAAAAAAAAAAAAAAD4jwAA"
    "AAAAAAcAAAAPAAAAAAAAAAAAAAAAkAAAAAAAAAcAAAAQAAAAAAAAAAAAAAAIkAAAAAAAAAcAAAARAAAAAAAAAAAAAABfWk41YWl0"
    "ZXI0MWY0Z2VtbV9iZjE2X3BlcjF4MzJGcDRfQnByZVNodWZmbGVfMzJ4MTI4RQAlc2Y0Z2VtbV9iZjE2X3BlcjF4MzJGcDRfQnBy"
    "ZVNodWZmbGVfMzJ4MTI4LmNvACVzZjRnZW1tX2JmMTZfcGVyMXgzMkZwNF9CcHJlU2h1ZmZsZV8xOTJ4MTI4LmNvAGZ1c2VkX3F1"
    "YW50X3NodWZmbGVfa2VybmVsAC9ob21lL3J1bm5lci9haXRlci9oc2EvZ2Z4OTUwL2Y0Z2VtbS8AX1pONWFpdGVyNDJmNGdlbW1f"
    "YmYxNl9wZXIxeDMyRnA0X0JwcmVTaHVmZmxlXzE5MngxMjhFAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF9fQ0xBTkdfT0ZGTE9BRF9CVU5ETEVfXwIAAAAA"
    "AAAAABAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAaG9zdC14ODZfNjQtdW5rbm93bi1saW51eC1nbnUtABAAAAAAAACoLgAAAAAAAB8A"
    "AAAAAAAAaGlwdjQtYW1kZ2NuLWFtZC1hbWRoc2EtLWdmeDk1MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAB/RUxGAgEBQAQAAAAAAAAAAwDgAAEAAAAAAAAAAAAAAEAAAAAAAAAAqCoAAAAAAABPBQAAQAA4AAkA"
    "QAAQAA4ABgAAAAQAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAD4AQAAAAAAAPgBAAAAAAAACAAAAAAAAAABAAAABAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAIAOAAAAAAAAgA4AAAAAAAAAEAAAAAAAAAEAAAAFAAAAAA8AAAAAAAAAHwAAAAAAAAAfAAAAAAAA"
    "QBQAAAAAAABAFAAAAAAAAAAQAAAAAAAAAQAAAAYAAABAIwAAAAAAAEBDAAAAAAAAQEMAAAAAAABwAAAAAAAAAMAMAAAAAAAAABAA"
    "AAAAAAABAAAABgAAALAjAAAAAAAAsFMAAAAAAACwUwAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAIAAAAGAAAAQCMAAAAA"
    "AABAQwAAAAAAAEBDAAAAAAAAcAAAAAAAAABwAAAAAAAAAAgAAAAAAAAAUuV0ZAQAAABAIwAAAAAAAEBDAAAAAAAAQEMAAAAAAABw"
    "AAAAAAAAAMAMAAAAAAAAAQAAAAAAAABR5XRkBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAQAAAAEAAAAOAIAAAAAAAA4AgAAAAAAADgCAAAAAAAAOAoAAAAAAAA4CgAAAAAAAAQAAAAAAAAABwAAACEKAAAgAAAAQU1E"
    "R1BVAACDrmFtZGhzYS5rZXJuZWxzkt4AEqsuYWdwcl9jb3VudAClLmFyZ3Oaha4uYWN0dWFsX2FjY2Vzc6lyZWFkX29ubHmuLmFk"
    "ZHJlc3Nfc3BhY2WmZ2xvYmFspy5vZmZzZXQApS5zaXplCKsudmFsdWVfa2luZK1nbG9iYWxfYnVmZmVyha4uYWN0dWFsX2FjY2Vz"
    "c6lyZWFkX29ubHmuLmFkZHJlc3Nfc3BhY2WmZ2xvYmFspy5vZmZzZXQIpS5zaXplCKsudmFsdWVfa2luZK1nbG9iYWxfYnVmZmVy"
    "ha4uYWN0dWFsX2FjY2Vzc6lyZWFkX29ubHmuLmFkZHJlc3Nfc3BhY2WmZ2xvYmFspy5vZmZzZXQQpS5zaXplCKsudmFsdWVfa2lu"
    "ZK1nbG9iYWxfYnVmZmVyha4uYWN0dWFsX2FjY2Vzc6p3cml0ZV9vbmx5ri5hZGRyZXNzX3NwYWNlpmdsb2JhbKcub2Zmc2V0GKUu"
    "c2l6ZQirLnZhbHVlX2tpbmStZ2xvYmFsX2J1ZmZlcoOnLm9mZnNldCClLnNpemUEqy52YWx1ZV9raW5kqGJ5X3ZhbHVlg6cub2Zm"
    "c2V0JKUuc2l6ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWDpy5vZmZzZXQopS5zaXplBKsudmFsdWVfa2luZKhieV92YWx1ZYOnLm9m"
    "ZnNldCylLnNpemUEqy52YWx1ZV9raW5kqGJ5X3ZhbHVlg6cub2Zmc2V0MKUuc2l6ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWDpy5v"
    "ZmZzZXQ0pS5zaXplBKsudmFsdWVfa2luZKhieV92YWx1ZbkuZ3JvdXBfc2VnbWVudF9maXhlZF9zaXplzRAAti5rZXJuYXJnX3Nl"
    "Z21lbnRfYWxpZ24ItS5rZXJuYXJnX3NlZ21lbnRfc2l6ZTipLmxhbmd1YWdlqE9wZW5DTCBDsS5sYW5ndWFnZV92ZXJzaW9ukgIA"
    "uC5tYXhfZmxhdF93b3JrZ3JvdXBfc2l6Zc0BAKUubmFtZbdmdXNlZF9teGZwNF9nZW1tX2tlcm5lbLsucHJpdmF0ZV9zZWdtZW50"
    "X2ZpeGVkX3NpemUAqy5zZ3ByX2NvdW50JLEuc2dwcl9zcGlsbF9jb3VudACnLnN5bWJvbLpmdXNlZF9teGZwNF9nZW1tX2tlcm5l"
    "bC5rZLgudW5pZm9ybV93b3JrX2dyb3VwX3NpemUBsy51c2VzX2R5bmFtaWNfc3RhY2vCqy52Z3ByX2NvdW50P7Eudmdwcl9zcGls"
    "bF9jb3VudACvLndhdmVmcm9udF9zaXplQN4AEqsuYWdwcl9jb3VudAClLmFyZ3PcABaFri5hY3R1YWxfYWNjZXNzqXJlYWRfb25s"
    "ea4uYWRkcmVzc19zcGFjZaZnbG9iYWynLm9mZnNldAClLnNpemUIqy52YWx1ZV9raW5krWdsb2JhbF9idWZmZXKFri5hY3R1YWxf"
    "YWNjZXNzqndyaXRlX29ubHmuLmFkZHJlc3Nfc3BhY2WmZ2xvYmFspy5vZmZzZXQIpS5zaXplCKsudmFsdWVfa2luZK1nbG9iYWxf"
    "YnVmZmVyha4uYWN0dWFsX2FjY2Vzc6p3cml0ZV9vbmx5ri5hZGRyZXNzX3NwYWNlpmdsb2JhbKcub2Zmc2V0EKUuc2l6ZQirLnZh"
    "bHVlX2tpbmStZ2xvYmFsX2J1ZmZlcoOnLm9mZnNldBilLnNpemUEqy52YWx1ZV9raW5kqGJ5X3ZhbHVlg6cub2Zmc2V0HKUuc2l6"
    "ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWDpy5vZmZzZXQgpS5zaXplBKsudmFsdWVfa2luZKhieV92YWx1ZYOnLm9mZnNldCSlLnNp"
    "emUEqy52YWx1ZV9raW5kqGJ5X3ZhbHVlg6cub2Zmc2V0KKUuc2l6ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWDpy5vZmZzZXQspS5z"
    "aXplBKsudmFsdWVfa2luZKhieV92YWx1ZYOnLm9mZnNldDClLnNpemUEqy52YWx1ZV9raW5ktGhpZGRlbl9ibG9ja19jb3VudF94"
    "g6cub2Zmc2V0NKUuc2l6ZQSrLnZhbHVlX2tpbmS0aGlkZGVuX2Jsb2NrX2NvdW50X3mDpy5vZmZzZXQ4pS5zaXplBKsudmFsdWVf"
    "a2luZLRoaWRkZW5fYmxvY2tfY291bnRfeoOnLm9mZnNldDylLnNpemUCqy52YWx1ZV9raW5ks2hpZGRlbl9ncm91cF9zaXplX3iD"
    "py5vZmZzZXQ+pS5zaXplAqsudmFsdWVfa2luZLNoaWRkZW5fZ3JvdXBfc2l6ZV95g6cub2Zmc2V0QKUuc2l6ZQKrLnZhbHVlX2tp"
    "bmSzaGlkZGVuX2dyb3VwX3NpemVfeoOnLm9mZnNldEKlLnNpemUCqy52YWx1ZV9raW5ksmhpZGRlbl9yZW1haW5kZXJfeIOnLm9m"
    "ZnNldESlLnNpemUCqy52YWx1ZV9raW5ksmhpZGRlbl9yZW1haW5kZXJfeYOnLm9mZnNldEalLnNpemUCqy52YWx1ZV9raW5ksmhp"
    "ZGRlbl9yZW1haW5kZXJfeoOnLm9mZnNldFilLnNpemUIqy52YWx1ZV9raW5ktmhpZGRlbl9nbG9iYWxfb2Zmc2V0X3iDpy5vZmZz"
    "ZXRgpS5zaXplCKsudmFsdWVfa2luZLZoaWRkZW5fZ2xvYmFsX29mZnNldF95g6cub2Zmc2V0aKUuc2l6ZQirLnZhbHVlX2tpbmS2"
    "aGlkZGVuX2dsb2JhbF9vZmZzZXRfeoOnLm9mZnNldHClLnNpemUCqy52YWx1ZV9raW5ksGhpZGRlbl9ncmlkX2RpbXO5Lmdyb3Vw"
    "X3NlZ21lbnRfZml4ZWRfc2l6ZQC2Lmtlcm5hcmdfc2VnbWVudF9hbGlnbgi1Lmtlcm5hcmdfc2VnbWVudF9zaXplzQEwqS5sYW5n"
    "dWFnZahPcGVuQ0wgQ7EubGFuZ3VhZ2VfdmVyc2lvbpICALgubWF4X2ZsYXRfd29ya2dyb3VwX3NpemXNAQClLm5hbWW6ZnVzZWRf"
    "cXVhbnRfc2h1ZmZsZV9rZXJuZWy7LnByaXZhdGVfc2VnbWVudF9maXhlZF9zaXplAKsuc2dwcl9jb3VudBOxLnNncHJfc3BpbGxf"
    "Y291bnQApy5zeW1ib2y9ZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwua2S4LnVuaWZvcm1fd29ya19ncm91cF9zaXplAbMudXNl"
    "c19keW5hbWljX3N0YWNrwqsudmdwcl9jb3VudDOxLnZncHJfc3BpbGxfY291bnQAry53YXZlZnJvbnRfc2l6ZUCtYW1kaHNhLnRh"
    "cmdldLlhbWRnY24tYW1kLWFtZGhzYS0tZ2Z4OTUwrmFtZGhzYS52ZXJzaW9ukgECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AQAAABIDBwAAHwAAAAAAAEwKAAAAAAAAGQAAABEDBgAADgAAAAAAAEAAAAAAAAAANAAAABIDBwAAKgAAAAAAADQFAAAAAAAATwAA"
    "ABEDBgBADgAAAAAAAEAAAAAAAAAAbQAAABEACgCwUwAAAAAAAAEAAAAAAAAAAQAAAAEAAAABAAAAGgAAAAgABQIAsCAAAQAAAO6c"
    "a0ps/JkMkBk51mxBnmW1h9G0BgAAAAYAAAAEAAAABQAAAAMAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA"
    "ZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwAZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwua2QAZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJu"
    "ZWwAZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwua2QAX19oaXBfY3VpZF81MDIzZGY0M2ZhYzhkYTU3AAAAAAAAAAAAAAAAAAAA"
    "AAAQAAAAAAAAOAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAcBrwCEAAAACAAAAAAAAAAAAAAAAAAAADAB"
    "AAAAAAAAwBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAACGAK8AhAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgrAIAAAAIIABCCwBAQmjwAOJn/AjL8JvwOBA58EkASaBI8DBAOBA4YD"
    "kAMMAn6AA4SBAUcCfgAAgL//AgIK/v9/TwEPAn4AAIC/AQUKfgQFBJIFBASWBQQFgQIFBJYEAwWSAgWFgQSBBoEFA4eBBQMJvwYE"
    "BIUHBQWFBIEGgQUDCb8GBASFBAMDkgIDgoEBAADSAgwJBAqAAr8BD1AoAwCFvwEPDCiAAYK+AQCCv8EBgr6AAQbAGAAAAASEFo4p"
    "AMjRAAkJAoAAl75+AuqJgAIKfoACCH6AAgZ+gAIEfggCh7+AAAbAMAAAAAAECsAAAAAAAAMGwBAAAACEAAgggwAEJP8EVCZ4AAAA"
    "FggEaAgEiH0CAIXSAhcAAJ8EBiJ/wIy/FgAI0gIDQQCBVAQkKwAA0gQRCQQCAIXSKAUAAJ8EBiIYAAjSEgAJBIYIBCSGAAYg/wQE"
    "JsAAAAAAAADSAAUNBP8CAibg////AAAB0gB7CQQKnwCPAALo0QEHAAQKAACBhlICJIACBH4AgRiQhVJYJAAAxNAJUAIACoULjwEA"
    "ANIHEQUEGgAI0hYBCQIcAAjSFgERAh4ACNIWARkCIAAI0hYBIQIiAAjSFgEpAiQACNIWATECasGOiIACTn7/AJm+AACAAIP/GrD/"
    "AJu+AAUMDP8AnL4AAP8AKQNafoAAnb4CAwZ+AgMIfgIDCn4sAIK/fgL+h4gmFiQLAO3RCyVuAJAoJCQLAAHSEjksBBIAANIVMS0E"
    "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"
    "nxASIn/AjL8IAAjSCAMZAACAbNwIAX8AfgD+h4EAAigAAMTQCAICAABqgoYCIIC+DQCIvwIAyNEDIQUC/38CsAcA/9EDBQoAAgLo"
    "0QETGASfBAYif8CMvwIACNICAxkAAIBs3AIHfwB+AP6HggACKAAAxNAIAgIAAGqChgIggL4NAIi/AgDI0QQhBQL/fwKwBAD/0QQF"
    "CgACAujRARMYBJ8EBiJ/wIy/AgAI0gIDGQAAgGzcAgR/AH4A/oeDAAAoAADE0AgAAgAAaoCGACCCvg0AiL8BAMjRBSEFAv9/ALAC"
    "AP/RBQMCAAAA6NEAExgEnwACIn/AjL8AAAjSAAMZAACAbNwAAn8AAACBvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/"
    "AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACA"
    "vwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAB"
    "BsAYAAAAwAACwDwAAAB/wIy/BZ8GkAabBo8FBgWBBYUMkAwwhb4FDAJ+A/8Dhv//AAACAwKSAgAAaAFHAn6ABYKBgAAEagAFBBr/"
    "AgIK/v9/TwEPAn4MAAYqnwYGIgQAhdICAgIABACG0gEJAgABCQJoAQCG0gIDAgAEAIXSAQsAAAIJBGqBAgpoBQSWfQUECGwAAIC/"
    "AQsCAAIJBACBAghoBQSWfQEAgL8BCQIAAQcCKgEHJGoEJIh9aiCCvhsBiL8AAQrAJAAAAAACCsAAAAAAgAAGwBAAAAABAIXSEhkA"
    "AAADJmp/wIy/AACF0hILAACFJiAknwACIgAACNIAAyEAnyAiIhQACNIQAwEEAIBc3BQAfwQQgFzcFAB/DCCAXNwUAH8AMIBc3BQA"
    "fwhzD4y/kAg2JP8IRiYAAP//kApIJP8KOCYAAP//GwXT0RsBjQSQDEok/ww6JgAA//8bBtPRG0lyBJAOTCT/DjwmAAD//xsG09Eb"
    "S3YEcg+Mv5AYTiT/GD4mAAD//xsG09EbTXoEkBpQJP8aQCYAAP//GwbT0RtPfgSQHFIk/xxCJgAA//8bBtPRG1GCBJAeVCT/HkQm"
    "AAD//xsG09EbU4YEcQ+Mv5AAViT/ACImAAD//xsG09EbVYoEkAJYJP8CKCYAAP//GwbT0RtXRgSQBFok/wQqJgAA//8bBtPRG1lS"
    "BJAGXCT/BiwmAAD//xsG09EbW1YEcA+Mv5AQXiT/EC4mAAD//xsG09EbXVoEkBJgJP8SMCYAAP//GwbT0RtfXgSQFGIk/xQyJgAA"
    "//8bBtPRG2FiBJAWZCT/FjQmAAD//xsG09EbY2YEJAbT0RtlagSASJp8gAI2fmoggL4aAIi//0g2aAAAIAD/NjYmAACA//8Ahb4A"
    "AIAABTaIfIP/BbAAAIC/JAAA0YBAqQEbAIjSG0kCABtDNn7/Akh+AAAAQoBISAAbSTYEGz82fhsRNn7/Akh+gQAAABsA19EbC5AE"
    "/zY2TH0AAAB+AP6HlwJIfvkICCgjBgYE+QoKKBwGBgT5NlAkJAYGAAQATdIEUQIABQBN0gVRAgD/AACw+QwMKB0GBgT5Dg4oHgYG"
    "BIgKClQGAE3SBlECAAcATdIHUQIABAUz0gQLApiIDgpU+RgYKB8GBgT5GhooIAYGBPkcHCghBgYE+R4eKCIGBgQFBTPSBgsCmCQA"
    "hdISDQAADABN0gxRAgANAE3SDVECAA4ATdIOUQIADwBN0g9RAgCQCgokiB4MVJ9ISiKEJkwk+QoIKAQGBAaIGgpUBgUz0g4NApgk"
    "AAjSCgCRBJ9MTiIFBTPSDAsCmJAMDCQkAAjSJAGZBPkMCigFBgQG+QAAKBEGBgT5AgIoFAYGBACAdNwkBH8AAABN0gBRAgABAE3S"
    "AVECAPkEBCgVBgYE+QYGKBYGBgSIAgJUAgBN0gJRAgADAE3SA1ECAAAFM9IAAwKYiAYCVPkQCCgXBgYE+RIKKBgGBgT5FAwoGQYG"
    "BPkWDigaBgYEAQUz0gIDApgEAE3SBFECAAUATdIFUQIABgBN0gZRAgAHAE3SB1ECAJACAiSIDgRU+QIAKAAGBAaICgJUAgUz0gYF"
    "ApgBBTPSBAMCmJAEBCT5BAIoAQYEBgiAdNwkAH8AhiYAJP8ABibAAAAAgiQAJLwAACaEJAog/yQCJuD///8AAAHSBQMBBP8gBCYA"
    "////AADo0QEJAASBJgggAAD/0QAFDgQAAAHSBAUBBJ8AAiIAAAjSAgABBACAYNwAG38AAACBvwAAgL8AAIC/AACAvwAAgL8AAIC/"
    "AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACA"
    "vwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAA"
    "gL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8A"
    "AIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/"
    "AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACA"
    "vwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAA"
    "gL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8A"
    "AIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/"
    "AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACA"
    "vwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAA"
    "gL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8A"
    "AIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/"
    "AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACA"
    "vwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8GAAAAAAAAAHAMAAAAAAAACwAAAAAAAAAYAAAAAAAAAAUA"
    "AAAAAAAAaA0AAAAAAAAKAAAAAAAAAIkAAAAAAAAA9f7/bwAAAAAADQAAAAAAAAQAAAAAAAAAMA0AAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAEFNRCBjbGFuZyB2ZXJzaW9uIDIwLjAuMGdpdCAoaHR0cHM6Ly9naXRodWIuY29tL1JhZGVvbk9wZW5Db21wdXRlL2xsdm0t"
    "cHJvamVjdCByb2MtNy4xLjAgMjU0MjUgMWIwZWFkYTZiMGVlOTNlMmU2OTRjOGMxNDZkMjNmY2E5MGJjMTFjNSkATGlua2VyOiBB"
    "TUQgTExEIDIwLjAuMCAoL2xvbmdlcl9wYXRobmFtZV9zb190aGF0X3JwbXNfY2FuX3N1cHBvcnRfcGFja2FnaW5nX3RoZV9kZWJ1"
    "Z19pbmZvX2Zvcl9hbGxfb3NfcHJvZmlsZXMvc3JjL2xsdm0tcHJvamVjdC9sbHZtIDFiMGVhZGE2YjBlZTkzZTJlNjk0YzhjMTQ2"
    "ZDIzZmNhOTBiYzExYzUpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAADx/wAAAAAAAAAAAAAAAAAAAAAqAAAA"
    "AADx/z8AAAAAAAAAAAAAAAAAAABLAAAAAADx/wAAAAAAAAAAAAAAAAAAAABsAAAAAADx/x4AAAAAAAAAAAAAAAAAAACSAAAAAADx"
    "/wEAAAAAAAAAAAAAAAAAAACzAAAAAADx/wAAAAAAAAAAAAAAAAAAAADdAAAAAADx/wAAAAAAAAAAAAAAAAAAAAAJAQAAAADx/wAA"
    "AAAAAAAAAAAAAAAAAAAvAQAAAADx/wAAAAAAAAAAAAAAAAAAAABbAQAAAADx/zMAAAAAAAAAAAAAAAAAAAB/AQAAAADx/wAAAAAA"
    "AAAAAAAAAAAAAACjAQAAAADx/w0AAAAAAAAAAAAAAAAAAADMAQAAAADx/wEAAAAAAAAAAAAAAAAAAADwAQAAAADx/wAAAAAAAAAA"
    "AAAAAAAAAAAdAgAAAADx/wAAAAAAAAAAAAAAAAAAAABMAgAAAADx/wAAAAAAAAAAAAAAAAAAAAD9AgAAAAIIAEBDAAAAAAAAAAAA"
    "AAAAAAB1AgAAEgMHAAAfAAAAAAAATAoAAAAAAACNAgAAEQMGAAAOAAAAAAAAQAAAAAAAAACoAgAAEgMHAAAqAAAAAAAANAUAAAAA"
    "AADDAgAAEQMGAEAOAAAAAAAAQAAAAAAAAADhAgAAEQAKALBTAAAAAAAAAQAAAAAAAAAALm5vdGUALmR5bnN5bQAuZ251Lmhhc2gA"
    "Lmhhc2gALmR5bnN0cgAucm9kYXRhAC50ZXh0AC5keW5hbWljAC5yZWxyb19wYWRkaW5nAC5ic3MALkFNREdQVS5ncHJfbWF4aW11"
    "bXMALmNvbW1lbnQALnN5bXRhYgAuc2hzdHJ0YWIALnN0cnRhYgAAZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwucHJpdmF0ZV9zZWdf"
    "c2l6ZQBmdXNlZF9teGZwNF9nZW1tX2tlcm5lbC5udW1fdmdwcgBmdXNlZF9teGZwNF9nZW1tX2tlcm5lbC5udW1fYWdwcgBmdXNl"
    "ZF9teGZwNF9nZW1tX2tlcm5lbC5udW1iZXJlZF9zZ3ByAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsLnVzZXNfdmNjAGZ1c2VkX214"
    "ZnA0X2dlbW1fa2VybmVsLnVzZXNfZmxhdF9zY3JhdGNoAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsLmhhc19keW5fc2l6ZWRfc3Rh"
    "Y2sAZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwuaGFzX3JlY3Vyc2lvbgBmdXNlZF9xdWFudF9zaHVmZmxlX2tlcm5lbC5wcml2YXRl"
    "X3NlZ19zaXplAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsLm51bV92Z3ByAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsLm51"
    "bV9hZ3ByAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsLm51bWJlcmVkX3NncHIAZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwu"
    "dXNlc192Y2MAZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwudXNlc19mbGF0X3NjcmF0Y2gAZnVzZWRfcXVhbnRfc2h1ZmZsZV9r"
    "ZXJuZWwuaGFzX2R5bl9zaXplZF9zdGFjawBmdXNlZF9xdWFudF9zaHVmZmxlX2tlcm5lbC5oYXNfcmVjdXJzaW9uAGZ1c2VkX214"
    "ZnA0X2dlbW1fa2VybmVsAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsLmtkAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsAGZ1c2Vk"
    "X3F1YW50X3NodWZmbGVfa2VybmVsLmtkAF9faGlwX2N1aWRfNTAyM2RmNDNmYWM4ZGE1NwBfRFlOQU1JQwAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAACAAAAAAAAADgCAAAAAAAA"
    "OAIAAAAAAAA4CgAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAcAAAALAAAAAgAAAAAAAABwDAAAAAAAAHAMAAAAAAAAkAAA"
    "AAAAAAAFAAAAAQAAAAgAAAAAAAAAGAAAAAAAAAAPAAAA9v//bwIAAAAAAAAAAA0AAAAAAAAADQAAAAAAADAAAAAAAAAAAgAAAAAA"
    "AAAIAAAAAAAAAAAAAAAAAAAAGQAAAAUAAAACAAAAAAAAADANAAAAAAAAMA0AAAAAAAA4AAAAAAAAAAIAAAAAAAAABAAAAAAAAAAE"
    "AAAAAAAAAB8AAAADAAAAAgAAAAAAAABoDQAAAAAAAGgNAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAnAAAA"
    "AQAAAAIAAAAAAAAAAA4AAAAAAAAADgAAAAAAAIAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAALwAAAAEAAAAGAAAAAAAA"
    "AAAfAAAAAAAAAA8AAAAAAABAFAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAADUAAAAGAAAAAwAAAAAAAABAQwAAAAAAAEAj"
    "AAAAAAAAcAAAAAAAAAAFAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAA+AAAACAAAAAMAAAAAAAAAsEMAAAAAAACwIwAAAAAAAFAMAAAA"
    "AAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAATQAAAAgAAAADAAAAAAAAALBTAAAAAAAAsCMAAAAAAAABAAAAAAAAAAAAAAAAAAAA"
    "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"
    "AAAAAKgEAAAAAAAA/v//bwAAAADcBAAAAAAAAP///28AAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGUElIAQAAAAAAAAAAAAAAAAAAAAAAAABYfQAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAA2bAAAAAAAAEZsAAAAAAAAVmwAAAAAAABmbAAAAAAAAHZsAAAAAAAAhmwAAAAAAACWbAAAAAAAAKZsAAAA"
    "AAAAtmwAAAAAAADGbAAAAAAAANZsAAAAAAAA5mwAAAAAAAD2bAAAAAAAAAZtAAAAAAAAFm0AAAAAAAAmbQAAAAAAAABBTUQgY2xh"
    "bmcgdmVyc2lvbiAyMC4wLjBnaXQgKGh0dHBzOi8vZ2l0aHViLmNvbS9SYWRlb25PcGVuQ29tcHV0ZS9sbHZtLXByb2plY3Qgcm9j"
    "LTcuMS4wIDI1NDI1IDFiMGVhZGE2YjBlZTkzZTJlNjk0YzhjMTQ2ZDIzZmNhOTBiYzExYzUpAExpbmtlcjogQU1EIExMRCAyMC4w"
    "LjAgKC9sb25nZXJfcGF0aG5hbWVfc29fdGhhdF9ycG1zX2Nhbl9zdXBwb3J0X3BhY2thZ2luZ190aGVfZGVidWdfaW5mb19mb3Jf"
    "YWxsX29zX3Byb2ZpbGVzL3NyYy9sbHZtLXByb2plY3QvbGx2bSAxYjBlYWRhNmIwZWU5M2UyZTY5NGM4YzE0NmQyM2ZjYTkwYmMx"
    "MWM1KQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQA8f8AAAAAAAAAAAAAAAAAAAAADAAAAAIADAAwYQAAAAAA"
    "ADgAAAAAAAAAFgAAAAEAGQAQkAAAAAAAAAEAAAAAAAAALgAAAAEACwAITwAAAAAAAAAAAAAAAAAAQAAAAAEAGQAYkAAAAAAAAEAA"
    "AAAAAAAAUwAAAAIADABwYQAAAAAAAEoAAAAAAAAAXQAAAAEAGQBYkAAAAAAAAAEAAAAAAAAAcwAAAAEAEAAwfQAAAAAAAAgAAAAA"
    "AAAAegAAAAEAEQBAfQAAAAAAAAgAAAAAAAAAfgEAAAECFgBYjwAAAAAAAAgAAAAAAAAAgQAAAAQA8f8AAAAAAAAAAAAAAAAAAAAA"
    "kQAAAAEAGQBgkAAAAAAAAAgAAAAAAAAAnAAAAAEAGQBokAAAAAAAAAgAAAAAAAAAqAAAAAEAGQBwkAAAAAAAAAgAAAAAAAAAtAAA"
    "AAEAGQB4kAAAAAAAAAgAAAAAAAAAwQAAAAIADAAQawAAAAAAAJQAAAAAAAAA0wAAAAEAGQCAkAAAAAAAAAgAAAAAAAAA+AAAAAEA"
    "FwBgjwAAAAAAABgAAAAAAAAADQEAAAIADACwawAAAAAAACIAAAAAAAAAHwEAAAQA8f8AAAAAAAAAAAAAAAAAAAAAeAMAAAECCwAI"
    "TwAAAAAAAAQAAAAAAAAANwEAAAICDQD0awAAAAAAAAAAAAAAAAAAUwEAAAICDgAQbAAAAAAAAAAAAAAAAAAAPQEAAAACGAB4jwAA"
    "AAAAAAAAAAAAAAAAjgMAAAACEwBYfQAAAAAAAAAAAAAAAAAALwMAAAICDADgawAAAAAAABIAAAAAAAAAKAEAACAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAWQEAACIAAAAAAAAAAAAAAAAAAAAAAAAAbwEAACIAAAAAAAAAAAAAAAAAAAAAAAAAiwEAACIAAAAAAAAAAAAAAAAA"
    "AAAAAAAAowEAABIADADAYQAAAAAAAPQAAAAAAAAAygEAABIAAAAAAAAAAAAAAAAAAAAAAAAA5AEAABEAEgBIfQAAAAAAAAgAAAAA"
    "AAAA/AEAABIAAAAAAAAAAAAAAAAAAAAAAAAADAIAABIADADAYgAAAAAAAOMAAAAAAAAANgIAABEAEgBQfQAAAAAAAAgAAAAAAAAA"
    "UQIAABIADACwYwAAAAAAAJ8BAAAAAAAAYwIAABIAAAAAAAAAAAAAAAAAAAAAAAAAfgIAABIAAAAAAAAAAAAAAAAAAAAAAAAAjgIA"
    "ABIADABQZQAAAAAAAIABAAAAAAAAqQIAABIADADQZgAAAAAAADYEAAAAAAAAuQIAABIAAAAAAAAAAAAAAAAAAAAAAAAAwAIAABIA"
    "AAAAAAAAAAAAAAAAAAAAAAAA1gIAABIAAAAAAAAAAAAAAAAAAAAAAAAA3wIAABIAAAAAAAAAAAAAAAAAAAAAAAAA7QIAABIAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAgMAABIAAAAAAAAAAAAAAAAAAAAAAAAAGQMAABIAAAAAAAAAAAAAAAAAAAAAAAAANgMAABIAAAAAAAAA"
    "AAAAAAAAAAAAAAAATwMAABEAGQCIkAAAAAAAAAEAAAAAAAAAawMAABIAAAAAAAAAAAAAAAAAAAAAAAAAAC5keW5zeW0ALmdudS52"
    "ZXJzaW9uAC5nbnUudmVyc2lvbl9yAC5nbnUuaGFzaAAuZHluc3RyAC5yZWxhLmR5bgAucmVsYS5wbHQALnJvZGF0YQAuaGlwX2Zh"
    "dGJpbgAuZWhfZnJhbWVfaGRyAC5laF9mcmFtZQAudGV4dAAuaW5pdAAuZmluaQAucGx0AC5pbml0X2FycmF5AC5maW5pX2FycmF5"
    "AC5kYXRhLnJlbC5ybwAuZHluYW1pYwAuZ290AC5yZWxyb19wYWRkaW5nAC5kYXRhAC5oaXBGYXRCaW5TZWdtZW50AC5nb3QucGx0"
    "AC5ic3MALmNvbW1lbnQALnN5bXRhYgAuc2hzdHJ0YWIALnN0cnRhYgAAY3J0YmVnaW4uYwBfX2RvX2luaXQAX19kb19pbml0Ll9f"
    "aW5pdGlhbGl6ZWQAX19FSF9GUkFNRV9MSVNUX18AX19kb19pbml0Ll9fb2JqZWN0AF9fZG9fZmluaQBfX2RvX2ZpbmkuX19maW5h"
    "bGl6ZWQAX19pbml0AF9fZmluaQBteGZwNF9mdXNlZC5oaXAAX1pMNnNfZm4zMgBfWkw3c19mbjE5MgBfWkw3c19tb2QzMgBfWkw4"
    "c19tb2QxOTIAX19oaXBfbW9kdWxlX2N0b3IAX19oaXBfZ3B1YmluX2hhbmRsZV81MDIzZGY0M2ZhYzhkYTU3AF9faGlwX2ZhdGJp"
    "bl93cmFwcGVyAF9faGlwX21vZHVsZV9kdG9yAGNydGVuZC5jAF9fZ21vbl9zdGFydF9fAF9pbml0AF9HTE9CQUxfT0ZGU0VUX1RB"
    "QkxFXwBfZmluaQBfX3JlZ2lzdGVyX2ZyYW1lX2luZm8AX19jeGFfZmluYWxpemUAX19kc29faGFuZGxlAF9fZGVyZWdpc3Rlcl9m"
    "cmFtZV9pbmZvAF9fZGV2aWNlX3N0dWJfX2Z1c2VkX214ZnA0X2dlbW1fa2VybmVsAF9faGlwUG9wQ2FsbENvbmZpZ3VyYXRpb24A"
    "ZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwAaGlwTGF1bmNoS2VybmVsAF9fZGV2aWNlX3N0dWJfX2Z1c2VkX3F1YW50X3NodWZmbGVf"
    "a2VybmVsAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsAGxhdW5jaF9mdXNlZF9nZW1tAF9faGlwUHVzaENhbGxDb25maWd1cmF0"
    "aW9uAGhpcEdldExhc3RFcnJvcgBsYXVuY2hfZnVzZWRfcXVhbnRfc2h1ZmZsZQBsYXVuY2hfY29tYmluZWQAbWVtc2V0AGhpcE1v"
    "ZHVsZUxhdW5jaEtlcm5lbABzbnByaW50ZgBoaXBNb2R1bGVMb2FkAGhpcE1vZHVsZUdldEZ1bmN0aW9uAF9faGlwUmVnaXN0ZXJG"
    "YXRCaW5hcnkAX19oaXBSZWdpc3RlckZ1bmN0aW9uAGF0ZXhpdABfX2hpcFVucmVnaXN0ZXJGYXRCaW5hcnkAX19oaXBfY3VpZF81"
    "MDIzZGY0M2ZhYzhkYTU3AF9fY3hhX2F0ZXhpdABfX0VIX0ZSQU1FX0xJU1RfRU5EX18AX0RZTkFNSUMAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAALAAAAAgAAAAAAAAA4AgAAAAAAADgC"
    "AAAAAAAAcAIAAAAAAAAFAAAAAQAAAAgAAAAAAAAAGAAAAAAAAAAJAAAA////bwIAAAAAAAAAqAQAAAAAAACoBAAAAAAAADQAAAAA"
    "AAAAAQAAAAAAAAACAAAAAAAAAAIAAAAAAAAAFgAAAP7//28CAAAAAAAAANwEAAAAAAAA3AQAAAAAAABgAAAAAAAAAAUAAAADAAAA"
    "BAAAAAAAAAAAAAAAAAAAACUAAAD2//9vAgAAAAAAAABABQAAAAAAAEAFAAAAAAAASAAAAAAAAAABAAAAAAAAAAgAAAAAAAAAAAAA"
    "AAAAAAAvAAAAAwAAAAIAAAAAAAAAiAUAAAAAAACIBQAAAAAAAI0CAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAANwAAAAQA"
    "AAACAAAAAAAAABgIAAAAAAAAGAgAAAAAAAA4AQAAAAAAAAEAAAAAAAAACAAAAAAAAAAYAAAAAAAAAEEAAAAEAAAAQgAAAAAAAABQ"
    "CQAAAAAAAFAJAAAAAAAAgAEAAAAAAAABAAAAGAAAAAgAAAAAAAAAGAAAAAAAAABLAAAAAQAAADIAAAAAAAAA0AoAAAAAAADQCgAA"
    "AAAAACUBAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAUwAAAAEAAAACAAAAAAAAAAAQAAAAAAAAABAAAAAAAACoPgAAAAAA"
    "AAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAF8AAAABAAAAAgAAAAAAAACoTgAAAAAAAKhOAAAAAAAAXAAAAAAAAAAAAAAAAAAAAAQA"
    "AAAAAAAAAAAAAAAAAABtAAAAAQAAAAIAAAAAAAAACE8AAAAAAAAITwAAAAAAABwCAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAA"
    "AAAAdwAAAAEAAAAGAAAAAAAAADBhAAAAAAAAMFEAAAAAAADECgAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAH0AAAABAAAA"
    "BgAAAAAAAAD0awAAAAAAAPRbAAAAAAAAGwAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAACDAAAAAQAAAAYAAAAAAAAAEGwA"
    "AAAAAAAQXAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAiQAAAAEAAAAGAAAAAAAAACBsAAAAAAAAIFwAAAAA"
    "AAAQAQAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAI4AAAAOAAAAAwAAAAAAAAAwfQAAAAAAADBdAAAAAAAAEAAAAAAAAAAA"
    "AAAAAAAAAAgAAAAAAAAAAAAAAAAAAACaAAAADwAAAAMAAAAAAAAAQH0AAAAAAABAXQAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAA"
    "AAAAAAAAAAAAAAAApgAAAAEAAAADAAAAAAAAAEh9AAAAAAAASF0AAAAAAAAQAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAA"
    "ALMAAAAGAAAAAwAAAAAAAABYfQAAAAAAAFhdAAAAAAAA0AEAAAAAAAAFAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAC8AAAAAQAAAAMA"
    "AAAAAAAAKH8AAAAAAAAoXwAAAAAAADAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAwQAAAAgAAAADAAAAAAAAAFh/AAAA"
    "AAAAWF8AAAAAAACoAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAANAAAAABAAAAAwAAAAAAAABYjwAAAAAAAFhfAAAAAAAA"
    "CAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAADWAAAAAQAAAAMAAAAAAAAAYI8AAAAAAABgXwAAAAAAABgAAAAAAAAAAAAA"
    "AAAAAAAIAAAAAAAAAAAAAAAAAAAA6AAAAAEAAAADAAAAAAAAAHiPAAAAAAAAeF8AAAAAAACYAAAAAAAAAAAAAAAAAAAACAAAAAAA"
    "AAAAAAAAAAAAAPEAAAAIAAAAAwAAAAAAAAAQkAAAAAAAABBgAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAD2"
    "AAAAAQAAADAAAAAAAAAAAAAAAAAAAAAQYAAAAAAAADkBAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAA/wAAAAIAAAAAAAAA"
    "AAAAAAAAAAAAAAAAUGEAAAAAAADgBAAAAAAAAB0AAAAbAAAACAAAAAAAAAAYAAAAAAAAAAcBAAADAAAAAAAAAAAAAAAAAAAAAAAA"
    "ADBmAAAAAAAAGQEAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAARAQAAAwAAAAAAAAAAAAAAAAAAAAAAAABJZwAAAAAAAJcD"
    "AAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA"
)

def _load():
    try:
        so = base64.b64decode(_SO_B64)
        td = tempfile.mkdtemp()
        p = os.path.join(td, "k.so")
        with open(p, 'wb') as f: f.write(so)
        lib = ctypes.cdll.LoadLibrary(p)
        # Fused GEMM
        lib.launch_fused_gemm.restype = ctypes.c_int
        lib.launch_fused_gemm.argtypes = [ctypes.c_void_p]*4 + [ctypes.c_int]*6 + [ctypes.c_void_p]
        # Combined quant + ASM gemm
        lib.launch_combined.restype = ctypes.c_int
        lib.launch_combined.argtypes = (
            [ctypes.c_void_p]*3 +           # A_bf16, Aq_out, As_out
            [ctypes.c_int]*6 +              # m, k, m_pad_q, ks_pad, stride_a, stride_aq
            [ctypes.c_void_p]*3 +           # B_shuffle, B_scale_sh, C_out
            [ctypes.c_int]*5 +              # N, stride_bsh, stride_bsc, m_pad_gemm, log2_ksplit
            [ctypes.c_void_p]               # null
        )
        return lib
    except: return None

_lib = _load()
_out = {}
_qs = {}

def _fused_gemm(A, B_q, B_sc, m, n, k):
    B_q_u8 = B_q.view(torch.uint8)
    B_sc_u8 = B_sc.contiguous().view(torch.uint8)
    ksp = ((k//32+7)//8)*8
    key = (m,n)
    if key not in _out: _out[key] = torch.empty((m,n), dtype=torch.bfloat16, device='cuda')
    C = _out[key]
    _lib.launch_fused_gemm(
        ctypes.c_void_p(A.data_ptr()), ctypes.c_void_p(B_q_u8.data_ptr()),
        ctypes.c_void_p(B_sc_u8.data_ptr()), ctypes.c_void_p(C.data_ptr()),
        ctypes.c_int(m), ctypes.c_int(n), ctypes.c_int(k),
        ctypes.c_int(A.stride(0)), ctypes.c_int(B_q_u8.stride(0)),
        ctypes.c_int(ksp), ctypes.c_void_p(0))
    return C

def _choose_log2_ksplit(m, n, k):
    """Choose log2_k_split to maximize occupancy (256 CUs target)."""
    tile_M, tile_N = 32, 128
    m_pad = ((m + 31) // 32) * 32
    base_wgs = ((n + tile_N - 1) // tile_N) * ((m_pad + tile_M - 1) // tile_M)
    # Want at least 256 workgroups for full CU occupancy
    if base_wgs >= 256:
        return 0  # enough parallelism
    # Try increasing split-K
    for log2s in range(1, 6):
        if base_wgs * (1 << log2s) >= 256:
            return log2s
    return 5  # max split = 32

def _combined(A, B_shuffle, B_scale_sh, m, n, k):
    B_sh_u8 = B_shuffle.view(torch.uint8)
    B_sc_u8 = B_scale_sh.contiguous().view(torch.uint8)
    ks = k//32
    m_pad_q = ((m+255)//256)*256
    ks_pad = ((ks+7)//8)*8
    m_pad_gemm = ((m+31)//32)*32

    log2_ks = 0  # explicit split-K is slower for all our shapes

    key = (m_pad_q, k, ks_pad, m_pad_gemm, n)
    if key not in _qs:
        _qs[key] = {
            'Aq': torch.zeros(m_pad_q, k//2, dtype=torch.uint8, device='cuda'),
            'As': torch.zeros(m_pad_q * ks_pad, dtype=torch.uint8, device='cuda'),
            'C': torch.empty(m_pad_gemm, n, dtype=torch.bfloat16, device='cuda'),
        }
    c = _qs[key]

    err = _lib.launch_combined(
        ctypes.c_void_p(A.data_ptr()),
        ctypes.c_void_p(c['Aq'].data_ptr()),
        ctypes.c_void_p(c['As'].data_ptr()),
        ctypes.c_int(m), ctypes.c_int(k), ctypes.c_int(m_pad_q),
        ctypes.c_int(ks_pad), ctypes.c_int(A.stride(0)), ctypes.c_int(c['Aq'].stride(0)),
        ctypes.c_void_p(B_sh_u8.data_ptr()),
        ctypes.c_void_p(B_sc_u8.data_ptr()),
        ctypes.c_void_p(c['C'].data_ptr()),
        ctypes.c_int(n), ctypes.c_int(B_sh_u8.stride(0)), ctypes.c_int(B_sc_u8.stride(0)),
        ctypes.c_int(m_pad_gemm),
        ctypes.c_int(log2_ks),
        ctypes.c_void_p(0),
    )
    if err != 0:
        return None
    return c['C'][:m]

# Fallback
_a_cache = None
def _fallback(data):
    global _a_cache
    A, B, B_q, B_shuffle, B_scale_sh = data
    if _a_cache is not None and _a_cache[0] is A: return _a_cache[1], _a_cache[2]
    Aq, As = dynamic_mxfp4_quant(A)
    Ash = e8m0_shuffle(As).view(dtypes.fp8_e8m0)
    Aq = Aq.view(dtypes.fp4x2)
    _a_cache = (A, Aq, Ash)
    return Aq, Ash

_combined_ok = None

def custom_kernel(data: input_t) -> output_t:
    global _combined_ok
    A, B, B_q, B_shuffle, B_scale_sh = data
    m, k = A.shape
    n = B_q.shape[0]

    if _lib is not None and k <= 1024:
        return _fused_gemm(A, B_q, B_scale_sh, m, n, k)

    if _lib is not None and _combined_ok is not False:
        try:
            result = _combined(A, B_shuffle, B_scale_sh, m, n, k)
            if result is not None:
                _combined_ok = True
                return result
        except Exception as e:
            import sys
            print(f"COMBINED_FAIL: {e}", file=sys.stderr)
        _combined_ok = False

    # Fallback: Python quant + aiter gemm
    Aq, Ash = _fallback(data)
    return aiter.gemm_a4w4(Aq, B_shuffle, Ash, B_scale_sh, dtype=dtypes.bf16, bpreshuffle=True)
scrolls · 539 lines total

Source code from GPU Mode and the KernelBot dataset · June 9 Researcher Reciprocity License v1.0

Changes from previous submission

Against this author's previous submission submission 658361.

#!POPCORN leaderboard amd-mxfp4-mm
#!POPCORN gpu MI355X
"""
- MXFP4-MM Hybrid: dispatch by K size.
- K <= 1024: fused quant+GEMM HIP kernel (1 launch, ~9 us)
- K > 1024: HIP quant+shuffle (1 launch) + ASM gemm_a4w4 (1 launch, ~14-26 us)
+ MXFP4-MM: Hybrid with direct ASM GEMM launch.
+ K<=1024: fused HIP quant+GEMM (1 launch)
+ K>1024: combined C++ call: HIP quant + ASM gemm (2 launches, 0 Python round-trips)
"""
import os, ctypes, base64, tempfile
import torch
⋯ 3 unchanged lines
from aiter.utility.fp4_utils import e8m0_shuffle
from task import input_t, output_t
- # ---- Embedded .so (both kernels) ----
_SO_B64 = (
- "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"
+ "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"
- "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"
+ "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"
- "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"
- "NF9nZW1tX2tlcm5lbABfX2hpcFBvcENhbGxDb25maWd1cmF0aW9uAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsAGhpcExhdW5jaEtl"
- "cm5lbABfX2RldmljZV9zdHViX19mdXNlZF9xdWFudF9zaHVmZmxlX2tlcm5lbABmdXNlZF9xdWFudF9zaHVmZmxlX2tlcm5lbABs"
- "YXVuY2hfZnVzZWRfZ2VtbQBfX2hpcFB1c2hDYWxsQ29uZmlndXJhdGlvbgBoaXBHZXRMYXN0RXJyb3IAbGF1bmNoX2Z1c2VkX3F1"
- "YW50X3NodWZmbGUAX19oaXBSZWdpc3RlckZhdEJpbmFyeQBfX2hpcFJlZ2lzdGVyRnVuY3Rpb24AX19oaXBVbnJlZ2lzdGVyRmF0"
- "QmluYXJ5AF9faGlwX2N1aWRfNTAyM2RmNDNmYWM4ZGE1NwBfX2N4YV9hdGV4aXQAbGliYW1kaGlwNjQuc28uNwBoaXBfNC4yAGxp"
- "YmdjY19zLnNvLjEAR0NDXzMuMABsaWJjLnNvLjYAR0xJQkNfMi4yLjUAL29wdC9yb2NtLTcuMS4wL2xpYgBsaWJzdGRjKysuc28u"
- "NgBsaWJtLnNvLjYAAAAAACB4AAAAAAAACAAAAAAAAACwYAAAAAAAACh4AAAAAAAACAAAAAAAAABQZgAAAAAAADB4AAAAAAAACAAA"
- "AAAAAADwYAAAAAAAAEiKAAAAAAAACAAAAAAAAABIigAAAAAAAFiKAAAAAAAACAAAAAAAAAAAEAAAAAAAABh6AAAAAAAABgAAAAEA"
- "AAAAAAAAAAAAACB6AAAAAAAABgAAAAIAAAAAAAAAAAAAACh6AAAAAAAABgAAAAMAAAAAAAAAAAAAADB6AAAAAAAABgAAAAQAAAAA"
- "AAAAAAAAADh4AAAAAAAAAQAAAA0AAAAAAAAAAAAAADh6AAAAAAAABgAAAA4AAAAAAAAAAAAAAEB4AAAAAAAAAQAAAA8AAAAAAAAA"
- "AAAAAEB6AAAAAAAABgAAABAAAAAAAAAAAAAAAICKAAAAAAAABwAAAAIAAAAAAAAAAAAAAIiKAAAAAAAABwAAAAMAAAAAAAAAAAAA"
- "AJCKAAAAAAAABwAAAAQAAAAAAAAAAAAAAJiKAAAAAAAABwAAAAUAAAAAAAAAAAAAAKCKAAAAAAAABwAAAAYAAAAAAAAAAAAAAKiK"
- "AAAAAAAABwAAAAcAAAAAAAAAAAAAALCKAAAAAAAABwAAAAgAAAAAAAAAAAAAALiKAAAAAAAABwAAAAkAAAAAAAAAAAAAAMCKAAAA"
- "AAAABwAAAAoAAAAAAAAAAAAAAMiKAAAAAAAABwAAAAsAAAAAAAAAAAAAANCKAAAAAAAABwAAAAwAAAAAAAAAAAAAAGZ1c2VkX3F1"
- "YW50X3NodWZmbGVfa2VybmVsAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+ "AAAAAAAAAAAAACgBAAASAAAAAAAAAAAAAAAAAAAAAAAAAGMBAAASAAAAAAAAAAAAAAAAAAAAAAAAAGoBAAASAAAAAAAAAAAAAAAA"
+ "AAAAAAAAAIABAAASAAAAAAAAAAAAAAAAAAAAAAAAAIkBAAASAAAAAAAAAAAAAAAAAAAAAAAAAJcBAAASAAAAAAAAAAAAAAAAAAAA"
+ "AAAAAKwBAAASAAAAAAAAAAAAAAAAAAAAAAAAAMMBAAASAAAAAAAAAAAAAAAAAAAAAAAAANkBAAASAAAAAAAAAAAAAAAAAAAAAAAA"
+ "AA4CAAASAAAAAAAAAAAAAAAAAAAAAAAAAE0AAAASAAwAwGEAAAAAAAD0AAAAAAAAAOAAAAARABIAUH0AAAAAAAAIAAAAAAAAADgB"
+ "AAASAAwAUGUAAAAAAACAAQAAAAAAAFMBAAASAAwA0GYAAAAAAAA2BAAAAAAAAI4AAAARABIASH0AAAAAAAAIAAAAAAAAALYAAAAS"
+ "AAwAwGIAAAAAAADjAAAAAAAAAPsAAAASAAwAsGMAAAAAAACfAQAAAAAAAPIBAAARABkAiJAAAAAAAAABAAAAAAAAAAAAAQACAAMA"
+ "AgAEAAQABAAEAAMABAADAAQABAAEAAQABAADAAEAAQABAAEAAQABAAEAAQABAAEAGwIAADAAAAAQAAAAAQABADQCAAAwAAAAEAAA"
+ "AAEAAQBKAgAAMAAAAAAAAAByJwYPAAAEACwCAAAAAAAAUCZ5CwAAAgBCAgAAAAAAAHUaaQkAAAMAVAIAAAAAAAAAAAAAAgAAABIA"
+ "AAACAAAAGgAAAAAAARdBICAAAAQEiAiAAAASAAAAFgAAABjq0mqQGTnWSg0wjiGYUnLunGtKGMKPm9odJXy1h9G0AF9fZ21vbl9z"
+ "dGFydF9fAF9fcmVnaXN0ZXJfZnJhbWVfaW5mbwBfX2N4YV9maW5hbGl6ZQBfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mbwBfX2Rldmlj"
+ "ZV9zdHViX19mdXNlZF9teGZwNF9nZW1tX2tlcm5lbABfX2hpcFBvcENhbGxDb25maWd1cmF0aW9uAGZ1c2VkX214ZnA0X2dlbW1f"
+ "a2VybmVsAGhpcExhdW5jaEtlcm5lbABfX2RldmljZV9zdHViX19mdXNlZF9xdWFudF9zaHVmZmxlX2tlcm5lbABmdXNlZF9xdWFu"
+ "dF9zaHVmZmxlX2tlcm5lbABsYXVuY2hfZnVzZWRfZ2VtbQBfX2hpcFB1c2hDYWxsQ29uZmlndXJhdGlvbgBoaXBHZXRMYXN0RXJy"
+ "b3IAbGF1bmNoX2Z1c2VkX3F1YW50X3NodWZmbGUAbGF1bmNoX2NvbWJpbmVkAG1lbXNldABoaXBNb2R1bGVMYXVuY2hLZXJuZWwA"
+ "c25wcmludGYAaGlwTW9kdWxlTG9hZABoaXBNb2R1bGVHZXRGdW5jdGlvbgBfX2hpcFJlZ2lzdGVyRmF0QmluYXJ5AF9faGlwUmVn"
+ "aXN0ZXJGdW5jdGlvbgBfX2hpcFVucmVnaXN0ZXJGYXRCaW5hcnkAX19oaXBfY3VpZF81MDIzZGY0M2ZhYzhkYTU3AF9fY3hhX2F0"
+ "ZXhpdABsaWJhbWRoaXA2NC5zby43AGhpcF80LjIAbGliZ2NjX3Muc28uMQBHQ0NfMy4wAGxpYmMuc28uNgBHTElCQ18yLjIuNQAv"
+ "b3B0L3JvY20tNy4xLjAvbGliAGxpYnN0ZGMrKy5zby42AGxpYm0uc28uNgAAAAAwfQAAAAAAAAgAAAAAAAAAMGEAAAAAAAA4fQAA"
+ "AAAAAAgAAAAAAAAAEGsAAAAAAABAfQAAAAAAAAgAAAAAAAAAcGEAAAAAAABYjwAAAAAAAAgAAAAAAAAAWI8AAAAAAABojwAAAAAA"
+ "AAgAAAAAAAAAABAAAAAAAAAofwAAAAAAAAYAAAABAAAAAAAAAAAAAAAwfwAAAAAAAAYAAAACAAAAAAAAAAAAAAA4fwAAAAAAAAYA"
+ "AAADAAAAAAAAAAAAAABAfwAAAAAAAAYAAAAEAAAAAAAAAAAAAABIfQAAAAAAAAEAAAASAAAAAAAAAAAAAABQfwAAAAAAAAYAAAAT"
+ "AAAAAAAAAAAAAABIfwAAAAAAAAYAAAAWAAAAAAAAAAAAAABQfQAAAAAAAAEAAAAXAAAAAAAAAAAAAACQjwAAAAAAAAcAAAACAAAA"
+ "AAAAAAAAAACYjwAAAAAAAAcAAAADAAAAAAAAAAAAAACgjwAAAAAAAAcAAAAEAAAAAAAAAAAAAACojwAAAAAAAAcAAAAFAAAAAAAA"
+ "AAAAAACwjwAAAAAAAAcAAAAGAAAAAAAAAAAAAAC4jwAAAAAAAAcAAAAHAAAAAAAAAAAAAADAjwAAAAAAAAcAAAAIAAAAAAAAAAAA"
+ "AADIjwAAAAAAAAcAAAAJAAAAAAAAAAAAAADQjwAAAAAAAAcAAAAKAAAAAAAAAAAAAADYjwAAAAAAAAcAAAALAAAAAAAAAAAAAADg"
+ "jwAAAAAAAAcAAAAMAAAAAAAAAAAAAADojwAAAAAAAAcAAAANAAAAAAAAAAAAAADwjwAAAAAAAAcAAAAOAAAAAAAAAAAAAAD4jwAA"
+ "AAAAAAcAAAAPAAAAAAAAAAAAAAAAkAAAAAAAAAcAAAAQAAAAAAAAAAAAAAAIkAAAAAAAAAcAAAARAAAAAAAAAAAAAABfWk41YWl0"
+ "ZXI0MWY0Z2VtbV9iZjE2X3BlcjF4MzJGcDRfQnByZVNodWZmbGVfMzJ4MTI4RQAlc2Y0Z2VtbV9iZjE2X3BlcjF4MzJGcDRfQnBy"
+ "ZVNodWZmbGVfMzJ4MTI4LmNvACVzZjRnZW1tX2JmMTZfcGVyMXgzMkZwNF9CcHJlU2h1ZmZsZV8xOTJ4MTI4LmNvAGZ1c2VkX3F1"
+ "YW50X3NodWZmbGVfa2VybmVsAC9ob21lL3J1bm5lci9haXRlci9oc2EvZ2Z4OTUwL2Y0Z2VtbS8AX1pONWFpdGVyNDJmNGdlbW1f"
+ "YmYxNl9wZXIxeDMyRnA0X0JwcmVTaHVmZmxlXzE5MngxMjhFAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
⋯ 7 unchanged lines
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF9fQ0xBTkdfT0ZGTE9BRF9CVU5ETEVfXwIAAAAA"
"AAAAABAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAaG9zdC14ODZfNjQtdW5rbm93bi1saW51eC1nbnUtABAAAAAAAACoLgAAAAAAAB8A"
"AAAAAAAAaGlwdjQtYW1kZ2NuLWFtZC1hbWRoc2EtLWdmeDk1MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
⋯ 208 unchanged lines
"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"
- "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"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAAAAAAABwIAAAAAAAABAAAAAAAAAMIBAAAAAAAAAQAAAAAAAAAbAgAAAAAAAAEA"
- "AAAAAAAAKgIAAAAAAAABAAAAAAAAANsBAAAAAAAAAQAAAAAAAADxAQAAAAAAAAcAAAAAAAAAGAcAAAAAAAAIAAAAAAAAADgBAAAA"
- "AAAACQAAAAAAAAAYAAAAAAAAAPn//28AAAAABQAAAAAAAAAXAAAAAAAAAFAIAAAAAAAAAgAAAAAAAAAIAQAAAAAAAAMAAAAAAAAA"
- "aIoAAAAAAAAUAAAAAAAAAAcAAAAAAAAABgAAAAAAAAA4AgAAAAAAAAsAAAAAAAAAGAAAAAAAAAAFAAAAAAAAAOAEAAAAAAAACgAA"
- "AAAAAAA0AgAAAAAAAPX+/28AAAAAoAQAAAAAAAAZAAAAAAAAACB4AAAAAAAAGwAAAAAAAAAQAAAAAAAAABoAAAAAAAAAMHgAAAAA"
- "AAAcAAAAAAAAAAgAAAAAAAAADAAAAAAAAAA0ZwAAAAAAAA0AAAAAAAAAUGcAAAAAAADw//9vAAAAABgEAAAAAAAA/v//bwAAAABA"
- "BAAAAAAAAP///28AAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAABGUElIAQAAAAAAAAAAAAAAAAAAAAAAAABIeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2ZwAAAAAA"
- "AIZnAAAAAAAAlmcAAAAAAACmZwAAAAAAALZnAAAAAAAAxmcAAAAAAADWZwAAAAAAAOZnAAAAAAAA9mcAAAAAAAAGaAAAAAAAABZo"
- "AAAAAAAAAEFNRCBjbGFuZyB2ZXJzaW9uIDIwLjAuMGdpdCAoaHR0cHM6Ly9naXRodWIuY29tL1JhZGVvbk9wZW5Db21wdXRlL2xs"
- "dm0tcHJvamVjdCByb2MtNy4xLjAgMjU0MjUgMWIwZWFkYTZiMGVlOTNlMmU2OTRjOGMxNDZkMjNmY2E5MGJjMTFjNSkATGlua2Vy"
- "OiBBTUQgTExEIDIwLjAuMCAoL2xvbmdlcl9wYXRobmFtZV9zb190aGF0X3JwbXNfY2FuX3N1cHBvcnRfcGFja2FnaW5nX3RoZV9k"
- "ZWJ1Z19pbmZvX2Zvcl9hbGxfb3NfcHJvZmlsZXMvc3JjL2xsdm0tcHJvamVjdC9sbHZtIDFiMGVhZGE2YjBlZTkzZTJlNjk0Yzhj"
- "MTQ2ZDIzZmNhOTBiYzExYzUpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABADx/wAAAAAAAAAAAAAAAAAAAAAM"
- "AAAAAgAMALBgAAAAAAAAOAAAAAAAAAAWAAAAAQAZANiKAAAAAAAAAQAAAAAAAAAuAAAAAQALAABPAAAAAAAAAAAAAAAAAABAAAAA"
- "AQAZAOCKAAAAAAAAQAAAAAAAAABTAAAAAgAMAPBgAAAAAAAASgAAAAAAAABdAAAAAQAZACCLAAAAAAAAAQAAAAAAAABzAAAAAQAQ"
- "ACB4AAAAAAAACAAAAAAAAAB6AAAAAQARADB4AAAAAAAACAAAAAAAAABOAQAAAQIWAEiKAAAAAAAACAAAAAAAAACBAAAABADx/wAA"
- "AAAAAAAAAAAAAAAAAACRAAAAAgAMAFBmAAAAAAAAlAAAAAAAAACjAAAAAQAZACiLAAAAAAAACAAAAAAAAADIAAAAAQAXAFCKAAAA"
- "AAAAGAAAAAAAAADdAAAAAgAMAPBmAAAAAAAAIgAAAAAAAADvAAAABADx/wAAAAAAAAAAAAAAAAAAAADvAgAAAQILAABPAAAAAAAA"
- "BAAAAAAAAAAHAQAAAgINADRnAAAAAAAAAAAAAAAAAAAjAQAAAgIOAFBnAAAAAAAAAAAAAAAAAAANAQAAAAIYAGiKAAAAAAAAAAAA"
- "AAAAAAAFAwAAAAITAEh4AAAAAAAAAAAAAAAAAACmAgAAAgIMACBnAAAAAAAAEgAAAAAAAAD4AAAAIAAAAAAAAAAAAAAAAAAAAAAA"
- "AAApAQAAIgAAAAAAAAAAAAAAAAAAAAAAAAA/AQAAIgAAAAAAAAAAAAAAAAAAAAAAAABbAQAAIgAAAAAAAAAAAAAAAAAAAAAAAABz"
- "AQAAEgAMAEBhAAAAAAAA9AAAAAAAAACaAQAAEgAAAAAAAAAAAAAAAAAAAAAAAAC0AQAAEQASADh4AAAAAAAACAAAAAAAAADMAQAA"
- "EgAAAAAAAAAAAAAAAAAAAAAAAADcAQAAEgAMAEBiAAAAAAAA4wAAAAAAAAAGAgAAEQASAEB4AAAAAAAACAAAAAAAAAAhAgAAEgAM"
- "ADBjAAAAAAAAnwEAAAAAAAAzAgAAEgAAAAAAAAAAAAAAAAAAAAAAAABOAgAAEgAAAAAAAAAAAAAAAAAAAAAAAABeAgAAEgAMANBk"
- "AAAAAAAAgAEAAAAAAAB5AgAAEgAAAAAAAAAAAAAAAAAAAAAAAACQAgAAEgAAAAAAAAAAAAAAAAAAAAAAAACtAgAAEgAAAAAAAAAA"
- "AAAAAAAAAAAAAADGAgAAEQAZADCLAAAAAAAAAQAAAAAAAADiAgAAEgAAAAAAAAAAAAAAAAAAAAAAAAAALmR5bnN5bQAuZ251LnZl"
- "cnNpb24ALmdudS52ZXJzaW9uX3IALmdudS5oYXNoAC5keW5zdHIALnJlbGEuZHluAC5yZWxhLnBsdAAucm9kYXRhAC5oaXBfZmF0"
- "YmluAC5laF9mcmFtZV9oZHIALmVoX2ZyYW1lAC50ZXh0AC5pbml0AC5maW5pAC5wbHQALmluaXRfYXJyYXkALmZpbmlfYXJyYXkA"
- "LmRhdGEucmVsLnJvAC5keW5hbWljAC5nb3QALnJlbHJvX3BhZGRpbmcALmRhdGEALmhpcEZhdEJpblNlZ21lbnQALmdvdC5wbHQA"
- "LmJzcwAuY29tbWVudAAuc3ltdGFiAC5zaHN0cnRhYgAuc3RydGFiAABjcnRiZWdpbi5jAF9fZG9faW5pdABfX2RvX2luaXQuX19p"
- "bml0aWFsaXplZABfX0VIX0ZSQU1FX0xJU1RfXwBfX2RvX2luaXQuX19vYmplY3QAX19kb19maW5pAF9fZG9fZmluaS5fX2ZpbmFs"
- "aXplZABfX2luaXQAX19maW5pAG14ZnA0X2Z1c2VkLmhpcABfX2hpcF9tb2R1bGVfY3RvcgBfX2hpcF9ncHViaW5faGFuZGxlXzUw"
- "MjNkZjQzZmFjOGRhNTcAX19oaXBfZmF0YmluX3dyYXBwZXIAX19oaXBfbW9kdWxlX2R0b3IAY3J0ZW5kLmMAX19nbW9uX3N0YXJ0"
- "X18AX2luaXQAX0dMT0JBTF9PRkZTRVRfVEFCTEVfAF9maW5pAF9fcmVnaXN0ZXJfZnJhbWVfaW5mbwBfX2N4YV9maW5hbGl6ZQBf"
- "X2Rzb19oYW5kbGUAX19kZXJlZ2lzdGVyX2ZyYW1lX2luZm8AX19kZXZpY2Vfc3R1Yl9fZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwA"
- "X19oaXBQb3BDYWxsQ29uZmlndXJhdGlvbgBmdXNlZF9teGZwNF9nZW1tX2tlcm5lbABoaXBMYXVuY2hLZXJuZWwAX19kZXZpY2Vf"
- "c3R1Yl9fZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwAZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwAbGF1bmNoX2Z1c2VkX2dl"
- "bW0AX19oaXBQdXNoQ2FsbENvbmZpZ3VyYXRpb24AaGlwR2V0TGFzdEVycm9yAGxhdW5jaF9mdXNlZF9xdWFudF9zaHVmZmxlAF9f"
- "aGlwUmVnaXN0ZXJGYXRCaW5hcnkAX19oaXBSZWdpc3RlckZ1bmN0aW9uAGF0ZXhpdABfX2hpcFVucmVnaXN0ZXJGYXRCaW5hcnkA"
- "X19oaXBfY3VpZF81MDIzZGY0M2ZhYzhkYTU3AF9fY3hhX2F0ZXhpdABfX0VIX0ZSQU1FX0xJU1RfRU5EX18AX0RZTkFNSUMAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACwAAAAIAAAAA"
- "AAAAOAIAAAAAAAA4AgAAAAAAAOABAAAAAAAABQAAAAEAAAAIAAAAAAAAABgAAAAAAAAACQAAAP///28CAAAAAAAAABgEAAAAAAAA"
- "GAQAAAAAAAAoAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAACAAAAAAAAABYAAAD+//9vAgAAAAAAAABABAAAAAAAAEAEAAAAAAAAYAAA"
- "AAAAAAAFAAAAAwAAAAQAAAAAAAAAAAAAAAAAAAAlAAAA9v//bwIAAAAAAAAAoAQAAAAAAACgBAAAAAAAAEAAAAAAAAAAAQAAAAAA"
- "AAAIAAAAAAAAAAAAAAAAAAAALwAAAAMAAAACAAAAAAAAAOAEAAAAAAAA4AQAAAAAAAA0AgAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA"
- "AAAAAAAAADcAAAAEAAAAAgAAAAAAAAAYBwAAAAAAABgHAAAAAAAAOAEAAAAAAAABAAAAAAAAAAgAAAAAAAAAGAAAAAAAAABBAAAA"
- "BAAAAEIAAAAAAAAAUAgAAAAAAABQCAAAAAAAAAgBAAAAAAAAAQAAABgAAAAIAAAAAAAAABgAAAAAAAAASwAAAAEAAAAyAAAAAAAA"
- "AFgJAAAAAAAAWAkAAAAAAAAzAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAFMAAAABAAAAAgAAAAAAAAAAEAAAAAAAAAAQ"
- "AAAAAAAAqD4AAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAABfAAAAAQAAAAIAAAAAAAAAqE4AAAAAAACoTgAAAAAAAFQAAAAA"
- "AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAbQAAAAEAAAACAAAAAAAAAABPAAAAAAAAAE8AAAAAAACkAQAAAAAAAAAAAAAAAAAA"
- "CAAAAAAAAAAAAAAAAAAAAHcAAAABAAAABgAAAAAAAACwYAAAAAAAALBQAAAAAAAAhAYAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAA"
- "AAAAAAB9AAAAAQAAAAYAAAAAAAAANGcAAAAAAAA0VwAAAAAAABsAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAgwAAAAEA"
- "AAAGAAAAAAAAAFBnAAAAAAAAUFcAAAAAAAANAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAIkAAAABAAAABgAAAAAAAABg"
- "ZwAAAAAAAGBXAAAAAAAAwAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAACOAAAADgAAAAMAAAAAAAAAIHgAAAAAAAAgWAAA"
- "AAAAABAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAmgAAAA8AAAADAAAAAAAAADB4AAAAAAAAMFgAAAAAAAAIAAAAAAAA"
- "AAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAKYAAAABAAAAAwAAAAAAAAA4eAAAAAAAADhYAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAgA"
- "AAAAAAAAAAAAAAAAAACzAAAABgAAAAMAAAAAAAAASHgAAAAAAABIWAAAAAAAANABAAAAAAAABQAAAAAAAAAIAAAAAAAAABAAAAAA"
- "AAAAvAAAAAEAAAADAAAAAAAAABh6AAAAAAAAGFoAAAAAAAAwAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAMEAAAAIAAAA"
- "AwAAAAAAAABIegAAAAAAAEhaAAAAAAAAuAUAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAADQAAAAAQAAAAMAAAAAAAAASIoA"
- "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"
+ "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"
+ "AAAAAACAAQAAAAAAAAMAAAAAAAAAeI8AAAAAAAAUAAAAAAAAAAcAAAAAAAAABgAAAAAAAAA4AgAAAAAAAAsAAAAAAAAAGAAAAAAA"
+ "AAAFAAAAAAAAAIgFAAAAAAAACgAAAAAAAACNAgAAAAAAAPX+/28AAAAAQAUAAAAAAAAZAAAAAAAAADB9AAAAAAAAGwAAAAAAAAAQ"
+ "AAAAAAAAABoAAAAAAAAAQH0AAAAAAAAcAAAAAAAAAAgAAAAAAAAADAAAAAAAAAD0awAAAAAAAA0AAAAAAAAAEGwAAAAAAADw//9v"
+ "AAAAAKgEAAAAAAAA/v//bwAAAADcBAAAAAAAAP///28AAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGUElIAQAAAAAAAAAAAAAAAAAAAAAAAABYfQAAAAAAAAAA"
+ "AAAAAAAAAAAAAAAAAAA2bAAAAAAAAEZsAAAAAAAAVmwAAAAAAABmbAAAAAAAAHZsAAAAAAAAhmwAAAAAAACWbAAAAAAAAKZsAAAA"
+ "AAAAtmwAAAAAAADGbAAAAAAAANZsAAAAAAAA5mwAAAAAAAD2bAAAAAAAAAZtAAAAAAAAFm0AAAAAAAAmbQAAAAAAAABBTUQgY2xh"
+ "bmcgdmVyc2lvbiAyMC4wLjBnaXQgKGh0dHBzOi8vZ2l0aHViLmNvbS9SYWRlb25PcGVuQ29tcHV0ZS9sbHZtLXByb2plY3Qgcm9j"
+ "LTcuMS4wIDI1NDI1IDFiMGVhZGE2YjBlZTkzZTJlNjk0YzhjMTQ2ZDIzZmNhOTBiYzExYzUpAExpbmtlcjogQU1EIExMRCAyMC4w"
+ "LjAgKC9sb25nZXJfcGF0aG5hbWVfc29fdGhhdF9ycG1zX2Nhbl9zdXBwb3J0X3BhY2thZ2luZ190aGVfZGVidWdfaW5mb19mb3Jf"
+ "YWxsX29zX3Byb2ZpbGVzL3NyYy9sbHZtLXByb2plY3QvbGx2bSAxYjBlYWRhNmIwZWU5M2UyZTY5NGM4YzE0NmQyM2ZjYTkwYmMx"
+ "MWM1KQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQA8f8AAAAAAAAAAAAAAAAAAAAADAAAAAIADAAwYQAAAAAA"
+ "ADgAAAAAAAAAFgAAAAEAGQAQkAAAAAAAAAEAAAAAAAAALgAAAAEACwAITwAAAAAAAAAAAAAAAAAAQAAAAAEAGQAYkAAAAAAAAEAA"
+ "AAAAAAAAUwAAAAIADABwYQAAAAAAAEoAAAAAAAAAXQAAAAEAGQBYkAAAAAAAAAEAAAAAAAAAcwAAAAEAEAAwfQAAAAAAAAgAAAAA"
+ "AAAAegAAAAEAEQBAfQAAAAAAAAgAAAAAAAAAfgEAAAECFgBYjwAAAAAAAAgAAAAAAAAAgQAAAAQA8f8AAAAAAAAAAAAAAAAAAAAA"
+ "kQAAAAEAGQBgkAAAAAAAAAgAAAAAAAAAnAAAAAEAGQBokAAAAAAAAAgAAAAAAAAAqAAAAAEAGQBwkAAAAAAAAAgAAAAAAAAAtAAA"
+ "AAEAGQB4kAAAAAAAAAgAAAAAAAAAwQAAAAIADAAQawAAAAAAAJQAAAAAAAAA0wAAAAEAGQCAkAAAAAAAAAgAAAAAAAAA+AAAAAEA"
+ "FwBgjwAAAAAAABgAAAAAAAAADQEAAAIADACwawAAAAAAACIAAAAAAAAAHwEAAAQA8f8AAAAAAAAAAAAAAAAAAAAAeAMAAAECCwAI"
+ "TwAAAAAAAAQAAAAAAAAANwEAAAICDQD0awAAAAAAAAAAAAAAAAAAUwEAAAICDgAQbAAAAAAAAAAAAAAAAAAAPQEAAAACGAB4jwAA"
+ "AAAAAAAAAAAAAAAAjgMAAAACEwBYfQAAAAAAAAAAAAAAAAAALwMAAAICDADgawAAAAAAABIAAAAAAAAAKAEAACAAAAAAAAAAAAAA"
+ "AAAAAAAAAAAAWQEAACIAAAAAAAAAAAAAAAAAAAAAAAAAbwEAACIAAAAAAAAAAAAAAAAAAAAAAAAAiwEAACIAAAAAAAAAAAAAAAAA"
+ "AAAAAAAAowEAABIADADAYQAAAAAAAPQAAAAAAAAAygEAABIAAAAAAAAAAAAAAAAAAAAAAAAA5AEAABEAEgBIfQAAAAAAAAgAAAAA"
+ "AAAA/AEAABIAAAAAAAAAAAAAAAAAAAAAAAAADAIAABIADADAYgAAAAAAAOMAAAAAAAAANgIAABEAEgBQfQAAAAAAAAgAAAAAAAAA"
+ "UQIAABIADACwYwAAAAAAAJ8BAAAAAAAAYwIAABIAAAAAAAAAAAAAAAAAAAAAAAAAfgIAABIAAAAAAAAAAAAAAAAAAAAAAAAAjgIA"
+ "ABIADABQZQAAAAAAAIABAAAAAAAAqQIAABIADADQZgAAAAAAADYEAAAAAAAAuQIAABIAAAAAAAAAAAAAAAAAAAAAAAAAwAIAABIA"
+ "AAAAAAAAAAAAAAAAAAAAAAAA1gIAABIAAAAAAAAAAAAAAAAAAAAAAAAA3wIAABIAAAAAAAAAAAAAAAAAAAAAAAAA7QIAABIAAAAA"
+ "AAAAAAAAAAAAAAAAAAAAAgMAABIAAAAAAAAAAAAAAAAAAAAAAAAAGQMAABIAAAAAAAAAAAAAAAAAAAAAAAAANgMAABIAAAAAAAAA"
+ "AAAAAAAAAAAAAAAATwMAABEAGQCIkAAAAAAAAAEAAAAAAAAAawMAABIAAAAAAAAAAAAAAAAAAAAAAAAAAC5keW5zeW0ALmdudS52"
+ "ZXJzaW9uAC5nbnUudmVyc2lvbl9yAC5nbnUuaGFzaAAuZHluc3RyAC5yZWxhLmR5bgAucmVsYS5wbHQALnJvZGF0YQAuaGlwX2Zh"
+ "dGJpbgAuZWhfZnJhbWVfaGRyAC5laF9mcmFtZQAudGV4dAAuaW5pdAAuZmluaQAucGx0AC5pbml0X2FycmF5AC5maW5pX2FycmF5"
+ "AC5kYXRhLnJlbC5ybwAuZHluYW1pYwAuZ290AC5yZWxyb19wYWRkaW5nAC5kYXRhAC5oaXBGYXRCaW5TZWdtZW50AC5nb3QucGx0"
+ "AC5ic3MALmNvbW1lbnQALnN5bXRhYgAuc2hzdHJ0YWIALnN0cnRhYgAAY3J0YmVnaW4uYwBfX2RvX2luaXQAX19kb19pbml0Ll9f"
+ "aW5pdGlhbGl6ZWQAX19FSF9GUkFNRV9MSVNUX18AX19kb19pbml0Ll9fb2JqZWN0AF9fZG9fZmluaQBfX2RvX2ZpbmkuX19maW5h"
+ "bGl6ZWQAX19pbml0AF9fZmluaQBteGZwNF9mdXNlZC5oaXAAX1pMNnNfZm4zMgBfWkw3c19mbjE5MgBfWkw3c19tb2QzMgBfWkw4"
+ "c19tb2QxOTIAX19oaXBfbW9kdWxlX2N0b3IAX19oaXBfZ3B1YmluX2hhbmRsZV81MDIzZGY0M2ZhYzhkYTU3AF9faGlwX2ZhdGJp"
+ "bl93cmFwcGVyAF9faGlwX21vZHVsZV9kdG9yAGNydGVuZC5jAF9fZ21vbl9zdGFydF9fAF9pbml0AF9HTE9CQUxfT0ZGU0VUX1RB"
+ "QkxFXwBfZmluaQBfX3JlZ2lzdGVyX2ZyYW1lX2luZm8AX19jeGFfZmluYWxpemUAX19kc29faGFuZGxlAF9fZGVyZWdpc3Rlcl9m"
+ "cmFtZV9pbmZvAF9fZGV2aWNlX3N0dWJfX2Z1c2VkX214ZnA0X2dlbW1fa2VybmVsAF9faGlwUG9wQ2FsbENvbmZpZ3VyYXRpb24A"
+ "ZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwAaGlwTGF1bmNoS2VybmVsAF9fZGV2aWNlX3N0dWJfX2Z1c2VkX3F1YW50X3NodWZmbGVf"
+ "a2VybmVsAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsAGxhdW5jaF9mdXNlZF9nZW1tAF9faGlwUHVzaENhbGxDb25maWd1cmF0"
+ "aW9uAGhpcEdldExhc3RFcnJvcgBsYXVuY2hfZnVzZWRfcXVhbnRfc2h1ZmZsZQBsYXVuY2hfY29tYmluZWQAbWVtc2V0AGhpcE1v"
+ "ZHVsZUxhdW5jaEtlcm5lbABzbnByaW50ZgBoaXBNb2R1bGVMb2FkAGhpcE1vZHVsZUdldEZ1bmN0aW9uAF9faGlwUmVnaXN0ZXJG"
+ "YXRCaW5hcnkAX19oaXBSZWdpc3RlckZ1bmN0aW9uAGF0ZXhpdABfX2hpcFVucmVnaXN0ZXJGYXRCaW5hcnkAX19oaXBfY3VpZF81"
+ "MDIzZGY0M2ZhYzhkYTU3AF9fY3hhX2F0ZXhpdABfX0VIX0ZSQU1FX0xJU1RfRU5EX18AX0RZTkFNSUMAAAAAAAAAAAAAAAAAAAAA"
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAALAAAAAgAAAAAAAAA4AgAAAAAAADgC"
+ "AAAAAAAAcAIAAAAAAAAFAAAAAQAAAAgAAAAAAAAAGAAAAAAAAAAJAAAA////bwIAAAAAAAAAqAQAAAAAAACoBAAAAAAAADQAAAAA"
+ "AAAAAQAAAAAAAAACAAAAAAAAAAIAAAAAAAAAFgAAAP7//28CAAAAAAAAANwEAAAAAAAA3AQAAAAAAABgAAAAAAAAAAUAAAADAAAA"
+ "BAAAAAAAAAAAAAAAAAAAACUAAAD2//9vAgAAAAAAAABABQAAAAAAAEAFAAAAAAAASAAAAAAAAAABAAAAAAAAAAgAAAAAAAAAAAAA"
+ "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"
)
- # ---- Load library ----
def _load():
try:
so = base64.b64decode(_SO_B64)
⋯ 3 unchanged lines
lib = ctypes.cdll.LoadLibrary(p)
# Fused GEMM
lib.launch_fused_gemm.restype = ctypes.c_int
- lib.launch_fused_gemm.argtypes = [
- ctypes.c_void_p]*4 + [ctypes.c_int]*6 + [ctypes.c_void_p]
- # Fused quant+shuffle
- lib.launch_fused_quant_shuffle.restype = ctypes.c_int
- lib.launch_fused_quant_shuffle.argtypes = [
- ctypes.c_void_p]*3 + [ctypes.c_int]*6 + [ctypes.c_void_p]
+ lib.launch_fused_gemm.argtypes = [ctypes.c_void_p]*4 + [ctypes.c_int]*6 + [ctypes.c_void_p]
+ # Combined quant + ASM gemm
+ lib.launch_combined.restype = ctypes.c_int
+ lib.launch_combined.argtypes = (
+ [ctypes.c_void_p]*3 + # A_bf16, Aq_out, As_out
+ [ctypes.c_int]*6 + # m, k, m_pad_q, ks_pad, stride_a, stride_aq
+ [ctypes.c_void_p]*3 + # B_shuffle, B_scale_sh, C_out
+ [ctypes.c_int]*5 + # N, stride_bsh, stride_bsc, m_pad_gemm, log2_ksplit
+ [ctypes.c_void_p] # null
+ )
return lib
except: return None
_lib = _load()
+ _out = {}
+ _qs = {}
- # ---- Caches ----
- _out_cache = {}
- _qs_cache = {}
-
def _fused_gemm(A, B_q, B_sc, m, n, k):
- """Single launch: quant A + GEMM → C. Best for small K."""
B_q_u8 = B_q.view(torch.uint8)
B_sc_u8 = B_sc.contiguous().view(torch.uint8)
- ks_pad = ((k//32+7)//8)*8
+ ksp = ((k//32+7)//8)*8
key = (m,n)
- if key not in _out_cache:
- _out_cache[key] = torch.empty((m,n), dtype=torch.bfloat16, device='cuda')
- C = _out_cache[key]
+ if key not in _out: _out[key] = torch.empty((m,n), dtype=torch.bfloat16, device='cuda')
+ C = _out[key]
_lib.launch_fused_gemm(
ctypes.c_void_p(A.data_ptr()), ctypes.c_void_p(B_q_u8.data_ptr()),
ctypes.c_void_p(B_sc_u8.data_ptr()), ctypes.c_void_p(C.data_ptr()),
ctypes.c_int(m), ctypes.c_int(n), ctypes.c_int(k),
ctypes.c_int(A.stride(0)), ctypes.c_int(B_q_u8.stride(0)),
- ctypes.c_int(ks_pad), ctypes.c_void_p(0))
+ ctypes.c_int(ksp), ctypes.c_void_p(0))
return C
- def _hip_quant_shuffle(A, m, k):
- """HIP quant+shuffle → (A_q, A_scale_sh). For large K path."""
+ def _choose_log2_ksplit(m, n, k):
+ """Choose log2_k_split to maximize occupancy (256 CUs target)."""
+ tile_M, tile_N = 32, 128
+ m_pad = ((m + 31) // 32) * 32
+ base_wgs = ((n + tile_N - 1) // tile_N) * ((m_pad + tile_M - 1) // tile_M)
+ # Want at least 256 workgroups for full CU occupancy
+ if base_wgs >= 256:
+ return 0 # enough parallelism
+ # Try increasing split-K
+ for log2s in range(1, 6):
+ if base_wgs * (1 << log2s) >= 256:
+ return log2s
+ return 5 # max split = 32
+
+ def _combined(A, B_shuffle, B_scale_sh, m, n, k):
+ B_sh_u8 = B_shuffle.view(torch.uint8)
+ B_sc_u8 = B_scale_sh.contiguous().view(torch.uint8)
ks = k//32
- m_pad = ((m+255)//256)*256
+ m_pad_q = ((m+255)//256)*256
ks_pad = ((ks+7)//8)*8
- key = (m_pad, k, ks_pad)
- if key not in _qs_cache:
- _qs_cache[key] = {
- 'Aq': torch.zeros(m_pad, k//2, dtype=torch.uint8, device='cuda'),
- 'As': torch.zeros(m_pad*ks_pad, dtype=torch.uint8, device='cuda'),
+ m_pad_gemm = ((m+31)//32)*32
+
+ log2_ks = 0 # explicit split-K is slower for all our shapes
+
+ key = (m_pad_q, k, ks_pad, m_pad_gemm, n)
+ if key not in _qs:
+ _qs[key] = {
+ 'Aq': torch.zeros(m_pad_q, k//2, dtype=torch.uint8, device='cuda'),
+ 'As': torch.zeros(m_pad_q * ks_pad, dtype=torch.uint8, device='cuda'),
+ 'C': torch.empty(m_pad_gemm, n, dtype=torch.bfloat16, device='cuda'),
}
- c = _qs_cache[key]
- _lib.launch_fused_quant_shuffle(
- ctypes.c_void_p(A.data_ptr()), ctypes.c_void_p(c['Aq'].data_ptr()),
+ c = _qs[key]
+
+ err = _lib.launch_combined(
+ ctypes.c_void_p(A.data_ptr()),
+ ctypes.c_void_p(c['Aq'].data_ptr()),
ctypes.c_void_p(c['As'].data_ptr()),
- ctypes.c_int(m), ctypes.c_int(k), ctypes.c_int(m_pad), ctypes.c_int(ks_pad),
- ctypes.c_int(A.stride(0)), ctypes.c_int(c['Aq'].stride(0)),
- ctypes.c_void_p(0))
- return c['Aq'][:m].view(dtypes.fp4x2), c['As'].view(m_pad, ks_pad).view(dtypes.fp8_e8m0)
+ ctypes.c_int(m), ctypes.c_int(k), ctypes.c_int(m_pad_q),
+ ctypes.c_int(ks_pad), ctypes.c_int(A.stride(0)), ctypes.c_int(c['Aq'].stride(0)),
+ ctypes.c_void_p(B_sh_u8.data_ptr()),
+ ctypes.c_void_p(B_sc_u8.data_ptr()),
+ ctypes.c_void_p(c['C'].data_ptr()),
+ ctypes.c_int(n), ctypes.c_int(B_sh_u8.stride(0)), ctypes.c_int(B_sc_u8.stride(0)),
+ ctypes.c_int(m_pad_gemm),
+ ctypes.c_int(log2_ks),
+ ctypes.c_void_p(0),
+ )
+ if err != 0:
+ return None
+ return c['C'][:m]
- # ---- Fallback ----
+ # Fallback
_a_cache = None
- def _fallback_quant(A):
+ def _fallback(data):
global _a_cache
- if _a_cache is not None and _a_cache[0] is A:
- return _a_cache[1], _a_cache[2]
+ A, B, B_q, B_shuffle, B_scale_sh = data
+ if _a_cache is not None and _a_cache[0] is A: return _a_cache[1], _a_cache[2]
Aq, As = dynamic_mxfp4_quant(A)
- Ash = e8m0_shuffle(As)
- r = (Aq.view(dtypes.fp4x2), Ash.view(dtypes.fp8_e8m0))
- _a_cache = (A, r[0], r[1])
- return r
+ Ash = e8m0_shuffle(As).view(dtypes.fp8_e8m0)
+ Aq = Aq.view(dtypes.fp4x2)
+ _a_cache = (A, Aq, Ash)
+ return Aq, Ash
- # ---- Entry ----
+ _combined_ok = None
+
def custom_kernel(data: input_t) -> output_t:
+ global _combined_ok
A, B, B_q, B_shuffle, B_scale_sh = data
m, k = A.shape
n = B_q.shape[0]
if _lib is not None and k <= 1024:
- # Small K: fused single-launch kernel
return _fused_gemm(A, B_q, B_scale_sh, m, n, k)
- if _lib is not None:
- # Large K: HIP quant+shuffle + ASM GEMM (2 launches)
- Aq, Ash = _hip_quant_shuffle(A, m, k)
- else:
- # Fallback: Python quant+shuffle
- Aq, Ash = _fallback_quant(A)
+ if _lib is not None and _combined_ok is not False:
+ try:
+ result = _combined(A, B_shuffle, B_scale_sh, m, n, k)
+ if result is not None:
+ _combined_ok = True
+ return result
+ except Exception as e:
+ import sys
+ print(f"COMBINED_FAIL: {e}", file=sys.stderr)
+ _combined_ok = False
+ # Fallback: Python quant + aiter gemm
+ Aq, Ash = _fallback(data)
return aiter.gemm_a4w4(Aq, B_shuffle, Ash, B_scale_sh, dtype=dtypes.bf16, bpreshuffle=True)
scrolls · 510 diff lines total

Best evidence level for this revision: reported

JSON