{ "name": "DigitalMarketplaceWithImmStruct", "structs": { "ListingKey": [ { "name": "owner", "type": "address" }, { "name": "asset", "type": "uint64" }, { "name": "nonce", "type": "uint64" } ], "ListingValue": [ { "name": "deposited", "type": "uint64" }, { "name": "unitaryPrice", "type": "uint64" }, { "name": "bidder", "type": "address" }, { "name": "bid", "type": "uint64" }, { "name": "bidUnitaryPrice", "type": "uint64" } ] }, "methods": [ { "name": "getListingsMbr", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "allowAsset", "args": [ { "type": "pay", "name": "mbr_pay" }, { "type": "uint64", "name": "asset" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "firstDeposit", "args": [ { "type": "pay", "name": "mbr_pay" }, { "type": "axfer", "name": "xfer" }, { "type": "uint64", "name": "unitary_price" }, { "type": "uint64", "name": "nonce" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "deposit", "args": [ { "type": "axfer", "name": "xfer" }, { "type": "uint64", "name": "nonce" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "setPrice", "args": [ { "type": "uint64", "name": "asset" }, { "type": "uint64", "name": "nonce" }, { "type": "uint64", "name": "unitary_price" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "buy", "args": [ { "type": "address", "name": "owner" }, { "type": "uint64", "name": "asset" }, { "type": "uint64", "name": "nonce" }, { "type": "pay", "name": "buy_pay" }, { "type": "uint64", "name": "quantity" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "withdraw", "args": [ { "type": "uint64", "name": "asset" }, { "type": "uint64", "name": "nonce" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "bid", "args": [ { "type": "address", "name": "owner" }, { "type": "uint64", "name": "asset" }, { "type": "uint64", "name": "nonce" }, { "type": "pay", "name": "bid_pay" }, { "type": "uint64", "name": "quantity" }, { "type": "uint64", "name": "unitary_price" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "acceptBid", "args": [ { "type": "uint64", "name": "asset" }, { "type": "uint64", "name": "nonce" } ], "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": { "listings": { "keyType": "ListingKey", "valueType": "ListingValue", "prefix": "bGlzdGluZ3M=" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 573, 728, 914, 947, 1099 ], "errorMessage": "asset exists" }, { "pc": [ 387, 469, 565, 702, 882, 1055 ], "errorMessage": "check self.listings entry exists" }, { "pc": [ 511, 806 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 158, 232, 241, 347, 434, 443, 452, 519, 528, 547, 672, 682, 814, 826, 847, 858, 1023, 1033 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 224, 339 ], "errorMessage": "transaction type is axfer" }, { "pc": [ 150, 214, 539, 839 ], "errorMessage": "transaction type is pay" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDggMCA0IDUwNTAwCiAgICBieXRlY2Jsb2NrIDB4NmM2OTczNzQ2OTZlNjc3MwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MzkKICAgIC8vIGxvZygiaW5pdCIpCiAgICBwdXNoYnl0ZXMgImluaXQiCiAgICBsb2cKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MzcKICAgIC8vIGNsYXNzIERpZ2l0YWxNYXJrZXRwbGFjZVdpdGhJbW1TdHJ1Y3QoYXJjNC5BUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTgKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweGQ5OGVmNmE5IDB4NmE0ZTdmY2EgMHgxMmYwOGM5OCAweDliNGI4MjM0IDB4NGQ4YjIzZDggMHg1MmFjNWRmNyAweGUzYWViMjVjIDB4MzIzNGI3MTEgMHhjYzgyNjM0NiAvLyBtZXRob2QgImdldExpc3RpbmdzTWJyKCl1aW50NjQiLCBtZXRob2QgImFsbG93QXNzZXQocGF5LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJmaXJzdERlcG9zaXQocGF5LGF4ZmVyLHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAiZGVwb3NpdChheGZlcix1aW50NjQpdm9pZCIsIG1ldGhvZCAic2V0UHJpY2UodWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAiYnV5KGFkZHJlc3MsdWludDY0LHVpbnQ2NCxwYXksdWludDY0KXZvaWQiLCBtZXRob2QgIndpdGhkcmF3KHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAiYmlkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCxwYXksdWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJhY2NlcHRCaWQodWludDY0LHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9nZXRMaXN0aW5nc01icl9yb3V0ZUA2IGFsbG93X2Fzc2V0IGZpcnN0X2RlcG9zaXQgZGVwb3NpdCBzZXRfcHJpY2UgYnV5IHdpdGhkcmF3IGJpZCBhY2NlcHRfYmlkCiAgICBlcnIKCm1haW5fZ2V0TGlzdGluZ3NNYnJfcm91dGVANjoKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5Ojc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSwgbmFtZT0iZ2V0TGlzdGluZ3NNYnIiKQogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDBjNTQ0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTg6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMubWFya2V0cGxhY2VfZGVtby5tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QuRGlnaXRhbE1hcmtldHBsYWNlV2l0aEltbVN0cnVjdC5hbGxvd19hc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFsbG93X2Fzc2V0OgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6ODIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChuYW1lPSJhbGxvd0Fzc2V0IikKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18wIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6ODQKICAgIC8vIGFzc2VydCBub3QgR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5pc19vcHRlZF9pbihhc3NldCkKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBkaWcgMQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6ODYKICAgIC8vIGFzc2VydCBtYnJfcGF5LnJlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MKICAgIGRpZyAxCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5Ojg3CiAgICAvLyBhc3NlcnQgbWJyX3BheS5hbW91bnQgPT0gR2xvYmFsLmFzc2V0X29wdF9pbl9taW5fYmFsYW5jZQogICAgc3dhcAogICAgZ3R4bnMgQW1vdW50CiAgICBnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKICAgID09CiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5Ojg5LTkxCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywgYXNzZXRfYW1vdW50PTAKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjkwCiAgICAvLyB4ZmVyX2Fzc2V0PWFzc2V0LCBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLCBhc3NldF9hbW91bnQ9MAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGludGNfMiAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weTo4OQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18zIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzIgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5Ojg5LTkxCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywgYXNzZXRfYW1vdW50PTAKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weTo4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKG5hbWU9ImFsbG93QXNzZXQiKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMubWFya2V0cGxhY2VfZGVtby5tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QuRGlnaXRhbE1hcmtldHBsYWNlV2l0aEltbVN0cnVjdC5maXJzdF9kZXBvc2l0W3JvdXRpbmddKCkgLT4gdm9pZDoKZmlyc3RfZGVwb3NpdDoKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjkzCiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT0iZmlyc3REZXBvc2l0IikKICAgIHR4biBHcm91cEluZGV4CiAgICBwdXNoaW50IDIKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18zIC8vIGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjEwMQogICAgLy8gYXNzZXJ0IG1icl9wYXkuc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGRpZyAzCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjEwMgogICAgLy8gYXNzZXJ0IG1icl9wYXkucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZGlnIDMKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTAzCiAgICAvLyBhc3NlcnQgbWJyX3BheS5hbW91bnQgPT0gc2VsZi5saXN0aW5nc19ib3hfbWJyKCkKICAgIHVuY292ZXIgMwogICAgZ3R4bnMgQW1vdW50CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weTo0NC02NQogICAgLy8gcmV0dXJuIFVJbnQ2NCgKICAgIC8vICAgICAyXzUwMAogICAgLy8gICAgICsKICAgIC8vICAgICAjIGZtdDogb2ZmCiAgICAvLyAgICAgIyBLZXkgbGVuZ3RoCiAgICAvLyAgICAgKAogICAgLy8gICAgICAgICA4CiAgICAvLyAgICAgICAgICsgMzIKICAgIC8vICAgICAgICAgKyA4CiAgICAvLyAgICAgICAgICsgOAogICAgLy8gICAgICAgICArCiAgICAvLyAgICAgICAgICMgVmFsdWUgbGVuZ3RoCiAgICAvLyAgICAgICAgIDgKICAgIC8vICAgICAgICAgKyA4CiAgICAvLyAgICAgICAgICsgMzIKICAgIC8vICAgICAgICAgKyA4CiAgICAvLyAgICAgICAgICsgOAogICAgLy8gICAgICkKICAgIC8vICAgICAqCiAgICAvLyAgICAgIyBmbXQ6IG9uCiAgICAvLyAgICAgNDAwCiAgICAvLyApCiAgICBpbnRjIDQgLy8gNTA1MDAKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjEwMwogICAgLy8gYXNzZXJ0IG1icl9wYXkuYW1vdW50ID09IHNlbGYubGlzdGluZ3NfYm94X21icigpCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToxMDUKICAgIC8vIGtleSA9IExpc3RpbmdLZXkob3duZXI9VHhuLnNlbmRlciwgYXNzZXQ9eGZlci54ZmVyX2Fzc2V0LmlkLCBub25jZT1ub25jZSkKICAgIHR4biBTZW5kZXIKICAgIGRpZyAzCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGl0b2IKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToxMDYKICAgIC8vIGFzc2VydCBrZXkgbm90IGluIHNlbGYubGlzdGluZ3MKICAgIGJ5dGVjXzAgLy8gMHg2YzY5NzM3NDY5NmU2NzczCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjEwOAogICAgLy8gYXNzZXJ0IHhmZXIuc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGRpZyAyCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjEwOQogICAgLy8gYXNzZXJ0IHhmZXIuYXNzZXRfcmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZGlnIDIKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToxMTAKICAgIC8vIGFzc2VydCB4ZmVyLmFzc2V0X2Ftb3VudCA+IDAKICAgIHVuY292ZXIgMgogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIGR1cAogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToxMTUKICAgIC8vIGJpZGRlcj1BY2NvdW50KCksCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjExMi0xMTgKICAgIC8vIHNlbGYubGlzdGluZ3Nba2V5XSA9IExpc3RpbmdWYWx1ZSgKICAgIC8vICAgICBkZXBvc2l0ZWQ9eGZlci5hc3NldF9hbW91bnQsCiAgICAvLyAgICAgdW5pdGFyeVByaWNlPXVuaXRhcnlfcHJpY2UsCiAgICAvLyAgICAgYmlkZGVyPUFjY291bnQoKSwKICAgIC8vICAgICBiaWQ9VUludDY0KCksCiAgICAvLyAgICAgYmlkVW5pdGFyeVByaWNlPVVJbnQ2NCgpLAogICAgLy8gKQogICAgc3dhcAogICAgaXRvYgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTE2CiAgICAvLyBiaWQ9VUludDY0KCksCiAgICBpbnRjXzIgLy8gMAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTEyLTExOAogICAgLy8gc2VsZi5saXN0aW5nc1trZXldID0gTGlzdGluZ1ZhbHVlKAogICAgLy8gICAgIGRlcG9zaXRlZD14ZmVyLmFzc2V0X2Ftb3VudCwKICAgIC8vICAgICB1bml0YXJ5UHJpY2U9dW5pdGFyeV9wcmljZSwKICAgIC8vICAgICBiaWRkZXI9QWNjb3VudCgpLAogICAgLy8gICAgIGJpZD1VSW50NjQoKSwKICAgIC8vICAgICBiaWRVbml0YXJ5UHJpY2U9VUludDY0KCksCiAgICAvLyApCiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJveF9wdXQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjkzCiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT0iZmlyc3REZXBvc2l0IikKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLm1hcmtldHBsYWNlX2RlbW8ubWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LkRpZ2l0YWxNYXJrZXRwbGFjZVdpdGhJbW1TdHJ1Y3QuZGVwb3NpdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlcG9zaXQ6CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToxMjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTIyCiAgICAvLyBrZXkgPSBMaXN0aW5nS2V5KG93bmVyPVR4bi5zZW5kZXIsIGFzc2V0PXhmZXIueGZlcl9hc3NldC5pZCwgbm9uY2U9bm9uY2UpCiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMgogICAgZ3R4bnMgWGZlckFzc2V0CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTI0CiAgICAvLyBhc3NlcnQgeGZlci5zZW5kZXIgPT0gVHhuLnNlbmRlcgogICAgZGlnIDEKICAgIGd0eG5zIFNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTI1CiAgICAvLyBhc3NlcnQgeGZlci5hc3NldF9yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkaWcgMQogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjEyNgogICAgLy8gYXNzZXJ0IHhmZXIuYXNzZXRfYW1vdW50ID4gMAogICAgc3dhcAogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIGR1cAogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToxMjgKICAgIC8vIGV4aXN0aW5nID0gc2VsZi5saXN0aW5nc1trZXldCiAgICBieXRlY18wIC8vIDB4NmM2OTczNzQ2OTZlNjc3MwogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGlzdGluZ3MgZW50cnkgZXhpc3RzCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToxMzAKICAgIC8vIGJpZD1leGlzdGluZy5iaWQsCiAgICBkdXAKICAgIGV4dHJhY3QgNDggOAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTMxCiAgICAvLyBiaWRVbml0YXJ5UHJpY2U9ZXhpc3RpbmcuYmlkVW5pdGFyeVByaWNlLAogICAgZGlnIDEKICAgIGV4dHJhY3QgNTYgOAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTMyCiAgICAvLyBiaWRkZXI9ZXhpc3RpbmcuYmlkZGVyLAogICAgZGlnIDIKICAgIGV4dHJhY3QgMTYgMzIKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjEzMwogICAgLy8gdW5pdGFyeVByaWNlPWV4aXN0aW5nLnVuaXRhcnlQcmljZSwKICAgIGRpZyAzCiAgICBleHRyYWN0IDggOAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTM0CiAgICAvLyBkZXBvc2l0ZWQ9ZXhpc3RpbmcuZGVwb3NpdGVkICsgeGZlci5hc3NldF9hbW91bnQsCiAgICB1bmNvdmVyIDQKICAgIGludGNfMiAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgdW5jb3ZlciA2CiAgICArCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToxMjktMTM1CiAgICAvLyBzZWxmLmxpc3RpbmdzW2tleV0gPSBMaXN0aW5nVmFsdWUoCiAgICAvLyAgICAgYmlkPWV4aXN0aW5nLmJpZCwKICAgIC8vICAgICBiaWRVbml0YXJ5UHJpY2U9ZXhpc3RpbmcuYmlkVW5pdGFyeVByaWNlLAogICAgLy8gICAgIGJpZGRlcj1leGlzdGluZy5iaWRkZXIsCiAgICAvLyAgICAgdW5pdGFyeVByaWNlPWV4aXN0aW5nLnVuaXRhcnlQcmljZSwKICAgIC8vICAgICBkZXBvc2l0ZWQ9ZXhpc3RpbmcuZGVwb3NpdGVkICsgeGZlci5hc3NldF9hbW91bnQsCiAgICAvLyApCiAgICBpdG9iCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYm94X3B1dAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTIwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLm1hcmtldHBsYWNlX2RlbW8ubWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LkRpZ2l0YWxNYXJrZXRwbGFjZVdpdGhJbW1TdHJ1Y3Quc2V0X3ByaWNlW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0X3ByaWNlOgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT0ic2V0UHJpY2UiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTM5CiAgICAvLyBrZXkgPSBMaXN0aW5nS2V5KG93bmVyPVR4bi5zZW5kZXIsIGFzc2V0PWFzc2V0LmlkLCBub25jZT1ub25jZSkKICAgIHR4biBTZW5kZXIKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTQxCiAgICAvLyBleGlzdGluZyA9IHNlbGYubGlzdGluZ3Nba2V5XQogICAgYnl0ZWNfMCAvLyAweDZjNjk3Mzc0Njk2ZTY3NzMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5saXN0aW5ncyBlbnRyeSBleGlzdHMKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjE0MwogICAgLy8gYmlkPWV4aXN0aW5nLmJpZCwKICAgIGR1cAogICAgZXh0cmFjdCA0OCA4CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToxNDQKICAgIC8vIGJpZFVuaXRhcnlQcmljZT1leGlzdGluZy5iaWRVbml0YXJ5UHJpY2UsCiAgICBkaWcgMQogICAgZXh0cmFjdCA1NiA4CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToxNDUKICAgIC8vIGJpZGRlcj1leGlzdGluZy5iaWRkZXIsCiAgICBkaWcgMgogICAgZXh0cmFjdCAxNiAzMgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTQ2CiAgICAvLyBkZXBvc2l0ZWQ9ZXhpc3RpbmcuZGVwb3NpdGVkLAogICAgdW5jb3ZlciAzCiAgICBleHRyYWN0IDAgOAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTQyLTE0OAogICAgLy8gc2VsZi5saXN0aW5nc1trZXldID0gTGlzdGluZ1ZhbHVlKAogICAgLy8gICAgIGJpZD1leGlzdGluZy5iaWQsCiAgICAvLyAgICAgYmlkVW5pdGFyeVByaWNlPWV4aXN0aW5nLmJpZFVuaXRhcnlQcmljZSwKICAgIC8vICAgICBiaWRkZXI9ZXhpc3RpbmcuYmlkZGVyLAogICAgLy8gICAgIGRlcG9zaXRlZD1leGlzdGluZy5kZXBvc2l0ZWQsCiAgICAvLyAgICAgdW5pdGFyeVByaWNlPXVuaXRhcnlfcHJpY2UsCiAgICAvLyApCiAgICB1bmNvdmVyIDUKICAgIGl0b2IKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfcHV0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToxMzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChuYW1lPSJzZXRQcmljZSIpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5tYXJrZXRwbGFjZV9kZW1vLm1hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5EaWdpdGFsTWFya2V0cGxhY2VXaXRoSW1tU3RydWN0LmJ1eVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmJ1eToKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjE1MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjE1OQogICAgLy8ga2V5ID0gTGlzdGluZ0tleShvd25lcj1vd25lciwgYXNzZXQ9YXNzZXQuaWQsIG5vbmNlPW5vbmNlKQogICAgZGlnIDMKICAgIGl0b2IKICAgIGRpZyA1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgY29uY2F0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToxNjEKICAgIC8vIGxpc3RpbmcgPSBzZWxmLmxpc3RpbmdzW2tleV0KICAgIGJ5dGVjXzAgLy8gMHg2YzY5NzM3NDY5NmU2NzczCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGlzdGluZ3MgZW50cnkgZXhpc3RzCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToxNjMKICAgIC8vIGFtb3VudF90b19iZV9wYWlkID0gc2VsZi5xdWFudGl0eV9wcmljZShxdWFudGl0eSwgbGlzdGluZy51bml0YXJ5UHJpY2UsIGFzc2V0LmRlY2ltYWxzKQogICAgZHVwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyA1CiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjY5CiAgICAvLyBhbW91bnRfbm90X3NjYWxlZF9oaWdoLCBhbW91bnRfbm90X3NjYWxlZF9sb3cgPSBvcC5tdWx3KHByaWNlLCBxdWFudGl0eSkKICAgIGRpZyAxCiAgICBkaWcgNQogICAgbXVsdwogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6NzAKICAgIC8vIHNjYWxpbmdfZmFjdG9yX2hpZ2gsIHNjYWxpbmdfZmFjdG9yX2xvdyA9IG9wLmV4cHcoMTAsIGFzc2V0X2RlY2ltYWxzKQogICAgcHVzaGludCAxMAogICAgdW5jb3ZlciAzCiAgICBleHB3CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weTo3MS03MwogICAgLy8gX3F1b3RpZW50X2hpZ2gsIGFtb3VudF90b19iZV9wYWlkLCBfcmVtYWluZGVyX2hpZ2gsIF9yZW1haW5kZXJfbG93ID0gb3AuZGl2bW9kdygKICAgIC8vICAgICBhbW91bnRfbm90X3NjYWxlZF9oaWdoLCBhbW91bnRfbm90X3NjYWxlZF9sb3csIHNjYWxpbmdfZmFjdG9yX2hpZ2gsIHNjYWxpbmdfZmFjdG9yX2xvdwogICAgLy8gKQogICAgZGl2bW9kdwogICAgcG9wbiAyCiAgICBzd2FwCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weTo3NAogICAgLy8gYXNzZXJ0IF9xdW90aWVudF9oaWdoID09IDAKICAgICEKICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTY1CiAgICAvLyBhc3NlcnQgYnV5X3BheS5zZW5kZXIgPT0gVHhuLnNlbmRlcgogICAgZGlnIDUKICAgIGd0eG5zIFNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTY2CiAgICAvLyBhc3NlcnQgYnV5X3BheS5yZWNlaXZlciA9PSBvd25lcgogICAgZGlnIDUKICAgIGd0eG5zIFJlY2VpdmVyCiAgICB1bmNvdmVyIDgKICAgID09CiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjE2NwogICAgLy8gYXNzZXJ0IGJ1eV9wYXkuYW1vdW50ID09IGFtb3VudF90b19iZV9wYWlkCiAgICB1bmNvdmVyIDUKICAgIGd0eG5zIEFtb3VudAogICAgPT0KICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTcwCiAgICAvLyBiaWQ9bGlzdGluZy5iaWQsCiAgICBkaWcgMQogICAgZXh0cmFjdCA0OCA4CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToxNzEKICAgIC8vIGJpZFVuaXRhcnlQcmljZT1saXN0aW5nLmJpZFVuaXRhcnlQcmljZSwKICAgIGRpZyAyCiAgICBleHRyYWN0IDU2IDgKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjE3MgogICAgLy8gYmlkZGVyPWxpc3RpbmcuYmlkZGVyLAogICAgZGlnIDMKICAgIGV4dHJhY3QgMTYgMzIKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjE3NAogICAgLy8gZGVwb3NpdGVkPWxpc3RpbmcuZGVwb3NpdGVkIC0gcXVhbnRpdHksCiAgICB1bmNvdmVyIDQKICAgIGludGNfMiAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDYKICAgIC0KICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjE2OS0xNzUKICAgIC8vIHNlbGYubGlzdGluZ3Nba2V5XSA9IExpc3RpbmdWYWx1ZSgKICAgIC8vICAgICBiaWQ9bGlzdGluZy5iaWQsCiAgICAvLyAgICAgYmlkVW5pdGFyeVByaWNlPWxpc3RpbmcuYmlkVW5pdGFyeVByaWNlLAogICAgLy8gICAgIGJpZGRlcj1saXN0aW5nLmJpZGRlciwKICAgIC8vICAgICB1bml0YXJ5UHJpY2U9bGlzdGluZy51bml0YXJ5UHJpY2UsCiAgICAvLyAgICAgZGVwb3NpdGVkPWxpc3RpbmcuZGVwb3NpdGVkIC0gcXVhbnRpdHksCiAgICAvLyApCiAgICBpdG9iCiAgICB1bmNvdmVyIDQKICAgIGl0b2IKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfcHV0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToxNzctMTc5CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwgYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwgYXNzZXRfYW1vdW50PXF1YW50aXR5CiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToxNzgKICAgIC8vIHhmZXJfYXNzZXQ9YXNzZXQsIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsIGFzc2V0X2Ftb3VudD1xdWFudGl0eQogICAgdHhuIFNlbmRlcgogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTc3CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMiAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTc3LTE3OQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsIGFzc2V0X2Ftb3VudD1xdWFudGl0eQogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjE1MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5tYXJrZXRwbGFjZV9kZW1vLm1hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5EaWdpdGFsTWFya2V0cGxhY2VXaXRoSW1tU3RydWN0LndpdGhkcmF3W3JvdXRpbmddKCkgLT4gdm9pZDoKd2l0aGRyYXc6CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToxODEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToxODMKICAgIC8vIGtleSA9IExpc3RpbmdLZXkob3duZXI9VHhuLnNlbmRlciwgYXNzZXQ9YXNzZXQuaWQsIG5vbmNlPW5vbmNlKQogICAgdHhuIFNlbmRlcgogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTg1CiAgICAvLyBsaXN0aW5nID0gc2VsZi5saXN0aW5nc1trZXldCiAgICBieXRlY18wIC8vIDB4NmM2OTczNzQ2OTZlNjc3MwogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5saXN0aW5ncyBlbnRyeSBleGlzdHMKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjE4NgogICAgLy8gaWYgbGlzdGluZy5iaWRkZXIgIT0gQWNjb3VudCgpOgogICAgZXh0cmFjdCAxNiAzMgogICAgZHVwCiAgICBjb3ZlciA0CiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBieiB3aXRoZHJhd19hZnRlcl9pZl9lbHNlQDQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjE4OAogICAgLy8gbGlzdGluZy5iaWQsIGxpc3RpbmcuYmlkVW5pdGFyeVByaWNlLCBhc3NldC5kZWNpbWFscwogICAgZHVwbiAyCiAgICBwdXNoaW50IDQ4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgc3dhcAogICAgcHVzaGludCA1NgogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyA0CiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjY5CiAgICAvLyBhbW91bnRfbm90X3NjYWxlZF9oaWdoLCBhbW91bnRfbm90X3NjYWxlZF9sb3cgPSBvcC5tdWx3KHByaWNlLCBxdWFudGl0eSkKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgbXVsdwogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6NzAKICAgIC8vIHNjYWxpbmdfZmFjdG9yX2hpZ2gsIHNjYWxpbmdfZmFjdG9yX2xvdyA9IG9wLmV4cHcoMTAsIGFzc2V0X2RlY2ltYWxzKQogICAgcHVzaGludCAxMAogICAgdW5jb3ZlciAzCiAgICBleHB3CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weTo3MS03MwogICAgLy8gX3F1b3RpZW50X2hpZ2gsIGFtb3VudF90b19iZV9wYWlkLCBfcmVtYWluZGVyX2hpZ2gsIF9yZW1haW5kZXJfbG93ID0gb3AuZGl2bW9kdygKICAgIC8vICAgICBhbW91bnRfbm90X3NjYWxlZF9oaWdoLCBhbW91bnRfbm90X3NjYWxlZF9sb3csIHNjYWxpbmdfZmFjdG9yX2hpZ2gsIHNjYWxpbmdfZmFjdG9yX2xvdwogICAgLy8gKQogICAgZGl2bW9kdwogICAgcG9wbiAyCiAgICBzd2FwCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weTo3NAogICAgLy8gYXNzZXJ0IF9xdW90aWVudF9oaWdoID09IDAKICAgICEKICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTkwCiAgICAvLyBpdHhuLlBheW1lbnQocmVjZWl2ZXI9bGlzdGluZy5iaWRkZXIsIGFtb3VudD1jdXJyZW50X2JpZF9kZXBvc2l0KS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGRpZyAzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpbnRjXzAgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzIgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0Cgp3aXRoZHJhd19hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToxOTIKICAgIC8vIGRlbCBzZWxmLmxpc3RpbmdzW2tleV0KICAgIHN3YXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTk0CiAgICAvLyBpdHhuLlBheW1lbnQocmVjZWl2ZXI9VHhuLnNlbmRlciwgYW1vdW50PXNlbGYubGlzdGluZ3NfYm94X21icigpKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgdHhuIFNlbmRlcgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6NDQtNjUKICAgIC8vIHJldHVybiBVSW50NjQoCiAgICAvLyAgICAgMl81MDAKICAgIC8vICAgICArCiAgICAvLyAgICAgIyBmbXQ6IG9mZgogICAgLy8gICAgICMgS2V5IGxlbmd0aAogICAgLy8gICAgICgKICAgIC8vICAgICAgICAgOAogICAgLy8gICAgICAgICArIDMyCiAgICAvLyAgICAgICAgICsgOAogICAgLy8gICAgICAgICArIDgKICAgIC8vICAgICAgICAgKwogICAgLy8gICAgICAgICAjIFZhbHVlIGxlbmd0aAogICAgLy8gICAgICAgICA4CiAgICAvLyAgICAgICAgICsgOAogICAgLy8gICAgICAgICArIDMyCiAgICAvLyAgICAgICAgICsgOAogICAgLy8gICAgICAgICArIDgKICAgIC8vICAgICApCiAgICAvLyAgICAgKgogICAgLy8gICAgICMgZm10OiBvbgogICAgLy8gICAgIDQwMAogICAgLy8gKQogICAgaW50YyA0IC8vIDUwNTAwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTk0CiAgICAvLyBpdHhuLlBheW1lbnQocmVjZWl2ZXI9VHhuLnNlbmRlciwgYW1vdW50PXNlbGYubGlzdGluZ3NfYm94X21icigpKS5zdWJtaXQoKQogICAgaW50Y18wIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18yIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTk2LTE5OAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsIGFzc2V0X2Ftb3VudD1saXN0aW5nLmRlcG9zaXRlZAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTk3CiAgICAvLyB4ZmVyX2Fzc2V0PWFzc2V0LCBhc3NldF9yZWNlaXZlcj1UeG4uc2VuZGVyLCBhc3NldF9hbW91bnQ9bGlzdGluZy5kZXBvc2l0ZWQKICAgIHR4biBTZW5kZXIKICAgIHN3YXAKICAgIGludGNfMiAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTk2CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMiAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MTk2LTE5OAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsIGFzc2V0X2Ftb3VudD1saXN0aW5nLmRlcG9zaXRlZAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjE4MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5tYXJrZXRwbGFjZV9kZW1vLm1hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5EaWdpdGFsTWFya2V0cGxhY2VXaXRoSW1tU3RydWN0LmJpZFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmJpZDoKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjIwMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwCiAgICBjb3ZlciA1CiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18wIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgY292ZXIgNAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgY292ZXIgMwogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MjEwCiAgICAvLyBrZXkgPSBMaXN0aW5nS2V5KG93bmVyPW93bmVyLCBhc3NldD1hc3NldC5pZCwgbm9uY2U9bm9uY2UpCiAgICBzd2FwCiAgICBpdG9iCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToyMTIKICAgIC8vIGxpc3RpbmcgPSBzZWxmLmxpc3RpbmdzW2tleV0KICAgIGJ5dGVjXzAgLy8gMHg2YzY5NzM3NDY5NmU2NzczCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgY292ZXIgNAogICAgYm94X2dldAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxpc3RpbmdzIGVudHJ5IGV4aXN0cwogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MjEzCiAgICAvLyBpZiBsaXN0aW5nLmJpZGRlciAhPSBBY2NvdW50KCk6CiAgICBleHRyYWN0IDE2IDMyCiAgICBkdXAKICAgIGNvdmVyIDcKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIGJ6IGJpZF9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjIxNAogICAgLy8gYXNzZXJ0IHVuaXRhcnlfcHJpY2UgPiBsaXN0aW5nLmJpZFVuaXRhcnlQcmljZQogICAgZHVwbiAyCiAgICBwdXNoaW50IDU2CiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDMKICAgIGRpZyAxCiAgICA+CiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjIxNwogICAgLy8gbGlzdGluZy5iaWQsIGxpc3RpbmcuYmlkVW5pdGFyeVByaWNlLCBhc3NldC5kZWNpbWFscwogICAgc3dhcAogICAgcHVzaGludCA0OAogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyA0CiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjY5CiAgICAvLyBhbW91bnRfbm90X3NjYWxlZF9oaWdoLCBhbW91bnRfbm90X3NjYWxlZF9sb3cgPSBvcC5tdWx3KHByaWNlLCBxdWFudGl0eSkKICAgIGNvdmVyIDIKICAgIG11bHcKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjcwCiAgICAvLyBzY2FsaW5nX2ZhY3Rvcl9oaWdoLCBzY2FsaW5nX2ZhY3Rvcl9sb3cgPSBvcC5leHB3KDEwLCBhc3NldF9kZWNpbWFscykKICAgIHB1c2hpbnQgMTAKICAgIHVuY292ZXIgMwogICAgZXhwdwogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6NzEtNzMKICAgIC8vIF9xdW90aWVudF9oaWdoLCBhbW91bnRfdG9fYmVfcGFpZCwgX3JlbWFpbmRlcl9oaWdoLCBfcmVtYWluZGVyX2xvdyA9IG9wLmRpdm1vZHcoCiAgICAvLyAgICAgYW1vdW50X25vdF9zY2FsZWRfaGlnaCwgYW1vdW50X25vdF9zY2FsZWRfbG93LCBzY2FsaW5nX2ZhY3Rvcl9oaWdoLCBzY2FsaW5nX2ZhY3Rvcl9sb3cKICAgIC8vICkKICAgIGRpdm1vZHcKICAgIHBvcG4gMgogICAgc3dhcAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6NzQKICAgIC8vIGFzc2VydCBfcXVvdGllbnRfaGlnaCA9PSAwCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjIyMAogICAgLy8gaXR4bi5QYXltZW50KHJlY2VpdmVyPWxpc3RpbmcuYmlkZGVyLCBhbW91bnQ9Y3VycmVudF9iaWRfYW1vdW50KS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGRpZyA2CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpbnRjXzAgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzIgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CgpiaWRfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MjIyCiAgICAvLyBhbW91bnRfdG9fYmVfYmlkID0gc2VsZi5xdWFudGl0eV9wcmljZShxdWFudGl0eSwgdW5pdGFyeV9wcmljZSwgYXNzZXQuZGVjaW1hbHMpCiAgICB1bmNvdmVyIDIKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6NjkKICAgIC8vIGFtb3VudF9ub3Rfc2NhbGVkX2hpZ2gsIGFtb3VudF9ub3Rfc2NhbGVkX2xvdyA9IG9wLm11bHcocHJpY2UsIHF1YW50aXR5KQogICAgdW5jb3ZlciAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHVuY292ZXIgNAogICAgZHVwCiAgICBjb3ZlciAzCiAgICBtdWx3CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weTo3MAogICAgLy8gc2NhbGluZ19mYWN0b3JfaGlnaCwgc2NhbGluZ19mYWN0b3JfbG93ID0gb3AuZXhwdygxMCwgYXNzZXRfZGVjaW1hbHMpCiAgICBwdXNoaW50IDEwCiAgICB1bmNvdmVyIDMKICAgIGV4cHcKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjcxLTczCiAgICAvLyBfcXVvdGllbnRfaGlnaCwgYW1vdW50X3RvX2JlX3BhaWQsIF9yZW1haW5kZXJfaGlnaCwgX3JlbWFpbmRlcl9sb3cgPSBvcC5kaXZtb2R3KAogICAgLy8gICAgIGFtb3VudF9ub3Rfc2NhbGVkX2hpZ2gsIGFtb3VudF9ub3Rfc2NhbGVkX2xvdywgc2NhbGluZ19mYWN0b3JfaGlnaCwgc2NhbGluZ19mYWN0b3JfbG93CiAgICAvLyApCiAgICBkaXZtb2R3CiAgICBwb3BuIDIKICAgIHN3YXAKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5Ojc0CiAgICAvLyBhc3NlcnQgX3F1b3RpZW50X2hpZ2ggPT0gMAogICAgIQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToyMjQKICAgIC8vIGFzc2VydCBiaWRfcGF5LnNlbmRlciA9PSBUeG4uc2VuZGVyCiAgICB1bmNvdmVyIDUKICAgIGR1cAogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToyMjUKICAgIC8vIGFzc2VydCBiaWRfcGF5LnJlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MKICAgIGR1cAogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToyMjYKICAgIC8vIGFzc2VydCBiaWRfcGF5LmFtb3VudCA9PSBhbW91bnRfdG9fYmVfYmlkCiAgICBndHhucyBBbW91bnQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjIyOQogICAgLy8gZGVwb3NpdGVkPWxpc3RpbmcuZGVwb3NpdGVkLAogICAgdW5jb3ZlciAyCiAgICBkdXAKICAgIGV4dHJhY3QgMCA4CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToyMzAKICAgIC8vIHVuaXRhcnlQcmljZT1saXN0aW5nLnVuaXRhcnlQcmljZSwKICAgIHN3YXAKICAgIGV4dHJhY3QgOCA4CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToyMzEKICAgIC8vIGJpZGRlcj1UeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MjI4LTIzNAogICAgLy8gc2VsZi5saXN0aW5nc1trZXldID0gTGlzdGluZ1ZhbHVlKAogICAgLy8gICAgIGRlcG9zaXRlZD1saXN0aW5nLmRlcG9zaXRlZCwKICAgIC8vICAgICB1bml0YXJ5UHJpY2U9bGlzdGluZy51bml0YXJ5UHJpY2UsCiAgICAvLyAgICAgYmlkZGVyPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYmlkPXF1YW50aXR5LAogICAgLy8gICAgIGJpZFVuaXRhcnlQcmljZT11bml0YXJ5X3ByaWNlLAogICAgLy8gKQogICAgY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBib3hfcHV0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToyMDAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMubWFya2V0cGxhY2VfZGVtby5tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QuRGlnaXRhbE1hcmtldHBsYWNlV2l0aEltbVN0cnVjdC5hY2NlcHRfYmlkW3JvdXRpbmddKCkgLT4gdm9pZDoKYWNjZXB0X2JpZDoKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjIzNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKG5hbWU9ImFjY2VwdEJpZCIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjIzOAogICAgLy8ga2V5ID0gTGlzdGluZ0tleShvd25lcj1UeG4uc2VuZGVyLCBhc3NldD1hc3NldC5pZCwgbm9uY2U9bm9uY2UpCiAgICB0eG4gU2VuZGVyCiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToyNDAKICAgIC8vIGxpc3RpbmcgPSBzZWxmLmxpc3RpbmdzW2tleV0KICAgIGJ5dGVjXzAgLy8gMHg2YzY5NzM3NDY5NmU2NzczCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgY292ZXIgMgogICAgYm94X2dldAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxpc3RpbmdzIGVudHJ5IGV4aXN0cwogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MjQxCiAgICAvLyBhc3NlcnQgbGlzdGluZy5iaWRkZXIgIT0gQWNjb3VudCgpCiAgICBkdXAKICAgIGV4dHJhY3QgMTYgMzIKICAgIGR1cAogICAgY292ZXIgMwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToyNDMKICAgIC8vIG1pbl9xdWFudGl0eSA9IGxpc3RpbmcuZGVwb3NpdGVkIGlmIGxpc3RpbmcuZGVwb3NpdGVkIDwgbGlzdGluZy5iaWQgZWxzZSBsaXN0aW5nLmJpZAogICAgZHVwCiAgICBpbnRjXzIgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgY292ZXIgMgogICAgY292ZXIgMwogICAgcHVzaGludCA0OAogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgY292ZXIgMwogICAgPAogICAgYnogYWNjZXB0X2JpZF90ZXJuYXJ5X2ZhbHNlQDMKICAgIGRpZyAyCgphY2NlcHRfYmlkX3Rlcm5hcnlfbWVyZ2VANDoKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjI0NgogICAgLy8gbWluX3F1YW50aXR5LCBsaXN0aW5nLmJpZFVuaXRhcnlQcmljZSwgYXNzZXQuZGVjaW1hbHMKICAgIHN3YXAKICAgIGR1cAogICAgcHVzaGludCA1NgogICAgZXh0cmFjdF91aW50NjQKICAgIHVuY292ZXIgNgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjY5CiAgICAvLyBhbW91bnRfbm90X3NjYWxlZF9oaWdoLCBhbW91bnRfbm90X3NjYWxlZF9sb3cgPSBvcC5tdWx3KHByaWNlLCBxdWFudGl0eSkKICAgIGRpZyAxCiAgICB1bmNvdmVyIDUKICAgIGR1cAogICAgY292ZXIgMwogICAgbXVsdwogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6NzAKICAgIC8vIHNjYWxpbmdfZmFjdG9yX2hpZ2gsIHNjYWxpbmdfZmFjdG9yX2xvdyA9IG9wLmV4cHcoMTAsIGFzc2V0X2RlY2ltYWxzKQogICAgcHVzaGludCAxMAogICAgdW5jb3ZlciAzCiAgICBleHB3CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weTo3MS03MwogICAgLy8gX3F1b3RpZW50X2hpZ2gsIGFtb3VudF90b19iZV9wYWlkLCBfcmVtYWluZGVyX2hpZ2gsIF9yZW1haW5kZXJfbG93ID0gb3AuZGl2bW9kdygKICAgIC8vICAgICBhbW91bnRfbm90X3NjYWxlZF9oaWdoLCBhbW91bnRfbm90X3NjYWxlZF9sb3csIHNjYWxpbmdfZmFjdG9yX2hpZ2gsIHNjYWxpbmdfZmFjdG9yX2xvdwogICAgLy8gKQogICAgZGl2bW9kdwogICAgcG9wbiAyCiAgICBzd2FwCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weTo3NAogICAgLy8gYXNzZXJ0IF9xdW90aWVudF9oaWdoID09IDAKICAgICEKICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MjQ5CiAgICAvLyBpdHhuLlBheW1lbnQocmVjZWl2ZXI9VHhuLnNlbmRlciwgYW1vdW50PWJlc3RfYmlkX2Ftb3VudCkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnRjXzAgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzIgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToyNTEtMjUzCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwgYXNzZXRfcmVjZWl2ZXI9bGlzdGluZy5iaWRkZXIsIGFzc2V0X2Ftb3VudD1taW5fcXVhbnRpdHkKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIGR1cAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgdW5jb3ZlciA2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgdW5jb3ZlciAzCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MjUxCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMiAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MjUxLTI1MwogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsIGFzc2V0X3JlY2VpdmVyPWxpc3RpbmcuYmlkZGVyLCBhc3NldF9hbW91bnQ9bWluX3F1YW50aXR5CiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MjU4CiAgICAvLyB1bml0YXJ5UHJpY2U9bGlzdGluZy51bml0YXJ5UHJpY2UsCiAgICB1bmNvdmVyIDMKICAgIGV4dHJhY3QgOCA4CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfaW1tdXRhYmxlX3N0cnVjdC5weToyNTkKICAgIC8vIGRlcG9zaXRlZD1saXN0aW5nLmRlcG9zaXRlZCAtIG1pbl9xdWFudGl0eSwKICAgIHVuY292ZXIgNQogICAgZGlnIDIKICAgIC0KICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjI2MAogICAgLy8gYmlkPWxpc3RpbmcuYmlkIC0gbWluX3F1YW50aXR5LAogICAgdW5jb3ZlciA1CiAgICB1bmNvdmVyIDMKICAgIC0KICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9pbW11dGFibGVfc3RydWN0LnB5OjI1NS0yNjEKICAgIC8vIHNlbGYubGlzdGluZ3Nba2V5XSA9IExpc3RpbmdWYWx1ZSgKICAgIC8vICAgICBiaWRkZXI9bGlzdGluZy5iaWRkZXIsCiAgICAvLyAgICAgYmlkVW5pdGFyeVByaWNlPWxpc3RpbmcuYmlkVW5pdGFyeVByaWNlLAogICAgLy8gICAgIHVuaXRhcnlQcmljZT1saXN0aW5nLnVuaXRhcnlQcmljZSwKICAgIC8vICAgICBkZXBvc2l0ZWQ9bGlzdGluZy5kZXBvc2l0ZWQgLSBtaW5fcXVhbnRpdHksCiAgICAvLyAgICAgYmlkPWxpc3RpbmcuYmlkIC0gbWluX3F1YW50aXR5LAogICAgLy8gKQogICAgc3dhcAogICAgaXRvYgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYm94X3B1dAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX2ltbXV0YWJsZV9zdHJ1Y3QucHk6MjM2CiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT0iYWNjZXB0QmlkIikKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCmFjY2VwdF9iaWRfdGVybmFyeV9mYWxzZUAzOgogICAgZGlnIDEKICAgIGIgYWNjZXB0X2JpZF90ZXJuYXJ5X21lcmdlQDQK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAFAQgABMSKAyYBCGxpc3RpbmdzMRhAAAeABGluaXSwMRtBAF8xGRREMRhEggkE2Y72qQRqTn/KBBLwjJgEm0uCNARNiyPYBFKsXfcE466yXAQyNLcRBMyCY0Y2GgCOCQABABoAWQDXATgBhAImAqsDhQCADBUffHUAAAAAAADFRLAiQzEZFDEYFBBDMRYiCUk4ECISRDYaAUkVIxJEFzIKSwFwAEUBFERLATgHMgoSREw4CDIQEkSxMgokshKyFLIRJbIQJLIBsyJDMRaBAglJOBAiEkQxFiIJSTgQJRJENhoBSRUjEkQXNhoCSRUjEkQXSwM4ADEAEkRLAzgHMgoSRE8DOAghBBJEMQBLAzgRFlBMFlAoTFBJvUUBFERLAjgAMQASREsCOBQyChJETwI4EklEMgNMFk8DFlBMUCQWTEsBUExQvyJDMRYiCUk4ECUSRDYaAUkVIxJEFzEASwI4ERZQTBZQSwE4ADEAEkRLATgUMgoSREw4EklEKE8CUEm+RElXMAhLAVc4CEsCVxAgSwNXCAhPBCRbTwYIFkxQTFBPAlBMUL8iQzYaAUkVIxJEFzYaAkkVIxJEFzYaA0kVIxJEFzEATwMWUE8CFlAoTFBJvkRJVzAISwFXOAhLAlcQIE8DVwAITwUWUExQTwJQTFC/IkM2GgFJFYEgEkQ2GgJJFSMSRBc2GgNJFSMSRBcxFiIJSTgQIhJENhoESRUjEkQXSwMWSwVMUE8DFlAoTFBJvkRJI1tLBXEBREsBSwUdgQpPA5UfRgJMFERLBTgAMQASREsFOAdPCBJETwU4CBJESwFXMAhLAlc4CEsDVxAgTwQkW0sGCRZPBBZQTFBPAlBMUL+xMQCyFLISshElshAksgGzIkM2GgFJFSMSRBdJNhoCSRUjEkQXMQBPAhZQTBZQKExQSb5MSU8CRFcQIElOBDIDE0EAK0cCgTBbTIE4W0sEcQFETE8CHYEKTwOVH0YCTBREsbIISwOyByKyECSyAbNMvEixMQAhBLIIsgcishAksgGzsTEATCRbshKyFLIRJbIQJLIBsyJDNhoBSRWBIBJENhoCSRUjEkQXSU4CNhoDSRUjEkQXMRYiCUlOBTgQIhJENhoESRUjEkQXTgQ2GgVJFSMSRBdOA0wWTwJMUEwWUChMUElOBL5MSU8CRFcQIElOBzIDE0EAMEcCgThbSwNLAQ1ETIEwW0sEcQFETgIdgQpPA5UfRgJMFESxsghLBrIHIrIQJLIBs08CcQFETwJJTgJPBElOAx2BCk8DlR9GAkwURE8FSTgAMQASREk4BzIKEkQ4CBJETwJJVwAITFcICDEATgJQTFBMFlBMFlC/IkM2GgFJFSMSRBdJNhoCSRUjEkQXMQBPAhZQTBZQKExQSU4CvkxJTwJESVcQIElOAzIDE0RJJFtJTgJOA4EwW0lOAwxBAGZLAkxJgThbTwZJTgJxAURLAU8FSU4DHYEKTwOVH0YCTBREsTEAsgeyCCKyECSyAbOxSbISTwZJTgKyFE8DshElshAksgGzTwNXCAhPBUsCCU8FTwMJTBZPAlBPAlBMFlBMFlC/IkNLAUL/lw==", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 99, "minor": 99, "patch": 99 } }, "events": [], "templateVariables": {} }