Skip to content
KernelIndex
Search⌘K

submission 8178

KernelBot user 160 · python · License unknown

Use it

Vendorable · source mirrored · license unknownView source →

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

submission.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-fp8-mm-8178?include=source"
interfacepython
Compatibility
measured onAMD Instinct MI300X
declared hardwareAMD Instinct MI300X
architecturesgfx942
dtypesfp32, fp8_e4m3fnuz

Benchmark evidence

18 measurements across 1 GPU, fastest first.

Operation / workload
Hardware
Latency
Rank
Observed
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 512]
AMD Instinct MI300X
58.3µs
#69 of 98
2025-04-24
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 256]
AMD Instinct MI300X
61.7µs
#76 of 98
2025-04-24
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 1536]
AMD Instinct MI300X
107.1µs
#78 of 98
2025-04-24
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 256]
AMD Instinct MI300X
191.0µs
#81 of 98
2025-04-24
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 512]
AMD Instinct MI300X
224.1µs
#82 of 98
2025-04-24
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 2048]
AMD Instinct MI300X
260.0µs
#82 of 98
2025-04-24
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 2304]
AMD Instinct MI300X
288.4µs
#82 of 98
2025-04-24
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=512 · seed=6563
AMD Instinct MI300X
387.0µs
#91 of 98
2025-04-24
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 1536]
AMD Instinct MI300X
390.0µs
#80 of 98
2025-04-24
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=1536 · seed=8135
AMD Instinct MI300X
393.9µs
#83 of 98
2025-04-24
Show all 18 measurements ›
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=576 · seed=12346
AMD Instinct MI300X
395.8µs
#91 of 98
2025-04-24
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=512 · seed=12341
AMD Instinct MI300X
410.6µs
#75 of 98
2025-04-24
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=576 · seed=9863
AMD Instinct MI300X
427.2µs
#69 of 98
2025-04-24
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=4608 · seed=7531
AMD Instinct MI300X
446.1µs
#77 of 98
2025-04-24
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=1536 · seed=6543
AMD Instinct MI300X
926.2µs
#80 of 98
2025-04-24
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 2048]
AMD Instinct MI300X
1.16ms
#80 of 98
2025-04-24
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 2304]
AMD Instinct MI300X
1.30ms
#80 of 98
2025-04-24
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=4608 · seed=65436
AMD Instinct MI300X
2.63ms
#80 of 98
2025-04-24

Reported · How evidence levels are derived →

Source and license

sourceavailable
revision digestsha256:e9df5ba8751166e185f38aabdbdc79245ea85375564ae9180a3335accf7940e9
license declaredunknown
license concludedunknown
imported2026-08-15

Kernel source

