{ "name": "DigitalMarketplace", "structs": { "Bid": [ { "name": "bidder", "type": "address" }, { "name": "amount", "type": "uint64" } ], "Sale": [ { "name": "amount", "type": "uint64" }, { "name": "cost", "type": "uint64" }, { "name": "bid", "type": "Bid" } ], "SaleKey": [ { "name": "owner", "type": "address" }, { "name": "asset", "type": "uint64" } ], "UnencumberedBidsReceipt": [ { "name": "total_bids", "type": "uint64" }, { "name": "unencumbered_bids", "type": "uint64" } ] }, "methods": [ { "name": "deposit", "args": [ { "type": "pay", "name": "payment" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "withdraw", "args": [ { "type": "uint64", "name": "amount" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "sponsor_asset", "args": [ { "type": "asset", "name": "asset" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "open_sale", "args": [ { "type": "axfer", "name": "asset_deposit" }, { "type": "uint64", "name": "cost" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "close_sale", "args": [ { "type": "asset", "name": "asset" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "buy", "args": [ { "type": "(address,uint64)", "struct": "SaleKey", "name": "sale_key" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "bid", "args": [ { "type": "(address,uint64)", "struct": "SaleKey", "name": "sale_key" }, { "type": "uint64", "name": "new_bid_amount" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "claim_unencumbered_bids", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "get_total_and_unencumbered_bids", "args": [], "returns": { "type": "(uint64,uint64)", "struct": "UnencumberedBidsReceipt" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "accept_bid", "args": [ { "type": "uint64", "name": "asset" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 0, "bytes": 0 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": {}, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "deposited": { "keyType": "address", "valueType": "uint64", "prefix": "ZGVwb3NpdGVk" }, "sales": { "keyType": "SaleKey", "valueType": "Sale", "prefix": "c2FsZXM=" }, "receipt_book": { "keyType": "address", "valueType": "((address,uint64),uint64)[]", "prefix": "cmVjZWlwdF9ib29r" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 505 ], "errorMessage": "Already opted in" }, { "pc": [ 514 ], "errorMessage": "Clawback ASA" }, { "pc": [ 391, 560 ], "errorMessage": "Different sender" }, { "pc": [ 347, 348, 743, 855, 873, 877, 899, 903, 981, 1000, 1099, 1111, 1114, 1179, 1345, 1424, 1428, 1544, 1555 ], "errorMessage": "Index access is out of bounds" }, { "pc": [ 129, 144, 170, 182, 200, 215, 233, 258, 276, 291 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ 585 ], "errorMessage": "Sale already exists" }, { "pc": [ 861 ], "errorMessage": "Seller cannot be bidder" }, { "pc": [ 750 ], "errorMessage": "Seller cannot be buyer" }, { "pc": [ 895 ], "errorMessage": "Worse bid" }, { "pc": [ 399, 568 ], "errorMessage": "Wrong receiver" }, { "pc": [ 404, 434, 590, 650, 710, 718, 787, 796, 921, 1020, 1243, 1265, 1440, 1449, 1604, 1624 ], "errorMessage": "account funded" }, { "pc": [ 510 ], "errorMessage": "asset exists" }, { "pc": [ 318 ], "errorMessage": "can only call when creating" }, { "pc": [ 132, 147, 173, 185, 203, 218, 236, 261, 279, 294 ], "errorMessage": "can only call when not creating" }, { "pc": [ 446, 465, 524, 662, 729, 807, 831, 961, 1033, 1224, 1279, 1460, 1638 ], "errorMessage": "check self.deposited entry exists" }, { "pc": [ 1157, 1507 ], "errorMessage": "check self.receipt_book entry exists" }, { "pc": [ 687, 757, 872, 1422 ], "errorMessage": "check self.sales entry exists" }, { "pc": [ 246 ], "errorMessage": "transaction type is axfer" }, { "pc": [ 304 ], "errorMessage": "transaction type is pay" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuZGlnaXRhbF9tYXJrZXRwbGFjZS5jb250cmFjdC5EaWdpdGFsTWFya2V0cGxhY2UuX19hbGdvcHlfZW50cnlwb2ludF93aXRoX2luaXQoKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDQ4IDQKICAgIGJ5dGVjYmxvY2sgImRlcG9zaXRlZCIgInJlY2VpcHRfYm9vayIgInNhbGVzIiAiIiAweDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBEaWdpdGFsTWFya2V0cGxhY2UoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxNQogICAgcHVzaGJ5dGVzcyAweDM2MjVlNGViIDB4MjFmMWRkZmYgMHgxMzAwMGE5NCAweGE2OTIwMDY2IDB4MDk1NDQ4MTAgMHhkNDlhYzYwZSAweGExOGYxZmZjIDB4NDU2ZTM5NzUgMHgxZWFiYmI1OCAweGY4ZTBlZmFmIC8vIG1ldGhvZCAiZGVwb3NpdChwYXkpdm9pZCIsIG1ldGhvZCAid2l0aGRyYXcodWludDY0KXZvaWQiLCBtZXRob2QgInNwb25zb3JfYXNzZXQoYXNzZXQpdm9pZCIsIG1ldGhvZCAib3Blbl9zYWxlKGF4ZmVyLHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJjbG9zZV9zYWxlKGFzc2V0KXZvaWQiLCBtZXRob2QgImJ1eSgoYWRkcmVzcyx1aW50NjQpKXZvaWQiLCBtZXRob2QgImJpZCgoYWRkcmVzcyx1aW50NjQpLHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJjbGFpbV91bmVuY3VtYmVyZWRfYmlkcygpdm9pZCIsIG1ldGhvZCAiZ2V0X3RvdGFsX2FuZF91bmVuY3VtYmVyZWRfYmlkcygpKHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJhY2NlcHRfYmlkKHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9kZXBvc2l0X3JvdXRlQDUgbWFpbl93aXRoZHJhd19yb3V0ZUA2IG1haW5fc3BvbnNvcl9hc3NldF9yb3V0ZUA3IG1haW5fb3Blbl9zYWxlX3JvdXRlQDggbWFpbl9jbG9zZV9zYWxlX3JvdXRlQDkgbWFpbl9idXlfcm91dGVAMTAgbWFpbl9iaWRfcm91dGVAMTEgbWFpbl9jbGFpbV91bmVuY3VtYmVyZWRfYmlkc19yb3V0ZUAxMiBtYWluX2dldF90b3RhbF9hbmRfdW5lbmN1bWJlcmVkX2JpZHNfcm91dGVAMTMgbWFpbl9hY2NlcHRfYmlkX3JvdXRlQDE0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgRGlnaXRhbE1hcmtldHBsYWNlKEFSQzRDb250cmFjdCk6CiAgICBpbnRjXzAgLy8gMAogICAgcmV0dXJuCgptYWluX2FjY2VwdF9iaWRfcm91dGVAMTQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToyMjIKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIERpZ2l0YWxNYXJrZXRwbGFjZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MjIyCiAgICAvLyBAYWJpbWV0aG9kCiAgICBjYWxsc3ViIGFjY2VwdF9iaWQKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X3RvdGFsX2FuZF91bmVuY3VtYmVyZWRfYmlkc19yb3V0ZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjIwOAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldF90b3RhbF9hbmRfdW5lbmN1bWJlcmVkX2JpZHMKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2NsYWltX3VuZW5jdW1iZXJlZF9iaWRzX3JvdXRlQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTg5CiAgICAvLyBAYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgY2xhaW1fdW5lbmN1bWJlcmVkX2JpZHMKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmlkX3JvdXRlQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTU0CiAgICAvLyBAYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBEaWdpdGFsTWFya2V0cGxhY2UoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjE1NAogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiBiaWQKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYnV5X3JvdXRlQDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTM2CiAgICAvLyBAYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBEaWdpdGFsTWFya2V0cGxhY2UoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjEzNgogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiBidXkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fY2xvc2Vfc2FsZV9yb3V0ZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTIxCiAgICAvLyBAYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBEaWdpdGFsTWFya2V0cGxhY2UoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTIxCiAgICAvLyBAYWJpbWV0aG9kCiAgICBjYWxsc3ViIGNsb3NlX3NhbGUKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fb3Blbl9zYWxlX3JvdXRlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weTo5NwogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgRGlnaXRhbE1hcmtldHBsYWNlKEFSQzRDb250cmFjdCk6CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMyAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weTo5NwogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiBvcGVuX3NhbGUKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc3BvbnNvcl9hc3NldF9yb3V0ZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6ODIKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIERpZ2l0YWxNYXJrZXRwbGFjZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weTo4MgogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiBzcG9uc29yX2Fzc2V0CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3dpdGhkcmF3X3JvdXRlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weTo3NgogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgRGlnaXRhbE1hcmtldHBsYWNlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weTo3NgogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiB3aXRoZHJhdwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZXBvc2l0X3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weTo2MgogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgRGlnaXRhbE1hcmtldHBsYWNlKEFSQzRDb250cmFjdCk6CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjYyCiAgICAvLyBAYWJpbWV0aG9kCiAgICBjYWxsc3ViIGRlcG9zaXQKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDE1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIERpZ2l0YWxNYXJrZXRwbGFjZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxNwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuZGlnaXRhbF9tYXJrZXRwbGFjZS5zdWJyb3V0aW5lcy5maW5kX2JpZF9yZWNlaXB0KHJlY2VpcHRzOiBieXRlcywga2V5OiBieXRlcykgLT4gdWludDY0LCB1aW50NjQ6CmZpbmRfYmlkX3JlY2VpcHQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9zdWJyb3V0aW5lcy5weTo2LTkKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgZmluZF9iaWRfcmVjZWlwdCgKICAgIC8vICAgICByZWNlaXB0czogSW1tdXRhYmxlQXJyYXlbQmlkUmVjZWlwdF0sIGtleTogU2FsZUtleQogICAgLy8gKSAtPiB0dXBsZVtib29sLCBVSW50NjRdOgogICAgcHJvdG8gMiAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9zdWJyb3V0aW5lcy5weToxMAogICAgLy8gZm9yIGkgaW4gdXJhbmdlKHJlY2VpcHRzLmxlbmd0aCk6CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18wIC8vIDAKCmZpbmRfYmlkX3JlY2VpcHRfZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2Uvc3Vicm91dGluZXMucHk6MTAKICAgIC8vIGZvciBpIGluIHVyYW5nZShyZWNlaXB0cy5sZW5ndGgpOgogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICA8CiAgICBieiBmaW5kX2JpZF9yZWNlaXB0X2FmdGVyX2ZvckA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9zdWJyb3V0aW5lcy5weToxMQogICAgLy8gaWYgcmVjZWlwdHNbaV0uc2FsZV9rZXkgPT0ga2V5OgogICAgZnJhbWVfZGlnIC0yCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMiAvLyA0OAogICAgKgogICAgaW50Y18yIC8vIDQ4CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGV4dHJhY3QgMCA0MCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGJ6IGZpbmRfYmlkX3JlY2VpcHRfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9zdWJyb3V0aW5lcy5weToxMgogICAgLy8gcmV0dXJuIFRydWUsIGkKICAgIGludGNfMSAvLyAxCiAgICBmcmFtZV9kaWcgMQogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDMKICAgIHJldHN1YgoKZmluZF9iaWRfcmVjZWlwdF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9zdWJyb3V0aW5lcy5weToxMAogICAgLy8gZm9yIGkgaW4gdXJhbmdlKHJlY2VpcHRzLmxlbmd0aCk6CiAgICBmcmFtZV9kaWcgMQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMQogICAgYiBmaW5kX2JpZF9yZWNlaXB0X2Zvcl9oZWFkZXJAMQoKZmluZF9iaWRfcmVjZWlwdF9hZnRlcl9mb3JANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL3N1YnJvdXRpbmVzLnB5OjEzCiAgICAvLyByZXR1cm4gRmFsc2UsIFVJbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGR1cAogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5kaWdpdGFsX21hcmtldHBsYWNlLmNvbnRyYWN0LkRpZ2l0YWxNYXJrZXRwbGFjZS5kZXBvc2l0KHBheW1lbnQ6IHVpbnQ2NCkgLT4gdm9pZDoKZGVwb3NpdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjYyLTYzCiAgICAvLyBAYWJpbWV0aG9kCiAgICAvLyBkZWYgZGVwb3NpdChzZWxmLCBwYXltZW50OiBndHhuLlBheW1lbnRUcmFuc2FjdGlvbikgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6NjQKICAgIC8vIGFzc2VydCBwYXltZW50LnNlbmRlciA9PSBUeG4uc2VuZGVyLCBlcnIuRElGRkVSRU5UX1NFTkRFUgogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQgLy8gRGlmZmVyZW50IHNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6NjYKICAgIC8vIHBheW1lbnQucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weTo2NS02NwogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBwYXltZW50LnJlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MKICAgIC8vICksIGVyci5XUk9OR19SRUNFSVZFUgogICAgYXNzZXJ0IC8vIFdyb25nIHJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weTo2OQogICAgLy8gbWJyX2Jhc2VsaW5lID0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5taW5fYmFsYW5jZQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weTo3MQogICAgLy8gc2VsZi5kZXBvc2l0ZWQuZ2V0KFR4bi5zZW5kZXIsIGRlZmF1bHQ9VUludDY0KDApKSArIHBheW1lbnQuYW1vdW50CiAgICBieXRlY18wIC8vICJkZXBvc2l0ZWQiCiAgICB0eG4gU2VuZGVyCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjcwCiAgICAvLyBzZWxmLmRlcG9zaXRlZFtUeG4uc2VuZGVyXSA9ICgKICAgIGJ5dGVjXzAgLy8gImRlcG9zaXRlZCIKICAgIHR4biBTZW5kZXIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6NzEKICAgIC8vIHNlbGYuZGVwb3NpdGVkLmdldChUeG4uc2VuZGVyLCBkZWZhdWx0PVVJbnQ2NCgwKSkgKyBwYXltZW50LmFtb3VudAogICAgY292ZXIgMgogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6NzAtNzIKICAgIC8vIHNlbGYuZGVwb3NpdGVkW1R4bi5zZW5kZXJdID0gKAogICAgLy8gICAgIHNlbGYuZGVwb3NpdGVkLmdldChUeG4uc2VuZGVyLCBkZWZhdWx0PVVJbnQ2NCgwKSkgKyBwYXltZW50LmFtb3VudAogICAgLy8gKQogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6NzMKICAgIC8vIG1icl9kaWZmID0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5taW5fYmFsYW5jZSAtIG1icl9iYXNlbGluZQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICBzd2FwCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weTo3NAogICAgLy8gc2VsZi5kZXBvc2l0ZWRbVHhuLnNlbmRlcl0gLT0gbWJyX2RpZmYKICAgIGJ5dGVjXzAgLy8gImRlcG9zaXRlZCIKICAgIHR4biBTZW5kZXIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kZXBvc2l0ZWQgZW50cnkgZXhpc3RzCiAgICB1bmNvdmVyIDIKICAgIC0KICAgIGl0b2IKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5kaWdpdGFsX21hcmtldHBsYWNlLmNvbnRyYWN0LkRpZ2l0YWxNYXJrZXRwbGFjZS53aXRoZHJhdyhhbW91bnQ6IGJ5dGVzKSAtPiB2b2lkOgp3aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5Ojc2LTc3CiAgICAvLyBAYWJpbWV0aG9kCiAgICAvLyBkZWYgd2l0aGRyYXcoc2VsZiwgYW1vdW50OiBhcmM0LlVJbnQ2NCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6NzgKICAgIC8vIHNlbGYuZGVwb3NpdGVkW1R4bi5zZW5kZXJdIC09IGFtb3VudC5uYXRpdmUKICAgIGJ5dGVjXzAgLy8gImRlcG9zaXRlZCIKICAgIHR4biBTZW5kZXIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kZXBvc2l0ZWQgZW50cnkgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ0b2kKICAgIHN3YXAKICAgIGRpZyAxCiAgICAtCiAgICBpdG9iCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjgwCiAgICAvLyBpdHhuLlBheW1lbnQocmVjZWl2ZXI9VHhuLnNlbmRlciwgYW1vdW50PWFtb3VudC5uYXRpdmUpLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICB0eG4gU2VuZGVyCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmRpZ2l0YWxfbWFya2V0cGxhY2UuY29udHJhY3QuRGlnaXRhbE1hcmtldHBsYWNlLnNwb25zb3JfYXNzZXQoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKc3BvbnNvcl9hc3NldDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjgyLTgzCiAgICAvLyBAYWJpbWV0aG9kCiAgICAvLyBkZWYgc3BvbnNvcl9hc3NldChzZWxmLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5Ojg0CiAgICAvLyBhc3NlcnQgbm90IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MuaXNfb3B0ZWRfaW4oCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6ODQtODYKICAgIC8vIGFzc2VydCBub3QgR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5pc19vcHRlZF9pbigKICAgIC8vICAgICBhc3NldAogICAgLy8gKSwgZXJyLkFMUkVBRFlfT1BURURfSU4KICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBBbHJlYWR5IG9wdGVkIGluCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weTo4NwogICAgLy8gYXNzZXJ0IGFzc2V0LmNsYXdiYWNrID09IEdsb2JhbC56ZXJvX2FkZHJlc3MsIGVyci5DTEFXQkFDS19BU0EKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldENsYXdiYWNrCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQ2xhd2JhY2sgQVNBCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weTo4OQogICAgLy8gc2VsZi5kZXBvc2l0ZWRbVHhuLnNlbmRlcl0gLT0gR2xvYmFsLmFzc2V0X29wdF9pbl9taW5fYmFsYW5jZQogICAgYnl0ZWNfMCAvLyAiZGVwb3NpdGVkIgogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmRlcG9zaXRlZCBlbnRyeSBleGlzdHMKICAgIGdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQogICAgLQogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6OTEtOTUKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weTo5MwogICAgLy8gYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weTo5NAogICAgLy8gYXNzZXRfYW1vdW50PTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weTo5MQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18zIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjkxLTk1CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5kaWdpdGFsX21hcmtldHBsYWNlLmNvbnRyYWN0LkRpZ2l0YWxNYXJrZXRwbGFjZS5vcGVuX3NhbGUoYXNzZXRfZGVwb3NpdDogdWludDY0LCBjb3N0OiBieXRlcykgLT4gdm9pZDoKb3Blbl9zYWxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6OTctMTAwCiAgICAvLyBAYWJpbWV0aG9kCiAgICAvLyBkZWYgb3Blbl9zYWxlKAogICAgLy8gICAgIHNlbGYsIGFzc2V0X2RlcG9zaXQ6IGd0eG4uQXNzZXRUcmFuc2ZlclRyYW5zYWN0aW9uLCBjb3N0OiBhcmM0LlVJbnQ2NAogICAgLy8gKSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxMDEKICAgIC8vIGFzc2VydCBhc3NldF9kZXBvc2l0LnNlbmRlciA9PSBUeG4uc2VuZGVyLCBlcnIuRElGRkVSRU5UX1NFTkRFUgogICAgZnJhbWVfZGlnIC0yCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQgLy8gRGlmZmVyZW50IHNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTAzCiAgICAvLyBhc3NldF9kZXBvc2l0LmFzc2V0X3JlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MKICAgIGZyYW1lX2RpZyAtMgogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxMDItMTA0CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIGFzc2V0X2RlcG9zaXQuYXNzZXRfcmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgLy8gKSwgZXJyLldST05HX1JFQ0VJVkVSCiAgICBhc3NlcnQgLy8gV3JvbmcgcmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjEwNwogICAgLy8gYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLCBhcmM0LlVJbnQ2NChhc3NldF9kZXBvc2l0LnhmZXJfYXNzZXQuaWQpCiAgICB0eG4gU2VuZGVyCiAgICBmcmFtZV9kaWcgLTIKICAgIGd0eG5zIFhmZXJBc3NldAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTA2LTEwOAogICAgLy8gc2FsZV9rZXkgPSBTYWxlS2V5KAogICAgLy8gICAgIGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwgYXJjNC5VSW50NjQoYXNzZXRfZGVwb3NpdC54ZmVyX2Fzc2V0LmlkKQogICAgLy8gKQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxMDkKICAgIC8vIGFzc2VydCBzYWxlX2tleSBub3QgaW4gc2VsZi5zYWxlcywgZXJyLlNBTEVfQUxSRUFEWV9FWElTVFMKICAgIGJ5dGVjXzIgLy8gInNhbGVzIgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIFNhbGUgYWxyZWFkeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjExMQogICAgLy8gbWJyX2Jhc2VsaW5lID0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5taW5fYmFsYW5jZQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxMTMKICAgIC8vIGFyYzQuVUludDY0KGFzc2V0X2RlcG9zaXQuYXNzZXRfYW1vdW50KSwKICAgIGZyYW1lX2RpZyAtMgogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjExMi0xMTYKICAgIC8vIHNlbGYuc2FsZXNbc2FsZV9rZXldID0gU2FsZSgKICAgIC8vICAgICBhcmM0LlVJbnQ2NChhc3NldF9kZXBvc2l0LmFzc2V0X2Ftb3VudCksCiAgICAvLyAgICAgY29zdCwKICAgIC8vICAgICBCaWQoYXJjNC5BZGRyZXNzKCksIGFyYzQuVUludDY0KCkpLAogICAgLy8gKQogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjExNQogICAgLy8gQmlkKGFyYzQuQWRkcmVzcygpLCBhcmM0LlVJbnQ2NCgpKSwKICAgIHB1c2hieXRlcyBiYXNlMzIoQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjExMi0xMTYKICAgIC8vIHNlbGYuc2FsZXNbc2FsZV9rZXldID0gU2FsZSgKICAgIC8vICAgICBhcmM0LlVJbnQ2NChhc3NldF9kZXBvc2l0LmFzc2V0X2Ftb3VudCksCiAgICAvLyAgICAgY29zdCwKICAgIC8vICAgICBCaWQoYXJjNC5BZGRyZXNzKCksIGFyYzQuVUludDY0KCkpLAogICAgLy8gKQogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjExNwogICAgLy8gbWJyX2RpZmYgPSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLm1pbl9iYWxhbmNlIC0gbWJyX2Jhc2VsaW5lCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIHN3YXAKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjExOQogICAgLy8gc2VsZi5kZXBvc2l0ZWRbVHhuLnNlbmRlcl0gLT0gbWJyX2RpZmYKICAgIGJ5dGVjXzAgLy8gImRlcG9zaXRlZCIKICAgIHR4biBTZW5kZXIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kZXBvc2l0ZWQgZW50cnkgZXhpc3RzCiAgICB1bmNvdmVyIDIKICAgIC0KICAgIGl0b2IKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5kaWdpdGFsX21hcmtldHBsYWNlLmNvbnRyYWN0LkRpZ2l0YWxNYXJrZXRwbGFjZS5jbG9zZV9zYWxlKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmNsb3NlX3NhbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxMjEtMTIyCiAgICAvLyBAYWJpbWV0aG9kCiAgICAvLyBkZWYgY2xvc2Vfc2FsZShzZWxmLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjEyMwogICAgLy8gc2FsZV9rZXkgPSBTYWxlS2V5KGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwgYXJjNC5VSW50NjQoYXNzZXQuaWQpKQogICAgdHhuIFNlbmRlcgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjEyNS0xMjkKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PXNlbGYuc2FsZXNbc2FsZV9rZXldLmFtb3VudC5uYXRpdmUsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxMjcKICAgIC8vIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxMjgKICAgIC8vIGFzc2V0X2Ftb3VudD1zZWxmLnNhbGVzW3NhbGVfa2V5XS5hbW91bnQubmF0aXZlLAogICAgYnl0ZWNfMiAvLyAic2FsZXMiCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zYWxlcyBlbnRyeSBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgc3dhcAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxMjUKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIGludGNfMyAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxMjUtMTI5CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1zZWxmLnNhbGVzW3NhbGVfa2V5XS5hbW91bnQubmF0aXZlLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjEzMQogICAgLy8gbWJyX2Jhc2VsaW5lID0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5taW5fYmFsYW5jZQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxMzIKICAgIC8vIGRlbCBzZWxmLnNhbGVzW3NhbGVfa2V5XQogICAgc3dhcAogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxMzMKICAgIC8vIG1icl9kaWZmID0gbWJyX2Jhc2VsaW5lIC0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5taW5fYmFsYW5jZQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxMzQKICAgIC8vIHNlbGYuZGVwb3NpdGVkW1R4bi5zZW5kZXJdICs9IG1icl9kaWZmCiAgICBieXRlY18wIC8vICJkZXBvc2l0ZWQiCiAgICB0eG4gU2VuZGVyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZGVwb3NpdGVkIGVudHJ5IGV4aXN0cwogICAgdW5jb3ZlciAyCiAgICArCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZGlnaXRhbF9tYXJrZXRwbGFjZS5jb250cmFjdC5EaWdpdGFsTWFya2V0cGxhY2UuYnV5KHNhbGVfa2V5OiBieXRlcykgLT4gdm9pZDoKYnV5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTM2LTEzNwogICAgLy8gQGFiaW1ldGhvZAogICAgLy8gZGVmIGJ1eShzZWxmLCBzYWxlX2tleTogU2FsZUtleSkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTM4CiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciAhPSBzYWxlX2tleS5vd25lci5uYXRpdmUsIGVyci5TRUxMRVJfQ0FOVF9CRV9CVVlFUgogICAgdHhuIFNlbmRlcgogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDAgMzIgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBzd2FwCiAgICBkaWcgMQogICAgIT0KICAgIGFzc2VydCAvLyBTZWxsZXIgY2Fubm90IGJlIGJ1eWVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxMzkKICAgIC8vIHNhbGUgPSBzZWxmLnNhbGVzW3NhbGVfa2V5XQogICAgYnl0ZWNfMiAvLyAic2FsZXMiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zYWxlcyBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjE0MS0xNDUKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNhbGVfa2V5LmFzc2V0Lm5hdGl2ZSwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1zYWxlLmFtb3VudC5uYXRpdmUsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxNDIKICAgIC8vIHhmZXJfYXNzZXQ9c2FsZV9rZXkuYXNzZXQubmF0aXZlLAogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTQzCiAgICAvLyBhc3NldF9yZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTQ0CiAgICAvLyBhc3NldF9hbW91bnQ9c2FsZS5hbW91bnQubmF0aXZlLAogICAgZGlnIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTQxCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTQxLTE0NQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2FsZV9rZXkuYXNzZXQubmF0aXZlLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PXNhbGUuYW1vdW50Lm5hdGl2ZSwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxNDcKICAgIC8vIG1icl9iYXNlbGluZSA9IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MubWluX2JhbGFuY2UKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTQ4CiAgICAvLyBkZWwgc2VsZi5zYWxlc1tzYWxlX2tleV0KICAgIHVuY292ZXIgMgogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxNDkKICAgIC8vIG1icl9kaWZmID0gbWJyX2Jhc2VsaW5lIC0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5taW5fYmFsYW5jZQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxNTEKICAgIC8vIHNlbGYuZGVwb3NpdGVkW1R4bi5zZW5kZXJdIC09IHNhbGUuY29zdC5uYXRpdmUKICAgIGJ5dGVjXzAgLy8gImRlcG9zaXRlZCIKICAgIHR4biBTZW5kZXIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kZXBvc2l0ZWQgZW50cnkgZXhpc3RzCiAgICB1bmNvdmVyIDMKICAgIHB1c2hpbnQgOCAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgc3dhcAogICAgZGlnIDEKICAgIC0KICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTUyCiAgICAvLyBzZWxmLmRlcG9zaXRlZFtzYWxlX2tleS5vd25lci5uYXRpdmVdICs9IHNhbGUuY29zdC5uYXRpdmUgKyBtYnJfZGlmZgogICAgYnl0ZWNfMCAvLyAiZGVwb3NpdGVkIgogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZGVwb3NpdGVkIGVudHJ5IGV4aXN0cwogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDMKICAgICsKICAgICsKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5kaWdpdGFsX21hcmtldHBsYWNlLmNvbnRyYWN0LkRpZ2l0YWxNYXJrZXRwbGFjZS5iaWQoc2FsZV9rZXk6IGJ5dGVzLCBuZXdfYmlkX2Ftb3VudDogYnl0ZXMpIC0+IHZvaWQ6CmJpZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjE1NC0xNTUKICAgIC8vIEBhYmltZXRob2QKICAgIC8vIGRlZiBiaWQoc2VsZiwgc2FsZV9rZXk6IFNhbGVLZXksIG5ld19iaWRfYW1vdW50OiBhcmM0LlVJbnQ2NCkgLT4gTm9uZToKICAgIHByb3RvIDIgMAogICAgaW50Y18wIC8vIDAKICAgIGR1cAogICAgYnl0ZWNfMyAvLyAiIgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxNTYKICAgIC8vIG5ld19iaWQgPSBCaWQoYmlkZGVyPWFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwgYW1vdW50PW5ld19iaWRfYW1vdW50KQogICAgdHhuIFNlbmRlcgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjE1OAogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgIT0gc2FsZV9rZXkub3duZXIsIGVyci5TRUxMRVJfQ0FOVF9CRV9CSURERVIKICAgIGZyYW1lX2RpZyAtMgogICAgZXh0cmFjdCAwIDMyIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgdHhuIFNlbmRlcgogICAgIT0KICAgIGFzc2VydCAvLyBTZWxsZXIgY2Fubm90IGJlIGJpZGRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTYwCiAgICAvLyBzYWxlID0gc2VsZi5zYWxlc1tzYWxlX2tleV0KICAgIGJ5dGVjXzIgLy8gInNhbGVzIgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNhbGVzIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTYxCiAgICAvLyBpZiBzYWxlLmJpZC5iaWRkZXI6CiAgICBleHRyYWN0IDE2IDQwIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBleHRyYWN0IDAgMzIgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBieiBiaWRfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxNjIKICAgIC8vIGFzc2VydCBzYWxlLmJpZC5hbW91bnQubmF0aXZlIDwgbmV3X2JpZF9hbW91bnQubmF0aXZlLCBlcnIuV09SU0VfQklECiAgICBmcmFtZV9kaWcgNwogICAgcHVzaGludCAzMiAvLyAzMgogICAgZXh0cmFjdF91aW50NjQKICAgIGZyYW1lX2RpZyAtMQogICAgYnRvaQogICAgPAogICAgYXNzZXJ0IC8vIFdvcnNlIGJpZAoKYmlkX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjE2NAogICAgLy8gc2VsZi5zYWxlc1tzYWxlX2tleV0gPSBzYWxlLl9yZXBsYWNlKGJpZD1uZXdfYmlkKQogICAgZnJhbWVfZGlnIDYKICAgIGR1cAogICAgZXh0cmFjdCAwIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBzd2FwCiAgICBleHRyYWN0IDggOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDQKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDUKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjE2NgogICAgLy8gbWJyX2Jhc2VsaW5lID0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5taW5fYmFsYW5jZQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgc3dhcAogICAgZnJhbWVfYnVyeSAzCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjE2NwogICAgLy8gbmV3X2JpZF9yZWNlaXB0ID0gQmlkUmVjZWlwdChzYWxlX2tleSwgbmV3X2JpZF9hbW91bnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjE2OAogICAgLy8gcmVjZWlwdF9ib29rLCBleGlzdHMgPSBzZWxmLnJlY2VpcHRfYm9vay5tYXliZShUeG4uc2VuZGVyKQogICAgYnl0ZWNfMSAvLyAicmVjZWlwdF9ib29rIgogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjE2OQogICAgLy8gaWYgZXhpc3RzOgogICAgYnogYmlkX2Vsc2VfYm9keUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxNzAKICAgIC8vIGZvdW5kLCBpbmRleCA9IGZpbmRfYmlkX3JlY2VpcHQocmVjZWlwdF9ib29rLCBzYWxlX2tleSkKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgLTIKICAgIGNhbGxzdWIgZmluZF9iaWRfcmVjZWlwdAogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxNzEKICAgIC8vIGlmIGZvdW5kOgogICAgYnogYmlkX2Vsc2VfYm9keUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxNzIKICAgIC8vIHNlbGYuZGVwb3NpdGVkW1R4bi5zZW5kZXJdICs9IHJlY2VpcHRfYm9va1tpbmRleF0uYW1vdW50Lm5hdGl2ZQogICAgYnl0ZWNfMCAvLyAiZGVwb3NpdGVkIgogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmRlcG9zaXRlZCBlbnRyeSBleGlzdHMKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICBjb3ZlciA0CiAgICBpbnRjXzIgLy8gNDgKICAgICoKICAgIHN3YXAKICAgIGRpZyAxCiAgICBpbnRjXzIgLy8gNDgKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgcHVzaGludCA0MCAvLyA0MAogICAgZXh0cmFjdF91aW50NjQKICAgIHVuY292ZXIgMgogICAgKwogICAgaXRvYgogICAgdW5jb3ZlciA0CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxNzMtMTc1CiAgICAvLyBzZWxmLnJlY2VpcHRfYm9va1tUeG4uc2VuZGVyXSA9IHJlY2VpcHRfYm9vay5yZXBsYWNlKAogICAgLy8gICAgIGluZGV4LCBuZXdfYmlkX3JlY2VpcHQKICAgIC8vICkKICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHVuY292ZXIgMwogICAgPgogICAgYXNzZXJ0IC8vIEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBwdXNoaW50IDIgLy8gMgogICAgKwogICAgZnJhbWVfZGlnIDAKICAgIHJlcGxhY2UzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxNzMKICAgIC8vIHNlbGYucmVjZWlwdF9ib29rW1R4bi5zZW5kZXJdID0gcmVjZWlwdF9ib29rLnJlcGxhY2UoCiAgICBieXRlY18xIC8vICJyZWNlaXB0X2Jvb2siCiAgICB0eG4gU2VuZGVyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjE3My0xNzUKICAgIC8vIHNlbGYucmVjZWlwdF9ib29rW1R4bi5zZW5kZXJdID0gcmVjZWlwdF9ib29rLnJlcGxhY2UoCiAgICAvLyAgICAgaW5kZXgsIG5ld19iaWRfcmVjZWlwdAogICAgLy8gKQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHN3YXAKICAgIGJveF9wdXQKCmJpZF9hZnRlcl9pZl9lbHNlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxODAKICAgIC8vIG1icl9kaWZmID0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5taW5fYmFsYW5jZSAtIG1icl9iYXNlbGluZQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICBmcmFtZV9kaWcgMwogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTgyCiAgICAvLyBzZWxmLmRlcG9zaXRlZFtUeG4uc2VuZGVyXSAtPSBuZXdfYmlkX2Ftb3VudC5uYXRpdmUgKyBtYnJfZGlmZgogICAgYnl0ZWNfMCAvLyAiZGVwb3NpdGVkIgogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmRlcG9zaXRlZCBlbnRyeSBleGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgYnRvaQogICAgdW5jb3ZlciAzCiAgICArCiAgICAtCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICByZXRzdWIKCmJpZF9lbHNlX2JvZHlANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjE3NwogICAgLy8gc2VsZi5yZWNlaXB0X2Jvb2tbVHhuLnNlbmRlcl0gPSByZWNlaXB0X2Jvb2suYXBwZW5kKG5ld19iaWRfcmVjZWlwdCkKICAgIGZyYW1lX2RpZyAxCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDAKICAgIGNvbmNhdAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA0OAogICAgLwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMSAvLyAicmVjZWlwdF9ib29rIgogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgc3dhcAogICAgYm94X3B1dAogICAgYiBiaWRfYWZ0ZXJfaWZfZWxzZUA4CgpiaWRfZWxzZV9ib2R5QDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxNzkKICAgIC8vIHNlbGYucmVjZWlwdF9ib29rW1R4bi5zZW5kZXJdID0gSW1tdXRhYmxlQXJyYXkobmV3X2JpZF9yZWNlaXB0KQogICAgcHVzaGJ5dGVzIDB4MDAwMQogICAgZnJhbWVfZGlnIDAKICAgIGNvbmNhdAogICAgYnl0ZWNfMSAvLyAicmVjZWlwdF9ib29rIgogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgc3dhcAogICAgYm94X3B1dAogICAgYiBiaWRfYWZ0ZXJfaWZfZWxzZUA4CgoKLy8gc21hcnRfY29udHJhY3RzLmRpZ2l0YWxfbWFya2V0cGxhY2UuY29udHJhY3QuRGlnaXRhbE1hcmtldHBsYWNlLmlzX2VuY3VtYmVyZWQoYmlkOiBieXRlcykgLT4gdWludDY0Ogppc19lbmN1bWJlcmVkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTg0LTE4NQogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBpc19lbmN1bWJlcmVkKHNlbGYsIGJpZDogQmlkUmVjZWlwdCkgLT4gYm9vbDoKICAgIHByb3RvIDEgMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjE4NgogICAgLy8gc2FsZSwgZXhpc3RzID0gc2VsZi5zYWxlcy5tYXliZShiaWQuc2FsZV9rZXkpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0MCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ5dGVjXzIgLy8gInNhbGVzIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxODcKICAgIC8vIHJldHVybiBleGlzdHMgYW5kIGJvb2woc2FsZS5iaWQuYmlkZGVyKSBhbmQgc2FsZS5iaWQuYmlkZGVyID09IFR4bi5zZW5kZXIKICAgIGJ6IGlzX2VuY3VtYmVyZWRfYm9vbF9mYWxzZUA0CiAgICBmcmFtZV9kaWcgMQogICAgZXh0cmFjdCAxNiA0MCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGV4dHJhY3QgMCAzMiAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBieiBpc19lbmN1bWJlcmVkX2Jvb2xfZmFsc2VANAogICAgZnJhbWVfZGlnIDAKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBieiBpc19lbmN1bWJlcmVkX2Jvb2xfZmFsc2VANAogICAgaW50Y18xIC8vIDEKCmlzX2VuY3VtYmVyZWRfYm9vbF9tZXJnZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTg3CiAgICAvLyByZXR1cm4gZXhpc3RzIGFuZCBib29sKHNhbGUuYmlkLmJpZGRlcikgYW5kIHNhbGUuYmlkLmJpZGRlciA9PSBUeG4uc2VuZGVyCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKaXNfZW5jdW1iZXJlZF9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzAgLy8gMAogICAgYiBpc19lbmN1bWJlcmVkX2Jvb2xfbWVyZ2VANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5kaWdpdGFsX21hcmtldHBsYWNlLmNvbnRyYWN0LkRpZ2l0YWxNYXJrZXRwbGFjZS5jbGFpbV91bmVuY3VtYmVyZWRfYmlkcygpIC0+IHZvaWQ6CmNsYWltX3VuZW5jdW1iZXJlZF9iaWRzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTg5LTE5MAogICAgLy8gQGFiaW1ldGhvZAogICAgLy8gZGVmIGNsYWltX3VuZW5jdW1iZXJlZF9iaWRzKHNlbGYpIC0+IE5vbmU6CiAgICBwcm90byAwIDAKICAgIGJ5dGVjXzMgLy8gIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjE5MQogICAgLy8gZW5jdW1iZXJlZF9yZWNlaXB0cyA9IEltbXV0YWJsZUFycmF5W0JpZFJlY2VpcHRdKCkKICAgIGJ5dGVjIDQgLy8gMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxOTMKICAgIC8vIGZvciByZWNlaXB0IGluIHNlbGYucmVjZWlwdF9ib29rW1R4bi5zZW5kZXJdOgogICAgYnl0ZWNfMSAvLyAicmVjZWlwdF9ib29rIgogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVjZWlwdF9ib29rIGVudHJ5IGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzAgLy8gMAoKY2xhaW1fdW5lbmN1bWJlcmVkX2JpZHNfZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTkzCiAgICAvLyBmb3IgcmVjZWlwdCBpbiBzZWxmLnJlY2VpcHRfYm9va1tUeG4uc2VuZGVyXToKICAgIGZyYW1lX2RpZyA0CiAgICBmcmFtZV9kaWcgMwogICAgPAogICAgYnogY2xhaW1fdW5lbmN1bWJlcmVkX2JpZHNfYWZ0ZXJfZm9yQDcKICAgIGZyYW1lX2RpZyAyCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDQKICAgIGludGNfMiAvLyA0OAogICAgKgogICAgaW50Y18yIC8vIDQ4CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTk0CiAgICAvLyBpZiBzZWxmLmlzX2VuY3VtYmVyZWQocmVjZWlwdCk6CiAgICBjYWxsc3ViIGlzX2VuY3VtYmVyZWQKICAgIGJ6IGNsYWltX3VuZW5jdW1iZXJlZF9iaWRzX2Vsc2VfYm9keUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToxOTUKICAgIC8vIGVuY3VtYmVyZWRfcmVjZWlwdHMgPSBlbmN1bWJlcmVkX3JlY2VpcHRzLmFwcGVuZChyZWNlaXB0KQogICAgZnJhbWVfZGlnIDEKICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gNDgKICAgIC8KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMQoKY2xhaW1fdW5lbmN1bWJlcmVkX2JpZHNfYWZ0ZXJfaWZfZWxzZUA1OgogICAgZnJhbWVfZGlnIDQKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDQKICAgIGIgY2xhaW1fdW5lbmN1bWJlcmVkX2JpZHNfZm9yX2hlYWRlckAxCgpjbGFpbV91bmVuY3VtYmVyZWRfYmlkc19lbHNlX2JvZHlANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjE5NwogICAgLy8gc2VsZi5kZXBvc2l0ZWRbVHhuLnNlbmRlcl0gKz0gcmVjZWlwdC5hbW91bnQubmF0aXZlCiAgICBieXRlY18wIC8vICJkZXBvc2l0ZWQiCiAgICB0eG4gU2VuZGVyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZGVwb3NpdGVkIGVudHJ5IGV4aXN0cwogICAgdW5jb3ZlciAyCiAgICBwdXNoaW50IDQwIC8vIDQwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgKwogICAgaXRvYgogICAgYm94X3B1dAogICAgYiBjbGFpbV91bmVuY3VtYmVyZWRfYmlkc19hZnRlcl9pZl9lbHNlQDUKCmNsYWltX3VuZW5jdW1iZXJlZF9iaWRzX2FmdGVyX2ZvckA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MTk5CiAgICAvLyBtYnJfYmFzZWxpbmUgPSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLm1pbl9iYWxhbmNlCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBzd2FwCiAgICBmcmFtZV9idXJ5IDAKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MjAwCiAgICAvLyBpZiBlbmN1bWJlcmVkX3JlY2VpcHRzOgogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgYnogY2xhaW1fdW5lbmN1bWJlcmVkX2JpZHNfZWxzZV9ib2R5QDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjIwMQogICAgLy8gc2VsZi5yZWNlaXB0X2Jvb2tbVHhuLnNlbmRlcl0gPSBlbmN1bWJlcmVkX3JlY2VpcHRzCiAgICBieXRlY18xIC8vICJyZWNlaXB0X2Jvb2siCiAgICB0eG4gU2VuZGVyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgMQogICAgYm94X3B1dAoKY2xhaW1fdW5lbmN1bWJlcmVkX2JpZHNfYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjIwNAogICAgLy8gbWJyX2RpZmYgPSBtYnJfYmFzZWxpbmUgLSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLm1pbl9iYWxhbmNlCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToyMDYKICAgIC8vIHNlbGYuZGVwb3NpdGVkW1R4bi5zZW5kZXJdICs9IG1icl9kaWZmCiAgICBieXRlY18wIC8vICJkZXBvc2l0ZWQiCiAgICB0eG4gU2VuZGVyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZGVwb3NpdGVkIGVudHJ5IGV4aXN0cwogICAgdW5jb3ZlciAyCiAgICArCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICByZXRzdWIKCmNsYWltX3VuZW5jdW1iZXJlZF9iaWRzX2Vsc2VfYm9keUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MjAzCiAgICAvLyBkZWwgc2VsZi5yZWNlaXB0X2Jvb2tbVHhuLnNlbmRlcl0KICAgIGJ5dGVjXzEgLy8gInJlY2VpcHRfYm9vayIKICAgIHR4biBTZW5kZXIKICAgIGNvbmNhdAogICAgYm94X2RlbAogICAgcG9wCiAgICBiIGNsYWltX3VuZW5jdW1iZXJlZF9iaWRzX2FmdGVyX2lmX2Vsc2VAMTAKCgovLyBzbWFydF9jb250cmFjdHMuZGlnaXRhbF9tYXJrZXRwbGFjZS5jb250cmFjdC5EaWdpdGFsTWFya2V0cGxhY2UuZ2V0X3RvdGFsX2FuZF91bmVuY3VtYmVyZWRfYmlkcygpIC0+IHVpbnQ2NCwgdWludDY0OgpnZXRfdG90YWxfYW5kX3VuZW5jdW1iZXJlZF9iaWRzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MjA4LTIwOQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF90b3RhbF9hbmRfdW5lbmN1bWJlcmVkX2JpZHMoc2VsZikgLT4gVW5lbmN1bWJlcmVkQmlkc1JlY2VpcHQ6CiAgICBwcm90byAwIDIKICAgIGJ5dGVjXzMgLy8gIiIKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MjEwCiAgICAvLyB0b3RhbF9iaWRzID0gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MjEwLTIxMQogICAgLy8gdG90YWxfYmlkcyA9IFVJbnQ2NCgwKQogICAgLy8gdW5lbmN1bWJlcmVkX2JpZHMgPSBVSW50NjQoMCkKICAgIGR1cG4gMwogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MjEzCiAgICAvLyByZWNlaXB0X2Jvb2ssIGV4aXN0cyA9IHNlbGYucmVjZWlwdF9ib29rLm1heWJlKFR4bi5zZW5kZXIpCiAgICBieXRlY18xIC8vICJyZWNlaXB0X2Jvb2siCiAgICB0eG4gU2VuZGVyCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGNvdmVyIDMKICAgIHN3YXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjIxNAogICAgLy8gaWYgZXhpc3RzOgogICAgYnogZ2V0X3RvdGFsX2FuZF91bmVuY3VtYmVyZWRfYmlkc19hZnRlcl9pZl9lbHNlQDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjIxNQogICAgLy8gZm9yIHJlY2VpcHQgaW4gcmVjZWlwdF9ib29rOgogICAgZnJhbWVfZGlnIDUKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfYnVyeSAwCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAxCgpnZXRfdG90YWxfYW5kX3VuZW5jdW1iZXJlZF9iaWRzX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjIxNQogICAgLy8gZm9yIHJlY2VpcHQgaW4gcmVjZWlwdF9ib29rOgogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICA8CiAgICBieiBnZXRfdG90YWxfYW5kX3VuZW5jdW1iZXJlZF9iaWRzX2FmdGVyX2ZvckA3CiAgICBmcmFtZV9kaWcgNQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxCiAgICBpbnRjXzIgLy8gNDgKICAgICoKICAgIGludGNfMiAvLyA0OAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToyMTYKICAgIC8vIHRvdGFsX2JpZHMgKz0gcmVjZWlwdC5hbW91bnQubmF0aXZlCiAgICBkdXAKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMgogICAgZnJhbWVfZGlnIDMKICAgICsKICAgIGZyYW1lX2J1cnkgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MjE3CiAgICAvLyBpZiBub3Qgc2VsZi5pc19lbmN1bWJlcmVkKHJlY2VpcHQpOgogICAgY2FsbHN1YiBpc19lbmN1bWJlcmVkCiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfYnVyeSA2CiAgICBibnogZ2V0X3RvdGFsX2FuZF91bmVuY3VtYmVyZWRfYmlkc19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjIxOAogICAgLy8gdW5lbmN1bWJlcmVkX2JpZHMgKz0gcmVjZWlwdC5hbW91bnQubmF0aXZlCiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfZGlnIDIKICAgICsKICAgIGZyYW1lX2J1cnkgNgoKZ2V0X3RvdGFsX2FuZF91bmVuY3VtYmVyZWRfYmlkc19hZnRlcl9pZl9lbHNlQDU6CiAgICBmcmFtZV9kaWcgNgogICAgZnJhbWVfYnVyeSA0CiAgICBmcmFtZV9kaWcgMQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMQogICAgYiBnZXRfdG90YWxfYW5kX3VuZW5jdW1iZXJlZF9iaWRzX2Zvcl9oZWFkZXJAMgoKZ2V0X3RvdGFsX2FuZF91bmVuY3VtYmVyZWRfYmlkc19hZnRlcl9mb3JANzoKICAgIGZyYW1lX2RpZyA0CiAgICBmcmFtZV9idXJ5IDYKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9idXJ5IDcKCmdldF90b3RhbF9hbmRfdW5lbmN1bWJlcmVkX2JpZHNfYWZ0ZXJfaWZfZWxzZUA4OgogICAgZnJhbWVfZGlnIDcKICAgIGZyYW1lX2RpZyA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToyMjAKICAgIC8vIHJldHVybiBVbmVuY3VtYmVyZWRCaWRzUmVjZWlwdCh0b3RhbF9iaWRzLCB1bmVuY3VtYmVyZWRfYmlkcykKICAgIGZyYW1lX2J1cnkgMQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZGlnaXRhbF9tYXJrZXRwbGFjZS5jb250cmFjdC5EaWdpdGFsTWFya2V0cGxhY2UuYWNjZXB0X2JpZChhc3NldDogYnl0ZXMpIC0+IHZvaWQ6CmFjY2VwdF9iaWQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToyMjItMjIzCiAgICAvLyBAYWJpbWV0aG9kCiAgICAvLyBkZWYgYWNjZXB0X2JpZChzZWxmLCBhc3NldDogYXJjNC5VSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIGludGNfMCAvLyAwCiAgICBkdXAKICAgIGJ5dGVjXzMgLy8gIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjIyNAogICAgLy8gc2FsZV9rZXkgPSBTYWxlS2V5KG93bmVyPWFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwgYXNzZXQ9YXNzZXQpCiAgICB0eG4gU2VuZGVyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MjI1CiAgICAvLyBzYWxlID0gc2VsZi5zYWxlc1tzYWxlX2tleV0KICAgIGJ5dGVjXzIgLy8gInNhbGVzIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zYWxlcyBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjIyNgogICAgLy8gY3VycmVudF9iZXN0X2JpZCA9IHNhbGUuYmlkCiAgICBkdXAKICAgIGV4dHJhY3QgMTYgNDAgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToyMjcKICAgIC8vIGN1cnJlbnRfYmVzdF9iaWRkZXIgPSBjdXJyZW50X2Jlc3RfYmlkLmJpZGRlci5uYXRpdmUKICAgIGR1cAogICAgZXh0cmFjdCAwIDMyIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBjb3ZlciA0CiAgICBjb3ZlciA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToyMjkKICAgIC8vIHNlbGxlcl9tYnJfYmFzZWxpbmUgPSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLm1pbl9iYWxhbmNlCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjIzMAogICAgLy8gZGVsIHNlbGYuc2FsZXNbc2FsZV9rZXldCiAgICB1bmNvdmVyIDMKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MjMyCiAgICAvLyBzZWxsZXJfbWJyX2Jhc2VsaW5lIC0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5taW5fYmFsYW5jZQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToyMzUKICAgIC8vIHNlbGYuZGVwb3NpdGVkW1R4bi5zZW5kZXJdICs9IGN1cnJlbnRfYmVzdF9iaWQuYW1vdW50Lm5hdGl2ZSArIHNlbGxlcl9tYnJfZGlmZgogICAgYnl0ZWNfMCAvLyAiZGVwb3NpdGVkIgogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmRlcG9zaXRlZCBlbnRyeSBleGlzdHMKICAgIHVuY292ZXIgMwogICAgcHVzaGludCAzMiAvLyAzMgogICAgZXh0cmFjdF91aW50NjQKICAgIHVuY292ZXIgMwogICAgKwogICAgKwogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MjM2LTI0MAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQubmF0aXZlLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPWN1cnJlbnRfYmVzdF9iaWRkZXIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PXNhbGUuYW1vdW50Lm5hdGl2ZSwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjIzNwogICAgLy8geGZlcl9hc3NldD1hc3NldC5uYXRpdmUsCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjIzOQogICAgLy8gYXNzZXRfYW1vdW50PXNhbGUuYW1vdW50Lm5hdGl2ZSwKICAgIHN3YXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZGlnIDEKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjIzNgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18zIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjIzNi0yNDAKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0Lm5hdGl2ZSwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1jdXJyZW50X2Jlc3RfYmlkZGVyLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1zYWxlLmFtb3VudC5uYXRpdmUsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MjQyCiAgICAvLyByZWNlaXB0X2Jvb2sgPSBzZWxmLnJlY2VpcHRfYm9va1tjdXJyZW50X2Jlc3RfYmlkZGVyXQogICAgYnl0ZWNfMSAvLyAicmVjZWlwdF9ib29rIgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgY292ZXIgMwogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVjZWlwdF9ib29rIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MjQzCiAgICAvLyBmb3VuZCwgaW5kZXggPSBmaW5kX2JpZF9yZWNlaXB0KHJlY2VpcHRfYm9vaywgc2FsZV9rZXkpCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgY2FsbHN1YiBmaW5kX2JpZF9yZWNlaXB0CiAgICBjb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToyNDQKICAgIC8vIGFzc2VydCBmb3VuZAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToyNDYKICAgIC8vIGVuY3VtYmVyZWRfcmVjZWlwdHMgPSBJbW11dGFibGVBcnJheVtCaWRSZWNlaXB0XSgpCiAgICBieXRlYyA0IC8vIDB4MDAwMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MjQ3CiAgICAvLyBmb3IgcmVjZWlwdCBpbiByZWNlaXB0X2Jvb2s6CiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMCAvLyAwCgphY2NlcHRfYmlkX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjI0NwogICAgLy8gZm9yIHJlY2VpcHQgaW4gcmVjZWlwdF9ib29rOgogICAgZnJhbWVfZGlnIDkKICAgIGZyYW1lX2RpZyA4CiAgICA8CiAgICBieiBhY2NlcHRfYmlkX2FmdGVyX2ZvckA3CiAgICBmcmFtZV9kaWcgNQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyA5CiAgICBpbnRjXzIgLy8gNDgKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBpbnRjXzIgLy8gNDgKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjI0OAogICAgLy8gaWYgcmVjZWlwdCAhPSByZWNlaXB0X2Jvb2tbaW5kZXhdOgogICAgZnJhbWVfZGlnIDYKICAgIGludGNfMiAvLyA0OAogICAgKgogICAgaW50Y18yIC8vIDQ4CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgICE9CiAgICBmcmFtZV9kaWcgNwogICAgZnJhbWVfYnVyeSAwCiAgICBieiBhY2NlcHRfYmlkX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MjQ5CiAgICAvLyBlbmN1bWJlcmVkX3JlY2VpcHRzID0gZW5jdW1iZXJlZF9yZWNlaXB0cy5hcHBlbmQocmVjZWlwdCkKICAgIGZyYW1lX2RpZyA3CiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA0OAogICAgLwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAwCgphY2NlcHRfYmlkX2FmdGVyX2lmX2Vsc2VANToKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9idXJ5IDcKICAgIGZyYW1lX2RpZyA5CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSA5CiAgICBiIGFjY2VwdF9iaWRfZm9yX2hlYWRlckAyCgphY2NlcHRfYmlkX2FmdGVyX2ZvckA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MjUxCiAgICAvLyBiaWRkZXJfbWJyX2Jhc2VsaW5lID0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5taW5fYmFsYW5jZQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgc3dhcAogICAgZnJhbWVfYnVyeSAyCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjI1MgogICAgLy8gaWYgZW5jdW1iZXJlZF9yZWNlaXB0czoKICAgIGZyYW1lX2RpZyA3CiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGJ6IGFjY2VwdF9iaWRfZWxzZV9ib2R5QDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjI1MwogICAgLy8gc2VsZi5yZWNlaXB0X2Jvb2tbY3VycmVudF9iZXN0X2JpZGRlcl0gPSBlbmN1bWJlcmVkX3JlY2VpcHRzCiAgICBmcmFtZV9kaWcgNAogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyA3CiAgICBib3hfcHV0CgphY2NlcHRfYmlkX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZGlnaXRhbF9tYXJrZXRwbGFjZS9jb250cmFjdC5weToyNTcKICAgIC8vIGJpZGRlcl9tYnJfYmFzZWxpbmUgLSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLm1pbl9iYWxhbmNlCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjI1Ni0yNTgKICAgIC8vIGJpZGRlcl9tYnJfZGlmZiA9ICgKICAgIC8vICAgICBiaWRkZXJfbWJyX2Jhc2VsaW5lIC0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5taW5fYmFsYW5jZQogICAgLy8gKQogICAgZnJhbWVfZGlnIDIKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjI1NwogICAgLy8gYmlkZGVyX21icl9iYXNlbGluZSAtIEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MubWluX2JhbGFuY2UKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9kaWdpdGFsX21hcmtldHBsYWNlL2NvbnRyYWN0LnB5OjI2MAogICAgLy8gc2VsZi5kZXBvc2l0ZWRbY3VycmVudF9iZXN0X2JpZGRlcl0gKz0gYmlkZGVyX21icl9kaWZmCiAgICBieXRlY18wIC8vICJkZXBvc2l0ZWQiCiAgICBmcmFtZV9kaWcgMwogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmRlcG9zaXRlZCBlbnRyeSBleGlzdHMKICAgIHVuY292ZXIgMgogICAgKwogICAgaXRvYgogICAgYm94X3B1dAogICAgcmV0c3ViCgphY2NlcHRfYmlkX2Vsc2VfYm9keUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2RpZ2l0YWxfbWFya2V0cGxhY2UvY29udHJhY3QucHk6MjU1CiAgICAvLyBkZWwgc2VsZi5yZWNlaXB0X2Jvb2tbY3VycmVudF9iZXN0X2JpZGRlcl0KICAgIGZyYW1lX2RpZyA0CiAgICBib3hfZGVsCiAgICBwb3AKICAgIGIgYWNjZXB0X2JpZF9hZnRlcl9pZl9lbHNlQDEwCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { "approval": "CiAEAAEwBCYFCWRlcG9zaXRlZAxyZWNlaXB0X2Jvb2sFc2FsZXMAAgAAMRtBAQeCCgQ2JeTrBCHx3f8EEwAKlASmkgBmBAlUSBAE1JrGDgShjx/8BEVuOXUEHqu7WAT44O+vNhoAjgoApACVAIMAagBYAEkANwArABEAAiJDMRkURDEYRDYaAYgE8iNDMRkURDEYRIgEeEwWTBZQgAQVH3x1TFCwI0MxGRREMRhEiAPFI0MxGRREMRhENhoBNhoCiAKGI0MxGRREMRhENhoBiAIOI0MxGRREMRhENhoBF8AwiAG5I0MxGRREMRhEMRYjCUk4ECUSRDYaAYgBKSNDMRkURDEYRDYaARfAMIgA3iNDMRkURDEYRDYaAYgApyNDMRkURDEYRDEWIwlJOBAjEkSIAEkjQzEZQP9BMRgURCNDigICi/4iWSKLAYsADEEAJYv+VwIAiwEkCyRYVwAoi/8SQQAII4sBTwNPA4mLASMIjAFC/9MiSU8DTwOJigEAi/84ADEAEkSL/zgHMgoSRDIKcwFEKDEAUL5MFyJMTwJNi/84CCgxAFBOAggWvzIKcwFETAkoMQBQSb5MF0xETwIJFr+JigEAKDEAUEm+TBdMRIv/F0xLAQkWTwJMv7ExALIHsggjshAisgGziYoBADIKi/9wAEUBFESL/3EKRDIDEkQoMQBQSb5MF0xEMhAJFr+xMgoishKyFIv/shElshAisgGziYoCAIv+OAAxABJEi/44FDIKEkQxAIv+OBEWUCpMUEm9RQEURDIKcwFEi/44EhaL/1CAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQTwJMvzIKcwFETAkoMQBQSb5MF0xETwIJFr+JigEAMQCL/xZQsTEAKk8CUEm+RCJbshJMshSL/7IRJbIQIrIBszIKcwFETLxIMgpzAUQJKDEAUEm+TBdMRE8CCBa/iYoBADEAi/9XACBMSwETRCqL/1BJvkSxi/+BIFsxAEsCIluyErIUshElshAisgGzMgpzAURPArxIMgpzAUQJKDEAUEm+TBdMRE8DgQhbTEsBCRZPAky/KE8DUEm+TBdMRE8CTwMICBa/iYoCACJJK0kxAIv/UIv+VwAgMQATRCqL/lBJvkxJTwJEVxAoSVcAIDIDE0EACosHgSBbi/8XDESLBklXAAhMVwgIUIsEUIsFTL8yCnMBTIwDRIv+i/9QjAApMQBQvkyMAUEAhosBi/6I/Y6MAkEAXCgxAFBJvkwXTESLAUlOAlcCAIsCSU4EJAtMSwEkWIEoW08CCBZPBEy/SwEiWU8DDUSBAgiLAF0pMQBQSbxITL8yCnMBRIsDCSgxAFBJvkwXTESL/xdPAwgJFr+JiwFXAgCLAFBJFSQKFlcGAkxQKTEAUEm8SEy/Qv/GgAIAAYsAUCkxAFBJvEhMv0L/s4oBASKL/1cAKCpMUL5BAB2LAVcQKFcAIEmMADIDE0EADIsAMQASQQAEI4wAiSJC//mKAAArJwQpMQBQvkxJTwJEIlkiiwSLAwxBAEOLAlcCAIsEJAskWEmI/6VBAByLAVcCAExQSRUkChZXBgJMUIwBiwQjCIwEQv/KKDEAUEm+TBdMRE8CgShbCBa/Qv/iMgpzAUyMAESLASJZQQAjKTEAUEm8SIsBvzIKcwFEiwBMCSgxAFBJvkwXTERPAggWv4kpMQBQvEhC/96KAAIrRwIiRwMpMQBQvkxOA0xOAkEATosFIlmMACKMAYsBiwAMQQA1iwVXAgCLASQLJFhJgShbSYwCiwMIjAOI/vSLBIwGQAAHiwSLAgiMBosGjASLASMIjAFC/8OLBIwGiwOMB4sHiwaMAYwAiYoBACJJKzEAi/9QKksBUEm+RElXEChJVwAgSU4ETgUyCnMBRE8DvEgyCnMBRAkoMQBQSb5MF0xETwOBIFtPAwgIFr+xi/8XTCJbshJLAbIUshElshAisgGzKUxQSU4CvkxJTgJOA0RJTwKI+1dOAkQnBEwiWSKLCYsIDEEAQosFVwIAiwkkC0sBTCRYSU4CjAGLBiQLJFgTiweMAEEAFIsHVwIAiwFQSRUkChZXBgJMUIwAiwCMB4sJIwiMCUL/tjIKcwFMjAJEiwciWUEAIYsESbxIiwe/MgpzAUSLAkwJKIsDUEm+TBdMRE8CCBa/iYsEvEhC/+A=", "clear": "CoEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 4, "minor": 7, "patch": 0 } }, "events": [], "templateVariables": {} }