{ "name": "WhisperBid", "structs": {}, "methods": [ { "name": "create", "args": [], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "setup", "args": [ { "type": "uint64", "name": "asset" }, { "type": "uint64", "name": "floorPrice" }, { "type": "uint64", "name": "depositPenalty" }, { "type": "uint64", "name": "biddingDuration" }, { "type": "uint64", "name": "revealDuration" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "commitBid", "args": [ { "type": "byte[]", "name": "commitmentHash" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "revealBid", "args": [ { "type": "uint64", "name": "bidAmount" }, { "type": "byte[]", "name": "salt" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "settle", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "claimDefaulted", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "withdrawDeposit", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "cancelAuction", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "getPhase", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getHighestBid", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getBidCount", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getAuctionEnd", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getRevealEnd", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getFloorPrice", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getDepositPenalty", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 12, "bytes": 2 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "seller": { "keyType": "AVMString", "valueType": "address", "key": "c2VsbGVy" }, "assetId": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YXNzZXRJZA==" }, "floorPrice": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Zmxvb3JQcmljZQ==" }, "depositPenalty": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "ZGVwb3NpdFBlbmFsdHk=" }, "auctionEnd": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YXVjdGlvbkVuZA==" }, "revealEnd": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cmV2ZWFsRW5k" }, "phase": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cGhhc2U=" }, "highestBid": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "aGlnaGVzdEJpZA==" }, "highestBidder": { "keyType": "AVMString", "valueType": "address", "key": "aGlnaGVzdEJpZGRlcg==" }, "bidCount": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YmlkQ291bnQ=" }, "settled": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "c2V0dGxlZA==" }, "settlementDeadline": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "c2V0dGxlbWVudERlYWRsaW5l" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "commitments": { "keyType": "address", "valueType": "AVMBytes", "prefix": "Yw==" }, "deposits": { "keyType": "address", "valueType": "uint64", "prefix": "ZA==" }, "bidStatus": { "keyType": "address", "valueType": "uint64", "prefix": "cw==" }, "revealedAmounts": { "keyType": "address", "valueType": "uint64", "prefix": "cg==" } } } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 487 ], "errorMessage": "Already committed a bid" }, { "pc": [ 711, 837, 1037 ], "errorMessage": "Already settled" }, { "pc": [ 364 ], "errorMessage": "Auction already initialized" }, { "pc": [ 705, 831, 951 ], "errorMessage": "Auction has not ended" }, { "pc": [ 462 ], "errorMessage": "Auction not in bidding phase" }, { "pc": [ 603 ], "errorMessage": "Auction not in reveal phase" }, { "pc": [ 630 ], "errorMessage": "Bid already revealed" }, { "pc": [ 656 ], "errorMessage": "Bid below floor price" }, { "pc": [ 969 ], "errorMessage": "Bid not in revealed state" }, { "pc": [ 373 ], "errorMessage": "Bidding duration must be positive" }, { "pc": [ 471 ], "errorMessage": "Bidding period has ended" }, { "pc": [ 627, 645, 881, 965, 994 ], "errorMessage": "Box must have value" }, { "pc": [ 1044 ], "errorMessage": "Cannot cancel: bids exist" }, { "pc": [ 477 ], "errorMessage": "Commitment hash must be 32 bytes" }, { "pc": [ 514 ], "errorMessage": "Deposit must be sent to contract" }, { "pc": [ 507 ], "errorMessage": "Deposit must come from bidder" }, { "pc": [ 490 ], "errorMessage": "Deposit payment must precede app call" }, { "pc": [ 370 ], "errorMessage": "Deposit penalty must be positive" }, { "pc": [ 367 ], "errorMessage": "Floor price must be positive" }, { "pc": [ 647 ], "errorMessage": "Hash mismatch: invalid reveal" }, { "pc": [ 525 ], "errorMessage": "Insufficient deposit" }, { "pc": [ 959 ], "errorMessage": "No bid found" }, { "pc": [ 716 ], "errorMessage": "No bids were revealed" }, { "pc": [ 621 ], "errorMessage": "No committed bid found" }, { "pc": [ 179 ], "errorMessage": "OnCompletion must be NoOp" }, { "pc": [ 357 ], "errorMessage": "Only creator can setup" }, { "pc": [ 1031 ], "errorMessage": "Only seller can cancel" }, { "pc": [ 846 ], "errorMessage": "Only seller can claim default" }, { "pc": [ 720 ], "errorMessage": "Only winner can settle" }, { "pc": [ 747 ], "errorMessage": "Payment must be sent to contract" }, { "pc": [ 740 ], "errorMessage": "Payment must come from winner" }, { "pc": [ 756 ], "errorMessage": "Payment must equal winning bid" }, { "pc": [ 723 ], "errorMessage": "Payment must precede app call" }, { "pc": [ 375 ], "errorMessage": "Reveal duration must be positive" }, { "pc": [ 612 ], "errorMessage": "Reveal period has ended" }, { "pc": [ 860 ], "errorMessage": "Settlement window not expired" }, { "pc": [ 987 ], "errorMessage": "Winner must use settle()" }, { "pc": [ 362, 460, 469, 521, 556, 600, 610, 652, 676, 702, 709, 754, 777, 800, 805, 828, 835, 844, 853, 874, 896, 913, 918, 948, 985, 1026, 1035, 1042, 1050, 1077, 1089, 1101, 1113, 1125, 1137, 1149, 1160, 1170, 1182, 1194 ], "errorMessage": "check GlobalState exists" }, { "pc": [ 443, 580 ], "errorMessage": "invalid array length header" }, { "pc": [ 450, 587 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 314, 323, 332, 341, 350, 572 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 500, 733 ], "errorMessage": "transaction type is pay" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDIgOAogICAgYnl0ZWNibG9jayAicGhhc2UiICJzIiAic2V0dGxlZCIgMHgxNTFmN2M3NSAiYXNzZXRJZCIgImhpZ2hlc3RCaWQiICJzZWxsZXIiICJoaWdoZXN0QmlkZGVyIiAiYmlkQ291bnQiICJyZXZlYWxFbmQiICJhdWN0aW9uRW5kIiAiYyIgImZsb29yUHJpY2UiICJkZXBvc2l0UGVuYWx0eSIgImQiICJzZXR0bGVtZW50RGVhZGxpbmUiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo0NQogICAgLy8gYXNzZXRJZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgYnl0ZWMgNCAvLyAiYXNzZXRJZCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NTAKICAgIC8vIHBoYXNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KFBIQVNFX09QRU4pIH0pCiAgICBieXRlY18wIC8vICJwaGFzZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGhpZ2hlc3RCaWQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSkKICAgIGJ5dGVjIDUgLy8gImhpZ2hlc3RCaWQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBiaWRDb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgYnl0ZWMgOCAvLyAiYmlkQ291bnQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBzZXR0bGVkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pCiAgICBieXRlY18yIC8vICJzZXR0bGVkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo1NQogICAgLy8gc2V0dGxlbWVudERlYWRsaW5lID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pCiAgICBieXRlYyAxNSAvLyAic2V0dGxlbWVudERlYWRsaW5lIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjM1LTQyCiAgICAvLyBAY29udHJhY3QoewogICAgLy8gICBuYW1lOiAnV2hpc3BlckJpZCcsCiAgICAvLyAgIHN0YXRlVG90YWxzOiB7CiAgICAvLyAgICAgZ2xvYmFsVWludHM6IDEyLAogICAgLy8gICAgIGdsb2JhbEJ5dGVzOiAyLAogICAgLy8gICB9LAogICAgLy8gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBXaGlzcGVyQmlkIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBieiBtYWluX2NyZWF0ZV9Ob09wQDIwCiAgICBwdXNoYnl0ZXNzIDB4NjgyNWIzMTUgMHg0ODNiMzRhMiAweDA2OTc2NDgyIDB4N2MzYzJiMGMgMHhkNDlmZThlNyAweDI3N2YwYzE4IDB4ZWMyNWNhZDIgMHg3YjMzMmRmNCAweGU1YTJkYjEzIDB4ZmJhYjVhYWUgMHhiMWVjZDg1MSAweGQxNzY5Mjc0IDB4ZGYxYmE2MjUgMHhlNGE3ZTdkNyAvLyBtZXRob2QgInNldHVwKHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAiY29tbWl0QmlkKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJyZXZlYWxCaWQodWludDY0LGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJzZXR0bGUoKXZvaWQiLCBtZXRob2QgImNsYWltRGVmYXVsdGVkKCl2b2lkIiwgbWV0aG9kICJ3aXRoZHJhd0RlcG9zaXQoKXZvaWQiLCBtZXRob2QgImNhbmNlbEF1Y3Rpb24oKXZvaWQiLCBtZXRob2QgImdldFBoYXNlKCl1aW50NjQiLCBtZXRob2QgImdldEhpZ2hlc3RCaWQoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0QmlkQ291bnQoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0QXVjdGlvbkVuZCgpdWludDY0IiwgbWV0aG9kICJnZXRSZXZlYWxFbmQoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0Rmxvb3JQcmljZSgpdWludDY0IiwgbWV0aG9kICJnZXREZXBvc2l0UGVuYWx0eSgpdWludDY0IgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggc2V0dXAgY29tbWl0QmlkIHJldmVhbEJpZCBzZXR0bGUgY2xhaW1EZWZhdWx0ZWQgd2l0aGRyYXdEZXBvc2l0IGNhbmNlbEF1Y3Rpb24gZ2V0UGhhc2UgZ2V0SGlnaGVzdEJpZCBnZXRCaWRDb3VudCBnZXRBdWN0aW9uRW5kIGdldFJldmVhbEVuZCBnZXRGbG9vclByaWNlIGdldERlcG9zaXRQZW5hbHR5CiAgICBlcnIKCm1haW5fY3JlYXRlX05vT3BAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czozNS00MgogICAgLy8gQGNvbnRyYWN0KHsKICAgIC8vICAgbmFtZTogJ1doaXNwZXJCaWQnLAogICAgLy8gICBzdGF0ZVRvdGFsczogewogICAgLy8gICAgIGdsb2JhbFVpbnRzOiAxMiwKICAgIC8vICAgICBnbG9iYWxCeXRlczogMiwKICAgIC8vICAgfSwKICAgIC8vIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgV2hpc3BlckJpZCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHB1c2hieXRlcyAweDRjNWM2MWJhIC8vIG1ldGhvZCAiY3JlYXRlKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9jcmVhdGVfcm91dGVAMjEKICAgIGVycgoKbWFpbl9jcmVhdGVfcm91dGVAMjE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo3NwogICAgLy8gQGFiaW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo6V2hpc3BlckJpZC5zZXR1cFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldHVwOgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6ODQKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdOb09wJyB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6OTMKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSBHbG9iYWwuY3JlYXRvckFkZHJlc3MsICdPbmx5IGNyZWF0b3IgY2FuIHNldHVwJykKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBPbmx5IGNyZWF0b3IgY2FuIHNldHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo5NQogICAgLy8gYXNzZXJ0KHRoaXMuYXNzZXRJZC52YWx1ZSA9PT0gMCwgJ0F1Y3Rpb24gYWxyZWFkeSBpbml0aWFsaXplZCcpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NDUKICAgIC8vIGFzc2V0SWQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSkKICAgIGJ5dGVjIDQgLy8gImFzc2V0SWQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo5NQogICAgLy8gYXNzZXJ0KHRoaXMuYXNzZXRJZC52YWx1ZSA9PT0gMCwgJ0F1Y3Rpb24gYWxyZWFkeSBpbml0aWFsaXplZCcpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgIQogICAgYXNzZXJ0IC8vIEF1Y3Rpb24gYWxyZWFkeSBpbml0aWFsaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6OTgKICAgIC8vIGFzc2VydChmbG9vclByaWNlID4gMCwgJ0Zsb29yIHByaWNlIG11c3QgYmUgcG9zaXRpdmUnKQogICAgZGlnIDMKICAgIGFzc2VydCAvLyBGbG9vciBwcmljZSBtdXN0IGJlIHBvc2l0aXZlCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo5OQogICAgLy8gYXNzZXJ0KGRlcG9zaXRQZW5hbHR5ID4gMCwgJ0RlcG9zaXQgcGVuYWx0eSBtdXN0IGJlIHBvc2l0aXZlJykKICAgIGRpZyAyCiAgICBhc3NlcnQgLy8gRGVwb3NpdCBwZW5hbHR5IG11c3QgYmUgcG9zaXRpdmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjEwMAogICAgLy8gYXNzZXJ0KGJpZGRpbmdEdXJhdGlvbiA+IDAsICdCaWRkaW5nIGR1cmF0aW9uIG11c3QgYmUgcG9zaXRpdmUnKQogICAgZGlnIDEKICAgIGFzc2VydCAvLyBCaWRkaW5nIGR1cmF0aW9uIG11c3QgYmUgcG9zaXRpdmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjEwMQogICAgLy8gYXNzZXJ0KHJldmVhbER1cmF0aW9uID4gMCwgJ1JldmVhbCBkdXJhdGlvbiBtdXN0IGJlIHBvc2l0aXZlJykKICAgIGR1cAogICAgYXNzZXJ0IC8vIFJldmVhbCBkdXJhdGlvbiBtdXN0IGJlIHBvc2l0aXZlCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gc2VsbGVyID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oKQogICAgYnl0ZWMgNiAvLyAic2VsbGVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MTA0CiAgICAvLyB0aGlzLnNlbGxlci52YWx1ZSA9IFR4bi5zZW5kZXIKICAgIHR4biBTZW5kZXIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo0NQogICAgLy8gYXNzZXRJZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgYnl0ZWMgNCAvLyAiYXNzZXRJZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjEwNQogICAgLy8gdGhpcy5hc3NldElkLnZhbHVlID0gYXNzZXQuaWQKICAgIGRpZyA1CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIGZsb29yUHJpY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkKICAgIGJ5dGVjIDEyIC8vICJmbG9vclByaWNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MTA2CiAgICAvLyB0aGlzLmZsb29yUHJpY2UudmFsdWUgPSBmbG9vclByaWNlCiAgICB1bmNvdmVyIDQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gZGVwb3NpdFBlbmFsdHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkKICAgIGJ5dGVjIDEzIC8vICJkZXBvc2l0UGVuYWx0eSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjEwNwogICAgLy8gdGhpcy5kZXBvc2l0UGVuYWx0eS52YWx1ZSA9IGRlcG9zaXRQZW5hbHR5CiAgICB1bmNvdmVyIDMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxMDgKICAgIC8vIHRoaXMuYXVjdGlvbkVuZC52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAgKyBiaWRkaW5nRHVyYXRpb24KICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGRpZyAyCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo0OAogICAgLy8gYXVjdGlvbkVuZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKQogICAgYnl0ZWMgMTAgLy8gImF1Y3Rpb25FbmQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxMDgKICAgIC8vIHRoaXMuYXVjdGlvbkVuZC52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAgKyBiaWRkaW5nRHVyYXRpb24KICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxMDkKICAgIC8vIHRoaXMucmV2ZWFsRW5kLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcCArIGJpZGRpbmdEdXJhdGlvbiArIHJldmVhbER1cmF0aW9uCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICB1bmNvdmVyIDIKICAgICsKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXZlYWxFbmQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkKICAgIGJ5dGVjIDkgLy8gInJldmVhbEVuZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjEwOQogICAgLy8gdGhpcy5yZXZlYWxFbmQudmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wICsgYmlkZGluZ0R1cmF0aW9uICsgcmV2ZWFsRHVyYXRpb24KICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo1MAogICAgLy8gcGhhc2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoUEhBU0VfT1BFTikgfSkKICAgIGJ5dGVjXzAgLy8gInBoYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MTEwCiAgICAvLyB0aGlzLnBoYXNlLnZhbHVlID0gVWludDY0KFBIQVNFX09QRU4pCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjExMy0xMjAKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjExNgogICAgLy8gYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MTE3CiAgICAvLyBhc3NldEFtb3VudDogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxMTMtMTE5CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxMTgKICAgIC8vIGZlZTogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MTEzLTEyMAogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnTm9PcCcgfSkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo6V2hpc3BlckJpZC5jb21taXRCaWRbcm91dGluZ10oKSAtPiB2b2lkOgpjb21taXRCaWQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdOb09wJyB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjEzMQogICAgLy8gdGhpcy50cmFuc2l0aW9uVG9SZXZlYWwoKQogICAgY2FsbHN1YiB0cmFuc2l0aW9uVG9SZXZlYWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjEzNAogICAgLy8gYXNzZXJ0KHRoaXMucGhhc2UudmFsdWUgPT09IFBIQVNFX09QRU4sICdBdWN0aW9uIG5vdCBpbiBiaWRkaW5nIHBoYXNlJykKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo1MAogICAgLy8gcGhhc2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoUEhBU0VfT1BFTikgfSkKICAgIGJ5dGVjXzAgLy8gInBoYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MTM0CiAgICAvLyBhc3NlcnQodGhpcy5waGFzZS52YWx1ZSA9PT0gUEhBU0VfT1BFTiwgJ0F1Y3Rpb24gbm90IGluIGJpZGRpbmcgcGhhc2UnKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBBdWN0aW9uIG5vdCBpbiBiaWRkaW5nIHBoYXNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxMzUKICAgIC8vIGFzc2VydChHbG9iYWwubGF0ZXN0VGltZXN0YW1wIDwgdGhpcy5hdWN0aW9uRW5kLnZhbHVlLCAnQmlkZGluZyBwZXJpb2QgaGFzIGVuZGVkJykKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo0OAogICAgLy8gYXVjdGlvbkVuZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKQogICAgYnl0ZWMgMTAgLy8gImF1Y3Rpb25FbmQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxMzUKICAgIC8vIGFzc2VydChHbG9iYWwubGF0ZXN0VGltZXN0YW1wIDwgdGhpcy5hdWN0aW9uRW5kLnZhbHVlLCAnQmlkZGluZyBwZXJpb2QgaGFzIGVuZGVkJykKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA8CiAgICBhc3NlcnQgLy8gQmlkZGluZyBwZXJpb2QgaGFzIGVuZGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxMzgKICAgIC8vIGFzc2VydChjb21taXRtZW50SGFzaC5sZW5ndGggPT09IDMyLCAnQ29tbWl0bWVudCBoYXNoIG11c3QgYmUgMzIgYnl0ZXMnKQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gQ29tbWl0bWVudCBoYXNoIG11c3QgYmUgMzIgYnl0ZXMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBjb21taXRtZW50cyA9IEJveE1hcDxBY2NvdW50LCBieXRlcz4oeyBrZXlQcmVmaXg6ICdjJyB9KQogICAgYnl0ZWMgMTEgLy8gImMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxMzkKICAgIC8vIGFzc2VydCghdGhpcy5jb21taXRtZW50cyhUeG4uc2VuZGVyKS5leGlzdHMsICdBbHJlYWR5IGNvbW1pdHRlZCBhIGJpZCcpCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo1OAogICAgLy8gY29tbWl0bWVudHMgPSBCb3hNYXA8QWNjb3VudCwgYnl0ZXM+KHsga2V5UHJlZml4OiAnYycgfSkKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyBhc3NlcnQoIXRoaXMuY29tbWl0bWVudHMoVHhuLnNlbmRlcikuZXhpc3RzLCAnQWxyZWFkeSBjb21taXR0ZWQgYSBiaWQnKQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gQWxyZWFkeSBjb21taXR0ZWQgYSBiaWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjE0NAogICAgLy8gYXNzZXJ0KFR4bi5ncm91cEluZGV4ID4gMCwgJ0RlcG9zaXQgcGF5bWVudCBtdXN0IHByZWNlZGUgYXBwIGNhbGwnKQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGFzc2VydCAvLyBEZXBvc2l0IHBheW1lbnQgbXVzdCBwcmVjZWRlIGFwcCBjYWxsCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxNDUKICAgIC8vIGNvbnN0IGRlcG9zaXRUeG4gPSBndHhuLlBheW1lbnRUeG4oVHhuLmdyb3VwSW5kZXggLSAxKQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxNDYKICAgIC8vIGFzc2VydChkZXBvc2l0VHhuLnNlbmRlciA9PT0gVHhuLnNlbmRlciwgJ0RlcG9zaXQgbXVzdCBjb21lIGZyb20gYmlkZGVyJykKICAgIGR1cAogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0IC8vIERlcG9zaXQgbXVzdCBjb21lIGZyb20gYmlkZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxNDgKICAgIC8vIGRlcG9zaXRUeG4ucmVjZWl2ZXIgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZHVwCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxNDctMTUwCiAgICAvLyBhc3NlcnQoCiAgICAvLyAgIGRlcG9zaXRUeG4ucmVjZWl2ZXIgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAnRGVwb3NpdCBtdXN0IGJlIHNlbnQgdG8gY29udHJhY3QnCiAgICAvLyApCiAgICBhc3NlcnQgLy8gRGVwb3NpdCBtdXN0IGJlIHNlbnQgdG8gY29udHJhY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjE1MQogICAgLy8gYXNzZXJ0KGRlcG9zaXRUeG4uYW1vdW50ID49IHRoaXMuZGVwb3NpdFBlbmFsdHkudmFsdWUsICdJbnN1ZmZpY2llbnQgZGVwb3NpdCcpCiAgICBndHhucyBBbW91bnQKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gZGVwb3NpdFBlbmFsdHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkKICAgIGJ5dGVjIDEzIC8vICJkZXBvc2l0UGVuYWx0eSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjE1MQogICAgLy8gYXNzZXJ0KGRlcG9zaXRUeG4uYW1vdW50ID49IHRoaXMuZGVwb3NpdFBlbmFsdHkudmFsdWUsICdJbnN1ZmZpY2llbnQgZGVwb3NpdCcpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gSW5zdWZmaWNpZW50IGRlcG9zaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBjb21taXRtZW50cyA9IEJveE1hcDxBY2NvdW50LCBieXRlcz4oeyBrZXlQcmVmaXg6ICdjJyB9KQogICAgYnl0ZWMgMTEgLy8gImMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxNTQKICAgIC8vIHRoaXMuY29tbWl0bWVudHMoVHhuLnNlbmRlcikudmFsdWUgPSBjb21taXRtZW50SGFzaAogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNvbW1pdG1lbnRzID0gQm94TWFwPEFjY291bnQsIGJ5dGVzPih7IGtleVByZWZpeDogJ2MnIH0pCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjE1NAogICAgLy8gdGhpcy5jb21taXRtZW50cyhUeG4uc2VuZGVyKS52YWx1ZSA9IGNvbW1pdG1lbnRIYXNoCiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgdW5jb3ZlciAyCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo1OQogICAgLy8gZGVwb3NpdHMgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2QnIH0pCiAgICBieXRlYyAxNCAvLyAiZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjE1NQogICAgLy8gdGhpcy5kZXBvc2l0cyhUeG4uc2VuZGVyKS52YWx1ZSA9IGRlcG9zaXRUeG4uYW1vdW50CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo1OQogICAgLy8gZGVwb3NpdHMgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2QnIH0pCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjE1NQogICAgLy8gdGhpcy5kZXBvc2l0cyhUeG4uc2VuZGVyKS52YWx1ZSA9IGRlcG9zaXRUeG4uYW1vdW50CiAgICBzd2FwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo2MAogICAgLy8gYmlkU3RhdHVzID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdzJyB9KQogICAgYnl0ZWNfMSAvLyAicyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjE1NgogICAgLy8gdGhpcy5iaWRTdGF0dXMoVHhuLnNlbmRlcikudmFsdWUgPSBVaW50NjQoU1RBVFVTX0NPTU1JVFRFRCkKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjYwCiAgICAvLyBiaWRTdGF0dXMgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ3MnIH0pCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjE1NgogICAgLy8gdGhpcy5iaWRTdGF0dXMoVHhuLnNlbmRlcikudmFsdWUgPSBVaW50NjQoU1RBVFVTX0NPTU1JVFRFRCkKICAgIGludGNfMCAvLyAwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxNTcKICAgIC8vIHRoaXMuYmlkQ291bnQudmFsdWUgPSB0aGlzLmJpZENvdW50LnZhbHVlICsgMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBiaWRDb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgYnl0ZWMgOCAvLyAiYmlkQ291bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxNTcKICAgIC8vIHRoaXMuYmlkQ291bnQudmFsdWUgPSB0aGlzLmJpZENvdW50LnZhbHVlICsgMQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo1MwogICAgLy8gYmlkQ291bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSkKICAgIGJ5dGVjIDggLy8gImJpZENvdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MTU3CiAgICAvLyB0aGlzLmJpZENvdW50LnZhbHVlID0gdGhpcy5iaWRDb3VudC52YWx1ZSArIDEKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdOb09wJyB9KQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjpXaGlzcGVyQmlkLnJldmVhbEJpZFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnJldmVhbEJpZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ05vT3AnIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIHRoaXMudHJhbnNpdGlvblRvUmV2ZWFsKCkKICAgIGNhbGxzdWIgdHJhbnNpdGlvblRvUmV2ZWFsCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxNjQKICAgIC8vIHRoaXMudHJhbnNpdGlvblRvRW5kZWQoKQogICAgY2FsbHN1YiB0cmFuc2l0aW9uVG9FbmRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MTY3CiAgICAvLyBhc3NlcnQodGhpcy5waGFzZS52YWx1ZSA9PT0gUEhBU0VfUkVWRUFMLCAnQXVjdGlvbiBub3QgaW4gcmV2ZWFsIHBoYXNlJykKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo1MAogICAgLy8gcGhhc2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoUEhBU0VfT1BFTikgfSkKICAgIGJ5dGVjXzAgLy8gInBoYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MTY3CiAgICAvLyBhc3NlcnQodGhpcy5waGFzZS52YWx1ZSA9PT0gUEhBU0VfUkVWRUFMLCAnQXVjdGlvbiBub3QgaW4gcmV2ZWFsIHBoYXNlJykKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBBdWN0aW9uIG5vdCBpbiByZXZlYWwgcGhhc2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjE2OAogICAgLy8gYXNzZXJ0KEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAgPCB0aGlzLnJldmVhbEVuZC52YWx1ZSwgJ1JldmVhbCBwZXJpb2QgaGFzIGVuZGVkJykKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmV2ZWFsRW5kID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBieXRlYyA5IC8vICJyZXZlYWxFbmQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxNjgKICAgIC8vIGFzc2VydChHbG9iYWwubGF0ZXN0VGltZXN0YW1wIDwgdGhpcy5yZXZlYWxFbmQudmFsdWUsICdSZXZlYWwgcGVyaW9kIGhhcyBlbmRlZCcpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPAogICAgYXNzZXJ0IC8vIFJldmVhbCBwZXJpb2QgaGFzIGVuZGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo1OAogICAgLy8gY29tbWl0bWVudHMgPSBCb3hNYXA8QWNjb3VudCwgYnl0ZXM+KHsga2V5UHJlZml4OiAnYycgfSkKICAgIGJ5dGVjIDExIC8vICJjIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MTcxCiAgICAvLyBhc3NlcnQodGhpcy5jb21taXRtZW50cyhUeG4uc2VuZGVyKS5leGlzdHMsICdObyBjb21taXR0ZWQgYmlkIGZvdW5kJykKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBjb21taXRtZW50cyA9IEJveE1hcDxBY2NvdW50LCBieXRlcz4oeyBrZXlQcmVmaXg6ICdjJyB9KQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxNzEKICAgIC8vIGFzc2VydCh0aGlzLmNvbW1pdG1lbnRzKFR4bi5zZW5kZXIpLmV4aXN0cywgJ05vIGNvbW1pdHRlZCBiaWQgZm91bmQnKQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gTm8gY29tbWl0dGVkIGJpZCBmb3VuZAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIGJpZFN0YXR1cyA9IEJveE1hcDxBY2NvdW50LCB1aW50NjQ+KHsga2V5UHJlZml4OiAncycgfSkKICAgIGJ5dGVjXzEgLy8gInMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxNzIKICAgIC8vIGFzc2VydCh0aGlzLmJpZFN0YXR1cyhUeG4uc2VuZGVyKS52YWx1ZSA9PT0gU1RBVFVTX0NPTU1JVFRFRCwgJ0JpZCBhbHJlYWR5IHJldmVhbGVkJykKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjYwCiAgICAvLyBiaWRTdGF0dXMgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ3MnIH0pCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gYXNzZXJ0KHRoaXMuYmlkU3RhdHVzKFR4bi5zZW5kZXIpLnZhbHVlID09PSBTVEFUVVNfQ09NTUlUVEVELCAnQmlkIGFscmVhZHkgcmV2ZWFsZWQnKQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgICEKICAgIGFzc2VydCAvLyBCaWQgYWxyZWFkeSByZXZlYWxlZAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MTc1CiAgICAvLyBjb25zdCBhbW91bnRCeXRlcyA9IG9wLml0b2IoYmlkQW1vdW50KQogICAgZGlnIDEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjE3NgogICAgLy8gY29uc3QgcHJlaW1hZ2UgPSBvcC5jb25jYXQoYW1vdW50Qnl0ZXMsIHNhbHQpCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxNzcKICAgIC8vIGNvbnN0IGNvbXB1dGVkSGFzaCA9IG9wLnNoYTI1NihwcmVpbWFnZSkKICAgIHNoYTI1NgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNvbW1pdG1lbnRzID0gQm94TWFwPEFjY291bnQsIGJ5dGVzPih7IGtleVByZWZpeDogJ2MnIH0pCiAgICBieXRlYyAxMSAvLyAiYyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjE3OAogICAgLy8gYXNzZXJ0KGNvbXB1dGVkSGFzaCA9PT0gdGhpcy5jb21taXRtZW50cyhUeG4uc2VuZGVyKS52YWx1ZSwgJ0hhc2ggbWlzbWF0Y2g6IGludmFsaWQgcmV2ZWFsJykKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBjb21taXRtZW50cyA9IEJveE1hcDxBY2NvdW50LCBieXRlcz4oeyBrZXlQcmVmaXg6ICdjJyB9KQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxNzgKICAgIC8vIGFzc2VydChjb21wdXRlZEhhc2ggPT09IHRoaXMuY29tbWl0bWVudHMoVHhuLnNlbmRlcikudmFsdWUsICdIYXNoIG1pc21hdGNoOiBpbnZhbGlkIHJldmVhbCcpCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgPT0KICAgIGFzc2VydCAvLyBIYXNoIG1pc21hdGNoOiBpbnZhbGlkIHJldmVhbAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MTgxCiAgICAvLyBhc3NlcnQoYmlkQW1vdW50ID49IHRoaXMuZmxvb3JQcmljZS52YWx1ZSwgJ0JpZCBiZWxvdyBmbG9vciBwcmljZScpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIGZsb29yUHJpY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkKICAgIGJ5dGVjIDEyIC8vICJmbG9vclByaWNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MTgxCiAgICAvLyBhc3NlcnQoYmlkQW1vdW50ID49IHRoaXMuZmxvb3JQcmljZS52YWx1ZSwgJ0JpZCBiZWxvdyBmbG9vciBwcmljZScpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDIKICAgIDw9CiAgICBhc3NlcnQgLy8gQmlkIGJlbG93IGZsb29yIHByaWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo2MAogICAgLy8gYmlkU3RhdHVzID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdzJyB9KQogICAgYnl0ZWNfMSAvLyAicyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjE4NAogICAgLy8gdGhpcy5iaWRTdGF0dXMoVHhuLnNlbmRlcikudmFsdWUgPSBVaW50NjQoU1RBVFVTX1JFVkVBTEVEKQogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIGJpZFN0YXR1cyA9IEJveE1hcDxBY2NvdW50LCB1aW50NjQ+KHsga2V5UHJlZml4OiAncycgfSkKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MTg0CiAgICAvLyB0aGlzLmJpZFN0YXR1cyhUeG4uc2VuZGVyKS52YWx1ZSA9IFVpbnQ2NChTVEFUVVNfUkVWRUFMRUQpCiAgICBpbnRjXzEgLy8gMQogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NjEKICAgIC8vIHJldmVhbGVkQW1vdW50cyA9IEJveE1hcDxBY2NvdW50LCB1aW50NjQ+KHsga2V5UHJlZml4OiAncicgfSkKICAgIHB1c2hieXRlcyAiciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjE4NQogICAgLy8gdGhpcy5yZXZlYWxlZEFtb3VudHMoVHhuLnNlbmRlcikudmFsdWUgPSBiaWRBbW91bnQKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjYxCiAgICAvLyByZXZlYWxlZEFtb3VudHMgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ3InIH0pCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjE4NQogICAgLy8gdGhpcy5yZXZlYWxlZEFtb3VudHMoVHhuLnNlbmRlcikudmFsdWUgPSBiaWRBbW91bnQKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gaWYgKGJpZEFtb3VudCA+IHRoaXMuaGlnaGVzdEJpZC52YWx1ZSkgewogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBoaWdoZXN0QmlkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pCiAgICBieXRlYyA1IC8vICJoaWdoZXN0QmlkIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MTg3CiAgICAvLyBpZiAoYmlkQW1vdW50ID4gdGhpcy5oaWdoZXN0QmlkLnZhbHVlKSB7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPgogICAgYnogcmV2ZWFsQmlkX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGhpZ2hlc3RCaWQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSkKICAgIGJ5dGVjIDUgLy8gImhpZ2hlc3RCaWQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxODgKICAgIC8vIHRoaXMuaGlnaGVzdEJpZC52YWx1ZSA9IGJpZEFtb3VudAogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo1MgogICAgLy8gaGlnaGVzdEJpZGRlciA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KCkKICAgIGJ5dGVjIDcgLy8gImhpZ2hlc3RCaWRkZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxODkKICAgIC8vIHRoaXMuaGlnaGVzdEJpZGRlci52YWx1ZSA9IFR4bi5zZW5kZXIKICAgIHR4biBTZW5kZXIKICAgIGFwcF9nbG9iYWxfcHV0CgpyZXZlYWxCaWRfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MTYxCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnTm9PcCcgfSkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo6V2hpc3BlckJpZC5zZXR0bGVbcm91dGluZ10oKSAtPiB2b2lkOgpzZXR0bGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyMDAKICAgIC8vIHRoaXMudHJhbnNpdGlvblRvUmV2ZWFsKCkKICAgIGNhbGxzdWIgdHJhbnNpdGlvblRvUmV2ZWFsCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyMDEKICAgIC8vIHRoaXMudHJhbnNpdGlvblRvRW5kZWQoKQogICAgY2FsbHN1YiB0cmFuc2l0aW9uVG9FbmRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MjA0CiAgICAvLyBhc3NlcnQodGhpcy5waGFzZS52YWx1ZSA9PT0gUEhBU0VfRU5ERUQsICdBdWN0aW9uIGhhcyBub3QgZW5kZWQnKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBwaGFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NChQSEFTRV9PUEVOKSB9KQogICAgYnl0ZWNfMCAvLyAicGhhc2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyMDQKICAgIC8vIGFzc2VydCh0aGlzLnBoYXNlLnZhbHVlID09PSBQSEFTRV9FTkRFRCwgJ0F1Y3Rpb24gaGFzIG5vdCBlbmRlZCcpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaW50Y18yIC8vIDIKICAgID09CiAgICBhc3NlcnQgLy8gQXVjdGlvbiBoYXMgbm90IGVuZGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyMDUKICAgIC8vIGFzc2VydCh0aGlzLnNldHRsZWQudmFsdWUgPT09IDAsICdBbHJlYWR5IHNldHRsZWQnKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBzZXR0bGVkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pCiAgICBieXRlY18yIC8vICJzZXR0bGVkIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MjA1CiAgICAvLyBhc3NlcnQodGhpcy5zZXR0bGVkLnZhbHVlID09PSAwLCAnQWxyZWFkeSBzZXR0bGVkJykKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQgLy8gQWxyZWFkeSBzZXR0bGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyMDYKICAgIC8vIGFzc2VydCh0aGlzLmhpZ2hlc3RCaWRkZXIuaGFzVmFsdWUsICdObyBiaWRzIHdlcmUgcmV2ZWFsZWQnKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyBoaWdoZXN0QmlkZGVyID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oKQogICAgYnl0ZWMgNyAvLyAiaGlnaGVzdEJpZGRlciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjIwNgogICAgLy8gYXNzZXJ0KHRoaXMuaGlnaGVzdEJpZGRlci5oYXNWYWx1ZSwgJ05vIGJpZHMgd2VyZSByZXZlYWxlZCcpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIE5vIGJpZHMgd2VyZSByZXZlYWxlZAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MjA3CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5oaWdoZXN0QmlkZGVyLnZhbHVlLCAnT25seSB3aW5uZXIgY2FuIHNldHRsZScpCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgd2lubmVyIGNhbiBzZXR0bGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjIxMgogICAgLy8gYXNzZXJ0KFR4bi5ncm91cEluZGV4ID4gMCwgJ1BheW1lbnQgbXVzdCBwcmVjZWRlIGFwcCBjYWxsJykKICAgIHR4biBHcm91cEluZGV4CiAgICBhc3NlcnQgLy8gUGF5bWVudCBtdXN0IHByZWNlZGUgYXBwIGNhbGwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjIxMwogICAgLy8gY29uc3QgcGF5bWVudFR4biA9IGd0eG4uUGF5bWVudFR4bihUeG4uZ3JvdXBJbmRleCAtIDEpCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjIxNAogICAgLy8gYXNzZXJ0KHBheW1lbnRUeG4uc2VuZGVyID09PSBUeG4uc2VuZGVyLCAnUGF5bWVudCBtdXN0IGNvbWUgZnJvbSB3aW5uZXInKQogICAgZHVwCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQgLy8gUGF5bWVudCBtdXN0IGNvbWUgZnJvbSB3aW5uZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gcGF5bWVudFR4bi5yZWNlaXZlciA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjIxNS0yMTgKICAgIC8vIGFzc2VydCgKICAgIC8vICAgcGF5bWVudFR4bi5yZWNlaXZlciA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICdQYXltZW50IG11c3QgYmUgc2VudCB0byBjb250cmFjdCcKICAgIC8vICkKICAgIGFzc2VydCAvLyBQYXltZW50IG11c3QgYmUgc2VudCB0byBjb250cmFjdAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MjE5CiAgICAvLyBhc3NlcnQocGF5bWVudFR4bi5hbW91bnQgPT09IHRoaXMuaGlnaGVzdEJpZC52YWx1ZSwgJ1BheW1lbnQgbXVzdCBlcXVhbCB3aW5uaW5nIGJpZCcpCiAgICBndHhucyBBbW91bnQKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gaGlnaGVzdEJpZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgYnl0ZWMgNSAvLyAiaGlnaGVzdEJpZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjIxOQogICAgLy8gYXNzZXJ0KHBheW1lbnRUeG4uYW1vdW50ID09PSB0aGlzLmhpZ2hlc3RCaWQudmFsdWUsICdQYXltZW50IG11c3QgZXF1YWwgd2lubmluZyBiaWQnKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gUGF5bWVudCBtdXN0IGVxdWFsIHdpbm5pbmcgYmlkCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo1NAogICAgLy8gc2V0dGxlZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgYnl0ZWNfMiAvLyAic2V0dGxlZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjIyMgogICAgLy8gdGhpcy5zZXR0bGVkLnZhbHVlID0gVWludDY0KDEpCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjYwCiAgICAvLyBiaWRTdGF0dXMgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ3MnIH0pCiAgICBieXRlY18xIC8vICJzIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MjIzCiAgICAvLyB0aGlzLmJpZFN0YXR1cyhUeG4uc2VuZGVyKS52YWx1ZSA9IFVpbnQ2NChTVEFUVVNfV0lOTkVSKQogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIGJpZFN0YXR1cyA9IEJveE1hcDxBY2NvdW50LCB1aW50NjQ+KHsga2V5UHJlZml4OiAncycgfSkKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MjIzCiAgICAvLyB0aGlzLmJpZFN0YXR1cyhUeG4uc2VuZGVyKS52YWx1ZSA9IFVpbnQ2NChTVEFUVVNfV0lOTkVSKQogICAgaW50Y18yIC8vIDIKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBzZXR0bGVtZW50RGVhZGxpbmUgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSkKICAgIGJ5dGVjIDE1IC8vICJzZXR0bGVtZW50RGVhZGxpbmUiCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyMjQKICAgIC8vIHRoaXMuc2V0dGxlbWVudERlYWRsaW5lLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjIyNy0yMzQKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHhmZXJBc3NldDogQXNzZXQodGhpcy5hc3NldElkLnZhbHVlKSwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAxLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyMjkKICAgIC8vIHhmZXJBc3NldDogQXNzZXQodGhpcy5hc3NldElkLnZhbHVlKSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo0NQogICAgLy8gYXNzZXRJZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgYnl0ZWMgNCAvLyAiYXNzZXRJZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjIyOQogICAgLy8geGZlckFzc2V0OiBBc3NldCh0aGlzLmFzc2V0SWQudmFsdWUpLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjIzMAogICAgLy8gYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjIzMQogICAgLy8gYXNzZXRBbW91bnQ6IDEsCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MjI3LTIzMwogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBBc3NldCh0aGlzLmFzc2V0SWQudmFsdWUpLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDEsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjIzMgogICAgLy8gZmVlOiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyMjctMjM0CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IEFzc2V0KHRoaXMuYXNzZXRJZC52YWx1ZSksCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBhc3NldEFtb3VudDogMSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjIzNy0yNDMKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiB0aGlzLnNlbGxlci52YWx1ZSwKICAgIC8vICAgICBhbW91bnQ6IHRoaXMuaGlnaGVzdEJpZC52YWx1ZSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MjM5CiAgICAvLyByZWNlaXZlcjogdGhpcy5zZWxsZXIudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHNlbGxlciA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KCkKICAgIGJ5dGVjIDYgLy8gInNlbGxlciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjIzOQogICAgLy8gcmVjZWl2ZXI6IHRoaXMuc2VsbGVyLnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjI0MAogICAgLy8gYW1vdW50OiB0aGlzLmhpZ2hlc3RCaWQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGhpZ2hlc3RCaWQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSkKICAgIGJ5dGVjIDUgLy8gImhpZ2hlc3RCaWQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyNDAKICAgIC8vIGFtb3VudDogdGhpcy5oaWdoZXN0QmlkLnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyMzctMjQyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogdGhpcy5zZWxsZXIudmFsdWUsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLmhpZ2hlc3RCaWQudmFsdWUsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjI0MQogICAgLy8gZmVlOiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyMzctMjQzCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogdGhpcy5zZWxsZXIudmFsdWUsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLmhpZ2hlc3RCaWQudmFsdWUsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoxOTgKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdOb09wJyB9KQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjpXaGlzcGVyQmlkLmNsYWltRGVmYXVsdGVkW3JvdXRpbmddKCkgLT4gdm9pZDoKY2xhaW1EZWZhdWx0ZWQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyNDkKICAgIC8vIHRoaXMudHJhbnNpdGlvblRvUmV2ZWFsKCkKICAgIGNhbGxzdWIgdHJhbnNpdGlvblRvUmV2ZWFsCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyNTAKICAgIC8vIHRoaXMudHJhbnNpdGlvblRvRW5kZWQoKQogICAgY2FsbHN1YiB0cmFuc2l0aW9uVG9FbmRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MjUzCiAgICAvLyBhc3NlcnQodGhpcy5waGFzZS52YWx1ZSA9PT0gUEhBU0VfRU5ERUQsICdBdWN0aW9uIGhhcyBub3QgZW5kZWQnKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBwaGFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NChQSEFTRV9PUEVOKSB9KQogICAgYnl0ZWNfMCAvLyAicGhhc2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyNTMKICAgIC8vIGFzc2VydCh0aGlzLnBoYXNlLnZhbHVlID09PSBQSEFTRV9FTkRFRCwgJ0F1Y3Rpb24gaGFzIG5vdCBlbmRlZCcpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaW50Y18yIC8vIDIKICAgID09CiAgICBhc3NlcnQgLy8gQXVjdGlvbiBoYXMgbm90IGVuZGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyNTQKICAgIC8vIGFzc2VydCh0aGlzLnNldHRsZWQudmFsdWUgPT09IDAsICdBbHJlYWR5IHNldHRsZWQnKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBzZXR0bGVkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pCiAgICBieXRlY18yIC8vICJzZXR0bGVkIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MjU0CiAgICAvLyBhc3NlcnQodGhpcy5zZXR0bGVkLnZhbHVlID09PSAwLCAnQWxyZWFkeSBzZXR0bGVkJykKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQgLy8gQWxyZWFkeSBzZXR0bGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyNTUKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLnNlbGxlci52YWx1ZSwgJ09ubHkgc2VsbGVyIGNhbiBjbGFpbSBkZWZhdWx0JykKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gc2VsbGVyID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oKQogICAgYnl0ZWMgNiAvLyAic2VsbGVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MjU1CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5zZWxsZXIudmFsdWUsICdPbmx5IHNlbGxlciBjYW4gY2xhaW0gZGVmYXVsdCcpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBPbmx5IHNlbGxlciBjYW4gY2xhaW0gZGVmYXVsdAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MjU3CiAgICAvLyBHbG9iYWwubGF0ZXN0VGltZXN0YW1wID49IHRoaXMucmV2ZWFsRW5kLnZhbHVlICsgU0VUVExFTUVOVF9XSU5ET1csCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHJldmVhbEVuZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKQogICAgYnl0ZWMgOSAvLyAicmV2ZWFsRW5kIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MjU3CiAgICAvLyBHbG9iYWwubGF0ZXN0VGltZXN0YW1wID49IHRoaXMucmV2ZWFsRW5kLnZhbHVlICsgU0VUVExFTUVOVF9XSU5ET1csCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgcHVzaGludCA4NjQwMCAvLyA4NjQwMAogICAgKwogICAgPj0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjI1Ni0yNTkKICAgIC8vIGFzc2VydCgKICAgIC8vICAgR2xvYmFsLmxhdGVzdFRpbWVzdGFtcCA+PSB0aGlzLnJldmVhbEVuZC52YWx1ZSArIFNFVFRMRU1FTlRfV0lORE9XLAogICAgLy8gICAnU2V0dGxlbWVudCB3aW5kb3cgbm90IGV4cGlyZWQnCiAgICAvLyApCiAgICBhc3NlcnQgLy8gU2V0dGxlbWVudCB3aW5kb3cgbm90IGV4cGlyZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjI2MgogICAgLy8gaWYgKHRoaXMuaGlnaGVzdEJpZGRlci5oYXNWYWx1ZSkgewogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyBoaWdoZXN0QmlkZGVyID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oKQogICAgYnl0ZWMgNyAvLyAiaGlnaGVzdEJpZGRlciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjI2MgogICAgLy8gaWYgKHRoaXMuaGlnaGVzdEJpZGRlci5oYXNWYWx1ZSkgewogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYnogY2xhaW1EZWZhdWx0ZWRfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIGNvbnN0IHdpbm5lckRlcG9zaXQgPSB0aGlzLmRlcG9zaXRzKHRoaXMuaGlnaGVzdEJpZGRlci52YWx1ZSkudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo1MgogICAgLy8gaGlnaGVzdEJpZGRlciA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KCkKICAgIGJ5dGVjIDcgLy8gImhpZ2hlc3RCaWRkZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIGNvbnN0IHdpbm5lckRlcG9zaXQgPSB0aGlzLmRlcG9zaXRzKHRoaXMuaGlnaGVzdEJpZGRlci52YWx1ZSkudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo1OQogICAgLy8gZGVwb3NpdHMgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2QnIH0pCiAgICBieXRlYyAxNCAvLyAiZCIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjI2MwogICAgLy8gY29uc3Qgd2lubmVyRGVwb3NpdCA9IHRoaXMuZGVwb3NpdHModGhpcy5oaWdoZXN0QmlkZGVyLnZhbHVlKS52YWx1ZQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjYwCiAgICAvLyBiaWRTdGF0dXMgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ3MnIH0pCiAgICBieXRlY18xIC8vICJzIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjI2NAogICAgLy8gdGhpcy5iaWRTdGF0dXModGhpcy5oaWdoZXN0QmlkZGVyLnZhbHVlKS52YWx1ZSA9IFVpbnQ2NChTVEFUVVNfU0xBU0hFRCkKICAgIHB1c2hpbnQgMyAvLyAzCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyNjYtMjcyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogdGhpcy5zZWxsZXIudmFsdWUsCiAgICAvLyAgICAgYW1vdW50OiB3aW5uZXJEZXBvc2l0LAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyNjgKICAgIC8vIHJlY2VpdmVyOiB0aGlzLnNlbGxlci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gc2VsbGVyID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oKQogICAgYnl0ZWMgNiAvLyAic2VsbGVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MjY4CiAgICAvLyByZWNlaXZlcjogdGhpcy5zZWxsZXIudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjI2Ni0yNzEKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiB0aGlzLnNlbGxlci52YWx1ZSwKICAgIC8vICAgICBhbW91bnQ6IHdpbm5lckRlcG9zaXQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjI3MAogICAgLy8gZmVlOiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyNjYtMjcyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogdGhpcy5zZWxsZXIudmFsdWUsCiAgICAvLyAgICAgYW1vdW50OiB3aW5uZXJEZXBvc2l0LAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAoKY2xhaW1EZWZhdWx0ZWRfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6Mjc2LTI4MwogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBBc3NldCh0aGlzLmFzc2V0SWQudmFsdWUpLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuc2VsbGVyLnZhbHVlLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAxLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyNzgKICAgIC8vIHhmZXJBc3NldDogQXNzZXQodGhpcy5hc3NldElkLnZhbHVlKSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo0NQogICAgLy8gYXNzZXRJZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgYnl0ZWMgNCAvLyAiYXNzZXRJZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjI3OAogICAgLy8geGZlckFzc2V0OiBBc3NldCh0aGlzLmFzc2V0SWQudmFsdWUpLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjI3OQogICAgLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5zZWxsZXIudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHNlbGxlciA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KCkKICAgIGJ5dGVjIDYgLy8gInNlbGxlciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjI3OQogICAgLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5zZWxsZXIudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MjgwCiAgICAvLyBhc3NldEFtb3VudDogMSwKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyNzYtMjgyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IEFzc2V0KHRoaXMuYXNzZXRJZC52YWx1ZSksCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5zZWxsZXIudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDEsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjI4MQogICAgLy8gZmVlOiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyNzYtMjgzCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IEFzc2V0KHRoaXMuYXNzZXRJZC52YWx1ZSksCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5zZWxsZXIudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDEsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo1NAogICAgLy8gc2V0dGxlZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgYnl0ZWNfMiAvLyAic2V0dGxlZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjI4NQogICAgLy8gdGhpcy5zZXR0bGVkLnZhbHVlID0gVWludDY0KDEpCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjI0NwogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ05vT3AnIH0pCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6OldoaXNwZXJCaWQud2l0aGRyYXdEZXBvc2l0W3JvdXRpbmddKCkgLT4gdm9pZDoKd2l0aGRyYXdEZXBvc2l0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MjkxCiAgICAvLyB0aGlzLnRyYW5zaXRpb25Ub1JldmVhbCgpCiAgICBjYWxsc3ViIHRyYW5zaXRpb25Ub1JldmVhbAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MjkyCiAgICAvLyB0aGlzLnRyYW5zaXRpb25Ub0VuZGVkKCkKICAgIGNhbGxzdWIgdHJhbnNpdGlvblRvRW5kZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjI5NQogICAgLy8gYXNzZXJ0KHRoaXMucGhhc2UudmFsdWUgPT09IFBIQVNFX0VOREVELCAnQXVjdGlvbiBoYXMgbm90IGVuZGVkJykKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo1MAogICAgLy8gcGhhc2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoUEhBU0VfT1BFTikgfSkKICAgIGJ5dGVjXzAgLy8gInBoYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6Mjk1CiAgICAvLyBhc3NlcnQodGhpcy5waGFzZS52YWx1ZSA9PT0gUEhBU0VfRU5ERUQsICdBdWN0aW9uIGhhcyBub3QgZW5kZWQnKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGludGNfMiAvLyAyCiAgICA9PQogICAgYXNzZXJ0IC8vIEF1Y3Rpb24gaGFzIG5vdCBlbmRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIGJpZFN0YXR1cyA9IEJveE1hcDxBY2NvdW50LCB1aW50NjQ+KHsga2V5UHJlZml4OiAncycgfSkKICAgIGJ5dGVjXzEgLy8gInMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyOTgKICAgIC8vIGFzc2VydCh0aGlzLmJpZFN0YXR1cyhUeG4uc2VuZGVyKS5leGlzdHMsICdObyBiaWQgZm91bmQnKQogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIGJpZFN0YXR1cyA9IEJveE1hcDxBY2NvdW50LCB1aW50NjQ+KHsga2V5UHJlZml4OiAncycgfSkKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6Mjk4CiAgICAvLyBhc3NlcnQodGhpcy5iaWRTdGF0dXMoVHhuLnNlbmRlcikuZXhpc3RzLCAnTm8gYmlkIGZvdW5kJykKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIE5vIGJpZCBmb3VuZAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIGJpZFN0YXR1cyA9IEJveE1hcDxBY2NvdW50LCB1aW50NjQ+KHsga2V5UHJlZml4OiAncycgfSkKICAgIGJ5dGVjXzEgLy8gInMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyOTkKICAgIC8vIGFzc2VydCh0aGlzLmJpZFN0YXR1cyhUeG4uc2VuZGVyKS52YWx1ZSA9PT0gU1RBVFVTX1JFVkVBTEVELCAnQmlkIG5vdCBpbiByZXZlYWxlZCBzdGF0ZScpCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo2MAogICAgLy8gYmlkU3RhdHVzID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdzJyB9KQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyOTkKICAgIC8vIGFzc2VydCh0aGlzLmJpZFN0YXR1cyhUeG4uc2VuZGVyKS52YWx1ZSA9PT0gU1RBVFVTX1JFVkVBTEVELCAnQmlkIG5vdCBpbiByZXZlYWxlZCBzdGF0ZScpCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgYnRvaQogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gQmlkIG5vdCBpbiByZXZlYWxlZCBzdGF0ZQogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MzAyCiAgICAvLyBpZiAodGhpcy5oaWdoZXN0QmlkZGVyLmhhc1ZhbHVlKSB7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NTIKICAgIC8vIGhpZ2hlc3RCaWRkZXIgPSBHbG9iYWxTdGF0ZTxBY2NvdW50PigpCiAgICBieXRlYyA3IC8vICJoaWdoZXN0QmlkZGVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MzAyCiAgICAvLyBpZiAodGhpcy5oaWdoZXN0QmlkZGVyLmhhc1ZhbHVlKSB7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYnVyeSAxCiAgICBieiB3aXRoZHJhd0RlcG9zaXRfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czozMDMKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyICE9PSB0aGlzLmhpZ2hlc3RCaWRkZXIudmFsdWUsICdXaW5uZXIgbXVzdCB1c2Ugc2V0dGxlKCknKQogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyBoaWdoZXN0QmlkZGVyID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oKQogICAgYnl0ZWMgNyAvLyAiaGlnaGVzdEJpZGRlciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgIT09IHRoaXMuaGlnaGVzdEJpZGRlci52YWx1ZSwgJ1dpbm5lciBtdXN0IHVzZSBzZXR0bGUoKScpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgIT0KICAgIGFzc2VydCAvLyBXaW5uZXIgbXVzdCB1c2Ugc2V0dGxlKCkKCndpdGhkcmF3RGVwb3NpdF9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo1OQogICAgLy8gZGVwb3NpdHMgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2QnIH0pCiAgICBieXRlYyAxNCAvLyAiZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjMwNwogICAgLy8gY29uc3QgZGVwb3NpdEFtb3VudCA9IHRoaXMuZGVwb3NpdHMoVHhuLnNlbmRlcikudmFsdWUKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjU5CiAgICAvLyBkZXBvc2l0cyA9IEJveE1hcDxBY2NvdW50LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZCcgfSkKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MzA3CiAgICAvLyBjb25zdCBkZXBvc2l0QW1vdW50ID0gdGhpcy5kZXBvc2l0cyhUeG4uc2VuZGVyKS52YWx1ZQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjYwCiAgICAvLyBiaWRTdGF0dXMgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ3MnIH0pCiAgICBieXRlY18xIC8vICJzIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MzA4CiAgICAvLyB0aGlzLmJpZFN0YXR1cyhUeG4uc2VuZGVyKS52YWx1ZSA9IFVpbnQ2NChTVEFUVVNfV0lUSERSQVdOKQogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIGJpZFN0YXR1cyA9IEJveE1hcDxBY2NvdW50LCB1aW50NjQ+KHsga2V5UHJlZml4OiAncycgfSkKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MzA4CiAgICAvLyB0aGlzLmJpZFN0YXR1cyhUeG4uc2VuZGVyKS52YWx1ZSA9IFVpbnQ2NChTVEFUVVNfV0lUSERSQVdOKQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjMxMC0zMTYKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGFtb3VudDogZGVwb3NpdEFtb3VudCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MzEyCiAgICAvLyByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czozMTAtMzE1CiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBhbW91bnQ6IGRlcG9zaXRBbW91bnQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjMxNAogICAgLy8gZmVlOiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czozMTAtMzE2CiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBhbW91bnQ6IGRlcG9zaXRBbW91bnQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czoyODkKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdOb09wJyB9KQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjpXaGlzcGVyQmlkLmNhbmNlbEF1Y3Rpb25bcm91dGluZ10oKSAtPiB2b2lkOgpjYW5jZWxBdWN0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MzIzCiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5zZWxsZXIudmFsdWUsICdPbmx5IHNlbGxlciBjYW4gY2FuY2VsJykKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gc2VsbGVyID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oKQogICAgYnl0ZWMgNiAvLyAic2VsbGVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MzIzCiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5zZWxsZXIudmFsdWUsICdPbmx5IHNlbGxlciBjYW4gY2FuY2VsJykKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBzd2FwCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydCAvLyBPbmx5IHNlbGxlciBjYW4gY2FuY2VsCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czozMjQKICAgIC8vIGFzc2VydCh0aGlzLnNldHRsZWQudmFsdWUgPT09IDAsICdBbHJlYWR5IHNldHRsZWQnKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBzZXR0bGVkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pCiAgICBieXRlY18yIC8vICJzZXR0bGVkIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MzI0CiAgICAvLyBhc3NlcnQodGhpcy5zZXR0bGVkLnZhbHVlID09PSAwLCAnQWxyZWFkeSBzZXR0bGVkJykKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQgLy8gQWxyZWFkeSBzZXR0bGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czozMjUKICAgIC8vIGFzc2VydCh0aGlzLmJpZENvdW50LnZhbHVlID09PSAwLCAnQ2Fubm90IGNhbmNlbDogYmlkcyBleGlzdCcpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NTMKICAgIC8vIGJpZENvdW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pCiAgICBieXRlYyA4IC8vICJiaWRDb3VudCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjMyNQogICAgLy8gYXNzZXJ0KHRoaXMuYmlkQ291bnQudmFsdWUgPT09IDAsICdDYW5ub3QgY2FuY2VsOiBiaWRzIGV4aXN0JykKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQgLy8gQ2Fubm90IGNhbmNlbDogYmlkcyBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MzI4LTMzNQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBBc3NldCh0aGlzLmFzc2V0SWQudmFsdWUpLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuc2VsbGVyLnZhbHVlLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAxLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czozMzAKICAgIC8vIHhmZXJBc3NldDogQXNzZXQodGhpcy5hc3NldElkLnZhbHVlKSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo0NQogICAgLy8gYXNzZXRJZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgYnl0ZWMgNCAvLyAiYXNzZXRJZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjMzMAogICAgLy8geGZlckFzc2V0OiBBc3NldCh0aGlzLmFzc2V0SWQudmFsdWUpLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjMzMgogICAgLy8gYXNzZXRBbW91bnQ6IDEsCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MzI4LTMzNAogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBBc3NldCh0aGlzLmFzc2V0SWQudmFsdWUpLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuc2VsbGVyLnZhbHVlLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAxLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czozMzMKICAgIC8vIGZlZTogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MzI4LTMzNQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBBc3NldCh0aGlzLmFzc2V0SWQudmFsdWUpLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuc2VsbGVyLnZhbHVlLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAxLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIHNldHRsZWQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSkKICAgIGJ5dGVjXzIgLy8gInNldHRsZWQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czozMzcKICAgIC8vIHRoaXMuc2V0dGxlZC52YWx1ZSA9IFVpbnQ2NCgxKQogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo1MAogICAgLy8gcGhhc2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoUEhBU0VfT1BFTikgfSkKICAgIGJ5dGVjXzAgLy8gInBoYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MzM4CiAgICAvLyB0aGlzLnBoYXNlLnZhbHVlID0gVWludDY0KFBIQVNFX0VOREVEKQogICAgaW50Y18yIC8vIDIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czozMjAKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdOb09wJyB9KQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjpXaGlzcGVyQmlkLmdldFBoYXNlW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0UGhhc2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czozNDQKICAgIC8vIHJldHVybiB0aGlzLnBoYXNlLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NTAKICAgIC8vIHBoYXNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KFBIQVNFX09QRU4pIH0pCiAgICBieXRlY18wIC8vICJwaGFzZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjM0NAogICAgLy8gcmV0dXJuIHRoaXMucGhhc2UudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czozNDIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgaXRvYgogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjpXaGlzcGVyQmlkLmdldEhpZ2hlc3RCaWRbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRIaWdoZXN0QmlkOgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MzQ5CiAgICAvLyByZXR1cm4gdGhpcy5oaWdoZXN0QmlkLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGhpZ2hlc3RCaWQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSkKICAgIGJ5dGVjIDUgLy8gImhpZ2hlc3RCaWQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czozNDkKICAgIC8vIHJldHVybiB0aGlzLmhpZ2hlc3RCaWQudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czozNDcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgaXRvYgogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjpXaGlzcGVyQmlkLmdldEJpZENvdW50W3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0QmlkQ291bnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czozNTQKICAgIC8vIHJldHVybiB0aGlzLmJpZENvdW50LnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NTMKICAgIC8vIGJpZENvdW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pCiAgICBieXRlYyA4IC8vICJiaWRDb3VudCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjM1NAogICAgLy8gcmV0dXJuIHRoaXMuYmlkQ291bnQudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czozNTIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgaXRvYgogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjpXaGlzcGVyQmlkLmdldEF1Y3Rpb25FbmRbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRBdWN0aW9uRW5kOgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MzU5CiAgICAvLyByZXR1cm4gdGhpcy5hdWN0aW9uRW5kLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGF1Y3Rpb25FbmQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkKICAgIGJ5dGVjIDEwIC8vICJhdWN0aW9uRW5kIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MzU5CiAgICAvLyByZXR1cm4gdGhpcy5hdWN0aW9uRW5kLnZhbHVlCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MzU3CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGl0b2IKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo6V2hpc3BlckJpZC5nZXRSZXZlYWxFbmRbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRSZXZlYWxFbmQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czozNjQKICAgIC8vIHJldHVybiB0aGlzLnJldmVhbEVuZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXZlYWxFbmQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkKICAgIGJ5dGVjIDkgLy8gInJldmVhbEVuZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjM2NAogICAgLy8gcmV0dXJuIHRoaXMucmV2ZWFsRW5kLnZhbHVlCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6MzYyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGl0b2IKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo6V2hpc3BlckJpZC5nZXRGbG9vclByaWNlW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0Rmxvb3JQcmljZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gcmV0dXJuIHRoaXMuZmxvb3JQcmljZS52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBmbG9vclByaWNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBieXRlYyAxMiAvLyAiZmxvb3JQcmljZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gcmV0dXJuIHRoaXMuZmxvb3JQcmljZS52YWx1ZQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjM2NwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBpdG9iCiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6OldoaXNwZXJCaWQuZ2V0RGVwb3NpdFBlbmFsdHlbcm91dGluZ10oKSAtPiB2b2lkOgpnZXREZXBvc2l0UGVuYWx0eToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjM3NAogICAgLy8gcmV0dXJuIHRoaXMuZGVwb3NpdFBlbmFsdHkudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gZGVwb3NpdFBlbmFsdHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkKICAgIGJ5dGVjIDEzIC8vICJkZXBvc2l0UGVuYWx0eSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjM3NAogICAgLy8gcmV0dXJuIHRoaXMuZGVwb3NpdFBlbmFsdHkudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czozNzIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgaXRvYgogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjpXaGlzcGVyQmlkLnRyYW5zaXRpb25Ub1JldmVhbCgpIC0+IHZvaWQ6CnRyYW5zaXRpb25Ub1JldmVhbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjY1CiAgICAvLyBpZiAodGhpcy5waGFzZS52YWx1ZSA9PT0gUEhBU0VfT1BFTiAmJiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wID49IHRoaXMuYXVjdGlvbkVuZC52YWx1ZSkgewogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBwaGFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NChQSEFTRV9PUEVOKSB9KQogICAgYnl0ZWNfMCAvLyAicGhhc2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo2NQogICAgLy8gaWYgKHRoaXMucGhhc2UudmFsdWUgPT09IFBIQVNFX09QRU4gJiYgR2xvYmFsLmxhdGVzdFRpbWVzdGFtcCA+PSB0aGlzLmF1Y3Rpb25FbmQudmFsdWUpIHsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBibnogdHJhbnNpdGlvblRvUmV2ZWFsX2FmdGVyX2lmX2Vsc2VAMwogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBhdWN0aW9uRW5kID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBieXRlYyAxMCAvLyAiYXVjdGlvbkVuZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjY1CiAgICAvLyBpZiAodGhpcy5waGFzZS52YWx1ZSA9PT0gUEhBU0VfT1BFTiAmJiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wID49IHRoaXMuYXVjdGlvbkVuZC52YWx1ZSkgewogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID49CiAgICBieiB0cmFuc2l0aW9uVG9SZXZlYWxfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo1MAogICAgLy8gcGhhc2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoUEhBU0VfT1BFTikgfSkKICAgIGJ5dGVjXzAgLy8gInBoYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIHRoaXMucGhhc2UudmFsdWUgPSBVaW50NjQoUEhBU0VfUkVWRUFMKQogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0Cgp0cmFuc2l0aW9uVG9SZXZlYWxfYWZ0ZXJfaWZfZWxzZUAzOgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6OldoaXNwZXJCaWQudHJhbnNpdGlvblRvRW5kZWQoKSAtPiB2b2lkOgp0cmFuc2l0aW9uVG9FbmRlZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjcxCiAgICAvLyBpZiAodGhpcy5waGFzZS52YWx1ZSA9PT0gUEhBU0VfUkVWRUFMICYmIEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAgPj0gdGhpcy5yZXZlYWxFbmQudmFsdWUpIHsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo1MAogICAgLy8gcGhhc2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoUEhBU0VfT1BFTikgfSkKICAgIGJ5dGVjXzAgLy8gInBoYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NzEKICAgIC8vIGlmICh0aGlzLnBoYXNlLnZhbHVlID09PSBQSEFTRV9SRVZFQUwgJiYgR2xvYmFsLmxhdGVzdFRpbWVzdGFtcCA+PSB0aGlzLnJldmVhbEVuZC52YWx1ZSkgewogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYnogdHJhbnNpdGlvblRvRW5kZWRfYWZ0ZXJfaWZfZWxzZUAzCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHJldmVhbEVuZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKQogICAgYnl0ZWMgOSAvLyAicmV2ZWFsRW5kIgogICAgLy8gc21hcnRfY29udHJhY3RzL3doaXNwZXJfYmlkL2NvbnRyYWN0LmFsZ28udHM6NzEKICAgIC8vIGlmICh0aGlzLnBoYXNlLnZhbHVlID09PSBQSEFTRV9SRVZFQUwgJiYgR2xvYmFsLmxhdGVzdFRpbWVzdGFtcCA+PSB0aGlzLnJldmVhbEVuZC52YWx1ZSkgewogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID49CiAgICBieiB0cmFuc2l0aW9uVG9FbmRlZF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy93aGlzcGVyX2JpZC9jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBwaGFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NChQSEFTRV9PUEVOKSB9KQogICAgYnl0ZWNfMCAvLyAicGhhc2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvd2hpc3Blcl9iaWQvY29udHJhY3QuYWxnby50czo3MgogICAgLy8gdGhpcy5waGFzZS52YWx1ZSA9IFVpbnQ2NChQSEFTRV9FTkRFRCkKICAgIGludGNfMiAvLyAyCiAgICBhcHBfZ2xvYmFsX3B1dAoKdHJhbnNpdGlvblRvRW5kZWRfYWZ0ZXJfaWZfZWxzZUAzOgogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAAECCCYQBXBoYXNlAXMHc2V0dGxlZAQVH3x1B2Fzc2V0SWQKaGlnaGVzdEJpZAZzZWxsZXINaGlnaGVzdEJpZGRlcghiaWRDb3VudAlyZXZlYWxFbmQKYXVjdGlvbkVuZAFjCmZsb29yUHJpY2UOZGVwb3NpdFBlbmFsdHkBZBJzZXR0bGVtZW50RGVhZGxpbmUxGEAAFicEImcoImcnBSJnJwgiZyoiZycPImcxGRREMRhBAGqCDgRoJbMVBEg7NKIEBpdkggR8PCsMBNSf6OcEJ38MGATsJcrSBHszLfQE5aLbEwT7q1quBLHs2FEE0XaSdATfG6YlBOSn59c2GgCODgARAJQBEwGTAhECiQLaAxADGwMnAzMDPwNLA1cAgARMXGG6NhoAjgEAAQAjQzYaAUkVJRJEFzYaAkkVJRJEFzYaA0kVJRJEFzYaBEkVJRJEFzYaBUkVJRJEFzEAMgkSRCInBGVEFERLA0RLAkRLAURJRCcGMQBnJwRLBWcnDE8EZycNTwNnMgdLAggnCkxnMgdPAggIJwlMZygiZ7EyCiKyErIUshGBBLIQIrIBsyNDNhoBSSJZJAhLARUSRFcCAIgCvCIoZUQURDIHIicKZUQMREkVgSASRCcLMQBQvUUBFEQxFkQxFiMJSTgQIxJESTgAMQASREk4BzIKEkQ4CCInDWVESwEORCcLMQBQSbxITwK/Jw4xAFBMFr8pMQBQIha/IicIZUQjCCcITGcjQzYaAUkVJRJEF0k2GgJJIlkkCEsBFRJEVwIAiAIziAJGIihlRCMSRDIHIicJZUQMRCcLMQBQvUUBRCkxAFC+RBcUREsBFklPAlABJwsxAFC+RBJEIicMZURLAg5EKTEAUCMWv4ABcjEAUEy/IicFZUQNQQAKJwVLAWcnBzEAZyNDiAHNiAHgIihlRCQSRCIqZUQURCInB2VEMQASRDEWRDEWIwlJOBAjEkRJOAAxABJESTgHMgoSRDgIIicFZUQSRCojZykxAFAkFr8nDzIHZ7EiJwRlRDEAI7ISshSyEYEEshAisgGzsSInBmVEIicFZUSyCLIHI7IQIrIBsyNDiAFPiAFiIihlRCQSRCIqZUQURDEAIicGZUQSRDIHIicJZUSBgKMFCA9EIicHZUUBQQAmIicHZUQnDksBUL5EFylPAlCBAxa/sSInBmVEsgeyCCOyECKyAbOxIicEZUQiJwZlRCOyErIUshGBBLIQIrIBsyojZyNDiADXiADqIihlRCQSRCkxAFC9RQFEKTEAUL5EFyMSRCInB2VFAUEACTEAIicHZUQTRCcOMQBQvkQXKTEAUIEEFr+xMQCyB7III7IQIrIBsyNDMQAiJwZlRExLARJEIiplRBREIicIZUQURLEiJwRlRCOyErIRshSBBLIQIrIBsyojZygkZyNDIihlRBYrTFCwI0MiJwVlRBYrTFCwI0MiJwhlRBYrTFCwI0MiJwplRBYrTFCwI0MiJwllRBYrTFCwI0MiJwxlRBYrTFCwI0MiJw1lRBYrTFCwI0MiKGVEQAAOMgciJwplRA9BAAMoI2eJIihlRCMSQQAOMgciJwllRA9BAAMoJGeJ", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 3, "patch": 2 } }, "events": [], "templateVariables": {} }