{ "name": "EscrowContract", "structs": { "EscrowRecord": [ { "name": "job_id", "type": "string" }, { "name": "payer", "type": "address" }, { "name": "provider", "type": "address" }, { "name": "amount", "type": "uint64" }, { "name": "status", "type": "string" }, { "name": "created_at", "type": "uint64" }, { "name": "released_at", "type": "uint64" } ] }, "methods": [ { "name": "initialize", "args": [ { "type": "address", "name": "admin" }, { "type": "uint64", "name": "reputation_app_id" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Initialize the escrow admin and reputation contract id.", "events": [], "recommendations": {} }, { "name": "create_escrow", "args": [ { "type": "string", "name": "job_id" }, { "type": "address", "name": "provider" }, { "type": "uint64", "name": "amount" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Create a new escrow for a job.", "events": [], "recommendations": {} }, { "name": "release_payment", "args": [ { "type": "string", "name": "job_id" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Release escrow funds to the provider and update reputation.", "events": [], "recommendations": {} }, { "name": "refund", "args": [ { "type": "string", "name": "job_id" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Refund the escrow amount to the payer.", "events": [], "recommendations": {} }, { "name": "cancel", "args": [ { "type": "string", "name": "job_id" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Cancel an escrow before it is released.", "events": [], "recommendations": {} }, { "name": "get_escrow", "args": [ { "type": "string", "name": "job_id" } ], "returns": { "type": "(string,address,address,uint64,string,uint64,uint64)", "struct": "EscrowRecord" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "Return the escrow record for the specified job id.", "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "desc": "Secure escrow contract for AI commerce payments.", "networks": {}, "state": { "schema": { "global": { "ints": 1, "bytes": 1 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "admin": { "keyType": "AVMString", "valueType": "address", "key": "YWRtaW4=" }, "reputation_app_id": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cmVwdXRhdGlvbl9hcHBfaWQ=" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "escrows": { "keyType": "string", "valueType": "EscrowRecord", "prefix": "ZXNjcm93cw==" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 159 ], "errorMessage": "already initialized" }, { "pc": [ 489 ], "errorMessage": "cannot cancel escrow" }, { "pc": [ 415 ], "errorMessage": "cannot refund escrow" }, { "pc": [ 337 ], "errorMessage": "cannot release escrow" }, { "pc": [ 155 ], "errorMessage": "check self.admin exists" }, { "pc": [ 221 ], "errorMessage": "duplicate job id" }, { "pc": [ 174, 299, 377, 451, 526 ], "errorMessage": "invalid array length header" }, { "pc": [ 184, 306, 384, 458, 533 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 141, 193 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 150, 202 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 210 ], "errorMessage": "invalid provider address" }, { "pc": [ 314, 392, 466, 541 ], "errorMessage": "unknown escrow" }, { "pc": [ 211 ], "errorMessage": "zero amount" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAyIDAgMSA3NAogICAgYnl0ZWNibG9jayAiZXNjcm93cyIgMHgwMDA3NTA2NTZlNjQ2OTZlNjcgImFkbWluIiAicmVwdXRhdGlvbl9hcHBfaWQiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LnB5OjI0CiAgICAvLyBzZWxmLmFkbWluLnZhbHVlID0gQWRkcmVzcygpCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QucHk6MjUKICAgIC8vIHNlbGYucmVwdXRhdGlvbl9hcHBfaWQudmFsdWUgPSBVSW50NjQoMCkKICAgIGJ5dGVjXzMgLy8gInJlcHV0YXRpb25fYXBwX2lkIgogICAgaW50Y18xIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QucHk6MTcKICAgIC8vIGNsYXNzIEVzY3Jvd0NvbnRyYWN0KGFyYzQuQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDE1CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQKICAgIHB1c2hieXRlc3MgMHg2ZGRjNTViYiAweDhlNDM1NTk4IDB4NjJmMzAxNTIgMHgyMDkwODAyNSAweGNlNTg3ODIwIDB4MzljNGY3MjcgLy8gbWV0aG9kICJpbml0aWFsaXplKGFkZHJlc3MsdWludDY0KXZvaWQiLCBtZXRob2QgImNyZWF0ZV9lc2Nyb3coc3RyaW5nLGFkZHJlc3MsdWludDY0KXZvaWQiLCBtZXRob2QgInJlbGVhc2VfcGF5bWVudChzdHJpbmcpdm9pZCIsIG1ldGhvZCAicmVmdW5kKHN0cmluZyl2b2lkIiwgbWV0aG9kICJjYW5jZWwoc3RyaW5nKXZvaWQiLCBtZXRob2QgImdldF9lc2Nyb3coc3RyaW5nKShzdHJpbmcsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCxzdHJpbmcsdWludDY0LHVpbnQ2NCkiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBpbml0aWFsaXplIGNyZWF0ZV9lc2Nyb3cgcmVsZWFzZV9wYXltZW50IHJlZnVuZCBjYW5jZWwgZ2V0X2VzY3JvdwogICAgZXJyCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDE1OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuZXNjcm93LmNvbnRyYWN0LkVzY3Jvd0NvbnRyYWN0LmluaXRpYWxpemVbcm91dGluZ10oKSAtPiB2b2lkOgppbml0aWFsaXplOgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5weToyNwogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QucHk6MzAKICAgIC8vIGFzc2VydCBzZWxmLmFkbWluLnZhbHVlID09IEFkZHJlc3MoKSwgImFscmVhZHkgaW5pdGlhbGl6ZWQiCiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWNfMiAvLyAiYWRtaW4iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWRtaW4gZXhpc3RzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gYWxyZWFkeSBpbml0aWFsaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5weTozMQogICAgLy8gc2VsZi5hZG1pbi52YWx1ZSA9IGFkbWluCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QucHk6MzIKICAgIC8vIHNlbGYucmVwdXRhdGlvbl9hcHBfaWQudmFsdWUgPSByZXB1dGF0aW9uX2FwcF9pZAogICAgYnl0ZWNfMyAvLyAicmVwdXRhdGlvbl9hcHBfaWQiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5weToyNwogICAgLy8gQGFiaW1ldGhvZAogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5lc2Nyb3cuY29udHJhY3QuRXNjcm93Q29udHJhY3QuY3JlYXRlX2VzY3Jvd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZV9lc2Nyb3c6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LnB5OjM0CiAgICAvLyBAYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzAgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGR1cAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5weTozNwogICAgLy8gYXNzZXJ0IHByb3ZpZGVyICE9IEFkZHJlc3MoKSwgImludmFsaWQgcHJvdmlkZXIgYWRkcmVzcyIKICAgIGRpZyAyCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBhc3NlcnQgLy8gaW52YWxpZCBwcm92aWRlciBhZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LnB5OjM4CiAgICAvLyBhc3NlcnQgYW1vdW50ID4gVUludDY0KDApLCAiemVybyBhbW91bnQiCiAgICBhc3NlcnQgLy8gemVybyBhbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QucHk6ODcKICAgIC8vIHJldHVybiBqb2JfaWQgaW4gc2VsZi5lc2Nyb3dzCiAgICBieXRlY18wIC8vICJlc2Nyb3dzIgogICAgZGlnIDQKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QucHk6MzkKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5faGFzX2VzY3Jvdyhqb2JfaWQpLCAiZHVwbGljYXRlIGpvYiBpZCIKICAgICEKICAgIGFzc2VydCAvLyBkdXBsaWNhdGUgam9iIGlkCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LnB5OjQ3CiAgICAvLyBjcmVhdGVkX2F0PUFyYzRVSW50NjQoVUludDY0KDApKSwKICAgIGludGNfMSAvLyAwCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LnB5OjQxLTQ5CiAgICAvLyByZWNvcmQgPSBFc2Nyb3dSZWNvcmQoCiAgICAvLyAgICAgam9iX2lkPWpvYl9pZCwKICAgIC8vICAgICBwYXllcj1BZGRyZXNzKCksCiAgICAvLyAgICAgcHJvdmlkZXI9cHJvdmlkZXIsCiAgICAvLyAgICAgYW1vdW50PUFyYzRVSW50NjQoYW1vdW50KSwKICAgIC8vICAgICBzdGF0dXM9U3RyaW5nKCJQZW5kaW5nIiksCiAgICAvLyAgICAgY3JlYXRlZF9hdD1BcmM0VUludDY0KFVJbnQ2NCgwKSksCiAgICAvLyAgICAgcmVsZWFzZWRfYXQ9QXJjNFVJbnQ2NChVSW50NjQoMCkpLAogICAgLy8gKQogICAgcHVzaGludCA5MgogICAgdW5jb3ZlciA1CiAgICArCiAgICBwdXNoYnl0ZXMgYmFzZTMyKEFCT0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEpCiAgICB1bmNvdmVyIDUKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QucHk6NDYKICAgIC8vIHN0YXR1cz1TdHJpbmcoIlBlbmRpbmciKSwKICAgIGJ5dGVjXzEgLy8gMHgwMDA3NTA2NTZlNjQ2OTZlNjcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QucHk6NDEtNDkKICAgIC8vIHJlY29yZCA9IEVzY3Jvd1JlY29yZCgKICAgIC8vICAgICBqb2JfaWQ9am9iX2lkLAogICAgLy8gICAgIHBheWVyPUFkZHJlc3MoKSwKICAgIC8vICAgICBwcm92aWRlcj1wcm92aWRlciwKICAgIC8vICAgICBhbW91bnQ9QXJjNFVJbnQ2NChhbW91bnQpLAogICAgLy8gICAgIHN0YXR1cz1TdHJpbmcoIlBlbmRpbmciKSwKICAgIC8vICAgICBjcmVhdGVkX2F0PUFyYzRVSW50NjQoVUludDY0KDApKSwKICAgIC8vICAgICByZWxlYXNlZF9hdD1BcmM0VUludDY0KFVJbnQ2NCgwKSksCiAgICAvLyApCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QucHk6NTAKICAgIC8vIHNlbGYuZXNjcm93c1tqb2JfaWRdID0gcmVjb3JkLmNvcHkoKQogICAgZGlnIDEKICAgIGJveF9kZWwKICAgIHBvcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5weTozNAogICAgLy8gQGFiaW1ldGhvZAogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5lc2Nyb3cuY29udHJhY3QuRXNjcm93Q29udHJhY3QucmVsZWFzZV9wYXltZW50W3JvdXRpbmddKCkgLT4gdm9pZDoKcmVsZWFzZV9wYXltZW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5weTo1MgogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18wIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5weTo4NwogICAgLy8gcmV0dXJuIGpvYl9pZCBpbiBzZWxmLmVzY3Jvd3MKICAgIGJ5dGVjXzAgLy8gImVzY3Jvd3MiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LnB5OjU1CiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX2VzY3Jvdyhqb2JfaWQpLCAidW5rbm93biBlc2Nyb3ciCiAgICBhc3NlcnQgLy8gdW5rbm93biBlc2Nyb3cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QucHk6NTYKICAgIC8vIHJlY29yZCA9IHNlbGYuZXNjcm93c1tqb2JfaWRdLmNvcHkoKQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QucHk6NTYtNTcKICAgIC8vIHJlY29yZCA9IHNlbGYuZXNjcm93c1tqb2JfaWRdLmNvcHkoKQogICAgLy8gYXNzZXJ0IHJlY29yZC5zdGF0dXMgPT0gU3RyaW5nKCJQZW5kaW5nIiksICJjYW5ub3QgcmVsZWFzZSBlc2Nyb3ciCiAgICBkdXAKICAgIGludGNfMyAvLyA3NAogICAgaW50Y18wIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBkdXAyCiAgICBpbnRjXzAgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGludGNfMCAvLyAyCiAgICArCiAgICBkaWcgMgogICAgY292ZXIgMgogICAgYm94X2V4dHJhY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QucHk6NTcKICAgIC8vIGFzc2VydCByZWNvcmQuc3RhdHVzID09IFN0cmluZygiUGVuZGluZyIpLCAiY2Fubm90IHJlbGVhc2UgZXNjcm93IgogICAgYnl0ZWNfMSAvLyAweDAwMDc1MDY1NmU2NDY5NmU2NwogICAgPT0KICAgIGFzc2VydCAvLyBjYW5ub3QgcmVsZWFzZSBlc2Nyb3cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QucHk6NTgKICAgIC8vIHJlY29yZC5zdGF0dXMgPSBTdHJpbmcoIlJlbGVhc2VkIikKICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gNzQKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDIKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIGV4dHJhY3QzCiAgICBwdXNoYnl0ZXMgMHgwMDA4NTI2NTZjNjU2MTczNjU2NAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LnB5OjU5CiAgICAvLyByZWNvcmQucmVsZWFzZWRfYXQgPSBBcmM0VUludDY0KFVJbnQ2NCgwKSkKICAgIGludGNfMSAvLyAwCiAgICBpdG9iCiAgICByZXBsYWNlMiA4NAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5weTo2MAogICAgLy8gc2VsZi5lc2Nyb3dzW2pvYl9pZF0gPSByZWNvcmQuY29weSgpCiAgICBkaWcgMQogICAgYm94X2RlbAogICAgcG9wCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LnB5OjUyCiAgICAvLyBAYWJpbWV0aG9kCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmVzY3Jvdy5jb250cmFjdC5Fc2Nyb3dDb250cmFjdC5yZWZ1bmRbcm91dGluZ10oKSAtPiB2b2lkOgpyZWZ1bmQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LnB5OjYyCiAgICAvLyBAYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzAgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LnB5Ojg3CiAgICAvLyByZXR1cm4gam9iX2lkIGluIHNlbGYuZXNjcm93cwogICAgYnl0ZWNfMCAvLyAiZXNjcm93cyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QucHk6NjUKICAgIC8vIGFzc2VydCBzZWxmLl9oYXNfZXNjcm93KGpvYl9pZCksICJ1bmtub3duIGVzY3JvdyIKICAgIGFzc2VydCAvLyB1bmtub3duIGVzY3JvdwogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5weTo2NgogICAgLy8gcmVjb3JkID0gc2VsZi5lc2Nyb3dzW2pvYl9pZF0uY29weSgpCiAgICBkdXAKICAgIGJveF9nZXQKICAgIHBvcAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5weTo2Ni02NwogICAgLy8gcmVjb3JkID0gc2VsZi5lc2Nyb3dzW2pvYl9pZF0uY29weSgpCiAgICAvLyBhc3NlcnQgcmVjb3JkLnN0YXR1cyA9PSBTdHJpbmcoIlBlbmRpbmciKSwgImNhbm5vdCByZWZ1bmQgZXNjcm93IgogICAgZHVwCiAgICBpbnRjXzMgLy8gNzQKICAgIGludGNfMCAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgZHVwMgogICAgaW50Y18wIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBpbnRjXzAgLy8gMgogICAgKwogICAgZGlnIDIKICAgIGNvdmVyIDIKICAgIGJveF9leHRyYWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LnB5OjY3CiAgICAvLyBhc3NlcnQgcmVjb3JkLnN0YXR1cyA9PSBTdHJpbmcoIlBlbmRpbmciKSwgImNhbm5vdCByZWZ1bmQgZXNjcm93IgogICAgYnl0ZWNfMSAvLyAweDAwMDc1MDY1NmU2NDY5NmU2NwogICAgPT0KICAgIGFzc2VydCAvLyBjYW5ub3QgcmVmdW5kIGVzY3JvdwogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5weTo2OAogICAgLy8gcmVjb3JkLnN0YXR1cyA9IFN0cmluZygiUmVmdW5kZWQiKQogICAgZGlnIDEKICAgIGludGNfMyAvLyA3NAogICAgZXh0cmFjdF91aW50MTYKICAgIHVuY292ZXIgMgogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgZXh0cmFjdDMKICAgIHB1c2hieXRlcyAweDAwMDg1MjY1NjY3NTZlNjQ2NTY0CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QucHk6NjkKICAgIC8vIHNlbGYuZXNjcm93c1tqb2JfaWRdID0gcmVjb3JkLmNvcHkoKQogICAgZGlnIDEKICAgIGJveF9kZWwKICAgIHBvcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5weTo2MgogICAgLy8gQGFiaW1ldGhvZAogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5lc2Nyb3cuY29udHJhY3QuRXNjcm93Q29udHJhY3QuY2FuY2VsW3JvdXRpbmddKCkgLT4gdm9pZDoKY2FuY2VsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5weTo3MQogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18wIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5weTo4NwogICAgLy8gcmV0dXJuIGpvYl9pZCBpbiBzZWxmLmVzY3Jvd3MKICAgIGJ5dGVjXzAgLy8gImVzY3Jvd3MiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LnB5Ojc0CiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX2VzY3Jvdyhqb2JfaWQpLCAidW5rbm93biBlc2Nyb3ciCiAgICBhc3NlcnQgLy8gdW5rbm93biBlc2Nyb3cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QucHk6NzUKICAgIC8vIHJlY29yZCA9IHNlbGYuZXNjcm93c1tqb2JfaWRdLmNvcHkoKQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QucHk6NzUtNzYKICAgIC8vIHJlY29yZCA9IHNlbGYuZXNjcm93c1tqb2JfaWRdLmNvcHkoKQogICAgLy8gYXNzZXJ0IHJlY29yZC5zdGF0dXMgPT0gU3RyaW5nKCJQZW5kaW5nIiksICJjYW5ub3QgY2FuY2VsIGVzY3JvdyIKICAgIGR1cAogICAgaW50Y18zIC8vIDc0CiAgICBpbnRjXzAgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGR1cDIKICAgIGludGNfMCAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgaW50Y18wIC8vIDIKICAgICsKICAgIGRpZyAyCiAgICBjb3ZlciAyCiAgICBib3hfZXh0cmFjdAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5weTo3NgogICAgLy8gYXNzZXJ0IHJlY29yZC5zdGF0dXMgPT0gU3RyaW5nKCJQZW5kaW5nIiksICJjYW5ub3QgY2FuY2VsIGVzY3JvdyIKICAgIGJ5dGVjXzEgLy8gMHgwMDA3NTA2NTZlNjQ2OTZlNjcKICAgID09CiAgICBhc3NlcnQgLy8gY2Fubm90IGNhbmNlbCBlc2Nyb3cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QucHk6NzcKICAgIC8vIHJlY29yZC5zdGF0dXMgPSBTdHJpbmcoIkNhbmNlbGxlZCIpCiAgICBkaWcgMQogICAgaW50Y18zIC8vIDc0CiAgICBleHRyYWN0X3VpbnQxNgogICAgdW5jb3ZlciAyCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBleHRyYWN0MwogICAgcHVzaGJ5dGVzIDB4MDAwOTQzNjE2ZTYzNjU2YzZjNjU2NAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LnB5Ojc4CiAgICAvLyBzZWxmLmVzY3Jvd3Nbam9iX2lkXSA9IHJlY29yZC5jb3B5KCkKICAgIGRpZyAxCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QucHk6NzEKICAgIC8vIEBhYmltZXRob2QKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuZXNjcm93LmNvbnRyYWN0LkVzY3Jvd0NvbnRyYWN0LmdldF9lc2Nyb3dbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfZXNjcm93OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5weTo4MAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18wIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5weTo4NwogICAgLy8gcmV0dXJuIGpvYl9pZCBpbiBzZWxmLmVzY3Jvd3MKICAgIGJ5dGVjXzAgLy8gImVzY3Jvd3MiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LnB5OjgzCiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX2VzY3Jvdyhqb2JfaWQpLCAidW5rbm93biBlc2Nyb3ciCiAgICBhc3NlcnQgLy8gdW5rbm93biBlc2Nyb3cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QucHk6ODQKICAgIC8vIHJldHVybiBzZWxmLmVzY3Jvd3Nbam9iX2lkXS5jb3B5KCkKICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5weTo4MAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAgABSiYEB2VzY3Jvd3MJAAdQZW5kaW5nBWFkbWluEXJlcHV0YXRpb25fYXBwX2lkMRhAAAcqMgNnKyNnMRtBADkxGRREMRhEggYEbdxVuwSOQ1WYBGLzAVIEIJCAJQTOWHggBDnE9yc2GgCOBgAJAC0AqgD4AUIBjQAxGRQxGBQQQzYaAUkVgSASRDYaAkkVgQgSRBcjKmVEMgMSRCpPAmcrTGckQzYaAUkjWSIISwEVSU8CEkQ2GgJJFYEgEkQ2GgNJFYEIEkRJF0sCMgMTREQoSwRQSb1FARREIxaBXE8FCIAiAFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8FUE8EUEwWVwYCUEsBUExQTwJQKVBLAbxIvyRDNhoBSSNZIghLARUSRChMUEm9RQFESb5ITEklIroXSiK6FyIISwJOAropEkRLASVZTwIjTwJYgAoACFJlbGVhc2VkUCMWXFRLAbxIvyRDNhoBSSNZIghLARUSRChMUEm9RQFESb5ITEklIroXSiK6FyIISwJOAropEkRLASVZTwIjTwJYgAoACFJlZnVuZGVkUEsBvEi/JEM2GgFJI1kiCEsBFRJEKExQSb1FAURJvkhMSSUiuhdKIroXIghLAk4CuikSREsBJVlPAiNPAliACwAJQ2FuY2VsbGVkUEsBvEi/JEM2GgFJI1kiCEsBFRJEKExQSb1FAUS+SIAEFR98dUxQsCRD", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 9, "patch": 0 } }, "events": [], "templateVariables": {} }