amd-mixture-of-experts · submission 15172
KernelBot user 212 · 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-mixture-of-experts-15172?include=source"interfacepython
Compatibility
measured onAMD Instinct MI300X
declared hardwareAMD Instinct MI300X
architecturesgfx942
dtypesfp16
Benchmark evidence
2 measurements across 1 GPU, fastest first.
Operation / workload
Hardware
Latency
Rank
Observed
Reported · How evidence levels are derived →
Source and license
sourceavailable
revision digestsha256:262bf7a27586ccbd7737f9d7f8277717ab370dc22b03b222c8b6a6de2d4bb5db
license declaredunknown
license concludedunknown
imported2026-08-15
Kernel source
submission.py1 lines
IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1taXh0dXJlLW9mLWV4cGVydHMKCiMgVGhpcyBpcyBhIHN1Ym1pc3Npb24gdGVtcGxhdGUgZm9yIHBvcGNvcm4gbGVhZGVyYm9hcmQgJ2FtZC1taXh0dXJlLW9mLWV4cGVydHMnLgojIFlvdXIgdGFzayBpcyBhcyBmb2xsb3dzOgojID4gRm9yIGEgbW9yZSBjb21wbGV0ZSBkZXNjcmlwdGlvbiwgc2VlOiBodHRwczovL3Rpbnl1cmwuY29tL2FtZC1jb21wLW1vZQojID4gSW1wbGVtZW50IGEgRGVlcFNlZWstc3R5bGUgTWl4dHVyZSBvZiBFeHBlcnRzIChNb0UpIGxheWVyIGZvciBlZmZpY2llbnQgdHJhbnNmb3JtZXIgbW9kZWxzCiMgPiBvbiBhIHNpbmdsZSBNSTMwMFggZGV2aWNlLgojID4KIyA+IE1vRSBpcyBhIHRlY2huaXF1ZSB0aGF0IGFsbG93cyBzY2FsaW5nIG1vZGVsIGNhcGFjaXR5IHdpdGhvdXQgcHJvcG9ydGlvbmFsbHkgaW5jcmVhc2luZyBjb21wdXRhdGlvbmFsIGNvc3RzCiMgPiBieSB1c2luZyBhIHJvdXRpbmcgbWVjaGFuaXNtIHRvIHNlbGVjdGl2ZWx5IGFjdGl2YXRlIG9ubHkgYSBzdWJzZXQgb2YgcGFyYW1ldGVycyBmb3IgZWFjaCB0b2tlbi4KIyA+CiMgPiBZb3VyIHRhc2s6CiMgPiAtIEltcGxlbWVudCB0b2tlbiByb3V0aW5nIHVzaW5nIGEgc2ltcGxlIHNvZnRtYXgtYmFzZWQgbGVhcm5lZCByb3V0ZXIKIyA+IC0gUm91dGUgdG9rZW5zIHRvIHRoZSB0b3AtayBleHBlcnRzIGJhc2VkIG9uIHJvdXRlciBwcm9iYWJpbGl0aWVzCiMgPiAtIFByb2Nlc3MgdG9rZW5zIHRocm91Z2ggdGhlaXIgYXNzaWduZWQgZXhwZXJ0cwojID4gLSBDb21iaW5lIGV4cGVydCBvdXRwdXRzIHdlaWdodGVkIGJ5IHJvdXRlciBwcm9iYWJpbGl0aWVzCiMgPiAtIENhbGN1bGF0ZSBhcHByb3ByaWF0ZSBhdXhpbGlhcnkgbG9zc2VzIGZvciB0cmFpbmluZyBzdGFiaWxpdHkKIyA+CiMgPiBJbnB1dDoKIyA+IC0gYGRhdGFgOiBUdXBsZSBvZiAoaW5wdXQ6IHRvcmNoLlRlbnNvciwgd2VpZ2h0czogRGljdFtzdHIsIHRvcmNoLlRlbnNvcl0sIGNvbmZpZzogRGljdCkKIyA+ICAgLSBpbnB1dDogSW5wdXQgdGVuc29yIG9mIHNoYXBlIFticywgc2VxX2xlbiwgZF9oaWRkZW5dCiMgPiAgIC0gd2VpZ2h0czogRGljdGlvbmFyeSBjb250YWluaW5nIG1vZGVsIHdlaWdodHMKIyA+ICAgLSBjb25maWc6IERpY3Rpb25hcnkgY29udGFpbmluZyBtb2RlbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKIyA+CiMgPiBPdXRwdXQ6CiMgPiAtIFR1cGxlIGNvbnRhaW5pbmc6CiMgPiAgIC0gb3V0cHV0OiBQcm9jZXNzZWQgdGVuc29yIFticywgc2VxX2xlbiwgZF9tb2RlbF0KIyA+ICAgLSBhdXhfZGF0YTogRGljdGlvbmFyeSB3aXRoIGF1eGlsaWFyeSBkYXRhIGxpa2Ugcm91dGVyIHByb2JhYmlsaXRpZXMgYW5kIGxvc3NlcwojIFRoZSBkZWFkbGluZSBmb3IgdGhpcyBsZWFkZXJib2FyZCBpcyAyMDI1LTA1LTI3IDAwOjAwOjAwKzAwOjAwCgojIFlvdSBjYW4gYXV0b21hdGljYWxseSByb3V0ZSB0aGlzIGZpbGUgdG8gc3BlY2lmaWMgR1BVcyBieSBhZGRpbmcgYSBsaW5lCiMgYCMhUE9QQ09STiBncHVzIDxHUFVzPmAgdG8gdGhlIGhlYWRlciBvZiB0aGlzIGZpbGUuCiMgSGFwcHkgaGFja2luZyEKCmltcG9ydCBtYXRoCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KaW1wb3J0IHRvcmNoLm5uLmZ1bmN0aW9uYWwgYXMgRgpmcm9tIHR5cGluZyBpbXBvcnQgRGljdCwgVHVwbGUsIE9wdGlvbmFsCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKaW1wb3J0IHRyaXRvbgppbXBvcnQgdHJpdG9uLmxhbmd1YWdlIGFzIHRsCgoKY2xhc3MgRXhwZXJ0KG5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnOiBEaWN0LCBkX2V4cGVydDogT3B0aW9uYWxbaW50XSA9IE5vbmUpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgIHNlbGYuY29uZmlnID0gY29uZmlnCiAgICAgICAgc2VsZi5hY3RfZm4gPSBubi5TaUxVKCkKICAgICAgICBzZWxmLmRfaGlkZGVuOiBpbnQgPSBjb25maWdbImRfaGlkZGVuIl0KICAgICAgICBzZWxmLmRfZXhwZXJ0OiBpbnQgPSBjb25maWdbImRfZXhwZXJ0Il0gaWYgZF9leHBlcnQgaXMgTm9uZSBlbHNlIGRfZXhwZXJ0CgogICAgICAgIHNlbGYuV19nYXRlID0gbm4uTGluZWFyKHNlbGYuZF9oaWRkZW4sIHNlbGYuZF9leHBlcnQsIGJpYXM9RmFsc2UpCiAgICAgICAgc2VsZi5XX3VwID0gbm4uTGluZWFyKHNlbGYuZF9oaWRkZW4sIHNlbGYuZF9leHBlcnQsIGJpYXM9RmFsc2UpCiAgICAgICAgc2VsZi5XX2Rvd24gPSBubi5MaW5lYXIoc2VsZi5kX2V4cGVydCwgc2VsZi5kX2hpZGRlbiwgYmlhcz1GYWxzZSkKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4OiB0b3JjaC5UZW5zb3IpIC0+IHRvcmNoLlRlbnNvcjoKICAgICAgICBnYXRlID0gc2VsZi5hY3RfZm4oc2VsZi5XX2dhdGUoeCkpCiAgICAgICAgb3V0ID0gc2VsZi5XX2Rvd24oZ2F0ZSAqIHNlbGYuV191cCh4KSkKICAgICAgICByZXR1cm4gb3V0CgoKY2xhc3MgTW9FR2F0ZShubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZzogRGljdCk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi50b3BfazogaW50ID0gY29uZmlnWyJuX2V4cGVydHNfcGVyX3Rva2VuIl0KICAgICAgICBzZWxmLm51bV9leHBlcnRzOiBpbnQgPSBjb25maWdbIm5fcm91dGVkX2V4cGVydHMiXQogICAgICAgIHNlbGYuZF9oaWRkZW46IGludCA9IGNvbmZpZ1siZF9oaWRkZW4iXQoKICAgICAgICBzZWxmLldfZyA9IG5uLkxpbmVhcihzZWxmLmRfaGlkZGVuLCBzZWxmLm51bV9leHBlcnRzLCBiaWFzPUZhbHNlKQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHRvcmNoLlRlbnNvcikgLT4gVHVwbGVbdG9yY2guVGVuc29yLCB0b3JjaC5UZW5zb3JdOgogICAgICAgIGxvZ2l0cyA9IHNlbGYuV19nKHgpCiAgICAgICAgc2NvcmVzID0gbG9naXRzLnNvZnRtYXgoZGltPS0xKQogICAgICAgIHRvcGtfc2NvcmVzLCB0b3BrX2luZGljZXMgPSB0b3JjaC50b3BrKAogICAgICAgICAgICBzY29yZXMsIGs9c2VsZi50b3BfaywgZGltPS0xLCBzb3J0ZWQ9RmFsc2UKICAgICAgICApCgogICAgICAgIHJldHVybiB0b3BrX2luZGljZXMsIHRvcGtfc2NvcmVzCgoKZGVmIGNvbmZpZ3MoKToKICAgIHJldHVybiBbCiAgICAgICAgdHJpdG9uLkNvbmZpZygKICAgICAgICAgICAga3dhcmdzPXsKICAgICAgICAgICAgICAgICJrX2lkeCI6IGtfaWR4LAogICAgICAgICAgICAgICAgImtfaGlkIjoga19oaWQsCiAgICAgICAgICAgICAgICAia19leHAiOiBrX2V4cCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgbnVtX3dhcnBzPTgsCiAgICAgICAgKQogICAgICAgIGZvciBrX2lkeCBpbiBbMTZdCiAgICAgICAgZm9yIGtfaGlkIGluIFszMl0KICAgICAgICBmb3Iga19leHAgaW4gWzMyXQogICAgXQoKCkB0cml0b24uYXV0b3R1bmUoCiAgICBjb25maWdzPWNvbmZpZ3MoKSwKICAgIGtleT1bXSwgICMgdGhlIHR3byBhYm92ZSBjb25maWdzIHdpbGwgYmUgZXZhbHVhdGVkIGFueXRpbWUKKQpAdHJpdG9uLmppdApkZWYgZXhwZXJ0X2tlcm5lbCgKICAgIGV4cGVydF9nYXRlLAogICAgZXhwZXJ0X3VwLAogICAgZXhwZXJ0X2Rvd24sCiAgICB4LAogICAgb3V0LAogICAgZF9oaWRkZW4sCiAgICBkX2V4cGVydCwKICAgIGlkeHNfbGVuLAogICAgZXhwZXJ0X3Rva2VuX2lkeHMsCiAgICBleHBlcnRfd2VpZ2h0cywKICAgIGtfaWR4OiB0bC5jb25zdGV4cHIsCiAgICBrX2hpZDogdGwuY29uc3RleHByLAogICAga19leHA6IHRsLmNvbnN0ZXhwciwKKToKICAgIHN0YXJ0X2lkID0gdGwucHJvZ3JhbV9pZCgwKSAqIGtfaWR4CiAgICBzdGFydF9leHAgPSB0bC5wcm9ncmFtX2lkKDEpICoga19leHAKCiAgICBpZHNfbWFzayA9IHRsLmFyYW5nZSgwLCBrX2lkeCkgPCBpZHhzX2xlbiAtIHN0YXJ0X2lkCiAgICBleHBfbWFzayA9IHRsLmFyYW5nZSgwLCBrX2V4cCkgPCBkX2V4cGVydCAtIHN0YXJ0X2V4cAoKICAgIGlkcyA9IHRsLmxvYWQoCiAgICAgICAgZXhwZXJ0X3Rva2VuX2lkeHMgKyBzdGFydF9pZCArIHRsLmFyYW5nZSgwLCBrX2lkeCksCiAgICAgICAgbWFzaz1pZHNfbWFzaywKICAgICkKICAgIHNjYWxlcyA9IHRsLmxvYWQoZXhwZXJ0X3dlaWdodHMgKyBzdGFydF9pZCArIHRsLmFyYW5nZSgwLCBrX2lkeCksIG1hc2s9aWRzX21hc2spCgogICAgZ2F0ZV9zdW0gPSB0bC56ZXJvcygoa19leHAsIGtfaWR4KSwgZHR5cGU9dGwuZmxvYXQzMikKICAgIHVwX3N1bSA9IHRsLnplcm9zKChrX2V4cCwga19pZHgpLCBkdHlwZT10bC5mbG9hdDMyKQoKICAgIGZvciBoaWQgaW4gcmFuZ2UoMCwgZF9oaWRkZW4sIGtfaGlkKToKICAgICAgICBkX2hpZGRlbl9tYXNrID0gdGwuYXJhbmdlKDAsIGtfaGlkKSA8IGRfaGlkZGVuIC0gaGlkCiAgICAgICAgaW5wdXQgPSB0bC5sb2FkKAogICAgICAgICAgICB4ICsgKGhpZCArIHRsLmFyYW5nZSgwLCBrX2hpZCkpWzosIE5vbmVdICsgKGRfaGlkZGVuICogaWRzKVtOb25lLCA6XSwKICAgICAgICAgICAgbWFzaz1kX2hpZGRlbl9tYXNrWzosIE5vbmVdICYgaWRzX21hc2tbTm9uZSwgOl0sCiAgICAgICAgKQogICAgICAgIGdhdGUgPSB0bC5sb2FkKAogICAgICAgICAgICBleHBlcnRfZ2F0ZQogICAgICAgICAgICArIChzdGFydF9leHAgKyB0bC5hcmFuZ2UoMCwga19leHApKVs6LCBOb25lXQogICAgICAgICAgICArIGRfZXhwZXJ0ICogKGhpZCArIHRsLmFyYW5nZSgwLCBrX2hpZCkpW05vbmUsIDpdLAogICAgICAgICAgICBtYXNrPWV4cF9tYXNrWzosIE5vbmVdICYgZF9oaWRkZW5fbWFza1tOb25lLCA6XSwKICAgICAgICApCiAgICAgICAgZ2F0ZV9zdW0gPSB0bC5kb3QoZ2F0ZSwgaW5wdXQsIGFjYz1nYXRlX3N1bSkKICAgICAgICB1cCA9IHRsLmxvYWQoCiAgICAgICAgICAgIGV4cGVydF91cAogICAgICAgICAgICArIChzdGFydF9leHAgKyB0bC5hcmFuZ2UoMCwga19leHApKVs6LCBOb25lXQogICAgICAgICAgICArIGRfZXhwZXJ0ICogKGhpZCArIHRsLmFyYW5nZSgwLCBrX2hpZCkpW05vbmUsIDpdLAogICAgICAgICAgICBtYXNrPWV4cF9tYXNrWzosIE5vbmVdICYgZF9oaWRkZW5fbWFza1tOb25lLCA6XSwKICAgICAgICApCiAgICAgICAgdXBfc3VtID0gdGwuZG90KHVwLCBpbnB1dCwgYWNjPXVwX3N1bSkKICAgICMgc2lsdQogICAgZ2F0ZV9zdW0gPSBnYXRlX3N1bSAqIHRsLnNpZ21vaWQoZ2F0ZV9zdW0pCiAgICByaWdodCA9IGdhdGVfc3VtICogdXBfc3VtCiAgICBmb3IgaGlkIGluIHJhbmdlKDAsIGRfaGlkZGVuLCBrX2hpZCk6CiAgICAgICAgZF9oaWRkZW5fbWFzayA9IHRsLmFyYW5nZSgwLCBrX2hpZCkgPCBkX2hpZGRlbiAtIGhpZAogICAgICAgIGRvd24gPSB0bC5sb2FkKAogICAgICAgICAgICBleHBlcnRfZG93bgogICAgICAgICAgICArIChoaWQgKyB0bC5hcmFuZ2UoMCwga19oaWQpKVs6LCBOb25lXQogICAgICAgICAgICArIGRfaGlkZGVuICogKHN0YXJ0X2V4cCArIHRsLmFyYW5nZSgwLCBrX2V4cCkpW05vbmUsIDpdLAogICAgICAgICAgICBtYXNrPWRfaGlkZGVuX21hc2tbOiwgTm9uZV0gJiBleHBfbWFza1tOb25lLCA6XSwKICAgICAgICApLnRvKHRsLmZsb2F0MzIpCgogICAgICAgIHYgPSB0bC5kb3QoZG93biwgcmlnaHQpCiAgICAgICAgdiA9IHYgKiBzY2FsZXNbTm9uZSwgOl0KCiAgICAgICAgdGwuYXRvbWljX2FkZCgKICAgICAgICAgICAgb3V0ICsgKGhpZCArIHRsLmFyYW5nZSgwLCBrX2hpZCkpWzosIE5vbmVdICsgKGRfaGlkZGVuICogaWRzKVtOb25lLCA6XSwKICAgICAgICAgICAgdiwKICAgICAgICAgICAgbWFzaz1kX2hpZGRlbl9tYXNrWzosIE5vbmVdICYgaWRzX21hc2tbTm9uZSwgOl0sCiAgICAgICAgKQoKCmNsYXNzIE1vRShubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZzogRGljdCk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcKICAgICAgICBzZWxmLmV4cGVydHMgPSBubi5Nb2R1bGVMaXN0KAogICAgICAgICAgICBbRXhwZXJ0KGNvbmZpZykgZm9yIF8gaW4gcmFuZ2UoY29uZmlnWyJuX3JvdXRlZF9leHBlcnRzIl0pXQogICAgICAgICkKICAgICAgICBzZWxmLmdhdGluZ19uZXR3b3JrID0gTW9FR2F0ZShjb25maWcpCiAgICAgICAgc2hhcmVkX2V4cGVydF9kaW0gPSBjb25maWdbImRfZXhwZXJ0Il0gKiBjb25maWdbIm5fc2hhcmVkX2V4cGVydHMiXQogICAgICAgIHNlbGYuc2hhcmVkX2V4cGVydCA9IEV4cGVydChjb25maWc9Y29uZmlnLCBkX2V4cGVydD1zaGFyZWRfZXhwZXJ0X2RpbSkKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4OiB0b3JjaC5UZW5zb3IpIC0+IHRvcmNoLlRlbnNvcjoKICAgICAgICBzaGFyZWRfb3V0cHV0ID0gc2VsZi5zaGFyZWRfZXhwZXJ0KHgpCiAgICAgICAgZXhwZXJ0X2luZGljZXMsIGV4cGVydF9zY29yZXMgPSBzZWxmLmdhdGluZ19uZXR3b3JrKHgpCiAgICAgICAgYmF0Y2hfc2l6ZSwgc2VxX2xlbiwgaGlkZGVuX2RpbSA9IHguc2hhcGUKICAgICAgICBvcmlnX3NoYXBlID0geC5zaGFwZQogICAgICAgIHhfZmxhdCA9IHgudmlldygtMSwgaGlkZGVuX2RpbSkKICAgICAgICBmbGF0X2V4cGVydF9pbmRpY2VzID0gZXhwZXJ0X2luZGljZXMudmlldygtMSkKICAgICAgICBmbGF0X2V4cGVydF93ZWlnaHRzID0gZXhwZXJ0X3Njb3Jlcy52aWV3KC0xLCAxKQogICAgICAgIHJvdXRlZF9vdXRwdXRfZmxhdCA9IHNlbGYubW9lX2luZmVyKAogICAgICAgICAgICB4X2ZsYXQsIGZsYXRfZXhwZXJ0X2luZGljZXMsIGZsYXRfZXhwZXJ0X3dlaWdodHMKICAgICAgICApCgogICAgICAgIHJvdXRlZF9vdXRwdXQgPSByb3V0ZWRfb3V0cHV0X2ZsYXQudmlldygqb3JpZ19zaGFwZSkKICAgICAgICByZXR1cm4gcm91dGVkX291dHB1dCArIHNoYXJlZF9vdXRwdXQKCiAgICBAdG9yY2gubm9fZ3JhZCgpCiAgICBkZWYgbW9lX2luZmVyKAogICAgICAgIHNlbGYsCiAgICAgICAgeDogdG9yY2guVGVuc29yLAogICAgICAgIGZsYXRfZXhwZXJ0X2luZGljZXM6IHRvcmNoLlRlbnNvciwKICAgICAgICBmbGF0X2V4cGVydF93ZWlnaHRzOiB0b3JjaC5UZW5zb3IsCiAgICApIC0+IHRvcmNoLlRlbnNvcjoKICAgICAgICBvdXQgPSB0b3JjaC56ZXJvc19saWtlKHgsIGRldmljZT14LmRldmljZSwgZHR5cGU9dG9yY2guZmxvYXQzMikKICAgICAgICBpZHhzID0gZmxhdF9leHBlcnRfaW5kaWNlcy5hcmdzb3J0KCkKICAgICAgICBjb3VudHMgPSBmbGF0X2V4cGVydF9pbmRpY2VzLmJpbmNvdW50KCkuY3B1KCkubnVtcHkoKQogICAgICAgIHRva2Vuc19wZXJfZXhwZXJ0ID0gY291bnRzLmN1bXN1bSgpCiAgICAgICAgbnVtX3Blcl90b2sgPSBzZWxmLmNvbmZpZ1sibl9leHBlcnRzX3Blcl90b2tlbiJdCiAgICAgICAgdG9rZW5faWR4cyA9IGlkeHMgLy8gbnVtX3Blcl90b2sKICAgICAgICBmb3IgZXhwZXJ0X2lkLCBlbmRfaWR4IGluIGVudW1lcmF0ZSh0b2tlbnNfcGVyX2V4cGVydCk6CiAgICAgICAgICAgIHN0YXJ0X2lkeCA9IDAgaWYgZXhwZXJ0X2lkID09IDAgZWxzZSB0b2tlbnNfcGVyX2V4cGVydFtleHBlcnRfaWQgLSAxXQogICAgICAgICAgICBpZiBzdGFydF9pZHggPT0gZW5kX2lkeDoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICBleHBlcnQgPSBzZWxmLmV4cGVydHNbZXhwZXJ0X2lkXQogICAgICAgICAgICBleHBfdG9rZW5faWR4cyA9IHRva2VuX2lkeHNbc3RhcnRfaWR4OmVuZF9pZHhdCgogICAgICAgICAgICBncmlkID0gbGFtYmRhIE1FVEE6ICgKICAgICAgICAgICAgICAgIHRyaXRvbi5jZGl2KGxlbihleHBfdG9rZW5faWR4cyksIE1FVEFbImtfaWR4Il0pLAogICAgICAgICAgICAgICAgdHJpdG9uLmNkaXYoc2VsZi5jb25maWdbImRfZXhwZXJ0Il0sIE1FVEFbImtfZXhwIl0pLAogICAgICAgICAgICApCiAgICAgICAgICAgIGV4cGVydF9rZXJuZWxbZ3JpZF0oCiAgICAgICAgICAgICAgICBleHBlcnQuV19nYXRlLndlaWdodCwKICAgICAgICAgICAgICAgIGV4cGVydC5XX3VwLndlaWdodCwKICAgICAgICAgICAgICAgIGV4cGVydC5XX2Rvd24ud2VpZ2h0LAogICAgICAgICAgICAgICAgeCwKICAgICAgICAgICAgICAgIG91dCwKICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnWyJkX2hpZGRlbiJdLAogICAgICAgICAgICAgICAgc2VsZi5jb25maWdbImRfZXhwZXJ0Il0sCiAgICAgICAgICAgICAgICBsZW4oZXhwX3Rva2VuX2lkeHMpLAogICAgICAgICAgICAgICAgZXhwX3Rva2VuX2lkeHMsICAjIGZsYXRfZXhwZXJ0X2luZGljZXNbaWR4c1tzdGFydF9pZHg6ZW5kX2lkeF1dLAogICAgICAgICAgICAgICAgZmxhdF9leHBlcnRfd2VpZ2h0c1tpZHhzW3N0YXJ0X2lkeDplbmRfaWR4XV0sCiAgICAgICAgICAgICkKICAgICAgICAgICAgIyBwcmludChleHBlcnRfa2VybmVsLmJlc3RfY29uZmlnKQogICAgICAgIHRvcmNoLmN1ZGEuc3luY2hyb25pemUoKQogICAgICAgIHJldHVybiBvdXQKCiAgICAiIiIKICAgICAgICBleHBlcnRfY2FjaGUgPSB0b3JjaC56ZXJvc19saWtlKHgpCiAgICAgICAgaWR4cyA9IGZsYXRfZXhwZXJ0X2luZGljZXMuYXJnc29ydCgpCiAgICAgICAgY291bnRzID0gZmxhdF9leHBlcnRfaW5kaWNlcy5iaW5jb3VudCgpLmNwdSgpLm51bXB5KCkKICAgICAgICB0b2tlbnNfcGVyX2V4cGVydCA9IGNvdW50cy5jdW1zdW0oKQogICAgICAgIG51bV9wZXJfdG9rID0gc2VsZi5jb25maWdbIm5fZXhwZXJ0c19wZXJfdG9rZW4iXQogICAgICAgIHRva2VuX2lkeHMgPSBpZHhzIC8vIG51bV9wZXJfdG9rCiAgICAgICAgZm9yIGV4cGVydF9pZCwgZW5kX2lkeCBpbiBlbnVtZXJhdGUodG9rZW5zX3Blcl9leHBlcnQpOgogICAgICAgICAgICBzdGFydF9pZHggPSAwIGlmIGV4cGVydF9pZCA9PSAwIGVsc2UgdG9rZW5zX3Blcl9leHBlcnRbZXhwZXJ0X2lkIC0gMV0KICAgICAgICAgICAgaWYgc3RhcnRfaWR4ID09IGVuZF9pZHg6CiAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgZXhwZXJ0ID0gc2VsZi5leHBlcnRzW2V4cGVydF9pZF0KICAgICAgICAgICAgZXhwX3Rva2VuX2lkeHMgPSB0b2tlbl9pZHhzW3N0YXJ0X2lkeDplbmRfaWR4XQogICAgICAgICAgICBleHBlcnRfdG9rZW5zID0geFtleHBfdG9rZW5faWR4c10KICAgICAgICAgICAgZXhwZXJ0X291dCA9IGV4cGVydChleHBlcnRfdG9rZW5zKQogICAgICAgICAgICBleHBlcnRfb3V0Lm11bF8oZmxhdF9leHBlcnRfd2VpZ2h0c1tpZHhzW3N0YXJ0X2lkeDplbmRfaWR4XV0pCiAgICAgICAgICAgIGV4cGVydF9jYWNoZS5zY2F0dGVyX3JlZHVjZV8oCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgZXhwX3Rva2VuX2lkeHMudmlldygtMSwgMSkucmVwZWF0KDEsIHguc2hhcGVbLTFdKSwKICAgICAgICAgICAgICAgIGV4cGVydF9vdXQsCiAgICAgICAgICAgICAgICByZWR1Y2U9InN1bSIsCiAgICAgICAgICAgICkKCiAgICAgICAgcmV0dXJuIGV4cGVydF9jYWNoZQogICAgIiIiCgoKZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6CiAgICAiIiIKICAgIFN1Ym1pc3Npb24gdGVtcGxhdGUgZm9yIERlZXBTZWVrLXN0eWxlIE1peHR1cmUgb2YgRXhwZXJ0cyB1c2luZyBQeVRvcmNoLgoKICAgIEFyZ3M6CiAgICAgICAgZGF0YTogVHVwbGUgb2YgKGlucHV0OiB0b3JjaC5UZW5zb3IsIHdlaWdodHM6IERpY3Rbc3RyLCB0b3JjaC5UZW5zb3JdLCBjb25maWc6IERpY3QpCiAgICAgICAgICAgIC0gaW5wdXQ6IElucHV0IHRlbnNvciBvZiBzaGFwZSBbYmF0Y2hfc2l6ZSwgc2VxX2xlbiwgaGlkZGVuX3NpemVdCiAgICAgICAgICAgIC0gd2VpZ2h0czogRGljdGlvbmFyeSBjb250YWluaW5nIG1vZGVsIHdlaWdodHMKICAgICAgICAgICAgLSBjb25maWc6IERpY3Rpb25hcnkgY29udGFpbmluZyBtb2RlbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKCiAgICBSZXR1cm5zOgogICAgICAgIFR1cGxlIGNvbnRhaW5pbmc6CiAgICAgICAgICAgIC0gb3V0cHV0OiBQcm9jZXNzZWQgdGVuc29yIFtiYXRjaF9zaXplLCBzZXFfbGVuLCBkX21vZGVsXQogICAgICAgICAgICAtIGF1eF9kYXRhOiBEaWN0aW9uYXJ5IHdpdGggYXV4aWxpYXJ5IGRhdGEKICAgICIiIgogICAgaW5wdXRfdGVuc29yLCB3ZWlnaHRzLCBjb25maWcgPSBkYXRhCiAgICBudW1fZXhwZXJ0cyA9IGNvbmZpZ1sibl9yb3V0ZWRfZXhwZXJ0cyJdCiAgICBtb2UgPSBNb0UoY29uZmlnKQoKICAgICMgRmlsbCBpbiB0aGUgZ2l2ZW4gd2VpZ2h0cyBvZiB0aGUgbW9kZWwKICAgIG1vZS5nYXRpbmdfbmV0d29yay5XX2cud2VpZ2h0ID0gbm4uUGFyYW1ldGVyKHdlaWdodHNbInJvdXRlci53ZWlnaHQiXSkKCiAgICBmb3IgaSBpbiByYW5nZShudW1fZXhwZXJ0cyk6CiAgICAgICAgZ2F0ZV9wcm9qX3dlaWdodCA9IHdlaWdodHNbZiJleHBlcnRzLntpfS4wLndlaWdodCJdCiAgICAgICAgdXBfcHJval93ZWlnaHQgPSB3ZWlnaHRzW2YiZXhwZXJ0cy57aX0uMS53ZWlnaHQiXQogICAgICAgIGRvd25fcHJval93ZWlnaHQgPSB3ZWlnaHRzW2YiZXhwZXJ0cy57aX0uMi53ZWlnaHQiXQoKICAgICAgICAjIFRyYW5zcG9zZSB3ZWlnaHRzIHRvIG1hdGNoIGV4cGVjdGVkIHNoYXBlIGZvciBubi5MaW5lYXIKICAgICAgICBtb2UuZXhwZXJ0c1tpXS5XX2dhdGUud2VpZ2h0ID0gbm4uUGFyYW1ldGVyKGdhdGVfcHJval93ZWlnaHQpCiAgICAgICAgbW9lLmV4cGVydHNbaV0uV191cC53ZWlnaHQgPSBubi5QYXJhbWV0ZXIodXBfcHJval93ZWlnaHQpCiAgICAgICAgbW9lLmV4cGVydHNbaV0uV19kb3duLndlaWdodCA9IG5uLlBhcmFtZXRlcihkb3duX3Byb2pfd2VpZ2h0KQoKICAgIG1vZS5zaGFyZWRfZXhwZXJ0LldfZ2F0ZS53ZWlnaHQgPSBubi5QYXJhbWV0ZXIoCiAgICAgICAgd2VpZ2h0c1sic2hhcmVkX2V4cGVydHMuMC53ZWlnaHQiXS50KCkKICAgICkKICAgIG1vZS5zaGFyZWRfZXhwZXJ0LldfdXAud2VpZ2h0ID0gbm4uUGFyYW1ldGVyKHdlaWdodHNbInNoYXJlZF9leHBlcnRzLjEud2VpZ2h0Il0udCgpKQogICAgbW9lLnNoYXJlZF9leHBlcnQuV19kb3duLndlaWdodCA9IG5uLlBhcmFtZXRlcigKICAgICAgICB3ZWlnaHRzWyJzaGFyZWRfZXhwZXJ0cy4yLndlaWdodCJdLnQoKQogICAgKQoKICAgICMgUnVuIHRoZSBtb2RlbAogICAgb3V0cHV0ID0gbW9lKGlucHV0X3RlbnNvcikKCiAgICByZXR1cm4gb3V0cHV0Cg==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 amd-mixture-of-experts · submission 14173.
- IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1taXh0dXJlLW9mLWV4cGVydHMKCiMgVGhpcyBpcyBhIHN1Ym1pc3Npb24gdGVtcGxhdGUgZm9yIHBvcGNvcm4gbGVhZGVyYm9hcmQgJ2FtZC1taXh0dXJlLW9mLWV4cGVydHMnLgojIFlvdXIgdGFzayBpcyBhcyBmb2xsb3dzOgojID4gRm9yIGEgbW9yZSBjb21wbGV0ZSBkZXNjcmlwdGlvbiwgc2VlOiBodHRwczovL3Rpbnl1cmwuY29tL2FtZC1jb21wLW1vZQojID4gSW1wbGVtZW50IGEgRGVlcFNlZWstc3R5bGUgTWl4dHVyZSBvZiBFeHBlcnRzIChNb0UpIGxheWVyIGZvciBlZmZpY2llbnQgdHJhbnNmb3JtZXIgbW9kZWxzCiMgPiBvbiBhIHNpbmdsZSBNSTMwMFggZGV2aWNlLgojID4KIyA+IE1vRSBpcyBhIHRlY2huaXF1ZSB0aGF0IGFsbG93cyBzY2FsaW5nIG1vZGVsIGNhcGFjaXR5IHdpdGhvdXQgcHJvcG9ydGlvbmFsbHkgaW5jcmVhc2luZyBjb21wdXRhdGlvbmFsIGNvc3RzCiMgPiBieSB1c2luZyBhIHJvdXRpbmcgbWVjaGFuaXNtIHRvIHNlbGVjdGl2ZWx5IGFjdGl2YXRlIG9ubHkgYSBzdWJzZXQgb2YgcGFyYW1ldGVycyBmb3IgZWFjaCB0b2tlbi4KIyA+CiMgPiBZb3VyIHRhc2s6CiMgPiAtIEltcGxlbWVudCB0b2tlbiByb3V0aW5nIHVzaW5nIGEgc2ltcGxlIHNvZnRtYXgtYmFzZWQgbGVhcm5lZCByb3V0ZXIKIyA+IC0gUm91dGUgdG9rZW5zIHRvIHRoZSB0b3AtayBleHBlcnRzIGJhc2VkIG9uIHJvdXRlciBwcm9iYWJpbGl0aWVzCiMgPiAtIFByb2Nlc3MgdG9rZW5zIHRocm91Z2ggdGhlaXIgYXNzaWduZWQgZXhwZXJ0cwojID4gLSBDb21iaW5lIGV4cGVydCBvdXRwdXRzIHdlaWdodGVkIGJ5IHJvdXRlciBwcm9iYWJpbGl0aWVzCiMgPiAtIENhbGN1bGF0ZSBhcHByb3ByaWF0ZSBhdXhpbGlhcnkgbG9zc2VzIGZvciB0cmFpbmluZyBzdGFiaWxpdHkKIyA+CiMgPiBJbnB1dDoKIyA+IC0gYGRhdGFgOiBUdXBsZSBvZiAoaW5wdXQ6IHRvcmNoLlRlbnNvciwgd2VpZ2h0czogRGljdFtzdHIsIHRvcmNoLlRlbnNvcl0sIGNvbmZpZzogRGljdCkKIyA+ICAgLSBpbnB1dDogSW5wdXQgdGVuc29yIG9mIHNoYXBlIFticywgc2VxX2xlbiwgZF9oaWRkZW5dCiMgPiAgIC0gd2VpZ2h0czogRGljdGlvbmFyeSBjb250YWluaW5nIG1vZGVsIHdlaWdodHMKIyA+ICAgLSBjb25maWc6IERpY3Rpb25hcnkgY29udGFpbmluZyBtb2RlbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKIyA+CiMgPiBPdXRwdXQ6CiMgPiAtIFR1cGxlIGNvbnRhaW5pbmc6CiMgPiAgIC0gb3V0cHV0OiBQcm9jZXNzZWQgdGVuc29yIFticywgc2VxX2xlbiwgZF9tb2RlbF0KIyA+ICAgLSBhdXhfZGF0YTogRGljdGlvbmFyeSB3aXRoIGF1eGlsaWFyeSBkYXRhIGxpa2Ugcm91dGVyIHByb2JhYmlsaXRpZXMgYW5kIGxvc3NlcwojIFRoZSBkZWFkbGluZSBmb3IgdGhpcyBsZWFkZXJib2FyZCBpcyAyMDI1LTA1LTI3IDAwOjAwOjAwKzAwOjAwCgojIFlvdSBjYW4gYXV0b21hdGljYWxseSByb3V0ZSB0aGlzIGZpbGUgdG8gc3BlY2lmaWMgR1BVcyBieSBhZGRpbmcgYSBsaW5lCiMgYCMhUE9QQ09STiBncHVzIDxHUFVzPmAgdG8gdGhlIGhlYWRlciBvZiB0aGlzIGZpbGUuCiMgSGFwcHkgaGFja2luZyEKCmltcG9ydCBtYXRoCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KaW1wb3J0IHRvcmNoLm5uLmZ1bmN0aW9uYWwgYXMgRgpmcm9tIHR5cGluZyBpbXBvcnQgRGljdCwgVHVwbGUsIE9wdGlvbmFsCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKCgpjbGFzcyBFeHBlcnQobm4uTW9kdWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWc6IERpY3QsIGRfZXhwZXJ0OiBPcHRpb25hbFtpbnRdID0gTm9uZSk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcKICAgICAgICBzZWxmLmFjdF9mbiA9IG5uLlNpTFUoKQogICAgICAgIHNlbGYuZF9oaWRkZW46IGludCA9IGNvbmZpZ1siZF9oaWRkZW4iXQogICAgICAgIHNlbGYuZF9leHBlcnQ6IGludCA9IGNvbmZpZ1siZF9leHBlcnQiXSBpZiBkX2V4cGVydCBpcyBOb25lIGVsc2UgZF9leHBlcnQKCiAgICAgICAgc2VsZi5XX2dhdGUgPSBubi5MaW5lYXIoc2VsZi5kX2hpZGRlbiwgc2VsZi5kX2V4cGVydCwgYmlhcz1GYWxzZSkKICAgICAgICBzZWxmLldfdXAgPSBubi5MaW5lYXIoc2VsZi5kX2hpZGRlbiwgc2VsZi5kX2V4cGVydCwgYmlhcz1GYWxzZSkKICAgICAgICBzZWxmLldfZG93biA9IG5uLkxpbmVhcihzZWxmLmRfZXhwZXJ0LCBzZWxmLmRfaGlkZGVuLCBiaWFzPUZhbHNlKQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHRvcmNoLlRlbnNvcikgLT4gdG9yY2guVGVuc29yOgogICAgICAgIGdhdGUgPSBzZWxmLmFjdF9mbihzZWxmLldfZ2F0ZSh4KSkKICAgICAgICBvdXQgPSBzZWxmLldfZG93bihnYXRlICogc2VsZi5XX3VwKHgpKQogICAgICAgIHJldHVybiBvdXQKCgpjbGFzcyBNb0VHYXRlKG5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnOiBEaWN0KToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLnRvcF9rOiBpbnQgPSBjb25maWdbIm5fZXhwZXJ0c19wZXJfdG9rZW4iXQogICAgICAgIHNlbGYubnVtX2V4cGVydHM6IGludCA9IGNvbmZpZ1sibl9yb3V0ZWRfZXhwZXJ0cyJdCiAgICAgICAgc2VsZi5kX2hpZGRlbjogaW50ID0gY29uZmlnWyJkX2hpZGRlbiJdCgogICAgICAgIHNlbGYuV19nID0gbm4uTGluZWFyKHNlbGYuZF9oaWRkZW4sIHNlbGYubnVtX2V4cGVydHMsIGJpYXM9RmFsc2UpCgogICAgZGVmIGZvcndhcmQoc2VsZiwgeDogdG9yY2guVGVuc29yKSAtPiBUdXBsZVt0b3JjaC5UZW5zb3IsIHRvcmNoLlRlbnNvcl06CiAgICAgICAgbG9naXRzID0gc2VsZi5XX2coeCkKICAgICAgICBzY29yZXMgPSBsb2dpdHMuc29mdG1heChkaW09LTEpCiAgICAgICAgdG9wa19zY29yZXMsIHRvcGtfaW5kaWNlcyA9IHRvcmNoLnRvcGsoCiAgICAgICAgICAgIHNjb3Jlcywgaz1zZWxmLnRvcF9rLCBkaW09LTEsIHNvcnRlZD1GYWxzZQogICAgICAgICkKCiAgICAgICAgIyBwcmludCgiaW5wdXQiLCB4LnNoYXBlKQogICAgICAgICMgcHJpbnQoInRvcGtfaW5kaWNlcyIsIHRvcGtfaW5kaWNlcy5zaGFwZSkKICAgICAgICAjIHByaW50KCJ0b3BrX3Njb3JlcyIsIHRvcGtfc2NvcmVzLnNoYXBlKQoKICAgICAgICByZXR1cm4gdG9wa19pbmRpY2VzLCB0b3BrX3Njb3JlcwoKCmNsYXNzIE1vRShubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKAogICAgICAgIHNlbGYsCiAgICAgICAgY29uZmlnOiBEaWN0LAogICAgICAgIGVfZ2F0ZTogbm4uUGFyYW1ldGVyLAogICAgICAgIGVfdXA6IG5uLlBhcmFtZXRlciwKICAgICAgICBlX2Rvd246IG5uLlBhcmFtZXRlciwKICAgICk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcKICAgICAgICBzZWxmLmV4cGVydHMgPSBubi5Nb2R1bGVMaXN0KAogICAgICAgICAgICBbRXhwZXJ0KGNvbmZpZykgZm9yIF8gaW4gcmFuZ2UoY29uZmlnWyJuX3JvdXRlZF9leHBlcnRzIl0pXQogICAgICAgICkKICAgICAgICBzZWxmLmdhdGluZ19uZXR3b3JrID0gTW9FR2F0ZShjb25maWcpCiAgICAgICAgc2hhcmVkX2V4cGVydF9kaW0gPSBjb25maWdbImRfZXhwZXJ0Il0gKiBjb25maWdbIm5fc2hhcmVkX2V4cGVydHMiXQogICAgICAgIHNlbGYuc2hhcmVkX2V4cGVydCA9IEV4cGVydChjb25maWc9Y29uZmlnLCBkX2V4cGVydD1zaGFyZWRfZXhwZXJ0X2RpbSkKICAgICAgICBzZWxmLmVfZ2F0ZSA9IGVfZ2F0ZQogICAgICAgIHNlbGYuZV91cCA9IGVfdXAKICAgICAgICBzZWxmLmVfZG93biA9IGVfZG93bgoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHRvcmNoLlRlbnNvcikgLT4gdG9yY2guVGVuc29yOgogICAgICAgIHNoYXJlZF9vdXRwdXQgPSBzZWxmLnNoYXJlZF9leHBlcnQoeCkKICAgICAgICBleHBlcnRfaW5kaWNlcywgZXhwZXJ0X3Njb3JlcyA9IHNlbGYuZ2F0aW5nX25ldHdvcmsoeCkKICAgICAgICBiYXRjaF9zaXplLCBzZXFfbGVuLCBoaWRkZW5fZGltID0geC5zaGFwZQogICAgICAgICIiIgogICAgICAgIG9yaWdfc2hhcGUgPSB4LnNoYXBlCiAgICAgICAgeF9mbGF0ID0geC52aWV3KC0xLCBoaWRkZW5fZGltKQogICAgICAgIGZsYXRfZXhwZXJ0X2luZGljZXMgPSBleHBlcnRfaW5kaWNlcy52aWV3KC0xKQogICAgICAgIGZsYXRfZXhwZXJ0X3dlaWdodHMgPSBleHBlcnRfc2NvcmVzLnZpZXcoLTEsIDEpCiAgICAgICAgcm91dGVkX291dHB1dF9mbGF0ID0gc2VsZi5tb2VfaW5mZXIoCiAgICAgICAgICAgIHhfZmxhdCwgZmxhdF9leHBlcnRfaW5kaWNlcywgZmxhdF9leHBlcnRfd2VpZ2h0cwogICAgICAgICkKCiAgICAgICAgcm91dGVkX291dHB1dCA9IHJvdXRlZF9vdXRwdXRfZmxhdC52aWV3KCpvcmlnX3NoYXBlKQogICAgICAgICIiIgogICAgICAgICMgcHJpbnQoImV4cGVydF9zY29yZXMiLCBleHBlcnRfc2NvcmVzLnNoYXBlKQogICAgICAgIHJvdXRlZF9vdXRwdXQgPSBzZWxmLm1vZV9pbmZlcih4LCBleHBlcnRfaW5kaWNlcywgZXhwZXJ0X3Njb3JlcykKICAgICAgICByZXR1cm4gcm91dGVkX291dHB1dCArIHNoYXJlZF9vdXRwdXQKCiAgICBAdG9yY2gubm9fZ3JhZCgpCiAgICBkZWYgbW9lX2luZmVyKAogICAgICAgIHNlbGYsCiAgICAgICAgeDogdG9yY2guVGVuc29yLAogICAgICAgIGV4cGVydF9pbmRpY2VzOiB0b3JjaC5UZW5zb3IsCiAgICAgICAgZXhwZXJ0X3Njb3JlczogdG9yY2guVGVuc29yLAogICAgICAgICMgZmxhdF9leHBlcnRfaW5kaWNlczogdG9yY2guVGVuc29yLAogICAgICAgICMgZmxhdF9leHBlcnRfd2VpZ2h0czogdG9yY2guVGVuc29yLAogICAgKSAtPiB0b3JjaC5UZW5zb3I6CiAgICAgICAgYmF0Y2hfc2l6ZSwgc2VxX2xlbiwgaGlkZGVuX2RpbSA9IHguc2hhcGUKICAgICAgICAjIHByaW50KHguZHR5cGUpCiAgICAgICAgIyBwcmludChzZWxmLmVfZ2F0ZS5kdHlwZSkKCiAgICAgICAgb3V0ID0gdG9yY2guemVyb3NfbGlrZSh4KQogICAgICAgIGZvciBpIGluIHJhbmdlKGJhdGNoX3NpemUpOgogICAgICAgICAgICBmb3IgaiBpbiByYW5nZShzZXFfbGVuKToKICAgICAgICAgICAgICAgIGlucHV0ID0geFtpLCBqXS50byhzZWxmLmVfZ2F0ZS5kdHlwZSkKICAgICAgICAgICAgICAgIGlkeCA9IGV4cGVydF9pbmRpY2VzW2ksIGpdCiAgICAgICAgICAgICAgICBnYXRlID0gRi5zaWx1KHNlbGYuZV9nYXRlW2lkeF0ubWF0bXVsKGlucHV0KSwgaW5wbGFjZT1UcnVlKQogICAgICAgICAgICAgICAgIyB5ID0gc2VsZi5lX2Rvd25baWR4XS5tYXRtdWwoZ2F0ZSAqIHNlbGYuZV91cFtpZHhdLm1hdG11bChpbnB1dCkpCiAgICAgICAgICAgICAgICAjIHByaW50KCJlX2Rvd24iLCBzZWxmLmVfZG93bltpZHhdLnNoYXBlKQogICAgICAgICAgICAgICAgIyBwcmludCgiZ2F0ZSIsIGdhdGUuc2hhcGUpCiAgICAgICAgICAgICAgICAjIHByaW50KAogICAgICAgICAgICAgICAgIyAiZ2F0ZSAqIHNlbGYuZV91cFtpZHhdLm1hdG11bChpbnB1dCkiLAogICAgICAgICAgICAgICAgIyAoZ2F0ZSAqIHNlbGYuZV91cFtpZHhdLm1hdG11bChpbnB1dCkpLnVuc3F1ZWV6ZSgyKS5zaGFwZSwKICAgICAgICAgICAgICAgICMgKQogICAgICAgICAgICAgICAgIyB5ID0gc2VsZi5lX2Rvd25baWR4XS5kb3QoZ2F0ZSAqIHNlbGYuZV91cFtpZHhdLm1hdG11bChpbnB1dCkpCiAgICAgICAgICAgICAgICB5ID0gdG9yY2guYm1tKAogICAgICAgICAgICAgICAgICAgIHNlbGYuZV9kb3duW2lkeF0sCiAgICAgICAgICAgICAgICAgICAgKGdhdGUgKiBzZWxmLmVfdXBbaWR4XS5tYXRtdWwoaW5wdXQpKS51bnNxdWVlemVfKDIpLAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgIyBwcmludCgieSIsIHkuc2hhcGUpCiAgICAgICAgICAgICAgICB5LnNxdWVlemVfKDIpCiAgICAgICAgICAgICAgICAjIHByaW50KCJ5IiwgeS5zaGFwZSkKICAgICAgICAgICAgICAgICMgcHJpbnQoImV4cGVydF9zY29yZXNbaSwgal0iLCBleHBlcnRfc2NvcmVzW2ksIGpdLnNoYXBlKQogICAgICAgICAgICAgICAgeSA9IHkgKiBleHBlcnRfc2NvcmVzW2ksIGpdWzosIE5vbmVdCiAgICAgICAgICAgICAgICAjIHByaW50KCJ5IiwgeS5zaGFwZSkKICAgICAgICAgICAgICAgIG91dFtpLCBqXSA9IHkuc3VtKGRpbT0wKQoKICAgICAgICByZXR1cm4gb3V0CiAgICAgICAgIiIiCiAgICAgICAgcHJpbnQoIngiLCB4LnNoYXBlKQogICAgICAgIHByaW50KCJmbGF0X2V4cGVydF9pbmRpY2VzIiwgZmxhdF9leHBlcnRfaW5kaWNlcy5zaGFwZSkKICAgICAgICBwcmludCgiZmxhdF9leHBlcnRfd2VpZ2h0cyIsIGZsYXRfZXhwZXJ0X3dlaWdodHMuc2hhcGUpCiAgICAgICAgZXhwZXJ0X2NhY2hlID0gdG9yY2guemVyb3NfbGlrZSh4KQogICAgICAgIGlkeHMgPSBmbGF0X2V4cGVydF9pbmRpY2VzLmFyZ3NvcnQoKQogICAgICAgIHByaW50KCJpZHhzIiwgaWR4cy5zaGFwZSkKICAgICAgICBjb3VudHMgPSBmbGF0X2V4cGVydF9pbmRpY2VzLmJpbmNvdW50KCkuY3B1KCkubnVtcHkoKQogICAgICAgIHRva2Vuc19wZXJfZXhwZXJ0ID0gY291bnRzLmN1bXN1bSgpCiAgICAgICAgcHJpbnQoInRva2Vuc19wZXJfZXhwZXJ0IiwgdG9rZW5zX3Blcl9leHBlcnQuc2hhcGUpCiAgICAgICAgbnVtX3Blcl90b2sgPSBzZWxmLmNvbmZpZ1sibl9leHBlcnRzX3Blcl90b2tlbiJdCiAgICAgICAgdG9rZW5faWR4cyA9IGlkeHMgLy8gbnVtX3Blcl90b2sKICAgICAgICBmb3IgZXhwZXJ0X2lkLCBlbmRfaWR4IGluIGVudW1lcmF0ZSh0b2tlbnNfcGVyX2V4cGVydCk6CiAgICAgICAgICAgIHN0YXJ0X2lkeCA9IDAgaWYgZXhwZXJ0X2lkID09IDAgZWxzZSB0b2tlbnNfcGVyX2V4cGVydFtleHBlcnRfaWQgLSAxXQogICAgICAgICAgICBpZiBzdGFydF9pZHggPT0gZW5kX2lkeDoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICBleHBlcnQgPSBzZWxmLmV4cGVydHNbZXhwZXJ0X2lkXQogICAgICAgICAgICBleHBfdG9rZW5faWR4cyA9IHRva2VuX2lkeHNbc3RhcnRfaWR4OmVuZF9pZHhdCiAgICAgICAgICAgIGV4cGVydF90b2tlbnMgPSB4W2V4cF90b2tlbl9pZHhzXQogICAgICAgICAgICBleHBlcnRfb3V0ID0gZXhwZXJ0KGV4cGVydF90b2tlbnMpCiAgICAgICAgICAgIGV4cGVydF9vdXQubXVsXyhmbGF0X2V4cGVydF93ZWlnaHRzW2lkeHNbc3RhcnRfaWR4OmVuZF9pZHhdXSkKICAgICAgICAgICAgZXhwZXJ0X2NhY2hlLnNjYXR0ZXJfcmVkdWNlXygKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICBleHBfdG9rZW5faWR4cy52aWV3KC0xLCAxKS5yZXBlYXQoMSwgeC5zaGFwZVstMV0pLAogICAgICAgICAgICAgICAgZXhwZXJ0X291dCwKICAgICAgICAgICAgICAgIHJlZHVjZT0ic3VtIiwKICAgICAgICAgICAgKQoKICAgICAgICBwcmludCgiZXhwZXJ0X2NhY2hlIiwgZXhwZXJ0X2NhY2hlLnNoYXBlKQogICAgICAgIHJldHVybiBleHBlcnRfY2FjaGUKICAgICAgICAiIiIKCgpkZWYgY3VzdG9tX2tlcm5lbChkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoKICAgICIiIgogICAgU3VibWlzc2lvbiB0ZW1wbGF0ZSBmb3IgRGVlcFNlZWstc3R5bGUgTWl4dHVyZSBvZiBFeHBlcnRzIHVzaW5nIFB5VG9yY2guCgogICAgQXJnczoKICAgICAgICBkYXRhOiBUdXBsZSBvZiAoaW5wdXQ6IHRvcmNoLlRlbnNvciwgd2VpZ2h0czogRGljdFtzdHIsIHRvcmNoLlRlbnNvcl0sIGNvbmZpZzogRGljdCkKICAgICAgICAgICAgLSBpbnB1dDogSW5wdXQgdGVuc29yIG9mIHNoYXBlIFtiYXRjaF9zaXplLCBzZXFfbGVuLCBoaWRkZW5fc2l6ZV0KICAgICAgICAgICAgLSB3ZWlnaHRzOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgbW9kZWwgd2VpZ2h0cwogICAgICAgICAgICAtIGNvbmZpZzogRGljdGlvbmFyeSBjb250YWluaW5nIG1vZGVsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycwoKICAgIFJldHVybnM6CiAgICAgICAgVHVwbGUgY29udGFpbmluZzoKICAgICAgICAgICAgLSBvdXRwdXQ6IFByb2Nlc3NlZCB0ZW5zb3IgW2JhdGNoX3NpemUsIHNlcV9sZW4sIGRfbW9kZWxdCiAgICAgICAgICAgIC0gYXV4X2RhdGE6IERpY3Rpb25hcnkgd2l0aCBhdXhpbGlhcnkgZGF0YQogICAgIiIiCiAgICBpbnB1dF90ZW5zb3IsIHdlaWdodHMsIGNvbmZpZyA9IGRhdGEKICAgIG51bV9leHBlcnRzID0gY29uZmlnWyJuX3JvdXRlZF9leHBlcnRzIl0KCiAgICBneCwgZ3kgPSB3ZWlnaHRzW2YiZXhwZXJ0cy4wLjAud2VpZ2h0Il0uc2hhcGUKICAgIHV4LCB1eSA9IHdlaWdodHNbZiJleHBlcnRzLjAuMS53ZWlnaHQiXS5zaGFwZQogICAgZHgsIGR5ID0gd2VpZ2h0c1tmImV4cGVydHMuMC4yLndlaWdodCJdLnNoYXBlCgogICAgZV9nYXRlID0gdG9yY2guemVyb3MoKG51bV9leHBlcnRzLCBneSwgZ3gpLCBkZXZpY2U9aW5wdXRfdGVuc29yLmRldmljZSkKICAgIGVfdXAgPSB0b3JjaC56ZXJvcygobnVtX2V4cGVydHMsIHV5LCB1eCksIGRldmljZT1pbnB1dF90ZW5zb3IuZGV2aWNlKQogICAgZV9kb3duID0gdG9yY2guemVyb3MoKG51bV9leHBlcnRzLCBkeSwgZHgpLCBkZXZpY2U9aW5wdXRfdGVuc29yLmRldmljZSkKCiAgICBmb3IgaSBpbiByYW5nZShudW1fZXhwZXJ0cyk6CiAgICAgICAgZV9nYXRlW2ldID0gd2VpZ2h0c1tmImV4cGVydHMue2l9LjAud2VpZ2h0Il0udCgpCiAgICAgICAgZV91cFtpXSA9IHdlaWdodHNbZiJleHBlcnRzLntpfS4xLndlaWdodCJdLnQoKQogICAgICAgIGVfZG93bltpXSA9IHdlaWdodHNbZiJleHBlcnRzLntpfS4yLndlaWdodCJdLnQoKQoKICAgIG1vZSA9IE1vRShjb25maWcsIGVfZ2F0ZSwgZV91cCwgZV9kb3duKQoKICAgICMgRmlsbCBpbiB0aGUgZ2l2ZW4gd2VpZ2h0cyBvZiB0aGUgbW9kZWwKICAgIG1vZS5nYXRpbmdfbmV0d29yay5XX2cud2VpZ2h0ID0gbm4uUGFyYW1ldGVyKHdlaWdodHNbInJvdXRlci53ZWlnaHQiXSkKCiAgICAiIiIKICAgIGZvciBpIGluIHJhbmdlKG51bV9leHBlcnRzKToKICAgICAgICBnYXRlX3Byb2pfd2VpZ2h0ID0gd2VpZ2h0c1tmImV4cGVydHMue2l9LjAud2VpZ2h0Il0KICAgICAgICB1cF9wcm9qX3dlaWdodCA9IHdlaWdodHNbZiJleHBlcnRzLntpfS4xLndlaWdodCJdCiAgICAgICAgZG93bl9wcm9qX3dlaWdodCA9IHdlaWdodHNbZiJleHBlcnRzLntpfS4yLndlaWdodCJdCgogICAgICAgICMgVHJhbnNwb3NlIHdlaWdodHMgdG8gbWF0Y2ggZXhwZWN0ZWQgc2hhcGUgZm9yIG5uLkxpbmVhcgogICAgICAgIG1vZS5leHBlcnRzW2ldLldfZ2F0ZS53ZWlnaHQgPSBubi5QYXJhbWV0ZXIoZ2F0ZV9wcm9qX3dlaWdodC50KCkpCiAgICAgICAgbW9lLmV4cGVydHNbaV0uV191cC53ZWlnaHQgPSBubi5QYXJhbWV0ZXIodXBfcHJval93ZWlnaHQudCgpKQogICAgICAgIG1vZS5leHBlcnRzW2ldLldfZG93bi53ZWlnaHQgPSBubi5QYXJhbWV0ZXIoZG93bl9wcm9qX3dlaWdodC50KCkpCiAgICAiIiIKCiAgICBtb2Uuc2hhcmVkX2V4cGVydC5XX2dhdGUud2VpZ2h0ID0gbm4uUGFyYW1ldGVyKAogICAgICAgIHdlaWdodHNbInNoYXJlZF9leHBlcnRzLjAud2VpZ2h0Il0udCgpCiAgICApCiAgICBtb2Uuc2hhcmVkX2V4cGVydC5XX3VwLndlaWdodCA9IG5uLlBhcmFtZXRlcih3ZWlnaHRzWyJzaGFyZWRfZXhwZXJ0cy4xLndlaWdodCJdLnQoKSkKICAgIG1vZS5zaGFyZWRfZXhwZXJ0LldfZG93bi53ZWlnaHQgPSBubi5QYXJhbWV0ZXIoCiAgICAgICAgd2VpZ2h0c1sic2hhcmVkX2V4cGVydHMuMi53ZWlnaHQiXS50KCkKICAgICkKCiAgICAjIFJ1biB0aGUgbW9kZWwKICAgIG91dHB1dCA9IG1vZShpbnB1dF90ZW5zb3IpCgogICAgcmV0dXJuIG91dHB1dAo=No newline at end of file+ IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1taXh0dXJlLW9mLWV4cGVydHMKCiMgVGhpcyBpcyBhIHN1Ym1pc3Npb24gdGVtcGxhdGUgZm9yIHBvcGNvcm4gbGVhZGVyYm9hcmQgJ2FtZC1taXh0dXJlLW9mLWV4cGVydHMnLgojIFlvdXIgdGFzayBpcyBhcyBmb2xsb3dzOgojID4gRm9yIGEgbW9yZSBjb21wbGV0ZSBkZXNjcmlwdGlvbiwgc2VlOiBodHRwczovL3Rpbnl1cmwuY29tL2FtZC1jb21wLW1vZQojID4gSW1wbGVtZW50IGEgRGVlcFNlZWstc3R5bGUgTWl4dHVyZSBvZiBFeHBlcnRzIChNb0UpIGxheWVyIGZvciBlZmZpY2llbnQgdHJhbnNmb3JtZXIgbW9kZWxzCiMgPiBvbiBhIHNpbmdsZSBNSTMwMFggZGV2aWNlLgojID4KIyA+IE1vRSBpcyBhIHRlY2huaXF1ZSB0aGF0IGFsbG93cyBzY2FsaW5nIG1vZGVsIGNhcGFjaXR5IHdpdGhvdXQgcHJvcG9ydGlvbmFsbHkgaW5jcmVhc2luZyBjb21wdXRhdGlvbmFsIGNvc3RzCiMgPiBieSB1c2luZyBhIHJvdXRpbmcgbWVjaGFuaXNtIHRvIHNlbGVjdGl2ZWx5IGFjdGl2YXRlIG9ubHkgYSBzdWJzZXQgb2YgcGFyYW1ldGVycyBmb3IgZWFjaCB0b2tlbi4KIyA+CiMgPiBZb3VyIHRhc2s6CiMgPiAtIEltcGxlbWVudCB0b2tlbiByb3V0aW5nIHVzaW5nIGEgc2ltcGxlIHNvZnRtYXgtYmFzZWQgbGVhcm5lZCByb3V0ZXIKIyA+IC0gUm91dGUgdG9rZW5zIHRvIHRoZSB0b3AtayBleHBlcnRzIGJhc2VkIG9uIHJvdXRlciBwcm9iYWJpbGl0aWVzCiMgPiAtIFByb2Nlc3MgdG9rZW5zIHRocm91Z2ggdGhlaXIgYXNzaWduZWQgZXhwZXJ0cwojID4gLSBDb21iaW5lIGV4cGVydCBvdXRwdXRzIHdlaWdodGVkIGJ5IHJvdXRlciBwcm9iYWJpbGl0aWVzCiMgPiAtIENhbGN1bGF0ZSBhcHByb3ByaWF0ZSBhdXhpbGlhcnkgbG9zc2VzIGZvciB0cmFpbmluZyBzdGFiaWxpdHkKIyA+CiMgPiBJbnB1dDoKIyA+IC0gYGRhdGFgOiBUdXBsZSBvZiAoaW5wdXQ6IHRvcmNoLlRlbnNvciwgd2VpZ2h0czogRGljdFtzdHIsIHRvcmNoLlRlbnNvcl0sIGNvbmZpZzogRGljdCkKIyA+ICAgLSBpbnB1dDogSW5wdXQgdGVuc29yIG9mIHNoYXBlIFticywgc2VxX2xlbiwgZF9oaWRkZW5dCiMgPiAgIC0gd2VpZ2h0czogRGljdGlvbmFyeSBjb250YWluaW5nIG1vZGVsIHdlaWdodHMKIyA+ICAgLSBjb25maWc6IERpY3Rpb25hcnkgY29udGFpbmluZyBtb2RlbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKIyA+CiMgPiBPdXRwdXQ6CiMgPiAtIFR1cGxlIGNvbnRhaW5pbmc6CiMgPiAgIC0gb3V0cHV0OiBQcm9jZXNzZWQgdGVuc29yIFticywgc2VxX2xlbiwgZF9tb2RlbF0KIyA+ICAgLSBhdXhfZGF0YTogRGljdGlvbmFyeSB3aXRoIGF1eGlsaWFyeSBkYXRhIGxpa2Ugcm91dGVyIHByb2JhYmlsaXRpZXMgYW5kIGxvc3NlcwojIFRoZSBkZWFkbGluZSBmb3IgdGhpcyBsZWFkZXJib2FyZCBpcyAyMDI1LTA1LTI3IDAwOjAwOjAwKzAwOjAwCgojIFlvdSBjYW4gYXV0b21hdGljYWxseSByb3V0ZSB0aGlzIGZpbGUgdG8gc3BlY2lmaWMgR1BVcyBieSBhZGRpbmcgYSBsaW5lCiMgYCMhUE9QQ09STiBncHVzIDxHUFVzPmAgdG8gdGhlIGhlYWRlciBvZiB0aGlzIGZpbGUuCiMgSGFwcHkgaGFja2luZyEKCmltcG9ydCBtYXRoCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KaW1wb3J0IHRvcmNoLm5uLmZ1bmN0aW9uYWwgYXMgRgpmcm9tIHR5cGluZyBpbXBvcnQgRGljdCwgVHVwbGUsIE9wdGlvbmFsCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKaW1wb3J0IHRyaXRvbgppbXBvcnQgdHJpdG9uLmxhbmd1YWdlIGFzIHRsCgoKY2xhc3MgRXhwZXJ0KG5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnOiBEaWN0LCBkX2V4cGVydDogT3B0aW9uYWxbaW50XSA9IE5vbmUpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgIHNlbGYuY29uZmlnID0gY29uZmlnCiAgICAgICAgc2VsZi5hY3RfZm4gPSBubi5TaUxVKCkKICAgICAgICBzZWxmLmRfaGlkZGVuOiBpbnQgPSBjb25maWdbImRfaGlkZGVuIl0KICAgICAgICBzZWxmLmRfZXhwZXJ0OiBpbnQgPSBjb25maWdbImRfZXhwZXJ0Il0gaWYgZF9leHBlcnQgaXMgTm9uZSBlbHNlIGRfZXhwZXJ0CgogICAgICAgIHNlbGYuV19nYXRlID0gbm4uTGluZWFyKHNlbGYuZF9oaWRkZW4sIHNlbGYuZF9leHBlcnQsIGJpYXM9RmFsc2UpCiAgICAgICAgc2VsZi5XX3VwID0gbm4uTGluZWFyKHNlbGYuZF9oaWRkZW4sIHNlbGYuZF9leHBlcnQsIGJpYXM9RmFsc2UpCiAgICAgICAgc2VsZi5XX2Rvd24gPSBubi5MaW5lYXIoc2VsZi5kX2V4cGVydCwgc2VsZi5kX2hpZGRlbiwgYmlhcz1GYWxzZSkKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4OiB0b3JjaC5UZW5zb3IpIC0+IHRvcmNoLlRlbnNvcjoKICAgICAgICBnYXRlID0gc2VsZi5hY3RfZm4oc2VsZi5XX2dhdGUoeCkpCiAgICAgICAgb3V0ID0gc2VsZi5XX2Rvd24oZ2F0ZSAqIHNlbGYuV191cCh4KSkKICAgICAgICByZXR1cm4gb3V0CgoKY2xhc3MgTW9FR2F0ZShubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZzogRGljdCk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi50b3BfazogaW50ID0gY29uZmlnWyJuX2V4cGVydHNfcGVyX3Rva2VuIl0KICAgICAgICBzZWxmLm51bV9leHBlcnRzOiBpbnQgPSBjb25maWdbIm5fcm91dGVkX2V4cGVydHMiXQogICAgICAgIHNlbGYuZF9oaWRkZW46IGludCA9IGNvbmZpZ1siZF9oaWRkZW4iXQoKICAgICAgICBzZWxmLldfZyA9IG5uLkxpbmVhcihzZWxmLmRfaGlkZGVuLCBzZWxmLm51bV9leHBlcnRzLCBiaWFzPUZhbHNlKQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHRvcmNoLlRlbnNvcikgLT4gVHVwbGVbdG9yY2guVGVuc29yLCB0b3JjaC5UZW5zb3JdOgogICAgICAgIGxvZ2l0cyA9IHNlbGYuV19nKHgpCiAgICAgICAgc2NvcmVzID0gbG9naXRzLnNvZnRtYXgoZGltPS0xKQogICAgICAgIHRvcGtfc2NvcmVzLCB0b3BrX2luZGljZXMgPSB0b3JjaC50b3BrKAogICAgICAgICAgICBzY29yZXMsIGs9c2VsZi50b3BfaywgZGltPS0xLCBzb3J0ZWQ9RmFsc2UKICAgICAgICApCgogICAgICAgIHJldHVybiB0b3BrX2luZGljZXMsIHRvcGtfc2NvcmVzCgoKZGVmIGNvbmZpZ3MoKToKICAgIHJldHVybiBbCiAgICAgICAgdHJpdG9uLkNvbmZpZygKICAgICAgICAgICAga3dhcmdzPXsKICAgICAgICAgICAgICAgICJrX2lkeCI6IGtfaWR4LAogICAgICAgICAgICAgICAgImtfaGlkIjoga19oaWQsCiAgICAgICAgICAgICAgICAia19leHAiOiBrX2V4cCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgbnVtX3dhcnBzPTgsCiAgICAgICAgKQogICAgICAgIGZvciBrX2lkeCBpbiBbMTZdCiAgICAgICAgZm9yIGtfaGlkIGluIFszMl0KICAgICAgICBmb3Iga19leHAgaW4gWzMyXQogICAgXQoKCkB0cml0b24uYXV0b3R1bmUoCiAgICBjb25maWdzPWNvbmZpZ3MoKSwKICAgIGtleT1bXSwgICMgdGhlIHR3byBhYm92ZSBjb25maWdzIHdpbGwgYmUgZXZhbHVhdGVkIGFueXRpbWUKKQpAdHJpdG9uLmppdApkZWYgZXhwZXJ0X2tlcm5lbCgKICAgIGV4cGVydF9nYXRlLAogICAgZXhwZXJ0X3VwLAogICAgZXhwZXJ0X2Rvd24sCiAgICB4LAogICAgb3V0LAogICAgZF9oaWRkZW4sCiAgICBkX2V4cGVydCwKICAgIGlkeHNfbGVuLAogICAgZXhwZXJ0X3Rva2VuX2lkeHMsCiAgICBleHBlcnRfd2VpZ2h0cywKICAgIGtfaWR4OiB0bC5jb25zdGV4cHIsCiAgICBrX2hpZDogdGwuY29uc3RleHByLAogICAga19leHA6IHRsLmNvbnN0ZXhwciwKKToKICAgIHN0YXJ0X2lkID0gdGwucHJvZ3JhbV9pZCgwKSAqIGtfaWR4CiAgICBzdGFydF9leHAgPSB0bC5wcm9ncmFtX2lkKDEpICoga19leHAKCiAgICBpZHNfbWFzayA9IHRsLmFyYW5nZSgwLCBrX2lkeCkgPCBpZHhzX2xlbiAtIHN0YXJ0X2lkCiAgICBleHBfbWFzayA9IHRsLmFyYW5nZSgwLCBrX2V4cCkgPCBkX2V4cGVydCAtIHN0YXJ0X2V4cAoKICAgIGlkcyA9IHRsLmxvYWQoCiAgICAgICAgZXhwZXJ0X3Rva2VuX2lkeHMgKyBzdGFydF9pZCArIHRsLmFyYW5nZSgwLCBrX2lkeCksCiAgICAgICAgbWFzaz1pZHNfbWFzaywKICAgICkKICAgIHNjYWxlcyA9IHRsLmxvYWQoZXhwZXJ0X3dlaWdodHMgKyBzdGFydF9pZCArIHRsLmFyYW5nZSgwLCBrX2lkeCksIG1hc2s9aWRzX21hc2spCgogICAgZ2F0ZV9zdW0gPSB0bC56ZXJvcygoa19leHAsIGtfaWR4KSwgZHR5cGU9dGwuZmxvYXQzMikKICAgIHVwX3N1bSA9IHRsLnplcm9zKChrX2V4cCwga19pZHgpLCBkdHlwZT10bC5mbG9hdDMyKQoKICAgIGZvciBoaWQgaW4gcmFuZ2UoMCwgZF9oaWRkZW4sIGtfaGlkKToKICAgICAgICBkX2hpZGRlbl9tYXNrID0gdGwuYXJhbmdlKDAsIGtfaGlkKSA8IGRfaGlkZGVuIC0gaGlkCiAgICAgICAgaW5wdXQgPSB0bC5sb2FkKAogICAgICAgICAgICB4ICsgKGhpZCArIHRsLmFyYW5nZSgwLCBrX2hpZCkpWzosIE5vbmVdICsgKGRfaGlkZGVuICogaWRzKVtOb25lLCA6XSwKICAgICAgICAgICAgbWFzaz1kX2hpZGRlbl9tYXNrWzosIE5vbmVdICYgaWRzX21hc2tbTm9uZSwgOl0sCiAgICAgICAgKQogICAgICAgIGdhdGUgPSB0bC5sb2FkKAogICAgICAgICAgICBleHBlcnRfZ2F0ZQogICAgICAgICAgICArIChzdGFydF9leHAgKyB0bC5hcmFuZ2UoMCwga19leHApKVs6LCBOb25lXQogICAgICAgICAgICArIGRfZXhwZXJ0ICogKGhpZCArIHRsLmFyYW5nZSgwLCBrX2hpZCkpW05vbmUsIDpdLAogICAgICAgICAgICBtYXNrPWV4cF9tYXNrWzosIE5vbmVdICYgZF9oaWRkZW5fbWFza1tOb25lLCA6XSwKICAgICAgICApCiAgICAgICAgZ2F0ZV9zdW0gPSB0bC5kb3QoZ2F0ZSwgaW5wdXQsIGFjYz1nYXRlX3N1bSkKICAgICAgICB1cCA9IHRsLmxvYWQoCiAgICAgICAgICAgIGV4cGVydF91cAogICAgICAgICAgICArIChzdGFydF9leHAgKyB0bC5hcmFuZ2UoMCwga19leHApKVs6LCBOb25lXQogICAgICAgICAgICArIGRfZXhwZXJ0ICogKGhpZCArIHRsLmFyYW5nZSgwLCBrX2hpZCkpW05vbmUsIDpdLAogICAgICAgICAgICBtYXNrPWV4cF9tYXNrWzosIE5vbmVdICYgZF9oaWRkZW5fbWFza1tOb25lLCA6XSwKICAgICAgICApCiAgICAgICAgdXBfc3VtID0gdGwuZG90KHVwLCBpbnB1dCwgYWNjPXVwX3N1bSkKICAgICMgc2lsdQogICAgZ2F0ZV9zdW0gPSBnYXRlX3N1bSAqIHRsLnNpZ21vaWQoZ2F0ZV9zdW0pCiAgICByaWdodCA9IGdhdGVfc3VtICogdXBfc3VtCiAgICBmb3IgaGlkIGluIHJhbmdlKDAsIGRfaGlkZGVuLCBrX2hpZCk6CiAgICAgICAgZF9oaWRkZW5fbWFzayA9IHRsLmFyYW5nZSgwLCBrX2hpZCkgPCBkX2hpZGRlbiAtIGhpZAogICAgICAgIGRvd24gPSB0bC5sb2FkKAogICAgICAgICAgICBleHBlcnRfZG93bgogICAgICAgICAgICArIChoaWQgKyB0bC5hcmFuZ2UoMCwga19oaWQpKVs6LCBOb25lXQogICAgICAgICAgICArIGRfaGlkZGVuICogKHN0YXJ0X2V4cCArIHRsLmFyYW5nZSgwLCBrX2V4cCkpW05vbmUsIDpdLAogICAgICAgICAgICBtYXNrPWRfaGlkZGVuX21hc2tbOiwgTm9uZV0gJiBleHBfbWFza1tOb25lLCA6XSwKICAgICAgICApLnRvKHRsLmZsb2F0MzIpCgogICAgICAgIHYgPSB0bC5kb3QoZG93biwgcmlnaHQpCiAgICAgICAgdiA9IHYgKiBzY2FsZXNbTm9uZSwgOl0KCiAgICAgICAgdGwuYXRvbWljX2FkZCgKICAgICAgICAgICAgb3V0ICsgKGhpZCArIHRsLmFyYW5nZSgwLCBrX2hpZCkpWzosIE5vbmVdICsgKGRfaGlkZGVuICogaWRzKVtOb25lLCA6XSwKICAgICAgICAgICAgdiwKICAgICAgICAgICAgbWFzaz1kX2hpZGRlbl9tYXNrWzosIE5vbmVdICYgaWRzX21hc2tbTm9uZSwgOl0sCiAgICAgICAgKQoKCmNsYXNzIE1vRShubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZzogRGljdCk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcKICAgICAgICBzZWxmLmV4cGVydHMgPSBubi5Nb2R1bGVMaXN0KAogICAgICAgICAgICBbRXhwZXJ0KGNvbmZpZykgZm9yIF8gaW4gcmFuZ2UoY29uZmlnWyJuX3JvdXRlZF9leHBlcnRzIl0pXQogICAgICAgICkKICAgICAgICBzZWxmLmdhdGluZ19uZXR3b3JrID0gTW9FR2F0ZShjb25maWcpCiAgICAgICAgc2hhcmVkX2V4cGVydF9kaW0gPSBjb25maWdbImRfZXhwZXJ0Il0gKiBjb25maWdbIm5fc2hhcmVkX2V4cGVydHMiXQogICAgICAgIHNlbGYuc2hhcmVkX2V4cGVydCA9IEV4cGVydChjb25maWc9Y29uZmlnLCBkX2V4cGVydD1zaGFyZWRfZXhwZXJ0X2RpbSkKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4OiB0b3JjaC5UZW5zb3IpIC0+IHRvcmNoLlRlbnNvcjoKICAgICAgICBzaGFyZWRfb3V0cHV0ID0gc2VsZi5zaGFyZWRfZXhwZXJ0KHgpCiAgICAgICAgZXhwZXJ0X2luZGljZXMsIGV4cGVydF9zY29yZXMgPSBzZWxmLmdhdGluZ19uZXR3b3JrKHgpCiAgICAgICAgYmF0Y2hfc2l6ZSwgc2VxX2xlbiwgaGlkZGVuX2RpbSA9IHguc2hhcGUKICAgICAgICBvcmlnX3NoYXBlID0geC5zaGFwZQogICAgICAgIHhfZmxhdCA9IHgudmlldygtMSwgaGlkZGVuX2RpbSkKICAgICAgICBmbGF0X2V4cGVydF9pbmRpY2VzID0gZXhwZXJ0X2luZGljZXMudmlldygtMSkKICAgICAgICBmbGF0X2V4cGVydF93ZWlnaHRzID0gZXhwZXJ0X3Njb3Jlcy52aWV3KC0xLCAxKQogICAgICAgIHJvdXRlZF9vdXRwdXRfZmxhdCA9IHNlbGYubW9lX2luZmVyKAogICAgICAgICAgICB4X2ZsYXQsIGZsYXRfZXhwZXJ0X2luZGljZXMsIGZsYXRfZXhwZXJ0X3dlaWdodHMKICAgICAgICApCgogICAgICAgIHJvdXRlZF9vdXRwdXQgPSByb3V0ZWRfb3V0cHV0X2ZsYXQudmlldygqb3JpZ19zaGFwZSkKICAgICAgICByZXR1cm4gcm91dGVkX291dHB1dCArIHNoYXJlZF9vdXRwdXQKCiAgICBAdG9yY2gubm9fZ3JhZCgpCiAgICBkZWYgbW9lX2luZmVyKAogICAgICAgIHNlbGYsCiAgICAgICAgeDogdG9yY2guVGVuc29yLAogICAgICAgIGZsYXRfZXhwZXJ0X2luZGljZXM6IHRvcmNoLlRlbnNvciwKICAgICAgICBmbGF0X2V4cGVydF93ZWlnaHRzOiB0b3JjaC5UZW5zb3IsCiAgICApIC0+IHRvcmNoLlRlbnNvcjoKICAgICAgICBvdXQgPSB0b3JjaC56ZXJvc19saWtlKHgsIGRldmljZT14LmRldmljZSwgZHR5cGU9dG9yY2guZmxvYXQzMikKICAgICAgICBpZHhzID0gZmxhdF9leHBlcnRfaW5kaWNlcy5hcmdzb3J0KCkKICAgICAgICBjb3VudHMgPSBmbGF0X2V4cGVydF9pbmRpY2VzLmJpbmNvdW50KCkuY3B1KCkubnVtcHkoKQogICAgICAgIHRva2Vuc19wZXJfZXhwZXJ0ID0gY291bnRzLmN1bXN1bSgpCiAgICAgICAgbnVtX3Blcl90b2sgPSBzZWxmLmNvbmZpZ1sibl9leHBlcnRzX3Blcl90b2tlbiJdCiAgICAgICAgdG9rZW5faWR4cyA9IGlkeHMgLy8gbnVtX3Blcl90b2sKICAgICAgICBmb3IgZXhwZXJ0X2lkLCBlbmRfaWR4IGluIGVudW1lcmF0ZSh0b2tlbnNfcGVyX2V4cGVydCk6CiAgICAgICAgICAgIHN0YXJ0X2lkeCA9IDAgaWYgZXhwZXJ0X2lkID09IDAgZWxzZSB0b2tlbnNfcGVyX2V4cGVydFtleHBlcnRfaWQgLSAxXQogICAgICAgICAgICBpZiBzdGFydF9pZHggPT0gZW5kX2lkeDoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICBleHBlcnQgPSBzZWxmLmV4cGVydHNbZXhwZXJ0X2lkXQogICAgICAgICAgICBleHBfdG9rZW5faWR4cyA9IHRva2VuX2lkeHNbc3RhcnRfaWR4OmVuZF9pZHhdCgogICAgICAgICAgICBncmlkID0gbGFtYmRhIE1FVEE6ICgKICAgICAgICAgICAgICAgIHRyaXRvbi5jZGl2KGxlbihleHBfdG9rZW5faWR4cyksIE1FVEFbImtfaWR4Il0pLAogICAgICAgICAgICAgICAgdHJpdG9uLmNkaXYoc2VsZi5jb25maWdbImRfZXhwZXJ0Il0sIE1FVEFbImtfZXhwIl0pLAogICAgICAgICAgICApCiAgICAgICAgICAgIGV4cGVydF9rZXJuZWxbZ3JpZF0oCiAgICAgICAgICAgICAgICBleHBlcnQuV19nYXRlLndlaWdodCwKICAgICAgICAgICAgICAgIGV4cGVydC5XX3VwLndlaWdodCwKICAgICAgICAgICAgICAgIGV4cGVydC5XX2Rvd24ud2VpZ2h0LAogICAgICAgICAgICAgICAgeCwKICAgICAgICAgICAgICAgIG91dCwKICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnWyJkX2hpZGRlbiJdLAogICAgICAgICAgICAgICAgc2VsZi5jb25maWdbImRfZXhwZXJ0Il0sCiAgICAgICAgICAgICAgICBsZW4oZXhwX3Rva2VuX2lkeHMpLAogICAgICAgICAgICAgICAgZXhwX3Rva2VuX2lkeHMsICAjIGZsYXRfZXhwZXJ0X2luZGljZXNbaWR4c1tzdGFydF9pZHg6ZW5kX2lkeF1dLAogICAgICAgICAgICAgICAgZmxhdF9leHBlcnRfd2VpZ2h0c1tpZHhzW3N0YXJ0X2lkeDplbmRfaWR4XV0sCiAgICAgICAgICAgICkKICAgICAgICAgICAgIyBwcmludChleHBlcnRfa2VybmVsLmJlc3RfY29uZmlnKQogICAgICAgIHRvcmNoLmN1ZGEuc3luY2hyb25pemUoKQogICAgICAgIHJldHVybiBvdXQKCiAgICAiIiIKICAgICAgICBleHBlcnRfY2FjaGUgPSB0b3JjaC56ZXJvc19saWtlKHgpCiAgICAgICAgaWR4cyA9IGZsYXRfZXhwZXJ0X2luZGljZXMuYXJnc29ydCgpCiAgICAgICAgY291bnRzID0gZmxhdF9leHBlcnRfaW5kaWNlcy5iaW5jb3VudCgpLmNwdSgpLm51bXB5KCkKICAgICAgICB0b2tlbnNfcGVyX2V4cGVydCA9IGNvdW50cy5jdW1zdW0oKQogICAgICAgIG51bV9wZXJfdG9rID0gc2VsZi5jb25maWdbIm5fZXhwZXJ0c19wZXJfdG9rZW4iXQogICAgICAgIHRva2VuX2lkeHMgPSBpZHhzIC8vIG51bV9wZXJfdG9rCiAgICAgICAgZm9yIGV4cGVydF9pZCwgZW5kX2lkeCBpbiBlbnVtZXJhdGUodG9rZW5zX3Blcl9leHBlcnQpOgogICAgICAgICAgICBzdGFydF9pZHggPSAwIGlmIGV4cGVydF9pZCA9PSAwIGVsc2UgdG9rZW5zX3Blcl9leHBlcnRbZXhwZXJ0X2lkIC0gMV0KICAgICAgICAgICAgaWYgc3RhcnRfaWR4ID09IGVuZF9pZHg6CiAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgZXhwZXJ0ID0gc2VsZi5leHBlcnRzW2V4cGVydF9pZF0KICAgICAgICAgICAgZXhwX3Rva2VuX2lkeHMgPSB0b2tlbl9pZHhzW3N0YXJ0X2lkeDplbmRfaWR4XQogICAgICAgICAgICBleHBlcnRfdG9rZW5zID0geFtleHBfdG9rZW5faWR4c10KICAgICAgICAgICAgZXhwZXJ0X291dCA9IGV4cGVydChleHBlcnRfdG9rZW5zKQogICAgICAgICAgICBleHBlcnRfb3V0Lm11bF8oZmxhdF9leHBlcnRfd2VpZ2h0c1tpZHhzW3N0YXJ0X2lkeDplbmRfaWR4XV0pCiAgICAgICAgICAgIGV4cGVydF9jYWNoZS5zY2F0dGVyX3JlZHVjZV8oCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgZXhwX3Rva2VuX2lkeHMudmlldygtMSwgMSkucmVwZWF0KDEsIHguc2hhcGVbLTFdKSwKICAgICAgICAgICAgICAgIGV4cGVydF9vdXQsCiAgICAgICAgICAgICAgICByZWR1Y2U9InN1bSIsCiAgICAgICAgICAgICkKCiAgICAgICAgcmV0dXJuIGV4cGVydF9jYWNoZQogICAgIiIiCgoKZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6CiAgICAiIiIKICAgIFN1Ym1pc3Npb24gdGVtcGxhdGUgZm9yIERlZXBTZWVrLXN0eWxlIE1peHR1cmUgb2YgRXhwZXJ0cyB1c2luZyBQeVRvcmNoLgoKICAgIEFyZ3M6CiAgICAgICAgZGF0YTogVHVwbGUgb2YgKGlucHV0OiB0b3JjaC5UZW5zb3IsIHdlaWdodHM6IERpY3Rbc3RyLCB0b3JjaC5UZW5zb3JdLCBjb25maWc6IERpY3QpCiAgICAgICAgICAgIC0gaW5wdXQ6IElucHV0IHRlbnNvciBvZiBzaGFwZSBbYmF0Y2hfc2l6ZSwgc2VxX2xlbiwgaGlkZGVuX3NpemVdCiAgICAgICAgICAgIC0gd2VpZ2h0czogRGljdGlvbmFyeSBjb250YWluaW5nIG1vZGVsIHdlaWdodHMKICAgICAgICAgICAgLSBjb25maWc6IERpY3Rpb25hcnkgY29udGFpbmluZyBtb2RlbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKCiAgICBSZXR1cm5zOgogICAgICAgIFR1cGxlIGNvbnRhaW5pbmc6CiAgICAgICAgICAgIC0gb3V0cHV0OiBQcm9jZXNzZWQgdGVuc29yIFtiYXRjaF9zaXplLCBzZXFfbGVuLCBkX21vZGVsXQogICAgICAgICAgICAtIGF1eF9kYXRhOiBEaWN0aW9uYXJ5IHdpdGggYXV4aWxpYXJ5IGRhdGEKICAgICIiIgogICAgaW5wdXRfdGVuc29yLCB3ZWlnaHRzLCBjb25maWcgPSBkYXRhCiAgICBudW1fZXhwZXJ0cyA9IGNvbmZpZ1sibl9yb3V0ZWRfZXhwZXJ0cyJdCiAgICBtb2UgPSBNb0UoY29uZmlnKQoKICAgICMgRmlsbCBpbiB0aGUgZ2l2ZW4gd2VpZ2h0cyBvZiB0aGUgbW9kZWwKICAgIG1vZS5nYXRpbmdfbmV0d29yay5XX2cud2VpZ2h0ID0gbm4uUGFyYW1ldGVyKHdlaWdodHNbInJvdXRlci53ZWlnaHQiXSkKCiAgICBmb3IgaSBpbiByYW5nZShudW1fZXhwZXJ0cyk6CiAgICAgICAgZ2F0ZV9wcm9qX3dlaWdodCA9IHdlaWdodHNbZiJleHBlcnRzLntpfS4wLndlaWdodCJdCiAgICAgICAgdXBfcHJval93ZWlnaHQgPSB3ZWlnaHRzW2YiZXhwZXJ0cy57aX0uMS53ZWlnaHQiXQogICAgICAgIGRvd25fcHJval93ZWlnaHQgPSB3ZWlnaHRzW2YiZXhwZXJ0cy57aX0uMi53ZWlnaHQiXQoKICAgICAgICAjIFRyYW5zcG9zZSB3ZWlnaHRzIHRvIG1hdGNoIGV4cGVjdGVkIHNoYXBlIGZvciBubi5MaW5lYXIKICAgICAgICBtb2UuZXhwZXJ0c1tpXS5XX2dhdGUud2VpZ2h0ID0gbm4uUGFyYW1ldGVyKGdhdGVfcHJval93ZWlnaHQpCiAgICAgICAgbW9lLmV4cGVydHNbaV0uV191cC53ZWlnaHQgPSBubi5QYXJhbWV0ZXIodXBfcHJval93ZWlnaHQpCiAgICAgICAgbW9lLmV4cGVydHNbaV0uV19kb3duLndlaWdodCA9IG5uLlBhcmFtZXRlcihkb3duX3Byb2pfd2VpZ2h0KQoKICAgIG1vZS5zaGFyZWRfZXhwZXJ0LldfZ2F0ZS53ZWlnaHQgPSBubi5QYXJhbWV0ZXIoCiAgICAgICAgd2VpZ2h0c1sic2hhcmVkX2V4cGVydHMuMC53ZWlnaHQiXS50KCkKICAgICkKICAgIG1vZS5zaGFyZWRfZXhwZXJ0LldfdXAud2VpZ2h0ID0gbm4uUGFyYW1ldGVyKHdlaWdodHNbInNoYXJlZF9leHBlcnRzLjEud2VpZ2h0Il0udCgpKQogICAgbW9lLnNoYXJlZF9leHBlcnQuV19kb3duLndlaWdodCA9IG5uLlBhcmFtZXRlcigKICAgICAgICB3ZWlnaHRzWyJzaGFyZWRfZXhwZXJ0cy4yLndlaWdodCJdLnQoKQogICAgKQoKICAgICMgUnVuIHRoZSBtb2RlbAogICAgb3V0cHV0ID0gbW9lKGlucHV0X3RlbnNvcikKCiAgICByZXR1cm4gb3V0cHV0Cg==No newline at end of file
Best evidence level for this revision: reported
JSON