{ "name": "TestNft", "structs": {}, "methods": [ { "name": "createApplication", "args": [], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "arc72_mint", "args": [ { "type": "address", "name": "to" }, { "type": "string", "name": "uri" } ], "returns": { "type": "uint256" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [ { "name": "arc72_Transfer", "args": [ { "type": "address", "name": "field1" }, { "type": "address", "name": "field2" }, { "type": "uint256", "name": "field3" } ] } ], "recommendations": {} }, { "name": "supportsInterface", "args": [ { "type": "byte[4]", "name": "interfaceId" } ], "returns": { "type": "bool" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "ARC-73 itself, ARC-72 core, ARC-72 enumeration and ARC-72 management.", "events": [], "recommendations": {} }, { "name": "arc72_ownerOf", "args": [ { "type": "uint256", "name": "tokenId" } ], "returns": { "type": "address" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "arc72_tokenURI", "args": [ { "type": "uint256", "name": "tokenId" } ], "returns": { "type": "byte[256]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "arc72_totalSupply", "args": [], "returns": { "type": "uint256" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "arc72_tokenByIndex", "args": [ { "type": "uint256", "name": "index" } ], "returns": { "type": "uint256" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "arc72_balanceOf", "args": [ { "type": "address", "name": "owner" } ], "returns": { "type": "uint256" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "arc72_getApproved", "args": [ { "type": "uint256", "name": "tokenId" } ], "returns": { "type": "address" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "arc72_isApprovedForAll", "args": [ { "type": "address", "name": "owner" }, { "type": "address", "name": "operator" } ], "returns": { "type": "bool" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "arc72_approve", "args": [ { "type": "address", "name": "approved" }, { "type": "uint256", "name": "tokenId" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [ { "name": "arc72_Approval", "args": [ { "type": "address", "name": "field1" }, { "type": "address", "name": "field2" }, { "type": "uint256", "name": "field3" } ] } ], "recommendations": {} }, { "name": "arc72_setApprovalForAll", "args": [ { "type": "address", "name": "operator" }, { "type": "bool", "name": "approved" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [ { "name": "arc72_ApprovalForAll", "args": [ { "type": "address", "name": "field1" }, { "type": "address", "name": "field2" }, { "type": "bool", "name": "field3" } ] } ], "recommendations": {} }, { "name": "arc72_transferFrom", "args": [ { "type": "address", "name": "from_" }, { "type": "address", "name": "to" }, { "type": "uint256", "name": "tokenId" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [ { "name": "arc72_Transfer", "args": [ { "type": "address", "name": "field1" }, { "type": "address", "name": "field2" }, { "type": "uint256", "name": "field3" } ] } ], "recommendations": {} } ], "arcs": [ 22, 28 ], "desc": "An ARC-72 NFT collection with enumeration, management and ARC-73. Fund the application account: tokens are boxes.", "networks": {}, "state": { "schema": { "global": { "ints": 1, "bytes": 1 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "minted": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bWludGVk" }, "owner_account": { "keyType": "AVMString", "valueType": "address", "key": "b3duZXJfYWNjb3VudA==" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "owners": { "keyType": "uint256", "valueType": "address", "prefix": "bw==" }, "uris": { "keyType": "uint256", "valueType": "byte[256]", "prefix": "dQ==" }, "balances": { "keyType": "address", "valueType": "uint256", "prefix": "Yg==" }, "approvals": { "keyType": "uint256", "valueType": "address", "prefix": "YQ==" }, "operators": { "keyType": "AVMBytes", "valueType": "bool", "prefix": "cA==" } } } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 705 ], "errorMessage": "check self.balances entry exists" }, { "pc": [ 255, 425, 447 ], "errorMessage": "check self.minted exists" }, { "pc": [ 249 ], "errorMessage": "check self.owner_account exists" }, { "pc": [ 394, 571, 682 ], "errorMessage": "check self.owners entry exists" }, { "pc": [ 415 ], "errorMessage": "check self.uris entry exists" }, { "pc": [ 452 ], "errorMessage": "index" }, { "pc": [ 234 ], "errorMessage": "invalid array length header" }, { "pc": [ 616 ], "errorMessage": "invalid number of bytes for arc4.bool" }, { "pc": [ 242 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 228, 477, 523, 531, 557, 608, 656, 666 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 321 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 389, 408, 443, 501, 565, 677 ], "errorMessage": "invalid number of bytes for arc4.uint256" }, { "pc": [ 694 ], "errorMessage": "not allowed" }, { "pc": [ 251, 577, 686 ], "errorMessage": "not owner" }, { "pc": [ 460, 713, 822 ], "errorMessage": "overflow" }, { "pc": [ 275 ], "errorMessage": "text too long" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAzMiAxIDAgMjU2CiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgIm1pbnRlZCIgMHg2ZiAweDYxICJvd25lcl9hY2NvdW50IiAweDAwIDB4MDEgMHg2MiAweDcwIDB4ZDgwOGQ0ZjQgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToxNzcKICAgIC8vIHNlbGYubWludGVkID0gVUludDY0KCkKICAgIGJ5dGVjXzEgLy8gIm1pbnRlZCIKICAgIGludGNfMiAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MTc4CiAgICAvLyBzZWxmLm93bmVyX2FjY291bnQgPSBBY2NvdW50KCkKICAgIGJ5dGVjIDQgLy8gIm93bmVyX2FjY291bnQiCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjE3MwogICAgLy8gY2xhc3MgVGVzdE5mdChBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAxOAogICAgcHVzaGJ5dGVzcyAweDlhZWNkNmI2IDB4NGUyMmEzYmEgMHg3OTA5NmExNCAweGMzYzFmYzAwIDB4NjRkNzJhN2EgMHg2ZDliZmQyNyAweGFjMzE5MTI0IDB4OTQ4YWE0ZjEgMHgyMTdhZGMzZCAweGI0ZWRiYTRlIDB4NzEzNDM5NWYgMHhmMmYxOTRhMCAvLyBtZXRob2QgImFyYzcyX21pbnQoYWRkcmVzcyxzdHJpbmcpdWludDI1NiIsIG1ldGhvZCAic3VwcG9ydHNJbnRlcmZhY2UoYnl0ZVs0XSlib29sIiwgbWV0aG9kICJhcmM3Ml9vd25lck9mKHVpbnQyNTYpYWRkcmVzcyIsIG1ldGhvZCAiYXJjNzJfdG9rZW5VUkkodWludDI1NilieXRlWzI1Nl0iLCBtZXRob2QgImFyYzcyX3RvdGFsU3VwcGx5KCl1aW50MjU2IiwgbWV0aG9kICJhcmM3Ml90b2tlbkJ5SW5kZXgodWludDI1Nil1aW50MjU2IiwgbWV0aG9kICJhcmM3Ml9iYWxhbmNlT2YoYWRkcmVzcyl1aW50MjU2IiwgbWV0aG9kICJhcmM3Ml9nZXRBcHByb3ZlZCh1aW50MjU2KWFkZHJlc3MiLCBtZXRob2QgImFyYzcyX2lzQXBwcm92ZWRGb3JBbGwoYWRkcmVzcyxhZGRyZXNzKWJvb2wiLCBtZXRob2QgImFyYzcyX2FwcHJvdmUoYWRkcmVzcyx1aW50MjU2KXZvaWQiLCBtZXRob2QgImFyYzcyX3NldEFwcHJvdmFsRm9yQWxsKGFkZHJlc3MsYm9vbCl2b2lkIiwgbWV0aG9kICJhcmM3Ml90cmFuc2ZlckZyb20oYWRkcmVzcyxhZGRyZXNzLHVpbnQyNTYpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGFyYzcyX21pbnQgc3VwcG9ydHNJbnRlcmZhY2UgYXJjNzJfb3duZXJPZiBhcmM3Ml90b2tlblVSSSBhcmM3Ml90b3RhbFN1cHBseSBhcmM3Ml90b2tlbkJ5SW5kZXggYXJjNzJfYmFsYW5jZU9mIGFyYzcyX2dldEFwcHJvdmVkIGFyYzcyX2lzQXBwcm92ZWRGb3JBbGwgYXJjNzJfYXBwcm92ZSBhcmM3Ml9zZXRBcHByb3ZhbEZvckFsbCBhcmM3Ml90cmFuc2ZlckZyb20KICAgIGVycgoKbWFpbl9jcmVhdGVfTm9PcEAxODoKICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjE3MwogICAgLy8gY2xhc3MgVGVzdE5mdChBUkM0Q29udHJhY3QpOgogICAgcHVzaGJ5dGVzIDB4Yjg0NDdiMzYgLy8gbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGNyZWF0ZUFwcGxpY2F0aW9uCiAgICBlcnIKCgovLyB0ZXN0X2NvbnRyYWN0cy5UZXN0TmZ0LmNyZWF0ZUFwcGxpY2F0aW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlQXBwbGljYXRpb246CiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToxODcKICAgIC8vIHNlbGYub3duZXJfYWNjb3VudCA9IFR4bi5zZW5kZXIKICAgIGJ5dGVjIDQgLy8gIm93bmVyX2FjY291bnQiCiAgICB0eG4gU2VuZGVyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MTg1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2NvbnRyYWN0cy5UZXN0TmZ0LmFyYzcyX21pbnRbcm91dGluZ10oKSAtPiB2b2lkOgphcmM3Ml9taW50OgogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MTg5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBpbnRjXzIgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjE5MQogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gc2VsZi5vd25lcl9hY2NvdW50LCAibm90IG93bmVyIgogICAgdHhuIFNlbmRlcgogICAgaW50Y18yIC8vIDAKICAgIGJ5dGVjIDQgLy8gIm93bmVyX2FjY291bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYub3duZXJfYWNjb3VudCBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gbm90IG93bmVyCiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToxOTIKICAgIC8vIHNlbGYubWludGVkICs9IDEKICAgIGludGNfMiAvLyAwCiAgICBieXRlY18xIC8vICJtaW50ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubWludGVkIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ5dGVjXzEgLy8gIm1pbnRlZCIKICAgIGRpZyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MTkzCiAgICAvLyB0b2tlbklkID0gYXJjNC5VSW50MjU2KHNlbGYubWludGVkKQogICAgaXRvYgogICAgaW50Y18wIC8vIDMyCiAgICBiemVybwogICAgYnwKICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjE5NAogICAgLy8gc2VsZi51cmlzW3Rva2VuSWRdID0gQnl0ZXMyNTYuZnJvbV9ieXRlcyhwYWRkZWQodXJpLm5hdGl2ZSwgVUludDY0KDI1NikpKQogICAgc3dhcAogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjI5CiAgICAvLyBhc3NlcnQgdGV4dC5ieXRlcy5sZW5ndGggPD0gc2l6ZSwgInRleHQgdG9vIGxvbmciCiAgICBkdXAKICAgIGxlbgogICAgZHVwCiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToxOTQKICAgIC8vIHNlbGYudXJpc1t0b2tlbklkXSA9IEJ5dGVzMjU2LmZyb21fYnl0ZXMocGFkZGVkKHVyaS5uYXRpdmUsIFVJbnQ2NCgyNTYpKSkKICAgIGludGNfMyAvLyAyNTYKICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjI5CiAgICAvLyBhc3NlcnQgdGV4dC5ieXRlcy5sZW5ndGggPD0gc2l6ZSwgInRleHQgdG9vIGxvbmciCiAgICA8PQogICAgYXNzZXJ0IC8vIHRleHQgdG9vIGxvbmcKICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjE5NAogICAgLy8gc2VsZi51cmlzW3Rva2VuSWRdID0gQnl0ZXMyNTYuZnJvbV9ieXRlcyhwYWRkZWQodXJpLm5hdGl2ZSwgVUludDY0KDI1NikpKQogICAgaW50Y18zIC8vIDI1NgogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MzAKICAgIC8vIHJldHVybiB0ZXh0LmJ5dGVzICsgb3AuYnplcm8oc2l6ZSAtIHRleHQuYnl0ZXMubGVuZ3RoKQogICAgc3dhcAogICAgLQogICAgYnplcm8KICAgIGNvbmNhdAogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MTk0CiAgICAvLyBzZWxmLnVyaXNbdG9rZW5JZF0gPSBCeXRlczI1Ni5mcm9tX2J5dGVzKHBhZGRlZCh1cmkubmF0aXZlLCBVSW50NjQoMjU2KSkpCiAgICBwdXNoYnl0ZXMgMHg3NQogICAgZGlnIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MTk1CiAgICAvLyBzZWxmLl9yZWNlaXZlKHRvLm5hdGl2ZSwgdG9rZW5JZCkKICAgIGR1cDIKICAgIGNhbGxzdWIgX3JlY2VpdmUKICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjE5NgogICAgLy8gYXJjNC5lbWl0KCJhcmM3Ml9UcmFuc2ZlcihhZGRyZXNzLGFkZHJlc3MsdWludDI1NikiLCBhcmM0LkFkZHJlc3MoR2xvYmFsLnplcm9fYWRkcmVzcyksIHRvLCB0b2tlbklkKQogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgYnl0ZWMgOSAvLyBtZXRob2QgImFyYzcyX1RyYW5zZmVyKGFkZHJlc3MsYWRkcmVzcyx1aW50MjU2KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToxODkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY29udHJhY3RzLlRlc3ROZnQuc3VwcG9ydHNJbnRlcmZhY2Vbcm91dGluZ10oKSAtPiB2b2lkOgpzdXBwb3J0c0ludGVyZmFjZToKICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjE5OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXBuIDIKICAgIGxlbgogICAgcHVzaGludCA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCA0PgogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjA0CiAgICAvLyBzZWxlY3RvciA9PSBCeXRlcy5mcm9tX2hleCgiNGU5MTM3OTYiKSBvciBzZWxlY3RvciA9PSBCeXRlcy5mcm9tX2hleCgiNTNmMDJhNDAiKQogICAgcHVzaGJ5dGVzIDB4NGU5MTM3OTYKICAgID09CiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToyMDQtMjA1CiAgICAvLyBzZWxlY3RvciA9PSBCeXRlcy5mcm9tX2hleCgiNGU5MTM3OTYiKSBvciBzZWxlY3RvciA9PSBCeXRlcy5mcm9tX2hleCgiNTNmMDJhNDAiKQogICAgLy8gb3Igc2VsZWN0b3IgPT0gQnl0ZXMuZnJvbV9oZXgoImE1N2Q0ZmRiIikgb3Igc2VsZWN0b3IgPT0gQnl0ZXMuZnJvbV9oZXgoImI5YzZmNjk2IikKICAgIGJueiBzdXBwb3J0c0ludGVyZmFjZV9ib29sX3RydWVANQogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjA0CiAgICAvLyBzZWxlY3RvciA9PSBCeXRlcy5mcm9tX2hleCgiNGU5MTM3OTYiKSBvciBzZWxlY3RvciA9PSBCeXRlcy5mcm9tX2hleCgiNTNmMDJhNDAiKQogICAgZHVwCiAgICBwdXNoYnl0ZXMgMHg1M2YwMmE0MAogICAgPT0KICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjIwNC0yMDUKICAgIC8vIHNlbGVjdG9yID09IEJ5dGVzLmZyb21faGV4KCI0ZTkxMzc5NiIpIG9yIHNlbGVjdG9yID09IEJ5dGVzLmZyb21faGV4KCI1M2YwMmE0MCIpCiAgICAvLyBvciBzZWxlY3RvciA9PSBCeXRlcy5mcm9tX2hleCgiYTU3ZDRmZGIiKSBvciBzZWxlY3RvciA9PSBCeXRlcy5mcm9tX2hleCgiYjljNmY2OTYiKQogICAgYm56IHN1cHBvcnRzSW50ZXJmYWNlX2Jvb2xfdHJ1ZUA1CiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToyMDUKICAgIC8vIG9yIHNlbGVjdG9yID09IEJ5dGVzLmZyb21faGV4KCJhNTdkNGZkYiIpIG9yIHNlbGVjdG9yID09IEJ5dGVzLmZyb21faGV4KCJiOWM2ZjY5NiIpCiAgICBkdXAKICAgIHB1c2hieXRlcyAweGE1N2Q0ZmRiCiAgICA9PQogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjA0LTIwNQogICAgLy8gc2VsZWN0b3IgPT0gQnl0ZXMuZnJvbV9oZXgoIjRlOTEzNzk2Iikgb3Igc2VsZWN0b3IgPT0gQnl0ZXMuZnJvbV9oZXgoIjUzZjAyYTQwIikKICAgIC8vIG9yIHNlbGVjdG9yID09IEJ5dGVzLmZyb21faGV4KCJhNTdkNGZkYiIpIG9yIHNlbGVjdG9yID09IEJ5dGVzLmZyb21faGV4KCJiOWM2ZjY5NiIpCiAgICBibnogc3VwcG9ydHNJbnRlcmZhY2VfYm9vbF90cnVlQDUKICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjIwNQogICAgLy8gb3Igc2VsZWN0b3IgPT0gQnl0ZXMuZnJvbV9oZXgoImE1N2Q0ZmRiIikgb3Igc2VsZWN0b3IgPT0gQnl0ZXMuZnJvbV9oZXgoImI5YzZmNjk2IikKICAgIGR1cAogICAgcHVzaGJ5dGVzIDB4YjljNmY2OTYKICAgID09CiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToyMDQtMjA1CiAgICAvLyBzZWxlY3RvciA9PSBCeXRlcy5mcm9tX2hleCgiNGU5MTM3OTYiKSBvciBzZWxlY3RvciA9PSBCeXRlcy5mcm9tX2hleCgiNTNmMDJhNDAiKQogICAgLy8gb3Igc2VsZWN0b3IgPT0gQnl0ZXMuZnJvbV9oZXgoImE1N2Q0ZmRiIikgb3Igc2VsZWN0b3IgPT0gQnl0ZXMuZnJvbV9oZXgoImI5YzZmNjk2IikKICAgIGJ6IHN1cHBvcnRzSW50ZXJmYWNlX2Jvb2xfZmFsc2VANgoKc3VwcG9ydHNJbnRlcmZhY2VfYm9vbF90cnVlQDU6CiAgICBpbnRjXzEgLy8gMQoKc3VwcG9ydHNJbnRlcmZhY2VfYm9vbF9tZXJnZUA3OgogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjAzLTIwNgogICAgLy8gcmV0dXJuIGFyYzQuQm9vbCgKICAgIC8vICAgICBzZWxlY3RvciA9PSBCeXRlcy5mcm9tX2hleCgiNGU5MTM3OTYiKSBvciBzZWxlY3RvciA9PSBCeXRlcy5mcm9tX2hleCgiNTNmMDJhNDAiKQogICAgLy8gICAgIG9yIHNlbGVjdG9yID09IEJ5dGVzLmZyb21faGV4KCJhNTdkNGZkYiIpIG9yIHNlbGVjdG9yID09IEJ5dGVzLmZyb21faGV4KCJiOWM2ZjY5NiIpCiAgICAvLyApCiAgICBieXRlYyA1IC8vIDB4MDAKICAgIGludGNfMiAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MTk5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCnN1cHBvcnRzSW50ZXJmYWNlX2Jvb2xfZmFsc2VANjoKICAgIGludGNfMiAvLyAwCiAgICBiIHN1cHBvcnRzSW50ZXJmYWNlX2Jvb2xfbWVyZ2VANwoKCi8vIHRlc3RfY29udHJhY3RzLlRlc3ROZnQuYXJjNzJfb3duZXJPZltyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzcyX293bmVyT2Y6CiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToyMDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50MjU2CiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToyMTAKICAgIC8vIHJldHVybiBzZWxmLm93bmVyc1t0b2tlbklkXQogICAgYnl0ZWNfMiAvLyAweDZmCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm93bmVycyBlbnRyeSBleGlzdHMKICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjIwOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jb250cmFjdHMuVGVzdE5mdC5hcmM3Ml90b2tlblVSSVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzcyX3Rva2VuVVJJOgogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjEyCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDI1NgogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjE0CiAgICAvLyByZXR1cm4gc2VsZi51cmlzW3Rva2VuSWRdCiAgICBwdXNoYnl0ZXMgMHg3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi51cmlzIGVudHJ5IGV4aXN0cwogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjEyCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2NvbnRyYWN0cy5UZXN0TmZ0LmFyYzcyX3RvdGFsU3VwcGx5W3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNzJfdG90YWxTdXBwbHk6CiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToyMTgKICAgIC8vIHJldHVybiBhcmM0LlVJbnQyNTYoc2VsZi5taW50ZWQpCiAgICBpbnRjXzIgLy8gMAogICAgYnl0ZWNfMSAvLyAibWludGVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1pbnRlZCBleGlzdHMKICAgIGl0b2IKICAgIGludGNfMCAvLyAzMgogICAgYnplcm8KICAgIGJ8CiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToyMTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY29udHJhY3RzLlRlc3ROZnQuYXJjNzJfdG9rZW5CeUluZGV4W3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNzJfdG9rZW5CeUluZGV4OgogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjIwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDI1NgogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjIyCiAgICAvLyBhc3NlcnQgaW5kZXgubmF0aXZlIDwgc2VsZi5taW50ZWQsICJpbmRleCIKICAgIGludGNfMiAvLyAwCiAgICBieXRlY18xIC8vICJtaW50ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubWludGVkIGV4aXN0cwogICAgaXRvYgogICAgZGlnIDEKICAgIGI+CiAgICBhc3NlcnQgLy8gaW5kZXgKICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjIyMwogICAgLy8gcmV0dXJuIGFyYzQuVUludDI1NihpbmRleC5uYXRpdmUgKyAxKQogICAgYnl0ZWMgNiAvLyAweDAxCiAgICBiKwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAzMgogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18wIC8vIDMyCiAgICBiemVybwogICAgYnwKICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjIyMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jb250cmFjdHMuVGVzdE5mdC5hcmM3Ml9iYWxhbmNlT2Zbcm91dGluZ10oKSAtPiB2b2lkOgphcmM3Ml9iYWxhbmNlT2Y6CiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToyMjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToyMjcKICAgIC8vIHJldHVybiBzZWxmLmJhbGFuY2VzLmdldChvd25lci5uYXRpdmUsIGRlZmF1bHQ9YXJjNC5VSW50MjU2KDApKQogICAgYnl0ZWMgNyAvLyAweDYyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIGJ5dGVjIDEwIC8vIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToyMjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY29udHJhY3RzLlRlc3ROZnQuYXJjNzJfZ2V0QXBwcm92ZWRbcm91dGluZ10oKSAtPiB2b2lkOgphcmM3Ml9nZXRBcHByb3ZlZDoKICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjIyOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQyNTYKICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjIzMQogICAgLy8gcmV0dXJuIHNlbGYuYXBwcm92YWxzLmdldCh0b2tlbklkLCBkZWZhdWx0PWFyYzQuQWRkcmVzcygpKQogICAgYnl0ZWNfMyAvLyAweDYxCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgc3dhcAogICAgYm94X2dldAogICAgc2VsZWN0CiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToyMjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY29udHJhY3RzLlRlc3ROZnQuYXJjNzJfaXNBcHByb3ZlZEZvckFsbFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzcyX2lzQXBwcm92ZWRGb3JBbGw6CiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToyMzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjM2CiAgICAvLyByZXR1cm4gb3Auc2hhMjU2KGZpcnN0LmJ5dGVzICsgc2Vjb25kLmJ5dGVzKQogICAgY29uY2F0CiAgICBzaGEyNTYKICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjIzNQogICAgLy8gcmV0dXJuIHNlbGYub3BlcmF0b3JzLmdldChwYWlyX2tleShvd25lci5uYXRpdmUsIG9wZXJhdG9yLm5hdGl2ZSksIGRlZmF1bHQ9YXJjNC5Cb29sKEZhbHNlKSkKICAgIGJ5dGVjIDggLy8gMHg3MAogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBieXRlYyA1IC8vIDB4MDAKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2NvbnRyYWN0cy5UZXN0TmZ0LmFyYzcyX2FwcHJvdmVbcm91dGluZ10oKSAtPiB2b2lkOgphcmM3Ml9hcHByb3ZlOgogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50MjU2CiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToyMzkKICAgIC8vIG93bmVyID0gc2VsZi5vd25lcnNbdG9rZW5JZF0KICAgIGJ5dGVjXzIgLy8gMHg2ZgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYub3duZXJzIGVudHJ5IGV4aXN0cwogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjQwCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBvd25lci5uYXRpdmUsICJub3Qgb3duZXIiCiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydCAvLyBub3Qgb3duZXIKICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjI0MQogICAgLy8gc2VsZi5hcHByb3ZhbHNbdG9rZW5JZF0gPSBhcHByb3ZlZAogICAgYnl0ZWNfMyAvLyAweDYxCiAgICBkaWcgMgogICAgY29uY2F0CiAgICBkaWcgMwogICAgYm94X3B1dAogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjQyCiAgICAvLyBhcmM0LmVtaXQoImFyYzcyX0FwcHJvdmFsKGFkZHJlc3MsYWRkcmVzcyx1aW50MjU2KSIsIG93bmVyLCBhcHByb3ZlZCwgdG9rZW5JZCkKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDg1YTJlNmUwIC8vIG1ldGhvZCAiYXJjNzJfQXBwcm92YWwoYWRkcmVzcyxhZGRyZXNzLHVpbnQyNTYpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjIzNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jb250cmFjdHMuVGVzdE5mdC5hcmM3Ml9zZXRBcHByb3ZhbEZvckFsbFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzcyX3NldEFwcHJvdmFsRm9yQWxsOgogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjI0NgogICAgLy8gc2VsZi5vcGVyYXRvcnNbcGFpcl9rZXkoVHhuLnNlbmRlciwgb3BlcmF0b3IubmF0aXZlKV0gPSBhcHByb3ZlZAogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MzYKICAgIC8vIHJldHVybiBvcC5zaGEyNTYoZmlyc3QuYnl0ZXMgKyBzZWNvbmQuYnl0ZXMpCiAgICBkaWcgMgogICAgY29uY2F0CiAgICBzaGEyNTYKICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjI0NgogICAgLy8gc2VsZi5vcGVyYXRvcnNbcGFpcl9rZXkoVHhuLnNlbmRlciwgb3BlcmF0b3IubmF0aXZlKV0gPSBhcHByb3ZlZAogICAgYnl0ZWMgOCAvLyAweDcwCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBib3hfcHV0CiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToyNDcKICAgIC8vIGFyYzQuZW1pdCgiYXJjNzJfQXBwcm92YWxGb3JBbGwoYWRkcmVzcyxhZGRyZXNzLGJvb2wpIiwgYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLCBvcGVyYXRvciwgYXBwcm92ZWQpCiAgICB0eG4gU2VuZGVyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHg0YzRkZWJhYiAvLyBtZXRob2QgImFyYzcyX0FwcHJvdmFsRm9yQWxsKGFkZHJlc3MsYWRkcmVzcyxib29sKSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToyNDQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY29udHJhY3RzLlRlc3ROZnQuYXJjNzJfdHJhbnNmZXJGcm9tW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNzJfdHJhbnNmZXJGcm9tOgogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjQ5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgbGVuCiAgICBpbnRjXzAgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAzCiAgICBsZW4KICAgIGludGNfMCAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDI1NgogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjUxCiAgICAvLyBhc3NlcnQgc2VsZi5vd25lcnNbdG9rZW5JZF0gPT0gZnJvbV8sICJub3Qgb3duZXIiCiAgICBieXRlY18yIC8vIDB4NmYKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYub3duZXJzIGVudHJ5IGV4aXN0cwogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQgLy8gbm90IG93bmVyCiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToyNjEKICAgIC8vIGlmIFR4bi5zZW5kZXIgPT0gb3duZXI6CiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYnogYXJjNzJfdHJhbnNmZXJGcm9tX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjYyCiAgICAvLyByZXR1cm4gVHJ1ZQogICAgaW50Y18xIC8vIDEKCmFyYzcyX3RyYW5zZmVyRnJvbV9hZnRlcl9pbmxpbmVkX3Rlc3RfY29udHJhY3RzLlRlc3ROZnQuX21heV90cmFuc2ZlckA2OgogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjUyCiAgICAvLyBhc3NlcnQgc2VsZi5fbWF5X3RyYW5zZmVyKGZyb21fLm5hdGl2ZSwgdG9rZW5JZCksICJub3QgYWxsb3dlZCIKICAgIGFzc2VydCAvLyBub3QgYWxsb3dlZAogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjUzCiAgICAvLyBiYWxhbmNlID0gc2VsZi5iYWxhbmNlc1tmcm9tXy5uYXRpdmVdCiAgICBieXRlYyA3IC8vIDB4NjIKICAgIHVuY292ZXIgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYmFsYW5jZXMgZW50cnkgZXhpc3RzCiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToyNTQKICAgIC8vIHNlbGYuYmFsYW5jZXNbZnJvbV8ubmF0aXZlXSA9IGFyYzQuVUludDI1NihiYWxhbmNlLm5hdGl2ZSAtIDEpCiAgICBieXRlYyA2IC8vIDB4MDEKICAgIGItCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDMyCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzAgLy8gMzIKICAgIGJ6ZXJvCiAgICBifAogICAgYm94X3B1dAogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjU1CiAgICAvLyBzZWxmLmFwcHJvdmFsc1t0b2tlbklkXSA9IGFyYzQuQWRkcmVzcygpCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGJ5dGVjXzMgLy8gMHg2MQogICAgdW5jb3ZlciAzCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGNvbmNhdAogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjU2CiAgICAvLyBzZWxmLl9yZWNlaXZlKHRvLm5hdGl2ZSwgdG9rZW5JZCkKICAgIHVuY292ZXIgMgogICAgZHVwCiAgICBkaWcgMgogICAgY2FsbHN1YiBfcmVjZWl2ZQogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjU3CiAgICAvLyBhcmM0LmVtaXQoImFyYzcyX1RyYW5zZmVyKGFkZHJlc3MsYWRkcmVzcyx1aW50MjU2KSIsIGZyb21fLCB0bywgdG9rZW5JZCkKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDkgLy8gbWV0aG9kICJhcmM3Ml9UcmFuc2ZlcihhZGRyZXNzLGFkZHJlc3MsdWludDI1NikiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjQ5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmFyYzcyX3RyYW5zZmVyRnJvbV9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToyNjMKICAgIC8vIGlmIHNlbGYuYXBwcm92YWxzLmdldCh0b2tlbklkLCBkZWZhdWx0PWFyYzQuQWRkcmVzcygpKS5uYXRpdmUgPT0gVHhuLnNlbmRlcjoKICAgIGJ5dGVjXzMgLy8gMHg2MQogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBzd2FwCiAgICBib3hfZ2V0CiAgICBzZWxlY3QKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBieiBhcmM3Ml90cmFuc2ZlckZyb21fYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToyNjQKICAgIC8vIHJldHVybiBUcnVlCiAgICBpbnRjXzEgLy8gMQogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjUyCiAgICAvLyBhc3NlcnQgc2VsZi5fbWF5X3RyYW5zZmVyKGZyb21fLm5hdGl2ZSwgdG9rZW5JZCksICJub3QgYWxsb3dlZCIKICAgIGIgYXJjNzJfdHJhbnNmZXJGcm9tX2FmdGVyX2lubGluZWRfdGVzdF9jb250cmFjdHMuVGVzdE5mdC5fbWF5X3RyYW5zZmVyQDYKCmFyYzcyX3RyYW5zZmVyRnJvbV9hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weTozNgogICAgLy8gcmV0dXJuIG9wLnNoYTI1NihmaXJzdC5ieXRlcyArIHNlY29uZC5ieXRlcykKICAgIGRpZyAxCiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToyNjUKICAgIC8vIHJldHVybiBzZWxmLm9wZXJhdG9ycy5nZXQocGFpcl9rZXkob3duZXIsIFR4bi5zZW5kZXIpLCBkZWZhdWx0PWFyYzQuQm9vbChGYWxzZSkpLm5hdGl2ZQogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MzYKICAgIC8vIHJldHVybiBvcC5zaGEyNTYoZmlyc3QuYnl0ZXMgKyBzZWNvbmQuYnl0ZXMpCiAgICBjb25jYXQKICAgIHNoYTI1NgogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjY1CiAgICAvLyByZXR1cm4gc2VsZi5vcGVyYXRvcnMuZ2V0KHBhaXJfa2V5KG93bmVyLCBUeG4uc2VuZGVyKSwgZGVmYXVsdD1hcmM0LkJvb2woRmFsc2UpKS5uYXRpdmUKICAgIGJ5dGVjIDggLy8gMHg3MAogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBieXRlYyA1IC8vIDB4MDAKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgaW50Y18yIC8vIDAKICAgIGdldGJpdAogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjUyCiAgICAvLyBhc3NlcnQgc2VsZi5fbWF5X3RyYW5zZmVyKGZyb21fLm5hdGl2ZSwgdG9rZW5JZCksICJub3QgYWxsb3dlZCIKICAgIGIgYXJjNzJfdHJhbnNmZXJGcm9tX2FmdGVyX2lubGluZWRfdGVzdF9jb250cmFjdHMuVGVzdE5mdC5fbWF5X3RyYW5zZmVyQDYKCgovLyB0ZXN0X2NvbnRyYWN0cy5UZXN0TmZ0Ll9yZWNlaXZlKG93bmVyOiBieXRlcywgdG9rZW5JZDogYnl0ZXMpIC0+IHZvaWQ6Cl9yZWNlaXZlOgogICAgLy8gdGVzdF9jb250cmFjdHMucHk6MjY3LTI2OAogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfcmVjZWl2ZShzZWxmLCBvd25lcjogQWNjb3VudCwgdG9rZW5JZDogYXJjNC5VSW50MjU2KSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToyNjkKICAgIC8vIHNlbGYub3duZXJzW3Rva2VuSWRdID0gYXJjNC5BZGRyZXNzKG93bmVyKQogICAgYnl0ZWNfMiAvLyAweDZmCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfcHV0CiAgICAvLyB0ZXN0X2NvbnRyYWN0cy5weToyNzAKICAgIC8vIGJhbGFuY2UgPSBzZWxmLmJhbGFuY2VzLmdldChvd25lciwgZGVmYXVsdD1hcmM0LlVJbnQyNTYoMCkpCiAgICBieXRlYyA3IC8vIDB4NjIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBpbnRjXzAgLy8gMzIKICAgIGJ6ZXJvCiAgICBkaWcgMQogICAgYm94X2dldAogICAgYnl0ZWMgMTAgLy8gMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIC8vIHRlc3RfY29udHJhY3RzLnB5OjI3MQogICAgLy8gc2VsZi5iYWxhbmNlc1tvd25lcl0gPSBhcmM0LlVJbnQyNTYoYmFsYW5jZS5uYXRpdmUgKyAxKQogICAgYnl0ZWMgNiAvLyAweDAxCiAgICBiKwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAzMgogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgYnwKICAgIGJveF9wdXQKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEIAEAgAImCwQVH3x1Bm1pbnRlZAFvAWENb3duZXJfYWNjb3VudAEAAQEBYgFwBNgI1PQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxGEAACCkkZycEMgNnMRkURDEYQQBcggwEmuzWtgROIqO6BHkJahQEw8H8AARk1yp6BG2b/ScErDGRJASUiqTxBCF63D0EtO26TgRxNDlfBPLxlKA2GgCODAAWAHEAtwDKAN8A7QEPAScBPQFfAZIBwQCABLhEezY2GgCOAQABACcEMQBnI0M2GgFJFSISRDYaAkkkWYECCEsBFRJEMQAkJwRlRBJEJCllRCMIKUsBZxYir6tMVwIASRVJJQ5EJUwJr1CAAXVLAlBMv0qIAfEyA08CUEsBUCcJTFCwKExQsCNDNhoBRwIVgQQSRIAETpE3lhJAACFJgART8CpAEkAAFkmABKV9T9sSQAALSYAEucb2lhJBAA0jJwUkTwJUKExQsCNDJEL/8DYaAUkVIhJEKkxQvkQoTFCwI0M2GgFJFSISRIABdUxQvkQoTFCwI0MkKWVEFiKvqyhMULAjQzYaAUkVIhJEJCllRBZLAaVEJwagSRUiDkQir6soTFCwI0M2GgFJFSISRCcHTFC+JwpOAk0oTFCwI0M2GgFJFSISRCtMUDIDTL5NKExQsCNDNhoBSRUiEkQ2GgJJFSISRFABJwhMUL4nBU4CTShMULAjQzYaAUkVIhJENhoCSRUiEkQqSwFQvkQxAEsBEkQrSwJQSwO/TwJQTFCABIWi5uBMULAjQzYaAUkVIhJENhoCSRUjEkQxAEsCUAEnCExQSwG/MQBPAlBMUIAETE3rq0xQsCNDNhoBRwIVIhJENhoCSU4DFSISRDYaA0lOAkkVIhJEKkxQvkRLARJEMQASQQA5I0QnB08CSU4CUEm+RCcGoUkVIg5EIq+rvzIDK08DSU4DUEy/TwJJSwKIADVPAkxQTFAnCUxQsCNDK0sBUDIDTL5NMQASQQAEI0L/tUsBMQBQAScITFC+JwVOAk0kU0L/oIoCACqL/1CL/r8nB4v+UCKvSwG+JwpOAk0nBqBJFSIORKu/iQ==", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 10, "patch": 1 } }, "events": [ { "name": "arc72_Transfer", "args": [ { "type": "address", "name": "field1" }, { "type": "address", "name": "field2" }, { "type": "uint256", "name": "field3" } ] }, { "name": "arc72_Approval", "args": [ { "type": "address", "name": "field1" }, { "type": "address", "name": "field2" }, { "type": "uint256", "name": "field3" } ] }, { "name": "arc72_ApprovalForAll", "args": [ { "type": "address", "name": "field1" }, { "type": "address", "name": "field2" }, { "type": "bool", "name": "field3" } ] } ], "templateVariables": {} }