submission 30992
KernelBot user 266 · 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.
mla_finnal_submission.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-mla-decode-30992?include=source"interfacepython
Compatibility
measured onAMD Instinct MI300X
declared hardwareAMD Instinct MI300X
architecturesgfx942
dtypesbf16
Benchmark evidence
1 measurement across 1 GPU, fastest first.
Operation / workload
Hardware
Latency
Rank
Observed
Reported · How evidence levels are derived →
Source and license
sourceavailable
revision digestsha256:38d6d0be5ffcde42f88a1a93c3ab423e41f0b11848f19a9d64849f9ea4817515
license declaredunknown
license concludedunknown
imported2026-08-15
Kernel source
mla_finnal_submission.py1 lines
ZnJvbSBwaXAuX2ludGVybmFsIGltcG9ydCBtYWluIGFzIHBpcF9tYWluCnBpcF9tYWluKFsiaW5zdGFsbCIsInRpbGVsYW5nLXJvY20iXSkKCmltcG9ydCBtYXRoCmZyb20gZGF0YWNsYXNzZXMgaW1wb3J0IGRhdGFjbGFzcwppbXBvcnQgdG9yY2gKZnJvbSB0b3JjaCBpbXBvcnQgbm4KaW1wb3J0IHRvcmNoLm5uLmZ1bmN0aW9uYWwgYXMgRgpmcm9tIHRhc2sgaW1wb3J0IGlucHV0X3QsIG91dHB1dF90CmltcG9ydCB0aWxlbGFuZwpmcm9tIHRpbGVsYW5nLmF1dG90dW5lciBpbXBvcnQgKgppbXBvcnQgdGlsZWxhbmcubGFuZ3VhZ2UgYXMgVApmcm9tIHRvcmNoLnByb2ZpbGVyIGltcG9ydCBwcm9maWxlLCByZWNvcmRfZnVuY3Rpb24sIFByb2ZpbGVyQWN0aXZpdHkKaW1wb3J0IHRpbWUKCnRpbGVsYW5nLmNhY2hlLmNsZWFyX2NhY2hlKCkKIyB0aWxlbGFuZy5kaXNhYmxlX2NhY2hlKCkKCkJBU0VfQ09ORklHUyA9IHsKICAgIDEyODogeydibG9ja19OJzogMTYsICdibG9ja19IJzogNjQsICdudW1fc3BsaXQnOiAxLCAnbnVtX3N0YWdlcyc6IDEsICdlbmFibGVfcmFzdGVyaXphdGlvbic6IEZhbHNlfSwKICAgIDUxMjogeydibG9ja19OJzogMTYsICdibG9ja19IJzogNjQsICdudW1fc3BsaXQnOiAxLCAnbnVtX3N0YWdlcyc6IDAsICdlbmFibGVfcmFzdGVyaXphdGlvbic6IEZhbHNlfSwKICAgIDEwMjQ6IHsnYmxvY2tfTic6IDE2LCAnYmxvY2tfSCc6IDY0LCAnbnVtX3NwbGl0JzogMSwgJ251bV9zdGFnZXMnOiAwLCAnZW5hYmxlX3Jhc3Rlcml6YXRpb24nOiBGYWxzZX0sCiAgICAyMDQ4OiB7J2Jsb2NrX04nOiAxNiwgJ2Jsb2NrX0gnOiA2NCwgJ251bV9zcGxpdCc6IDEsICdudW1fc3RhZ2VzJzogMCwgJ2VuYWJsZV9yYXN0ZXJpemF0aW9uJzogRmFsc2V9LAogICAgNDA5NjogeydibG9ja19OJzogMTYsICdibG9ja19IJzogNjQsICdudW1fc3BsaXQnOiAxLCAnbnVtX3N0YWdlcyc6IDAsICdlbmFibGVfcmFzdGVyaXphdGlvbic6IEZhbHNlfSwKICAgIDYxNDQ6IHsnYmxvY2tfTic6IDE2LCAnYmxvY2tfSCc6IDY0LCAnbnVtX3NwbGl0JzogMiwgJ251bV9zdGFnZXMnOiAwLCAnZW5hYmxlX3Jhc3Rlcml6YXRpb24nOiBGYWxzZX0KfQoKUFJFRklMTF9DT05GSUdTID0gQkFTRV9DT05GSUdTLmNvcHkoKQpjb25maWdfNDA5NiA9IEJBU0VfQ09ORklHU1s0MDk2XQpmb3IgaSBpbiByYW5nZSg0MDk3LCA0MTk3KTogICMgNDA5N+WIsDQxOTYKICAgIFBSRUZJTExfQ09ORklHU1tpXSA9IGNvbmZpZ180MDk2CgoKZGVmIGdldF9vcHRpbWFsX2tlcm5lbChiYXRjaCwgaGVhZHMsIGt2X2hlYWRfbnVtLCBzZXFsZW5fa3YsIGRpbSwgcGVfZGltKToKICAgIHVzZV9hdXRvdHVuZSA9IHNlcWxlbl9rdiA+IDYxNDQKICAgIGlmIHVzZV9hdXRvdHVuZToKICAgICAgICBwcmludChmIltBVVRPIFRVTkVdIFVzaW5nIGF1dG90dW5lIGZvciBzZXFsZW5fa3Y9e3NlcWxlbl9rdn0iKQogICAgICAgIAogICAgICAgICMg5L2/55SoIGF1dG90dW5lIOeJiOacrOeahCBrZXJuZWwKICAgICAgICBrZXJuZWwgPSBmbGFzaG1sYV9kZWNvZGVfYXV0b3R1bmUoCiAgICAgICAgICAgIGJhdGNoLAogICAgICAgICAgICBoZWFkcywKICAgICAgICAgICAga3ZfaGVhZF9udW0sCiAgICAgICAgICAgIHNlcWxlbl9rdisxLAogICAgICAgICAgICBkaW0sCiAgICAgICAgICAgIHBlX2RpbQogICAgICAgICkKICAgICAgICBiZXN0X2NvbmZpZyA9IGtlcm5lbC5jb25maWcKICAgICAgICBwcmludChmIltBVVRPIFRVTkVdIEJlc3QgY29uZmlnOiB7YmVzdF9jb25maWd9IikKICAgICAgICByZXR1cm4ga2VybmVsLCBiZXN0X2NvbmZpZwogICAgZWxzZToKICAgICAgICBwcmludChmIltOTyBBVVRPIFRVTkVdIFVzaW5nIG5vIGF1dG90dW5lIGZvciBzZXFsZW5fa3Y9e3NlcWxlbl9rdn0iKQogICAgICAgIGlmIHNlcWxlbl9rdiBpbiBQUkVGSUxMX0NPTkZJR1M6CiAgICAgICAgICAgIGJlc3RfY29uZmlnID0gUFJFRklMTF9DT05GSUdTW3NlcWxlbl9rdl0KICAgICAgICAgICAga2VybmVsID0gZmxhc2htbGFfZGVjb2RlX25vX3R1bmluZygKICAgICAgICAgICAgICAgIGJhdGNoLAogICAgICAgICAgICAgICAgaGVhZHMsCiAgICAgICAgICAgICAgICBrdl9oZWFkX251bSwKICAgICAgICAgICAgICAgIHNlcWxlbl9rdisxLAogICAgICAgICAgICAgICAgZGltLAogICAgICAgICAgICAgICAgcGVfZGltLAogICAgICAgICAgICAgICAgKipiZXN0X2NvbmZpZwogICAgICAgICAgICApCiAgICAgICAgICAgIHJldHVybiBrZXJuZWwsIGJlc3RfY29uZmlnCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIE5vbmUKCgpAdGlsZWxhbmcuaml0KG91dF9pZHg9WzZdKQpkZWYgZmxhc2htbGFfZGVjb2RlX25vX3R1bmluZyhiYXRjaCwKICAgICAgICAgICAgICAgICAgICBoZWFkcywKICAgICAgICAgICAgICAgICAgICBrdl9oZWFkX251bSwKICAgICAgICAgICAgICAgICAgICBzZXFsZW5fa3YsCiAgICAgICAgICAgICAgICAgICAgZGltLAogICAgICAgICAgICAgICAgICAgIHBlX2RpbSwKICAgICAgICAgICAgICAgICAgICBibG9ja19OLAogICAgICAgICAgICAgICAgICAgIGJsb2NrX0gsCiAgICAgICAgICAgICAgICAgICAgbnVtX3NwbGl0LAogICAgICAgICAgICAgICAgICAgIHRocmVhZHM9MjU2LAogICAgICAgICAgICAgICAgICAgIG51bV9zdGFnZXM9MiwKICAgICAgICAgICAgICAgICAgICBlbmFibGVfcmFzdGVyaXphdGlvbj1UcnVlKToKICAgICMgc2NhbGUgPSAoMS4wIC8gKGRpbSArIHBlX2RpbSkpKiowLjUgKiAxLjQ0MjY5NTA0ICAjIGxvZzIoZSkKICAgIHNjYWxlID0gKDEuMCAvICgxMjggKyA2NCkpKiowLjUgKiAxLjQ0MjY5NTA0CiAgICAjIGR0eXBlID0gImZsb2F0MTYiCiAgICBkdHlwZSA9ICJiZmxvYXQxNiIKICAgIGFjY3VtX2R0eXBlID0gImZsb2F0IgogICAga3ZfZ3JvdXBfbnVtID0gaGVhZHMgLy8ga3ZfaGVhZF9udW0KICAgIFZBTElEX0JMT0NLX0ggPSBtaW4oYmxvY2tfSCwga3ZfZ3JvdXBfbnVtKQogICAgYXNzZXJ0IGt2X2hlYWRfbnVtID09IDEsICJrdl9oZWFkX251bSBtdXN0IGJlIDEiCiAgICBrX3BhY2sgPSAxCiAgICB2ZWNfc2l6ZSA9IDQgKiBrX3BhY2sKCiAgICBAVC5tYWNybwogICAgZGVmIGZsYXNoX2F0dG4oCiAgICAgICAgICAgIFE6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIGRpbV0sIGR0eXBlKSwKICAgICAgICAgICAgUV9wZTogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgcGVfZGltXSwgZHR5cGUpLAogICAgICAgICAgICBLVjogVC5UZW5zb3IoW2JhdGNoLCBzZXFsZW5fa3YsIGt2X2hlYWRfbnVtLCBkaW1dLCBkdHlwZSksCiAgICAgICAgICAgIEtfcGU6IFQuVGVuc29yKFtiYXRjaCwgc2VxbGVuX2t2LCBrdl9oZWFkX251bSwgcGVfZGltXSwgZHR5cGUpLAogICAgICAgICAgICBPdXRwdXQ6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIGRpbV0sIGR0eXBlKSwKICAgICk6CiAgICAgICAgd2l0aCBULktlcm5lbChiYXRjaCwgaGVhZHMgLy8gbWluKGJsb2NrX0gsIGt2X2dyb3VwX251bSksIHRocmVhZHM9dGhyZWFkcykgYXMgKGJ4LCBieSk6CiAgICAgICAgICAgIFFfbG9jYWwgPSBULmFsbG9jX2ZyYWdtZW50KFtibG9ja19ILCBkaW1dLCBkdHlwZSkKICAgICAgICAgICAgUV9wZV9sb2NhbCA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0gsIHBlX2RpbV0sIGR0eXBlKQogICAgICAgICAgICBLVl9zaGFyZWQgPSBULmFsbG9jX3NoYXJlZChbYmxvY2tfTiwgZGltXSwgZHR5cGUpCiAgICAgICAgICAgIEtfcGVfc2hhcmVkID0gVC5hbGxvY19zaGFyZWQoW2Jsb2NrX04sIHBlX2RpbV0sIGR0eXBlKQogICAgICAgICAgICBhY2NfcyA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0gsIGJsb2NrX05dLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgYWNjX3NfY2FzdCA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0gsIGJsb2NrX05dLCBkdHlwZSkKICAgICAgICAgICAgYWNjX28gPSBULmFsbG9jX2ZyYWdtZW50KFtibG9ja19ILCBkaW1dLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgc2NvcmVzX21heCA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0hdLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgc2NvcmVzX21heF9wcmV2ID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSF0sIGFjY3VtX2R0eXBlKQogICAgICAgICAgICBzY29yZXNfc2NhbGUgPSBULmFsbG9jX2ZyYWdtZW50KFtibG9ja19IXSwgYWNjdW1fZHR5cGUpCiAgICAgICAgICAgIHNjb3Jlc19zdW0gPSBULmFsbG9jX2ZyYWdtZW50KFtibG9ja19IXSwgYWNjdW1fZHR5cGUpCiAgICAgICAgICAgIGxvZ3N1bSA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0hdLCBhY2N1bV9kdHlwZSkKCiAgICAgICAgICAgIGN1cl9rdl9oZWFkID0gYnkgLy8gKGt2X2dyb3VwX251bSAvLyBibG9ja19IKQogICAgICAgICAgICBULnVzZV9zd2l6emxlKDEwLCBlbmFibGU9ZW5hYmxlX3Jhc3Rlcml6YXRpb24pCgogICAgICAgICAgICBULmNvcHkoUVtieCwgYnkgKiBWQUxJRF9CTE9DS19IOihieSArIDEpICogVkFMSURfQkxPQ0tfSCwgOl0sIFFfbG9jYWwpCiAgICAgICAgICAgIFQuY29weShRX3BlW2J4LCBieSAqIFZBTElEX0JMT0NLX0g6KGJ5ICsgMSkgKiBWQUxJRF9CTE9DS19ILCA6XSwgUV9wZV9sb2NhbCkKICAgICAgICAgICAgVC5maWxsKGFjY19vLCAwKQogICAgICAgICAgICBULmZpbGwobG9nc3VtLCAwKQogICAgICAgICAgICBULmZpbGwoc2NvcmVzX21heCwgLVQuaW5maW5pdHkoYWNjdW1fZHR5cGUpKQoKICAgICAgICAgICAgbG9vcF9yYW5nZSA9IFQuY2VpbGRpdihzZXFsZW5fa3YsIGJsb2NrX04pCiAgICAgICAgICAgIGZvciBrIGluIFQuUGlwZWxpbmVkKGxvb3BfcmFuZ2UsIG51bV9zdGFnZXM9bnVtX3N0YWdlcyk6CiAgICAgICAgICAgICAgICBULmNvcHkoS1ZbYngsIGsgKiBibG9ja19OOihrICsgMSkgKiBibG9ja19OLCBjdXJfa3ZfaGVhZCwgOl0sIEtWX3NoYXJlZCwgY29hbGVzY2VkX3dpZHRoPXZlY19zaXplKQogICAgICAgICAgICAgICAgVC5jb3B5KEtfcGVbYngsIGsgKiBibG9ja19OOihrICsgMSkgKiBibG9ja19OLCBjdXJfa3ZfaGVhZCwgOl0sIEtfcGVfc2hhcmVkLCBjb2FsZXNjZWRfd2lkdGg9dmVjX3NpemUpCiAgICAgICAgICAgICAgICBULmNsZWFyKGFjY19zKQogICAgICAgICAgICAgICAgVC5nZW1tKFFfbG9jYWwsIEtWX3NoYXJlZCwgYWNjX3MsIHRyYW5zcG9zZV9CPVRydWUsIHBvbGljeT1ULkdlbW1XYXJwUG9saWN5LkZ1bGxSb3cpCiAgICAgICAgICAgICAgICBULmdlbW0oCiAgICAgICAgICAgICAgICAgICAgUV9wZV9sb2NhbCwKICAgICAgICAgICAgICAgICAgICBLX3BlX3NoYXJlZCwKICAgICAgICAgICAgICAgICAgICBhY2NfcywKICAgICAgICAgICAgICAgICAgICB0cmFuc3Bvc2VfQj1UcnVlLAogICAgICAgICAgICAgICAgICAgIHBvbGljeT1ULkdlbW1XYXJwUG9saWN5LkZ1bGxSb3cpCiAgICAgICAgICAgICAgICBULmNvcHkoc2NvcmVzX21heCwgc2NvcmVzX21heF9wcmV2KQogICAgICAgICAgICAgICAgVC5maWxsKHNjb3Jlc19tYXgsIC1ULmluZmluaXR5KGFjY3VtX2R0eXBlKSkKICAgICAgICAgICAgICAgIFQucmVkdWNlX21heChhY2Nfcywgc2NvcmVzX21heCwgZGltPTEsIGNsZWFyPUZhbHNlKQogICAgICAgICAgICAgICAgZm9yIGkgaW4gVC5QYXJhbGxlbChibG9ja19IKToKICAgICAgICAgICAgICAgICAgICBzY29yZXNfc2NhbGVbaV0gPSBULmV4cDIoc2NvcmVzX21heF9wcmV2W2ldICogc2NhbGUgLSBzY29yZXNfbWF4W2ldICogc2NhbGUpCiAgICAgICAgICAgICAgICBmb3IgaSwgaiBpbiBULlBhcmFsbGVsKGJsb2NrX0gsIGJsb2NrX04pOgogICAgICAgICAgICAgICAgICAgIGFjY19zW2ksIGpdID0gVC5leHAyKGFjY19zW2ksIGpdICogc2NhbGUgLSBzY29yZXNfbWF4W2ldICogc2NhbGUpCiAgICAgICAgICAgICAgICBULnJlZHVjZV9zdW0oYWNjX3MsIHNjb3Jlc19zdW0sIGRpbT0xKQogICAgICAgICAgICAgICAgIyBULmNvcHkoYWNjX3MsIFNfc2hhcmVkKQogICAgICAgICAgICAgICAgVC5jb3B5KGFjY19zLCBhY2Nfc19jYXN0KQogICAgICAgICAgICAgICAgZm9yIGkgaW4gVC5QYXJhbGxlbChibG9ja19IKToKICAgICAgICAgICAgICAgICAgICBsb2dzdW1baV0gPSBsb2dzdW1baV0gKiBzY29yZXNfc2NhbGVbaV0gKyBzY29yZXNfc3VtW2ldCiAgICAgICAgICAgICAgICBmb3IgaSwgaiBpbiBULlBhcmFsbGVsKGJsb2NrX0gsIGRpbSk6CiAgICAgICAgICAgICAgICAgICAgYWNjX29baSwgal0gKj0gc2NvcmVzX3NjYWxlW2ldCiAgICAgICAgICAgICAgICBULmdlbW0oYWNjX3NfY2FzdCwgS1Zfc2hhcmVkLCBhY2NfbywgcG9saWN5PVQuR2VtbVdhcnBQb2xpY3kuRnVsbFJvdykKICAgICAgICAgICAgZm9yIGksIGogaW4gVC5QYXJhbGxlbChibG9ja19ILCBkaW0pOgogICAgICAgICAgICAgICAgYWNjX29baSwgal0gLz0gbG9nc3VtW2ldCiAgICAgICAgICAgIFQuY29weShhY2NfbywgT3V0cHV0W2J4LCBieSAqIFZBTElEX0JMT0NLX0g6KGJ5ICsgMSkgKiBWQUxJRF9CTE9DS19ILCA6XSkKCiAgICBAVC5tYWNybwogICAgZGVmIGZsYXNoX2F0dG5fc3BsaXQoCiAgICAgICAgICAgIFE6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIGRpbV0sIGR0eXBlKSwKICAgICAgICAgICAgUV9wZTogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgcGVfZGltXSwgZHR5cGUpLAogICAgICAgICAgICBLVjogVC5UZW5zb3IoW2JhdGNoLCBzZXFsZW5fa3YsIGt2X2hlYWRfbnVtLCBkaW1dLCBkdHlwZSksCiAgICAgICAgICAgIEtfcGU6IFQuVGVuc29yKFtiYXRjaCwgc2VxbGVuX2t2LCBrdl9oZWFkX251bSwgcGVfZGltXSwgZHR5cGUpLAogICAgICAgICAgICBnbHNlOiBULlRlbnNvcihbYmF0Y2gsIGhlYWRzLCBudW1fc3BsaXRdLCBhY2N1bV9kdHlwZSksCiAgICAgICAgICAgIE91dHB1dF9wYXJ0aWFsOiBULlRlbnNvcihbYmF0Y2gsIGhlYWRzLCBudW1fc3BsaXQsIGRpbV0sIGFjY3VtX2R0eXBlKSwKICAgICk6CiAgICAgICAgd2l0aCBULktlcm5lbCgKICAgICAgICAgICAgICAgIGJhdGNoLCBoZWFkcyAvLyBtaW4oYmxvY2tfSCwga3ZfZ3JvdXBfbnVtKSwgbnVtX3NwbGl0LAogICAgICAgICAgICAgICAgdGhyZWFkcz10aHJlYWRzKSBhcyAoYngsIGJ5LCBieik6CiAgICAgICAgICAgIFFfbG9jYWwgPSBULmFsbG9jX2ZyYWdtZW50KFtibG9ja19ILCBkaW1dLCBkdHlwZSkKICAgICAgICAgICAgUV9wZV9sb2NhbCA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0gsIHBlX2RpbV0sIGR0eXBlKQogICAgICAgICAgICBLVl9zaGFyZWQgPSBULmFsbG9jX3NoYXJlZChbYmxvY2tfTiwgZGltXSwgZHR5cGUpCiAgICAgICAgICAgIEtfcGVfc2hhcmVkID0gVC5hbGxvY19zaGFyZWQoW2Jsb2NrX04sIHBlX2RpbV0sIGR0eXBlKQogICAgICAgICAgICBhY2NfcyA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0gsIGJsb2NrX05dLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgYWNjX3NfY2FzdCA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0gsIGJsb2NrX05dLCBkdHlwZSkKICAgICAgICAgICAgYWNjX28gPSBULmFsbG9jX2ZyYWdtZW50KFtibG9ja19ILCBkaW1dLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgc2NvcmVzX21heCA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0hdLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgc2NvcmVzX21heF9wcmV2ID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSF0sIGFjY3VtX2R0eXBlKQogICAgICAgICAgICBzY29yZXNfc2NhbGUgPSBULmFsbG9jX2ZyYWdtZW50KFtibG9ja19IXSwgYWNjdW1fZHR5cGUpCiAgICAgICAgICAgIHNjb3Jlc19zdW0gPSBULmFsbG9jX2ZyYWdtZW50KFtibG9ja19IXSwgYWNjdW1fZHR5cGUpCiAgICAgICAgICAgIGxvZ3N1bSA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0hdLCBhY2N1bV9kdHlwZSkKCiAgICAgICAgICAgIGN1cl9rdl9oZWFkID0gYnkgLy8gKGt2X2dyb3VwX251bSAvLyBibG9ja19IKQogICAgICAgICAgICBULnVzZV9zd2l6emxlKDEwLCBlbmFibGU9ZW5hYmxlX3Jhc3Rlcml6YXRpb24pCiAgICAgICAgICAgIFQuY29weShRW2J4LCBieSAqIFZBTElEX0JMT0NLX0g6KGJ5ICsgMSkgKiBWQUxJRF9CTE9DS19ILCA6XSwgUV9sb2NhbCkKICAgICAgICAgICAgVC5jb3B5KFFfcGVbYngsIGJ5ICogVkFMSURfQkxPQ0tfSDooYnkgKyAxKSAqIFZBTElEX0JMT0NLX0gsIDpdLCBRX3BlX2xvY2FsKQogICAgICAgICAgICBULmZpbGwoYWNjX28sIDApCiAgICAgICAgICAgIFQuZmlsbChsb2dzdW0sIDApCiAgICAgICAgICAgIFQuZmlsbChzY29yZXNfbWF4LCAtVC5pbmZpbml0eShhY2N1bV9kdHlwZSkpCgogICAgICAgICAgICBsb29wX3JhbmdlID0gVC5jZWlsZGl2KChzZXFsZW5fa3YgLy8gbnVtX3NwbGl0KSwgYmxvY2tfTikKICAgICAgICAgICAgZm9yIGsgaW4gVC5QaXBlbGluZWQobG9vcF9yYW5nZSwgbnVtX3N0YWdlcz1udW1fc3RhZ2VzKToKICAgICAgICAgICAgICAgIGt2X3N0YXJ0ID0gKHNlcWxlbl9rdiAvLyBudW1fc3BsaXQpICogYnogKyBrICogYmxvY2tfTgogICAgICAgICAgICAgICAga3ZfZW5kID0gKHNlcWxlbl9rdiAvLyBudW1fc3BsaXQpICogYnogKyAoayArIDEpICogYmxvY2tfTgogICAgICAgICAgICAgICAgVC5jb3B5KEtWW2J4LCBrdl9zdGFydDprdl9lbmQsIGN1cl9rdl9oZWFkLCA6XSwgS1Zfc2hhcmVkLCBjb2FsZXNjZWRfd2lkdGg9dmVjX3NpemUpCiAgICAgICAgICAgICAgICBULmNvcHkoS19wZVtieCwga3Zfc3RhcnQ6a3ZfZW5kLCBjdXJfa3ZfaGVhZCwgOl0sIEtfcGVfc2hhcmVkLCBjb2FsZXNjZWRfd2lkdGg9dmVjX3NpemUpCiAgICAgICAgICAgICAgICBULmNsZWFyKGFjY19zKQogICAgICAgICAgICAgICAgVC5nZW1tKFFfbG9jYWwsIEtWX3NoYXJlZCwgYWNjX3MsIHRyYW5zcG9zZV9CPVRydWUsIHBvbGljeT1ULkdlbW1XYXJwUG9saWN5LkZ1bGxSb3cpCiAgICAgICAgICAgICAgICBULmdlbW0oCiAgICAgICAgICAgICAgICAgICAgUV9wZV9sb2NhbCwKICAgICAgICAgICAgICAgICAgICBLX3BlX3NoYXJlZCwKICAgICAgICAgICAgICAgICAgICBhY2NfcywKICAgICAgICAgICAgICAgICAgICB0cmFuc3Bvc2VfQj1UcnVlLAogICAgICAgICAgICAgICAgICAgIHBvbGljeT1ULkdlbW1XYXJwUG9saWN5LkZ1bGxSb3cpCiAgICAgICAgICAgICAgICBULmNvcHkoc2NvcmVzX21heCwgc2NvcmVzX21heF9wcmV2KQogICAgICAgICAgICAgICAgVC5maWxsKHNjb3Jlc19tYXgsIC1ULmluZmluaXR5KGFjY3VtX2R0eXBlKSkKICAgICAgICAgICAgICAgIFQucmVkdWNlX21heChhY2Nfcywgc2NvcmVzX21heCwgZGltPTEsIGNsZWFyPUZhbHNlKQogICAgICAgICAgICAgICAgZm9yIGkgaW4gVC5QYXJhbGxlbChibG9ja19IKToKICAgICAgICAgICAgICAgICAgICBzY29yZXNfc2NhbGVbaV0gPSBULmV4cDIoc2NvcmVzX21heF9wcmV2W2ldICogc2NhbGUgLSBzY29yZXNfbWF4W2ldICogc2NhbGUpCiAgICAgICAgICAgICAgICBmb3IgaSwgaiBpbiBULlBhcmFsbGVsKGJsb2NrX0gsIGJsb2NrX04pOgogICAgICAgICAgICAgICAgICAgIGFjY19zW2ksIGpdID0gVC5leHAyKGFjY19zW2ksIGpdICogc2NhbGUgLSBzY29yZXNfbWF4W2ldICogc2NhbGUpCiAgICAgICAgICAgICAgICBULnJlZHVjZV9zdW0oYWNjX3MsIHNjb3Jlc19zdW0sIGRpbT0xKQogICAgICAgICAgICAgICAgVC5jb3B5KGFjY19zLCBhY2Nfc19jYXN0KQogICAgICAgICAgICAgICAgZm9yIGkgaW4gVC5QYXJhbGxlbChibG9ja19IKToKICAgICAgICAgICAgICAgICAgICBsb2dzdW1baV0gPSBsb2dzdW1baV0gKiBzY29yZXNfc2NhbGVbaV0gKyBzY29yZXNfc3VtW2ldCiAgICAgICAgICAgICAgICBmb3IgaSwgaiBpbiBULlBhcmFsbGVsKGJsb2NrX0gsIGRpbSk6CiAgICAgICAgICAgICAgICAgICAgYWNjX29baSwgal0gKj0gc2NvcmVzX3NjYWxlW2ldCiAgICAgICAgICAgICAgICBULmdlbW0oYWNjX3NfY2FzdCwgS1Zfc2hhcmVkLCBhY2NfbywgcG9saWN5PVQuR2VtbVdhcnBQb2xpY3kuRnVsbFJvdykKICAgICAgICAgICAgZm9yIGksIGogaW4gVC5QYXJhbGxlbChibG9ja19ILCBkaW0pOgogICAgICAgICAgICAgICAgYWNjX29baSwgal0gLz0gbG9nc3VtW2ldCiAgICAgICAgICAgIGZvciBpIGluIFQuUGFyYWxsZWwoYmxvY2tfSCk6CiAgICAgICAgICAgICAgICBsb2dzdW1baV0gPSBULmxvZzIobG9nc3VtW2ldKSArIHNjb3Jlc19tYXhbaV0gKiBzY2FsZQogICAgICAgICAgICBULmNvcHkobG9nc3VtLCBnbHNlW2J4LCBieSAqIFZBTElEX0JMT0NLX0g6KGJ5ICsgMSkgKiBWQUxJRF9CTE9DS19ILCBiel0pCiAgICAgICAgICAgIFQuY29weShhY2NfbywgT3V0cHV0X3BhcnRpYWxbYngsIGJ5ICogVkFMSURfQkxPQ0tfSDooYnkgKyAxKSAqIFZBTElEX0JMT0NLX0gsIGJ6LCA6XSkKCiAgICBAVC5tYWNybwogICAgZGVmIGNvbWJpbmUoCiAgICAgICAgICAgIGdsc2U6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIG51bV9zcGxpdF0sIGFjY3VtX2R0eXBlKSwKICAgICAgICAgICAgT3V0cHV0X3BhcnRpYWw6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIG51bV9zcGxpdCwgZGltXSwgYWNjdW1fZHR5cGUpLAogICAgICAgICAgICBPdXRwdXQ6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIGRpbV0sIGR0eXBlKSwKICAgICk6CiAgICAgICAgd2l0aCBULktlcm5lbChoZWFkcywgYmF0Y2gsIHRocmVhZHM9MTI4KSBhcyAoYnksIGJ6KToKICAgICAgICAgICAgcG9fbG9jYWwgPSBULmFsbG9jX2ZyYWdtZW50KFtkaW1dLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgb19hY2N1bV9sb2NhbCA9IFQuYWxsb2NfZnJhZ21lbnQoW2RpbV0sIGFjY3VtX2R0eXBlKQogICAgICAgICAgICBsc2VfbG9jYWxfc3BsaXQgPSBULmFsbG9jX2xvY2FsKFsxXSwgYWNjdW1fZHR5cGUpCiAgICAgICAgICAgIGxzZV9sb2dzdW1fbG9jYWwgPSBULmFsbG9jX2xvY2FsKFsxXSwgYWNjdW1fZHR5cGUpCiAgICAgICAgICAgIGxzZV9tYXhfbG9jYWwgPSBULmFsbG9jX2xvY2FsKFsxXSwgYWNjdW1fZHR5cGUpCiAgICAgICAgICAgIHNjYWxlX2xvY2FsID0gVC5hbGxvY19sb2NhbChbMV0sIGFjY3VtX2R0eXBlKQoKICAgICAgICAgICAgVC5hbm5vdGF0ZV9sYXlvdXQoewogICAgICAgICAgICAgICAgbHNlX2xvZ3N1bV9sb2NhbDogVC5GcmFnbWVudChsc2VfbG9nc3VtX2xvY2FsLnNoYXBlLCBmb3J3YXJkX3RocmVhZF9mbj1sYW1iZGEgaTogaSksCiAgICAgICAgICAgIH0pCgogICAgICAgICAgICBULmNsZWFyKGxzZV9sb2dzdW1fbG9jYWwpCiAgICAgICAgICAgIFQuY2xlYXIob19hY2N1bV9sb2NhbCkKICAgICAgICAgICAgbHNlX21heF9sb2NhbFswXSA9IC1ULmluZmluaXR5KGFjY3VtX2R0eXBlKQogICAgICAgICAgICBmb3IgayBpbiBULnNlcmlhbChudW1fc3BsaXQpOgogICAgICAgICAgICAgICAgbHNlX21heF9sb2NhbFswXSA9IFQubWF4KGxzZV9tYXhfbG9jYWxbMF0sIGdsc2VbYnosIGJ5LCBrXSkKICAgICAgICAgICAgZm9yIGsgaW4gVC5QaXBlbGluZWQobnVtX3NwbGl0LCBudW1fc3RhZ2VzPTEpOgogICAgICAgICAgICAgICAgbHNlX2xvY2FsX3NwbGl0WzBdID0gZ2xzZVtieiwgYnksIGtdCiAgICAgICAgICAgICAgICBsc2VfbG9nc3VtX2xvY2FsWzBdICs9IFQuZXhwMihsc2VfbG9jYWxfc3BsaXRbMF0gLSBsc2VfbWF4X2xvY2FsWzBdKQogICAgICAgICAgICBsc2VfbG9nc3VtX2xvY2FsWzBdID0gVC5sb2cyKGxzZV9sb2dzdW1fbG9jYWxbMF0pICsgbHNlX21heF9sb2NhbFswXQogICAgICAgICAgICBmb3IgayBpbiBULnNlcmlhbChudW1fc3BsaXQpOgogICAgICAgICAgICAgICAgZm9yIGkgaW4gVC5QYXJhbGxlbChkaW0pOgogICAgICAgICAgICAgICAgICAgIHBvX2xvY2FsW2ldID0gT3V0cHV0X3BhcnRpYWxbYnosIGJ5LCBrLCBpXQogICAgICAgICAgICAgICAgbHNlX2xvY2FsX3NwbGl0WzBdID0gZ2xzZVtieiwgYnksIGtdCiAgICAgICAgICAgICAgICBzY2FsZV9sb2NhbFswXSA9IFQuZXhwMihsc2VfbG9jYWxfc3BsaXRbMF0gLSBsc2VfbG9nc3VtX2xvY2FsWzBdKQogICAgICAgICAgICAgICAgZm9yIGkgaW4gVC5QYXJhbGxlbChkaW0pOgogICAgICAgICAgICAgICAgICAgIG9fYWNjdW1fbG9jYWxbaV0gKz0gcG9fbG9jYWxbaV0gKiBzY2FsZV9sb2NhbFswXQogICAgICAgICAgICBmb3IgaSBpbiBULlBhcmFsbGVsKGRpbSk6CiAgICAgICAgICAgICAgICBPdXRwdXRbYnosIGJ5LCBpXSA9IG9fYWNjdW1fbG9jYWxbaV0KCiAgICBAVC5wcmltX2Z1bmMKICAgIGRlZiBtYWluX3NwbGl0KAogICAgICAgICAgICBROiBULlRlbnNvcihbYmF0Y2gsIGhlYWRzLCBkaW1dLCBkdHlwZSksCiAgICAgICAgICAgIFFfcGU6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIHBlX2RpbV0sIGR0eXBlKSwKICAgICAgICAgICAgS1Y6IFQuVGVuc29yKFtiYXRjaCwgc2VxbGVuX2t2LCBrdl9oZWFkX251bSwgZGltXSwgZHR5cGUpLAogICAgICAgICAgICBLX3BlOiBULlRlbnNvcihbYmF0Y2gsIHNlcWxlbl9rdiwga3ZfaGVhZF9udW0sIHBlX2RpbV0sIGR0eXBlKSwKICAgICAgICAgICAgZ2xzZTogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgbnVtX3NwbGl0XSwgYWNjdW1fZHR5cGUpLAogICAgICAgICAgICBPdXRwdXRfcGFydGlhbDogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgbnVtX3NwbGl0LCBkaW1dLCBhY2N1bV9kdHlwZSksCiAgICAgICAgICAgIE91dHB1dDogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgZGltXSwgZHR5cGUpLAogICAgKToKICAgICAgICBmbGFzaF9hdHRuX3NwbGl0KFEsIFFfcGUsIEtWLCBLX3BlLCBnbHNlLCBPdXRwdXRfcGFydGlhbCkKICAgICAgICBjb21iaW5lKGdsc2UsIE91dHB1dF9wYXJ0aWFsLCBPdXRwdXQpCgogICAgQFQucHJpbV9mdW5jCiAgICBkZWYgbWFpbl9ub19zcGxpdCgKICAgICAgICAgICAgUTogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgZGltXSwgZHR5cGUpLAogICAgICAgICAgICBRX3BlOiBULlRlbnNvcihbYmF0Y2gsIGhlYWRzLCBwZV9kaW1dLCBkdHlwZSksCiAgICAgICAgICAgIEtWOiBULlRlbnNvcihbYmF0Y2gsIHNlcWxlbl9rdiwga3ZfaGVhZF9udW0sIGRpbV0sIGR0eXBlKSwKICAgICAgICAgICAgS19wZTogVC5UZW5zb3IoW2JhdGNoLCBzZXFsZW5fa3YsIGt2X2hlYWRfbnVtLCBwZV9kaW1dLCBkdHlwZSksCiAgICAgICAgICAgIGdsc2U6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIG51bV9zcGxpdF0sIGFjY3VtX2R0eXBlKSwKICAgICAgICAgICAgT3V0cHV0X3BhcnRpYWw6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIG51bV9zcGxpdCwgZGltXSwgYWNjdW1fZHR5cGUpLAogICAgICAgICAgICBPdXRwdXQ6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIGRpbV0sIGR0eXBlKSwKICAgICk6CiAgICAgICAgZmxhc2hfYXR0bihRLCBRX3BlLCBLViwgS19wZSwgT3V0cHV0KQoKICAgIGlmIG51bV9zcGxpdCA+IDE6CiAgICAgICAgcmV0dXJuIG1haW5fc3BsaXQKICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIG1haW5fbm9fc3BsaXQKCgpkZWYgZ2V0X2NvbmZpZ3MoKToKICAgIGltcG9ydCBpdGVydG9vbHMKICAgIGJsb2NrX04gPSBbMTYsIDMyLCA2NCwgMTI4XQogICAgYmxvY2tfSCA9IFsxNiwgMzIsIDY0LCAxMjhdCiAgICBudW1fc3BsaXQgPSBbMSwgMiwgNCwgOCwgMTZdCiAgICBudW1fc3RhZ2VzID0gWzAsIDFdCiAgICBlbmFibGVfcmFzdGVyaXphdGlvbiA9IFtGYWxzZSwgVHJ1ZV0KICAgIAogICAgIyBibG9ja19OID0gWzMyXQogICAgIyBibG9ja19IID0gWzY0XQogICAgIyBudW1fc3BsaXQgPSBbNF0KICAgICMgbnVtX3N0YWdlcyA9IFswXQogICAgIyBlbmFibGVfcmFzdGVyaXphdGlvbiA9IFtGYWxzZV0KCiAgICBfY29uZmlncyA9IGxpc3QoaXRlcnRvb2xzLnByb2R1Y3QoYmxvY2tfTiwgYmxvY2tfSCwgbnVtX3NwbGl0LCBudW1fc3RhZ2VzLCBlbmFibGVfcmFzdGVyaXphdGlvbikpCiAgICAKICAgIHJldHVybiBbewogICAgICAgICJibG9ja19OIjogY1swXSwKICAgICAgICAiYmxvY2tfSCI6IGNbMV0sCiAgICAgICAgIm51bV9zcGxpdCI6IGNbMl0sCiAgICAgICAgIm51bV9zdGFnZXMiOiBjWzNdLAogICAgICAgICJlbmFibGVfcmFzdGVyaXphdGlvbiI6IGNbNF0sCiAgICB9IGZvciBjIGluIF9jb25maWdzXQoKQHRpbGVsYW5nLmF1dG90dW5lKGNvbmZpZ3M9Z2V0X2NvbmZpZ3MoKSwgY2FjaGVfaW5wdXRfdGVuc29ycz1GYWxzZSkKQHRpbGVsYW5nLmppdChvdXRfaWR4PVs2XSkKZGVmIGZsYXNobWxhX2RlY29kZV9hdXRvdHVuZShiYXRjaCwKICAgICAgICAgICAgICAgICAgICBoZWFkcywKICAgICAgICAgICAgICAgICAgICBrdl9oZWFkX251bSwKICAgICAgICAgICAgICAgICAgICBzZXFsZW5fa3YsCiAgICAgICAgICAgICAgICAgICAgZGltLAogICAgICAgICAgICAgICAgICAgIHBlX2RpbSwKICAgICAgICAgICAgICAgICAgICBibG9ja19OLAogICAgICAgICAgICAgICAgICAgIGJsb2NrX0gsCiAgICAgICAgICAgICAgICAgICAgbnVtX3NwbGl0LAogICAgICAgICAgICAgICAgICAgIHRocmVhZHM9MjU2LAogICAgICAgICAgICAgICAgICAgIG51bV9zdGFnZXM9MiwKICAgICAgICAgICAgICAgICAgICBlbmFibGVfcmFzdGVyaXphdGlvbj1UcnVlKToKICAgICMgc2NhbGUgPSAoMS4wIC8gKGRpbSArIHBlX2RpbSkpKiowLjUgKiAxLjQ0MjY5NTA0ICAjIGxvZzIoZSkKICAgIHNjYWxlID0gKDEuMCAvICgxMjggKyA2NCkpKiowLjUgKiAxLjQ0MjY5NTA0CiAgICAjIGR0eXBlID0gImZsb2F0MTYiCiAgICBkdHlwZSA9ICJiZmxvYXQxNiIKICAgIGFjY3VtX2R0eXBlID0gImZsb2F0IgogICAga3ZfZ3JvdXBfbnVtID0gaGVhZHMgLy8ga3ZfaGVhZF9udW0KICAgIFZBTElEX0JMT0NLX0ggPSBtaW4oYmxvY2tfSCwga3ZfZ3JvdXBfbnVtKQogICAgYXNzZXJ0IGt2X2hlYWRfbnVtID09IDEsICJrdl9oZWFkX251bSBtdXN0IGJlIDEiCiAgICBrX3BhY2sgPSAxCiAgICB2ZWNfc2l6ZSA9IDQgKiBrX3BhY2sKCiAgICBAVC5tYWNybwogICAgZGVmIGZsYXNoX2F0dG4oCiAgICAgICAgICAgIFE6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIGRpbV0sIGR0eXBlKSwKICAgICAgICAgICAgUV9wZTogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgcGVfZGltXSwgZHR5cGUpLAogICAgICAgICAgICBLVjogVC5UZW5zb3IoW2JhdGNoLCBzZXFsZW5fa3YsIGt2X2hlYWRfbnVtLCBkaW1dLCBkdHlwZSksCiAgICAgICAgICAgIEtfcGU6IFQuVGVuc29yKFtiYXRjaCwgc2VxbGVuX2t2LCBrdl9oZWFkX251bSwgcGVfZGltXSwgZHR5cGUpLAogICAgICAgICAgICBPdXRwdXQ6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIGRpbV0sIGR0eXBlKSwKICAgICk6CiAgICAgICAgd2l0aCBULktlcm5lbChiYXRjaCwgaGVhZHMgLy8gbWluKGJsb2NrX0gsIGt2X2dyb3VwX251bSksIHRocmVhZHM9dGhyZWFkcykgYXMgKGJ4LCBieSk6CiAgICAgICAgICAgIFFfbG9jYWwgPSBULmFsbG9jX2ZyYWdtZW50KFtibG9ja19ILCBkaW1dLCBkdHlwZSkKICAgICAgICAgICAgUV9wZV9sb2NhbCA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0gsIHBlX2RpbV0sIGR0eXBlKQogICAgICAgICAgICBLVl9zaGFyZWQgPSBULmFsbG9jX3NoYXJlZChbYmxvY2tfTiwgZGltXSwgZHR5cGUpCiAgICAgICAgICAgIEtfcGVfc2hhcmVkID0gVC5hbGxvY19zaGFyZWQoW2Jsb2NrX04sIHBlX2RpbV0sIGR0eXBlKQogICAgICAgICAgICBhY2NfcyA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0gsIGJsb2NrX05dLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgYWNjX3NfY2FzdCA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0gsIGJsb2NrX05dLCBkdHlwZSkKICAgICAgICAgICAgYWNjX28gPSBULmFsbG9jX2ZyYWdtZW50KFtibG9ja19ILCBkaW1dLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgc2NvcmVzX21heCA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0hdLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgc2NvcmVzX21heF9wcmV2ID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSF0sIGFjY3VtX2R0eXBlKQogICAgICAgICAgICBzY29yZXNfc2NhbGUgPSBULmFsbG9jX2ZyYWdtZW50KFtibG9ja19IXSwgYWNjdW1fZHR5cGUpCiAgICAgICAgICAgIHNjb3Jlc19zdW0gPSBULmFsbG9jX2ZyYWdtZW50KFtibG9ja19IXSwgYWNjdW1fZHR5cGUpCiAgICAgICAgICAgIGxvZ3N1bSA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0hdLCBhY2N1bV9kdHlwZSkKCiAgICAgICAgICAgIGN1cl9rdl9oZWFkID0gYnkgLy8gKGt2X2dyb3VwX251bSAvLyBibG9ja19IKQogICAgICAgICAgICBULnVzZV9zd2l6emxlKDEwLCBlbmFibGU9ZW5hYmxlX3Jhc3Rlcml6YXRpb24pCgogICAgICAgICAgICBULmNvcHkoUVtieCwgYnkgKiBWQUxJRF9CTE9DS19IOihieSArIDEpICogVkFMSURfQkxPQ0tfSCwgOl0sIFFfbG9jYWwpCiAgICAgICAgICAgIFQuY29weShRX3BlW2J4LCBieSAqIFZBTElEX0JMT0NLX0g6KGJ5ICsgMSkgKiBWQUxJRF9CTE9DS19ILCA6XSwgUV9wZV9sb2NhbCkKICAgICAgICAgICAgVC5maWxsKGFjY19vLCAwKQogICAgICAgICAgICBULmZpbGwobG9nc3VtLCAwKQogICAgICAgICAgICBULmZpbGwoc2NvcmVzX21heCwgLVQuaW5maW5pdHkoYWNjdW1fZHR5cGUpKQoKICAgICAgICAgICAgbG9vcF9yYW5nZSA9IFQuY2VpbGRpdihzZXFsZW5fa3YsIGJsb2NrX04pCiAgICAgICAgICAgIGZvciBrIGluIFQuUGlwZWxpbmVkKGxvb3BfcmFuZ2UsIG51bV9zdGFnZXM9bnVtX3N0YWdlcyk6CiAgICAgICAgICAgICAgICBULmNvcHkoS1ZbYngsIGsgKiBibG9ja19OOihrICsgMSkgKiBibG9ja19OLCBjdXJfa3ZfaGVhZCwgOl0sIEtWX3NoYXJlZCwgY29hbGVzY2VkX3dpZHRoPXZlY19zaXplKQogICAgICAgICAgICAgICAgVC5jb3B5KEtfcGVbYngsIGsgKiBibG9ja19OOihrICsgMSkgKiBibG9ja19OLCBjdXJfa3ZfaGVhZCwgOl0sIEtfcGVfc2hhcmVkLCBjb2FsZXNjZWRfd2lkdGg9dmVjX3NpemUpCiAgICAgICAgICAgICAgICBULmNsZWFyKGFjY19zKQogICAgICAgICAgICAgICAgVC5nZW1tKFFfbG9jYWwsIEtWX3NoYXJlZCwgYWNjX3MsIHRyYW5zcG9zZV9CPVRydWUsIHBvbGljeT1ULkdlbW1XYXJwUG9saWN5LkZ1bGxSb3cpCiAgICAgICAgICAgICAgICBULmdlbW0oCiAgICAgICAgICAgICAgICAgICAgUV9wZV9sb2NhbCwKICAgICAgICAgICAgICAgICAgICBLX3BlX3NoYXJlZCwKICAgICAgICAgICAgICAgICAgICBhY2NfcywKICAgICAgICAgICAgICAgICAgICB0cmFuc3Bvc2VfQj1UcnVlLAogICAgICAgICAgICAgICAgICAgIHBvbGljeT1ULkdlbW1XYXJwUG9saWN5LkZ1bGxSb3cpCiAgICAgICAgICAgICAgICBULmNvcHkoc2NvcmVzX21heCwgc2NvcmVzX21heF9wcmV2KQogICAgICAgICAgICAgICAgVC5maWxsKHNjb3Jlc19tYXgsIC1ULmluZmluaXR5KGFjY3VtX2R0eXBlKSkKICAgICAgICAgICAgICAgIFQucmVkdWNlX21heChhY2Nfcywgc2NvcmVzX21heCwgZGltPTEsIGNsZWFyPUZhbHNlKQogICAgICAgICAgICAgICAgZm9yIGkgaW4gVC5QYXJhbGxlbChibG9ja19IKToKICAgICAgICAgICAgICAgICAgICBzY29yZXNfc2NhbGVbaV0gPSBULmV4cDIoc2NvcmVzX21heF9wcmV2W2ldICogc2NhbGUgLSBzY29yZXNfbWF4W2ldICogc2NhbGUpCiAgICAgICAgICAgICAgICBmb3IgaSwgaiBpbiBULlBhcmFsbGVsKGJsb2NrX0gsIGJsb2NrX04pOgogICAgICAgICAgICAgICAgICAgIGFjY19zW2ksIGpdID0gVC5leHAyKGFjY19zW2ksIGpdICogc2NhbGUgLSBzY29yZXNfbWF4W2ldICogc2NhbGUpCiAgICAgICAgICAgICAgICBULnJlZHVjZV9zdW0oYWNjX3MsIHNjb3Jlc19zdW0sIGRpbT0xKQogICAgICAgICAgICAgICAgIyBULmNvcHkoYWNjX3MsIFNfc2hhcmVkKQogICAgICAgICAgICAgICAgVC5jb3B5KGFjY19zLCBhY2Nfc19jYXN0KQogICAgICAgICAgICAgICAgZm9yIGkgaW4gVC5QYXJhbGxlbChibG9ja19IKToKICAgICAgICAgICAgICAgICAgICBsb2dzdW1baV0gPSBsb2dzdW1baV0gKiBzY29yZXNfc2NhbGVbaV0gKyBzY29yZXNfc3VtW2ldCiAgICAgICAgICAgICAgICBmb3IgaSwgaiBpbiBULlBhcmFsbGVsKGJsb2NrX0gsIGRpbSk6CiAgICAgICAgICAgICAgICAgICAgYWNjX29baSwgal0gKj0gc2NvcmVzX3NjYWxlW2ldCiAgICAgICAgICAgICAgICBULmdlbW0oYWNjX3NfY2FzdCwgS1Zfc2hhcmVkLCBhY2NfbywgcG9saWN5PVQuR2VtbVdhcnBQb2xpY3kuRnVsbFJvdykKICAgICAgICAgICAgZm9yIGksIGogaW4gVC5QYXJhbGxlbChibG9ja19ILCBkaW0pOgogICAgICAgICAgICAgICAgYWNjX29baSwgal0gLz0gbG9nc3VtW2ldCiAgICAgICAgICAgIFQuY29weShhY2NfbywgT3V0cHV0W2J4LCBieSAqIFZBTElEX0JMT0NLX0g6KGJ5ICsgMSkgKiBWQUxJRF9CTE9DS19ILCA6XSkKCiAgICBAVC5tYWNybwogICAgZGVmIGZsYXNoX2F0dG5fc3BsaXQoCiAgICAgICAgICAgIFE6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIGRpbV0sIGR0eXBlKSwKICAgICAgICAgICAgUV9wZTogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgcGVfZGltXSwgZHR5cGUpLAogICAgICAgICAgICBLVjogVC5UZW5zb3IoW2JhdGNoLCBzZXFsZW5fa3YsIGt2X2hlYWRfbnVtLCBkaW1dLCBkdHlwZSksCiAgICAgICAgICAgIEtfcGU6IFQuVGVuc29yKFtiYXRjaCwgc2VxbGVuX2t2LCBrdl9oZWFkX251bSwgcGVfZGltXSwgZHR5cGUpLAogICAgICAgICAgICBnbHNlOiBULlRlbnNvcihbYmF0Y2gsIGhlYWRzLCBudW1fc3BsaXRdLCBhY2N1bV9kdHlwZSksCiAgICAgICAgICAgIE91dHB1dF9wYXJ0aWFsOiBULlRlbnNvcihbYmF0Y2gsIGhlYWRzLCBudW1fc3BsaXQsIGRpbV0sIGFjY3VtX2R0eXBlKSwKICAgICk6CiAgICAgICAgd2l0aCBULktlcm5lbCgKICAgICAgICAgICAgICAgIGJhdGNoLCBoZWFkcyAvLyBtaW4oYmxvY2tfSCwga3ZfZ3JvdXBfbnVtKSwgbnVtX3NwbGl0LAogICAgICAgICAgICAgICAgdGhyZWFkcz10aHJlYWRzKSBhcyAoYngsIGJ5LCBieik6CiAgICAgICAgICAgIFFfbG9jYWwgPSBULmFsbG9jX2ZyYWdtZW50KFtibG9ja19ILCBkaW1dLCBkdHlwZSkKICAgICAgICAgICAgUV9wZV9sb2NhbCA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0gsIHBlX2RpbV0sIGR0eXBlKQogICAgICAgICAgICBLVl9zaGFyZWQgPSBULmFsbG9jX3NoYXJlZChbYmxvY2tfTiwgZGltXSwgZHR5cGUpCiAgICAgICAgICAgIEtfcGVfc2hhcmVkID0gVC5hbGxvY19zaGFyZWQoW2Jsb2NrX04sIHBlX2RpbV0sIGR0eXBlKQogICAgICAgICAgICBhY2NfcyA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0gsIGJsb2NrX05dLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgYWNjX3NfY2FzdCA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0gsIGJsb2NrX05dLCBkdHlwZSkKICAgICAgICAgICAgYWNjX28gPSBULmFsbG9jX2ZyYWdtZW50KFtibG9ja19ILCBkaW1dLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgc2NvcmVzX21heCA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0hdLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgc2NvcmVzX21heF9wcmV2ID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSF0sIGFjY3VtX2R0eXBlKQogICAgICAgICAgICBzY29yZXNfc2NhbGUgPSBULmFsbG9jX2ZyYWdtZW50KFtibG9ja19IXSwgYWNjdW1fZHR5cGUpCiAgICAgICAgICAgIHNjb3Jlc19zdW0gPSBULmFsbG9jX2ZyYWdtZW50KFtibG9ja19IXSwgYWNjdW1fZHR5cGUpCiAgICAgICAgICAgIGxvZ3N1bSA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0hdLCBhY2N1bV9kdHlwZSkKCiAgICAgICAgICAgIGN1cl9rdl9oZWFkID0gYnkgLy8gKGt2X2dyb3VwX251bSAvLyBibG9ja19IKQogICAgICAgICAgICBULnVzZV9zd2l6emxlKDEwLCBlbmFibGU9ZW5hYmxlX3Jhc3Rlcml6YXRpb24pCiAgICAgICAgICAgIFQuY29weShRW2J4LCBieSAqIFZBTElEX0JMT0NLX0g6KGJ5ICsgMSkgKiBWQUxJRF9CTE9DS19ILCA6XSwgUV9sb2NhbCkKICAgICAgICAgICAgVC5jb3B5KFFfcGVbYngsIGJ5ICogVkFMSURfQkxPQ0tfSDooYnkgKyAxKSAqIFZBTElEX0JMT0NLX0gsIDpdLCBRX3BlX2xvY2FsKQogICAgICAgICAgICBULmZpbGwoYWNjX28sIDApCiAgICAgICAgICAgIFQuZmlsbChsb2dzdW0sIDApCiAgICAgICAgICAgIFQuZmlsbChzY29yZXNfbWF4LCAtVC5pbmZpbml0eShhY2N1bV9kdHlwZSkpCgogICAgICAgICAgICBsb29wX3JhbmdlID0gVC5jZWlsZGl2KChzZXFsZW5fa3YgLy8gbnVtX3NwbGl0KSwgYmxvY2tfTikKICAgICAgICAgICAgZm9yIGsgaW4gVC5QaXBlbGluZWQobG9vcF9yYW5nZSwgbnVtX3N0YWdlcz1udW1fc3RhZ2VzKToKICAgICAgICAgICAgICAgIGt2X3N0YXJ0ID0gKHNlcWxlbl9rdiAvLyBudW1fc3BsaXQpICogYnogKyBrICogYmxvY2tfTgogICAgICAgICAgICAgICAga3ZfZW5kID0gKHNlcWxlbl9rdiAvLyBudW1fc3BsaXQpICogYnogKyAoayArIDEpICogYmxvY2tfTgogICAgICAgICAgICAgICAgVC5jb3B5KEtWW2J4LCBrdl9zdGFydDprdl9lbmQsIGN1cl9rdl9oZWFkLCA6XSwgS1Zfc2hhcmVkLCBjb2FsZXNjZWRfd2lkdGg9dmVjX3NpemUpCiAgICAgICAgICAgICAgICBULmNvcHkoS19wZVtieCwga3Zfc3RhcnQ6a3ZfZW5kLCBjdXJfa3ZfaGVhZCwgOl0sIEtfcGVfc2hhcmVkLCBjb2FsZXNjZWRfd2lkdGg9dmVjX3NpemUpCiAgICAgICAgICAgICAgICBULmNsZWFyKGFjY19zKQogICAgICAgICAgICAgICAgVC5nZW1tKFFfbG9jYWwsIEtWX3NoYXJlZCwgYWNjX3MsIHRyYW5zcG9zZV9CPVRydWUsIHBvbGljeT1ULkdlbW1XYXJwUG9saWN5LkZ1bGxSb3cpCiAgICAgICAgICAgICAgICBULmdlbW0oCiAgICAgICAgICAgICAgICAgICAgUV9wZV9sb2NhbCwKICAgICAgICAgICAgICAgICAgICBLX3BlX3NoYXJlZCwKICAgICAgICAgICAgICAgICAgICBhY2NfcywKICAgICAgICAgICAgICAgICAgICB0cmFuc3Bvc2VfQj1UcnVlLAogICAgICAgICAgICAgICAgICAgIHBvbGljeT1ULkdlbW1XYXJwUG9saWN5LkZ1bGxSb3cpCiAgICAgICAgICAgICAgICBULmNvcHkoc2NvcmVzX21heCwgc2NvcmVzX21heF9wcmV2KQogICAgICAgICAgICAgICAgVC5maWxsKHNjb3Jlc19tYXgsIC1ULmluZmluaXR5KGFjY3VtX2R0eXBlKSkKICAgICAgICAgICAgICAgIFQucmVkdWNlX21heChhY2Nfcywgc2NvcmVzX21heCwgZGltPTEsIGNsZWFyPUZhbHNlKQogICAgICAgICAgICAgICAgZm9yIGkgaW4gVC5QYXJhbGxlbChibG9ja19IKToKICAgICAgICAgICAgICAgICAgICBzY29yZXNfc2NhbGVbaV0gPSBULmV4cDIoc2NvcmVzX21heF9wcmV2W2ldICogc2NhbGUgLSBzY29yZXNfbWF4W2ldICogc2NhbGUpCiAgICAgICAgICAgICAgICBmb3IgaSwgaiBpbiBULlBhcmFsbGVsKGJsb2NrX0gsIGJsb2NrX04pOgogICAgICAgICAgICAgICAgICAgIGFjY19zW2ksIGpdID0gVC5leHAyKGFjY19zW2ksIGpdICogc2NhbGUgLSBzY29yZXNfbWF4W2ldICogc2NhbGUpCiAgICAgICAgICAgICAgICBULnJlZHVjZV9zdW0oYWNjX3MsIHNjb3Jlc19zdW0sIGRpbT0xKQogICAgICAgICAgICAgICAgVC5jb3B5KGFjY19zLCBhY2Nfc19jYXN0KQogICAgICAgICAgICAgICAgZm9yIGkgaW4gVC5QYXJhbGxlbChibG9ja19IKToKICAgICAgICAgICAgICAgICAgICBsb2dzdW1baV0gPSBsb2dzdW1baV0gKiBzY29yZXNfc2NhbGVbaV0gKyBzY29yZXNfc3VtW2ldCiAgICAgICAgICAgICAgICBmb3IgaSwgaiBpbiBULlBhcmFsbGVsKGJsb2NrX0gsIGRpbSk6CiAgICAgICAgICAgICAgICAgICAgYWNjX29baSwgal0gKj0gc2NvcmVzX3NjYWxlW2ldCiAgICAgICAgICAgICAgICBULmdlbW0oYWNjX3NfY2FzdCwgS1Zfc2hhcmVkLCBhY2NfbywgcG9saWN5PVQuR2VtbVdhcnBQb2xpY3kuRnVsbFJvdykKICAgICAgICAgICAgZm9yIGksIGogaW4gVC5QYXJhbGxlbChibG9ja19ILCBkaW0pOgogICAgICAgICAgICAgICAgYWNjX29baSwgal0gLz0gbG9nc3VtW2ldCiAgICAgICAgICAgIGZvciBpIGluIFQuUGFyYWxsZWwoYmxvY2tfSCk6CiAgICAgICAgICAgICAgICBsb2dzdW1baV0gPSBULmxvZzIobG9nc3VtW2ldKSArIHNjb3Jlc19tYXhbaV0gKiBzY2FsZQogICAgICAgICAgICBULmNvcHkobG9nc3VtLCBnbHNlW2J4LCBieSAqIFZBTElEX0JMT0NLX0g6KGJ5ICsgMSkgKiBWQUxJRF9CTE9DS19ILCBiel0pCiAgICAgICAgICAgIFQuY29weShhY2NfbywgT3V0cHV0X3BhcnRpYWxbYngsIGJ5ICogVkFMSURfQkxPQ0tfSDooYnkgKyAxKSAqIFZBTElEX0JMT0NLX0gsIGJ6LCA6XSkKCiAgICBAVC5tYWNybwogICAgZGVmIGNvbWJpbmUoCiAgICAgICAgICAgIGdsc2U6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIG51bV9zcGxpdF0sIGFjY3VtX2R0eXBlKSwKICAgICAgICAgICAgT3V0cHV0X3BhcnRpYWw6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIG51bV9zcGxpdCwgZGltXSwgYWNjdW1fZHR5cGUpLAogICAgICAgICAgICBPdXRwdXQ6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIGRpbV0sIGR0eXBlKSwKICAgICk6CiAgICAgICAgd2l0aCBULktlcm5lbChoZWFkcywgYmF0Y2gsIHRocmVhZHM9MTI4KSBhcyAoYnksIGJ6KToKICAgICAgICAgICAgcG9fbG9jYWwgPSBULmFsbG9jX2ZyYWdtZW50KFtkaW1dLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgb19hY2N1bV9sb2NhbCA9IFQuYWxsb2NfZnJhZ21lbnQoW2RpbV0sIGFjY3VtX2R0eXBlKQogICAgICAgICAgICBsc2VfbG9jYWxfc3BsaXQgPSBULmFsbG9jX2xvY2FsKFsxXSwgYWNjdW1fZHR5cGUpCiAgICAgICAgICAgIGxzZV9sb2dzdW1fbG9jYWwgPSBULmFsbG9jX2xvY2FsKFsxXSwgYWNjdW1fZHR5cGUpCiAgICAgICAgICAgIGxzZV9tYXhfbG9jYWwgPSBULmFsbG9jX2xvY2FsKFsxXSwgYWNjdW1fZHR5cGUpCiAgICAgICAgICAgIHNjYWxlX2xvY2FsID0gVC5hbGxvY19sb2NhbChbMV0sIGFjY3VtX2R0eXBlKQoKICAgICAgICAgICAgVC5hbm5vdGF0ZV9sYXlvdXQoewogICAgICAgICAgICAgICAgbHNlX2xvZ3N1bV9sb2NhbDogVC5GcmFnbWVudChsc2VfbG9nc3VtX2xvY2FsLnNoYXBlLCBmb3J3YXJkX3RocmVhZF9mbj1sYW1iZGEgaTogaSksCiAgICAgICAgICAgIH0pCgogICAgICAgICAgICBULmNsZWFyKGxzZV9sb2dzdW1fbG9jYWwpCiAgICAgICAgICAgIFQuY2xlYXIob19hY2N1bV9sb2NhbCkKICAgICAgICAgICAgbHNlX21heF9sb2NhbFswXSA9IC1ULmluZmluaXR5KGFjY3VtX2R0eXBlKQogICAgICAgICAgICBmb3IgayBpbiBULnNlcmlhbChudW1fc3BsaXQpOgogICAgICAgICAgICAgICAgbHNlX21heF9sb2NhbFswXSA9IFQubWF4KGxzZV9tYXhfbG9jYWxbMF0sIGdsc2VbYnosIGJ5LCBrXSkKICAgICAgICAgICAgZm9yIGsgaW4gVC5QaXBlbGluZWQobnVtX3NwbGl0LCBudW1fc3RhZ2VzPTEpOgogICAgICAgICAgICAgICAgbHNlX2xvY2FsX3NwbGl0WzBdID0gZ2xzZVtieiwgYnksIGtdCiAgICAgICAgICAgICAgICBsc2VfbG9nc3VtX2xvY2FsWzBdICs9IFQuZXhwMihsc2VfbG9jYWxfc3BsaXRbMF0gLSBsc2VfbWF4X2xvY2FsWzBdKQogICAgICAgICAgICBsc2VfbG9nc3VtX2xvY2FsWzBdID0gVC5sb2cyKGxzZV9sb2dzdW1fbG9jYWxbMF0pICsgbHNlX21heF9sb2NhbFswXQogICAgICAgICAgICBmb3IgayBpbiBULnNlcmlhbChudW1fc3BsaXQpOgogICAgICAgICAgICAgICAgZm9yIGkgaW4gVC5QYXJhbGxlbChkaW0pOgogICAgICAgICAgICAgICAgICAgIHBvX2xvY2FsW2ldID0gT3V0cHV0X3BhcnRpYWxbYnosIGJ5LCBrLCBpXQogICAgICAgICAgICAgICAgbHNlX2xvY2FsX3NwbGl0WzBdID0gZ2xzZVtieiwgYnksIGtdCiAgICAgICAgICAgICAgICBzY2FsZV9sb2NhbFswXSA9IFQuZXhwMihsc2VfbG9jYWxfc3BsaXRbMF0gLSBsc2VfbG9nc3VtX2xvY2FsWzBdKQogICAgICAgICAgICAgICAgZm9yIGkgaW4gVC5QYXJhbGxlbChkaW0pOgogICAgICAgICAgICAgICAgICAgIG9fYWNjdW1fbG9jYWxbaV0gKz0gcG9fbG9jYWxbaV0gKiBzY2FsZV9sb2NhbFswXQogICAgICAgICAgICBmb3IgaSBpbiBULlBhcmFsbGVsKGRpbSk6CiAgICAgICAgICAgICAgICBPdXRwdXRbYnosIGJ5LCBpXSA9IG9fYWNjdW1fbG9jYWxbaV0KCiAgICBAVC5wcmltX2Z1bmMKICAgIGRlZiBtYWluX3NwbGl0KAogICAgICAgICAgICBROiBULlRlbnNvcihbYmF0Y2gsIGhlYWRzLCBkaW1dLCBkdHlwZSksCiAgICAgICAgICAgIFFfcGU6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIHBlX2RpbV0sIGR0eXBlKSwKICAgICAgICAgICAgS1Y6IFQuVGVuc29yKFtiYXRjaCwgc2VxbGVuX2t2LCBrdl9oZWFkX251bSwgZGltXSwgZHR5cGUpLAogICAgICAgICAgICBLX3BlOiBULlRlbnNvcihbYmF0Y2gsIHNlcWxlbl9rdiwga3ZfaGVhZF9udW0sIHBlX2RpbV0sIGR0eXBlKSwKICAgICAgICAgICAgZ2xzZTogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgbnVtX3NwbGl0XSwgYWNjdW1fZHR5cGUpLAogICAgICAgICAgICBPdXRwdXRfcGFydGlhbDogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgbnVtX3NwbGl0LCBkaW1dLCBhY2N1bV9kdHlwZSksCiAgICAgICAgICAgIE91dHB1dDogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgZGltXSwgZHR5cGUpLAogICAgKToKICAgICAgICBmbGFzaF9hdHRuX3NwbGl0KFEsIFFfcGUsIEtWLCBLX3BlLCBnbHNlLCBPdXRwdXRfcGFydGlhbCkKICAgICAgICBjb21iaW5lKGdsc2UsIE91dHB1dF9wYXJ0aWFsLCBPdXRwdXQpCgogICAgQFQucHJpbV9mdW5jCiAgICBkZWYgbWFpbl9ub19zcGxpdCgKICAgICAgICAgICAgUTogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgZGltXSwgZHR5cGUpLAogICAgICAgICAgICBRX3BlOiBULlRlbnNvcihbYmF0Y2gsIGhlYWRzLCBwZV9kaW1dLCBkdHlwZSksCiAgICAgICAgICAgIEtWOiBULlRlbnNvcihbYmF0Y2gsIHNlcWxlbl9rdiwga3ZfaGVhZF9udW0sIGRpbV0sIGR0eXBlKSwKICAgICAgICAgICAgS19wZTogVC5UZW5zb3IoW2JhdGNoLCBzZXFsZW5fa3YsIGt2X2hlYWRfbnVtLCBwZV9kaW1dLCBkdHlwZSksCiAgICAgICAgICAgIGdsc2U6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIG51bV9zcGxpdF0sIGFjY3VtX2R0eXBlKSwKICAgICAgICAgICAgT3V0cHV0X3BhcnRpYWw6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIG51bV9zcGxpdCwgZGltXSwgYWNjdW1fZHR5cGUpLAogICAgICAgICAgICBPdXRwdXQ6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIGRpbV0sIGR0eXBlKSwKICAgICk6CiAgICAgICAgZmxhc2hfYXR0bihRLCBRX3BlLCBLViwgS19wZSwgT3V0cHV0KQoKICAgIGlmIG51bV9zcGxpdCA+IDE6CiAgICAgICAgcmV0dXJuIG1haW5fc3BsaXQKICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIG1haW5fbm9fc3BsaXQKCmNsYXNzIFJvUEUobm4uTW9kdWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkX21vZGVsOiBpbnQpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgIHNlbGYuZF9tb2RlbCA9IGRfbW9kZWwKICAgICAgICB0aGV0YSA9IDEwMDAwICoqICgtdG9yY2guYXJhbmdlKDAsIGRfbW9kZWwvLzIsZHR5cGU9dG9yY2guYmZsb2F0MTYpIC8gKGRfbW9kZWwvLzIpKQogICAgICAgIHRoZXRhID0gdGhldGEudG8oImN1ZGEiKQogICAgICAgIHNlbGYucmVnaXN0ZXJfYnVmZmVyKCJ0aGV0YSIsIHRoZXRhKQoKICAgIGRlZiByb3RhdGVfaGFsZihzZWxmLCB4OiB0b3JjaC5UZW5zb3IpIC0+IHRvcmNoLlRlbnNvcjoKICAgICAgICB4MSwgeDIgPSB4LmNodW5rKDIsIGRpbT0tMSkKICAgICAgICByZXR1cm4gdG9yY2guY2F0KCgteDIsIHgxKSwgZGltPS0xKQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHRvcmNoLlRlbnNvciwgc3RhcnRfcG9zOiBpbnQgPSAwKSAtPiB0b3JjaC5UZW5zb3I6CiAgICAgICAgc2VxX2xlbiA9IHguc2l6ZSgtMikKICAgICAgICBkX21vZGVsID0geC5zaXplKC0xKQogICAgICAgIGFzc2VydCBkX21vZGVsID09IHNlbGYuZF9tb2RlbAogICAgICAgIHNlcV9pZHggPSB0b3JjaC5hcmFuZ2Uoc3RhcnRfcG9zLCBzdGFydF9wb3MgKyBzZXFfbGVuLCBkZXZpY2U9eC5kZXZpY2UpCiAgICAgICAgaWR4X3RoZXRhID0gdG9yY2guZWluc3VtKCdzLGQtPnNkJywgc2VxX2lkeCwgc2VsZi50aGV0YSkKICAgICAgICBpZHhfdGhldGEyID0gdG9yY2guY2F0KFtpZHhfdGhldGEsIGlkeF90aGV0YV0sIGRpbT0tMSkKICAgICAgICBjb3MgPSBpZHhfdGhldGEyLmNvcygpLnRvKHRvcmNoLmJmbG9hdDE2KQogICAgICAgIHNpbiA9IGlkeF90aGV0YTIuc2luKCkudG8odG9yY2guYmZsb2F0MTYpCiAgICAgICAgcmV0dXJuIHggKiBjb3MgKyBzZWxmLnJvdGF0ZV9oYWxmKHgpICogc2luCgoKY2xhc3MgS1ZDYWNoZShubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGt2X2NhY2hlX3NoYXBlOiB0dXBsZSkgLT4gTm9uZToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLnJlZ2lzdGVyX2J1ZmZlcignZGF0YScsIHRvcmNoLnplcm9zKGt2X2NhY2hlX3NoYXBlLCBkdHlwZT10b3JjaC5iZmxvYXQxNiwgZGV2aWNlPSdjdWRhJykpCiAgICAgICAgc2VsZi5zZXFfbGVuID0gMAogICAgICAgIHNlbGYuemVybygpCgogICAgZGVmIHplcm8oc2VsZikgLT4gTm9uZToKICAgICAgICBzZWxmLmRhdGEuemVyb18oKQogICAgCiAgICBkZWYgZ2V0X2RhdGEoc2VsZikgLT4gdG9yY2guVGVuc29yOgogICAgICAgIHJldHVybiBzZWxmLmRhdGEKCiAgICBkZWYgZm9yd2FyZChzZWxmLCBjX2t2OiB0b3JjaC5UZW5zb3IpIC0+IHRvcmNoLlRlbnNvcjoKICAgICAgICBhc3NlcnQgc2VsZi5zZXFfbGVuICsgY19rdi5zaXplKDEpIDw9IHNlbGYuZGF0YS5zaXplKDEpLCAiS1YgQ2FjaGUgRXhjZWVkZWQiCgogICAgICAgIHNlbGYuZGF0YSA9IHNlbGYuZGF0YS50byhjX2t2LmR0eXBlKQogICAgICAgIHNlbGYuZGF0YVsKICAgICAgICAgICAgOiwgc2VsZi5zZXFfbGVuIDogc2VsZi5zZXFfbGVuICsgY19rdi5zaXplKDEpLCA6CiAgICAgICAgXSA9IGNfa3YKICAgICAgICBzZWxmLnNlcV9sZW4gKz0gY19rdi5zaXplKDEpCgogICAgICAgIHJldHVybiBzZWxmLmRhdGFbOiwgOnNlbGYuc2VxX2xlbl0sIHNlbGYuc2VxX2xlbgoKQGRhdGFjbGFzcwpjbGFzcyBDb25maWc6CiAgICBiYXRjaF9zaXplOiBpbnQKICAgIGRpbTogaW50CiAgICBuX2hlYWRzOiBpbnQKICAgIHFfbG9yYV9yYW5rOiBpbnQgCiAgICBrdl9sb3JhX3Jhbms6IGludAogICAgcWtfbm9wZV9oZWFkX2RpbTogaW50CiAgICBxa19yb3BlX2hlYWRfZGltOiBpbnQKICAgIHZfaGVhZF9kaW06IGludAogICAgc2VxX2xlbjogaW50CiAgICBtYXhfc2VxX2xlbjogaW50CiAgICBrdl9jYWNoZV9zaGFwZTogdHVwbGUKICAgIFFfcHJval9kb3duX3dlaWdodDogdG9yY2guVGVuc29yCiAgICBRX3Byb2pfdXBfd2VpZ2h0OiB0b3JjaC5UZW5zb3IKICAgIEtWX3Byb2pfZG93bl93ZWlnaHQ6IHRvcmNoLlRlbnNvcgogICAgS1ZfcHJval91cF93ZWlnaHQ6IHRvcmNoLlRlbnNvcgogICAgd29fd2VpZ2h0OiB0b3JjaC5UZW5zb3IKCmNsYXNzIE1MQShubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZzogQ29uZmlnLCBtbGFfdGxfa2VybmVsOiB0aWxlbGFuZy5KSVRLZXJuZWwsIGtlcm5lbF9iZXN0X2NvbmZpZyk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5kaW0gPSBjb25maWcuZGltCiAgICAgICAgc2VsZi5uX2hlYWRzID0gY29uZmlnLm5faGVhZHMKICAgICAgICBzZWxmLnFfbG9yYV9yYW5rID0gY29uZmlnLnFfbG9yYV9yYW5rCiAgICAgICAgc2VsZi5rdl9sb3JhX3JhbmsgPSBjb25maWcua3ZfbG9yYV9yYW5rCiAgICAgICAgc2VsZi5ub3BlX2hlYWRfZGltID0gY29uZmlnLnFrX25vcGVfaGVhZF9kaW0KICAgICAgICBzZWxmLnJvcGVfaGVhZF9kaW0gPSBjb25maWcucWtfcm9wZV9oZWFkX2RpbQogICAgICAgIHNlbGYudl9oZWFkX2RpbSA9IGNvbmZpZy52X2hlYWRfZGltCiAgICAgICAgZGV2aWNlID0gImN1ZGEiCiAgICAgICAgc2VsZi5RX3Byb2pfZG93biA9IG5uLkxpbmVhcihzZWxmLmRpbSwgc2VsZi5xX2xvcmFfcmFuaywgYmlhcz1GYWxzZSwgZHR5cGU9dG9yY2guYmZsb2F0MTYsIGRldmljZT1kZXZpY2UpCiAgICAgICAgc2VsZi5LVl9wcm9qX2Rvd24gPSBubi5MaW5lYXIoc2VsZi5kaW0sIHNlbGYua3ZfbG9yYV9yYW5rICsgc2VsZi5yb3BlX2hlYWRfZGltLCBiaWFzPUZhbHNlLCBkdHlwZT10b3JjaC5iZmxvYXQxNiwgZGV2aWNlPWRldmljZSkKCiAgICAgICAgc2VsZi5RX3Byb2pfdXAgPSBubi5MaW5lYXIoc2VsZi5xX2xvcmFfcmFuaywgKHNlbGYubm9wZV9oZWFkX2RpbSArIHNlbGYucm9wZV9oZWFkX2RpbSkgKiBzZWxmLm5faGVhZHMsIGJpYXM9RmFsc2UsIGR0eXBlPXRvcmNoLmJmbG9hdDE2LCBkZXZpY2U9ZGV2aWNlKQogICAgICAgIHNlbGYuS1ZfcHJval91cCA9IG5uLkxpbmVhcihzZWxmLmt2X2xvcmFfcmFuaywgKHNlbGYubm9wZV9oZWFkX2RpbSArIHNlbGYudl9oZWFkX2RpbSkgKiBzZWxmLm5faGVhZHMsIGJpYXM9RmFsc2UsIGR0eXBlPXRvcmNoLmJmbG9hdDE2LCBkZXZpY2U9ZGV2aWNlKQoKICAgICAgICAjIFJvUEUgb24gaGFsZiBlbWJlZGRpbmdzCiAgICAgICAgc2VsZi5xX3JvcGUgPSBSb1BFKHNlbGYucm9wZV9oZWFkX2RpbSkKICAgICAgICBzZWxmLmtfcm9wZSA9IFJvUEUoc2VsZi5yb3BlX2hlYWRfZGltKQoKICAgICAgICAjIE91dHB1dCBwcm9qZWN0aW9uCiAgICAgICAgc2VsZi53byA9IG5uLkxpbmVhcihzZWxmLnZfaGVhZF9kaW0gKiBzZWxmLm5faGVhZHMsIHNlbGYuZGltLCBkdHlwZT10b3JjaC5iZmxvYXQxNiwgYmlhcz1GYWxzZSwgZGV2aWNlPWRldmljZSkKICAgICAgICBzZWxmLmVwcyA9IDFlLTYKICAgICAgICBzZWxmLm1sYV90bF9rZXJuZWwgPSBtbGFfdGxfa2VybmVsCiAgICAgICAgc2VsZi5rZXJuZWxfYmVzdF9jb25maWcgPSBrZXJuZWxfYmVzdF9jb25maWcKICAgCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4OiB0b3JjaC5UZW5zb3IsIGt2X2NhY2hlOiBLVkNhY2hlKSAtPiB0b3JjaC5UZW5zb3I6CiAgICAgICAgIyBzZXFfbGVuID0gMSBhbHdheXMgaGVyZQogICAgICAgIGJhdGNoX3NpemUsIHNlcV9sZW4sIG1vZGVsX2RpbSA9IHguc2l6ZSgpCgogICAgICAgIHFfbG9yYSA9IHNlbGYuUV9wcm9qX2Rvd24oeCkKICAgICAgICBrdl9sb3JhID0gc2VsZi5LVl9wcm9qX2Rvd24oeCkKICAgICAgICBrdl9sb3JhLCBrdl9sZW4gPSBrdl9jYWNoZShrdl9sb3JhKSAKICAgICAgICBxdWVyeV9wb3MgPSBrdl9sZW4gLSAxCgogICAgICAgIHFfbm9wZV9hbmRfcGUgPSBzZWxmLlFfcHJval91cChxX2xvcmEpLnZpZXcoCiAgICAgICAgICAgIGJhdGNoX3NpemUsIHNlcV9sZW4sIHNlbGYubl9oZWFkcywgc2VsZi5ub3BlX2hlYWRfZGltICsgc2VsZi5yb3BlX2hlYWRfZGltKS50cmFuc3Bvc2UoMSwgMikKICAgICAgICBxLCBxX3BlID0gdG9yY2guc3BsaXQocV9ub3BlX2FuZF9wZSwgW3NlbGYubm9wZV9oZWFkX2RpbSwgc2VsZi5yb3BlX2hlYWRfZGltXSwgZGltPS0xKQogICAgICAgIHFfcGUgPSBzZWxmLnFfcm9wZShxX3BlLCBzdGFydF9wb3M9cXVlcnlfcG9zKQoKICAgICAgICBrdiwga19wZSA9IHRvcmNoLnNwbGl0KGt2X2xvcmEsIFtzZWxmLmt2X2xvcmFfcmFuaywgc2VsZi5yb3BlX2hlYWRfZGltXSwgZGltPS0xKQogICAgICAgIGtfcGUgPSBrX3BlWzosIE5vbmUsIDosIDpdCiAgICAgICAga19wZSA9IHNlbGYua19yb3BlKGtfcGUpCgogICAgICAgIEtWX3Byb2pfdXAgPSBzZWxmLktWX3Byb2pfdXAud2VpZ2h0LnZpZXcoc2VsZi5uX2hlYWRzLCAtMSwgc2VsZi5rdl9sb3JhX3JhbmspCiAgICAgICAgcV9hYnNvcmIgPSBLVl9wcm9qX3VwWzosIDpzZWxmLm5vcGVfaGVhZF9kaW0sIDpdCiAgICAgICAgb3V0X2Fic29yYiA9IEtWX3Byb2pfdXBbOiwgc2VsZi5ub3BlX2hlYWRfZGltOiwgOl0KICAgICAgICBxID0gdG9yY2gubWF0bXVsKHEsIHFfYWJzb3JiKQogICAgICAgIAogICAgICAgIG51bV9zcGxpdHMgPSBzZWxmLmtlcm5lbF9iZXN0X2NvbmZpZ1snbnVtX3NwbGl0J10KICAgICAgICBnbHNlID0gdG9yY2guemVyb3MoKGJhdGNoX3NpemUsIHNlbGYubl9oZWFkcywgbnVtX3NwbGl0cyksIGR0eXBlPXRvcmNoLmZsb2F0LCBkZXZpY2U9eC5kZXZpY2UpCiAgICAgICAgb3V0cHV0X3BhcnRpYWwgPSB0b3JjaC56ZXJvcygoYmF0Y2hfc2l6ZSwgc2VsZi5uX2hlYWRzLCBudW1fc3BsaXRzLCBzZWxmLmt2X2xvcmFfcmFuayksIGR0eXBlPXRvcmNoLmZsb2F0LCBkZXZpY2U9eC5kZXZpY2UpCiAgICAgICAgCiAgICAgICAgcV90bCA9IHEudmlldyhiYXRjaF9zaXplLCBzZWxmLm5faGVhZHMsIHNlbGYua3ZfbG9yYV9yYW5rKQogICAgICAgIHFfcGVfdGwgPSBxX3BlLnZpZXcoYmF0Y2hfc2l6ZSwgc2VsZi5uX2hlYWRzLCBzZWxmLnJvcGVfaGVhZF9kaW0pCiAgICAgICAga3ZfdGwgPSBrdi52aWV3KGJhdGNoX3NpemUsIGt2X2xlbiwgMSwgc2VsZi5rdl9sb3JhX3JhbmspLmNvbnRpZ3VvdXMoKQogICAgICAgIGtfcGVfdGwgPSBrX3BlLnRyYW5zcG9zZSgxLCAyKQoKICAgICAgICB0bF9hdHRuX291dCA9IHRvcmNoLnplcm9zKChiYXRjaF9zaXplLCBzZWxmLm5faGVhZHMsIHNlbGYua3ZfbG9yYV9yYW5rKSwgZHR5cGU9dG9yY2guYmZsb2F0MTYsIGRldmljZT14LmRldmljZSkKICAgICAgICBpZiBrdl9sZW4gPCAxMzA6CiAgICAgICAgICAgIHNvZnRtYXhfc2NhbGUgPSAxIC8gbWF0aC5zcXJ0KHNlbGYucm9wZV9oZWFkX2RpbSArIHNlbGYubm9wZV9oZWFkX2RpbSkKICAgICAgICAgICAgYXR0bl93ZWlnaHRzID0gKHRvcmNoLm1hdG11bChxX3BlLCBrX3BlLm1UKSArIHRvcmNoLm1hdG11bChxLCBrdi51bnNxdWVlemUoLTMpLm1UKSkgKiBzb2Z0bWF4X3NjYWxlCiAgICAgICAgICAgIGF0dG5fd2VpZ2h0c19zb2Z0bWF4ID0gbm4uZnVuY3Rpb25hbC5zb2Z0bWF4KGF0dG5fd2VpZ2h0cywgZGltPS0xLCBkdHlwZT10b3JjaC5mbG9hdDMyKS50byhxLmR0eXBlKQogICAgICAgICAgICB0bF9hdHRuX291dCA9IHRvcmNoLmVpbnN1bSgnYmhxbCwgYmxjIC0+IGJocWMnLCBhdHRuX3dlaWdodHNfc29mdG1heCwga3YpCgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHRsX2F0dG5fb3V0ID0gc2VsZi5tbGFfdGxfa2VybmVsKAogICAgICAgICAgICAgICAgcV90bCwgICAgICAgICAKICAgICAgICAgICAgICAgIHFfcGVfdGwsICAgICAKICAgICAgICAgICAgICAgIGt2X3RsLCAKICAgICAgICAgICAgICAgIGtfcGVfdGwsICAgICAKICAgICAgICAgICAgICAgIGdsc2UsCiAgICAgICAgICAgICAgICBvdXRwdXRfcGFydGlhbCwKICAgICAgICAgICAgKQoKICAgICAgICB0bF9hdHRuX291dCA9IHRsX2F0dG5fb3V0LnZpZXcoYmF0Y2hfc2l6ZSwgc2VsZi5uX2hlYWRzLCAxLCBzZWxmLmt2X2xvcmFfcmFuaykKICAgICAgICB0bF9hdHRuX291dCA9IHRvcmNoLm1hdG11bCh0bF9hdHRuX291dCwgb3V0X2Fic29yYi5tVCkKICAgICAgICB0bF9hdHRuX291dCA9IHRsX2F0dG5fb3V0LnRyYW5zcG9zZSgxLCAyKS5jb250aWd1b3VzKCkKICAgICAgICB0bF9hdHRuX291dCA9IHRsX2F0dG5fb3V0LnJlc2hhcGUoYmF0Y2hfc2l6ZSwgMSwgc2VsZi5uX2hlYWRzICogc2VsZi52X2hlYWRfZGltKS50byh0b3JjaC5iZmxvYXQxNikKICAgICAgICB0bF9hdHRuX291dCA9IHNlbGYud28odGxfYXR0bl9vdXQpCiAgICAgICAgcmV0dXJuIHRsX2F0dG5fb3V0LCBrdl9jYWNoZS5nZXRfZGF0YSgpIAoKZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6CiAgICBjb25maWcsIHgsIGt2X2NhY2hlID0gZGF0YQogICAgbWxhX3RsX2tlcm5lbCwga2VybmVsX2Jlc3RfY29uZmlnID0gZ2V0X29wdGltYWxfa2VybmVsKAogICAgICAgIGJhdGNoPWNvbmZpZy5iYXRjaF9zaXplLAogICAgICAgIGhlYWRzPWNvbmZpZy5uX2hlYWRzLAogICAgICAgIGt2X2hlYWRfbnVtPTEsCiAgICAgICAgc2VxbGVuX2t2PWt2X2NhY2hlLnNlcV9sZW4sCiAgICAgICAgZGltPWNvbmZpZy5rdl9sb3JhX3JhbmssCiAgICAgICAgcGVfZGltPWNvbmZpZy5xa19yb3BlX2hlYWRfZGltCiAgICApCiAgICBtb2RlbCA9IE1MQShjb25maWcsIG1sYV90bF9rZXJuZWwsIGtlcm5lbF9iZXN0X2NvbmZpZykKICAgIG1vZGVsLlFfcHJval9kb3duLndlaWdodCA9IG5uLlBhcmFtZXRlcihjb25maWcuUV9wcm9qX2Rvd25fd2VpZ2h0KQogICAgbW9kZWwuUV9wcm9qX3VwLndlaWdodCA9IG5uLlBhcmFtZXRlcihjb25maWcuUV9wcm9qX3VwX3dlaWdodCkKICAgIG1vZGVsLktWX3Byb2pfZG93bi53ZWlnaHQgPSBubi5QYXJhbWV0ZXIoY29uZmlnLktWX3Byb2pfZG93bl93ZWlnaHQpCiAgICBtb2RlbC5LVl9wcm9qX3VwLndlaWdodCA9IG5uLlBhcmFtZXRlcihjb25maWcuS1ZfcHJval91cF93ZWlnaHQpCiAgICBtb2RlbC53by53ZWlnaHQgPSBubi5QYXJhbWV0ZXIoY29uZmlnLndvX3dlaWdodCkKICAgIG91dHB1dCwga3ZfY2FjaGUgPSBtb2RlbCh4LCBrdl9jYWNoZSkKICAgIHJldHVybiBvdXRwdXQsIGt2X2NhY2hlSource 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 30988.
Best evidence level for this revision: reported
JSON