{ "name": "MockTinymanPool", "structs": {}, "methods": [], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 3, "bytes": 1 }, "local": { "ints": 5, "bytes": 0 } }, "keys": { "global": { "asset1Id": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YXNzZXQxSWQ=" }, "asset2Id": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YXNzZXQySWQ=" }, "initialized": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "aW5pdGlhbGl6ZWQ=" }, "stateHolder": { "keyType": "AVMString", "valueType": "address", "key": "c3RhdGVIb2xkZXI=" } }, "local": { "asset_1_id": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YXNzZXRfMV9pZA==" }, "asset_2_id": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YXNzZXRfMl9pZA==" }, "asset_1_reserves": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YXNzZXRfMV9yZXNlcnZlcw==" }, "asset_2_reserves": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YXNzZXRfMl9yZXNlcnZlcw==" }, "total_fee_share": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dG90YWxfZmVlX3NoYXJl" } }, "box": {} }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 444 ], "errorMessage": "Must follow asset transfer" }, { "pc": [ 481 ], "errorMessage": "Must send to pool or state holder" }, { "pc": [ 406 ], "errorMessage": "Need 3 args for swap" }, { "pc": [ 430 ], "errorMessage": "Only fixed-input supported" }, { "pc": [ 546, 569 ], "errorMessage": "Overflow" }, { "pc": [ 247 ], "errorMessage": "Pool already initialized" }, { "pc": [ 573 ], "errorMessage": "Slippage exceeded" }, { "pc": [ 660 ], "errorMessage": "Unknown asset" }, { "pc": [ 245, 256, 277, 352, 372, 440, 508, 521, 577, 656, 667, 706, 746 ], "errorMessage": "check GlobalState exists" }, { "pc": [ 492, 500, 504, 751, 765 ], "errorMessage": "check LocalState exists" }, { "pc": [ 452 ], "errorMessage": "transaction type is axfer" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBNb2NrVGlueW1hblBvb2wuYWxnby50czo6TW9ja1RpbnltYW5Qb29sLmFwcHJvdmFsUHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgNCAyCiAgICBieXRlY2Jsb2NrICJhc3NldDFJZCIgImFzc2V0MklkIiAiYXNzZXRfMV9yZXNlcnZlcyIgImFzc2V0XzJfcmVzZXJ2ZXMiICJpbml0aWFsaXplZCIgInN0YXRlSG9sZGVyIiAidG90YWxfZmVlX3NoYXJlIgogICAgaW50Y18wIC8vIDAKICAgIGR1cG4gMgogICAgcHVzaGJ5dGVzICIiCiAgICBkdXBuIDgKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjY1CiAgICAvLyBpZiAoVHhuLmFwcGxpY2F0aW9uSWQuaWQgPT09IFVpbnQ2NCgwKSkgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MTQ0CiAgICAvLyBpZiAoVHhuLm51bUFwcEFyZ3MgPj0gVWludDY0KDEpKSB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9hZnRlcl9pbmxpbmVkX01vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjpNb2NrVGlueW1hblBvb2wub25DcmVhdGVANDcKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjE0NQogICAgLy8gY29uc3QgZmlyc3RBcmcgPSBUeG4uYXBwbGljYXRpb25BcmdzKDApOwogICAgaW50Y18wIC8vIDAKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MTQ3CiAgICAvLyBpZiAoZmlyc3RBcmcubGVuZ3RoID09PSBVaW50NjQoNCkpIHsKICAgIGxlbgogICAgaW50Y18yIC8vIDQKICAgID09CiAgICBieiBtYWluX2FmdGVyX2lubGluZWRfTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6Ok1vY2tUaW55bWFuUG9vbC5vbkNyZWF0ZUA0NwogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MTQ5CiAgICAvLyBjb25zdCBhc3NldDFJZCA9IGJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSk7CiAgICBpbnRjXzEgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoxNTAKICAgIC8vIGNvbnN0IGFzc2V0MklkID0gYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDIpKTsKICAgIGludGNfMyAvLyAyCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjMyCiAgICAvLyBhc3NldDFJZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsgIC8vIGUuZy4sIFVTREMKICAgIGJ5dGVjXzAgLy8gImFzc2V0MUlkIgogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MTY5CiAgICAvLyB0aGlzLmFzc2V0MUlkLnZhbHVlID0gYXNzZXQxSWQ7CiAgICB1bmNvdmVyIDIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czozMwogICAgLy8gYXNzZXQySWQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7ICAvLyBlLmcuLCBQcm9qZWN0IHRva2VuCiAgICBieXRlY18xIC8vICJhc3NldDJJZCIKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjE3MAogICAgLy8gdGhpcy5hc3NldDJJZC52YWx1ZSA9IGFzc2V0MklkOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjQ1CiAgICAvLyBpbml0aWFsaXplZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImluaXRpYWxpemVkIgogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MTcxCiAgICAvLyB0aGlzLmluaXRpYWxpemVkLnZhbHVlID0gVWludDY0KDApOwogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lubGluZWRfTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6Ok1vY2tUaW55bWFuUG9vbC5vbkNyZWF0ZUA0NzoKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjE1NQogICAgLy8gcmV0dXJuIHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6NjYKICAgIC8vIHJldHVybiB0aGlzLm9uQ3JlYXRlKCk7CiAgICByZXR1cm4KCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6NzAKICAgIC8vIGlmIChUeG4ub25Db21wbGV0aW9uID09PSBPbkNvbXBsZXRlQWN0aW9uLk9wdEluKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGJ6IG1haW5fYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czo3MQogICAgLy8gcmV0dXJuIHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjc1CiAgICAvLyBpZiAoVHhuLm51bUFwcEFyZ3MgPT09IFVpbnQ2NCgwKSkgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VANgogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6NzYKICAgIC8vIHJldHVybiBmYWxzZTsgLy8gTm8gYmFyZSBjYWxscyBzdXBwb3J0ZWQgKGV4Y2VwdCBjcmVhdGUgYW5kIG9wdC1pbikKICAgIGVycgoKbWFpbl9hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czo3OQogICAgLy8gY29uc3QgYWN0aW9uID0gVHhuLmFwcGxpY2F0aW9uQXJncygwKTsKICAgIGludGNfMCAvLyAwCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGR1cAogICAgYnVyeSAxMwogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6ODEKICAgIC8vIGlmIChhY3Rpb24gPT09IEJ5dGVzKCdjcmVhdGVQb29sJykpIHsKICAgIHB1c2hieXRlcyAiY3JlYXRlUG9vbCIKICAgID09CiAgICBieiBtYWluX2FmdGVyX2lmX2Vsc2VAOAogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6ODMKICAgIC8vIGNvbnN0IGFzc2V0MUlkID0gYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDEpKTsKICAgIGludGNfMSAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjg0CiAgICAvLyBjb25zdCBhc3NldDJJZCA9IGJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygyKSk7CiAgICBpbnRjXzMgLy8gMgogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czozMgogICAgLy8gYXNzZXQxSWQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7ICAvLyBlLmcuLCBVU0RDCiAgICBieXRlY18wIC8vICJhc3NldDFJZCIKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjE2OQogICAgLy8gdGhpcy5hc3NldDFJZC52YWx1ZSA9IGFzc2V0MUlkOwogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MzMKICAgIC8vIGFzc2V0MklkID0gR2xvYmFsU3RhdGU8dWludDY0PigpOyAgLy8gZS5nLiwgUHJvamVjdCB0b2tlbgogICAgYnl0ZWNfMSAvLyAiYXNzZXQySWQiCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoxNzAKICAgIC8vIHRoaXMuYXNzZXQySWQudmFsdWUgPSBhc3NldDJJZDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czo0NQogICAgLy8gaW5pdGlhbGl6ZWQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA0IC8vICJpbml0aWFsaXplZCIKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjE3MQogICAgLy8gdGhpcy5pbml0aWFsaXplZC52YWx1ZSA9IFVpbnQ2NCgwKTsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6ODkKICAgIC8vIHJldHVybiB0cnVlOwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9hZnRlcl9pZl9lbHNlQDg6CiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czo5MgogICAgLy8gaWYgKGFjdGlvbiA9PT0gQnl0ZXMoJ2luaXRpYWxpemVQb29sJykpIHsKICAgIGRpZyAxMQogICAgcHVzaGJ5dGVzICJpbml0aWFsaXplUG9vbCIKICAgID09CiAgICBieiBtYWluX2FmdGVyX2lmX2Vsc2VAMTAKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjkzCiAgICAvLyBjb25zdCByZXNlcnZlMSA9IGJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSk7CiAgICBpbnRjXzEgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czo5NAogICAgLy8gY29uc3QgcmVzZXJ2ZTIgPSBidG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMikpOwogICAgaW50Y18zIC8vIDIKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6OTUKICAgIC8vIGNvbnN0IGZlZUJwcyA9IGJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygzKSk7CiAgICBwdXNoaW50IDMgLy8gMwogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoxODkKICAgIC8vIGFzc2VydCh0aGlzLmluaXRpYWxpemVkLnZhbHVlID09PSBVaW50NjQoMCksICdQb29sIGFscmVhZHkgaW5pdGlhbGl6ZWQnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czo0NQogICAgLy8gaW5pdGlhbGl6ZWQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA0IC8vICJpbml0aWFsaXplZCIKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjE4OQogICAgLy8gYXNzZXJ0KHRoaXMuaW5pdGlhbGl6ZWQudmFsdWUgPT09IFVpbnQ2NCgwKSwgJ1Bvb2wgYWxyZWFkeSBpbml0aWFsaXplZCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBQb29sIGFscmVhZHkgaW5pdGlhbGl6ZWQKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjQ4CiAgICAvLyBzdGF0ZUhvbGRlciA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KCk7CiAgICBieXRlYyA1IC8vICJzdGF0ZUhvbGRlciIKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjE5MwogICAgLy8gdGhpcy5zdGF0ZUhvbGRlci52YWx1ZSA9IFR4bi5zZW5kZXI7CiAgICB0eG4gU2VuZGVyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MTk2CiAgICAvLyB0aGlzLmFzc2V0XzFfaWQoVHhuLnNlbmRlcikudmFsdWUgPSB0aGlzLmFzc2V0MUlkLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjMyCiAgICAvLyBhc3NldDFJZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsgIC8vIGUuZy4sIFVTREMKICAgIGJ5dGVjXzAgLy8gImFzc2V0MUlkIgogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MTk2CiAgICAvLyB0aGlzLmFzc2V0XzFfaWQoVHhuLnNlbmRlcikudmFsdWUgPSB0aGlzLmFzc2V0MUlkLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHR4biBTZW5kZXIKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjM4CiAgICAvLyBhc3NldF8xX2lkID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBwdXNoYnl0ZXMgImFzc2V0XzFfaWQiCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoxOTYKICAgIC8vIHRoaXMuYXNzZXRfMV9pZChUeG4uc2VuZGVyKS52YWx1ZSA9IHRoaXMuYXNzZXQxSWQudmFsdWU7CiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjE5NwogICAgLy8gdGhpcy5hc3NldF8yX2lkKFR4bi5zZW5kZXIpLnZhbHVlID0gdGhpcy5hc3NldDJJZC52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czozMwogICAgLy8gYXNzZXQySWQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7ICAvLyBlLmcuLCBQcm9qZWN0IHRva2VuCiAgICBieXRlY18xIC8vICJhc3NldDJJZCIKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjE5NwogICAgLy8gdGhpcy5hc3NldF8yX2lkKFR4bi5zZW5kZXIpLnZhbHVlID0gdGhpcy5hc3NldDJJZC52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICB0eG4gU2VuZGVyCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czozOQogICAgLy8gYXNzZXRfMl9pZCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgcHVzaGJ5dGVzICJhc3NldF8yX2lkIgogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MTk3CiAgICAvLyB0aGlzLmFzc2V0XzJfaWQoVHhuLnNlbmRlcikudmFsdWUgPSB0aGlzLmFzc2V0MklkLnZhbHVlOwogICAgdW5jb3ZlciAyCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoxOTgKICAgIC8vIHRoaXMuYXNzZXRfMV9yZXNlcnZlcyhUeG4uc2VuZGVyKS52YWx1ZSA9IGluaXRpYWxSZXNlcnZlMTsKICAgIHR4biBTZW5kZXIKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjQwCiAgICAvLyBhc3NldF8xX3Jlc2VydmVzID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldF8xX3Jlc2VydmVzIgogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MTk4CiAgICAvLyB0aGlzLmFzc2V0XzFfcmVzZXJ2ZXMoVHhuLnNlbmRlcikudmFsdWUgPSBpbml0aWFsUmVzZXJ2ZTE7CiAgICB1bmNvdmVyIDQKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjE5OQogICAgLy8gdGhpcy5hc3NldF8yX3Jlc2VydmVzKFR4bi5zZW5kZXIpLnZhbHVlID0gaW5pdGlhbFJlc2VydmUyOwogICAgdHhuIFNlbmRlcgogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6NDEKICAgIC8vIGFzc2V0XzJfcmVzZXJ2ZXMgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImFzc2V0XzJfcmVzZXJ2ZXMiCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoxOTkKICAgIC8vIHRoaXMuYXNzZXRfMl9yZXNlcnZlcyhUeG4uc2VuZGVyKS52YWx1ZSA9IGluaXRpYWxSZXNlcnZlMjsKICAgIHVuY292ZXIgMwogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MjAwCiAgICAvLyB0aGlzLnRvdGFsX2ZlZV9zaGFyZShUeG4uc2VuZGVyKS52YWx1ZSA9IGZlZUJwcyA+IFVpbnQ2NCgwKSA/IGZlZUJwcyA6IERFRkFVTFRfRkVFX0JQUzsKICAgIHB1c2hpbnQgMzAgLy8gMzAKICAgIGRpZyAxCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgdHhuIFNlbmRlcgogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6NDIKICAgIC8vIHRvdGFsX2ZlZV9zaGFyZSA9IExvY2FsU3RhdGU8dWludDY0PigpOyAgLy8gRmVlIGluIGJhc2lzIHBvaW50cwogICAgYnl0ZWMgNiAvLyAidG90YWxfZmVlX3NoYXJlIgogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MjAwCiAgICAvLyB0aGlzLnRvdGFsX2ZlZV9zaGFyZShUeG4uc2VuZGVyKS52YWx1ZSA9IGZlZUJwcyA+IFVpbnQ2NCgwKSA/IGZlZUJwcyA6IERFRkFVTFRfRkVFX0JQUzsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6NDUKICAgIC8vIGluaXRpYWxpemVkID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNCAvLyAiaW5pdGlhbGl6ZWQiCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyMDIKICAgIC8vIHRoaXMuaW5pdGlhbGl6ZWQudmFsdWUgPSBVaW50NjQoMSk7CiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjk3CiAgICAvLyByZXR1cm4gdHJ1ZTsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjEwMAogICAgLy8gaWYgKGFjdGlvbiA9PT0gQnl0ZXMoJ29wdEluQXNzZXRzJykpIHsKICAgIGRpZyAxMQogICAgcHVzaGJ5dGVzICJvcHRJbkFzc2V0cyIKICAgID09CiAgICBieiBtYWluX2FmdGVyX2lmX2Vsc2VAMTIKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjIwNgogICAgLy8gY29uc3QgYXBwQWRkcjogQWNjb3VudCA9IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzOwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjIwOC0yMTMKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IGFwcEFkZHIsCiAgICAvLyAgIHhmZXJBc3NldDogQXNzZXQodGhpcy5hc3NldDFJZC52YWx1ZSksCiAgICAvLyAgIGFzc2V0QW1vdW50OiBVaW50NjQoMCksCiAgICAvLyAgIGZlZTogVWludDY0KDApLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyMTAKICAgIC8vIHhmZXJBc3NldDogQXNzZXQodGhpcy5hc3NldDFJZC52YWx1ZSksCiAgICBpbnRjXzAgLy8gMAogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MzIKICAgIC8vIGFzc2V0MUlkID0gR2xvYmFsU3RhdGU8dWludDY0PigpOyAgLy8gZS5nLiwgVVNEQwogICAgYnl0ZWNfMCAvLyAiYXNzZXQxSWQiCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyMTAKICAgIC8vIHhmZXJBc3NldDogQXNzZXQodGhpcy5hc3NldDFJZC52YWx1ZSksCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MjExCiAgICAvLyBhc3NldEFtb3VudDogVWludDY0KDApLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBkdXAKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MjA4LTIxMwogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogYXBwQWRkciwKICAgIC8vICAgeGZlckFzc2V0OiBBc3NldCh0aGlzLmFzc2V0MUlkLnZhbHVlKSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IFVpbnQ2NCgwKSwKICAgIC8vICAgZmVlOiBVaW50NjQoMCksCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGludGNfMiAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyMTIKICAgIC8vIGZlZTogVWludDY0KDApLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyMDgtMjEzCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICBhc3NldFJlY2VpdmVyOiBhcHBBZGRyLAogICAgLy8gICB4ZmVyQXNzZXQ6IEFzc2V0KHRoaXMuYXNzZXQxSWQudmFsdWUpLAogICAgLy8gICBhc3NldEFtb3VudDogVWludDY0KDApLAogICAgLy8gICBmZWU6IFVpbnQ2NCgwKSwKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9zdWJtaXQKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjIxNS0yMjAKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IGFwcEFkZHIsCiAgICAvLyAgIHhmZXJBc3NldDogQXNzZXQodGhpcy5hc3NldDJJZC52YWx1ZSksCiAgICAvLyAgIGFzc2V0QW1vdW50OiBVaW50NjQoMCksCiAgICAvLyAgIGZlZTogVWludDY0KDApLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyMTcKICAgIC8vIHhmZXJBc3NldDogQXNzZXQodGhpcy5hc3NldDJJZC52YWx1ZSksCiAgICBpbnRjXzAgLy8gMAogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MzMKICAgIC8vIGFzc2V0MklkID0gR2xvYmFsU3RhdGU8dWludDY0PigpOyAgLy8gZS5nLiwgUHJvamVjdCB0b2tlbgogICAgYnl0ZWNfMSAvLyAiYXNzZXQySWQiCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyMTcKICAgIC8vIHhmZXJBc3NldDogQXNzZXQodGhpcy5hc3NldDJJZC52YWx1ZSksCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MjE4CiAgICAvLyBhc3NldEFtb3VudDogVWludDY0KDApLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjIxNS0yMjAKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IGFwcEFkZHIsCiAgICAvLyAgIHhmZXJBc3NldDogQXNzZXQodGhpcy5hc3NldDJJZC52YWx1ZSksCiAgICAvLyAgIGFzc2V0QW1vdW50OiBVaW50NjQoMCksCiAgICAvLyAgIGZlZTogVWludDY0KDApLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBpbnRjXzIgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MjE5CiAgICAvLyBmZWU6IFVpbnQ2NCgwKSwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MjE1LTIyMAogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogYXBwQWRkciwKICAgIC8vICAgeGZlckFzc2V0OiBBc3NldCh0aGlzLmFzc2V0MklkLnZhbHVlKSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IFVpbnQ2NCgwKSwKICAgIC8vICAgZmVlOiBVaW50NjQoMCksCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoxMDIKICAgIC8vIHJldHVybiB0cnVlOwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MTA1CiAgICAvLyBpZiAoYWN0aW9uID09PSBCeXRlcygnc3dhcCcpKSB7CiAgICBkaWcgMTEKICAgIHB1c2hieXRlcyAic3dhcCIKICAgID09CiAgICBieiBtYWluX2FmdGVyX2lmX2Vsc2VAMTQKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjEwNwogICAgLy8gYXNzZXJ0KFR4bi5udW1BcHBBcmdzID49IFVpbnQ2NCgzKSwgJ05lZWQgMyBhcmdzIGZvciBzd2FwJyk7CiAgICB0eG4gTnVtQXBwQXJncwogICAgcHVzaGludCAzIC8vIDMKICAgID49CiAgICBhc3NlcnQgLy8gTmVlZCAzIGFyZ3MgZm9yIHN3YXAKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjEwOAogICAgLy8gY29uc3Qgc3dhcFR5cGUgPSBUeG4uYXBwbGljYXRpb25BcmdzKDEpOwogICAgaW50Y18xIC8vIDEKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MTA5CiAgICAvLyBjb25zdCBtaW5BbW91bnRPdXQgPSBidG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMikpOwogICAgaW50Y18zIC8vIDIKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgYnVyeSA1CiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyMzIKICAgIC8vIGFzc2VydChzd2FwVHlwZSA9PT0gQnl0ZXMoJ2ZpeGVkLWlucHV0JyksICdPbmx5IGZpeGVkLWlucHV0IHN1cHBvcnRlZCcpOwogICAgcHVzaGJ5dGVzICJmaXhlZC1pbnB1dCIKICAgID09CiAgICBhc3NlcnQgLy8gT25seSBmaXhlZC1pbnB1dCBzdXBwb3J0ZWQKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjIzNAogICAgLy8gY29uc3QgYXBwQWRkcjogQWNjb3VudCA9IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzOwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjIzNQogICAgLy8gY29uc3Qgc3RhdGVIb2xkZXI6IEFjY291bnQgPSB0aGlzLnN0YXRlSG9sZGVyLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjQ4CiAgICAvLyBzdGF0ZUhvbGRlciA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KCk7CiAgICBieXRlYyA1IC8vICJzdGF0ZUhvbGRlciIKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjIzNQogICAgLy8gY29uc3Qgc3RhdGVIb2xkZXI6IEFjY291bnQgPSB0aGlzLnN0YXRlSG9sZGVyLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGJ1cnkgMTMKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjIzNgogICAgLy8gY29uc3QgY3VycmVudEluZGV4ID0gVHhuLmdyb3VwSW5kZXg7CiAgICB0eG4gR3JvdXBJbmRleAogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MjM3CiAgICAvLyBhc3NlcnQoY3VycmVudEluZGV4ID49IFVpbnQ2NCgxKSwgJ011c3QgZm9sbG93IGFzc2V0IHRyYW5zZmVyJyk7CiAgICBkdXAKICAgIGFzc2VydCAvLyBNdXN0IGZvbGxvdyBhc3NldCB0cmFuc2ZlcgogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MjQxCiAgICAvLyBjb25zdCBpbmNvbWluZ1RyYW5zZmVyID0gZ3R4bi5Bc3NldFRyYW5zZmVyVHhuKGN1cnJlbnRJbmRleCAtIFVpbnQ2NCgxKSk7CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18yIC8vIGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjI0MgogICAgLy8gY29uc3QgaW5jb21pbmdBc3NldCA9IGluY29taW5nVHJhbnNmZXIueGZlckFzc2V0OwogICAgZHVwCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGJ1cnkgOAogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MjQzCiAgICAvLyBjb25zdCBpbmNvbWluZ0Ftb3VudCA9IGluY29taW5nVHJhbnNmZXIuYXNzZXRBbW91bnQ7CiAgICBkdXAKICAgIGd0eG5zIEFzc2V0QW1vdW50CiAgICBidXJ5IDkKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjI0NQogICAgLy8gY29uc3QgdmFsaWRSZWNlaXZlciA9IGluY29taW5nVHJhbnNmZXIuYXNzZXRSZWNlaXZlciA9PT0gYXBwQWRkciB8fCBpbmNvbWluZ1RyYW5zZmVyLmFzc2V0UmVjZWl2ZXIgPT09IHN0YXRlSG9sZGVyOwogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgZHVwCiAgICBidXJ5IDEyCiAgICA9PQogICAgYm56IG1haW5fYm9vbF90cnVlQDI1CiAgICBkaWcgOQogICAgZGlnIDExCiAgICA9PQogICAgYnogbWFpbl9ib29sX2ZhbHNlQDI2CgptYWluX2Jvb2xfdHJ1ZUAyNToKICAgIGludGNfMSAvLyAxCgptYWluX2Jvb2xfbWVyZ2VAMjc6CiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyNDYKICAgIC8vIGFzc2VydCh2YWxpZFJlY2VpdmVyLCAnTXVzdCBzZW5kIHRvIHBvb2wgb3Igc3RhdGUgaG9sZGVyJyk7CiAgICBhc3NlcnQgLy8gTXVzdCBzZW5kIHRvIHBvb2wgb3Igc3RhdGUgaG9sZGVyCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyNDkKICAgIC8vIGNvbnN0IGZlZUJwcyA9IHRoaXMudG90YWxfZmVlX3NoYXJlKHN0YXRlSG9sZGVyKS52YWx1ZTsKICAgIGRpZyAxMAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6NDIKICAgIC8vIHRvdGFsX2ZlZV9zaGFyZSA9IExvY2FsU3RhdGU8dWludDY0PigpOyAgLy8gRmVlIGluIGJhc2lzIHBvaW50cwogICAgYnl0ZWMgNiAvLyAidG90YWxfZmVlX3NoYXJlIgogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MjQ5CiAgICAvLyBjb25zdCBmZWVCcHMgPSB0aGlzLnRvdGFsX2ZlZV9zaGFyZShzdGF0ZUhvbGRlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBidXJ5IDEwCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjI1MAogICAgLy8gY29uc3QgYXNzZXQxUmVzZXJ2ZXMgPSB0aGlzLmFzc2V0XzFfcmVzZXJ2ZXMoc3RhdGVIb2xkZXIpLnZhbHVlOwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6NDAKICAgIC8vIGFzc2V0XzFfcmVzZXJ2ZXMgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0XzFfcmVzZXJ2ZXMiCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyNTAKICAgIC8vIGNvbnN0IGFzc2V0MVJlc2VydmVzID0gdGhpcy5hc3NldF8xX3Jlc2VydmVzKHN0YXRlSG9sZGVyKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGJ1cnkgMTEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MjUxCiAgICAvLyBjb25zdCBhc3NldDJSZXNlcnZlcyA9IHRoaXMuYXNzZXRfMl9yZXNlcnZlcyhzdGF0ZUhvbGRlcikudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6NDEKICAgIC8vIGFzc2V0XzJfcmVzZXJ2ZXMgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImFzc2V0XzJfcmVzZXJ2ZXMiCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyNTEKICAgIC8vIGNvbnN0IGFzc2V0MlJlc2VydmVzID0gdGhpcy5hc3NldF8yX3Jlc2VydmVzKHN0YXRlSG9sZGVyKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MjU3CiAgICAvLyBpZiAoaW5jb21pbmdBc3NldCA9PT0gQXNzZXQodGhpcy5hc3NldDFJZC52YWx1ZSkpIHsKICAgIGludGNfMCAvLyAwCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czozMgogICAgLy8gYXNzZXQxSWQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7ICAvLyBlLmcuLCBVU0RDCiAgICBieXRlY18wIC8vICJhc3NldDFJZCIKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjI1NwogICAgLy8gaWYgKGluY29taW5nQXNzZXQgPT09IEFzc2V0KHRoaXMuYXNzZXQxSWQudmFsdWUpKSB7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDcKICAgID09CiAgICBieiBtYWluX2Vsc2VfYm9keUAyOQogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MjYxCiAgICAvLyBvdXRBc3NldCA9IEFzc2V0KHRoaXMuYXNzZXQySWQudmFsdWUpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjMzCiAgICAvLyBhc3NldDJJZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsgIC8vIGUuZy4sIFByb2plY3QgdG9rZW4KICAgIGJ5dGVjXzEgLy8gImFzc2V0MklkIgogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MjYxCiAgICAvLyBvdXRBc3NldCA9IEFzc2V0KHRoaXMuYXNzZXQySWQudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGJ1cnkgNQogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDkKICAgIGJ1cnkgNgogICAgYnVyeSAyCgptYWluX2FmdGVyX2lmX2Vsc2VAMzA6CiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyNzIKICAgIC8vIGNvbnN0IG5ldElucHV0ID0gdGhpcy5tdWxEaXZGbG9vcihpbmNvbWluZ0Ftb3VudCwgRkVFX0JQU19CQVNFIC0gZmVlQnBzLCBGRUVfQlBTX0JBU0UpOwogICAgcHVzaGludCAxMDAwMCAvLyAxMDAwMAogICAgZGlnIDgKICAgIC0KICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjU0CiAgICAvLyBjb25zdCBbaGksIGxvXSA9IG11bHcobjEsIG4yKTsKICAgIGRpZyA3CiAgICBtdWx3CiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czo1NQogICAgLy8gY29uc3QgW3FfaGksIHFfbG8sIF9yX2hpLCBfcl9sb10gPSBkaXZtb2R3KGhpLCBsbywgVWludDY0KDApLCBkKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyNzIKICAgIC8vIGNvbnN0IG5ldElucHV0ID0gdGhpcy5tdWxEaXZGbG9vcihpbmNvbWluZ0Ftb3VudCwgRkVFX0JQU19CQVNFIC0gZmVlQnBzLCBGRUVfQlBTX0JBU0UpOwogICAgcHVzaGludCAxMDAwMCAvLyAxMDAwMAogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6NTUKICAgIC8vIGNvbnN0IFtxX2hpLCBxX2xvLCBfcl9oaSwgX3JfbG9dID0gZGl2bW9kdyhoaSwgbG8sIFVpbnQ2NCgwKSwgZCk7CiAgICBkaXZtb2R3CiAgICBwb3BuIDIKICAgIHN3YXAKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjU2CiAgICAvLyBhc3NlcnQocV9oaSA9PT0gVWludDY0KDApLCAnT3ZlcmZsb3cnKTsKICAgICEKICAgIGFzc2VydCAvLyBPdmVyZmxvdwogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6Mjc1CiAgICAvLyBjb25zdCBvdXRBbW91bnQgPSB0aGlzLm11bERpdkZsb29yKG91dHB1dFJlc2VydmVzLCBuZXRJbnB1dCwgaW5wdXRSZXNlcnZlcyArIG5ldElucHV0KTsKICAgIGRpZyA1CiAgICBkaWcgMQogICAgKwogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6NTQKICAgIC8vIGNvbnN0IFtoaSwgbG9dID0gbXVsdyhuMSwgbjIpOwogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgbXVsdwogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6NTUKICAgIC8vIGNvbnN0IFtxX2hpLCBxX2xvLCBfcl9oaSwgX3JfbG9dID0gZGl2bW9kdyhoaSwgbG8sIFVpbnQ2NCgwKSwgZCk7CiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAzCiAgICBkaXZtb2R3CiAgICBwb3BuIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSAzCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czo1NgogICAgLy8gYXNzZXJ0KHFfaGkgPT09IFVpbnQ2NCgwKSwgJ092ZXJmbG93Jyk7CiAgICAhCiAgICBhc3NlcnQgLy8gT3ZlcmZsb3cKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjI3NwogICAgLy8gYXNzZXJ0KG91dEFtb3VudCA+PSBtaW5BbW91bnRPdXQsICdTbGlwcGFnZSBleGNlZWRlZCcpOwogICAgZGlnIDQKICAgID49CiAgICBhc3NlcnQgLy8gU2xpcHBhZ2UgZXhjZWVkZWQKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjI4MAogICAgLy8gaWYgKGluY29taW5nQXNzZXQgPT09IEFzc2V0KHRoaXMuYXNzZXQxSWQudmFsdWUpKSB7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MzIKICAgIC8vIGFzc2V0MUlkID0gR2xvYmFsU3RhdGU8dWludDY0PigpOyAgLy8gZS5nLiwgVVNEQwogICAgYnl0ZWNfMCAvLyAiYXNzZXQxSWQiCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyODAKICAgIC8vIGlmIChpbmNvbWluZ0Fzc2V0ID09PSBBc3NldCh0aGlzLmFzc2V0MUlkLnZhbHVlKSkgewogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyA2CiAgICA9PQogICAgYnogbWFpbl9lbHNlX2JvZHlAMzIKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjI4MQogICAgLy8gdGhpcy5hc3NldF8xX3Jlc2VydmVzKHN0YXRlSG9sZGVyKS52YWx1ZSA9IGlucHV0UmVzZXJ2ZXMgKyBpbmNvbWluZ0Ftb3VudDsKICAgIGRpZyA0CiAgICBkaWcgNwogICAgKwogICAgZGlnIDExCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjQwCiAgICAvLyBhc3NldF8xX3Jlc2VydmVzID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldF8xX3Jlc2VydmVzIgogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MjgxCiAgICAvLyB0aGlzLmFzc2V0XzFfcmVzZXJ2ZXMoc3RhdGVIb2xkZXIpLnZhbHVlID0gaW5wdXRSZXNlcnZlcyArIGluY29taW5nQW1vdW50OwogICAgdW5jb3ZlciAyCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyODIKICAgIC8vIHRoaXMuYXNzZXRfMl9yZXNlcnZlcyhzdGF0ZUhvbGRlcikudmFsdWUgPSBvdXRwdXRSZXNlcnZlcyAtIG91dEFtb3VudDsKICAgIGRpZyAyCiAgICBkaWcgMgogICAgLQogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6NDEKICAgIC8vIGFzc2V0XzJfcmVzZXJ2ZXMgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImFzc2V0XzJfcmVzZXJ2ZXMiCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyODIKICAgIC8vIHRoaXMuYXNzZXRfMl9yZXNlcnZlcyhzdGF0ZUhvbGRlcikudmFsdWUgPSBvdXRwdXRSZXNlcnZlcyAtIG91dEFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9sb2NhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAzMzoKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjI4OS0yOTQKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICAvLyAgIHhmZXJBc3NldDogb3V0QXNzZXQsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBvdXRBbW91bnQsCiAgICAvLyAgIGZlZTogVWludDY0KDApLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyOTAKICAgIC8vIGFzc2V0UmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZGlnIDMKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjI4OS0yOTQKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICAvLyAgIHhmZXJBc3NldDogb3V0QXNzZXQsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBvdXRBbW91bnQsCiAgICAvLyAgIGZlZTogVWludDY0KDApLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBpbnRjXzIgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MjkzCiAgICAvLyBmZWU6IFVpbnQ2NCgwKSwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6Mjg5LTI5NAogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgeGZlckFzc2V0OiBvdXRBc3NldCwKICAgIC8vICAgYXNzZXRBbW91bnQ6IG91dEFtb3VudCwKICAgIC8vICAgZmVlOiBVaW50NjQoMCksCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoxMTEKICAgIC8vIHJldHVybiB0cnVlOwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9lbHNlX2JvZHlAMzI6CiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyODQKICAgIC8vIHRoaXMuYXNzZXRfMl9yZXNlcnZlcyhzdGF0ZUhvbGRlcikudmFsdWUgPSBpbnB1dFJlc2VydmVzICsgaW5jb21pbmdBbW91bnQ7CiAgICBkaWcgNAogICAgZGlnIDcKICAgICsKICAgIGRpZyAxMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czo0MQogICAgLy8gYXNzZXRfMl9yZXNlcnZlcyA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYXNzZXRfMl9yZXNlcnZlcyIKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjI4NAogICAgLy8gdGhpcy5hc3NldF8yX3Jlc2VydmVzKHN0YXRlSG9sZGVyKS52YWx1ZSA9IGlucHV0UmVzZXJ2ZXMgKyBpbmNvbWluZ0Ftb3VudDsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6Mjg1CiAgICAvLyB0aGlzLmFzc2V0XzFfcmVzZXJ2ZXMoc3RhdGVIb2xkZXIpLnZhbHVlID0gb3V0cHV0UmVzZXJ2ZXMgLSBvdXRBbW91bnQ7CiAgICBkaWcgMgogICAgZGlnIDIKICAgIC0KICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjQwCiAgICAvLyBhc3NldF8xX3Jlc2VydmVzID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldF8xX3Jlc2VydmVzIgogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6Mjg1CiAgICAvLyB0aGlzLmFzc2V0XzFfcmVzZXJ2ZXMoc3RhdGVIb2xkZXIpLnZhbHVlID0gb3V0cHV0UmVzZXJ2ZXMgLSBvdXRBbW91bnQ7CiAgICBzd2FwCiAgICBhcHBfbG9jYWxfcHV0CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAzMwoKbWFpbl9lbHNlX2JvZHlAMjk6CiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyNjQKICAgIC8vIGFzc2VydChpbmNvbWluZ0Fzc2V0ID09PSBBc3NldCh0aGlzLmFzc2V0MklkLnZhbHVlKSwgJ1Vua25vd24gYXNzZXQnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czozMwogICAgLy8gYXNzZXQySWQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7ICAvLyBlLmcuLCBQcm9qZWN0IHRva2VuCiAgICBieXRlY18xIC8vICJhc3NldDJJZCIKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjI2NAogICAgLy8gYXNzZXJ0KGluY29taW5nQXNzZXQgPT09IEFzc2V0KHRoaXMuYXNzZXQySWQudmFsdWUpLCAnVW5rbm93biBhc3NldCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyA3CiAgICA9PQogICAgYXNzZXJ0IC8vIFVua25vd24gYXNzZXQKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjI2NwogICAgLy8gb3V0QXNzZXQgPSBBc3NldCh0aGlzLmFzc2V0MUlkLnZhbHVlKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czozMgogICAgLy8gYXNzZXQxSWQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7ICAvLyBlLmcuLCBVU0RDCiAgICBieXRlY18wIC8vICJhc3NldDFJZCIKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjI2NwogICAgLy8gb3V0QXNzZXQgPSBBc3NldCh0aGlzLmFzc2V0MUlkLnZhbHVlKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBidXJ5IDUKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGJ1cnkgNQogICAgZGlnIDgKICAgIGJ1cnkgMgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMzAKCm1haW5fYm9vbF9mYWxzZUAyNjoKICAgIGludGNfMCAvLyAwCiAgICBiIG1haW5fYm9vbF9tZXJnZUAyNwoKbWFpbl9hZnRlcl9pZl9lbHNlQDE0OgogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MTE0CiAgICAvLyBpZiAoYWN0aW9uID09PSBCeXRlcygndXBkYXRlRmVlJykpIHsKICAgIGRpZyAxMQogICAgcHVzaGJ5dGVzICJ1cGRhdGVGZWUiCiAgICA9PQogICAgYnogbWFpbl9hZnRlcl9pZl9lbHNlQDE2CiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoxMTUKICAgIC8vIGNvbnN0IG5ld0ZlZUJwcyA9IGJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSk7CiAgICBpbnRjXzEgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyOTgKICAgIC8vIGNvbnN0IHN0YXRlSG9sZGVyOiBBY2NvdW50ID0gdGhpcy5zdGF0ZUhvbGRlci52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czo0OAogICAgLy8gc3RhdGVIb2xkZXIgPSBHbG9iYWxTdGF0ZTxBY2NvdW50PigpOwogICAgYnl0ZWMgNSAvLyAic3RhdGVIb2xkZXIiCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyOTgKICAgIC8vIGNvbnN0IHN0YXRlSG9sZGVyOiBBY2NvdW50ID0gdGhpcy5zdGF0ZUhvbGRlci52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czo0MgogICAgLy8gdG90YWxfZmVlX3NoYXJlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7ICAvLyBGZWUgaW4gYmFzaXMgcG9pbnRzCiAgICBieXRlYyA2IC8vICJ0b3RhbF9mZWVfc2hhcmUiCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czoyOTkKICAgIC8vIHRoaXMudG90YWxfZmVlX3NoYXJlKHN0YXRlSG9sZGVyKS52YWx1ZSA9IG5ld0ZlZUJwczsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MTE3CiAgICAvLyByZXR1cm4gdHJ1ZTsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYWZ0ZXJfaWZfZWxzZUAxNjoKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjEyMAogICAgLy8gaWYgKGFjdGlvbiA9PT0gQnl0ZXMoJ2FkZExpcXVpZGl0eScpKSB7CiAgICBkaWcgMTEKICAgIHB1c2hieXRlcyAiYWRkTGlxdWlkaXR5IgogICAgPT0KICAgIGJ6IG1haW5fYWZ0ZXJfaWZfZWxzZUAxOAogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MTIxCiAgICAvLyBjb25zdCBhbW91bnQxID0gYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDEpKTsKICAgIGludGNfMSAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjEyMgogICAgLy8gY29uc3QgYW1vdW50MiA9IGJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygyKSk7CiAgICBpbnRjXzMgLy8gMgogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czozMDMKICAgIC8vIGNvbnN0IHN0YXRlSG9sZGVyOiBBY2NvdW50ID0gdGhpcy5zdGF0ZUhvbGRlci52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czo0OAogICAgLy8gc3RhdGVIb2xkZXIgPSBHbG9iYWxTdGF0ZTxBY2NvdW50PigpOwogICAgYnl0ZWMgNSAvLyAic3RhdGVIb2xkZXIiCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czozMDMKICAgIC8vIGNvbnN0IHN0YXRlSG9sZGVyOiBBY2NvdW50ID0gdGhpcy5zdGF0ZUhvbGRlci52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czozMDQKICAgIC8vIHRoaXMuYXNzZXRfMV9yZXNlcnZlcyhzdGF0ZUhvbGRlcikudmFsdWUgPSB0aGlzLmFzc2V0XzFfcmVzZXJ2ZXMoc3RhdGVIb2xkZXIpLnZhbHVlICsgYW1vdW50MTsKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjQwCiAgICAvLyBhc3NldF8xX3Jlc2VydmVzID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldF8xX3Jlc2VydmVzIgogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MzA0CiAgICAvLyB0aGlzLmFzc2V0XzFfcmVzZXJ2ZXMoc3RhdGVIb2xkZXIpLnZhbHVlID0gdGhpcy5hc3NldF8xX3Jlc2VydmVzKHN0YXRlSG9sZGVyKS52YWx1ZSArIGFtb3VudDE7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIHVuY292ZXIgMwogICAgKwogICAgZGlnIDEKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjQwCiAgICAvLyBhc3NldF8xX3Jlc2VydmVzID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldF8xX3Jlc2VydmVzIgogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MzA0CiAgICAvLyB0aGlzLmFzc2V0XzFfcmVzZXJ2ZXMoc3RhdGVIb2xkZXIpLnZhbHVlID0gdGhpcy5hc3NldF8xX3Jlc2VydmVzKHN0YXRlSG9sZGVyKS52YWx1ZSArIGFtb3VudDE7CiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjMwNQogICAgLy8gdGhpcy5hc3NldF8yX3Jlc2VydmVzKHN0YXRlSG9sZGVyKS52YWx1ZSA9IHRoaXMuYXNzZXRfMl9yZXNlcnZlcyhzdGF0ZUhvbGRlcikudmFsdWUgKyBhbW91bnQyOwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6NDEKICAgIC8vIGFzc2V0XzJfcmVzZXJ2ZXMgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImFzc2V0XzJfcmVzZXJ2ZXMiCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czozMDUKICAgIC8vIHRoaXMuYXNzZXRfMl9yZXNlcnZlcyhzdGF0ZUhvbGRlcikudmFsdWUgPSB0aGlzLmFzc2V0XzJfcmVzZXJ2ZXMoc3RhdGVIb2xkZXIpLnZhbHVlICsgYW1vdW50MjsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgdW5jb3ZlciAyCiAgICArCiAgICAvLyBNb2NrVGlueW1hblBvb2wuYWxnby50czo0MQogICAgLy8gYXNzZXRfMl9yZXNlcnZlcyA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYXNzZXRfMl9yZXNlcnZlcyIKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjMwNQogICAgLy8gdGhpcy5hc3NldF8yX3Jlc2VydmVzKHN0YXRlSG9sZGVyKS52YWx1ZSA9IHRoaXMuYXNzZXRfMl9yZXNlcnZlcyhzdGF0ZUhvbGRlcikudmFsdWUgKyBhbW91bnQyOwogICAgc3dhcAogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MTI0CiAgICAvLyByZXR1cm4gdHJ1ZTsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYWZ0ZXJfaWZfZWxzZUAxODoKICAgIC8vIE1vY2tUaW55bWFuUG9vbC5hbGdvLnRzOjEyNwogICAgLy8gcmV0dXJuIGZhbHNlOyAvLyBVbmtub3duIGFjdGlvbgogICAgZXJyCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBNb2NrVGlueW1hblBvb2wuYWxnby50czo6TW9ja1RpbnltYW5Qb29sLmNsZWFyU3RhdGVQcm9ncmFtKCkgLT4gdWludDY0OgptYWluOgogICAgLy8gTW9ja1RpbnltYW5Qb29sLmFsZ28udHM6MTM0CiAgICAvLyByZXR1cm4gdHJ1ZTsKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { "approval": "CyAEAAEEAiYHCGFzc2V0MUlkCGFzc2V0MklkEGFzc2V0XzFfcmVzZXJ2ZXMQYXNzZXRfMl9yZXNlcnZlcwtpbml0aWFsaXplZAtzdGF0ZUhvbGRlcg90b3RhbF9mZWVfc2hhcmUiRwKAAEcIMRhAACMxG0EAHCLAGhUkEkEAEyPAGhclwBoXKE8CZylMZycEImcjQzEZIxJBAAIjQzEbQAABACLAGklFDYAKY3JlYXRlUG9vbBJBABUjwBoXJcAaFyhPAmcpTGcnBCJnI0NLC4AOaW5pdGlhbGl6ZVBvb2wSQQBjI8AaFyXAGheBA8AaFyInBGVEFEQnBTEAZyIoZUQxAIAKYXNzZXRfMV9pZE8CZiIpZUQxAIAKYXNzZXRfMl9pZE8CZjEAKk8EZjEAK08DZoEeSwFPAk0xACcGTwJmJwQjZyNDSwuAC29wdEluQXNzZXRzEkEAKzIKsSIoZUQishKyEUmyFCSyECKyAbOxIillRCKyErIRshQkshAisgGzI0NLC4AEc3dhcBJBARgxG4EDD0QjwBolwBoXRQWAC2ZpeGVkLWlucHV0EkQyCiInBWVMRQ1EMRZJRCMJSTgQJBJESTgRRQhJOBJFCTgUSUUMEkAACEsJSwsSQQDFI0RLCkkiJwZjTEUKREkiKmNMRQtEIitjRCIoZURLBxJBAIoiKWVMRQVESwlFBkUCgZBOSwgJSwcdIoGQTh9GAkwUREsFSwEISwNPAh0iTwMfRgJJTgJFAxRESwQPRCIoZURLBhJBACxLBEsHCEsLSU4CKk8CZksCSwIJK0xmsTEASwGyEksDshGyFCSyECKyAbMjQ0sESwcISwtJTgIrTwJmSwJLAgkqTGZC/9EiKWVESwcSRCIoZUxFBURFBUsIRQJC/2siQv84SwuACXVwZGF0ZUZlZRJBABAjwBoXIicFZUQnBk8CZiNDSwuADGFkZExpcXVpZGl0eRJBACgjwBoXJcAaFyInBWVESSIqY0RPAwhLASpPAmZJIitjRE8CCCtMZiNDAA==", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 3, "patch": 2 } }, "events": [], "templateVariables": {} }