submission.py1 lines
IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1mcDgtbW0KIyFQT1BDT1JOIGdwdXMgTUkzMDAKCmltcG9ydCBvcwpmcm9tIHRhc2sgaW1wb3J0IGlucHV0X3QsIG91dHB1dF90CmZyb20gdG9yY2gudXRpbHMuY3BwX2V4dGVuc2lvbiBpbXBvcnQgbG9hZF9pbmxpbmUKCm9zLmVudmlyb25bIkNYWCJdID0gImNsYW5nKysiCgpjdWRhX3NyYyA9IHIiIiIKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aGlwL2hpcF9ydW50aW1lLmg+CiNpbmNsdWRlIDxoaXAvYW1kX2RldGFpbC9hbWRfaGlwX2JmMTYuaD4KI2luY2x1ZGUgPGhpcC9hbWRfZGV0YWlsL2FtZF9oaXBfZnA4Lmg+CgpfX2hvc3RfXyBfX2RldmljZV9fIF9fZm9yY2VpbmxpbmVfXyBzaXplX3QgY2RpdihzaXplX3QgYSwgc2l6ZV90IGIpIHsKICByZXR1cm4gKGEgKyBiIC0gMSkgLyBiOwp9CgojZGVmaW5lIEJMT0NLX0RJTSAxMjgKCnRlbXBsYXRlIDxjb25zdCBzaXplX3QgQk4sIGNvbnN0IHNpemVfdCBCSywgY29uc3Qgc2l6ZV90IEJNLAogICAgICAgICAgY29uc3Qgc2l6ZV90IFdJVEVSTiwgY29uc3Qgc2l6ZV90IFdJVEVSTT4KX19nbG9iYWxfXyB2b2lkIGZwOF9tbV9rZXJuZWwoY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiAqQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiAqQiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgKkFfc2NhbGUsIGNvbnN0IGZsb2F0ICpCX3NjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2hpcF9iZmxvYXQxNiAqQywgc2l6ZV90IE4sIHNpemVfdCBLLCBzaXplX3QgTSkgewogIHVzaW5nIGZsb2F0eDE2ID0gX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2ICogc2l6ZW9mKGZsb2F0KSkpKSBmbG9hdDsKCiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgVkVDVE9SX1NJWkUgPSA0OwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IFdBUlBTSVpFID0gNjQ7CiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgV04gPSAzMiAqIFdJVEVSTjsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBXTSA9IDMyICogV0lURVJNOwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bVRocmVhZHMgPSAoQk4gKiBCTSkgLyAoMTYgKiBXSVRFUk4gKiBXSVRFUk0pOwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IFNVQkJOID0gQk4gLyBWRUNUT1JfU0laRTsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBTVUJCTSA9IEJNIC8gVkVDVE9SX1NJWkU7CiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc3RyaWRlQSA9IG51bVRocmVhZHMgLyBTVUJCTjsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBzdHJpZGVCID0gbnVtVGhyZWFkcyAvIFNVQkJNOwoKICBzaXplX3Qgcm93T2Zmc2V0QyA9IGJsb2NrSWR4LnkgKiBCTjsKICBzaXplX3QgY29sT2Zmc2V0QyA9IGJsb2NrSWR4LnggKiBCTTsKICBzaXplX3QgY29sT2Zmc2V0QSA9IHJvd09mZnNldEM7CiAgc2l6ZV90IGNvbE9mZnNldEIgPSBjb2xPZmZzZXRDOwogIHNpemVfdCBNX3NjYWxlID0gY2RpdihNLCBCTE9DS19ESU0pOwoKICBzdGF0aWNfYXNzZXJ0KG51bVRocmVhZHMgJSBCTiA9PSAwLCAiQk4gc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgbnVtVGhyZWFkcyIpOwogIHN0YXRpY19hc3NlcnQobnVtVGhyZWFkcyAlIEJNID09IDAsICJCTSBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiBudW1UaHJlYWRzIik7CiAgc3RhdGljX2Fzc2VydChCSyA8PSAxMjggJiYgQk0gPD0gMTI4LCAiUmFuZ2UgYWJvdmUgMTI4IGlzIG5vdCBzdXBwb3J0ZWQiKTsKCiAgc2l6ZV90IGlubmVyQ29sQSA9IHRocmVhZElkeC54ICUgU1VCQk47CiAgc2l6ZV90IGlubmVyUm93QSA9IHRocmVhZElkeC54IC8gU1VCQk47CiAgc2l6ZV90IGlubmVyQ29sQiA9IHRocmVhZElkeC54ICUgU1VCQk07CiAgc2l6ZV90IGlubmVyUm93QiA9IHRocmVhZElkeC54IC8gU1VCQk07CgogIHNpemVfdCBsYW5lSWR4ID0gdGhyZWFkSWR4LnggJSBXQVJQU0laRTsKICBzaXplX3Qgd2FycElkeCA9IHRocmVhZElkeC54IC8gV0FSUFNJWkU7CiAgc2l6ZV90IHdhcnBDb2xPZmZzZXQgPSAod2FycElkeCAlIChCTSAvIFdNKSkgKiBXTTsKICBzaXplX3Qgd2FycFJvd09mZnNldCA9ICh3YXJwSWR4IC8gKEJNIC8gV00pKSAqIFdOOwogIHNpemVfdCB3YXJwWCA9IGxhbmVJZHggJSAzMjsKICBzaXplX3Qgd2FycFkgPSBsYW5lSWR4IC8gMzI7CgogIF9fc2hhcmVkX18gX19oaXBfZnA4X2U0bTNfZm51eiBBc1tCS11bQk5dLCBCc1tCS11bQk1dOwogIF9fc2hhcmVkX18gZmxvYXQgV3NbQk4gKyAxXTsKCiAgX19oaXBfZnA4X2U0bTNfZm51eiBhW1dJVEVSTl1bOF0sIGJbV0lURVJNXVs4XTsKICBmbG9hdHgxNiBkW1dJVEVSTl1bV0lURVJNXSA9IHswfTsKICBmbG9hdCBiX3NjYWxlOwoKICBmb3IgKHNpemVfdCB0aWxlT2Zmc2V0ID0gMDsgdGlsZU9mZnNldCA8IEs7IHRpbGVPZmZzZXQgKz0gQkspIHsKICAgIC8vIGxvYWQgZnJvbSBnbG9iYWwgdG8gc2hhcmVkIG1lbW9yeSBpbiBjb2FsZXNjZWQgbWFubmVyCiAgICBmb3IgKHNpemVfdCBpbm5lclJvd09mZnNldEEgPSAwOyBpbm5lclJvd09mZnNldEEgPCBCSzsKICAgICAgICAgaW5uZXJSb3dPZmZzZXRBICs9IHN0cmlkZUEpIHsKICAgICAgaWYgKCh0aWxlT2Zmc2V0ICsgaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBKSA8IEsgJiYKICAgICAgICAgIChjb2xPZmZzZXRBICsgaW5uZXJDb2xBICogVkVDVE9SX1NJWkUpIDwgTiAmJgogICAgICAgICAgKGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgPCBCSykgewogICAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0ICo+KAogICAgICAgICAgICAmQXNbaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBXVtpbm5lckNvbEEgKiBWRUNUT1JfU0laRV0pID0KICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQgKj4oCiAgICAgICAgICAgICAgICAmQVsodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgKiBOICsKICAgICAgICAgICAgICAgICAgIChjb2xPZmZzZXRBICsgaW5uZXJDb2xBICogVkVDVE9SX1NJWkUpXSk7CiAgICAgICAgaWYgKHRocmVhZElkeC54IDwgU1VCQk4pIHsKICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0NCAqPigmV3NbdGhyZWFkSWR4LnggKiBWRUNUT1JfU0laRV0pID0KICAgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdDQgKj4oCiAgICAgICAgICAgICAgICAgICZBX3NjYWxlWygodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgQkxPQ0tfRElNKSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbE9mZnNldEEgKyBpbm5lckNvbEEgKiBWRUNUT1JfU0laRSldKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoKGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgPCBCSykgewogICAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0ICo+KAogICAgICAgICAgICAmQXNbaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBXVtpbm5lckNvbEEgKiBWRUNUT1JfU0laRV0pID0gMC4wZjsKICAgICAgfQogICAgfQogICAgZm9yIChzaXplX3QgaW5uZXJSb3dPZmZzZXRCID0gMDsgaW5uZXJSb3dPZmZzZXRCIDwgQks7CiAgICAgICAgIGlubmVyUm93T2Zmc2V0QiArPSBzdHJpZGVCKSB7CiAgICAgIGlmICgodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgPCBLICYmCiAgICAgICAgICAoY29sT2Zmc2V0QiArIGlubmVyQ29sQiAqIFZFQ1RPUl9TSVpFKSA8IE0gJiYKICAgICAgICAgIChpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpIDwgQksgJiYKICAgICAgICAgIChpbm5lckNvbEIgKiBWRUNUT1JfU0laRSkgPCBCTSkgewogICAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0ICo+KAogICAgICAgICAgICAmQnNbaW5uZXJSb3dPZmZzZXRCICsgaW5uZXJSb3dCXVtpbm5lckNvbEIgKiBWRUNUT1JfU0laRV0pID0KICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQgKj4oCiAgICAgICAgICAgICAgICAmQlsodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgKiBNICsKICAgICAgICAgICAgICAgICAgIChjb2xPZmZzZXRCICsgaW5uZXJDb2xCICogVkVDVE9SX1NJWkUpXSk7CiAgICAgICAgaWYgKHRocmVhZElkeC54ID09IFdBUlBTSVpFKSB7IC8vIGxvYWQgdXNpbmcgc2Vjb25kIHdhcnAKICAgICAgICAgIFdzW0JOXSA9CiAgICAgICAgICAgICAgQl9zY2FsZVsoKHRpbGVPZmZzZXQgKyBpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpIC8gQkxPQ0tfRElNKSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgTV9zY2FsZSArCiAgICAgICAgICAgICAgICAgICAgICAoKGNvbE9mZnNldEIgKyBpbm5lckNvbEIgKiBWRUNUT1JfU0laRSkgLyBCTE9DS19ESU0pXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoKGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgPCBCSyAmJgogICAgICAgICAgICAgICAgIChpbm5lckNvbEIgKiBWRUNUT1JfU0laRSkgPCBCTSkgewogICAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0ICo+KAogICAgICAgICAgICAmQnNbaW5uZXJSb3dPZmZzZXRCICsgaW5uZXJSb3dCXVtpbm5lckNvbEIgKiBWRUNUT1JfU0laRV0pID0gMC4wZjsKICAgICAgfQogICAgfQoKICAgIF9fc3luY3RocmVhZHMoKTsKCiAgICBmb3IgKHNpemVfdCBCS09mZnNldCA9IDA7IEJLT2Zmc2V0IDwgQks7IEJLT2Zmc2V0ICs9IDE2KSB7CiAgICAgIGZvciAoc2l6ZV90IHduID0gMDsgd24gPCBXSVRFUk47ICsrd24pIHsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDg7ICsraSkgewogICAgICAgICAgYVt3bl1baV0gPQogICAgICAgICAgICAgIEFzW0JLT2Zmc2V0ICsgd2FycFkgKiA4ICsgaV1bd2FycFJvd09mZnNldCArIHduICogMzIgKyB3YXJwWF07CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAoc2l6ZV90IHdtID0gMDsgd20gPCBXSVRFUk07ICsrd20pIHsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDg7ICsraSkgewogICAgICAgICAgYlt3bV1baV0gPQogICAgICAgICAgICAgIEJzW0JLT2Zmc2V0ICsgd2FycFkgKiA4ICsgaV1bd2FycENvbE9mZnNldCArIHdtICogMzIgKyB3YXJwWF07CiAgICAgICAgfQogICAgICB9CiAgICAgIGZsb2F0IGJfc2NhbGUgPSBXc1tCTl07CiAgICAgIGZvciAoc2l6ZV90IHduID0gMDsgd24gPCBXSVRFUk47ICsrd24pIHsKICAgICAgICBmb3IgKHNpemVfdCB3bSA9IDA7IHdtIDwgV0lURVJNOyArK3dtKSB7CiAgICAgICAgICBmbG9hdHgxNiBjID0gezB9OwogICAgICAgICAgYyA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMzJ4MzJ4MTZfZnA4X2ZwOCgKICAgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxsb25nICo+KGFbd25dKSwKICAgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxsb25nICo+KGJbd21dKSwgYywgMCwgMCwgMCk7CiAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IDQ7ICsraikgewogICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkgewogICAgICAgICAgICAgIGRbd25dW3dtXVtpICsgaiAqIDRdICs9CiAgICAgICAgICAgICAgICAgIGNbaSArIGogKiA0XSAqCiAgICAgICAgICAgICAgICAgIFdzW3dhcnBSb3dPZmZzZXQgKyB3biAqIDMyICsgaiAqIDggKyB3YXJwWSAqIDQgKyBpXSAqIGJfc2NhbGU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBfX3N5bmN0aHJlYWRzKCk7CiAgfQoKICBmb3IgKHNpemVfdCB3biA9IDA7IHduIDwgV0lURVJOOyArK3duKSB7CiAgICBmb3IgKHNpemVfdCB3bSA9IDA7IHdtIDwgV0lURVJNOyArK3dtKSB7CiAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgNDsgKytqKSB7CiAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpIHsKICAgICAgICAgIGlmICgocm93T2Zmc2V0QyArIHdhcnBSb3dPZmZzZXQgKyB3biAqIDMyICsgaiAqIDggKyB3YXJwWSAqIDQgKyBpKSA8CiAgICAgICAgICAgICAgICAgIE4gJiYKICAgICAgICAgICAgICAoY29sT2Zmc2V0QyArIHdhcnBDb2xPZmZzZXQgKyB3bSAqIDMyICsgd2FycFgpIDwgTSkKICAgICAgICAgICAgQ1socm93T2Zmc2V0QyArIHdhcnBSb3dPZmZzZXQgKyB3biAqIDMyICsgaiAqIDggKyB3YXJwWSAqIDQgKyBpKSAqCiAgICAgICAgICAgICAgICAgIE0gKwogICAgICAgICAgICAgIChjb2xPZmZzZXRDICsgd2FycENvbE9mZnNldCArIHdtICogMzIgKyB3YXJwWCldID0KICAgICAgICAgICAgICAgIChfX2hpcF9iZmxvYXQxNilkW3duXVt3bV1baSArIGogKiA0XTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn0KCmF0OjpUZW5zb3IgZnA4X21tKGF0OjpUZW5zb3IgQSwgYXQ6OlRlbnNvciBCLCBhdDo6VGVuc29yIEFfc2NhbGUsCiAgICAgICAgICAgICAgICAgIGF0OjpUZW5zb3IgQl9zY2FsZSwgYXQ6OlRlbnNvciBDKSB7CiAgc2l6ZV90IE4gPSBBLnNpemUoMCksIEsgPSBBLnNpemUoMSksIE0gPSBCLnNpemUoMCk7CgogIGNvbnN0IHNpemVfdCBCSyA9IDEyODsKICBjb25zdCBzaXplX3QgQk4gPSAxMjg7CiAgY29uc3Qgc2l6ZV90IEJNID0gMTI4OwogIGNvbnN0IHNpemVfdCBXSVRFUk4gPSAxOwogIGNvbnN0IHNpemVfdCBXSVRFUk0gPSAxOwogIGRpbTMgbnVtVGhyZWFkcygoQk4gKiBCTSkgLyAoMTYgKiBXSVRFUk4gKiBXSVRFUk0pKTsKICBkaW0zIG51bUJsb2NrcyhjZGl2KE0sIEJNKSwgY2RpdihOLCBCTikpOwogIGZwOF9tbV9rZXJuZWw8Qk4sIEJLLCBCTSwgV0lURVJOLCBXSVRFUk0+PDw8bnVtQmxvY2tzLCBudW1UaHJlYWRzPj4+KAogICAgICAoX19oaXBfZnA4X2U0bTNfZm51eiAqKUEuZGF0YV9wdHIoKSwgKF9faGlwX2ZwOF9lNG0zX2ZudXogKilCLmRhdGFfcHRyKCksCiAgICAgIEFfc2NhbGUuZGF0YV9wdHI8ZmxvYXQ+KCksIEJfc2NhbGUuZGF0YV9wdHI8ZmxvYXQ+KCksCiAgICAgIChfX2hpcF9iZmxvYXQxNiAqKUMuZGF0YV9wdHIoKSwgTiwgSywgTSk7CiAgcmV0dXJuIEM7Cn0KIiIiCgpjcHBfc3JjID0gciIiIgphdDo6VGVuc29yIGZwOF9tbShhdDo6VGVuc29yIEEsIGF0OjpUZW5zb3IgQiwgYXQ6OlRlbnNvciBBX3NjYWxlLAogICAgICAgICAgICAgICAgICBhdDo6VGVuc29yIEJfc2NhbGUsIGF0OjpUZW5zb3IgQyk7CiIiIgoKaW1wb3J0IHN5cwoKaWYgc3lzLnN0ZG91dCBpcyBOb25lOgogICAgc3lzLnN0ZG91dCA9IG9wZW4oIi9kZXYvc3Rkb3V0IiwgInciKQppZiBzeXMuc3RkZXJyIGlzIE5vbmU6CiAgICBzeXMuc3RkZXJyID0gb3BlbigiL2Rldi9zdGRlcnIiLCAidyIpCgptb2R1bGUgPSBsb2FkX2lubGluZSgKICAgIG5hbWU9ImZwOF9tbSIsCiAgICBjcHBfc291cmNlcz1bY3BwX3NyY10sCiAgICBjdWRhX3NvdXJjZXM9W2N1ZGFfc3JjXSwKICAgIGZ1bmN0aW9ucz1bImZwOF9tbSJdLAogICAgdmVyYm9zZT1UcnVlLAogICAgZXh0cmFfY3VkYV9jZmxhZ3M9WyItTzMiLCAiLS1vZmZsb2FkLWFyY2g9Z2Z4OTQyIiwgIi1zdGQ9YysrMjAiXSwKKQoKCmRlZiBjdXN0b21fa2VybmVsKGRhdGE6IGlucHV0X3QpIC0+IG91dHB1dF90OgogICAgYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYyA9IGRhdGEKICAgIHJldHVybiBtb2R1bGUuZnA4X21tKGEsIGIsIGFfc2NhbGUsIGJfc2NhbGUsIGMpCg==

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 5193.

- IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1mcDgtbW0KIyFQT1BDT1JOIGdwdXMgTUkzMDAKCmltcG9ydCBvcwpmcm9tIHRhc2sgaW1wb3J0IGlucHV0X3QsIG91dHB1dF90CmZyb20gdG9yY2gudXRpbHMuY3BwX2V4dGVuc2lvbiBpbXBvcnQgbG9hZF9pbmxpbmUKCm9zLmVudmlyb25bIkNYWCJdID0gImNsYW5nKysiCgpjdWRhX3NyYyA9IHIiIiIKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aGlwL2hpcF9ydW50aW1lLmg+CiNpbmNsdWRlIDxoaXAvYW1kX2RldGFpbC9hbWRfaGlwX2JmMTYuaD4KI2luY2x1ZGUgPGhpcC9hbWRfZGV0YWlsL2FtZF9oaXBfZnA4Lmg+CgpfX2hvc3RfXyBfX2RldmljZV9fIF9fZm9yY2VpbmxpbmVfXyBzaXplX3QgY2RpdihzaXplX3QgYSwgc2l6ZV90IGIpIHsKICByZXR1cm4gKGEgKyBiIC0gMSkgLyBiOwp9CgojZGVmaW5lIEJMT0NLX0RJTSAxMjgKCnRlbXBsYXRlIDxjb25zdCBzaXplX3QgQk4sIGNvbnN0IHNpemVfdCBCSywgY29uc3Qgc2l6ZV90IEJNLAogICAgICAgICAgY29uc3Qgc2l6ZV90IFdJVEVSTiwgY29uc3Qgc2l6ZV90IFdJVEVSTT4KX19nbG9iYWxfXyB2b2lkIGZwOF9tbV9rZXJuZWwoY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiAqQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiAqQiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgKkFfc2NhbGUsIGNvbnN0IGZsb2F0ICpCX3NjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2hpcF9iZmxvYXQxNiAqQywgc2l6ZV90IE4sIHNpemVfdCBLLCBzaXplX3QgTSkgewogIHVzaW5nIGZsb2F0eDE2ID0gX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2ICogc2l6ZW9mKGZsb2F0KSkpKSBmbG9hdDsKCiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgVkVDVE9SX1NJWkUgPSA0OwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IFdBUlBTSVpFID0gNjQ7CiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgV04gPSAzMiAqIFdJVEVSTjsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBXTSA9IDMyICogV0lURVJNOwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bVRocmVhZHMgPSAoQk4gKiBCTSkgLyAxNjsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBzdHJpZGVBID0gKG51bVRocmVhZHMgLyAoQk4gLyBWRUNUT1JfU0laRSkpOwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHN0cmlkZUIgPSAobnVtVGhyZWFkcyAvIChCTSAvIFZFQ1RPUl9TSVpFKSk7CgogIHNpemVfdCByb3dPZmZzZXRDID0gYmxvY2tJZHgueSAqIEJOOwogIHNpemVfdCBjb2xPZmZzZXRDID0gYmxvY2tJZHgueCAqIEJNOwogIHNpemVfdCBjb2xPZmZzZXRBID0gcm93T2Zmc2V0QzsKICBzaXplX3QgY29sT2Zmc2V0QiA9IGNvbE9mZnNldEM7CgogIHN0YXRpY19hc3NlcnQobnVtVGhyZWFkcyAlIEJOID09IDAsICJCTiBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiBudW1UaHJlYWRzIik7CiAgc3RhdGljX2Fzc2VydChudW1UaHJlYWRzICUgQk0gPT0gMCwgIkJNIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIG51bVRocmVhZHMiKTsKICBzdGF0aWNfYXNzZXJ0KEJOIDw9IDEyOCAmJiBCSyA8PSAxMjggJiYgQk0gPD0gMTI4LAogICAgICAgICAgICAgICAgIlJhbmdlIGFib3ZlIDEyOCBpcyBub3Qgc3VwcG9ydGVkIik7CgogIHNpemVfdCBpbm5lckNvbEEgPSB0aHJlYWRJZHgueCAlIChCTiAvIFZFQ1RPUl9TSVpFKTsKICBzaXplX3QgaW5uZXJSb3dBID0gdGhyZWFkSWR4LnggLyAoQk4gLyBWRUNUT1JfU0laRSk7CiAgc2l6ZV90IGlubmVyQ29sQiA9IHRocmVhZElkeC54ICUgKEJNIC8gVkVDVE9SX1NJWkUpOwogIHNpemVfdCBpbm5lclJvd0IgPSB0aHJlYWRJZHgueCAvIChCTSAvIFZFQ1RPUl9TSVpFKTsKCiAgc2l6ZV90IGxhbmVJZHggPSB0aHJlYWRJZHgueCAlIFdBUlBTSVpFOwogIHNpemVfdCB3YXJwSWR4ID0gdGhyZWFkSWR4LnggLyBXQVJQU0laRTsKICBzaXplX3Qgd2FycENvbE9mZnNldCA9ICh3YXJwSWR4ICUgKEJNIC8gV00pKSAqIFdNOwogIHNpemVfdCB3YXJwUm93T2Zmc2V0ID0gKHdhcnBJZHggLyAoQk0gLyBXTSkpICogV047CiAgc2l6ZV90IHdhcnBYID0gbGFuZUlkeCAlIDMyOwogIHNpemVfdCB3YXJwWSA9IGxhbmVJZHggLyAzMjsKCiAgX19zaGFyZWRfXyBfX2hpcF9mcDhfZTRtM19mbnV6IEFzW0JLXVtCTl0sIEJzW0JLXVtCTV07CiAgX19zaGFyZWRfXyBmbG9hdCBXc1tCTiArIDFdOwoKICBfX2hpcF9mcDhfZTRtM19mbnV6IGFbV0lURVJOXVs4XSwgYltXSVRFUk1dWzhdOwogIGZsb2F0eDE2IGRbV0lURVJOXVtXSVRFUk1dID0gezB9OwoKICBmb3IgKHNpemVfdCB0aWxlT2Zmc2V0ID0gMDsgdGlsZU9mZnNldCA8IEs7IHRpbGVPZmZzZXQgKz0gQkspIHsKICAgIC8vIGxvYWQgZnJvbSBnbG9iYWwgdG8gc2hhcmVkIG1lbW9yeSBpbiBjb2FsZXNjZWQgbWFubmVyCiAgICBmb3IgKHNpemVfdCBpbm5lclJvd09mZnNldEEgPSAwOyBpbm5lclJvd09mZnNldEEgPCBCSzsKICAgICAgICAgaW5uZXJSb3dPZmZzZXRBICs9IHN0cmlkZUEpIHsKICAgICAgaWYgKCh0aWxlT2Zmc2V0ICsgaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBKSA8IEsgJiYKICAgICAgICAgIChjb2xPZmZzZXRBICsgaW5uZXJDb2xBICogVkVDVE9SX1NJWkUpIDwgTiAmJgogICAgICAgICAgKGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgPCBCSyAmJgogICAgICAgICAgKGlubmVyQ29sQSAqIFZFQ1RPUl9TSVpFKSA8IEJOKSB7CiAgICAgICAgZmxvYXQgdG1wID0KICAgICAgICAgICAgKihmbG9hdCAqKSZBWyh0aWxlT2Zmc2V0ICsgaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBKSAqIE4gKwogICAgICAgICAgICAgICAgICAgICAgICAgKGNvbE9mZnNldEEgKyBpbm5lckNvbEEgKiBWRUNUT1JfU0laRSldOwogICAgICAgICooZmxvYXQgKikmQXNbaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBXVtpbm5lckNvbEEgKiBWRUNUT1JfU0laRV0gPQogICAgICAgICAgICB0bXA7CiAgICAgICAgaWYgKHRocmVhZElkeC54IDwgKEJOIC8gVkVDVE9SX1NJWkUpKSB7CiAgICAgICAgICBmbG9hdDQgdG1wID0KICAgICAgICAgICAgICAqKGZsb2F0NCAqKSZBX3NjYWxlWygodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJMT0NLX0RJTSkgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE4gKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbE9mZnNldEEgKyBpbm5lckNvbEEgKiBWRUNUT1JfU0laRSldOwogICAgICAgICAgKihmbG9hdDQgKikmV3NbdGhyZWFkSWR4LnggKiBWRUNUT1JfU0laRV0gPSB0bXA7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKChpbm5lclJvd09mZnNldEEgKyBpbm5lclJvd0EpIDwgQksgJiYKICAgICAgICAgICAgICAgICAoaW5uZXJDb2xBICogVkVDVE9SX1NJWkUpIDwgQk4pIHsKICAgICAgICAqKGZsb2F0ICopJkFzW2lubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QV1baW5uZXJDb2xBICogVkVDVE9SX1NJWkVdID0KICAgICAgICAgICAgMC4wZjsKICAgICAgfQogICAgfQogICAgZm9yIChzaXplX3QgaW5uZXJSb3dPZmZzZXRCID0gMDsgaW5uZXJSb3dPZmZzZXRCIDwgQks7CiAgICAgICAgIGlubmVyUm93T2Zmc2V0QiArPSBzdHJpZGVCKSB7CiAgICAgIGlmICgodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgPCBLICYmCiAgICAgICAgICAoY29sT2Zmc2V0QiArIGlubmVyQ29sQiAqIFZFQ1RPUl9TSVpFKSA8IE0gJiYKICAgICAgICAgIChpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpIDwgQksgJiYKICAgICAgICAgIChpbm5lckNvbEIgKiBWRUNUT1JfU0laRSkgPCBCTSkgewogICAgICAgIGZsb2F0IHRtcCA9CiAgICAgICAgICAgICooZmxvYXQgKikmQlsodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgKiBNICsKICAgICAgICAgICAgICAgICAgICAgICAgIChjb2xPZmZzZXRCICsgaW5uZXJDb2xCICogVkVDVE9SX1NJWkUpXTsKICAgICAgICAqKGZsb2F0ICopJkJzW2lubmVyUm93T2Zmc2V0QiArIGlubmVyUm93Ql1baW5uZXJDb2xCICogVkVDVE9SX1NJWkVdID0KICAgICAgICAgICAgdG1wOwogICAgICAgIGlmICh0aHJlYWRJZHgueCA9PSBCTikgewogICAgICAgICAgV3NbQk5dID0KICAgICAgICAgICAgICBCX3NjYWxlWygodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgLyBCTE9DS19ESU0pICoKICAgICAgICAgICAgICAgICAgICAgICAgICBjZGl2KE0sIEJMT0NLX0RJTSkgKwogICAgICAgICAgICAgICAgICAgICAgKChjb2xPZmZzZXRCICsgaW5uZXJDb2xCKSAvIEJMT0NLX0RJTSldOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICgoaW5uZXJSb3dPZmZzZXRCICsgaW5uZXJSb3dCKSA8IEJLICYmCiAgICAgICAgICAgICAgICAgKGlubmVyQ29sQiAqIFZFQ1RPUl9TSVpFKSA8IEJNKSB7CiAgICAgICAgKihmbG9hdCAqKSZCc1tpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0JdW2lubmVyQ29sQiAqIFZFQ1RPUl9TSVpFXSA9CiAgICAgICAgICAgIDAuMGY7CiAgICAgIH0KICAgIH0KCiAgICBfX3N5bmN0aHJlYWRzKCk7CgogICAgZm9yIChzaXplX3QgQktPZmZzZXQgPSAwOyBCS09mZnNldCA8IEJLOyBCS09mZnNldCArPSAxNikgewojcHJhZ21hIHVucm9sbCAyCiAgICAgIGZvciAoc2l6ZV90IHduID0gMDsgd24gPCBXSVRFUk47ICsrd24pIHsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDg7ICsraSkgewogICAgICAgICAgYVt3bl1baV0gPQogICAgICAgICAgICAgIEFzW0JLT2Zmc2V0ICsgd2FycFkgKiA4ICsgaV1bd2FycFJvd09mZnNldCArIHduICogMzIgKyB3YXJwWF07CiAgICAgICAgfQogICAgICB9CiNwcmFnbWEgdW5yb2xsIDIKICAgICAgZm9yIChzaXplX3Qgd20gPSAwOyB3bSA8IFdJVEVSTTsgKyt3bSkgewogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgODsgKytpKSB7CiAgICAgICAgICBiW3dtXVtpXSA9CiAgICAgICAgICAgICAgQnNbQktPZmZzZXQgKyB3YXJwWSAqIDggKyBpXVt3YXJwQ29sT2Zmc2V0ICsgd20gKiAzMiArIHdhcnBYXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZmxvYXQgYl9zY2FsZSA9IFdzW0JOXTsKI3ByYWdtYSB1bnJvbGwgNAogICAgICBmb3IgKHNpemVfdCB3biA9IDA7IHduIDwgV0lURVJOOyArK3duKSB7CiAgICAgICAgZm9yIChzaXplX3Qgd20gPSAwOyB3bSA8IFdJVEVSTTsgKyt3bSkgewogICAgICAgICAgZmxvYXR4MTYgYyA9IHswfTsKICAgICAgICAgIGMgPSBfX2J1aWx0aW5fYW1kZ2NuX21mbWFfZjMyXzMyeDMyeDE2X2ZwOF9mcDgoCiAgICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyAqPihhKSwgKnJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyAqPihiKSwgYywgMCwKICAgICAgICAgICAgICAwLCAwKTsKICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgNDsgKytqKSB7CiAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKSB7CiAgICAgICAgICAgICAgZFt3bl1bd21dW2kgKyBqICogNF0gKz0KICAgICAgICAgICAgICAgICAgY1tpICsgaiAqIDRdICoKICAgICAgICAgICAgICAgICAgV3Nbd2FycFJvd09mZnNldCArIHduICogMzIgKyBqICogOCArIHdhcnBZICogNCArIGldICogYl9zY2FsZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIF9fc3luY3RocmVhZHMoKTsKICB9CgojcHJhZ21hIHVucm9sbCA0CiAgZm9yIChzaXplX3Qgd24gPSAwOyB3biA8IFdJVEVSTjsgKyt3bikgewogICAgZm9yIChzaXplX3Qgd20gPSAwOyB3bSA8IFdJVEVSTTsgKyt3bSkgewogICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IDQ7ICsraikgewogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKSB7CiAgICAgICAgICBpZiAoKHJvd09mZnNldEMgKyB3YXJwUm93T2Zmc2V0ICsgaiAqIDggKyB3YXJwWSAqIDQgKyBpKSA8IE4gJiYKICAgICAgICAgICAgICAoY29sT2Zmc2V0QyArIHdhcnBDb2xPZmZzZXQgKyB3YXJwWCkgPCBNKQogICAgICAgICAgICBDWyhyb3dPZmZzZXRDICsgd2FycFJvd09mZnNldCArIHduICogMzIgKyBqICogOCArIHdhcnBZICogNCArIGkpICoKICAgICAgICAgICAgICAgICAgTSArCiAgICAgICAgICAgICAgKGNvbE9mZnNldEMgKyB3YXJwQ29sT2Zmc2V0ICsgd20gKiAzMiArIHdhcnBYKV0gPQogICAgICAgICAgICAgICAgKF9faGlwX2JmbG9hdDE2KWRbd25dW3dtXVtpICsgaiAqIDRdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQoKYXQ6OlRlbnNvciBmcDhfbW0oYXQ6OlRlbnNvciBBLCBhdDo6VGVuc29yIEIsIGF0OjpUZW5zb3IgQV9zY2FsZSwKICAgICAgICAgICAgICAgICAgYXQ6OlRlbnNvciBCX3NjYWxlLCBhdDo6VGVuc29yIEMpIHsKICBzaXplX3QgTiA9IEEuc2l6ZSgwKSwgSyA9IEEuc2l6ZSgxKSwgTSA9IEIuc2l6ZSgwKTsKCiAgY29uc3Qgc2l6ZV90IEJLID0gMTY7CiAgY29uc3Qgc2l6ZV90IEJOID0gNjQ7CiAgY29uc3Qgc2l6ZV90IEJNID0gNjQ7CiAgY29uc3Qgc2l6ZV90IFdJVEVSTiA9IDE7CiAgY29uc3Qgc2l6ZV90IFdJVEVSTSA9IDE7CiAgZGltMyBudW1UaHJlYWRzKChCTiAqIEJNKSAvICgxNiAqIFdJVEVSTiAqIFdJVEVSTSkpOwogIGRpbTMgbnVtQmxvY2tzKGNkaXYoTSwgQk0pLCBjZGl2KE4sIEJOKSk7CiAgZnA4X21tX2tlcm5lbDxCTiwgQkssIEJNLCBXSVRFUk4sIFdJVEVSTT48PDxudW1CbG9ja3MsIG51bVRocmVhZHM+Pj4oCiAgICAgIChfX2hpcF9mcDhfZTRtM19mbnV6ICopQS5kYXRhX3B0cigpLCAoX19oaXBfZnA4X2U0bTNfZm51eiAqKUIuZGF0YV9wdHIoKSwKICAgICAgQV9zY2FsZS5kYXRhX3B0cjxmbG9hdD4oKSwgQl9zY2FsZS5kYXRhX3B0cjxmbG9hdD4oKSwKICAgICAgKF9faGlwX2JmbG9hdDE2ICopQy5kYXRhX3B0cigpLCBOLCBLLCBNKTsKICByZXR1cm4gQzsKfQoiIiIKCmNwcF9zcmMgPSByIiIiCmF0OjpUZW5zb3IgZnA4X21tKGF0OjpUZW5zb3IgQSwgYXQ6OlRlbnNvciBCLCBhdDo6VGVuc29yIEFfc2NhbGUsCiAgICAgICAgICAgICAgICAgIGF0OjpUZW5zb3IgQl9zY2FsZSwgYXQ6OlRlbnNvciBDKTsKIiIiCgptb2R1bGUgPSBsb2FkX2lubGluZSgKICAgIG5hbWU9ImZwOF9tbSIsCiAgICBjcHBfc291cmNlcz1bY3BwX3NyY10sCiAgICBjdWRhX3NvdXJjZXM9W2N1ZGFfc3JjXSwKICAgIGZ1bmN0aW9ucz1bImZwOF9tbSJdLAogICAgdmVyYm9zZT1UcnVlLAogICAgZXh0cmFfY3VkYV9jZmxhZ3M9WyItTzMiLCAiLS1vZmZsb2FkLWFyY2g9Z2Z4OTQyIiwgIi1zdGQ9YysrMjAiXSwKKQoKCmRlZiBjdXN0b21fa2VybmVsKGRhdGE6IGlucHV0X3QpIC0+IG91dHB1dF90OgogICAgYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYyA9IGRhdGEKICAgIHJldHVybiBtb2R1bGUuZnA4X21tKGEsIGIsIGFfc2NhbGUsIGJfc2NhbGUsIGMpCg==
No newline at end of file
+ IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1mcDgtbW0KIyFQT1BDT1JOIGdwdXMgTUkzMDAKCmltcG9ydCBvcwpmcm9tIHRhc2sgaW1wb3J0IGlucHV0X3QsIG91dHB1dF90CmZyb20gdG9yY2gudXRpbHMuY3BwX2V4dGVuc2lvbiBpbXBvcnQgbG9hZF9pbmxpbmUKCm9zLmVudmlyb25bIkNYWCJdID0gImNsYW5nKysiCgpjdWRhX3NyYyA9IHIiIiIKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aGlwL2hpcF9ydW50aW1lLmg+CiNpbmNsdWRlIDxoaXAvYW1kX2RldGFpbC9hbWRfaGlwX2JmMTYuaD4KI2luY2x1ZGUgPGhpcC9hbWRfZGV0YWlsL2FtZF9oaXBfZnA4Lmg+CgpfX2hvc3RfXyBfX2RldmljZV9fIF9fZm9yY2VpbmxpbmVfXyBzaXplX3QgY2RpdihzaXplX3QgYSwgc2l6ZV90IGIpIHsKICByZXR1cm4gKGEgKyBiIC0gMSkgLyBiOwp9CgojZGVmaW5lIEJMT0NLX0RJTSAxMjgKCnRlbXBsYXRlIDxjb25zdCBzaXplX3QgQk4sIGNvbnN0IHNpemVfdCBCSywgY29uc3Qgc2l6ZV90IEJNLAogICAgICAgICAgY29uc3Qgc2l6ZV90IFdJVEVSTiwgY29uc3Qgc2l6ZV90IFdJVEVSTT4KX19nbG9iYWxfXyB2b2lkIGZwOF9tbV9rZXJuZWwoY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiAqQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiAqQiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgKkFfc2NhbGUsIGNvbnN0IGZsb2F0ICpCX3NjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2hpcF9iZmxvYXQxNiAqQywgc2l6ZV90IE4sIHNpemVfdCBLLCBzaXplX3QgTSkgewogIHVzaW5nIGZsb2F0eDE2ID0gX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2ICogc2l6ZW9mKGZsb2F0KSkpKSBmbG9hdDsKCiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgVkVDVE9SX1NJWkUgPSA0OwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IFdBUlBTSVpFID0gNjQ7CiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgV04gPSAzMiAqIFdJVEVSTjsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBXTSA9IDMyICogV0lURVJNOwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bVRocmVhZHMgPSAoQk4gKiBCTSkgLyAoMTYgKiBXSVRFUk4gKiBXSVRFUk0pOwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IFNVQkJOID0gQk4gLyBWRUNUT1JfU0laRTsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBTVUJCTSA9IEJNIC8gVkVDVE9SX1NJWkU7CiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc3RyaWRlQSA9IG51bVRocmVhZHMgLyBTVUJCTjsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBzdHJpZGVCID0gbnVtVGhyZWFkcyAvIFNVQkJNOwoKICBzaXplX3Qgcm93T2Zmc2V0QyA9IGJsb2NrSWR4LnkgKiBCTjsKICBzaXplX3QgY29sT2Zmc2V0QyA9IGJsb2NrSWR4LnggKiBCTTsKICBzaXplX3QgY29sT2Zmc2V0QSA9IHJvd09mZnNldEM7CiAgc2l6ZV90IGNvbE9mZnNldEIgPSBjb2xPZmZzZXRDOwogIHNpemVfdCBNX3NjYWxlID0gY2RpdihNLCBCTE9DS19ESU0pOwoKICBzdGF0aWNfYXNzZXJ0KG51bVRocmVhZHMgJSBCTiA9PSAwLCAiQk4gc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgbnVtVGhyZWFkcyIpOwogIHN0YXRpY19hc3NlcnQobnVtVGhyZWFkcyAlIEJNID09IDAsICJCTSBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiBudW1UaHJlYWRzIik7CiAgc3RhdGljX2Fzc2VydChCSyA8PSAxMjggJiYgQk0gPD0gMTI4LCAiUmFuZ2UgYWJvdmUgMTI4IGlzIG5vdCBzdXBwb3J0ZWQiKTsKCiAgc2l6ZV90IGlubmVyQ29sQSA9IHRocmVhZElkeC54ICUgU1VCQk47CiAgc2l6ZV90IGlubmVyUm93QSA9IHRocmVhZElkeC54IC8gU1VCQk47CiAgc2l6ZV90IGlubmVyQ29sQiA9IHRocmVhZElkeC54ICUgU1VCQk07CiAgc2l6ZV90IGlubmVyUm93QiA9IHRocmVhZElkeC54IC8gU1VCQk07CgogIHNpemVfdCBsYW5lSWR4ID0gdGhyZWFkSWR4LnggJSBXQVJQU0laRTsKICBzaXplX3Qgd2FycElkeCA9IHRocmVhZElkeC54IC8gV0FSUFNJWkU7CiAgc2l6ZV90IHdhcnBDb2xPZmZzZXQgPSAod2FycElkeCAlIChCTSAvIFdNKSkgKiBXTTsKICBzaXplX3Qgd2FycFJvd09mZnNldCA9ICh3YXJwSWR4IC8gKEJNIC8gV00pKSAqIFdOOwogIHNpemVfdCB3YXJwWCA9IGxhbmVJZHggJSAzMjsKICBzaXplX3Qgd2FycFkgPSBsYW5lSWR4IC8gMzI7CgogIF9fc2hhcmVkX18gX19oaXBfZnA4X2U0bTNfZm51eiBBc1tCS11bQk5dLCBCc1tCS11bQk1dOwogIF9fc2hhcmVkX18gZmxvYXQgV3NbQk4gKyAxXTsKCiAgX19oaXBfZnA4X2U0bTNfZm51eiBhW1dJVEVSTl1bOF0sIGJbV0lURVJNXVs4XTsKICBmbG9hdHgxNiBkW1dJVEVSTl1bV0lURVJNXSA9IHswfTsKICBmbG9hdCBiX3NjYWxlOwoKICBmb3IgKHNpemVfdCB0aWxlT2Zmc2V0ID0gMDsgdGlsZU9mZnNldCA8IEs7IHRpbGVPZmZzZXQgKz0gQkspIHsKICAgIC8vIGxvYWQgZnJvbSBnbG9iYWwgdG8gc2hhcmVkIG1lbW9yeSBpbiBjb2FsZXNjZWQgbWFubmVyCiAgICBmb3IgKHNpemVfdCBpbm5lclJvd09mZnNldEEgPSAwOyBpbm5lclJvd09mZnNldEEgPCBCSzsKICAgICAgICAgaW5uZXJSb3dPZmZzZXRBICs9IHN0cmlkZUEpIHsKICAgICAgaWYgKCh0aWxlT2Zmc2V0ICsgaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBKSA8IEsgJiYKICAgICAgICAgIChjb2xPZmZzZXRBICsgaW5uZXJDb2xBICogVkVDVE9SX1NJWkUpIDwgTiAmJgogICAgICAgICAgKGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgPCBCSykgewogICAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0ICo+KAogICAgICAgICAgICAmQXNbaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBXVtpbm5lckNvbEEgKiBWRUNUT1JfU0laRV0pID0KICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQgKj4oCiAgICAgICAgICAgICAgICAmQVsodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgKiBOICsKICAgICAgICAgICAgICAgICAgIChjb2xPZmZzZXRBICsgaW5uZXJDb2xBICogVkVDVE9SX1NJWkUpXSk7CiAgICAgICAgaWYgKHRocmVhZElkeC54IDwgU1VCQk4pIHsKICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0NCAqPigmV3NbdGhyZWFkSWR4LnggKiBWRUNUT1JfU0laRV0pID0KICAgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdDQgKj4oCiAgICAgICAgICAgICAgICAgICZBX3NjYWxlWygodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgQkxPQ0tfRElNKSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbE9mZnNldEEgKyBpbm5lckNvbEEgKiBWRUNUT1JfU0laRSldKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoKGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgPCBCSykgewogICAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0ICo+KAogICAgICAgICAgICAmQXNbaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBXVtpbm5lckNvbEEgKiBWRUNUT1JfU0laRV0pID0gMC4wZjsKICAgICAgfQogICAgfQogICAgZm9yIChzaXplX3QgaW5uZXJSb3dPZmZzZXRCID0gMDsgaW5uZXJSb3dPZmZzZXRCIDwgQks7CiAgICAgICAgIGlubmVyUm93T2Zmc2V0QiArPSBzdHJpZGVCKSB7CiAgICAgIGlmICgodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgPCBLICYmCiAgICAgICAgICAoY29sT2Zmc2V0QiArIGlubmVyQ29sQiAqIFZFQ1RPUl9TSVpFKSA8IE0gJiYKICAgICAgICAgIChpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpIDwgQksgJiYKICAgICAgICAgIChpbm5lckNvbEIgKiBWRUNUT1JfU0laRSkgPCBCTSkgewogICAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0ICo+KAogICAgICAgICAgICAmQnNbaW5uZXJSb3dPZmZzZXRCICsgaW5uZXJSb3dCXVtpbm5lckNvbEIgKiBWRUNUT1JfU0laRV0pID0KICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQgKj4oCiAgICAgICAgICAgICAgICAmQlsodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgKiBNICsKICAgICAgICAgICAgICAgICAgIChjb2xPZmZzZXRCICsgaW5uZXJDb2xCICogVkVDVE9SX1NJWkUpXSk7CiAgICAgICAgaWYgKHRocmVhZElkeC54ID09IFdBUlBTSVpFKSB7IC8vIGxvYWQgdXNpbmcgc2Vjb25kIHdhcnAKICAgICAgICAgIFdzW0JOXSA9CiAgICAgICAgICAgICAgQl9zY2FsZVsoKHRpbGVPZmZzZXQgKyBpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpIC8gQkxPQ0tfRElNKSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgTV9zY2FsZSArCiAgICAgICAgICAgICAgICAgICAgICAoKGNvbE9mZnNldEIgKyBpbm5lckNvbEIgKiBWRUNUT1JfU0laRSkgLyBCTE9DS19ESU0pXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoKGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgPCBCSyAmJgogICAgICAgICAgICAgICAgIChpbm5lckNvbEIgKiBWRUNUT1JfU0laRSkgPCBCTSkgewogICAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0ICo+KAogICAgICAgICAgICAmQnNbaW5uZXJSb3dPZmZzZXRCICsgaW5uZXJSb3dCXVtpbm5lckNvbEIgKiBWRUNUT1JfU0laRV0pID0gMC4wZjsKICAgICAgfQogICAgfQoKICAgIF9fc3luY3RocmVhZHMoKTsKCiAgICBmb3IgKHNpemVfdCBCS09mZnNldCA9IDA7IEJLT2Zmc2V0IDwgQks7IEJLT2Zmc2V0ICs9IDE2KSB7CiAgICAgIGZvciAoc2l6ZV90IHduID0gMDsgd24gPCBXSVRFUk47ICsrd24pIHsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDg7ICsraSkgewogICAgICAgICAgYVt3bl1baV0gPQogICAgICAgICAgICAgIEFzW0JLT2Zmc2V0ICsgd2FycFkgKiA4ICsgaV1bd2FycFJvd09mZnNldCArIHduICogMzIgKyB3YXJwWF07CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAoc2l6ZV90IHdtID0gMDsgd20gPCBXSVRFUk07ICsrd20pIHsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDg7ICsraSkgewogICAgICAgICAgYlt3bV1baV0gPQogICAgICAgICAgICAgIEJzW0JLT2Zmc2V0ICsgd2FycFkgKiA4ICsgaV1bd2FycENvbE9mZnNldCArIHdtICogMzIgKyB3YXJwWF07CiAgICAgICAgfQogICAgICB9CiAgICAgIGZsb2F0IGJfc2NhbGUgPSBXc1tCTl07CiAgICAgIGZvciAoc2l6ZV90IHduID0gMDsgd24gPCBXSVRFUk47ICsrd24pIHsKICAgICAgICBmb3IgKHNpemVfdCB3bSA9IDA7IHdtIDwgV0lURVJNOyArK3dtKSB7CiAgICAgICAgICBmbG9hdHgxNiBjID0gezB9OwogICAgICAgICAgYyA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMzJ4MzJ4MTZfZnA4X2ZwOCgKICAgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxsb25nICo+KGFbd25dKSwKICAgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxsb25nICo+KGJbd21dKSwgYywgMCwgMCwgMCk7CiAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IDQ7ICsraikgewogICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkgewogICAgICAgICAgICAgIGRbd25dW3dtXVtpICsgaiAqIDRdICs9CiAgICAgICAgICAgICAgICAgIGNbaSArIGogKiA0XSAqCiAgICAgICAgICAgICAgICAgIFdzW3dhcnBSb3dPZmZzZXQgKyB3biAqIDMyICsgaiAqIDggKyB3YXJwWSAqIDQgKyBpXSAqIGJfc2NhbGU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBfX3N5bmN0aHJlYWRzKCk7CiAgfQoKICBmb3IgKHNpemVfdCB3biA9IDA7IHduIDwgV0lURVJOOyArK3duKSB7CiAgICBmb3IgKHNpemVfdCB3bSA9IDA7IHdtIDwgV0lURVJNOyArK3dtKSB7CiAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgNDsgKytqKSB7CiAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpIHsKICAgICAgICAgIGlmICgocm93T2Zmc2V0QyArIHdhcnBSb3dPZmZzZXQgKyB3biAqIDMyICsgaiAqIDggKyB3YXJwWSAqIDQgKyBpKSA8CiAgICAgICAgICAgICAgICAgIE4gJiYKICAgICAgICAgICAgICAoY29sT2Zmc2V0QyArIHdhcnBDb2xPZmZzZXQgKyB3bSAqIDMyICsgd2FycFgpIDwgTSkKICAgICAgICAgICAgQ1socm93T2Zmc2V0QyArIHdhcnBSb3dPZmZzZXQgKyB3biAqIDMyICsgaiAqIDggKyB3YXJwWSAqIDQgKyBpKSAqCiAgICAgICAgICAgICAgICAgIE0gKwogICAgICAgICAgICAgIChjb2xPZmZzZXRDICsgd2FycENvbE9mZnNldCArIHdtICogMzIgKyB3YXJwWCldID0KICAgICAgICAgICAgICAgIChfX2hpcF9iZmxvYXQxNilkW3duXVt3bV1baSArIGogKiA0XTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn0KCmF0OjpUZW5zb3IgZnA4X21tKGF0OjpUZW5zb3IgQSwgYXQ6OlRlbnNvciBCLCBhdDo6VGVuc29yIEFfc2NhbGUsCiAgICAgICAgICAgICAgICAgIGF0OjpUZW5zb3IgQl9zY2FsZSwgYXQ6OlRlbnNvciBDKSB7CiAgc2l6ZV90IE4gPSBBLnNpemUoMCksIEsgPSBBLnNpemUoMSksIE0gPSBCLnNpemUoMCk7CgogIGNvbnN0IHNpemVfdCBCSyA9IDEyODsKICBjb25zdCBzaXplX3QgQk4gPSAxMjg7CiAgY29uc3Qgc2l6ZV90IEJNID0gMTI4OwogIGNvbnN0IHNpemVfdCBXSVRFUk4gPSAxOwogIGNvbnN0IHNpemVfdCBXSVRFUk0gPSAxOwogIGRpbTMgbnVtVGhyZWFkcygoQk4gKiBCTSkgLyAoMTYgKiBXSVRFUk4gKiBXSVRFUk0pKTsKICBkaW0zIG51bUJsb2NrcyhjZGl2KE0sIEJNKSwgY2RpdihOLCBCTikpOwogIGZwOF9tbV9rZXJuZWw8Qk4sIEJLLCBCTSwgV0lURVJOLCBXSVRFUk0+PDw8bnVtQmxvY2tzLCBudW1UaHJlYWRzPj4+KAogICAgICAoX19oaXBfZnA4X2U0bTNfZm51eiAqKUEuZGF0YV9wdHIoKSwgKF9faGlwX2ZwOF9lNG0zX2ZudXogKilCLmRhdGFfcHRyKCksCiAgICAgIEFfc2NhbGUuZGF0YV9wdHI8ZmxvYXQ+KCksIEJfc2NhbGUuZGF0YV9wdHI8ZmxvYXQ+KCksCiAgICAgIChfX2hpcF9iZmxvYXQxNiAqKUMuZGF0YV9wdHIoKSwgTiwgSywgTSk7CiAgcmV0dXJuIEM7Cn0KIiIiCgpjcHBfc3JjID0gciIiIgphdDo6VGVuc29yIGZwOF9tbShhdDo6VGVuc29yIEEsIGF0OjpUZW5zb3IgQiwgYXQ6OlRlbnNvciBBX3NjYWxlLAogICAgICAgICAgICAgICAgICBhdDo6VGVuc29yIEJfc2NhbGUsIGF0OjpUZW5zb3IgQyk7CiIiIgoKaW1wb3J0IHN5cwoKaWYgc3lzLnN0ZG91dCBpcyBOb25lOgogICAgc3lzLnN0ZG91dCA9IG9wZW4oIi9kZXYvc3Rkb3V0IiwgInciKQppZiBzeXMuc3RkZXJyIGlzIE5vbmU6CiAgICBzeXMuc3RkZXJyID0gb3BlbigiL2Rldi9zdGRlcnIiLCAidyIpCgptb2R1bGUgPSBsb2FkX2lubGluZSgKICAgIG5hbWU9ImZwOF9tbSIsCiAgICBjcHBfc291cmNlcz1bY3BwX3NyY10sCiAgICBjdWRhX3NvdXJjZXM9W2N1ZGFfc3JjXSwKICAgIGZ1bmN0aW9ucz1bImZwOF9tbSJdLAogICAgdmVyYm9zZT1UcnVlLAogICAgZXh0cmFfY3VkYV9jZmxhZ3M9WyItTzMiLCAiLS1vZmZsb2FkLWFyY2g9Z2Z4OTQyIiwgIi1zdGQ9YysrMjAiXSwKKQoKCmRlZiBjdXN0b21fa2VybmVsKGRhdGE6IGlucHV0X3QpIC0+IG91dHB1dF90OgogICAgYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYyA9IGRhdGEKICAgIHJldHVybiBtb2R1bGUuZnA4X21tKGEsIGIsIGFfc2NhbGUsIGJfc2NhbGUsIGMpCg==
No newline at end of file

Best evidence level for this revision: reported

JSON