{ "name": "DemoSm", "structs": {}, "methods": [ { "name": "hello", "args": [ { "type": "string", "name": "name" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "register_issuer", "args": [ { "type": "address", "name": "issuer" }, { "type": "string", "name": "organization" }, { "type": "string", "name": "scope" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_issuer_status", "args": [ { "type": "address", "name": "issuer" }, { "type": "bool", "name": "active" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "get_issuer_status", "args": [ { "type": "address", "name": "issuer" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "submit_verification_request", "args": [ { "type": "uint64", "name": "request_id" }, { "type": "address", "name": "issuer" }, { "type": "string", "name": "certificate_type" }, { "type": "string", "name": "certificate_name" }, { "type": "string", "name": "certificate_id" }, { "type": "string", "name": "organization" }, { "type": "string", "name": "evidence_hash" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "mark_under_review", "args": [ { "type": "uint64", "name": "request_id" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "verify_request", "args": [ { "type": "uint64", "name": "request_id" }, { "type": "uint64", "name": "credential_id" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "reject_request", "args": [ { "type": "uint64", "name": "request_id" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "revoke_credential", "args": [ { "type": "uint64", "name": "credential_id" }, { "type": "uint64", "name": "request_id" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "get_request_status", "args": [ { "type": "uint64", "name": "request_id" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_credential_status", "args": [ { "type": "uint64", "name": "credential_id" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_request", "args": [ { "type": "uint64", "name": "request_id" } ], "returns": { "type": "(address,address,string,string,string,string,string,string)" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 0, "bytes": 1 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "registry": { "keyType": "AVMString", "valueType": "address", "key": "cmVnaXN0cnk=" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "issuer_active": { "keyType": "address", "valueType": "uint64", "prefix": "aWE=" }, "issuer_organization": { "keyType": "address", "valueType": "AVMString", "prefix": "aW8=" }, "issuer_scope": { "keyType": "address", "valueType": "AVMString", "prefix": "aXM=" }, "request_exists": { "keyType": "uint64", "valueType": "uint64", "prefix": "cmU=" }, "request_status": { "keyType": "uint64", "valueType": "uint64", "prefix": "cnM=" }, "request_student": { "keyType": "uint64", "valueType": "address", "prefix": "cnN0dQ==" }, "request_issuer": { "keyType": "uint64", "valueType": "address", "prefix": "cmlzcw==" }, "request_certificate_id": { "keyType": "uint64", "valueType": "AVMString", "prefix": "cmNpZA==" }, "request_certificate_name": { "keyType": "uint64", "valueType": "AVMString", "prefix": "cmNubQ==" }, "request_certificate_type": { "keyType": "uint64", "valueType": "AVMString", "prefix": "cmN0cA==" }, "request_organization": { "keyType": "uint64", "valueType": "AVMString", "prefix": "cm9yZw==" }, "request_evidence_hash": { "keyType": "uint64", "valueType": "AVMString", "prefix": "cmV2aA==" }, "credential_exists": { "keyType": "uint64", "valueType": "uint64", "prefix": "Y2U=" }, "credential_active": { "keyType": "uint64", "valueType": "uint64", "prefix": "Y2E=" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 930 ], "errorMessage": "check self.credential_active entry exists" }, { "pc": [ 554 ], "errorMessage": "check self.issuer_scope entry exists" }, { "pc": [ 1203 ], "errorMessage": "check self.registry exists" }, { "pc": [ 1004 ], "errorMessage": "check self.request_certificate_id entry exists" }, { "pc": [ 997 ], "errorMessage": "check self.request_certificate_name entry exists" }, { "pc": [ 990 ], "errorMessage": "check self.request_certificate_type entry exists" }, { "pc": [ 1018 ], "errorMessage": "check self.request_evidence_hash entry exists" }, { "pc": [ 983, 1259 ], "errorMessage": "check self.request_issuer entry exists" }, { "pc": [ 1011 ], "errorMessage": "check self.request_organization entry exists" }, { "pc": [ 663, 728, 737, 796, 805, 864, 1291 ], "errorMessage": "check self.request_status entry exists" }, { "pc": [ 977 ], "errorMessage": "check self.request_student entry exists" }, { "pc": [ 218, 268, 284, 441, 457, 473, 489, 505 ], "errorMessage": "invalid array length header" }, { "pc": [ 346 ], "errorMessage": "invalid number of bytes for arc4.bool" }, { "pc": [ 225, 275, 291, 448, 464, 480, 496, 512 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 262, 338, 374, 435 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 425, 647, 680, 689, 780, 834, 843, 892, 918, 963 ], "errorMessage": "invalid number of bytes for arc4.uint64" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMiA4CiAgICBieXRlY2Jsb2NrICJycyIgMHgxNTFmN2M3NSAiaWEiICJyaXNzIiAiY2EiICJyZWdpc3RyeSIgImlzIiAiQUNUSVZFIiAicmUiICJyc3R1IiAicmN0cCIgInJjbm0iICJyY2lkIiAicm9yZyIgInJldmgiICJjZSIgIlJFVk9LRUQiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToyMgogICAgLy8gc2VsZi5yZWdpc3RyeS52YWx1ZSA9IFR4bi5zZW5kZXIKICAgIGJ5dGVjIDUgLy8gInJlZ2lzdHJ5IgogICAgdHhuIFNlbmRlcgogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6NQogICAgLy8gY2xhc3MgRGVtb1NtKEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAyMQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4MDJiZWNlMTEgMHg3YTAyNWViOSAweDEyYmI3YzNkIDB4MTMyYmQzYzAgMHgyNjU4MDhjYiAweDIyZDYzY2Q5IDB4YTNhNWI0OWMgMHhmYjg5MDYyOSAweDlhMWRhNzUxIDB4ZDlkNDc0ZjcgMHhlYjMxYmRlOCAweDY0YzIyZjE4IC8vIG1ldGhvZCAiaGVsbG8oc3RyaW5nKXN0cmluZyIsIG1ldGhvZCAicmVnaXN0ZXJfaXNzdWVyKGFkZHJlc3Msc3RyaW5nLHN0cmluZyl2b2lkIiwgbWV0aG9kICJ1cGRhdGVfaXNzdWVyX3N0YXR1cyhhZGRyZXNzLGJvb2wpdm9pZCIsIG1ldGhvZCAiZ2V0X2lzc3Vlcl9zdGF0dXMoYWRkcmVzcylzdHJpbmciLCBtZXRob2QgInN1Ym1pdF92ZXJpZmljYXRpb25fcmVxdWVzdCh1aW50NjQsYWRkcmVzcyxzdHJpbmcsc3RyaW5nLHN0cmluZyxzdHJpbmcsc3RyaW5nKXZvaWQiLCBtZXRob2QgIm1hcmtfdW5kZXJfcmV2aWV3KHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJ2ZXJpZnlfcmVxdWVzdCh1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgInJlamVjdF9yZXF1ZXN0KHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJyZXZva2VfY3JlZGVudGlhbCh1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgImdldF9yZXF1ZXN0X3N0YXR1cyh1aW50NjQpc3RyaW5nIiwgbWV0aG9kICJnZXRfY3JlZGVudGlhbF9zdGF0dXModWludDY0KXN0cmluZyIsIG1ldGhvZCAiZ2V0X3JlcXVlc3QodWludDY0KShhZGRyZXNzLGFkZHJlc3Msc3RyaW5nLHN0cmluZyxzdHJpbmcsc3RyaW5nLHN0cmluZyxzdHJpbmcpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggaGVsbG8gcmVnaXN0ZXJfaXNzdWVyIHVwZGF0ZV9pc3N1ZXJfc3RhdHVzIGdldF9pc3N1ZXJfc3RhdHVzIHN1Ym1pdF92ZXJpZmljYXRpb25fcmVxdWVzdCBtYXJrX3VuZGVyX3JldmlldyB2ZXJpZnlfcmVxdWVzdCByZWplY3RfcmVxdWVzdCByZXZva2VfY3JlZGVudGlhbCBnZXRfcmVxdWVzdF9zdGF0dXMgZ2V0X2NyZWRlbnRpYWxfc3RhdHVzIGdldF9yZXF1ZXN0CiAgICBlcnIKCm1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMjE6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5kZW1vX3NtLmNvbnRyYWN0LkRlbW9TbS5oZWxsb1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmhlbGxvOgogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6NDgKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjUwCiAgICAvLyByZXR1cm4gIkhlbGxvLCAiICsgbmFtZQogICAgcHVzaGJ5dGVzICJIZWxsbywgIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weTo0OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5kZW1vX3NtLmNvbnRyYWN0LkRlbW9TbS5yZWdpc3Rlcl9pc3N1ZXJbcm91dGluZ10oKSAtPiB2b2lkOgpyZWdpc3Rlcl9pc3N1ZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weTo1MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjU0CiAgICAvLyBzZWxmLl9vbmx5X3JlZ2lzdHJ5KCkKICAgIGNhbGxzdWIgX29ubHlfcmVnaXN0cnkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBzZWxmLmlzc3Vlcl9hY3RpdmVbaXNzdWVyXSA9IFRydWUKICAgIGJ5dGVjXzIgLy8gImlhIgogICAgZGlnIDMKICAgIGNvbmNhdAogICAgaW50Y18wIC8vIDEKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjU2CiAgICAvLyBzZWxmLmlzc3Vlcl9vcmdhbml6YXRpb25baXNzdWVyXSA9IG9yZ2FuaXphdGlvbgogICAgcHVzaGJ5dGVzICJpbyIKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICB1bmNvdmVyIDIKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjU3CiAgICAvLyBzZWxmLmlzc3Vlcl9zY29wZVtpc3N1ZXJdID0gc2NvcGUKICAgIGJ5dGVjIDYgLy8gImlzIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weTo1MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmRlbW9fc20uY29udHJhY3QuRGVtb1NtLnVwZGF0ZV9pc3N1ZXJfc3RhdHVzW3JvdXRpbmddKCkgLT4gdm9pZDoKdXBkYXRlX2lzc3Vlcl9zdGF0dXM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weTo1OQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuYm9vbAogICAgaW50Y18xIC8vIDAKICAgIGdldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6NjEKICAgIC8vIHNlbGYuX29ubHlfcmVnaXN0cnkoKQogICAgY2FsbHN1YiBfb25seV9yZWdpc3RyeQogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6NjIKICAgIC8vIGFzc2VydCBpc3N1ZXIgaW4gc2VsZi5pc3N1ZXJfYWN0aXZlCiAgICBieXRlY18yIC8vICJpYSIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weTo2MwogICAgLy8gc2VsZi5pc3N1ZXJfYWN0aXZlW2lzc3Vlcl0gPSBhY3RpdmUKICAgIHN3YXAKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjU5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuZGVtb19zbS5jb250cmFjdC5EZW1vU20uZ2V0X2lzc3Vlcl9zdGF0dXNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfaXNzdWVyX3N0YXR1czoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjY1CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weTo2NwogICAgLy8gaWYgbm90IHNlbGYuaXNzdWVyX2FjdGl2ZS5nZXQoaXNzdWVyLCBkZWZhdWx0PUZhbHNlKToKICAgIGJ5dGVjXzIgLy8gImlhIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzEgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGJueiBnZXRfaXNzdWVyX3N0YXR1c19hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjY4CiAgICAvLyByZXR1cm4gU3RyaW5nKCJJTkFDVElWRSIpCiAgICBwdXNoYnl0ZXMgIklOQUNUSVZFIgoKZ2V0X2lzc3Vlcl9zdGF0dXNfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuZGVtb19zbS5jb250cmFjdC5EZW1vU20uZ2V0X2lzc3Vlcl9zdGF0dXNANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjY1CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKZ2V0X2lzc3Vlcl9zdGF0dXNfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6NjkKICAgIC8vIHJldHVybiBTdHJpbmcoIkFDVElWRSIpCiAgICBieXRlYyA3IC8vICJBQ1RJVkUiCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weTo2NQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfaXNzdWVyX3N0YXR1c19hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5kZW1vX3NtLmNvbnRyYWN0LkRlbW9TbS5nZXRfaXNzdWVyX3N0YXR1c0A0CgoKLy8gc21hcnRfY29udHJhY3RzLmRlbW9fc20uY29udHJhY3QuRGVtb1NtLnN1Ym1pdF92ZXJpZmljYXRpb25fcmVxdWVzdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnN1Ym1pdF92ZXJpZmljYXRpb25fcmVxdWVzdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjcxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA3CiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6ODIKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5yZXF1ZXN0X2V4aXN0cy5nZXQocmVxdWVzdF9pZCwgZGVmYXVsdD1GYWxzZSkKICAgIHVuY292ZXIgNgogICAgaXRvYgogICAgYnl0ZWMgOCAvLyAicmUiCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weTo4MwogICAgLy8gYXNzZXJ0IHNlbGYuaXNzdWVyX2FjdGl2ZS5nZXQoaXNzdWVyLCBkZWZhdWx0PUZhbHNlKQogICAgYnl0ZWNfMiAvLyAiaWEiCiAgICBkaWcgOAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzEgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6ODQKICAgIC8vIGFzc2VydCBzZWxmLmlzc3Vlcl9zY29wZVtpc3N1ZXJdID09IGNlcnRpZmljYXRlX3R5cGUKICAgIGJ5dGVjIDYgLy8gImlzIgogICAgZGlnIDgKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaXNzdWVyX3Njb3BlIGVudHJ5IGV4aXN0cwogICAgZGlnIDcKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5Ojg2CiAgICAvLyBzZWxmLnJlcXVlc3RfZXhpc3RzW3JlcXVlc3RfaWRdID0gVHJ1ZQogICAgaW50Y18wIC8vIDEKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5Ojg3CiAgICAvLyBzZWxmLnJlcXVlc3Rfc3RhdHVzW3JlcXVlc3RfaWRdID0gVUludDY0KDEpCiAgICBieXRlY18wIC8vICJycyIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGludGNfMCAvLyAxCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weTo4OAogICAgLy8gc2VsZi5yZXF1ZXN0X3N0dWRlbnRbcmVxdWVzdF9pZF0gPSBUeG4uc2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICBieXRlYyA5IC8vICJyc3R1IgogICAgZGlnIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6ODkKICAgIC8vIHNlbGYucmVxdWVzdF9pc3N1ZXJbcmVxdWVzdF9pZF0gPSBpc3N1ZXIKICAgIGJ5dGVjXzMgLy8gInJpc3MiCiAgICBkaWcgMQogICAgY29uY2F0CiAgICB1bmNvdmVyIDcKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjkwCiAgICAvLyBzZWxmLnJlcXVlc3RfY2VydGlmaWNhdGVfdHlwZVtyZXF1ZXN0X2lkXSA9IGNlcnRpZmljYXRlX3R5cGUKICAgIGJ5dGVjIDEwIC8vICJyY3RwIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHVuY292ZXIgNgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6OTEKICAgIC8vIHNlbGYucmVxdWVzdF9jZXJ0aWZpY2F0ZV9uYW1lW3JlcXVlc3RfaWRdID0gY2VydGlmaWNhdGVfbmFtZQogICAgYnl0ZWMgMTEgLy8gInJjbm0iCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgdW5jb3ZlciA1CiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weTo5MgogICAgLy8gc2VsZi5yZXF1ZXN0X2NlcnRpZmljYXRlX2lkW3JlcXVlc3RfaWRdID0gY2VydGlmaWNhdGVfaWQKICAgIGJ5dGVjIDEyIC8vICJyY2lkIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHVuY292ZXIgNAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6OTMKICAgIC8vIHNlbGYucmVxdWVzdF9vcmdhbml6YXRpb25bcmVxdWVzdF9pZF0gPSBvcmdhbml6YXRpb24KICAgIGJ5dGVjIDEzIC8vICJyb3JnIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHVuY292ZXIgMwogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6OTQKICAgIC8vIHNlbGYucmVxdWVzdF9ldmlkZW5jZV9oYXNoW3JlcXVlc3RfaWRdID0gZXZpZGVuY2VfaGFzaAogICAgYnl0ZWMgMTQgLy8gInJldmgiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weTo3MQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmRlbW9fc20uY29udHJhY3QuRGVtb1NtLm1hcmtfdW5kZXJfcmV2aWV3W3JvdXRpbmddKCkgLT4gdm9pZDoKbWFya191bmRlcl9yZXZpZXc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weTo5NgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weTo5OAogICAgLy8gc2VsZi5fcmVxdWVzdF9tdXN0X2V4aXN0KHJlcXVlc3RfaWQpCiAgICBkdXAKICAgIGNhbGxzdWIgX3JlcXVlc3RfbXVzdF9leGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6OTkKICAgIC8vIHNlbGYuX29ubHlfYXNzaWduZWRfaXNzdWVyKHJlcXVlc3RfaWQpCiAgICBkdXAKICAgIGNhbGxzdWIgX29ubHlfYXNzaWduZWRfaXNzdWVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToxMDAKICAgIC8vIGFzc2VydCBzZWxmLnJlcXVlc3Rfc3RhdHVzW3JlcXVlc3RfaWRdID09IFVJbnQ2NCgxKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAicnMiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVxdWVzdF9zdGF0dXMgZW50cnkgZXhpc3RzCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6MTAxCiAgICAvLyBzZWxmLnJlcXVlc3Rfc3RhdHVzW3JlcXVlc3RfaWRdID0gVUludDY0KDIpCiAgICBpbnRjXzIgLy8gMgogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6OTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5kZW1vX3NtLmNvbnRyYWN0LkRlbW9TbS52ZXJpZnlfcmVxdWVzdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZlcmlmeV9yZXF1ZXN0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6MTAzCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjEwNQogICAgLy8gc2VsZi5fcmVxdWVzdF9tdXN0X2V4aXN0KHJlcXVlc3RfaWQpCiAgICBkaWcgMQogICAgY2FsbHN1YiBfcmVxdWVzdF9tdXN0X2V4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToxMDYKICAgIC8vIHNlbGYuX29ubHlfYXNzaWduZWRfaXNzdWVyKHJlcXVlc3RfaWQpCiAgICBkaWcgMQogICAgY2FsbHN1YiBfb25seV9hc3NpZ25lZF9pc3N1ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjEwNwogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmNyZWRlbnRpYWxfZXhpc3RzLmdldChjcmVkZW50aWFsX2lkLCBkZWZhdWx0PUZhbHNlKQogICAgaXRvYgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBieXRlYyAxNSAvLyAiY2UiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgY292ZXIgMgogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18xIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjEwOAogICAgLy8gYXNzZXJ0IHNlbGYucmVxdWVzdF9zdGF0dXNbcmVxdWVzdF9pZF0gPT0gVUludDY0KDEpIG9yIHNlbGYucmVxdWVzdF9zdGF0dXNbcmVxdWVzdF9pZF0gPT0gVUludDY0KDIpCiAgICBpdG9iCiAgICBieXRlY18wIC8vICJycyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZXF1ZXN0X3N0YXR1cyBlbnRyeSBleGlzdHMKICAgIGJ0b2kKICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYm56IHZlcmlmeV9yZXF1ZXN0X2Jvb2xfdHJ1ZUAzCiAgICBkdXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlcXVlc3Rfc3RhdHVzIGVudHJ5IGV4aXN0cwogICAgYnRvaQogICAgaW50Y18yIC8vIDIKICAgID09CiAgICBieiB2ZXJpZnlfcmVxdWVzdF9ib29sX2ZhbHNlQDQKCnZlcmlmeV9yZXF1ZXN0X2Jvb2xfdHJ1ZUAzOgogICAgaW50Y18wIC8vIDEKCnZlcmlmeV9yZXF1ZXN0X2Jvb2xfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjEwOAogICAgLy8gYXNzZXJ0IHNlbGYucmVxdWVzdF9zdGF0dXNbcmVxdWVzdF9pZF0gPT0gVUludDY0KDEpIG9yIHNlbGYucmVxdWVzdF9zdGF0dXNbcmVxdWVzdF9pZF0gPT0gVUludDY0KDIpCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjExMAogICAgLy8gc2VsZi5yZXF1ZXN0X3N0YXR1c1tyZXF1ZXN0X2lkXSA9IFVJbnQ2NCgzKQogICAgcHVzaGludCAzCiAgICBpdG9iCiAgICBkaWcgMQogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6MTExCiAgICAvLyBzZWxmLmNyZWRlbnRpYWxfZXhpc3RzW2NyZWRlbnRpYWxfaWRdID0gVHJ1ZQogICAgaW50Y18wIC8vIDEKICAgIGl0b2IKICAgIGRpZyAyCiAgICBkaWcgMQogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6MTEyCiAgICAvLyBzZWxmLmNyZWRlbnRpYWxfYWN0aXZlW2NyZWRlbnRpYWxfaWRdID0gVHJ1ZQogICAgYnl0ZWMgNCAvLyAiY2EiCiAgICBkaWcgNAogICAgY29uY2F0CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToxMDMKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKdmVyaWZ5X3JlcXVlc3RfYm9vbF9mYWxzZUA0OgogICAgaW50Y18xIC8vIDAKICAgIGIgdmVyaWZ5X3JlcXVlc3RfYm9vbF9tZXJnZUA1CgoKLy8gc21hcnRfY29udHJhY3RzLmRlbW9fc20uY29udHJhY3QuRGVtb1NtLnJlamVjdF9yZXF1ZXN0W3JvdXRpbmddKCkgLT4gdm9pZDoKcmVqZWN0X3JlcXVlc3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToxMTQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6MTE2CiAgICAvLyBzZWxmLl9yZXF1ZXN0X211c3RfZXhpc3QocmVxdWVzdF9pZCkKICAgIGR1cAogICAgY2FsbHN1YiBfcmVxdWVzdF9tdXN0X2V4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToxMTcKICAgIC8vIHNlbGYuX29ubHlfYXNzaWduZWRfaXNzdWVyKHJlcXVlc3RfaWQpCiAgICBkdXAKICAgIGNhbGxzdWIgX29ubHlfYXNzaWduZWRfaXNzdWVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToxMTgKICAgIC8vIGFzc2VydCBzZWxmLnJlcXVlc3Rfc3RhdHVzW3JlcXVlc3RfaWRdID09IFVJbnQ2NCgxKSBvciBzZWxmLnJlcXVlc3Rfc3RhdHVzW3JlcXVlc3RfaWRdID09IFVJbnQ2NCgyKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAicnMiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVxdWVzdF9zdGF0dXMgZW50cnkgZXhpc3RzCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGJueiByZWplY3RfcmVxdWVzdF9ib29sX3RydWVAMwogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZXF1ZXN0X3N0YXR1cyBlbnRyeSBleGlzdHMKICAgIGJ0b2kKICAgIGludGNfMiAvLyAyCiAgICA9PQogICAgYnogcmVqZWN0X3JlcXVlc3RfYm9vbF9mYWxzZUA0CgpyZWplY3RfcmVxdWVzdF9ib29sX3RydWVAMzoKICAgIGludGNfMCAvLyAxCgpyZWplY3RfcmVxdWVzdF9ib29sX21lcmdlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToxMTgKICAgIC8vIGFzc2VydCBzZWxmLnJlcXVlc3Rfc3RhdHVzW3JlcXVlc3RfaWRdID09IFVJbnQ2NCgxKSBvciBzZWxmLnJlcXVlc3Rfc3RhdHVzW3JlcXVlc3RfaWRdID09IFVJbnQ2NCgyKQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToxMTkKICAgIC8vIHNlbGYucmVxdWVzdF9zdGF0dXNbcmVxdWVzdF9pZF0gPSBVSW50NjQoNCkKICAgIHB1c2hpbnQgNAogICAgaXRvYgogICAgZGlnIDEKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjExNAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgpyZWplY3RfcmVxdWVzdF9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzEgLy8gMAogICAgYiByZWplY3RfcmVxdWVzdF9ib29sX21lcmdlQDUKCgovLyBzbWFydF9jb250cmFjdHMuZGVtb19zbS5jb250cmFjdC5EZW1vU20ucmV2b2tlX2NyZWRlbnRpYWxbcm91dGluZ10oKSAtPiB2b2lkOgpyZXZva2VfY3JlZGVudGlhbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjEyMQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToxMjMKICAgIC8vIHNlbGYuX2NyZWRlbnRpYWxfbXVzdF9leGlzdChjcmVkZW50aWFsX2lkKQogICAgZGlnIDEKICAgIGNhbGxzdWIgX2NyZWRlbnRpYWxfbXVzdF9leGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6MTI0CiAgICAvLyBzZWxmLl9yZXF1ZXN0X211c3RfZXhpc3QocmVxdWVzdF9pZCkKICAgIGR1cAogICAgY2FsbHN1YiBfcmVxdWVzdF9tdXN0X2V4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToxMjUKICAgIC8vIHNlbGYuX29ubHlfYXNzaWduZWRfaXNzdWVyKHJlcXVlc3RfaWQpCiAgICBkdXAKICAgIGNhbGxzdWIgX29ubHlfYXNzaWduZWRfaXNzdWVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToxMjYKICAgIC8vIGFzc2VydCBzZWxmLnJlcXVlc3Rfc3RhdHVzW3JlcXVlc3RfaWRdID09IFVJbnQ2NCgzKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAicnMiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVxdWVzdF9zdGF0dXMgZW50cnkgZXhpc3RzCiAgICBidG9pCiAgICBwdXNoaW50IDMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjEyNwogICAgLy8gc2VsZi5jcmVkZW50aWFsX2FjdGl2ZVtjcmVkZW50aWFsX2lkXSA9IEZhbHNlCiAgICBzd2FwCiAgICBpdG9iCiAgICBieXRlYyA0IC8vICJjYSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgaW50Y18xIC8vIDAKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjEyOAogICAgLy8gc2VsZi5yZXF1ZXN0X3N0YXR1c1tyZXF1ZXN0X2lkXSA9IFVJbnQ2NCg1KQogICAgcHVzaGludCA1CiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToxMjEKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5kZW1vX3NtLmNvbnRyYWN0LkRlbW9TbS5nZXRfcmVxdWVzdF9zdGF0dXNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfcmVxdWVzdF9zdGF0dXM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToxMzAKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzLmRlbW9fc20uY29udHJhY3QuRGVtb1NtLmdldF9yZXF1ZXN0X3N0YXR1cwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuZGVtb19zbS5jb250cmFjdC5EZW1vU20uZ2V0X2NyZWRlbnRpYWxfc3RhdHVzW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X2NyZWRlbnRpYWxfc3RhdHVzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6MTM1CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToxMzcKICAgIC8vIHNlbGYuX2NyZWRlbnRpYWxfbXVzdF9leGlzdChjcmVkZW50aWFsX2lkKQogICAgZHVwCiAgICBjYWxsc3ViIF9jcmVkZW50aWFsX211c3RfZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjEzOAogICAgLy8gaWYgc2VsZi5jcmVkZW50aWFsX2FjdGl2ZVtjcmVkZW50aWFsX2lkXToKICAgIGl0b2IKICAgIGJ5dGVjIDQgLy8gImNhIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jcmVkZW50aWFsX2FjdGl2ZSBlbnRyeSBleGlzdHMKICAgIGJ0b2kKICAgIGJ6IGdldF9jcmVkZW50aWFsX3N0YXR1c19hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjEzOQogICAgLy8gcmV0dXJuIFN0cmluZygiQUNUSVZFIikKICAgIGJ5dGVjIDcgLy8gIkFDVElWRSIKCmdldF9jcmVkZW50aWFsX3N0YXR1c19hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5kZW1vX3NtLmNvbnRyYWN0LkRlbW9TbS5nZXRfY3JlZGVudGlhbF9zdGF0dXNANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjEzNQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCmdldF9jcmVkZW50aWFsX3N0YXR1c19hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToxNDAKICAgIC8vIHJldHVybiBTdHJpbmcoIlJFVk9LRUQiKQogICAgYnl0ZWMgMTYgLy8gIlJFVk9LRUQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToxMzUKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X2NyZWRlbnRpYWxfc3RhdHVzX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmRlbW9fc20uY29udHJhY3QuRGVtb1NtLmdldF9jcmVkZW50aWFsX3N0YXR1c0A0CgoKLy8gc21hcnRfY29udHJhY3RzLmRlbW9fc20uY29udHJhY3QuRGVtb1NtLmdldF9yZXF1ZXN0W3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X3JlcXVlc3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToxNDIKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjE0NgogICAgLy8gc2VsZi5fcmVxdWVzdF9tdXN0X2V4aXN0KHJlcXVlc3RfaWQpCiAgICBkdXAKICAgIGNhbGxzdWIgX3JlcXVlc3RfbXVzdF9leGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6MTQ4CiAgICAvLyBzZWxmLnJlcXVlc3Rfc3R1ZGVudFtyZXF1ZXN0X2lkXSwKICAgIGR1cAogICAgaXRvYgogICAgYnl0ZWMgOSAvLyAicnN0dSIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlcXVlc3Rfc3R1ZGVudCBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjE0OQogICAgLy8gc2VsZi5yZXF1ZXN0X2lzc3VlcltyZXF1ZXN0X2lkXSwKICAgIGJ5dGVjXzMgLy8gInJpc3MiCiAgICBkaWcgMgogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZXF1ZXN0X2lzc3VlciBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjE1MAogICAgLy8gc2VsZi5yZXF1ZXN0X2NlcnRpZmljYXRlX3R5cGVbcmVxdWVzdF9pZF0sCiAgICBieXRlYyAxMCAvLyAicmN0cCIKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlcXVlc3RfY2VydGlmaWNhdGVfdHlwZSBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjE1MQogICAgLy8gc2VsZi5yZXF1ZXN0X2NlcnRpZmljYXRlX25hbWVbcmVxdWVzdF9pZF0sCiAgICBieXRlYyAxMSAvLyAicmNubSIKICAgIGRpZyA0CiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlcXVlc3RfY2VydGlmaWNhdGVfbmFtZSBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjE1MgogICAgLy8gc2VsZi5yZXF1ZXN0X2NlcnRpZmljYXRlX2lkW3JlcXVlc3RfaWRdLAogICAgYnl0ZWMgMTIgLy8gInJjaWQiCiAgICBkaWcgNQogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZXF1ZXN0X2NlcnRpZmljYXRlX2lkIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6MTUzCiAgICAvLyBzZWxmLnJlcXVlc3Rfb3JnYW5pemF0aW9uW3JlcXVlc3RfaWRdLAogICAgYnl0ZWMgMTMgLy8gInJvcmciCiAgICBkaWcgNgogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZXF1ZXN0X29yZ2FuaXphdGlvbiBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjE1NAogICAgLy8gc2VsZi5yZXF1ZXN0X2V2aWRlbmNlX2hhc2hbcmVxdWVzdF9pZF0sCiAgICBieXRlYyAxNCAvLyAicmV2aCIKICAgIHVuY292ZXIgNwogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZXF1ZXN0X2V2aWRlbmNlX2hhc2ggZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToxNTUKICAgIC8vIHNlbGYuZ2V0X3JlcXVlc3Rfc3RhdHVzKHJlcXVlc3RfaWQpLAogICAgdW5jb3ZlciA3CiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy5kZW1vX3NtLmNvbnRyYWN0LkRlbW9TbS5nZXRfcmVxdWVzdF9zdGF0dXMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjE0MgogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdW5jb3ZlciA3CiAgICB1bmNvdmVyIDcKICAgIGNvbmNhdAogICAgZGlnIDYKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgNwogICAgY29uY2F0CiAgICBzd2FwCiAgICBwdXNoYnl0ZXMgMHgwMDRjCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBsZW4KICAgIHB1c2hpbnQgNzYKICAgICsKICAgIGRpZyA3CiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDgKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgdW5jb3ZlciAzCiAgICArCiAgICBkaWcgNwogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciA4CiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAzCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBsZW4KICAgIHVuY292ZXIgMwogICAgKwogICAgZGlnIDcKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgOAogICAgY29uY2F0CiAgICBkaWcgMQogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMwogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgMQogICAgbGVuCiAgICB1bmNvdmVyIDMKICAgICsKICAgIGRpZyA3CiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDgKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgdW5jb3ZlciAzCiAgICArCiAgICBkaWcgNwogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciA4CiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgdW5jb3ZlciA2CiAgICBjb25jYXQKICAgIHVuY292ZXIgNQogICAgY29uY2F0CiAgICB1bmNvdmVyIDQKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuZGVtb19zbS5jb250cmFjdC5EZW1vU20uX29ubHlfcmVnaXN0cnkoKSAtPiB2b2lkOgpfb25seV9yZWdpc3RyeToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZWxmLnJlZ2lzdHJ5LnZhbHVlCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWMgNSAvLyAicmVnaXN0cnkiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVnaXN0cnkgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZGVtb19zbS5jb250cmFjdC5EZW1vU20uX3JlcXVlc3RfbXVzdF9leGlzdChyZXF1ZXN0X2lkOiB1aW50NjQpIC0+IHZvaWQ6Cl9yZXF1ZXN0X211c3RfZXhpc3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToyNwogICAgLy8gZGVmIF9yZXF1ZXN0X211c3RfZXhpc3Qoc2VsZiwgcmVxdWVzdF9pZDogVUludDY0KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToyOAogICAgLy8gYXNzZXJ0IHNlbGYucmVxdWVzdF9leGlzdHMuZ2V0KHJlcXVlc3RfaWQsIGRlZmF1bHQ9RmFsc2UpCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGJ5dGVjIDggLy8gInJlIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzEgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmRlbW9fc20uY29udHJhY3QuRGVtb1NtLl9jcmVkZW50aWFsX211c3RfZXhpc3QoY3JlZGVudGlhbF9pZDogdWludDY0KSAtPiB2b2lkOgpfY3JlZGVudGlhbF9tdXN0X2V4aXN0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6MzAKICAgIC8vIGRlZiBfY3JlZGVudGlhbF9tdXN0X2V4aXN0KHNlbGYsIGNyZWRlbnRpYWxfaWQ6IFVJbnQ2NCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6MzEKICAgIC8vIGFzc2VydCBzZWxmLmNyZWRlbnRpYWxfZXhpc3RzLmdldChjcmVkZW50aWFsX2lkLCBkZWZhdWx0PUZhbHNlKQogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBieXRlYyAxNSAvLyAiY2UiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZGVtb19zbS5jb250cmFjdC5EZW1vU20uX29ubHlfYXNzaWduZWRfaXNzdWVyKHJlcXVlc3RfaWQ6IHVpbnQ2NCkgLT4gdm9pZDoKX29ubHlfYXNzaWduZWRfaXNzdWVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6MzMKICAgIC8vIGRlZiBfb25seV9hc3NpZ25lZF9pc3N1ZXIoc2VsZiwgcmVxdWVzdF9pZDogVUludDY0KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weTozNAogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gc2VsZi5yZXF1ZXN0X2lzc3VlcltyZXF1ZXN0X2lkXQogICAgdHhuIFNlbmRlcgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBieXRlY18zIC8vICJyaXNzIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZXF1ZXN0X2lzc3VlciBlbnRyeSBleGlzdHMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjM1CiAgICAvLyBhc3NlcnQgc2VsZi5pc3N1ZXJfYWN0aXZlLmdldChUeG4uc2VuZGVyLCBkZWZhdWx0PUZhbHNlKQogICAgYnl0ZWNfMiAvLyAiaWEiCiAgICB0eG4gU2VuZGVyCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZGVtb19zbS5jb250cmFjdC5EZW1vU20uZ2V0X3JlcXVlc3Rfc3RhdHVzKHJlcXVlc3RfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6CnNtYXJ0X2NvbnRyYWN0cy5kZW1vX3NtLmNvbnRyYWN0LkRlbW9TbS5nZXRfcmVxdWVzdF9zdGF0dXM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToxMzAtMTMxCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X3JlcXVlc3Rfc3RhdHVzKHNlbGYsIHJlcXVlc3RfaWQ6IFVJbnQ2NCkgLT4gU3RyaW5nOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weToxMzIKICAgIC8vIHNlbGYuX3JlcXVlc3RfbXVzdF9leGlzdChyZXF1ZXN0X2lkKQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIF9yZXF1ZXN0X211c3RfZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjEzMwogICAgLy8gcmV0dXJuIHNlbGYuX3N0YXR1c19uYW1lKHNlbGYucmVxdWVzdF9zdGF0dXNbcmVxdWVzdF9pZF0pCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gInJzIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZXF1ZXN0X3N0YXR1cyBlbnRyeSBleGlzdHMKICAgIGJ0b2kKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6MzgKICAgIC8vIGlmIHN0YXR1cyA9PSBVSW50NjQoMSk6CiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy5kZW1vX3NtLmNvbnRyYWN0LkRlbW9TbS5nZXRfcmVxdWVzdF9zdGF0dXNfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weTozOQogICAgLy8gcmV0dXJuIFN0cmluZygiUEVORElORyIpCiAgICBwdXNoYnl0ZXMgIlBFTkRJTkciCgpzbWFydF9jb250cmFjdHMuZGVtb19zbS5jb250cmFjdC5EZW1vU20uZ2V0X3JlcXVlc3Rfc3RhdHVzX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmRlbW9fc20uY29udHJhY3QuRGVtb1NtLl9zdGF0dXNfbmFtZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjEzMwogICAgLy8gcmV0dXJuIHNlbGYuX3N0YXR1c19uYW1lKHNlbGYucmVxdWVzdF9zdGF0dXNbcmVxdWVzdF9pZF0pCiAgICBzd2FwCiAgICByZXRzdWIKCnNtYXJ0X2NvbnRyYWN0cy5kZW1vX3NtLmNvbnRyYWN0LkRlbW9TbS5nZXRfcmVxdWVzdF9zdGF0dXNfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6NDAKICAgIC8vIGlmIHN0YXR1cyA9PSBVSW50NjQoMik6CiAgICBmcmFtZV9kaWcgMAogICAgaW50Y18yIC8vIDIKICAgID09CiAgICBieiBzbWFydF9jb250cmFjdHMuZGVtb19zbS5jb250cmFjdC5EZW1vU20uZ2V0X3JlcXVlc3Rfc3RhdHVzX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6NDEKICAgIC8vIHJldHVybiBTdHJpbmcoIlVOREVSIFJFVklFVyIpCiAgICBwdXNoYnl0ZXMgIlVOREVSIFJFVklFVyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjEzMwogICAgLy8gcmV0dXJuIHNlbGYuX3N0YXR1c19uYW1lKHNlbGYucmVxdWVzdF9zdGF0dXNbcmVxdWVzdF9pZF0pCiAgICBiIHNtYXJ0X2NvbnRyYWN0cy5kZW1vX3NtLmNvbnRyYWN0LkRlbW9TbS5nZXRfcmVxdWVzdF9zdGF0dXNfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuZGVtb19zbS5jb250cmFjdC5EZW1vU20uX3N0YXR1c19uYW1lQDEwCgpzbWFydF9jb250cmFjdHMuZGVtb19zbS5jb250cmFjdC5EZW1vU20uZ2V0X3JlcXVlc3Rfc3RhdHVzX2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBpZiBzdGF0dXMgPT0gVUludDY0KDMpOgogICAgZnJhbWVfZGlnIDAKICAgIHB1c2hpbnQgMwogICAgPT0KICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy5kZW1vX3NtLmNvbnRyYWN0LkRlbW9TbS5nZXRfcmVxdWVzdF9zdGF0dXNfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weTo0MwogICAgLy8gcmV0dXJuIFN0cmluZygiVkVSSUZJRUQiKQogICAgcHVzaGJ5dGVzICJWRVJJRklFRCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjEzMwogICAgLy8gcmV0dXJuIHNlbGYuX3N0YXR1c19uYW1lKHNlbGYucmVxdWVzdF9zdGF0dXNbcmVxdWVzdF9pZF0pCiAgICBiIHNtYXJ0X2NvbnRyYWN0cy5kZW1vX3NtLmNvbnRyYWN0LkRlbW9TbS5nZXRfcmVxdWVzdF9zdGF0dXNfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuZGVtb19zbS5jb250cmFjdC5EZW1vU20uX3N0YXR1c19uYW1lQDEwCgpzbWFydF9jb250cmFjdHMuZGVtb19zbS5jb250cmFjdC5EZW1vU20uZ2V0X3JlcXVlc3Rfc3RhdHVzX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjQ0CiAgICAvLyBpZiBzdGF0dXMgPT0gVUludDY0KDQpOgogICAgZnJhbWVfZGlnIDAKICAgIHB1c2hpbnQgNAogICAgPT0KICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy5kZW1vX3NtLmNvbnRyYWN0LkRlbW9TbS5nZXRfcmVxdWVzdF9zdGF0dXNfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGVtb19zbS9jb250cmFjdC5weTo0NQogICAgLy8gcmV0dXJuIFN0cmluZygiUkVKRUNURUQiKQogICAgcHVzaGJ5dGVzICJSRUpFQ1RFRCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjEzMwogICAgLy8gcmV0dXJuIHNlbGYuX3N0YXR1c19uYW1lKHNlbGYucmVxdWVzdF9zdGF0dXNbcmVxdWVzdF9pZF0pCiAgICBiIHNtYXJ0X2NvbnRyYWN0cy5kZW1vX3NtLmNvbnRyYWN0LkRlbW9TbS5nZXRfcmVxdWVzdF9zdGF0dXNfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuZGVtb19zbS5jb250cmFjdC5EZW1vU20uX3N0YXR1c19uYW1lQDEwCgpzbWFydF9jb250cmFjdHMuZGVtb19zbS5jb250cmFjdC5EZW1vU20uZ2V0X3JlcXVlc3Rfc3RhdHVzX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kZW1vX3NtL2NvbnRyYWN0LnB5OjQ2CiAgICAvLyByZXR1cm4gU3RyaW5nKCJSRVZPS0VEIikKICAgIGJ5dGVjIDE2IC8vICJSRVZPS0VEIgogICAgLy8gc21hcnRfY29udHJhY3RzL2RlbW9fc20vY29udHJhY3QucHk6MTMzCiAgICAvLyByZXR1cm4gc2VsZi5fc3RhdHVzX25hbWUoc2VsZi5yZXF1ZXN0X3N0YXR1c1tyZXF1ZXN0X2lkXSkKICAgIGIgc21hcnRfY29udHJhY3RzLmRlbW9fc20uY29udHJhY3QuRGVtb1NtLmdldF9yZXF1ZXN0X3N0YXR1c19hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5kZW1vX3NtLmNvbnRyYWN0LkRlbW9TbS5fc3RhdHVzX25hbWVAMTAK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAQACCCYRAnJzBBUffHUCaWEEcmlzcwJjYQhyZWdpc3RyeQJpcwZBQ1RJVkUCcmUEcnN0dQRyY3RwBHJjbm0EcmNpZARyb3JnBHJldmgCY2UHUkVWT0tFRDEYQAAFJwUxAGcxG0EAYzEZFEQxGESCDAQCvs4RBHoCXrkEErt8PQQTK9PABCZYCMsEItY82QSjpbScBPuJBikEmh2nUQTZ1HT3BOsxvegEZMIvGDYaAI4MAAkAMgB+AKIA1gG0AdUCOQJvAqkCwwLwADEZFDEYFBBDNhoBSSNZJAhLARUSRFcCAIAHSGVsbG8sIExQSRUWVwYCTFApTFCwIkM2GgFJFYEgEkQ2GgJJI1kkCEsBFRJEVwIANhoDSSNZJAhLARUSRFcCAIgDgypLA1AiFr+AAmlvSwNQSbxITwK/JwZPAlBJvEhMvyJDNhoBSRWBIBJENhoCSRUiEkQjU4gDTSpPAlBJvUUBREwWvyJDNhoBSRWBIBJEKkxQvkwXI0xPAk1AABiACElOQUNUSVZFSRUWVwYCTFApTFCwIkMnB0L/7TYaAUkVJRJEFzYaAkkVgSASRDYaA0kjWSQISwEVEkRXAgA2GgRJI1kkCEsBFRJEVwIANhoFSSNZJAhLARUSRFcCADYaBkkjWSQISwEVEkRXAgA2GgdJI1kkCEsBFRJEVwIATwYWJwhLAVBJvkwXI0xPAk0URCpLCFC+TBcjTE8CTUQnBksIUL5ESwcSRCIWvyhLAVAiFr8xACcJSwJQTL8rSwFQTwe/JwpLAVBJvEhPBr8nC0sBUEm8SE8FvycMSwFQSbxITwS/Jw1LAVBJvEhPA78nDkxQSbxITL8iQzYaAUkVJRJEF0mIAipJiAJOFihMUEm+RBciEkQkFr8iQzYaAUkVJRJEFzYaAkkVJRJEF0sBiAH/SwGIAiIWSU4CJw9MUElOAr5MFyNMTwJNFEQWKExQSb5EFyISQAAJSb5EFyQSQQAZIkSBAxZLAUy/IhZLAksBvycESwRQTL8iQyNC/+Q2GgFJFSUSRBdJiAGlSYgByRYoTFBJvkQXIhJAAAlJvkQXJBJBAAsiRIEEFksBTL8iQyNC//I2GgFJFSUSRBc2GgJJFSUSRBdLAYgBeUmIAWFJiAGFFihMUEm+RBeBAxJETBYnBExQIxa/gQUWvyJDNhoBSRUlEkQXiAF7SRUWVwYCTFApTFCwIkM2GgFJFSUSRBdJiAEvFicETFC+RBdBABAnB0kVFlcGAkxQKUxQsCJDJxBC/+02GgFJFSUSRBdJiADuSRYnCUsBUL5EK0sCUL5EJwpLA1C+RCcLSwRQvkQnDEsFUL5EJw1LBlC+RCcOTwdQvkRPB4gA/E8HTwdQSwYVFlcGAk8HUEyAAgBMUEsBFYFMCEsHFRZXBgJPCFBLARZXBgJPA0xQSwEVTwMISwcVFlcGAk8IUEsBFlcGAk8DTFBLARVPAwhLBxUWVwYCTwhQSwEWVwYCTwNMUEsBFU8DCEsHFRZXBgJPCFBLARZXBgJPA0xQSwEVTwMISwcVFlcGAk8IUEwWVwYCTwJMUE8GUE8FUE8EUE8DUE8CUExQKUxQsCJDMQAjJwVlRBJEiYoBAIv/FicITFC+TBcjTE8CTUSJigEAi/8WJw9MUL5MFyNMTwJNRImKAQAxAIv/FitMUL5EEkQqMQBQvkwXI0xPAk1EiYoBAYv/iP+zi/8WKExQvkQXSSISQQALgAdQRU5ESU5HTImLACQSQQARgAxVTkRFUiBSRVZJRVdC/+aLAIEDEkEADYAIVkVSSUZJRURC/9GLAIEEEkEADYAIUkVKRUNURURC/7wnEEL/tw==", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 8, "patch": 1 } }, "events": [], "templateVariables": {} }