{ "name": "DigitalMarketplace", "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": "listingsBoxMbr", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "quantityPrice", "args": [ { "type": "uint64", "name": "quantity" }, { "type": "uint64", "name": "price" }, { "type": "uint64", "name": "assetDecimals" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "getListingsMbr", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "allowAsset", "args": [ { "type": "pay", "name": "mbrPay" }, { "type": "uint64", "name": "asset" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "firstDeposit", "args": [ { "type": "pay", "name": "mbrPay" }, { "type": "axfer", "name": "xfer" }, { "type": "uint64", "name": "unitaryPrice" }, { "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": "unitaryPrice" } ], "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": "buyPay" }, { "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": "bidPay" }, { "type": "uint64", "name": "quantity" }, { "type": "uint64", "name": "unitaryPrice" } ], "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": [ 476, 536, 607, 735, 880, 1042 ], "errorMessage": "Box must have value" }, { "pc": [ 75 ], "errorMessage": "OnCompletion must be NoOp" }, { "pc": [ 179 ], "errorMessage": "OnCompletion must be NoOp && can only call when creating" }, { "pc": [ 621, 759, 914, 955, 1089 ], "errorMessage": "asset exists" }, { "pc": [ 296, 435 ], "errorMessage": "transaction type is axfer" }, { "pc": [ 227, 286, 589, 855 ], "errorMessage": "transaction type is pay" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDEwIDQgNTA1MDAKICAgIGJ5dGVjYmxvY2sgImxpc3RpbmdzIiBiYXNlMzIoQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSkgMHgxNTFmN2M3NTAwMDAwMDAwMDAwMGM1NDQKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjMxCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBEaWdpdGFsTWFya2V0cGxhY2UgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxOAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQKICAgIHB1c2hieXRlc3MgMHhiZTRiMzFlMyAweGEwY2IzNjkzIDB4ZDk4ZWY2YTkgMHg2YTRlN2ZjYSAweDEyZjA4Yzk4IDB4OWI0YjgyMzQgMHg0ZDhiMjNkOCAweDUyYWM1ZGY3IDB4ZTNhZWIyNWMgMHgzMjM0YjcxMSAweGNjODI2MzQ2IC8vIG1ldGhvZCAibGlzdGluZ3NCb3hNYnIoKXVpbnQ2NCIsIG1ldGhvZCAicXVhbnRpdHlQcmljZSh1aW50NjQsdWludDY0LHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgImdldExpc3RpbmdzTWJyKCl1aW50NjQiLCBtZXRob2QgImFsbG93QXNzZXQocGF5LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJmaXJzdERlcG9zaXQocGF5LGF4ZmVyLHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAiZGVwb3NpdChheGZlcix1aW50NjQpdm9pZCIsIG1ldGhvZCAic2V0UHJpY2UodWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAiYnV5KGFkZHJlc3MsdWludDY0LHVpbnQ2NCxwYXksdWludDY0KXZvaWQiLCBtZXRob2QgIndpdGhkcmF3KHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAiYmlkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCxwYXksdWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJhY2NlcHRCaWQodWludDY0LHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9saXN0aW5nc0JveE1icl9yb3V0ZUA0IHF1YW50aXR5UHJpY2UgbWFpbl9nZXRMaXN0aW5nc01icl9yb3V0ZUA2IGFsbG93QXNzZXQgZmlyc3REZXBvc2l0IGRlcG9zaXQgc2V0UHJpY2UgYnV5IHdpdGhkcmF3IGJpZCBhY2NlcHRCaWQKICAgIGVycgoKbWFpbl9nZXRMaXN0aW5nc01icl9yb3V0ZUA2OgogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6NzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDBjNTQ0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbGlzdGluZ3NCb3hNYnJfcm91dGVANDoKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjM0CiAgICAvLyBsaXN0aW5nc0JveE1icigpOiB1aW50NjQgewogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1MDAwMDAwMDAwMDAwYzU0NAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxODoKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjMxCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBEaWdpdGFsTWFya2V0cGxhY2UgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgcmV0dXJuIC8vIG9uIGVycm9yOiBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwoKCi8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjpEaWdpdGFsTWFya2V0cGxhY2UucXVhbnRpdHlQcmljZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnF1YW50aXR5UHJpY2U6CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czo1NC01OAogICAgLy8gcXVhbnRpdHlQcmljZSgKICAgIC8vICAgcXVhbnRpdHk6IHVpbnQ2NCwKICAgIC8vICAgcHJpY2U6IHVpbnQ2NCwKICAgIC8vICAgYXNzZXREZWNpbWFsczogdWludDY0LAogICAgLy8gKTogdWludDY0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjU5CiAgICAvLyBjb25zdCBbYW1vdW50Tm90U2NhbGVkSGlnaCwgYW1vdW50Tm90U2NhbGVkTG93XSA9IG9wLm11bHcocHJpY2UsIHF1YW50aXR5KTsKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgbXVsdwogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6NjAKICAgIC8vIGNvbnN0IFtzY2FsaW5nRmFjdG9ySGlnaCwgc2NhbGluZ0ZhY3Rvckxvd10gPSBvcC5leHB3KDEwLCBhc3NldERlY2ltYWxzKTsKICAgIGludGNfMiAvLyAxMAogICAgdW5jb3ZlciAzCiAgICBleHB3CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czo2Mi02NwogICAgLy8gb3AuZGl2bW9kdygKICAgIC8vICAgYW1vdW50Tm90U2NhbGVkSGlnaCwKICAgIC8vICAgYW1vdW50Tm90U2NhbGVkTG93LAogICAgLy8gICBzY2FsaW5nRmFjdG9ySGlnaCwKICAgIC8vICAgc2NhbGluZ0ZhY3RvckxvdywKICAgIC8vICk7CiAgICBkaXZtb2R3CiAgICBwb3BuIDIKICAgIHN3YXAKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjY4CiAgICAvLyBhc3NlcnQoX3F1b3RpZW50SGlnaCA9PT0gMCk7CiAgICAhCiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjU0LTU4CiAgICAvLyBxdWFudGl0eVByaWNlKAogICAgLy8gICBxdWFudGl0eTogdWludDY0LAogICAgLy8gICBwcmljZTogdWludDY0LAogICAgLy8gICBhc3NldERlY2ltYWxzOiB1aW50NjQsCiAgICAvLyApOiB1aW50NjQgewogICAgaXRvYgogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6OkRpZ2l0YWxNYXJrZXRwbGFjZS5hbGxvd0Fzc2V0W3JvdXRpbmddKCkgLT4gdm9pZDoKYWxsb3dBc3NldDoKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czo4MAogICAgLy8gYXNzZXJ0KCFHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5pc09wdGVkSW4oYXNzZXQpKTsKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBkaWcgMQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6ODIKICAgIC8vIGFzc2VydChtYnJQYXkucmVjZWl2ZXIgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzKTsKICAgIGRpZyAxCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjgzCiAgICAvLyBhc3NlcnQobWJyUGF5LmFtb3VudCA9PT0gR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlKTsKICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czo4NS05MQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6ODgKICAgIC8vIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjg5CiAgICAvLyBhc3NldEFtb3VudDogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czo4NS05MAogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgfSkKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjg1LTkxCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6NzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6OkRpZ2l0YWxNYXJrZXRwbGFjZS5maXJzdERlcG9zaXRbcm91dGluZ10oKSAtPiB2b2lkOgpmaXJzdERlcG9zaXQ6CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czo5NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBHcm91cEluZGV4CiAgICBwdXNoaW50IDIgLy8gMgogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18wIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTAxCiAgICAvLyBhc3NlcnQobWJyUGF5LnNlbmRlciA9PT0gVHhuLnNlbmRlcik7CiAgICBkaWcgMwogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoxMDIKICAgIC8vIGFzc2VydChtYnJQYXkucmVjZWl2ZXIgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzKTsKICAgIGRpZyAzCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjEwMwogICAgLy8gYXNzZXJ0KG1iclBheS5hbW91bnQgPT09IHRoaXMubGlzdGluZ3NCb3hNYnIoKSk7CiAgICB1bmNvdmVyIDMKICAgIGd0eG5zIEFtb3VudAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MzYtNTAKICAgIC8vIDJfNTAwICsKICAgIC8vIC8vIGZtdDogb2ZmCiAgICAvLyAvLyBLZXkgbGVuZ3RoCiAgICAvLyAoOCArCiAgICAvLyAgIDMyICsKICAgIC8vICAgOCArCiAgICAvLyAgIDggKwogICAgLy8gICAvLyBWYWx1ZSBsZW5ndGgKICAgIC8vICAgOCArCiAgICAvLyAgIDggKwogICAgLy8gICAzMiArCiAgICAvLyAgIDggKwogICAgLy8gICA4KSAqCiAgICAvLyAgIC8vIGZtdDogb24KICAgIC8vICAgNDAwCiAgICBpbnRjIDQgLy8gNTA1MDAKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjEwMwogICAgLy8gYXNzZXJ0KG1iclBheS5hbW91bnQgPT09IHRoaXMubGlzdGluZ3NCb3hNYnIoKSk7CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoxMDYKICAgIC8vIG93bmVyOiBuZXcgYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLAogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTA3CiAgICAvLyBhc3NldDogbmV3IGFyYzQuVWludDY0KHhmZXIueGZlckFzc2V0LmlkKSwKICAgIGRpZyAzCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGl0b2IKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjEwNS0xMDkKICAgIC8vIGNvbnN0IGtleSA9IG5ldyBMaXN0aW5nS2V5KHsKICAgIC8vICAgb3duZXI6IG5ldyBhcmM0LkFkZHJlc3MoVHhuLnNlbmRlciksCiAgICAvLyAgIGFzc2V0OiBuZXcgYXJjNC5VaW50NjQoeGZlci54ZmVyQXNzZXQuaWQpLAogICAgLy8gICBub25jZTogbm9uY2UsCiAgICAvLyB9KTsKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czozMgogICAgLy8gbGlzdGluZ3MgPSBCb3hNYXA8TGlzdGluZ0tleSwgTGlzdGluZ1ZhbHVlPih7IGtleVByZWZpeDogImxpc3RpbmdzIiB9KTsKICAgIGJ5dGVjXzAgLy8gImxpc3RpbmdzIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoxMTAKICAgIC8vIGFzc2VydCghdGhpcy5saXN0aW5ncyhrZXkpLmV4aXN0cyk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoxMTIKICAgIC8vIGFzc2VydCh4ZmVyLnNlbmRlciA9PT0gVHhuLnNlbmRlcik7CiAgICBkaWcgMgogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoxMTMKICAgIC8vIGFzc2VydCh4ZmVyLmFzc2V0UmVjZWl2ZXIgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzKTsKICAgIGRpZyAyCiAgICBndHhucyBBc3NldFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTE0CiAgICAvLyBhc3NlcnQoeGZlci5hc3NldEFtb3VudCA+IDApOwogICAgdW5jb3ZlciAyCiAgICBndHhucyBBc3NldEFtb3VudAogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjExNwogICAgLy8gZGVwb3NpdGVkOiBuZXcgYXJjNC5VaW50NjQoeGZlci5hc3NldEFtb3VudCksCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoxMTYtMTIyCiAgICAvLyB0aGlzLmxpc3RpbmdzKGtleSkudmFsdWUgPSBuZXcgTGlzdGluZ1ZhbHVlKHsKICAgIC8vICAgZGVwb3NpdGVkOiBuZXcgYXJjNC5VaW50NjQoeGZlci5hc3NldEFtb3VudCksCiAgICAvLyAgIHVuaXRhcnlQcmljZTogdW5pdGFyeVByaWNlLAogICAgLy8gICBiaWRkZXI6IG5ldyBhcmM0LkFkZHJlc3MoKSwKICAgIC8vICAgYmlkOiBuZXcgYXJjNC5VaW50NjQoKSwKICAgIC8vICAgYmlkVW5pdGFyeVByaWNlOiBuZXcgYXJjNC5VaW50NjQoKSwKICAgIC8vIH0pOwogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyBiYXNlMzIoQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEpCiAgICBjb25jYXQKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjk0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjpEaWdpdGFsTWFya2V0cGxhY2UuZGVwb3NpdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlcG9zaXQ6CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoxMjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMyAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoxMjgKICAgIC8vIG93bmVyOiBuZXcgYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLAogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTI5CiAgICAvLyBhc3NldDogbmV3IGFyYzQuVWludDY0KHhmZXIueGZlckFzc2V0LmlkKSwKICAgIGRpZyAyCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGl0b2IKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjEyNy0xMzEKICAgIC8vIGNvbnN0IGtleSA9IG5ldyBMaXN0aW5nS2V5KHsKICAgIC8vICAgb3duZXI6IG5ldyBhcmM0LkFkZHJlc3MoVHhuLnNlbmRlciksCiAgICAvLyAgIGFzc2V0OiBuZXcgYXJjNC5VaW50NjQoeGZlci54ZmVyQXNzZXQuaWQpLAogICAgLy8gICBub25jZTogbm9uY2UsCiAgICAvLyB9KTsKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoxMzMKICAgIC8vIGFzc2VydCh4ZmVyLnNlbmRlciA9PT0gVHhuLnNlbmRlcik7CiAgICBkaWcgMQogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoxMzQKICAgIC8vIGFzc2VydCh4ZmVyLmFzc2V0UmVjZWl2ZXIgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzKTsKICAgIGRpZyAxCiAgICBndHhucyBBc3NldFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTM1CiAgICAvLyBhc3NlcnQoeGZlci5hc3NldEFtb3VudCA+IDApOwogICAgc3dhcAogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIGR1cAogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czozMgogICAgLy8gbGlzdGluZ3MgPSBCb3hNYXA8TGlzdGluZ0tleSwgTGlzdGluZ1ZhbHVlPih7IGtleVByZWZpeDogImxpc3RpbmdzIiB9KTsKICAgIGJ5dGVjXzAgLy8gImxpc3RpbmdzIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjEzNwogICAgLy8gY29uc3QgZXhpc3RpbmcgPSBjbG9uZSh0aGlzLmxpc3RpbmdzKGtleSkudmFsdWUpOwogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTM5CiAgICAvLyBiaWQ6IGV4aXN0aW5nLmJpZCwKICAgIGR1cAogICAgZXh0cmFjdCA0OCA4CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoxNDAKICAgIC8vIGJpZFVuaXRhcnlQcmljZTogZXhpc3RpbmcuYmlkVW5pdGFyeVByaWNlLAogICAgZGlnIDEKICAgIGV4dHJhY3QgNTYgOAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTQxCiAgICAvLyBiaWRkZXI6IGV4aXN0aW5nLmJpZGRlciwKICAgIGRpZyAyCiAgICBleHRyYWN0IDE2IDMyCiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoxNDIKICAgIC8vIHVuaXRhcnlQcmljZTogZXhpc3RpbmcudW5pdGFyeVByaWNlLAogICAgZGlnIDMKICAgIGV4dHJhY3QgOCA4CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoxNDQKICAgIC8vIGV4aXN0aW5nLmRlcG9zaXRlZC5hc1VpbnQ2NCgpICsgeGZlci5hc3NldEFtb3VudCwKICAgIHVuY292ZXIgNAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICB1bmNvdmVyIDYKICAgICsKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjE0My0xNDUKICAgIC8vIGRlcG9zaXRlZDogbmV3IGFyYzQuVWludDY0KAogICAgLy8gICBleGlzdGluZy5kZXBvc2l0ZWQuYXNVaW50NjQoKSArIHhmZXIuYXNzZXRBbW91bnQsCiAgICAvLyApLAogICAgaXRvYgogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTM4LTE0NgogICAgLy8gdGhpcy5saXN0aW5ncyhrZXkpLnZhbHVlID0gbmV3IExpc3RpbmdWYWx1ZSh7CiAgICAvLyAgIGJpZDogZXhpc3RpbmcuYmlkLAogICAgLy8gICBiaWRVbml0YXJ5UHJpY2U6IGV4aXN0aW5nLmJpZFVuaXRhcnlQcmljZSwKICAgIC8vICAgYmlkZGVyOiBleGlzdGluZy5iaWRkZXIsCiAgICAvLyAgIHVuaXRhcnlQcmljZTogZXhpc3RpbmcudW5pdGFyeVByaWNlLAogICAgLy8gICBkZXBvc2l0ZWQ6IG5ldyBhcmM0LlVpbnQ2NCgKICAgIC8vICAgICBleGlzdGluZy5kZXBvc2l0ZWQuYXNVaW50NjQoKSArIHhmZXIuYXNzZXRBbW91bnQsCiAgICAvLyAgICksCiAgICAvLyB9KTsKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfcHV0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoxMjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6OkRpZ2l0YWxNYXJrZXRwbGFjZS5zZXRQcmljZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldFByaWNlOgogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTQ5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTUyCiAgICAvLyBvd25lcjogbmV3IGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjE0OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjE1MS0xNTUKICAgIC8vIGNvbnN0IGtleSA9IG5ldyBMaXN0aW5nS2V5KHsKICAgIC8vICAgb3duZXI6IG5ldyBhcmM0LkFkZHJlc3MoVHhuLnNlbmRlciksCiAgICAvLyAgIGFzc2V0OiBuZXcgYXJjNC5VaW50NjQoYXNzZXQuaWQpLAogICAgLy8gICBub25jZTogbm9uY2UsCiAgICAvLyB9KTsKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjMyCiAgICAvLyBsaXN0aW5ncyA9IEJveE1hcDxMaXN0aW5nS2V5LCBMaXN0aW5nVmFsdWU+KHsga2V5UHJlZml4OiAibGlzdGluZ3MiIH0pOwogICAgYnl0ZWNfMCAvLyAibGlzdGluZ3MiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjE1NwogICAgLy8gY29uc3QgZXhpc3RpbmcgPSBjbG9uZSh0aGlzLmxpc3RpbmdzKGtleSkudmFsdWUpOwogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTU5CiAgICAvLyBiaWQ6IGV4aXN0aW5nLmJpZCwKICAgIGR1cAogICAgZXh0cmFjdCA0OCA4CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoxNjAKICAgIC8vIGJpZFVuaXRhcnlQcmljZTogZXhpc3RpbmcuYmlkVW5pdGFyeVByaWNlLAogICAgZGlnIDEKICAgIGV4dHJhY3QgNTYgOAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTYxCiAgICAvLyBiaWRkZXI6IGV4aXN0aW5nLmJpZGRlciwKICAgIGRpZyAyCiAgICBleHRyYWN0IDE2IDMyCiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoxNjIKICAgIC8vIGRlcG9zaXRlZDogZXhpc3RpbmcuZGVwb3NpdGVkLAogICAgdW5jb3ZlciAzCiAgICBleHRyYWN0IDAgOAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTU4LTE2NAogICAgLy8gdGhpcy5saXN0aW5ncyhrZXkpLnZhbHVlID0gbmV3IExpc3RpbmdWYWx1ZSh7CiAgICAvLyAgIGJpZDogZXhpc3RpbmcuYmlkLAogICAgLy8gICBiaWRVbml0YXJ5UHJpY2U6IGV4aXN0aW5nLmJpZFVuaXRhcnlQcmljZSwKICAgIC8vICAgYmlkZGVyOiBleGlzdGluZy5iaWRkZXIsCiAgICAvLyAgIGRlcG9zaXRlZDogZXhpc3RpbmcuZGVwb3NpdGVkLAogICAgLy8gICB1bml0YXJ5UHJpY2U6IHVuaXRhcnlQcmljZSwKICAgIC8vIH0pOwogICAgdW5jb3ZlciA1CiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTQ5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjpEaWdpdGFsTWFya2V0cGxhY2UuYnV5W3JvdXRpbmddKCkgLT4gdm9pZDoKYnV5OgogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTY3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjE3NS0xNzkKICAgIC8vIGNvbnN0IGtleSA9IG5ldyBMaXN0aW5nS2V5KHsKICAgIC8vICAgb3duZXI6IG93bmVyLAogICAgLy8gICBhc3NldDogbmV3IGFyYzQuVWludDY0KGFzc2V0LmlkKSwKICAgIC8vICAgbm9uY2U6IG5vbmNlLAogICAgLy8gfSk7CiAgICBkaWcgNQogICAgdW5jb3ZlciA1CiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czozMgogICAgLy8gbGlzdGluZ3MgPSBCb3hNYXA8TGlzdGluZ0tleSwgTGlzdGluZ1ZhbHVlPih7IGtleVByZWZpeDogImxpc3RpbmdzIiB9KTsKICAgIGJ5dGVjXzAgLy8gImxpc3RpbmdzIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoxODEKICAgIC8vIGNvbnN0IGxpc3RpbmcgPSBjbG9uZSh0aGlzLmxpc3RpbmdzKGtleSkudmFsdWUpOwogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTg1CiAgICAvLyBsaXN0aW5nLnVuaXRhcnlQcmljZS5hc1VpbnQ2NCgpLAogICAgZHVwCiAgICBleHRyYWN0IDggOAogICAgZGlnIDEKICAgIHB1c2hpbnQgOCAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTg2CiAgICAvLyBhc3NldC5kZWNpbWFscywKICAgIGRpZyA2CiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjU5CiAgICAvLyBjb25zdCBbYW1vdW50Tm90U2NhbGVkSGlnaCwgYW1vdW50Tm90U2NhbGVkTG93XSA9IG9wLm11bHcocHJpY2UsIHF1YW50aXR5KTsKICAgIHN3YXAKICAgIGRpZyA1CiAgICBtdWx3CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czo2MAogICAgLy8gY29uc3QgW3NjYWxpbmdGYWN0b3JIaWdoLCBzY2FsaW5nRmFjdG9yTG93XSA9IG9wLmV4cHcoMTAsIGFzc2V0RGVjaW1hbHMpOwogICAgaW50Y18yIC8vIDEwCiAgICB1bmNvdmVyIDMKICAgIGV4cHcKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjYyLTY3CiAgICAvLyBvcC5kaXZtb2R3KAogICAgLy8gICBhbW91bnROb3RTY2FsZWRIaWdoLAogICAgLy8gICBhbW91bnROb3RTY2FsZWRMb3csCiAgICAvLyAgIHNjYWxpbmdGYWN0b3JIaWdoLAogICAgLy8gICBzY2FsaW5nRmFjdG9yTG93LAogICAgLy8gKTsKICAgIGRpdm1vZHcKICAgIHBvcG4gMgogICAgc3dhcAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6NjgKICAgIC8vIGFzc2VydChfcXVvdGllbnRIaWdoID09PSAwKTsKICAgICEKICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTg5CiAgICAvLyBhc3NlcnQoYnV5UGF5LnNlbmRlciA9PT0gVHhuLnNlbmRlcik7CiAgICBkaWcgNQogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoxOTAKICAgIC8vIGFzc2VydChidXlQYXkucmVjZWl2ZXIuYnl0ZXMgPT09IG93bmVyLmJ5dGVzKTsKICAgIGRpZyA1CiAgICBndHhucyBSZWNlaXZlcgogICAgdW5jb3ZlciA4CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoxOTEKICAgIC8vIGFzc2VydChidXlQYXkuYW1vdW50ID09PSBhbW91bnRUb0JlUGFpZCk7CiAgICB1bmNvdmVyIDUKICAgIGd0eG5zIEFtb3VudAogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTk0CiAgICAvLyBiaWQ6IGxpc3RpbmcuYmlkLAogICAgZGlnIDEKICAgIGV4dHJhY3QgNDggOAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTk1CiAgICAvLyBiaWRVbml0YXJ5UHJpY2U6IGxpc3RpbmcuYmlkVW5pdGFyeVByaWNlLAogICAgZGlnIDIKICAgIGV4dHJhY3QgNTYgOAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTk2CiAgICAvLyBiaWRkZXI6IGxpc3RpbmcuYmlkZGVyLAogICAgZGlnIDMKICAgIGV4dHJhY3QgMTYgMzIKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjE5OAogICAgLy8gZGVwb3NpdGVkOiBuZXcgYXJjNC5VaW50NjQobGlzdGluZy5kZXBvc2l0ZWQuYXNVaW50NjQoKSAtIHF1YW50aXR5KSwKICAgIHVuY292ZXIgNAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBkaWcgNgogICAgLQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTkzLTE5OQogICAgLy8gdGhpcy5saXN0aW5ncyhrZXkpLnZhbHVlID0gbmV3IExpc3RpbmdWYWx1ZSh7CiAgICAvLyAgIGJpZDogbGlzdGluZy5iaWQsCiAgICAvLyAgIGJpZFVuaXRhcnlQcmljZTogbGlzdGluZy5iaWRVbml0YXJ5UHJpY2UsCiAgICAvLyAgIGJpZGRlcjogbGlzdGluZy5iaWRkZXIsCiAgICAvLyAgIHVuaXRhcnlQcmljZTogbGlzdGluZy51bml0YXJ5UHJpY2UsCiAgICAvLyAgIGRlcG9zaXRlZDogbmV3IGFyYzQuVWludDY0KGxpc3RpbmcuZGVwb3NpdGVkLmFzVWludDY0KCkgLSBxdWFudGl0eSksCiAgICAvLyB9KTsKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjIwMS0yMDcKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBhc3NldEFtb3VudDogcXVhbnRpdHksCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjIwNAogICAgLy8gYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjIwMS0yMDYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBhc3NldEFtb3VudDogcXVhbnRpdHksCiAgICAvLyAgIH0pCiAgICBpbnRjXzMgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoyMDEtMjA3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IHF1YW50aXR5LAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MTY3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjpEaWdpdGFsTWFya2V0cGxhY2Uud2l0aGRyYXdbcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoZHJhdzoKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjIxMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgYnRvaQogICAgc3dhcAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MjEzCiAgICAvLyBvd25lcjogbmV3IGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjIxMi0yMTYKICAgIC8vIGNvbnN0IGtleSA9IG5ldyBMaXN0aW5nS2V5KHsKICAgIC8vICAgb3duZXI6IG5ldyBhcmM0LkFkZHJlc3MoVHhuLnNlbmRlciksCiAgICAvLyAgIGFzc2V0OiBuZXcgYXJjNC5VaW50NjQoYXNzZXQuaWQpLAogICAgLy8gICBub25jZTogbm9uY2UsCiAgICAvLyB9KTsKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjMyCiAgICAvLyBsaXN0aW5ncyA9IEJveE1hcDxMaXN0aW5nS2V5LCBMaXN0aW5nVmFsdWU+KHsga2V5UHJlZml4OiAibGlzdGluZ3MiIH0pOwogICAgYnl0ZWNfMCAvLyAibGlzdGluZ3MiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MjE4CiAgICAvLyBjb25zdCBsaXN0aW5nID0gY2xvbmUodGhpcy5saXN0aW5ncyhrZXkpLnZhbHVlKTsKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MjE5CiAgICAvLyBpZiAobGlzdGluZy5iaWRkZXIgIT09IG5ldyBhcmM0LkFkZHJlc3MoKSkgewogICAgZXh0cmFjdCAxNiAzMgogICAgZHVwCiAgICBieXRlY18xIC8vIGFkZHIgQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVk1SEZLUQogICAgIT0KICAgIGJ6IHdpdGhkcmF3X2FmdGVyX2lmX2Vsc2VANAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MjIxCiAgICAvLyBsaXN0aW5nLmJpZC5hc1VpbnQ2NCgpLAogICAgZGlnIDEKICAgIGR1cAogICAgcHVzaGludCA0OCAvLyA0OAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjIyMgogICAgLy8gbGlzdGluZy5iaWRVbml0YXJ5UHJpY2UuYXNVaW50NjQoKSwKICAgIHN3YXAKICAgIHB1c2hpbnQgNTYgLy8gNTYKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoyMjMKICAgIC8vIGFzc2V0LmRlY2ltYWxzLAogICAgZGlnIDUKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6NTkKICAgIC8vIGNvbnN0IFthbW91bnROb3RTY2FsZWRIaWdoLCBhbW91bnROb3RTY2FsZWRMb3ddID0gb3AubXVsdyhwcmljZSwgcXVhbnRpdHkpOwogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBtdWx3CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czo2MAogICAgLy8gY29uc3QgW3NjYWxpbmdGYWN0b3JIaWdoLCBzY2FsaW5nRmFjdG9yTG93XSA9IG9wLmV4cHcoMTAsIGFzc2V0RGVjaW1hbHMpOwogICAgaW50Y18yIC8vIDEwCiAgICB1bmNvdmVyIDMKICAgIGV4cHcKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjYyLTY3CiAgICAvLyBvcC5kaXZtb2R3KAogICAgLy8gICBhbW91bnROb3RTY2FsZWRIaWdoLAogICAgLy8gICBhbW91bnROb3RTY2FsZWRMb3csCiAgICAvLyAgIHNjYWxpbmdGYWN0b3JIaWdoLAogICAgLy8gICBzY2FsaW5nRmFjdG9yTG93LAogICAgLy8gKTsKICAgIGRpdm1vZHcKICAgIHBvcG4gMgogICAgc3dhcAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6NjgKICAgIC8vIGFzc2VydChfcXVvdGllbnRIaWdoID09PSAwKTsKICAgICEKICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MjI1LTIyNwogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7IHJlY2VpdmVyOiBsaXN0aW5nLmJpZGRlci5uYXRpdmUsIGFtb3VudDogY3VycmVudEJpZERlcG9zaXQgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGR1cAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MjI1LTIyNgogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7IHJlY2VpdmVyOiBsaXN0aW5nLmJpZGRlci5uYXRpdmUsIGFtb3VudDogY3VycmVudEJpZERlcG9zaXQgfSkKICAgIGludGNfMCAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjIyNS0yMjcKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoeyByZWNlaXZlcjogbGlzdGluZy5iaWRkZXIubmF0aXZlLCBhbW91bnQ6IGN1cnJlbnRCaWREZXBvc2l0IH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0Cgp3aXRoZHJhd19hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoyMzAKICAgIC8vIHRoaXMubGlzdGluZ3Moa2V5KS5kZWxldGUoKTsKICAgIGRpZyAyCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjIzMi0yMzQKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoeyByZWNlaXZlcjogVHhuLnNlbmRlciwgYW1vdW50OiB0aGlzLmxpc3RpbmdzQm94TWJyKCkgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MjMzCiAgICAvLyAucGF5bWVudCh7IHJlY2VpdmVyOiBUeG4uc2VuZGVyLCBhbW91bnQ6IHRoaXMubGlzdGluZ3NCb3hNYnIoKSB9KQogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MzYtNTAKICAgIC8vIDJfNTAwICsKICAgIC8vIC8vIGZtdDogb2ZmCiAgICAvLyAvLyBLZXkgbGVuZ3RoCiAgICAvLyAoOCArCiAgICAvLyAgIDMyICsKICAgIC8vICAgOCArCiAgICAvLyAgIDggKwogICAgLy8gICAvLyBWYWx1ZSBsZW5ndGgKICAgIC8vICAgOCArCiAgICAvLyAgIDggKwogICAgLy8gICAzMiArCiAgICAvLyAgIDggKwogICAgLy8gICA4KSAqCiAgICAvLyAgIC8vIGZtdDogb24KICAgIC8vICAgNDAwCiAgICBpbnRjIDQgLy8gNTA1MDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoyMzItMjMzCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsgcmVjZWl2ZXI6IFR4bi5zZW5kZXIsIGFtb3VudDogdGhpcy5saXN0aW5nc0JveE1icigpIH0pCiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoyMzItMjM0CiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsgcmVjZWl2ZXI6IFR4bi5zZW5kZXIsIGFtb3VudDogdGhpcy5saXN0aW5nc0JveE1icigpIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoyMzYtMjQyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGxpc3RpbmcuZGVwb3NpdGVkLmFzVWludDY0KCksCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjIzOQogICAgLy8gYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjI0MAogICAgLy8gYXNzZXRBbW91bnQ6IGxpc3RpbmcuZGVwb3NpdGVkLmFzVWludDY0KCksCiAgICBkaWcgMgogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGRpZyAzCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MjM2LTI0MQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiBsaXN0aW5nLmRlcG9zaXRlZC5hc1VpbnQ2NCgpLAogICAgLy8gICB9KQogICAgaW50Y18zIC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MjM2LTI0MgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiBsaXN0aW5nLmRlcG9zaXRlZC5hc1VpbnQ2NCgpLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MjEwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjpEaWdpdGFsTWFya2V0cGxhY2UuYmlkW3JvdXRpbmddKCkgLT4gdm9pZDoKYmlkOgogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MjQ1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBidG9pCiAgICBjb3ZlciAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgY292ZXIgNAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGNvdmVyIDMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIGNvdmVyIDMKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjI1NC0yNTgKICAgIC8vIGNvbnN0IGtleSA9IG5ldyBMaXN0aW5nS2V5KHsKICAgIC8vICAgb3duZXIsCiAgICAvLyAgIGFzc2V0OiBuZXcgYXJjNC5VaW50NjQoYXNzZXQuaWQpLAogICAgLy8gICBub25jZSwKICAgIC8vIH0pOwogICAgY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjMyCiAgICAvLyBsaXN0aW5ncyA9IEJveE1hcDxMaXN0aW5nS2V5LCBMaXN0aW5nVmFsdWU+KHsga2V5UHJlZml4OiAibGlzdGluZ3MiIH0pOwogICAgYnl0ZWNfMCAvLyAibGlzdGluZ3MiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MjYwCiAgICAvLyBjb25zdCBsaXN0aW5nID0gY2xvbmUodGhpcy5saXN0aW5ncyhrZXkpLnZhbHVlKTsKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MjYxCiAgICAvLyBpZiAobGlzdGluZy5iaWRkZXIgIT09IG5ldyBhcmM0LkFkZHJlc3MoKSkgewogICAgZXh0cmFjdCAxNiAzMgogICAgZHVwCiAgICBieXRlY18xIC8vIGFkZHIgQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVk1SEZLUQogICAgIT0KICAgIGJ6IGJpZF9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjI2MgogICAgLy8gYXNzZXJ0KHVuaXRhcnlQcmljZS5hc1VpbnQ2NCgpID4gbGlzdGluZy5iaWRVbml0YXJ5UHJpY2UuYXNVaW50NjQoKSk7CiAgICBkaWcgMwogICAgYnRvaQogICAgZGlnIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgcHVzaGludCA1NiAvLyA1NgogICAgZXh0cmFjdF91aW50NjQKICAgIHN3YXAKICAgIGRpZyAxCiAgICA+CiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjI2NQogICAgLy8gbGlzdGluZy5iaWQuYXNVaW50NjQoKSwKICAgIHN3YXAKICAgIHB1c2hpbnQgNDggLy8gNDgKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoyNjcKICAgIC8vIGFzc2V0LmRlY2ltYWxzLAogICAgZGlnIDgKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6NTkKICAgIC8vIGNvbnN0IFthbW91bnROb3RTY2FsZWRIaWdoLCBhbW91bnROb3RTY2FsZWRMb3ddID0gb3AubXVsdyhwcmljZSwgcXVhbnRpdHkpOwogICAgY292ZXIgMgogICAgbXVsdwogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6NjAKICAgIC8vIGNvbnN0IFtzY2FsaW5nRmFjdG9ySGlnaCwgc2NhbGluZ0ZhY3Rvckxvd10gPSBvcC5leHB3KDEwLCBhc3NldERlY2ltYWxzKTsKICAgIGludGNfMiAvLyAxMAogICAgdW5jb3ZlciAzCiAgICBleHB3CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czo2Mi02NwogICAgLy8gb3AuZGl2bW9kdygKICAgIC8vICAgYW1vdW50Tm90U2NhbGVkSGlnaCwKICAgIC8vICAgYW1vdW50Tm90U2NhbGVkTG93LAogICAgLy8gICBzY2FsaW5nRmFjdG9ySGlnaCwKICAgIC8vICAgc2NhbGluZ0ZhY3RvckxvdywKICAgIC8vICk7CiAgICBkaXZtb2R3CiAgICBwb3BuIDIKICAgIHN3YXAKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjY4CiAgICAvLyBhc3NlcnQoX3F1b3RpZW50SGlnaCA9PT0gMCk7CiAgICAhCiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjI3MC0yNzIKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoeyByZWNlaXZlcjogbGlzdGluZy5iaWRkZXIubmF0aXZlLCBhbW91bnQ6IGN1cnJlbnRCaWRBbW91bnQgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGR1cAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MjcwLTI3MQogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7IHJlY2VpdmVyOiBsaXN0aW5nLmJpZGRlci5uYXRpdmUsIGFtb3VudDogY3VycmVudEJpZEFtb3VudCB9KQogICAgaW50Y18wIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MjcwLTI3MgogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7IHJlY2VpdmVyOiBsaXN0aW5nLmJpZGRlci5uYXRpdmUsIGFtb3VudDogY3VycmVudEJpZEFtb3VudCB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAoKYmlkX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjI3NgogICAgLy8gcXVhbnRpdHkuYXNVaW50NjQoKSwKICAgIGRpZyA0CiAgICBkdXAKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjI3NwogICAgLy8gdW5pdGFyeVByaWNlLmFzVWludDY0KCksCiAgICBkaWcgNQogICAgZHVwCiAgICBjb3ZlciAzCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoyNzgKICAgIC8vIGFzc2V0LmRlY2ltYWxzLAogICAgZGlnIDEwCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjU5CiAgICAvLyBjb25zdCBbYW1vdW50Tm90U2NhbGVkSGlnaCwgYW1vdW50Tm90U2NhbGVkTG93XSA9IG9wLm11bHcocHJpY2UsIHF1YW50aXR5KTsKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgbXVsdwogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6NjAKICAgIC8vIGNvbnN0IFtzY2FsaW5nRmFjdG9ySGlnaCwgc2NhbGluZ0ZhY3Rvckxvd10gPSBvcC5leHB3KDEwLCBhc3NldERlY2ltYWxzKTsKICAgIGludGNfMiAvLyAxMAogICAgdW5jb3ZlciAzCiAgICBleHB3CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czo2Mi02NwogICAgLy8gb3AuZGl2bW9kdygKICAgIC8vICAgYW1vdW50Tm90U2NhbGVkSGlnaCwKICAgIC8vICAgYW1vdW50Tm90U2NhbGVkTG93LAogICAgLy8gICBzY2FsaW5nRmFjdG9ySGlnaCwKICAgIC8vICAgc2NhbGluZ0ZhY3RvckxvdywKICAgIC8vICk7CiAgICBkaXZtb2R3CiAgICBwb3BuIDIKICAgIHN3YXAKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjY4CiAgICAvLyBhc3NlcnQoX3F1b3RpZW50SGlnaCA9PT0gMCk7CiAgICAhCiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjI4MQogICAgLy8gYXNzZXJ0KGJpZFBheS5zZW5kZXIgPT09IFR4bi5zZW5kZXIpOwogICAgZGlnIDgKICAgIGR1cAogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoyODIKICAgIC8vIGFzc2VydChiaWRQYXkucmVjZWl2ZXIgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzKTsKICAgIGR1cAogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoyODMKICAgIC8vIGFzc2VydChiaWRQYXkuYW1vdW50ID09PSBhbW91bnRUb0JlQmlkKTsKICAgIGd0eG5zIEFtb3VudAogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6Mjg2CiAgICAvLyBkZXBvc2l0ZWQ6IGxpc3RpbmcuZGVwb3NpdGVkLAogICAgZGlnIDMKICAgIGR1cAogICAgZXh0cmFjdCAwIDgKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjI4NwogICAgLy8gdW5pdGFyeVByaWNlOiBsaXN0aW5nLnVuaXRhcnlQcmljZSwKICAgIHN3YXAKICAgIGV4dHJhY3QgOCA4CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoyODgKICAgIC8vIGJpZGRlcjogbmV3IGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjI4NS0yOTEKICAgIC8vIHRoaXMubGlzdGluZ3Moa2V5KS52YWx1ZSA9IG5ldyBMaXN0aW5nVmFsdWUoewogICAgLy8gICBkZXBvc2l0ZWQ6IGxpc3RpbmcuZGVwb3NpdGVkLAogICAgLy8gICB1bml0YXJ5UHJpY2U6IGxpc3RpbmcudW5pdGFyeVByaWNlLAogICAgLy8gICBiaWRkZXI6IG5ldyBhcmM0LkFkZHJlc3MoVHhuLnNlbmRlciksCiAgICAvLyAgIGJpZDogcXVhbnRpdHksCiAgICAvLyAgIGJpZFVuaXRhcnlQcmljZTogdW5pdGFyeVByaWNlLAogICAgLy8gfSk7CiAgICBjb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyAzCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoyNDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6OkRpZ2l0YWxNYXJrZXRwbGFjZS5hY2NlcHRCaWRbcm91dGluZ10oKSAtPiB2b2lkOgphY2NlcHRCaWQ6CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoyOTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjI5NwogICAgLy8gb3duZXI6IG5ldyBhcmM0LkFkZHJlc3MoVHhuLnNlbmRlciksCiAgICB0eG4gU2VuZGVyCiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czoyOTYtMzAwCiAgICAvLyBjb25zdCBrZXkgPSBuZXcgTGlzdGluZ0tleSh7CiAgICAvLyAgIG93bmVyOiBuZXcgYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLAogICAgLy8gICBhc3NldDogbmV3IGFyYzQuVWludDY0KGFzc2V0LmlkKSwKICAgIC8vICAgbm9uY2UsCiAgICAvLyB9KTsKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjMyCiAgICAvLyBsaXN0aW5ncyA9IEJveE1hcDxMaXN0aW5nS2V5LCBMaXN0aW5nVmFsdWU+KHsga2V5UHJlZml4OiAibGlzdGluZ3MiIH0pOwogICAgYnl0ZWNfMCAvLyAibGlzdGluZ3MiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MzAyCiAgICAvLyBjb25zdCBsaXN0aW5nID0gY2xvbmUodGhpcy5saXN0aW5ncyhrZXkpLnZhbHVlKTsKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MzAzCiAgICAvLyBhc3NlcnQobGlzdGluZy5iaWRkZXIgIT09IG5ldyBhcmM0LkFkZHJlc3MoKSk7CiAgICBkdXAKICAgIGV4dHJhY3QgMTYgMzIKICAgIGR1cAogICAgY292ZXIgMgogICAgYnl0ZWNfMSAvLyBhZGRyIEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFZNUhGS1EKICAgICE9CiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjMwNgogICAgLy8gbGlzdGluZy5kZXBvc2l0ZWQuYXNVaW50NjQoKSA8IGxpc3RpbmcuYmlkLmFzVWludDY0KCkKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgcHVzaGludCA0OCAvLyA0OAogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgY292ZXIgMgogICAgPAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MzA2LTMwOAogICAgLy8gbGlzdGluZy5kZXBvc2l0ZWQuYXNVaW50NjQoKSA8IGxpc3RpbmcuYmlkLmFzVWludDY0KCkKICAgIC8vICAgPyBsaXN0aW5nLmRlcG9zaXRlZC5hc1VpbnQ2NCgpCiAgICAvLyAgIDogbGlzdGluZy5iaWQuYXNVaW50NjQoKTsKICAgIGJ6IGFjY2VwdEJpZF90ZXJuYXJ5X2ZhbHNlQDMKICAgIGRpZyAxCgphY2NlcHRCaWRfdGVybmFyeV9tZXJnZUA0OgogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MzEyCiAgICAvLyBsaXN0aW5nLmJpZFVuaXRhcnlQcmljZS5hc1VpbnQ2NCgpLAogICAgZGlnIDQKICAgIGR1cAogICAgZXh0cmFjdCA1NiA4CiAgICBkaWcgMQogICAgcHVzaGludCA1NiAvLyA1NgogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjMxMwogICAgLy8gYXNzZXQuZGVjaW1hbHMsCiAgICBkaWcgOQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjU5CiAgICAvLyBjb25zdCBbYW1vdW50Tm90U2NhbGVkSGlnaCwgYW1vdW50Tm90U2NhbGVkTG93XSA9IG9wLm11bHcocHJpY2UsIHF1YW50aXR5KTsKICAgIHN3YXAKICAgIHVuY292ZXIgNQogICAgZHVwCiAgICBjb3ZlciAzCiAgICBtdWx3CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czo2MAogICAgLy8gY29uc3QgW3NjYWxpbmdGYWN0b3JIaWdoLCBzY2FsaW5nRmFjdG9yTG93XSA9IG9wLmV4cHcoMTAsIGFzc2V0RGVjaW1hbHMpOwogICAgaW50Y18yIC8vIDEwCiAgICB1bmNvdmVyIDMKICAgIGV4cHcKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjYyLTY3CiAgICAvLyBvcC5kaXZtb2R3KAogICAgLy8gICBhbW91bnROb3RTY2FsZWRIaWdoLAogICAgLy8gICBhbW91bnROb3RTY2FsZWRMb3csCiAgICAvLyAgIHNjYWxpbmdGYWN0b3JIaWdoLAogICAgLy8gICBzY2FsaW5nRmFjdG9yTG93LAogICAgLy8gKTsKICAgIGRpdm1vZHcKICAgIHBvcG4gMgogICAgc3dhcAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6NjgKICAgIC8vIGFzc2VydChfcXVvdGllbnRIaWdoID09PSAwKTsKICAgICEKICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6MzE2CiAgICAvLyBpdHhuLnBheW1lbnQoeyByZWNlaXZlcjogVHhuLnNlbmRlciwgYW1vdW50OiBiZXN0QmlkQW1vdW50IH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgdHhuIFNlbmRlcgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGludGNfMCAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czozMTgtMzI0CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IGxpc3RpbmcuYmlkZGVyLm5hdGl2ZSwKICAgIC8vICAgICBhc3NldEFtb3VudDogbWluUXVhbnRpdHksCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIGR1cAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZGlnIDYKICAgIGR1cAogICAgY292ZXIgMgogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICB1bmNvdmVyIDIKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czozMTgtMzIzCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IGxpc3RpbmcuYmlkZGVyLm5hdGl2ZSwKICAgIC8vICAgICBhc3NldEFtb3VudDogbWluUXVhbnRpdHksCiAgICAvLyAgIH0pCiAgICBpbnRjXzMgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czozMTgtMzI0CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IGxpc3RpbmcuYmlkZGVyLm5hdGl2ZSwKICAgIC8vICAgICBhc3NldEFtb3VudDogbWluUXVhbnRpdHksCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czozMjkKICAgIC8vIHVuaXRhcnlQcmljZTogbGlzdGluZy51bml0YXJ5UHJpY2UsCiAgICB1bmNvdmVyIDMKICAgIGV4dHJhY3QgOCA4CiAgICAvLyBjb250cmFjdHMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2UuYWxnby50czozMzAKICAgIC8vIGRlcG9zaXRlZDogbmV3IGFyYzQuVWludDY0KGxpc3RpbmcuZGVwb3NpdGVkLmFzVWludDY0KCkgLSBtaW5RdWFudGl0eSksCiAgICBkaWcgNQogICAgZGlnIDIKICAgIC0KICAgIGl0b2IKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjMzMQogICAgLy8gYmlkOiBuZXcgYXJjNC5VaW50NjQobGlzdGluZy5iaWQuYXNVaW50NjQoKSAtIG1pblF1YW50aXR5KSwKICAgIGRpZyA1CiAgICB1bmNvdmVyIDMKICAgIC0KICAgIGl0b2IKICAgIC8vIGNvbnRyYWN0cy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZS5hbGdvLnRzOjMyNi0zMzIKICAgIC8vIHRoaXMubGlzdGluZ3Moa2V5KS52YWx1ZSA9IG5ldyBMaXN0aW5nVmFsdWUoewogICAgLy8gICBiaWRkZXI6IGxpc3RpbmcuYmlkZGVyLAogICAgLy8gICBiaWRVbml0YXJ5UHJpY2U6IGxpc3RpbmcuYmlkVW5pdGFyeVByaWNlLAogICAgLy8gICB1bml0YXJ5UHJpY2U6IGxpc3RpbmcudW5pdGFyeVByaWNlLAogICAgLy8gICBkZXBvc2l0ZWQ6IG5ldyBhcmM0LlVpbnQ2NChsaXN0aW5nLmRlcG9zaXRlZC5hc1VpbnQ2NCgpIC0gbWluUXVhbnRpdHkpLAogICAgLy8gICBiaWQ6IG5ldyBhcmM0LlVpbnQ2NChsaXN0aW5nLmJpZC5hc1VpbnQ2NCgpIC0gbWluUXVhbnRpdHkpLAogICAgLy8gfSk7CiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgNQogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL21hcmtldHBsYWNlL21hcmtldHBsYWNlLmFsZ28udHM6Mjk0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKYWNjZXB0QmlkX3Rlcm5hcnlfZmFsc2VAMzoKICAgIGR1cAogICAgYiBhY2NlcHRCaWRfdGVybmFyeV9tZXJnZUA0Cg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CiAFAQAKBMSKAyYDCGxpc3RpbmdzIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBUffHUAAAAAAADFRDEbQQBkMRkURDEYRIILBL5LMeMEoMs2kwTZjvapBGpOf8oEEvCMmASbS4I0BE2LI9gEUqxd9wTjrrJcBDI0txEEzIJjRjYaAI4LAAUAEQABADcAcQEHAWEBlgIjApwDVgAqsCJDKrAiQzEZFDEYFBBDNhoBFzYaAhc2GgMXTE8CHSRPA5UfRgJMFEQWgAQVH3x1TFCwIkMxFiIJSTgQIhJENhoBFzIKSwFwAEUBFERLATgHMgoSREw4CDIQEkSxMgojshKyFLIRJbIQI7IBsyJDMRaBAglJOBAiEkQxFiIJSTgQJRJENhoBNhoCSwM4ADEAEkRLAzgHMgoSRE8DOAghBBJEMQBLAzgRFlBMUChMUEm9RQEUREsCOAAxABJESwI4FDIKEkRPAjgSSUQWTwJQgDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQvyJDMRYiCUk4ECUSRDYaATEASwI4ERZQTFBLATgAMQASREsBOBQyChJETDgSSUQoTwJQSb5ESVcwCEsBVzgISwJXECBLA1cICE8EI1tPBggWTFBMUE8CUExQvyJDNhoCNhoDMQA2GgFQTwJQKExQSb5ESVcwCEsBVzgISwJXECBPA1cACE8FUExQTwJQTFC/IkM2GgE2GgJJFzYaAzEWIglJOBAiEkQ2GgQXSwVPBVBPA1AoTFBJvkRJVwgISwGBCFtLBnEBRExLBR0kTwOVH0YCTBRESwU4ADEAEkRLBTgHTwgSRE8FOAgSREsBVzAISwJXOAhLA1cQIE8EI1tLBgkWTwRQTFBPAlBMUL+xMQCyFLISshElshAjsgGzIkM2GgFJF0w2GgIxAE8CUExQKExQSb5MSU8CRFcQIEkpE0EAKksBSYEwW0yBOFtLBXEBRExPAh0kTwOVH0YCTBREsbIISbIHIrIQI7IBs0sCvEixMQAhBLIIsgcishAjsgGzsTEASwIjW7ISshRLA7IRJbIQI7IBsyJDNhoBNhoCSRdOAjYaAzEWIglJTgQ4ECISRDYaBE4DNhoFTgNOAlBMUChMUEm+TElPAkRXECBJKRNBADNLAxdLAklOAoE4W0xLAQ1ETIEwW0sIcQFETgIdJE8DlR9GAkwURLGyCEmyByKyECOyAbNLBEkXSwVJTgMXSwpxAURMTwIdJE8DlR9GAkwUREsISTgAMQASREk4BzIKEkQ4CBJESwNJVwAITFcICDEATgJQTFBMUExQSwNMvyJDNhoBSRdMNhoCMQBPAlBMUChMUEm+TElPAkRJVxAgSU4CKRNESSNbSU8CgTBbSU4CDEEAbEsBSwRJVzgISwGBOFtLCUlOAnEBRExPBUlOAx0kTwOVH0YCTBREsTEAsgeyCCKyECOyAbOxSbISSwZJTgKyFE8CshElshAjsgGzTwNXCAhLBUsCCRZLBU8DCRZMTwJQTwJQTFBMUEsFTL8iQ0lC/5I=", "clear": "CoEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 0, "patch": 0 } }, "events": [], "templateVariables": {} }