submission 33210
KernelBot user 346 · 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-33210?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, 7168] · n=576 · seed=12346
AMD Instinct MI300X
119.6µs
#51 of 98
2025-07-10
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=512 · seed=6563
AMD Instinct MI300X
120.7µs
#50 of 98
2025-07-10
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=1536 · seed=8135
AMD Instinct MI300X
147.7µs
#36 of 98
2025-07-10
Show all 18 measurements ›Showing all 18 measurements ⌄
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=512 · seed=12341
AMD Instinct MI300X
212.7µs
#48 of 98
2025-07-10
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=576 · seed=9863
AMD Instinct MI300X
216.7µs
#44 of 98
2025-07-10
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=4608 · seed=7531
AMD Instinct MI300X
241.5µs
#47 of 98
2025-07-10
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=1536 · seed=6543
AMD Instinct MI300X
338.9µs
#30 of 98
2025-07-10
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=4608 · seed=65436
AMD Instinct MI300X
1.01ms
#39 of 98
2025-07-10
Reported · How evidence levels are derived →
Source and license
sourceavailable
revision digestsha256:63eee3601c3a1812a796c21024bd05f58a5bc0c9c6d2e79fc550f0230998b1d4
license declaredunknown
license concludedunknown
imported2026-08-15
Kernel source
submission.py1 lines
aW1wb3J0IHRvcmNoCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQoKIyBDKysgaW1wbGVtZW50YXRpb24gb2YgRlA4IEdFTU0gKG1hdGNoaW5nIGN1c3RvbV9rZXJuZWxfMSBsb2dpYykKY3VkYV9zb3VyY2UgPSAiIiIKI2luY2x1ZGUgPGhpcC9oaXBfcnVudGltZS5oPgojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4KI2luY2x1ZGUgPGhpcC9hbWRfZGV0YWlsL2FtZF9oaXBfYmYxNi5oPgoKI2RlZmluZSBTSE1CTE9DSyA2NAojZGVmaW5lIFRCTE9DSyAxNgoKdXNpbmcgZmxvYXQxNiAgPSBfX2hpcF9iZmxvYXQxNjsKdXNpbmcgVmVjNCAgICAgPSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oNCAqIHNpemVvZihmbG9hdCkpKSkgZmxvYXQ7CnVzaW5nIElWZWM0ICAgID0gX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDQgKiBzaXplb2YodWludDMyX3QpKSkpIHVpbnQzMl90Owp1c2luZyBWZWMxNiAgICA9IF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNiAqIHNpemVvZihmbG9hdCkpKSkgZmxvYXQ7CnVzaW5nIGZsb2F0OHg4ID0gX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDggKiBzaXplb2YodWludDhfdCkpKSkgdWludDhfdDsKCmlubGluZSBfX2RldmljZV9fIHVpbnQ2NF90IGNhc3Rmcm9tOHg4KGNvbnN0IGZsb2F0OHg4JiBmKQp7CiAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDY0X3QqPigmZik7Cn0KCmlubGluZSBfX2RldmljZV9fIFZlYzQgbWZtYShjb25zdCBmbG9hdDh4OCYgYTAsIGNvbnN0IGZsb2F0OHg4JiBhMSwgY29uc3QgZmxvYXQ4eDgmIGIwLCBjb25zdCBmbG9hdDh4OCYgYjEpCnsKICAgIFZlYzQgcmV0ID0gX19idWlsdGluX2FtZGdjbl9tZm1hX2YzMl8xNngxNngzMl9mcDhfZnA4KGNhc3Rmcm9tOHg4KGEwKSwgY2FzdGZyb204eDgoYjApLCBWZWM0e30sIDAsIDAsIDApOwogICAgcmV0dXJuIF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOChjYXN0ZnJvbTh4OChhMSksIGNhc3Rmcm9tOHg4KGIxKSwgcmV0LCAwLCAwLCAwKTsKfQoKdGVtcGxhdGU8aW50IFdJRFRIPgpfX2dsb2JhbF9fIHZvaWQgX19sYXVuY2hfYm91bmRzX18oVEJMT0NLKlRCTE9DSyoyLCA0KQpmcDhfZ2VtbV9rZXJuZWwoCiAgICBjb25zdCB1aW50OF90KiBfX3Jlc3RyaWN0X18gYSwKICAgIGNvbnN0IHVpbnQ4X3QqIF9fcmVzdHJpY3RfXyBiLAogICAgZmxvYXQxNiogX19yZXN0cmljdF9fIGMsCiAgICBjb25zdCBmbG9hdCogX19yZXN0cmljdF9fIHNjYWxlX2EsCiAgICBjb25zdCBmbG9hdCogX19yZXN0cmljdF9fIHNjYWxlX2IsCiAgICBpbnQgTURJTSwgaW50IE5ESU0sIGludCBLRElNCikgewogICAgY29uc3QgaW50IFggPSBibG9ja0lkeC54ICogU0hNQkxPQ0sgKiBXSURUSDsKICAgIGNvbnN0IGludCBZID0gYmxvY2tJZHgueSAqIFNITUJMT0NLOwogICAgCiAgICBjb25zdCBpbnQgVFggPSB0aHJlYWRJZHgueCVUQkxPQ0s7CiAgICBjb25zdCBpbnQgVFkgPSB0aHJlYWRJZHgueSU0OwogICAgY29uc3QgaW50IFRaID0gKHRocmVhZElkeC55LzQpJTQ7CiAgICBjb25zdCBpbnQgVFlaID0gdGhyZWFkSWR4LnklMTY7CiAgICBjb25zdCBpbnQgVFcgPSAodGhyZWFkSWR4LnkvMTYpJTI7CgogICAgX19zaGFyZWRfXyB1aW50OF90IGFfc2hhcmVkW1dJRFRIXVs0XVs0XVs0XVtUQkxPQ0tdWzRdOwogICAgX19zaGFyZWRfXyB1aW50OF90IGJfc2hhcmVkWzRdWzRdWzRdW1RCTE9DS11bNF07CiAgICBfX3NoYXJlZF9fIGZsb2F0ICAgc2NhbGFyWzRdW1RCTE9DS11bV0lEVEhdOwoKICAgIGlmIChUVyAhPSAwKQogICAgewogICAgICAgIGZvciAoaW50IGsxPTA7IGsxIDwgS0RJTTsgazEgKz0gMipTSE1CTE9DSykKICAgICAgICBmb3IgKGludCBrMj0wOyBrMiA8IDIqU0hNQkxPQ0s7IGsyICs9IFNITUJMT0NLKQogICAgICAgIHsKICAgICAgICAgICAgaW50IGswID0gazEgKyBrMjsKICAgICAgICAgICAgSVZlYzQgdGVtcF9hW1dJRFRIXSwgdGVtcF9iOwoKICAgICAgICAgICAgZm9yIChpbnQgajE9MDsgajE8NDsgajErKykKICAgICAgICAgICAgaWYgKGswICsgajEqVEJMT0NLIDwgS0RJTSkKICAgICAgICAgICAgICAgIHRlbXBfYltqMV0gPSAoWSArIDQqVFggPCBORElNKSA/ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oJmJbKGswICsgajEqVEJMT0NLICsgVFlaKSpORElNICsgWSArIDQqVFhdKSA6IDA7CgogICAgICAgICAgICBmb3IgKGludCBqMT0wOyBqMTw0OyBqMSsrKSBpZiAoazAgKyBqMSpUQkxPQ0sgPCBLRElNKQogICAgICAgICAgICBmb3IgKGludCBuPTA7IG48V0lEVEg7IG4rKykKICAgICAgICAgICAgICAgIHRlbXBfYVtuXVtqMV0gPSAoWCArIDQqVFggKyBuKlNITUJMT0NLIDwgTURJTSkgPyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KCZhWyhrMCArIGoxKlRCTE9DSyArIFRZWikqTURJTSArIFggKyA0KlRYICsgbipTSE1CTE9DS10pIDogMDsKCiAgICAgICAgICAgIGludCB0eDMgPSAoVFggJiAzKSA8PCAyOwogICAgICAgICAgICBpbnQgaTEgPSBUWCA+PiAyOwoKICAgICAgICAgICAgaWYgKGswICE9IDApIF9fc3luY3RocmVhZHMoKTsKCiAgICAgICAgICAgIGZvciAoaW50IGoxPTA7IGoxPDQ7IGoxKyspCiAgICAgICAgICAgIGZvciAoaW50IG09MDsgbTw0OyBtKyspCiAgICAgICAgICAgICAgICBiX3NoYXJlZFtqMV1bVFpdW1RZXVt0eDMgKyBtXVtpMV0gPSAodGVtcF9iW2oxXSA+PiAoOCptKSkgJiAweEZGOwoKICAgICAgICAgICAgZm9yIChpbnQgajE9MDsgajE8NDsgajErKykKICAgICAgICAgICAgZm9yIChpbnQgbT0wOyBtPDQ7IG0rKykKICAgICAgICAgICAgZm9yIChpbnQgbj0wOyBuPFdJRFRIOyBuKyspCiAgICAgICAgICAgICAgICBhX3NoYXJlZFtuXVtpMV1bVFpdW1RZXVt0eDMgKyBtXVtqMV0gPSAodGVtcF9hW25dW2oxXSA+PiAoOCptKSkgJiAweEZGOwoKICAgICAgICAgICAgX19zeW5jdGhyZWFkcygpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9CgogICAgVmVjMTYgcmVnX3Jlc1tXSURUSF07CiAgICBmb3IgKGludCBuPTA7IG48V0lEVEg7IG4rKykgcmVnX3Jlc1tuXSA9IHt9OwoKICAgIGZsb2F0IHRtcF9hW1dJRFRIXTsKICAgIGZsb2F0IHRtcF9iOwogICAgaWYgKFRaID09IDApCiAgICB7CiAgICAgICAgZm9yIChpbnQgbj0wOyBuPFdJRFRIOyBuKyspCiAgICAgICAgICAgIHRtcF9hW25dID0gKFggKyBUWSpUQkxPQ0sgKyBuKlNITUJMT0NLIDwgTURJTSkgPyBzY2FsZV9hW1ggKyBUWSpUQkxPQ0sgKyBUWCArIG4qU0hNQkxPQ0tdIDogMDsKICAgICAgICB0bXBfYiA9IHNjYWxlX2JbWS8xMjhdOwogICAgfQoKICAgIGZvciAoaW50IGsxPTA7IGsxIDwgS0RJTTsgazEgKz0gMipTSE1CTE9DSykKICAgIHsKICAgICAgICBpZiAoVFogPT0gMCkKICAgICAgICB7CiAgICAgICAgICAgIGZvciAoaW50IG49MDsgbjxXSURUSDsgbisrKSBzY2FsYXJbVFldW1RYXVtuXSA9IHRtcF9iICogdG1wX2Fbbl07CgogICAgICAgICAgICBpZiAoazEgKyAyKlNITUJMT0NLIDwgS0RJTSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yIChpbnQgbj0wOyBuPFdJRFRIOyBuKyspCiAgICAgICAgICAgICAgICAgICAgdG1wX2Fbbl0gPSAoWCArIFRZKlRCTE9DSyArIG4qU0hNQkxPQ0sgPCBNRElNKSA/IHNjYWxlX2FbKGsxLzEyOCArIDEpKk1ESU0gKyBYICsgVFkqVEJMT0NLICsgVFggKyBuKlNITUJMT0NLXSA6IDA7CiAgICAgICAgICAgICAgICB0bXBfYiA9IHNjYWxlX2JbKGsxLzEyOCArIDEpKigoTkRJTSsxMjcpLzEyOCkgKyAoWS8xMjgpXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKGludCBrMj0wOyBrMiA8IDIqU0hNQkxPQ0s7IGsyICs9IFNITUJMT0NLKQogICAgICAgIHsKICAgICAgICAgICAgaW50IGswID0gazEgKyBrMjsKICAgICAgICAgICAgCiAgICAgICAgICAgIF9fc3luY3RocmVhZHMoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGZsb2F0OHg4IGEwX2xvYWRbV0lEVEhdLCBhMV9sb2FkW1dJRFRIXTsKICAgICAgICAgICAgZmxvYXQ4eDggYjBfbG9hZFs0XSwgYjFfbG9hZFs0XTsKCiAgICAjcHJhZ21hIHVucm9sbAogICAgICAgICAgICBmb3IgKGludCBtPTA7IG08ODsgbSsrKQogICAgI3ByYWdtYSB1bnJvbGwKICAgICAgICAgICAgZm9yIChpbnQgbj0wOyBuPDQ7IG4rKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYjBfbG9hZFtuXVttXSA9IGJfc2hhcmVkW20vNCArIDBdW20lNF1bVFldW1RYXVtuXTsKICAgICAgICAgICAgICAgIGIxX2xvYWRbbl1bbV0gPSBiX3NoYXJlZFttLzQgKyAyXVttJTRdW1RZXVtUWF1bbl07CiAgICAgICAgICAgIH0KCiAgICAjcHJhZ21hIHVucm9sbAogICAgICAgICAgICBmb3IgKGludCBtPTA7IG08ODsgbSsrKQogICAgI3ByYWdtYSB1bnJvbGwKICAgICAgICAgICAgZm9yIChpbnQgcj0wOyByPFdJRFRIOyByKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGEwX2xvYWRbcl1bbV0gPSBhX3NoYXJlZFtyXVtUWl1bbSU0XVtUWV1bVFhdW20vNCArIDBdOwogICAgICAgICAgICAgICAgYTFfbG9hZFtyXVttXSA9IGFfc2hhcmVkW3JdW1RaXVttJTRdW1RZXVtUWF1bbS80ICsgMl07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIFZlYzQgc2NhbFtXSURUSF07CiAgICAjcHJhZ21hIHVucm9sbAogICAgICAgICAgICBmb3IgKGludCBuPTA7IG48V0lEVEg7IG4rKykKICAgICNwcmFnbWEgdW5yb2xsCiAgICAgICAgICAgIGZvciAoaW50IG09MDsgbTw0OyBtKyspCiAgICAgICAgICAgICAgICBzY2FsW25dW21dID0gc2NhbGFyW1RaXVtUWSo0ICsgbV1bbl07CgogICAgICAgICAgICBfX3N5bmN0aHJlYWRzKCk7CgogICAgI3ByYWdtYSB1bnJvbGwKICAgICAgICAgICAgZm9yIChpbnQgbj0wOyBuPDQ7IG4rKykKICAgICNwcmFnbWEgdW5yb2xsCiAgICAgICAgICAgIGZvciAoaW50IHIxPTA7IHIxPFdJRFRIOyByMSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWZWM0IHJlcyA9IG1mbWEoYTBfbG9hZFtyMV0sIGExX2xvYWRbcjFdLCBiMF9sb2FkW25dLCBiMV9sb2FkW25dKTsKCiAgICAgICAgICAgICAgICBmb3IgKGludCBtPTA7IG08NDsgbSsrKQogICAgICAgICAgICAgICAgICAgIHJlZ19yZXNbcjFdW20qNCArIG5dICs9IHNjYWxbcjFdW21dICogcmVzW21dOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZvciAoaW50IGo9MDsgajw0OyBqICsrKSBmb3IgKGludCBpPTA7IGk8NDsgaSArKykgZm9yIChpbnQgcjE9MDsgcjE8V0lEVEg7IHIxKyspCiAgICBpZiAoWSArIGkqVEJMT0NLIDwgTkRJTSAmJiA0KlRZWiArIFggKyByMSpTSE1CTE9DSyA8IE1ESU0pCiAgICAgICAgY1soNCpUWVogKyBqICsgWCArIHIxKlNITUJMT0NLKSpORElNICsgWSArIGkqVEJMT0NLICsgVFhdID0gKGZsb2F0MTYpIHJlZ19yZXNbcjFdW2oqNCArIGldOwp9Cgp2b2lkIGxhdW5jaEhpcCgKICAgIGNvbnN0IHZvaWQqIGEsCiAgICBjb25zdCB2b2lkKiBiLAogICAgdm9pZCogYywKICAgIGNvbnN0IGZsb2F0KiBzY2FsZV9hLAogICAgY29uc3QgZmxvYXQqIHNjYWxlX2IsCiAgICBpbnQgTSwgaW50IE4sIGludCBLCikgewogICAgZGltMyBibG9jayhUQkxPQ0ssIDMyLCAxKTsKCiAgICBpbnQgbWkzMDBfdGhyZWFkcyA9IFNITUJMT0NLICogU0hNQkxPQ0sgKiAzMDQ7CiAgICBpbnQgYnBjdSA9IE0gKiBOIC8gbWkzMDBfdGhyZWFkczsKCiAgICBpZiAoYnBjdSA+PSA2ICYmIE0gPj0gNCpTSE1CTE9DSykKICAgIHsKICAgICAgICBkaW0zIGdyaWQoKE0gKyA0KlNITUJMT0NLIC0gMSkgLyBTSE1CTE9DSyAvIDQsIE4gLyBTSE1CTE9DSyk7CgogICAgICAgIGZwOF9nZW1tX2tlcm5lbDw0Pjw8PGdyaWQsIGJsb2NrLCAwLCAwPj4+KAogICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihhKSwKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYiksCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQxNio+KGMpLAogICAgICAgICAgICBzY2FsZV9hLAogICAgICAgICAgICBzY2FsZV9iLAogICAgICAgICAgICBNLCBOLCBLKTsKICAgIH0KICAgIGVsc2UgaWYgKGJwY3UgPj0gMiAmJiBNID49IDIqU0hNQkxPQ0spCiAgICB7CiAgICAgICAgZGltMyBncmlkKChNICsgMipTSE1CTE9DSyAtIDEpIC8gU0hNQkxPQ0sgLyAyLCBOIC8gU0hNQkxPQ0spOwoKICAgICAgICBmcDhfZ2VtbV9rZXJuZWw8Mj48PDxncmlkLCBibG9jaywgMCwgMD4+PigKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYSksCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGIpLAogICAgICAgICAgICByZWludGVycHJldF9jYXN0PGZsb2F0MTYqPihjKSwKICAgICAgICAgICAgc2NhbGVfYSwKICAgICAgICAgICAgc2NhbGVfYiwKICAgICAgICAgICAgTSwgTiwgSyk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgZGltMyBncmlkKChNICsgU0hNQkxPQ0sgLSAxKSAvIFNITUJMT0NLLCBOIC8gU0hNQkxPQ0spOwoKICAgICAgICBmcDhfZ2VtbV9rZXJuZWw8MT48PDxncmlkLCBibG9jaywgMCwgMD4+PigKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYSksCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGIpLAogICAgICAgICAgICByZWludGVycHJldF9jYXN0PGZsb2F0MTYqPihjKSwKICAgICAgICAgICAgc2NhbGVfYSwKICAgICAgICAgICAgc2NhbGVfYiwKICAgICAgICAgICAgTSwgTiwgSyk7CiAgICB9Cn0KIiIiCgojIEMrKyBpbXBsZW1lbnRhdGlvbiBvZiBGUDggR0VNTSAobWF0Y2hpbmcgY3VzdG9tX2tlcm5lbF8xIGxvZ2ljKQpjcHBfc291cmNlID0gIiIiCiNpbmNsdWRlIDx0b3JjaC9leHRlbnNpb24uaD4KI2luY2x1ZGUgPEFUZW4vQVRlbi5oPgoKdm9pZCBsYXVuY2hIaXAoCiAgICBjb25zdCB2b2lkKiBhLAogICAgY29uc3Qgdm9pZCogYiwKICAgIHZvaWQqIGMsCiAgICBjb25zdCBmbG9hdCogc2NhbGVfYSwKICAgIGNvbnN0IGZsb2F0KiBzY2FsZV9iLAogICAgaW50IE0sIGludCBOLCBpbnQgSwopOwoKdm9pZCBmcDhfZ2VtbSgKICAgIHRvcmNoOjpUZW5zb3IgYSwKICAgIHRvcmNoOjpUZW5zb3IgYiwKICAgIHRvcmNoOjpUZW5zb3IgYywKICAgIHRvcmNoOjpUZW5zb3IgYV9zY2FsZSwKICAgIHRvcmNoOjpUZW5zb3IgYl9zY2FsZQopIHsKICAgIGNvbnN0IGludCBtID0gYS5zaXplKDApOwogICAgY29uc3QgaW50IG4gPSBiLnNpemUoMCk7CiAgICBjb25zdCBpbnQgayA9IGEuc2l6ZSgxKTsKCiAgICBsYXVuY2hIaXAoCiAgICAgICAgYS5kYXRhX3B0cigpLAogICAgICAgIGIuZGF0YV9wdHIoKSwKICAgICAgICBjLmRhdGFfcHRyKCksCiAgICAgICAgYV9zY2FsZS5kYXRhX3B0cjxmbG9hdD4oKSwKICAgICAgICBiX3NjYWxlLmRhdGFfcHRyPGZsb2F0PigpLAogICAgICAgIG0sIG4sIGsKICAgICk7Cn0KClBZQklORDExX01PRFVMRShUT1JDSF9FWFRFTlNJT05fTkFNRSwgbSkgewogICAgbS5kZWYoImZwOF9nZW1tIiwgJmZwOF9nZW1tLCAiRlA4IEdFTU0iKTsKfQoiIiIKCmltcG9ydCBvcwpvcy5lbnZpcm9uWydQWVRPUkNIX1JPQ01fQVJDSCddID0gJ2dmeDk0MicKCiMgQ29tcGlsZSB0aGUgQysrIGV4dGVuc2lvbiBpbmxpbmUKY3BwX2V4dGVuc2lvbiA9IGxvYWRfaW5saW5lKAogICAgbmFtZT0iZnA4X2dlbW1fY3BwIiwKICAgIGNwcF9zb3VyY2VzPWNwcF9zb3VyY2UsCiAgICBjdWRhX3NvdXJjZXM9Y3VkYV9zb3VyY2UsCiAgICBleHRyYV9jdWRhX2NmbGFncz1bIi1PMyIsICItLW9mZmxvYWQtYXJjaD1nZng5NDIiLCAiLXN0ZD1jKysxNyJdLAogICAgZXh0cmFfY2ZsYWdzPVsnLU8zJ10sCiAgICB2ZXJib3NlPUZhbHNlCikKCmRlZiBjdXN0b21fa2VybmVsKGRhdGE6IGlucHV0X3QpIC0+IG91dHB1dF90OgogICAgYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYyA9IGRhdGEKCiAgICBjcHBfZXh0ZW5zaW9uLmZwOF9nZW1tKGEsIGIsIGMsIGFfc2NhbGUsIGJfc2NhbGUpCgogICAgcmV0dXJuIGMKSource 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 33182.
- aW1wb3J0IHRvcmNoCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQoKIyBDKysgaW1wbGVtZW50YXRpb24gb2YgRlA4IEdFTU0gKG1hdGNoaW5nIGN1c3RvbV9rZXJuZWxfMSBsb2dpYykKY3VkYV9zb3VyY2UgPSAiIiIKI2luY2x1ZGUgPGhpcC9oaXBfcnVudGltZS5oPgojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4KI2luY2x1ZGUgPGhpcC9hbWRfZGV0YWlsL2FtZF9oaXBfYmYxNi5oPgoKI2RlZmluZSBTSE1CTE9DSyA2NAojZGVmaW5lIFRCTE9DSyAxNgoKdXNpbmcgZmxvYXQxNiA9IF9faGlwX2JmbG9hdDE2Owp1c2luZyBmbG9hdDggID0gX19oaXBfZnA4X2U0bTNfZm51ejsKdXNpbmcgVmVjNCAgICA9IF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg0ICogc2l6ZW9mKGZsb2F0KSkpKSBmbG9hdDsKdXNpbmcgSVZlYzQgICAgPSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oNCAqIHNpemVvZih1aW50MzJfdCkpKSkgdWludDMyX3Q7CnVzaW5nIFZlYzE2ICAgPSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oMTYgKiBzaXplb2YoZmxvYXQpKSkpIGZsb2F0Owp1c2luZyBmbG9hdDh4OCA9IF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg4ICogc2l6ZW9mKHVpbnQ4X3QpKSkpIHVpbnQ4X3Q7CgppbmxpbmUgX19kZXZpY2VfXyB1aW50NjRfdCBjYXN0ZnJvbTh4OChjb25zdCBmbG9hdDh4OCYgZikKewogICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ2NF90Kj4oJmYpOwp9CgppbmxpbmUgX19kZXZpY2VfXyBWZWM0IG1mbWEoY29uc3QgZmxvYXQ4eDgmIGEwLCBjb25zdCBmbG9hdDh4OCYgYTEsIGNvbnN0IGZsb2F0OHg4JiBiMCwgY29uc3QgZmxvYXQ4eDgmIGIxKQp7CiAgICBWZWM0IHJldCA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOChjYXN0ZnJvbTh4OChhMCksIGNhc3Rmcm9tOHg4KGIwKSwgVmVjNHt9LCAwLCAwLCAwKTsKICAgIHJldHVybiBfX2J1aWx0aW5fYW1kZ2NuX21mbWFfZjMyXzE2eDE2eDMyX2ZwOF9mcDgoY2FzdGZyb204eDgoYTEpLCBjYXN0ZnJvbTh4OChiMSksIHJldCwgMCwgMCwgMCk7Cn0KCnRlbXBsYXRlPGludCBXSURUSD4KX19nbG9iYWxfXyB2b2lkIF9fbGF1bmNoX2JvdW5kc19fKFRCTE9DSypUQkxPQ0sqMiwgNCkKZnA4X2dlbW1fa2VybmVsKAogICAgY29uc3QgdWludDhfdCogX19yZXN0cmljdF9fIGEsCiAgICBjb25zdCB1aW50OF90KiBfX3Jlc3RyaWN0X18gYiwKICAgIGZsb2F0MTYqIF9fcmVzdHJpY3RfXyBjLAogICAgY29uc3QgZmxvYXQqIF9fcmVzdHJpY3RfXyBzY2FsZV9hLAogICAgY29uc3QgZmxvYXQqIF9fcmVzdHJpY3RfXyBzY2FsZV9iLAogICAgaW50IE1ESU0sIGludCBORElNLCBpbnQgS0RJTQopIHsKICAgIGNvbnN0IGludCBYID0gYmxvY2tJZHgueCAqIFNITUJMT0NLICogV0lEVEg7CiAgICBjb25zdCBpbnQgWSA9IGJsb2NrSWR4LnkgKiBTSE1CTE9DSzsKICAgIAogICAgY29uc3QgaW50IFRYID0gdGhyZWFkSWR4LnglVEJMT0NLOwogICAgY29uc3QgaW50IFRZID0gdGhyZWFkSWR4LnklNDsKICAgIGNvbnN0IGludCBUWiA9ICh0aHJlYWRJZHgueS80KSU0OwogICAgY29uc3QgaW50IFRZWiA9IHRocmVhZElkeC55JTE2OwogICAgY29uc3QgaW50IFRXID0gKHRocmVhZElkeC55LzE2KSUyOwoKICAgIF9fc2hhcmVkX18gdWludDhfdCBhX3NoYXJlZFtXSURUSF1bNF1bNF1bNF1bVEJMT0NLXVs0XTsKICAgIF9fc2hhcmVkX18gdWludDhfdCBiX3NoYXJlZFs0XVs0XVs0XVtUQkxPQ0tdWzRdOwogICAgX19zaGFyZWRfXyBmbG9hdCAgIHNjYWxhcls0XVtUQkxPQ0tdW1dJRFRIXTsKCiAgICBpZiAoVFcgIT0gMCkKICAgIHsKICAgICAgICBmb3IgKGludCBrMT0wOyBrMSA8IEtESU07IGsxICs9IDIqU0hNQkxPQ0spCiAgICAgICAgZm9yIChpbnQgazI9MDsgazIgPCAyKlNITUJMT0NLOyBrMiArPSBTSE1CTE9DSykKICAgICAgICB7CiAgICAgICAgICAgIGludCBrMCA9IGsxICsgazI7CiAgICAgICAgICAgIElWZWM0IHRlbXBfYVtXSURUSF0sIHRlbXBfYjsKCiAgICAgICAgICAgIGZvciAoaW50IGoxPTA7IGoxPDQ7IGoxKyspCiAgICAgICAgICAgIGlmIChrMCArIGoxKlRCTE9DSyA8IEtESU0pCiAgICAgICAgICAgICAgICB0ZW1wX2JbajFdID0gKFkgKyA0KlRYIDwgTkRJTSkgPyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KCZiWyhrMCArIGoxKlRCTE9DSyArIFRZWikqTkRJTSArIFkgKyA0KlRYXSkgOiAwOwoKICAgICAgICAgICAgZm9yIChpbnQgajE9MDsgajE8NDsgajErKykgaWYgKGswICsgajEqVEJMT0NLIDwgS0RJTSkKICAgICAgICAgICAgZm9yIChpbnQgbj0wOyBuPFdJRFRIOyBuKyspCiAgICAgICAgICAgICAgICB0ZW1wX2Fbbl1bajFdID0gKFggKyA0KlRYICsgbipTSE1CTE9DSyA8IE1ESU0pID8gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPigmYVsoazAgKyBqMSpUQkxPQ0sgKyBUWVopKk1ESU0gKyBYICsgNCpUWCArIG4qU0hNQkxPQ0tdKSA6IDA7CgogICAgICAgICAgICBpbnQgdHgzID0gKFRYICYgMykgPDwgMjsKICAgICAgICAgICAgaW50IGkxID0gVFggPj4gMjsKCiAgICAgICAgICAgIGlmIChrMCAhPSAwKSBfX3N5bmN0aHJlYWRzKCk7CgogICAgICAgICAgICBmb3IgKGludCBqMT0wOyBqMTw0OyBqMSsrKQogICAgICAgICAgICBmb3IgKGludCBtPTA7IG08NDsgbSsrKQogICAgICAgICAgICAgICAgYl9zaGFyZWRbajFdW1RaXVtUWV1bdHgzICsgbV1baTFdID0gKHRlbXBfYltqMV0gPj4gKDgqbSkpICYgMHhGRjsKCiAgICAgICAgICAgIGZvciAoaW50IGoxPTA7IGoxPDQ7IGoxKyspCiAgICAgICAgICAgIGZvciAoaW50IG09MDsgbTw0OyBtKyspCiAgICAgICAgICAgIGZvciAoaW50IG49MDsgbjxXSURUSDsgbisrKQogICAgICAgICAgICAgICAgYV9zaGFyZWRbbl1baTFdW1RaXVtUWV1bdHgzICsgbV1bajFdID0gKHRlbXBfYVtuXVtqMV0gPj4gKDgqbSkpICYgMHhGRjsKCiAgICAgICAgICAgIF9fc3luY3RocmVhZHMoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFZlYzE2IHJlZ19yZXNbV0lEVEhdOwogICAgZm9yIChpbnQgbj0wOyBuPFdJRFRIOyBuKyspIHJlZ19yZXNbbl0gPSB7fTsKCiAgICBmbG9hdCB0bXBfYVtXSURUSF07CiAgICBmbG9hdCB0bXBfYjsKICAgIGlmIChUWiA9PSAwKQogICAgewogICAgICAgIGZvciAoaW50IG49MDsgbjxXSURUSDsgbisrKQogICAgICAgICAgICB0bXBfYVtuXSA9IChYICsgVFkqVEJMT0NLICsgbipTSE1CTE9DSyA8IE1ESU0pID8gc2NhbGVfYVtYICsgVFkqVEJMT0NLICsgVFggKyBuKlNITUJMT0NLXSA6IDA7CiAgICAgICAgdG1wX2IgPSBzY2FsZV9iW1kvMTI4XTsKICAgIH0KCiAgICBmb3IgKGludCBrMT0wOyBrMSA8IEtESU07IGsxICs9IDIqU0hNQkxPQ0spCiAgICB7CiAgICAgICAgaWYgKFRaID09IDApCiAgICAgICAgewogICAgICAgICAgICBmb3IgKGludCBuPTA7IG48V0lEVEg7IG4rKykgc2NhbGFyW1RZXVtUWF1bbl0gPSB0bXBfYiAqIHRtcF9hW25dOwoKICAgICAgICAgICAgaWYgKGsxICsgMipTSE1CTE9DSyA8IEtESU0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZvciAoaW50IG49MDsgbjxXSURUSDsgbisrKQogICAgICAgICAgICAgICAgICAgIHRtcF9hW25dID0gKFggKyBUWSpUQkxPQ0sgKyBuKlNITUJMT0NLIDwgTURJTSkgPyBzY2FsZV9hWyhrMS8xMjggKyAxKSpNRElNICsgWCArIFRZKlRCTE9DSyArIFRYICsgbipTSE1CTE9DS10gOiAwOwogICAgICAgICAgICAgICAgdG1wX2IgPSBzY2FsZV9iWyhrMS8xMjggKyAxKSooKE5ESU0rMTI3KS8xMjgpICsgKFkvMTI4KV07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgazI9MDsgazIgPCAyKlNITUJMT0NLOyBrMiArPSBTSE1CTE9DSykKICAgICAgICB7CiAgICAgICAgICAgIGludCBrMCA9IGsxICsgazI7CiAgICAgICAgICAgIAogICAgICAgICAgICBfX3N5bmN0aHJlYWRzKCk7CiAgICAgICAgICAgIAogICAgICAgICAgICBmbG9hdDh4OCBhMF9sb2FkW1dJRFRIXSwgYTFfbG9hZFtXSURUSF07CiAgICAgICAgICAgIGZsb2F0OHg4IGIwX2xvYWRbNF0sIGIxX2xvYWRbNF07CgogICAgI3ByYWdtYSB1bnJvbGwKICAgICAgICAgICAgZm9yIChpbnQgbT0wOyBtPDg7IG0rKykKICAgICNwcmFnbWEgdW5yb2xsCiAgICAgICAgICAgIGZvciAoaW50IG49MDsgbjw0OyBuKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGIwX2xvYWRbbl1bbV0gPSBiX3NoYXJlZFttLzQgKyAwXVttJTRdW1RZXVtUWF1bbl07CiAgICAgICAgICAgICAgICBiMV9sb2FkW25dW21dID0gYl9zaGFyZWRbbS80ICsgMl1bbSU0XVtUWV1bVFhdW25dOwogICAgICAgICAgICB9CgogICAgI3ByYWdtYSB1bnJvbGwKICAgICAgICAgICAgZm9yIChpbnQgbT0wOyBtPDg7IG0rKykKICAgICNwcmFnbWEgdW5yb2xsCiAgICAgICAgICAgIGZvciAoaW50IHI9MDsgcjxXSURUSDsgcisrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhMF9sb2FkW3JdW21dID0gYV9zaGFyZWRbcl1bVFpdW20lNF1bVFldW1RYXVttLzQgKyAwXTsKICAgICAgICAgICAgICAgIGExX2xvYWRbcl1bbV0gPSBhX3NoYXJlZFtyXVtUWl1bbSU0XVtUWV1bVFhdW20vNCArIDJdOwogICAgICAgICAgICB9CgogICAgICAgICAgICBWZWM0IHNjYWxbV0lEVEhdOwogICAgI3ByYWdtYSB1bnJvbGwKICAgICAgICAgICAgZm9yIChpbnQgbj0wOyBuPFdJRFRIOyBuKyspCiAgICAjcHJhZ21hIHVucm9sbAogICAgICAgICAgICBmb3IgKGludCBtPTA7IG08NDsgbSsrKQogICAgICAgICAgICAgICAgc2NhbFtuXVttXSA9IHNjYWxhcltUWl1bVFkqNCArIG1dW25dOwoKICAgICAgICAgICAgX19zeW5jdGhyZWFkcygpOwoKICAgICNwcmFnbWEgdW5yb2xsCiAgICAgICAgICAgIGZvciAoaW50IG49MDsgbjw0OyBuKyspCiAgICAjcHJhZ21hIHVucm9sbAogICAgICAgICAgICBmb3IgKGludCByMT0wOyByMTxXSURUSDsgcjErKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmVjNCByZXMgPSBtZm1hKGEwX2xvYWRbcjFdLCBhMV9sb2FkW3IxXSwgYjBfbG9hZFtuXSwgYjFfbG9hZFtuXSk7CgogICAgICAgICAgICAgICAgZm9yIChpbnQgbT0wOyBtPDQ7IG0rKykKICAgICAgICAgICAgICAgICAgICByZWdfcmVzW3IxXVttKjQgKyBuXSArPSBzY2FsW3IxXVttXSAqIHJlc1ttXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmb3IgKGludCBqPTA7IGo8NDsgaiArKykgZm9yIChpbnQgaT0wOyBpPDQ7IGkgKyspIGZvciAoaW50IHIxPTA7IHIxPFdJRFRIOyByMSsrKQogICAgaWYgKFkgKyBpKlRCTE9DSyA8IE5ESU0gJiYgNCpUWVogKyBYICsgcjEqU0hNQkxPQ0sgPCBNRElNKQogICAgICAgIGNbKDQqVFlaICsgaiArIFggKyByMSpTSE1CTE9DSykqTkRJTSArIFkgKyBpKlRCTE9DSyArIFRYXSA9IChmbG9hdDE2KSByZWdfcmVzW3IxXVtqKjQgKyBpXTsKfQoKdm9pZCBsYXVuY2hIaXAoCiAgICBjb25zdCB2b2lkKiBhLAogICAgY29uc3Qgdm9pZCogYiwKICAgIHZvaWQqIGMsCiAgICBjb25zdCBmbG9hdCogc2NhbGVfYSwKICAgIGNvbnN0IGZsb2F0KiBzY2FsZV9iLAogICAgaW50IE0sIGludCBOLCBpbnQgSwopIHsKICAgIGRpbTMgYmxvY2soVEJMT0NLLCAzMiwgMSk7CgogICAgaW50IG1pMzAwX3RocmVhZHMgPSBTSE1CTE9DSyAqIFNITUJMT0NLICogMzA0OwogICAgaW50IGJwY3UgPSBNICogTiAvIG1pMzAwX3RocmVhZHM7CgogICAgaWYgKGJwY3UgPj0gNiAmJiBNID49IDQqU0hNQkxPQ0spCiAgICB7CiAgICAgICAgZGltMyBncmlkKChNICsgNCpTSE1CTE9DSyAtIDEpIC8gU0hNQkxPQ0sgLyA0LCBOIC8gU0hNQkxPQ0spOwoKICAgICAgICBmcDhfZ2VtbV9rZXJuZWw8ND48PDxncmlkLCBibG9jaywgMCwgMD4+PigKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYSksCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGIpLAogICAgICAgICAgICByZWludGVycHJldF9jYXN0PGZsb2F0MTYqPihjKSwKICAgICAgICAgICAgc2NhbGVfYSwKICAgICAgICAgICAgc2NhbGVfYiwKICAgICAgICAgICAgTSwgTiwgSyk7CiAgICB9CiAgICBlbHNlIGlmIChicGN1ID49IDIgJiYgTSA+PSAyKlNITUJMT0NLKQogICAgewogICAgICAgIGRpbTMgZ3JpZCgoTSArIDIqU0hNQkxPQ0sgLSAxKSAvIFNITUJMT0NLIC8gMiwgTiAvIFNITUJMT0NLKTsKCiAgICAgICAgZnA4X2dlbW1fa2VybmVsPDI+PDw8Z3JpZCwgYmxvY2ssIDAsIDA+Pj4oCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGEpLAogICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihiKSwKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxmbG9hdDE2Kj4oYyksCiAgICAgICAgICAgIHNjYWxlX2EsCiAgICAgICAgICAgIHNjYWxlX2IsCiAgICAgICAgICAgIE0sIE4sIEspOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIGRpbTMgZ3JpZCgoTSArIFNITUJMT0NLIC0gMSkgLyBTSE1CTE9DSywgTiAvIFNITUJMT0NLKTsKCiAgICAgICAgZnA4X2dlbW1fa2VybmVsPDE+PDw8Z3JpZCwgYmxvY2ssIDAsIDA+Pj4oCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGEpLAogICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihiKSwKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxmbG9hdDE2Kj4oYyksCiAgICAgICAgICAgIHNjYWxlX2EsCiAgICAgICAgICAgIHNjYWxlX2IsCiAgICAgICAgICAgIE0sIE4sIEspOwogICAgfQoKICAgIGhpcERldmljZVN5bmNocm9uaXplKCk7Cn0KIiIiCgojIEMrKyBpbXBsZW1lbnRhdGlvbiBvZiBGUDggR0VNTSAobWF0Y2hpbmcgY3VzdG9tX2tlcm5lbF8xIGxvZ2ljKQpjcHBfc291cmNlID0gIiIiCiNpbmNsdWRlIDx0b3JjaC9leHRlbnNpb24uaD4KI2luY2x1ZGUgPEFUZW4vQVRlbi5oPgoKdm9pZCBsYXVuY2hIaXAoCiAgICBjb25zdCB2b2lkKiBhLAogICAgY29uc3Qgdm9pZCogYiwKICAgIHZvaWQqIGMsCiAgICBjb25zdCBmbG9hdCogc2NhbGVfYSwKICAgIGNvbnN0IGZsb2F0KiBzY2FsZV9iLAogICAgaW50IE0sIGludCBOLCBpbnQgSwopOwoKdm9pZCBmcDhfZ2VtbSgKICAgIHRvcmNoOjpUZW5zb3IgYSwKICAgIHRvcmNoOjpUZW5zb3IgYiwKICAgIHRvcmNoOjpUZW5zb3IgYywKICAgIHRvcmNoOjpUZW5zb3IgYV9zY2FsZSwKICAgIHRvcmNoOjpUZW5zb3IgYl9zY2FsZQopIHsKICAgIGNvbnN0IGludCBtID0gYS5zaXplKDApOwogICAgY29uc3QgaW50IG4gPSBiLnNpemUoMCk7CiAgICBjb25zdCBpbnQgayA9IGEuc2l6ZSgxKTsKCiAgICBsYXVuY2hIaXAoCiAgICAgICAgYS5kYXRhX3B0cigpLAogICAgICAgIGIuZGF0YV9wdHIoKSwKICAgICAgICBjLmRhdGFfcHRyKCksCiAgICAgICAgYV9zY2FsZS5kYXRhX3B0cjxmbG9hdD4oKSwKICAgICAgICBiX3NjYWxlLmRhdGFfcHRyPGZsb2F0PigpLAogICAgICAgIG0sIG4sIGsKICAgICk7Cn0KClBZQklORDExX01PRFVMRShUT1JDSF9FWFRFTlNJT05fTkFNRSwgbSkgewogICAgbS5kZWYoImZwOF9nZW1tIiwgJmZwOF9nZW1tLCAiRlA4IEdFTU0iKTsKfQoiIiIKCmltcG9ydCBvcwpvcy5lbnZpcm9uWydQWVRPUkNIX1JPQ01fQVJDSCddID0gJ2dmeDk0MicKCiMgQ29tcGlsZSB0aGUgQysrIGV4dGVuc2lvbiBpbmxpbmUKY3BwX2V4dGVuc2lvbiA9IGxvYWRfaW5saW5lKAogICAgbmFtZT0iZnA4X2dlbW1fY3BwIiwKICAgIGNwcF9zb3VyY2VzPWNwcF9zb3VyY2UsCiAgICBjdWRhX3NvdXJjZXM9Y3VkYV9zb3VyY2UsCiAgICBleHRyYV9jdWRhX2NmbGFncz1bIi1PMyIsICItLW9mZmxvYWQtYXJjaD1nZng5NDIiLCAiLXN0ZD1jKysxNyJdLAogICAgZXh0cmFfY2ZsYWdzPVsnLU8zJ10sCiAgICB2ZXJib3NlPUZhbHNlCikKCmRlZiBjdXN0b21fa2VybmVsKGRhdGE6IGlucHV0X3QpIC0+IG91dHB1dF90OgogICAgYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYyA9IGRhdGEKCiAgICBjcHBfZXh0ZW5zaW9uLmZwOF9nZW1tKGEsIGIsIGMsIGFfc2NhbGUsIGJfc2NhbGUpCgogICAgcmV0dXJuIGMKNo newline at end of file+ aW1wb3J0IHRvcmNoCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQoKIyBDKysgaW1wbGVtZW50YXRpb24gb2YgRlA4IEdFTU0gKG1hdGNoaW5nIGN1c3RvbV9rZXJuZWxfMSBsb2dpYykKY3VkYV9zb3VyY2UgPSAiIiIKI2luY2x1ZGUgPGhpcC9oaXBfcnVudGltZS5oPgojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4KI2luY2x1ZGUgPGhpcC9hbWRfZGV0YWlsL2FtZF9oaXBfYmYxNi5oPgoKI2RlZmluZSBTSE1CTE9DSyA2NAojZGVmaW5lIFRCTE9DSyAxNgoKdXNpbmcgZmxvYXQxNiAgPSBfX2hpcF9iZmxvYXQxNjsKdXNpbmcgVmVjNCAgICAgPSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oNCAqIHNpemVvZihmbG9hdCkpKSkgZmxvYXQ7CnVzaW5nIElWZWM0ICAgID0gX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDQgKiBzaXplb2YodWludDMyX3QpKSkpIHVpbnQzMl90Owp1c2luZyBWZWMxNiAgICA9IF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNiAqIHNpemVvZihmbG9hdCkpKSkgZmxvYXQ7CnVzaW5nIGZsb2F0OHg4ID0gX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDggKiBzaXplb2YodWludDhfdCkpKSkgdWludDhfdDsKCmlubGluZSBfX2RldmljZV9fIHVpbnQ2NF90IGNhc3Rmcm9tOHg4KGNvbnN0IGZsb2F0OHg4JiBmKQp7CiAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDY0X3QqPigmZik7Cn0KCmlubGluZSBfX2RldmljZV9fIFZlYzQgbWZtYShjb25zdCBmbG9hdDh4OCYgYTAsIGNvbnN0IGZsb2F0OHg4JiBhMSwgY29uc3QgZmxvYXQ4eDgmIGIwLCBjb25zdCBmbG9hdDh4OCYgYjEpCnsKICAgIFZlYzQgcmV0ID0gX19idWlsdGluX2FtZGdjbl9tZm1hX2YzMl8xNngxNngzMl9mcDhfZnA4KGNhc3Rmcm9tOHg4KGEwKSwgY2FzdGZyb204eDgoYjApLCBWZWM0e30sIDAsIDAsIDApOwogICAgcmV0dXJuIF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOChjYXN0ZnJvbTh4OChhMSksIGNhc3Rmcm9tOHg4KGIxKSwgcmV0LCAwLCAwLCAwKTsKfQoKdGVtcGxhdGU8aW50IFdJRFRIPgpfX2dsb2JhbF9fIHZvaWQgX19sYXVuY2hfYm91bmRzX18oVEJMT0NLKlRCTE9DSyoyLCA0KQpmcDhfZ2VtbV9rZXJuZWwoCiAgICBjb25zdCB1aW50OF90KiBfX3Jlc3RyaWN0X18gYSwKICAgIGNvbnN0IHVpbnQ4X3QqIF9fcmVzdHJpY3RfXyBiLAogICAgZmxvYXQxNiogX19yZXN0cmljdF9fIGMsCiAgICBjb25zdCBmbG9hdCogX19yZXN0cmljdF9fIHNjYWxlX2EsCiAgICBjb25zdCBmbG9hdCogX19yZXN0cmljdF9fIHNjYWxlX2IsCiAgICBpbnQgTURJTSwgaW50IE5ESU0sIGludCBLRElNCikgewogICAgY29uc3QgaW50IFggPSBibG9ja0lkeC54ICogU0hNQkxPQ0sgKiBXSURUSDsKICAgIGNvbnN0IGludCBZID0gYmxvY2tJZHgueSAqIFNITUJMT0NLOwogICAgCiAgICBjb25zdCBpbnQgVFggPSB0aHJlYWRJZHgueCVUQkxPQ0s7CiAgICBjb25zdCBpbnQgVFkgPSB0aHJlYWRJZHgueSU0OwogICAgY29uc3QgaW50IFRaID0gKHRocmVhZElkeC55LzQpJTQ7CiAgICBjb25zdCBpbnQgVFlaID0gdGhyZWFkSWR4LnklMTY7CiAgICBjb25zdCBpbnQgVFcgPSAodGhyZWFkSWR4LnkvMTYpJTI7CgogICAgX19zaGFyZWRfXyB1aW50OF90IGFfc2hhcmVkW1dJRFRIXVs0XVs0XVs0XVtUQkxPQ0tdWzRdOwogICAgX19zaGFyZWRfXyB1aW50OF90IGJfc2hhcmVkWzRdWzRdWzRdW1RCTE9DS11bNF07CiAgICBfX3NoYXJlZF9fIGZsb2F0ICAgc2NhbGFyWzRdW1RCTE9DS11bV0lEVEhdOwoKICAgIGlmIChUVyAhPSAwKQogICAgewogICAgICAgIGZvciAoaW50IGsxPTA7IGsxIDwgS0RJTTsgazEgKz0gMipTSE1CTE9DSykKICAgICAgICBmb3IgKGludCBrMj0wOyBrMiA8IDIqU0hNQkxPQ0s7IGsyICs9IFNITUJMT0NLKQogICAgICAgIHsKICAgICAgICAgICAgaW50IGswID0gazEgKyBrMjsKICAgICAgICAgICAgSVZlYzQgdGVtcF9hW1dJRFRIXSwgdGVtcF9iOwoKICAgICAgICAgICAgZm9yIChpbnQgajE9MDsgajE8NDsgajErKykKICAgICAgICAgICAgaWYgKGswICsgajEqVEJMT0NLIDwgS0RJTSkKICAgICAgICAgICAgICAgIHRlbXBfYltqMV0gPSAoWSArIDQqVFggPCBORElNKSA/ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oJmJbKGswICsgajEqVEJMT0NLICsgVFlaKSpORElNICsgWSArIDQqVFhdKSA6IDA7CgogICAgICAgICAgICBmb3IgKGludCBqMT0wOyBqMTw0OyBqMSsrKSBpZiAoazAgKyBqMSpUQkxPQ0sgPCBLRElNKQogICAgICAgICAgICBmb3IgKGludCBuPTA7IG48V0lEVEg7IG4rKykKICAgICAgICAgICAgICAgIHRlbXBfYVtuXVtqMV0gPSAoWCArIDQqVFggKyBuKlNITUJMT0NLIDwgTURJTSkgPyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KCZhWyhrMCArIGoxKlRCTE9DSyArIFRZWikqTURJTSArIFggKyA0KlRYICsgbipTSE1CTE9DS10pIDogMDsKCiAgICAgICAgICAgIGludCB0eDMgPSAoVFggJiAzKSA8PCAyOwogICAgICAgICAgICBpbnQgaTEgPSBUWCA+PiAyOwoKICAgICAgICAgICAgaWYgKGswICE9IDApIF9fc3luY3RocmVhZHMoKTsKCiAgICAgICAgICAgIGZvciAoaW50IGoxPTA7IGoxPDQ7IGoxKyspCiAgICAgICAgICAgIGZvciAoaW50IG09MDsgbTw0OyBtKyspCiAgICAgICAgICAgICAgICBiX3NoYXJlZFtqMV1bVFpdW1RZXVt0eDMgKyBtXVtpMV0gPSAodGVtcF9iW2oxXSA+PiAoOCptKSkgJiAweEZGOwoKICAgICAgICAgICAgZm9yIChpbnQgajE9MDsgajE8NDsgajErKykKICAgICAgICAgICAgZm9yIChpbnQgbT0wOyBtPDQ7IG0rKykKICAgICAgICAgICAgZm9yIChpbnQgbj0wOyBuPFdJRFRIOyBuKyspCiAgICAgICAgICAgICAgICBhX3NoYXJlZFtuXVtpMV1bVFpdW1RZXVt0eDMgKyBtXVtqMV0gPSAodGVtcF9hW25dW2oxXSA+PiAoOCptKSkgJiAweEZGOwoKICAgICAgICAgICAgX19zeW5jdGhyZWFkcygpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9CgogICAgVmVjMTYgcmVnX3Jlc1tXSURUSF07CiAgICBmb3IgKGludCBuPTA7IG48V0lEVEg7IG4rKykgcmVnX3Jlc1tuXSA9IHt9OwoKICAgIGZsb2F0IHRtcF9hW1dJRFRIXTsKICAgIGZsb2F0IHRtcF9iOwogICAgaWYgKFRaID09IDApCiAgICB7CiAgICAgICAgZm9yIChpbnQgbj0wOyBuPFdJRFRIOyBuKyspCiAgICAgICAgICAgIHRtcF9hW25dID0gKFggKyBUWSpUQkxPQ0sgKyBuKlNITUJMT0NLIDwgTURJTSkgPyBzY2FsZV9hW1ggKyBUWSpUQkxPQ0sgKyBUWCArIG4qU0hNQkxPQ0tdIDogMDsKICAgICAgICB0bXBfYiA9IHNjYWxlX2JbWS8xMjhdOwogICAgfQoKICAgIGZvciAoaW50IGsxPTA7IGsxIDwgS0RJTTsgazEgKz0gMipTSE1CTE9DSykKICAgIHsKICAgICAgICBpZiAoVFogPT0gMCkKICAgICAgICB7CiAgICAgICAgICAgIGZvciAoaW50IG49MDsgbjxXSURUSDsgbisrKSBzY2FsYXJbVFldW1RYXVtuXSA9IHRtcF9iICogdG1wX2Fbbl07CgogICAgICAgICAgICBpZiAoazEgKyAyKlNITUJMT0NLIDwgS0RJTSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yIChpbnQgbj0wOyBuPFdJRFRIOyBuKyspCiAgICAgICAgICAgICAgICAgICAgdG1wX2Fbbl0gPSAoWCArIFRZKlRCTE9DSyArIG4qU0hNQkxPQ0sgPCBNRElNKSA/IHNjYWxlX2FbKGsxLzEyOCArIDEpKk1ESU0gKyBYICsgVFkqVEJMT0NLICsgVFggKyBuKlNITUJMT0NLXSA6IDA7CiAgICAgICAgICAgICAgICB0bXBfYiA9IHNjYWxlX2JbKGsxLzEyOCArIDEpKigoTkRJTSsxMjcpLzEyOCkgKyAoWS8xMjgpXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKGludCBrMj0wOyBrMiA8IDIqU0hNQkxPQ0s7IGsyICs9IFNITUJMT0NLKQogICAgICAgIHsKICAgICAgICAgICAgaW50IGswID0gazEgKyBrMjsKICAgICAgICAgICAgCiAgICAgICAgICAgIF9fc3luY3RocmVhZHMoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGZsb2F0OHg4IGEwX2xvYWRbV0lEVEhdLCBhMV9sb2FkW1dJRFRIXTsKICAgICAgICAgICAgZmxvYXQ4eDggYjBfbG9hZFs0XSwgYjFfbG9hZFs0XTsKCiAgICAjcHJhZ21hIHVucm9sbAogICAgICAgICAgICBmb3IgKGludCBtPTA7IG08ODsgbSsrKQogICAgI3ByYWdtYSB1bnJvbGwKICAgICAgICAgICAgZm9yIChpbnQgbj0wOyBuPDQ7IG4rKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYjBfbG9hZFtuXVttXSA9IGJfc2hhcmVkW20vNCArIDBdW20lNF1bVFldW1RYXVtuXTsKICAgICAgICAgICAgICAgIGIxX2xvYWRbbl1bbV0gPSBiX3NoYXJlZFttLzQgKyAyXVttJTRdW1RZXVtUWF1bbl07CiAgICAgICAgICAgIH0KCiAgICAjcHJhZ21hIHVucm9sbAogICAgICAgICAgICBmb3IgKGludCBtPTA7IG08ODsgbSsrKQogICAgI3ByYWdtYSB1bnJvbGwKICAgICAgICAgICAgZm9yIChpbnQgcj0wOyByPFdJRFRIOyByKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGEwX2xvYWRbcl1bbV0gPSBhX3NoYXJlZFtyXVtUWl1bbSU0XVtUWV1bVFhdW20vNCArIDBdOwogICAgICAgICAgICAgICAgYTFfbG9hZFtyXVttXSA9IGFfc2hhcmVkW3JdW1RaXVttJTRdW1RZXVtUWF1bbS80ICsgMl07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIFZlYzQgc2NhbFtXSURUSF07CiAgICAjcHJhZ21hIHVucm9sbAogICAgICAgICAgICBmb3IgKGludCBuPTA7IG48V0lEVEg7IG4rKykKICAgICNwcmFnbWEgdW5yb2xsCiAgICAgICAgICAgIGZvciAoaW50IG09MDsgbTw0OyBtKyspCiAgICAgICAgICAgICAgICBzY2FsW25dW21dID0gc2NhbGFyW1RaXVtUWSo0ICsgbV1bbl07CgogICAgICAgICAgICBfX3N5bmN0aHJlYWRzKCk7CgogICAgI3ByYWdtYSB1bnJvbGwKICAgICAgICAgICAgZm9yIChpbnQgbj0wOyBuPDQ7IG4rKykKICAgICNwcmFnbWEgdW5yb2xsCiAgICAgICAgICAgIGZvciAoaW50IHIxPTA7IHIxPFdJRFRIOyByMSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWZWM0IHJlcyA9IG1mbWEoYTBfbG9hZFtyMV0sIGExX2xvYWRbcjFdLCBiMF9sb2FkW25dLCBiMV9sb2FkW25dKTsKCiAgICAgICAgICAgICAgICBmb3IgKGludCBtPTA7IG08NDsgbSsrKQogICAgICAgICAgICAgICAgICAgIHJlZ19yZXNbcjFdW20qNCArIG5dICs9IHNjYWxbcjFdW21dICogcmVzW21dOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZvciAoaW50IGo9MDsgajw0OyBqICsrKSBmb3IgKGludCBpPTA7IGk8NDsgaSArKykgZm9yIChpbnQgcjE9MDsgcjE8V0lEVEg7IHIxKyspCiAgICBpZiAoWSArIGkqVEJMT0NLIDwgTkRJTSAmJiA0KlRZWiArIFggKyByMSpTSE1CTE9DSyA8IE1ESU0pCiAgICAgICAgY1soNCpUWVogKyBqICsgWCArIHIxKlNITUJMT0NLKSpORElNICsgWSArIGkqVEJMT0NLICsgVFhdID0gKGZsb2F0MTYpIHJlZ19yZXNbcjFdW2oqNCArIGldOwp9Cgp2b2lkIGxhdW5jaEhpcCgKICAgIGNvbnN0IHZvaWQqIGEsCiAgICBjb25zdCB2b2lkKiBiLAogICAgdm9pZCogYywKICAgIGNvbnN0IGZsb2F0KiBzY2FsZV9hLAogICAgY29uc3QgZmxvYXQqIHNjYWxlX2IsCiAgICBpbnQgTSwgaW50IE4sIGludCBLCikgewogICAgZGltMyBibG9jayhUQkxPQ0ssIDMyLCAxKTsKCiAgICBpbnQgbWkzMDBfdGhyZWFkcyA9IFNITUJMT0NLICogU0hNQkxPQ0sgKiAzMDQ7CiAgICBpbnQgYnBjdSA9IE0gKiBOIC8gbWkzMDBfdGhyZWFkczsKCiAgICBpZiAoYnBjdSA+PSA2ICYmIE0gPj0gNCpTSE1CTE9DSykKICAgIHsKICAgICAgICBkaW0zIGdyaWQoKE0gKyA0KlNITUJMT0NLIC0gMSkgLyBTSE1CTE9DSyAvIDQsIE4gLyBTSE1CTE9DSyk7CgogICAgICAgIGZwOF9nZW1tX2tlcm5lbDw0Pjw8PGdyaWQsIGJsb2NrLCAwLCAwPj4+KAogICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihhKSwKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYiksCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQxNio+KGMpLAogICAgICAgICAgICBzY2FsZV9hLAogICAgICAgICAgICBzY2FsZV9iLAogICAgICAgICAgICBNLCBOLCBLKTsKICAgIH0KICAgIGVsc2UgaWYgKGJwY3UgPj0gMiAmJiBNID49IDIqU0hNQkxPQ0spCiAgICB7CiAgICAgICAgZGltMyBncmlkKChNICsgMipTSE1CTE9DSyAtIDEpIC8gU0hNQkxPQ0sgLyAyLCBOIC8gU0hNQkxPQ0spOwoKICAgICAgICBmcDhfZ2VtbV9rZXJuZWw8Mj48PDxncmlkLCBibG9jaywgMCwgMD4+PigKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYSksCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGIpLAogICAgICAgICAgICByZWludGVycHJldF9jYXN0PGZsb2F0MTYqPihjKSwKICAgICAgICAgICAgc2NhbGVfYSwKICAgICAgICAgICAgc2NhbGVfYiwKICAgICAgICAgICAgTSwgTiwgSyk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgZGltMyBncmlkKChNICsgU0hNQkxPQ0sgLSAxKSAvIFNITUJMT0NLLCBOIC8gU0hNQkxPQ0spOwoKICAgICAgICBmcDhfZ2VtbV9rZXJuZWw8MT48PDxncmlkLCBibG9jaywgMCwgMD4+PigKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYSksCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGIpLAogICAgICAgICAgICByZWludGVycHJldF9jYXN0PGZsb2F0MTYqPihjKSwKICAgICAgICAgICAgc2NhbGVfYSwKICAgICAgICAgICAgc2NhbGVfYiwKICAgICAgICAgICAgTSwgTiwgSyk7CiAgICB9Cn0KIiIiCgojIEMrKyBpbXBsZW1lbnRhdGlvbiBvZiBGUDggR0VNTSAobWF0Y2hpbmcgY3VzdG9tX2tlcm5lbF8xIGxvZ2ljKQpjcHBfc291cmNlID0gIiIiCiNpbmNsdWRlIDx0b3JjaC9leHRlbnNpb24uaD4KI2luY2x1ZGUgPEFUZW4vQVRlbi5oPgoKdm9pZCBsYXVuY2hIaXAoCiAgICBjb25zdCB2b2lkKiBhLAogICAgY29uc3Qgdm9pZCogYiwKICAgIHZvaWQqIGMsCiAgICBjb25zdCBmbG9hdCogc2NhbGVfYSwKICAgIGNvbnN0IGZsb2F0KiBzY2FsZV9iLAogICAgaW50IE0sIGludCBOLCBpbnQgSwopOwoKdm9pZCBmcDhfZ2VtbSgKICAgIHRvcmNoOjpUZW5zb3IgYSwKICAgIHRvcmNoOjpUZW5zb3IgYiwKICAgIHRvcmNoOjpUZW5zb3IgYywKICAgIHRvcmNoOjpUZW5zb3IgYV9zY2FsZSwKICAgIHRvcmNoOjpUZW5zb3IgYl9zY2FsZQopIHsKICAgIGNvbnN0IGludCBtID0gYS5zaXplKDApOwogICAgY29uc3QgaW50IG4gPSBiLnNpemUoMCk7CiAgICBjb25zdCBpbnQgayA9IGEuc2l6ZSgxKTsKCiAgICBsYXVuY2hIaXAoCiAgICAgICAgYS5kYXRhX3B0cigpLAogICAgICAgIGIuZGF0YV9wdHIoKSwKICAgICAgICBjLmRhdGFfcHRyKCksCiAgICAgICAgYV9zY2FsZS5kYXRhX3B0cjxmbG9hdD4oKSwKICAgICAgICBiX3NjYWxlLmRhdGFfcHRyPGZsb2F0PigpLAogICAgICAgIG0sIG4sIGsKICAgICk7Cn0KClBZQklORDExX01PRFVMRShUT1JDSF9FWFRFTlNJT05fTkFNRSwgbSkgewogICAgbS5kZWYoImZwOF9nZW1tIiwgJmZwOF9nZW1tLCAiRlA4IEdFTU0iKTsKfQoiIiIKCmltcG9ydCBvcwpvcy5lbnZpcm9uWydQWVRPUkNIX1JPQ01fQVJDSCddID0gJ2dmeDk0MicKCiMgQ29tcGlsZSB0aGUgQysrIGV4dGVuc2lvbiBpbmxpbmUKY3BwX2V4dGVuc2lvbiA9IGxvYWRfaW5saW5lKAogICAgbmFtZT0iZnA4X2dlbW1fY3BwIiwKICAgIGNwcF9zb3VyY2VzPWNwcF9zb3VyY2UsCiAgICBjdWRhX3NvdXJjZXM9Y3VkYV9zb3VyY2UsCiAgICBleHRyYV9jdWRhX2NmbGFncz1bIi1PMyIsICItLW9mZmxvYWQtYXJjaD1nZng5NDIiLCAiLXN0ZD1jKysxNyJdLAogICAgZXh0cmFfY2ZsYWdzPVsnLU8zJ10sCiAgICB2ZXJib3NlPUZhbHNlCikKCmRlZiBjdXN0b21fa2VybmVsKGRhdGE6IGlucHV0X3QpIC0+IG91dHB1dF90OgogICAgYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYyA9IGRhdGEKCiAgICBjcHBfZXh0ZW5zaW9uLmZwOF9nZW1tKGEsIGIsIGMsIGFfc2NhbGUsIGJfc2NhbGUpCgogICAgcmV0dXJuIGMKNo newline at end of file
Best evidence level for this revision: reported
JSON