{ "name": "TruthRegistry", "structs": { "ZKProofStatus": [ { "name": "proof_id", "type": "byte[]" }, { "name": "threshold", "type": "uint64" }, { "name": "proof_hash", "type": "uint8[32]" }, { "name": "is_verified", "type": "bool" }, { "name": "submitted_at_round", "type": "uint64" } ] }, "methods": [ { "name": "create", "args": [ { "type": "uint64", "name": "identity_registry_app_id" } ], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "set_verifier", "args": [ { "type": "uint64", "name": "verifier_app_id" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "register_anchor", "args": [ { "type": "byte[]", "name": "trait_id" }, { "type": "byte[]", "name": "commitment" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "verify_zk_claim", "args": [ { "type": "byte[]", "name": "trait_id" }, { "type": "byte[]", "name": "proof_id" }, { "type": "uint64", "name": "threshold" }, { "type": "uint8[32]", "name": "proof_hash" } ], "returns": { "type": "bool" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Verify and settle a ZK claim.\nThe claim is verified off-chain by the institution and then anchored here.", "events": [], "recommendations": {} }, { "name": "get_proof_status", "args": [ { "type": "byte[]", "name": "proof_id" } ], "returns": { "type": "(byte[],uint64,uint8[32],bool,uint64)", "struct": "ZKProofStatus" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "is_proof_verified", "args": [ { "type": "byte[]", "name": "proof_id" } ], "returns": { "type": "bool" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_commitment", "args": [ { "type": "byte[]", "name": "trait_id" } ], "returns": { "type": "byte[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "is_trait_registered", "args": [ { "type": "byte[]", "name": "trait_id" } ], "returns": { "type": "bool" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_anchor_count", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 3, "bytes": 0 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "identity_registry_app_id": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "aWRlbnRpdHlfcmVnaXN0cnlfYXBwX2lk" }, "anchor_count": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YW5jaG9yX2NvdW50" }, "verifier_app_id": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dmVyaWZpZXJfYXBwX2lk" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "anchors": { "keyType": "byte[]", "valueType": "byte[]", "prefix": "YW5jaG9yXw==" }, "proofs": { "keyType": "byte[]", "valueType": "ZKProofStatus", "prefix": "cHJvb2Zf" } } } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 258, 333 ], "errorMessage": "Caller must be a registered institution" }, { "pc": [ 219 ], "errorMessage": "Only creator can set verifier" }, { "pc": [ 405 ], "errorMessage": "Proof not found" }, { "pc": [ 268 ], "errorMessage": "Trait ID already registered" }, { "pc": [ 341, 480 ], "errorMessage": "Trait ID not registered" }, { "pc": [ 569 ], "errorMessage": "application log value is not the result of an ABI return" }, { "pc": [ 277, 522 ], "errorMessage": "check self.anchor_count exists" }, { "pc": [ 538 ], "errorMessage": "check self.identity_registry_app_id exists" }, { "pc": [ 449 ], "errorMessage": "index out of bounds" }, { "pc": [ 232, 245, 290, 303, 389, 419, 465, 494 ], "errorMessage": "invalid array length header" }, { "pc": [ 577 ], "errorMessage": "invalid number of bytes for arc4.bool" }, { "pc": [ 239, 252, 297, 310, 396, 426, 472, 501 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 327 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 195, 213, 318 ], "errorMessage": "invalid number of bytes for arc4.uint64" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMiA4CiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImFuY2hvcl9jb3VudCIgImFuY2hvcl8iIDB4MDAgImlkZW50aXR5X3JlZ2lzdHJ5X2FwcF9pZCIgInByb29mXyIgInZlcmlmaWVyX2FwcF9pZCIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnV0aF9yZWdpc3RyeS9jb250cmFjdC5weToyNwogICAgLy8gc2VsZi5pZGVudGl0eV9yZWdpc3RyeV9hcHBfaWQgPSBVSW50NjQoMCkKICAgIGJ5dGVjIDQgLy8gImlkZW50aXR5X3JlZ2lzdHJ5X2FwcF9pZCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXRoX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI4CiAgICAvLyBzZWxmLmFuY2hvcl9jb3VudCA9IFVJbnQ2NCgwKQogICAgYnl0ZWNfMSAvLyAiYW5jaG9yX2NvdW50IgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1dGhfcmVnaXN0cnkvY29udHJhY3QucHk6MzAKICAgIC8vIHNlbGYudmVyaWZpZXJfYXBwX2lkID0gVUludDY0KDApCiAgICBieXRlYyA2IC8vICJ2ZXJpZmllcl9hcHBfaWQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXRoX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI1CiAgICAvLyBjbGFzcyBUcnV0aFJlZ2lzdHJ5KEFSQzRDb250cmFjdCk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBieiBtYWluX2NyZWF0ZV9Ob09wQDE0CiAgICBwdXNoYnl0ZXNzIDB4ZDY1ZGIxOTMgMHgyNDE2OGVhMyAweGQxNWUzNDkxIDB4YTFhZWM4YWYgMHg1NTA0YjYwYSAweDA0NGMyMWFhIDB4ZThmZTY4MzMgMHhiMjc1YjUzOSAvLyBtZXRob2QgInNldF92ZXJpZmllcih1aW50NjQpdm9pZCIsIG1ldGhvZCAicmVnaXN0ZXJfYW5jaG9yKGJ5dGVbXSxieXRlW10pdm9pZCIsIG1ldGhvZCAidmVyaWZ5X3prX2NsYWltKGJ5dGVbXSxieXRlW10sdWludDY0LHVpbnQ4WzMyXSlib29sIiwgbWV0aG9kICJnZXRfcHJvb2Zfc3RhdHVzKGJ5dGVbXSkoYnl0ZVtdLHVpbnQ2NCx1aW50OFszMl0sYm9vbCx1aW50NjQpIiwgbWV0aG9kICJpc19wcm9vZl92ZXJpZmllZChieXRlW10pYm9vbCIsIG1ldGhvZCAiZ2V0X2NvbW1pdG1lbnQoYnl0ZVtdKWJ5dGVbXSIsIG1ldGhvZCAiaXNfdHJhaXRfcmVnaXN0ZXJlZChieXRlW10pYm9vbCIsIG1ldGhvZCAiZ2V0X2FuY2hvcl9jb3VudCgpdWludDY0IgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggc2V0X3ZlcmlmaWVyIHJlZ2lzdGVyX2FuY2hvciB2ZXJpZnlfemtfY2xhaW0gZ2V0X3Byb29mX3N0YXR1cyBpc19wcm9vZl92ZXJpZmllZCBnZXRfY29tbWl0bWVudCBpc190cmFpdF9yZWdpc3RlcmVkIGdldF9hbmNob3JfY291bnQKICAgIGVycgoKbWFpbl9jcmVhdGVfTm9PcEAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnV0aF9yZWdpc3RyeS9jb250cmFjdC5weToyNQogICAgLy8gY2xhc3MgVHJ1dGhSZWdpc3RyeShBUkM0Q29udHJhY3QpOgogICAgcHVzaGJ5dGVzIDB4MjQwZDJmNjcgLy8gbWV0aG9kICJjcmVhdGUodWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGUKICAgIGVycgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy50cnV0aF9yZWdpc3RyeS5jb250cmFjdC5UcnV0aFJlZ2lzdHJ5LmNyZWF0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnV0aF9yZWdpc3RyeS9jb250cmFjdC5weTozMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1dGhfcmVnaXN0cnkvY29udHJhY3QucHk6MzUKICAgIC8vIHNlbGYuaWRlbnRpdHlfcmVnaXN0cnlfYXBwX2lkID0gaWRlbnRpdHlfcmVnaXN0cnlfYXBwX2lkLm5hdGl2ZQogICAgYnRvaQogICAgYnl0ZWMgNCAvLyAiaWRlbnRpdHlfcmVnaXN0cnlfYXBwX2lkIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnV0aF9yZWdpc3RyeS9jb250cmFjdC5weTozNgogICAgLy8gc2VsZi5hbmNob3JfY291bnQgPSBVSW50NjQoMCkKICAgIGJ5dGVjXzEgLy8gImFuY2hvcl9jb3VudCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXRoX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMudHJ1dGhfcmVnaXN0cnkuY29udHJhY3QuVHJ1dGhSZWdpc3RyeS5zZXRfdmVyaWZpZXJbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRfdmVyaWZpZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1dGhfcmVnaXN0cnkvY29udHJhY3QucHk6MzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXRoX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQwCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBHbG9iYWwuY3JlYXRvcl9hZGRyZXNzLCAiT25seSBjcmVhdG9yIGNhbiBzZXQgdmVyaWZpZXIiCiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gT25seSBjcmVhdG9yIGNhbiBzZXQgdmVyaWZpZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnV0aF9yZWdpc3RyeS9jb250cmFjdC5weTo0MQogICAgLy8gc2VsZi52ZXJpZmllcl9hcHBfaWQgPSB2ZXJpZmllcl9hcHBfaWQubmF0aXZlCiAgICBidG9pCiAgICBieXRlYyA2IC8vICJ2ZXJpZmllcl9hcHBfaWQiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXRoX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMudHJ1dGhfcmVnaXN0cnkuY29udHJhY3QuVHJ1dGhSZWdpc3RyeS5yZWdpc3Rlcl9hbmNob3Jbcm91dGluZ10oKSAtPiB2b2lkOgpyZWdpc3Rlcl9hbmNob3I6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1dGhfcmVnaXN0cnkvY29udHJhY3QucHk6NTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXRoX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU4CiAgICAvLyBhc3NlcnQgc2VsZi5faXNfcmVnaXN0ZXJlZF9pbnN0aXR1dGlvbihhcmM0LkFkZHJlc3MoVHhuLnNlbmRlci5ieXRlcykpLCAoCiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIF9pc19yZWdpc3RlcmVkX2luc3RpdHV0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1dGhfcmVnaXN0cnkvY29udHJhY3QucHk6NTgtNjAKICAgIC8vIGFzc2VydCBzZWxmLl9pc19yZWdpc3RlcmVkX2luc3RpdHV0aW9uKGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyLmJ5dGVzKSksICgKICAgIC8vICAgICAiQ2FsbGVyIG11c3QgYmUgYSByZWdpc3RlcmVkIGluc3RpdHV0aW9uIgogICAgLy8gKQogICAgYXNzZXJ0IC8vIENhbGxlciBtdXN0IGJlIGEgcmVnaXN0ZXJlZCBpbnN0aXR1dGlvbgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXRoX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYyCiAgICAvLyBhc3NlcnQgdHJhaXRfaWQgbm90IGluIHNlbGYuYW5jaG9ycywgIlRyYWl0IElEIGFscmVhZHkgcmVnaXN0ZXJlZCIKICAgIGJ5dGVjXzIgLy8gImFuY2hvcl8iCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBUcmFpdCBJRCBhbHJlYWR5IHJlZ2lzdGVyZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnV0aF9yZWdpc3RyeS9jb250cmFjdC5weTo2NAogICAgLy8gc2VsZi5hbmNob3JzW3RyYWl0X2lkLmNvcHkoKV0gPSBjb21taXRtZW50LmNvcHkoKQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnV0aF9yZWdpc3RyeS9jb250cmFjdC5weTo2NQogICAgLy8gc2VsZi5hbmNob3JfY291bnQgKz0gVUludDY0KDEpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiYW5jaG9yX2NvdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFuY2hvcl9jb3VudCBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBieXRlY18xIC8vICJhbmNob3JfY291bnQiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXRoX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjUyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMudHJ1dGhfcmVnaXN0cnkuY29udHJhY3QuVHJ1dGhSZWdpc3RyeS52ZXJpZnlfemtfY2xhaW1bcm91dGluZ10oKSAtPiB2b2lkOgp2ZXJpZnlfemtfY2xhaW06CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1dGhfcmVnaXN0cnkvY29udHJhY3QucHk6NjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXRoX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojc5CiAgICAvLyBzZW5kZXIgPSBUeG4uc2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1dGhfcmVnaXN0cnkvY29udHJhY3QucHk6ODEtODIKICAgIC8vICMgMS4gRW5zdXJlIGNhbGxlciBpcyBhIHJlZ2lzdGVyZWQgaW5zdGl0dXRpb24KICAgIC8vIGFzc2VydCBzZWxmLl9pc19yZWdpc3RlcmVkX2luc3RpdHV0aW9uKGFyYzQuQWRkcmVzcyhzZW5kZXIuYnl0ZXMpKSwgIkNhbGxlciBtdXN0IGJlIGEgcmVnaXN0ZXJlZCBpbnN0aXR1dGlvbiIKICAgIGNhbGxzdWIgX2lzX3JlZ2lzdGVyZWRfaW5zdGl0dXRpb24KICAgIGFzc2VydCAvLyBDYWxsZXIgbXVzdCBiZSBhIHJlZ2lzdGVyZWQgaW5zdGl0dXRpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnV0aF9yZWdpc3RyeS9jb250cmFjdC5weTo4NC04NQogICAgLy8gIyAyLiBFbnN1cmUgdGhlIHRyYWl0IGlzIGFjdHVhbGx5IHJlZ2lzdGVyZWQgYW5kIG1hdGNoZXMgdGhlIGNvbW1pdG1lbnQKICAgIC8vIGFzc2VydCB0cmFpdF9pZCBpbiBzZWxmLmFuY2hvcnMsICJUcmFpdCBJRCBub3QgcmVnaXN0ZXJlZCIKICAgIGJ5dGVjXzIgLy8gImFuY2hvcl8iCiAgICB1bmNvdmVyIDQKICAgIGNvbmNhdAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gVHJhaXQgSUQgbm90IHJlZ2lzdGVyZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnV0aF9yZWdpc3RyeS9jb250cmFjdC5weTo5MwogICAgLy8gc3VibWl0dGVkX2F0X3JvdW5kPWFyYzQuVUludDY0KEdsb2JhbC5yb3VuZCksCiAgICBnbG9iYWwgUm91bmQKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnV0aF9yZWdpc3RyeS9jb250cmFjdC5weTo4Ny05NAogICAgLy8gIyAzLiBTdG9yZSB0aGUgdmVyaWZpY2F0aW9uIHN0YXR1cwogICAgLy8gc3RhdHVzID0gWktQcm9vZlN0YXR1cygKICAgIC8vICAgICBwcm9vZl9pZD1wcm9vZl9pZC5jb3B5KCksCiAgICAvLyAgICAgdGhyZXNob2xkPXRocmVzaG9sZCwKICAgIC8vICAgICBwcm9vZl9oYXNoPXByb29mX2hhc2guY29weSgpLAogICAgLy8gICAgIGlzX3ZlcmlmaWVkPWFyYzQuQm9vbChUcnVlKSwKICAgIC8vICAgICBzdWJtaXR0ZWRfYXRfcm91bmQ9YXJjNC5VSW50NjQoR2xvYmFsLnJvdW5kKSwKICAgIC8vICkKICAgIHB1c2hieXRlcyAweDAwMzMKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXRoX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjkyCiAgICAvLyBpc192ZXJpZmllZD1hcmM0LkJvb2woVHJ1ZSksCiAgICBwdXNoYnl0ZXMgMHg4MAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXRoX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojg3LTk0CiAgICAvLyAjIDMuIFN0b3JlIHRoZSB2ZXJpZmljYXRpb24gc3RhdHVzCiAgICAvLyBzdGF0dXMgPSBaS1Byb29mU3RhdHVzKAogICAgLy8gICAgIHByb29mX2lkPXByb29mX2lkLmNvcHkoKSwKICAgIC8vICAgICB0aHJlc2hvbGQ9dGhyZXNob2xkLAogICAgLy8gICAgIHByb29mX2hhc2g9cHJvb2ZfaGFzaC5jb3B5KCksCiAgICAvLyAgICAgaXNfdmVyaWZpZWQ9YXJjNC5Cb29sKFRydWUpLAogICAgLy8gICAgIHN1Ym1pdHRlZF9hdF9yb3VuZD1hcmM0LlVJbnQ2NChHbG9iYWwucm91bmQpLAogICAgLy8gKQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnV0aF9yZWdpc3RyeS9jb250cmFjdC5weTo5NQogICAgLy8gc2VsZi5wcm9vZnNbcHJvb2ZfaWQuY29weSgpXSA9IHN0YXR1cy5jb3B5KCkKICAgIGJ5dGVjIDUgLy8gInByb29mXyIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXRoX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1ODAKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy50cnV0aF9yZWdpc3RyeS5jb250cmFjdC5UcnV0aFJlZ2lzdHJ5LmdldF9wcm9vZl9zdGF0dXNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfcHJvb2Zfc3RhdHVzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXRoX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojk5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnV0aF9yZWdpc3RyeS9jb250cmFjdC5weToxMDEKICAgIC8vIGFzc2VydCBwcm9vZl9pZCBpbiBzZWxmLnByb29mcywgIlByb29mIG5vdCBmb3VuZCIKICAgIGJ5dGVjIDUgLy8gInByb29mXyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBQcm9vZiBub3QgZm91bmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnV0aF9yZWdpc3RyeS9jb250cmFjdC5weToxMDIKICAgIC8vIHJldHVybiBzZWxmLnByb29mc1twcm9vZl9pZC5jb3B5KCldLmNvcHkoKQogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1dGhfcmVnaXN0cnkvY29udHJhY3QucHk6OTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy50cnV0aF9yZWdpc3RyeS5jb250cmFjdC5UcnV0aFJlZ2lzdHJ5LmlzX3Byb29mX3ZlcmlmaWVkW3JvdXRpbmddKCkgLT4gdm9pZDoKaXNfcHJvb2ZfdmVyaWZpZWQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1dGhfcmVnaXN0cnkvY29udHJhY3QucHk6MTA0CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnV0aF9yZWdpc3RyeS9jb250cmFjdC5weToxMDYKICAgIC8vIGlmIHByb29mX2lkIG5vdCBpbiBzZWxmLnByb29mczoKICAgIGJ5dGVjIDUgLy8gInByb29mXyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJueiBpc19wcm9vZl92ZXJpZmllZF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnV0aF9yZWdpc3RyeS9jb250cmFjdC5weToxMDcKICAgIC8vIHJldHVybiBhcmM0LkJvb2woRmFsc2UpCiAgICBieXRlY18zIC8vIDB4MDAKCmlzX3Byb29mX3ZlcmlmaWVkX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLnRydXRoX3JlZ2lzdHJ5LmNvbnRyYWN0LlRydXRoUmVnaXN0cnkuaXNfcHJvb2ZfdmVyaWZpZWRANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnV0aF9yZWdpc3RyeS9jb250cmFjdC5weToxMDQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKaXNfcHJvb2ZfdmVyaWZpZWRfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXRoX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEwOAogICAgLy8gcmV0dXJuIHNlbGYucHJvb2ZzW3Byb29mX2lkLmNvcHkoKV0uaXNfdmVyaWZpZWQKICAgIGR1cAogICAgcHVzaGludCA0MgogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0IC8vIG9uIGVycm9yOiBpbmRleCBvdXQgb2YgYm91bmRzCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXRoX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEwNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGlzX3Byb29mX3ZlcmlmaWVkX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLnRydXRoX3JlZ2lzdHJ5LmNvbnRyYWN0LlRydXRoUmVnaXN0cnkuaXNfcHJvb2ZfdmVyaWZpZWRANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy50cnV0aF9yZWdpc3RyeS5jb250cmFjdC5UcnV0aFJlZ2lzdHJ5LmdldF9jb21taXRtZW50W3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X2NvbW1pdG1lbnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1dGhfcmVnaXN0cnkvY29udHJhY3QucHk6MTEwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnV0aF9yZWdpc3RyeS9jb250cmFjdC5weToxMTIKICAgIC8vIGFzc2VydCB0cmFpdF9pZCBpbiBzZWxmLmFuY2hvcnMsICJUcmFpdCBJRCBub3QgcmVnaXN0ZXJlZCIKICAgIGJ5dGVjXzIgLy8gImFuY2hvcl8iCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gVHJhaXQgSUQgbm90IHJlZ2lzdGVyZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnV0aF9yZWdpc3RyeS9jb250cmFjdC5weToxMTMKICAgIC8vIHJldHVybiBzZWxmLmFuY2hvcnNbdHJhaXRfaWQuY29weSgpXQogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1dGhfcmVnaXN0cnkvY29udHJhY3QucHk6MTEwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMudHJ1dGhfcmVnaXN0cnkuY29udHJhY3QuVHJ1dGhSZWdpc3RyeS5pc190cmFpdF9yZWdpc3RlcmVkW3JvdXRpbmddKCkgLT4gdm9pZDoKaXNfdHJhaXRfcmVnaXN0ZXJlZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnV0aF9yZWdpc3RyeS9jb250cmFjdC5weToxMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXRoX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExNwogICAgLy8gcmV0dXJuIGFyYzQuQm9vbCh0cmFpdF9pZCBpbiBzZWxmLmFuY2hvcnMpCiAgICBieXRlY18yIC8vICJhbmNob3JfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1dGhfcmVnaXN0cnkvY29udHJhY3QucHk6MTE1CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMudHJ1dGhfcmVnaXN0cnkuY29udHJhY3QuVHJ1dGhSZWdpc3RyeS5nZXRfYW5jaG9yX2NvdW50W3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X2FuY2hvcl9jb3VudDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnV0aF9yZWdpc3RyeS9jb250cmFjdC5weToxMjEKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChzZWxmLmFuY2hvcl9jb3VudCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJhbmNob3JfY291bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYW5jaG9yX2NvdW50IGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXRoX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnRydXRoX3JlZ2lzdHJ5LmNvbnRyYWN0LlRydXRoUmVnaXN0cnkuX2lzX3JlZ2lzdGVyZWRfaW5zdGl0dXRpb24oYWRkcjogYnl0ZXMpIC0+IHVpbnQ2NDoKX2lzX3JlZ2lzdGVyZWRfaW5zdGl0dXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1dGhfcmVnaXN0cnkvY29udHJhY3QucHk6NDMtNDQKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgX2lzX3JlZ2lzdGVyZWRfaW5zdGl0dXRpb24oc2VsZiwgYWRkcjogYXJjNC5BZGRyZXNzKSAtPiBib29sOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1dGhfcmVnaXN0cnkvY29udHJhY3QucHk6NDUtNDkKICAgIC8vIGlzX3JlZ2lzdGVyZWQsIF90eG4gPSBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIElkZW50aXR5UmVnaXN0cnkuaXNfcmVnaXN0ZXJlZCwKICAgIC8vICAgICBhZGRyLAogICAgLy8gICAgIGFwcF9pZD1BcHBsaWNhdGlvbihzZWxmLmlkZW50aXR5X3JlZ2lzdHJ5X2FwcF9pZCksCiAgICAvLyApCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1dGhfcmVnaXN0cnkvY29udHJhY3QucHk6NDgKICAgIC8vIGFwcF9pZD1BcHBsaWNhdGlvbihzZWxmLmlkZW50aXR5X3JlZ2lzdHJ5X2FwcF9pZCksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAiaWRlbnRpdHlfcmVnaXN0cnlfYXBwX2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmlkZW50aXR5X3JlZ2lzdHJ5X2FwcF9pZCBleGlzdHMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXRoX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ2CiAgICAvLyBJZGVudGl0eVJlZ2lzdHJ5LmlzX3JlZ2lzdGVyZWQsCiAgICBwdXNoYnl0ZXMgMHg5MTljMDJkZiAvLyBtZXRob2QgImlzX3JlZ2lzdGVyZWQoYWRkcmVzcylib29sIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnV0aF9yZWdpc3RyeS9jb250cmFjdC5weTo0NS00OQogICAgLy8gaXNfcmVnaXN0ZXJlZCwgX3R4biA9IGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgSWRlbnRpdHlSZWdpc3RyeS5pc19yZWdpc3RlcmVkLAogICAgLy8gICAgIGFkZHIsCiAgICAvLyAgICAgYXBwX2lkPUFwcGxpY2F0aW9uKHNlbGYuaWRlbnRpdHlfcmVnaXN0cnlfYXBwX2lkKSwKICAgIC8vICkKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBsb2cgdmFsdWUgaXMgbm90IHRoZSByZXN1bHQgb2YgYW4gQUJJIHJldHVybgogICAgZXh0cmFjdCA0IDAKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1dGhfcmVnaXN0cnkvY29udHJhY3QucHk6NTAKICAgIC8vIHJldHVybiBib29sKGlzX3JlZ2lzdGVyZWQpCiAgICBieXRlY18zIC8vIDB4MDAKICAgICE9CiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAAECCCYHBBUffHUMYW5jaG9yX2NvdW50B2FuY2hvcl8BABhpZGVudGl0eV9yZWdpc3RyeV9hcHBfaWQGcHJvb2ZfD3ZlcmlmaWVyX2FwcF9pZDEYQAALJwQiZykiZycGImcxGRREMRhBAECCCATWXbGTBCQWjqME0V40kQShrsivBFUEtgoEBEwhqgTo/mgzBLJ1tTk2GgCOCAAhADYAcADTAPEBHwE8AVoAgAQkDS9nNhoAjgEAAQA2GgFJFSUSRBcnBExnKSJnI0M2GgFJFSUSRDEAMgkSRBcnBkxnI0M2GgFJIlkkCEsBFRJENhoCSSJZJAhLARUSRDEAiAEQRCpPAlBJvUUBFERJvEhMvyIpZUQjCClMZyNDNhoBSSJZJAhLARUSRDYaAkkiWSQISwEVEkQ2GgNJFSUSRDYaBEkVgSASRDEAiADFRCpPBFC9RQFEMgYWgAIAM08DUE8CUIABgFBMUEsBUCcFTwJQSbxITL+ABRUffHWAsCNDNhoBSSJZJAhLARUSRCcFTFBJvUUBRL5IKExQsCNDNhoBSSJZJAhLARUSRCcFTFBJvUUBQAAHKyhMULAjQ0mBKiO6IlMrIk8CVEL/6zYaAUkiWSQISwEVEkQqTFBJvUUBRL5IKExQsCNDNhoBSSJZJAhLARUSRCpMUL1FASsiTwJUKExQsCNDIillRBYoTFCwI0OKAQGxIicEZUSyGIAEkZwC37Iai/+yGoEGshAisgGztD5JVwAEKBJEVwQASRUjEkQrE4k=", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 8, "patch": 0 } }, "events": [], "templateVariables": {} }