{ "name": "PaymentRouter", "structs": {}, "methods": [ { "name": "createApplication", "args": [ { "type": "address", "name": "payTo" }, { "type": "uint64", "name": "usdcAsset" } ], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "setCrediter", "args": [ { "type": "address", "name": "addr" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "setIdentity", "args": [ { "type": "string", "name": "identity" }, { "type": "address", "name": "addr" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "credit", "args": [ { "type": "uint64", "name": "batchSeq" }, { "type": "uint64", "name": "attributedTotal" }, { "type": "uint64", "name": "unattributedTotal" }, { "type": "(string,string,uint64)[]", "name": "entries" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "claim", "args": [ { "type": "string", "name": "identity" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "releaseAuthority", "args": [ { "type": "address", "name": "to" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 3, "bytes": 2 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "payTo": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "cHRv" }, "assetId": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YXN0" }, "crediter": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "Y3Jk" }, "lastBatchSeq": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YnNx" }, "creditedUnclaimed": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Y3J1" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "identityAddress": { "keyType": "AVMString", "valueType": "AVMBytes", "prefix": "aWQ6" }, "balances": { "keyType": "AVMString", "valueType": "uint64", "prefix": "YmFsOg==" } } } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 571, 612, 696 ], "errorMessage": "Box must have value" }, { "pc": [ 49 ], "errorMessage": "OnCompletion must be NoOp" }, { "pc": [ 463 ], "errorMessage": "account opted into asset" }, { "pc": [ 152, 188, 774 ], "errorMessage": "admin only" }, { "pc": [ 704 ], "errorMessage": "balance below MIN_CLAIM" }, { "pc": [ 492 ], "errorMessage": "batch total exceeds the unallocated balance" }, { "pc": [ 371 ], "errorMessage": "batchSeq must follow the last credited batch" }, { "pc": [ 351, 365, 452, 456, 475, 719, 729, 733, 778 ], "errorMessage": "check GlobalState exists" }, { "pc": [ 448 ], "errorMessage": "entries must sum to attributedTotal x 400 / 1000" }, { "pc": [ 408, 526 ], "errorMessage": "index access is out of bounds" }, { "pc": [ 272 ], "errorMessage": "invalid array encoding" }, { "pc": [ 164, 242, 303, 323, 655 ], "errorMessage": "invalid array length header" }, { "pc": [ 171, 662 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 344 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 119, 146, 182, 768 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 128, 215, 225, 235 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 295 ], "errorMessage": "invalid tail pointer at index 0 of ((len+utf8[]),(len+utf8[]),uint64)" }, { "pc": [ 315 ], "errorMessage": "invalid tail pointer at index 1 of ((len+utf8[]),(len+utf8[]),uint64)" }, { "pc": [ 280 ], "errorMessage": "invalid tail pointer for (len+((len+utf8[]),(len+utf8[]),uint64)[])" }, { "pc": [ 290, 310 ], "errorMessage": "invalid tuple encoding" }, { "pc": [ 353 ], "errorMessage": "not crediter" }, { "pc": [ 682 ], "errorMessage": "not the mapped address" }, { "pc": [ 711 ], "errorMessage": "outer fee must pool the inner fee" }, { "pc": [ 675 ], "errorMessage": "unmapped identity" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAyIDEgMzIKICAgIGJ5dGVjYmxvY2sgImNydSIgInB0byIgImFzdCIgImJzcSIgImJhbDpvcHMiICJjcmQiICJpZDoiICJiYWw6IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIGV4cG9ydCBjbGFzcyBQYXltZW50Um91dGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBieiBtYWluX2NyZWF0ZV9Ob09wQDkKICAgIHB1c2hieXRlc3MgMHgzZjFmYmEwMSAweGI2NWU1MjM2IDB4YjJiYjg2Y2UgMHgwMzIzNzQzOCAweDczZDBhYWU5IC8vIG1ldGhvZCAic2V0Q3JlZGl0ZXIoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJzZXRJZGVudGl0eShzdHJpbmcsYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJjcmVkaXQodWludDY0LHVpbnQ2NCx1aW50NjQsKHN0cmluZyxzdHJpbmcsdWludDY0KVtdKXZvaWQiLCBtZXRob2QgImNsYWltKHN0cmluZyl2b2lkIiwgbWV0aG9kICJyZWxlYXNlQXV0aG9yaXR5KGFkZHJlc3Mpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIHNldENyZWRpdGVyIHNldElkZW50aXR5IGNyZWRpdCBjbGFpbSByZWxlYXNlQXV0aG9yaXR5CiAgICBlcnIKCm1haW5fY3JlYXRlX05vT3BAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBleHBvcnQgY2xhc3MgUGF5bWVudFJvdXRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHB1c2hieXRlcyAweGNkMTlmMWE2IC8vIG1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oYWRkcmVzcyx1aW50NjQpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGNyZWF0ZUFwcGxpY2F0aW9uCiAgICBlcnIKCgovLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo6UGF5bWVudFJvdXRlci5jcmVhdGVBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZUFwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6NjgKICAgIC8vIHB1YmxpYyBjcmVhdGVBcHBsaWNhdGlvbihwYXlUbzogQWNjb3VudCwgdXNkY0Fzc2V0OiBBc3NldCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gcGF5VG8gPSBHbG9iYWxTdGF0ZTxieXRlcz4oeyBrZXk6ICdwdG8nIH0pCiAgICBieXRlY18xIC8vICJwdG8iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo2OQogICAgLy8gdGhpcy5wYXlUby52YWx1ZSA9IHBheVRvLmJ5dGVzCiAgICB1bmNvdmVyIDIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo0NQogICAgLy8gYXNzZXRJZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdhc3QnIH0pCiAgICBieXRlY18yIC8vICJhc3QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo3MAogICAgLy8gdGhpcy5hc3NldElkLnZhbHVlID0gdXNkY0Fzc2V0LmlkCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6NjgKICAgIC8vIHB1YmxpYyBjcmVhdGVBcHBsaWNhdGlvbihwYXlUbzogQWNjb3VudCwgdXNkY0Fzc2V0OiBBc3NldCk6IHZvaWQgewogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjpQYXltZW50Um91dGVyLnNldENyZWRpdGVyW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0Q3JlZGl0ZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo3NAogICAgLy8gcHVibGljIHNldENyZWRpdGVyKGFkZHI6IEFjY291bnQpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6NzUKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyLmJ5dGVzID09PSBHbG9iYWwuY3JlYXRvckFkZHJlc3MuYnl0ZXMsICdhZG1pbiBvbmx5JykKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBhZG1pbiBvbmx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo0OAogICAgLy8gY3JlZGl0ZXIgPSBHbG9iYWxTdGF0ZTxieXRlcz4oeyBrZXk6ICdjcmQnIH0pCiAgICBieXRlYyA1IC8vICJjcmQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gdGhpcy5jcmVkaXRlci52YWx1ZSA9IGFkZHIuYnl0ZXMKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo3NAogICAgLy8gcHVibGljIHNldENyZWRpdGVyKGFkZHI6IEFjY291bnQpOiB2b2lkIHsKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo6UGF5bWVudFJvdXRlci5zZXRJZGVudGl0eVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldElkZW50aXR5OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6ODEKICAgIC8vIHB1YmxpYyBzZXRJZGVudGl0eShpZGVudGl0eTogc3RyaW5nLCBhZGRyOiBBY2NvdW50KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzEgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIuYnl0ZXMgPT09IEdsb2JhbC5jcmVhdG9yQWRkcmVzcy5ieXRlcywgJ2FkbWluIG9ubHknKQogICAgdHhuIFNlbmRlcgogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIGFkbWluIG9ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjU5CiAgICAvLyBpZGVudGl0eUFkZHJlc3MgPSBCb3hNYXA8c3RyaW5nLCBieXRlcz4oeyBrZXlQcmVmaXg6ICdpZDonIH0pCiAgICBieXRlYyA2IC8vICJpZDoiCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6ODMKICAgIC8vIHRoaXMuaWRlbnRpdHlBZGRyZXNzKGlkZW50aXR5KS52YWx1ZSA9IGFkZHIuYnl0ZXMKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo4MQogICAgLy8gcHVibGljIHNldElkZW50aXR5KGlkZW50aXR5OiBzdHJpbmcsIGFkZHI6IEFjY291bnQpOiB2b2lkIHsKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo6UGF5bWVudFJvdXRlci5jcmVkaXRbcm91dGluZ10oKSAtPiB2b2lkOgpjcmVkaXQ6CiAgICBpbnRjXzAgLy8gMAogICAgZHVwCiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cG4gNgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6ODktOTQKICAgIC8vIHB1YmxpYyBjcmVkaXQoCiAgICAvLyAgIGJhdGNoU2VxOiB1aW50NjQsCiAgICAvLyAgIGF0dHJpYnV0ZWRUb3RhbDogdWludDY0LAogICAgLy8gICB1bmF0dHJpYnV0ZWRUb3RhbDogdWludDY0LAogICAgLy8gICBlbnRyaWVzOiBDcmVkaXRFbnRyeVtdLAogICAgLy8gKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMSAvLyAyCiAgICAqCiAgICBzd2FwCiAgICBkdXAKICAgIGxlbgogICAgc3dhcAogICAgZXh0cmFjdCAyIDAKICAgIGludGNfMCAvLyAwCgpjcmVkaXRfZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6ODktOTQKICAgIC8vIHB1YmxpYyBjcmVkaXQoCiAgICAvLyAgIGJhdGNoU2VxOiB1aW50NjQsCiAgICAvLyAgIGF0dHJpYnV0ZWRUb3RhbDogdWludDY0LAogICAgLy8gICB1bmF0dHJpYnV0ZWRUb3RhbDogdWludDY0LAogICAgLy8gICBlbnRyaWVzOiBDcmVkaXRFbnRyeVtdLAogICAgLy8gKTogdm9pZCB7CiAgICBkdXAKICAgIGRpZyA1CiAgICA8CiAgICBieiBjcmVkaXRfYWZ0ZXJfZm9yQDQKICAgIGR1cG4gMgogICAgaW50Y18xIC8vIDIKICAgICoKICAgIGRpZyAzCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgZW5jb2RpbmcKICAgIGR1cAogICAgZGlnIDcKICAgIGR1cAogICAgY292ZXIgNAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBmb3IgKGxlbisoKGxlbit1dGY4W10pLChsZW4rdXRmOFtdKSx1aW50NjQpW10pCiAgICBkaWcgMQogICAgbGVuCiAgICBzdWJzdHJpbmczCiAgICBkdXAKICAgIGxlbgogICAgZGlnIDEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCB0dXBsZSBlbmNvZGluZwogICAgZHVwCiAgICBwdXNoaW50IDEyIC8vIDEyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGF0IGluZGV4IDAgb2YgKChsZW4rdXRmOFtdKSwobGVuK3V0ZjhbXSksdWludDY0KQogICAgZGlnIDIKICAgIHN3YXAKICAgIGRpZyAyCiAgICBzdWJzdHJpbmczCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAxNCAvLyAxNAogICAgKwogICAgZGlnIDIKICAgIGludGNfMSAvLyAyCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCB0dXBsZSBlbmNvZGluZwogICAgZHVwCiAgICBkaWcgMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAxIG9mICgobGVuK3V0ZjhbXSksKGxlbit1dGY4W10pLHVpbnQ2NCkKICAgIHVuY292ZXIgMwogICAgc3dhcAogICAgdW5jb3ZlciAzCiAgICBzdWJzdHJpbmczCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18xIC8vIDIKICAgICsKICAgICsKICAgICsKICAgIGJ1cnkgNQogICAgaW50Y18yIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBjcmVkaXRfZm9yX2hlYWRlckAxCgpjcmVkaXRfYWZ0ZXJfZm9yQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo4OS05NAogICAgLy8gcHVibGljIGNyZWRpdCgKICAgIC8vICAgYmF0Y2hTZXE6IHVpbnQ2NCwKICAgIC8vICAgYXR0cmlidXRlZFRvdGFsOiB1aW50NjQsCiAgICAvLyAgIHVuYXR0cmlidXRlZFRvdGFsOiB1aW50NjQsCiAgICAvLyAgIGVudHJpZXM6IENyZWRpdEVudHJ5W10sCiAgICAvLyApOiB2b2lkIHsKICAgIGRpZyAzCiAgICBpbnRjXzEgLy8gMgogICAgKwogICAgZGlnIDMKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo6Q3JlZGl0RW50cnk+CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo5NQogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuY3JlZGl0ZXIudmFsdWUsICdub3QgY3JlZGl0ZXInKQogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBjcmVkaXRlciA9IEdsb2JhbFN0YXRlPGJ5dGVzPih7IGtleTogJ2NyZCcgfSkKICAgIGJ5dGVjIDUgLy8gImNyZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjk1CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5jcmVkaXRlci52YWx1ZSwgJ25vdCBjcmVkaXRlcicpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBub3QgY3JlZGl0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjk3CiAgICAvLyBjb25zdCBsYXN0OiB1aW50NjQgPSB0aGlzLmxhc3RCYXRjaFNlcS5oYXNWYWx1ZSA/IHRoaXMubGFzdEJhdGNoU2VxLnZhbHVlIDogVWludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6NTIKICAgIC8vIGxhc3RCYXRjaFNlcSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdic3EnIH0pCiAgICBieXRlY18zIC8vICJic3EiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo5NwogICAgLy8gY29uc3QgbGFzdDogdWludDY0ID0gdGhpcy5sYXN0QmF0Y2hTZXEuaGFzVmFsdWUgPyB0aGlzLmxhc3RCYXRjaFNlcS52YWx1ZSA6IFVpbnQ2NCgwKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYnogY3JlZGl0X3Rlcm5hcnlfZmFsc2VANwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyBsYXN0QmF0Y2hTZXEgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnYnNxJyB9KQogICAgYnl0ZWNfMyAvLyAiYnNxIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6OTcKICAgIC8vIGNvbnN0IGxhc3Q6IHVpbnQ2NCA9IHRoaXMubGFzdEJhdGNoU2VxLmhhc1ZhbHVlID8gdGhpcy5sYXN0QmF0Y2hTZXEudmFsdWUgOiBVaW50NjQoMCkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCgpjcmVkaXRfdGVybmFyeV9tZXJnZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6OTgKICAgIC8vIGFzc2VydChiYXRjaFNlcSA9PT0gbGFzdCArIFVpbnQ2NCgxKSwgJ2JhdGNoU2VxIG11c3QgZm9sbG93IHRoZSBsYXN0IGNyZWRpdGVkIGJhdGNoJykKICAgIGludGNfMiAvLyAxCiAgICArCiAgICBkaWcgOAogICAgPT0KICAgIGFzc2VydCAvLyBiYXRjaFNlcSBtdXN0IGZvbGxvdyB0aGUgbGFzdCBjcmVkaXRlZCBiYXRjaAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTAwCiAgICAvLyBsZXQgZW50cmllc1RvdGFsOiB1aW50NjQgPSBVaW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDEzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMDEKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IFVpbnQ2NCgwKTsgaSA8IGVudHJpZXMubGVuZ3RoOyBpID0gaSArIFVpbnQ2NCgxKSkgewogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgMTEKCmNyZWRpdF93aGlsZV90b3BAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjEwMQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gVWludDY0KDApOyBpIDwgZW50cmllcy5sZW5ndGg7IGkgPSBpICsgVWludDY0KDEpKSB7CiAgICBkaWcgMTAKICAgIGRpZyA1CiAgICA8CiAgICBieiBjcmVkaXRfYWZ0ZXJfd2hpbGVAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjEwMgogICAgLy8gZW50cmllc1RvdGFsID0gZW50cmllc1RvdGFsICsgZW50cmllc1tpXS5hbW91bnQKICAgIGRpZyAxMAogICAgZHVwCiAgICBpbnRjXzEgLy8gMgogICAgKgogICAgZGlnIDMKICAgIGR1cAogICAgY292ZXIgMwogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGludGNfMiAvLyAxCiAgICArCiAgICBkdXAKICAgIGJ1cnkgMTQKICAgIGRpZyA3CiAgICBkaWcgMQogICAgLSAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGRpZyAzCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgaW50Y18xIC8vIDIKICAgICoKICAgIGRpZyA0CiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIHN1YnN0cmluZzMKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDEzCiAgICArCiAgICBidXJ5IDEzCiAgICBiIGNyZWRpdF93aGlsZV90b3BAOQoKY3JlZGl0X2FmdGVyX3doaWxlQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTA0CiAgICAvLyBjb25zdCBhdWRpdG9yU2hhcmU6IHVpbnQ2NCA9IChhdHRyaWJ1dGVkVG90YWwgKiBBVURJVE9SX1NIQVJFX05VTSkgLyBTUExJVF9ERU4KICAgIGRpZyA2CiAgICBwdXNoaW50IDQwMCAvLyA0MDAKICAgICoKICAgIHB1c2hpbnQgMTAwMCAvLyAxMDAwCiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMDUKICAgIC8vIGFzc2VydChlbnRyaWVzVG90YWwgPT09IGF1ZGl0b3JTaGFyZSwgJ2VudHJpZXMgbXVzdCBzdW0gdG8gYXR0cmlidXRlZFRvdGFsIHggNDAwIC8gMTAwMCcpCiAgICBkaWcgMTMKICAgID09CiAgICBhc3NlcnQgLy8gZW50cmllcyBtdXN0IHN1bSB0byBhdHRyaWJ1dGVkVG90YWwgeCA0MDAgLyAxMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMDcKICAgIC8vIGNvbnN0IGFzc2V0ID0gQXNzZXQodGhpcy5hc3NldElkLnZhbHVlKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBhc3NldElkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogJ2FzdCcgfSkKICAgIGJ5dGVjXzIgLy8gImFzdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjEwNwogICAgLy8gY29uc3QgYXNzZXQgPSBBc3NldCh0aGlzLmFzc2V0SWQudmFsdWUpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTA4CiAgICAvLyBjb25zdCBwYXlUb0FjY3QgPSBBY2NvdW50KHRoaXMucGF5VG8udmFsdWUpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHBheVRvID0gR2xvYmFsU3RhdGU8Ynl0ZXM+KHsga2V5OiAncHRvJyB9KQogICAgYnl0ZWNfMSAvLyAicHRvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTA4CiAgICAvLyBjb25zdCBwYXlUb0FjY3QgPSBBY2NvdW50KHRoaXMucGF5VG8udmFsdWUpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTA5CiAgICAvLyBjb25zdCBoZWxkOiB1aW50NjQgPSBhc3NldC5iYWxhbmNlKHBheVRvQWNjdCkKICAgIHN3YXAKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgc3dhcAogICAgYnVyeSAxMwogICAgYXNzZXJ0IC8vIGFjY291bnQgb3B0ZWQgaW50byBhc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTEwCiAgICAvLyBjb25zdCBhbHJlYWR5Q3JlZGl0ZWQ6IHVpbnQ2NCA9IHRoaXMuY3JlZGl0ZWRVbmNsYWltZWQuaGFzVmFsdWUKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo1NgogICAgLy8gY3JlZGl0ZWRVbmNsYWltZWQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnY3J1JyB9KQogICAgYnl0ZWNfMCAvLyAiY3J1IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTEwCiAgICAvLyBjb25zdCBhbHJlYWR5Q3JlZGl0ZWQ6IHVpbnQ2NCA9IHRoaXMuY3JlZGl0ZWRVbmNsYWltZWQuaGFzVmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjExMC0xMTIKICAgIC8vIGNvbnN0IGFscmVhZHlDcmVkaXRlZDogdWludDY0ID0gdGhpcy5jcmVkaXRlZFVuY2xhaW1lZC5oYXNWYWx1ZQogICAgLy8gICA/IHRoaXMuY3JlZGl0ZWRVbmNsYWltZWQudmFsdWUKICAgIC8vICAgOiBVaW50NjQoMCkKICAgIGJ6IGNyZWRpdF90ZXJuYXJ5X2ZhbHNlQDEzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMTEKICAgIC8vID8gdGhpcy5jcmVkaXRlZFVuY2xhaW1lZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBjcmVkaXRlZFVuY2xhaW1lZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdjcnUnIH0pCiAgICBieXRlY18wIC8vICJjcnUiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMTEKICAgIC8vID8gdGhpcy5jcmVkaXRlZFVuY2xhaW1lZC52YWx1ZQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGJ1cnkgMTUKCmNyZWRpdF90ZXJuYXJ5X21lcmdlQDE0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTEzCiAgICAvLyBjb25zdCB1bmFsbG9jYXRlZDogdWludDY0ID0gaGVsZCAtIGFscmVhZHlDcmVkaXRlZAogICAgZGlnIDExCiAgICBkaWcgMTUKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjExNAogICAgLy8gY29uc3QgYmF0Y2hUb3RhbDogdWludDY0ID0gYXR0cmlidXRlZFRvdGFsICsgdW5hdHRyaWJ1dGVkVG90YWwKICAgIGRpZyA3CiAgICBkaWcgNwogICAgKwogICAgZHVwCiAgICBidXJ5IDE2CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMTUKICAgIC8vIGFzc2VydChiYXRjaFRvdGFsIDw9IHVuYWxsb2NhdGVkLCAnYmF0Y2ggdG90YWwgZXhjZWVkcyB0aGUgdW5hbGxvY2F0ZWQgYmFsYW5jZScpCiAgICA+PQogICAgYXNzZXJ0IC8vIGJhdGNoIHRvdGFsIGV4Y2VlZHMgdGhlIHVuYWxsb2NhdGVkIGJhbGFuY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjEyMAogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gVWludDY0KDApOyBpIDwgZW50cmllcy5sZW5ndGg7IGkgPSBpICsgVWludDY0KDEpKSB7CiAgICBpbnRjXzAgLy8gMAogICAgYnVyeSAxMAoKY3JlZGl0X3doaWxlX3RvcEAxNToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjEyMAogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gVWludDY0KDApOyBpIDwgZW50cmllcy5sZW5ndGg7IGkgPSBpICsgVWludDY0KDEpKSB7CiAgICBkaWcgOQogICAgZGlnIDUKICAgIDwKICAgIGJ6IGNyZWRpdF9hZnRlcl93aGlsZUAyMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTIxCiAgICAvLyBjb25zdCBpZGVudGl0eSA9IGVudHJpZXNbaV0uaWRlbnRpdHkKICAgIGRpZyA5CiAgICBkdXAKICAgIGludGNfMSAvLyAyCiAgICAqCiAgICBkaWcgMwogICAgZHVwCiAgICBjb3ZlciAzCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgc3dhcAogICAgaW50Y18yIC8vIDEKICAgICsKICAgIGR1cAogICAgYnVyeSAxMwogICAgZGlnIDcKICAgIGRpZyAxCiAgICAtIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDMKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICBpbnRjXzEgLy8gMgogICAgKgogICAgZGlnIDQKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgc3Vic3RyaW5nMwogICAgZHVwCiAgICBidXJ5IDE4CiAgICBkdXAKICAgIGludGNfMSAvLyAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIGxlbgogICAgc3Vic3RyaW5nMwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjY0CiAgICAvLyBiYWxhbmNlcyA9IEJveE1hcDxzdHJpbmcsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdiYWw6JyB9KQogICAgYnl0ZWMgNyAvLyAiYmFsOiIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBidXJ5IDE3CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMjIKICAgIC8vIGNvbnN0IGN1cnJlbnQ6IHVpbnQ2NCA9IHRoaXMuYmFsYW5jZXMoaWRlbnRpdHkpLmV4aXN0cwogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMjItMTI0CiAgICAvLyBjb25zdCBjdXJyZW50OiB1aW50NjQgPSB0aGlzLmJhbGFuY2VzKGlkZW50aXR5KS5leGlzdHMKICAgIC8vICAgPyB0aGlzLmJhbGFuY2VzKGlkZW50aXR5KS52YWx1ZQogICAgLy8gICA6IFVpbnQ2NCgwKQogICAgYnogY3JlZGl0X3Rlcm5hcnlfZmFsc2VAMTgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjEyMwogICAgLy8gPyB0aGlzLmJhbGFuY2VzKGlkZW50aXR5KS52YWx1ZQogICAgZGlnIDE1CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgYnRvaQoKY3JlZGl0X3Rlcm5hcnlfbWVyZ2VAMTk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMjUKICAgIC8vIHRoaXMuYmFsYW5jZXMoaWRlbnRpdHkpLnZhbHVlID0gY3VycmVudCArIGVudHJpZXNbaV0uYW1vdW50CiAgICBkaWcgMTcKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBleHRyYWN0X3VpbnQ2NAogICAgKwogICAgaXRvYgogICAgZGlnIDE2CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICBiIGNyZWRpdF93aGlsZV90b3BAMTUKCmNyZWRpdF90ZXJuYXJ5X2ZhbHNlQDE4OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTI0CiAgICAvLyA6IFVpbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGIgY3JlZGl0X3Rlcm5hcnlfbWVyZ2VAMTkKCmNyZWRpdF9hZnRlcl93aGlsZUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjEyOAogICAgLy8gY29uc3Qgb3BzQW1vdW50OiB1aW50NjQgPSBhdHRyaWJ1dGVkVG90YWwgLSBlbnRyaWVzVG90YWwgKyB1bmF0dHJpYnV0ZWRUb3RhbAogICAgZGlnIDYKICAgIGRpZyAxMwogICAgLQogICAgZGlnIDYKICAgICsKICAgIGJ1cnkgOQogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIGJhbGFuY2VzID0gQm94TWFwPHN0cmluZywgdWludDY0Pih7IGtleVByZWZpeDogJ2JhbDonIH0pCiAgICBieXRlYyA0IC8vICJiYWw6b3BzIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTI5CiAgICAvLyBjb25zdCBvcHNDdXJyZW50OiB1aW50NjQgPSB0aGlzLmJhbGFuY2VzKE9QU19JREVOVElUWSkuZXhpc3RzCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjEyOS0xMzEKICAgIC8vIGNvbnN0IG9wc0N1cnJlbnQ6IHVpbnQ2NCA9IHRoaXMuYmFsYW5jZXMoT1BTX0lERU5USVRZKS5leGlzdHMKICAgIC8vICAgPyB0aGlzLmJhbGFuY2VzKE9QU19JREVOVElUWSkudmFsdWUKICAgIC8vICAgOiBVaW50NjQoMCkKICAgIGJ6IGNyZWRpdF90ZXJuYXJ5X2ZhbHNlQDIyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo2NAogICAgLy8gYmFsYW5jZXMgPSBCb3hNYXA8c3RyaW5nLCB1aW50NjQ+KHsga2V5UHJlZml4OiAnYmFsOicgfSkKICAgIGJ5dGVjIDQgLy8gImJhbDpvcHMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vID8gdGhpcy5iYWxhbmNlcyhPUFNfSURFTlRJVFkpLnZhbHVlCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgYnRvaQoKY3JlZGl0X3Rlcm5hcnlfbWVyZ2VAMjM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMzIKICAgIC8vIHRoaXMuYmFsYW5jZXMoT1BTX0lERU5USVRZKS52YWx1ZSA9IG9wc0N1cnJlbnQgKyBvcHNBbW91bnQKICAgIGRpZyA5CiAgICArCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo2NAogICAgLy8gYmFsYW5jZXMgPSBCb3hNYXA8c3RyaW5nLCB1aW50NjQ+KHsga2V5UHJlZml4OiAnYmFsOicgfSkKICAgIGJ5dGVjIDQgLy8gImJhbDpvcHMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMzIKICAgIC8vIHRoaXMuYmFsYW5jZXMoT1BTX0lERU5USVRZKS52YWx1ZSA9IG9wc0N1cnJlbnQgKyBvcHNBbW91bnQKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjEzNAogICAgLy8gdGhpcy5jcmVkaXRlZFVuY2xhaW1lZC52YWx1ZSA9IGFscmVhZHlDcmVkaXRlZCArIGJhdGNoVG90YWwKICAgIGRpZyAxNAogICAgZGlnIDE0CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo1NgogICAgLy8gY3JlZGl0ZWRVbmNsYWltZWQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnY3J1JyB9KQogICAgYnl0ZWNfMCAvLyAiY3J1IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTM0CiAgICAvLyB0aGlzLmNyZWRpdGVkVW5jbGFpbWVkLnZhbHVlID0gYWxyZWFkeUNyZWRpdGVkICsgYmF0Y2hUb3RhbAogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyBsYXN0QmF0Y2hTZXEgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnYnNxJyB9KQogICAgYnl0ZWNfMyAvLyAiYnNxIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTM1CiAgICAvLyB0aGlzLmxhc3RCYXRjaFNlcS52YWx1ZSA9IGJhdGNoU2VxCiAgICBkaWcgOAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjg5LTk0CiAgICAvLyBwdWJsaWMgY3JlZGl0KAogICAgLy8gICBiYXRjaFNlcTogdWludDY0LAogICAgLy8gICBhdHRyaWJ1dGVkVG90YWw6IHVpbnQ2NCwKICAgIC8vICAgdW5hdHRyaWJ1dGVkVG90YWw6IHVpbnQ2NCwKICAgIC8vICAgZW50cmllczogQ3JlZGl0RW50cnlbXSwKICAgIC8vICk6IHZvaWQgewogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKY3JlZGl0X3Rlcm5hcnlfZmFsc2VAMjI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMzEKICAgIC8vIDogVWludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgYiBjcmVkaXRfdGVybmFyeV9tZXJnZUAyMwoKY3JlZGl0X3Rlcm5hcnlfZmFsc2VAMTM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMTIKICAgIC8vIDogVWludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgYnVyeSAxNQogICAgYiBjcmVkaXRfdGVybmFyeV9tZXJnZUAxNAoKY3JlZGl0X3Rlcm5hcnlfZmFsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjk3CiAgICAvLyBjb25zdCBsYXN0OiB1aW50NjQgPSB0aGlzLmxhc3RCYXRjaFNlcS5oYXNWYWx1ZSA/IHRoaXMubGFzdEJhdGNoU2VxLnZhbHVlIDogVWludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgYiBjcmVkaXRfdGVybmFyeV9tZXJnZUA4CgoKLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6OlBheW1lbnRSb3V0ZXIuY2xhaW1bcm91dGluZ10oKSAtPiB2b2lkOgpjbGFpbToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE0MgogICAgLy8gcHVibGljIGNsYWltKGlkZW50aXR5OiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMSAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo1OQogICAgLy8gaWRlbnRpdHlBZGRyZXNzID0gQm94TWFwPHN0cmluZywgYnl0ZXM+KHsga2V5UHJlZml4OiAnaWQ6JyB9KQogICAgYnl0ZWMgNiAvLyAiaWQ6IgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTQzCiAgICAvLyBhc3NlcnQodGhpcy5pZGVudGl0eUFkZHJlc3MoaWRlbnRpdHkpLmV4aXN0cywgJ3VubWFwcGVkIGlkZW50aXR5JykKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gdW5tYXBwZWQgaWRlbnRpdHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE0NAogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuaWRlbnRpdHlBZGRyZXNzKGlkZW50aXR5KS52YWx1ZSwgJ25vdCB0aGUgbWFwcGVkIGFkZHJlc3MnKQogICAgdHhuIFNlbmRlcgogICAgc3dhcAogICAgYm94X2dldAogICAgcG9wCiAgICA9PQogICAgYXNzZXJ0IC8vIG5vdCB0aGUgbWFwcGVkIGFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjY0CiAgICAvLyBiYWxhbmNlcyA9IEJveE1hcDxzdHJpbmcsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdiYWw6JyB9KQogICAgYnl0ZWMgNyAvLyAiYmFsOiIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxNDYKICAgIC8vIGNvbnN0IGJhbGFuY2U6IHVpbnQ2NCA9IHRoaXMuYmFsYW5jZXMoaWRlbnRpdHkpLmV4aXN0cwogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxNDYtMTQ4CiAgICAvLyBjb25zdCBiYWxhbmNlOiB1aW50NjQgPSB0aGlzLmJhbGFuY2VzKGlkZW50aXR5KS5leGlzdHMKICAgIC8vICAgPyB0aGlzLmJhbGFuY2VzKGlkZW50aXR5KS52YWx1ZQogICAgLy8gICA6IFVpbnQ2NCgwKQogICAgYnogY2xhaW1fdGVybmFyeV9mYWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxNDcKICAgIC8vID8gdGhpcy5iYWxhbmNlcyhpZGVudGl0eSkudmFsdWUKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKCmNsYWltX3Rlcm5hcnlfbWVyZ2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE0OQogICAgLy8gYXNzZXJ0KGJhbGFuY2UgPj0gTUlOX0NMQUlNLCAnYmFsYW5jZSBiZWxvdyBNSU5fQ0xBSU0nKQogICAgZHVwCiAgICBwdXNoaW50IDEwMDAwMCAvLyAxMDAwMDAKICAgID49CiAgICBhc3NlcnQgLy8gYmFsYW5jZSBiZWxvdyBNSU5fQ0xBSU0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE1MAogICAgLy8gYXNzZXJ0KFR4bi5mZWUgPj0gTUlOX0NMQUlNX0ZFRSwgJ291dGVyIGZlZSBtdXN0IHBvb2wgdGhlIGlubmVyIGZlZScpCiAgICB0eG4gRmVlCiAgICBwdXNoaW50IDIwMDAgLy8gMjAwMAogICAgPj0KICAgIGFzc2VydCAvLyBvdXRlciBmZWUgbXVzdCBwb29sIHRoZSBpbm5lciBmZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE1MgogICAgLy8gdGhpcy5iYWxhbmNlcyhpZGVudGl0eSkuZGVsZXRlKCkKICAgIGRpZyAxCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE1MwogICAgLy8gdGhpcy5jcmVkaXRlZFVuY2xhaW1lZC52YWx1ZSA9IHRoaXMuY3JlZGl0ZWRVbmNsYWltZWQudmFsdWUgLSBiYWxhbmNlCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIGNyZWRpdGVkVW5jbGFpbWVkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogJ2NydScgfSkKICAgIGJ5dGVjXzAgLy8gImNydSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE1MwogICAgLy8gdGhpcy5jcmVkaXRlZFVuY2xhaW1lZC52YWx1ZSA9IHRoaXMuY3JlZGl0ZWRVbmNsYWltZWQudmFsdWUgLSBiYWxhbmNlCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDEKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBjcmVkaXRlZFVuY2xhaW1lZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdjcnUnIH0pCiAgICBieXRlY18wIC8vICJjcnUiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxNTMKICAgIC8vIHRoaXMuY3JlZGl0ZWRVbmNsYWltZWQudmFsdWUgPSB0aGlzLmNyZWRpdGVkVW5jbGFpbWVkLnZhbHVlIC0gYmFsYW5jZQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE1NQogICAgLy8gY29uc3QgYXNzZXQgPSBBc3NldCh0aGlzLmFzc2V0SWQudmFsdWUpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6NDUKICAgIC8vIGFzc2V0SWQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnYXN0JyB9KQogICAgYnl0ZWNfMiAvLyAiYXN0IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTU1CiAgICAvLyBjb25zdCBhc3NldCA9IEFzc2V0KHRoaXMuYXNzZXRJZC52YWx1ZSkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxNTYKICAgIC8vIGNvbnN0IHBheVRvQWNjdCA9IEFjY291bnQodGhpcy5wYXlUby52YWx1ZSkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gcGF5VG8gPSBHbG9iYWxTdGF0ZTxieXRlcz4oeyBrZXk6ICdwdG8nIH0pCiAgICBieXRlY18xIC8vICJwdG8iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxNTYKICAgIC8vIGNvbnN0IHBheVRvQWNjdCA9IEFjY291bnQodGhpcy5wYXlUby52YWx1ZSkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxNTctMTY1CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBzZW5kZXI6IHBheVRvQWNjdCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGJhbGFuY2UsCiAgICAvLyAgICAgZmVlOiBVaW50NjQoMCksCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTYxCiAgICAvLyBhc3NldFJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgdW5jb3ZlciAzCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTU3LTE2NAogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgc2VuZGVyOiBwYXlUb0FjY3QsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiBiYWxhbmNlLAogICAgLy8gICAgIGZlZTogVWludDY0KDApLAogICAgLy8gICB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gZmVlOiBVaW50NjQoMCksCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE1Ny0xNjUKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHNlbmRlcjogcGF5VG9BY2N0LAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBhc3NldEFtb3VudDogYmFsYW5jZSwKICAgIC8vICAgICBmZWU6IFVpbnQ2NCgwKSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTQyCiAgICAvLyBwdWJsaWMgY2xhaW0oaWRlbnRpdHk6IHN0cmluZyk6IHZvaWQgewogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKY2xhaW1fdGVybmFyeV9mYWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTQ4CiAgICAvLyA6IFVpbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGIgY2xhaW1fdGVybmFyeV9tZXJnZUA0CgoKLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6OlBheW1lbnRSb3V0ZXIucmVsZWFzZUF1dGhvcml0eVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlbGVhc2VBdXRob3JpdHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxNzAKICAgIC8vIHB1YmxpYyByZWxlYXNlQXV0aG9yaXR5KHRvOiBBY2NvdW50KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE3MQogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIuYnl0ZXMgPT09IEdsb2JhbC5jcmVhdG9yQWRkcmVzcy5ieXRlcywgJ2FkbWluIG9ubHknKQogICAgdHhuIFNlbmRlcgogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIGFkbWluIG9ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gY29uc3QgcGF5VG9BY2N0ID0gQWNjb3VudCh0aGlzLnBheVRvLnZhbHVlKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyBwYXlUbyA9IEdsb2JhbFN0YXRlPGJ5dGVzPih7IGtleTogJ3B0bycgfSkKICAgIGJ5dGVjXzEgLy8gInB0byIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gY29uc3QgcGF5VG9BY2N0ID0gQWNjb3VudCh0aGlzLnBheVRvLnZhbHVlKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE3My0xODEKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogcGF5VG9BY2N0LAogICAgLy8gICAgIHJlY2VpdmVyOiBwYXlUb0FjY3QsCiAgICAvLyAgICAgYW1vdW50OiBVaW50NjQoMCksCiAgICAvLyAgICAgcmVrZXlUbzogdG8sCiAgICAvLyAgICAgZmVlOiBVaW50NjQoMCksCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgc3dhcAogICAgaXR4bl9maWVsZCBSZWtleVRvCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxNzcKICAgIC8vIGFtb3VudDogVWludDY0KDApLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBkdXAKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxNzMtMTgwCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHBheVRvQWNjdCwKICAgIC8vICAgICByZWNlaXZlcjogcGF5VG9BY2N0LAogICAgLy8gICAgIGFtb3VudDogVWludDY0KDApLAogICAgLy8gICAgIHJla2V5VG86IHRvLAogICAgLy8gICAgIGZlZTogVWludDY0KDApLAogICAgLy8gICB9KQogICAgaW50Y18yIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE3OQogICAgLy8gZmVlOiBVaW50NjQoMCksCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE3My0xODEKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogcGF5VG9BY2N0LAogICAgLy8gICAgIHJlY2VpdmVyOiBwYXlUb0FjY3QsCiAgICAvLyAgICAgYW1vdW50OiBVaW50NjQoMCksCiAgICAvLyAgICAgcmVrZXlUbzogdG8sCiAgICAvLyAgICAgZmVlOiBVaW50NjQoMCksCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE3MAogICAgLy8gcHVibGljIHJlbGVhc2VBdXRob3JpdHkodG86IEFjY291bnQpOiB2b2lkIHsKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4K", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAAIBICYIA2NydQNwdG8DYXN0A2JzcQdiYWw6b3BzA2NyZANpZDoEYmFsOjEZFEQxGEEAK4IFBD8fugEEtl5SNgSyu4bOBAMjdDgEc9Cq6TYaAI4FACoAPgBoAikCmACABM0Z8aY2GgCOAQABADYaAUkVJRJENhoCSRWBCBJEFylPAmcqTGckQzYaAUkVJRJEMQAyCRJEJwVMZyRDNhoBSSJZIwhLARUSRFcCADYaAkkVJRJEMQAyCRJEJwZPAlBJvEhMvyRDIkmAAEcGNhoBSRWBCBJEFzYaAkkVgQgSRBc2GgNJFYEIEkQXNhoESSJZSU4CIwtMSRVMVwIAIklLBQxBAEpHAiMLSwNJTwJZSUsHSU4EEkRLARVSSRVLASJZSYEMEkRLAkxLAlIiWYEOCEsCI1lJSwISRE8DTE8DUiJZIwgICEUFJAhFAUL/r0sDIwhLAxJEMQAiJwVlRBJEIitlRQFBARwiK2VEJAhLCBJEIkUNIkULSwpLBQxBADFLCkkjC0sDSU4DTFlMJAhJRQ5LB0sBCUsDFU8CIwtLBExZTwJNUoEEW0sNCEUNQv/HSwaBkAMLgegHCksNEkQiKmVEIillRExwAExFDUQiKGVFAUEAqCIoZURFD0sLSw8JSwdLBwhJRRAPRCJFCksJSwUMQQBXSwlJIwtLA0lOA0xZTCQISUUNSwdLAQlLAxVPAiMLSwRMWU8CTVJJRRJJI1lLARVSVwIAJwdMUElFEb1FAUEAE0sPvkQXSxGBBFsIFksQTL9C/6UiQv/uSwZLDQlLBghFCScEvUUBQQAbJwS+RBdLCQgWJwRMv0sOSw4IKExnK0sIZyRDIkL/5iJFD0L/WCJC/uQ2GgFJIlkjCEsBFRJEVwIAJwZLAVBJvUUBRDEATL5IEkQnB0xQSb1FAUEAP0m+RBdJgaCNBg9EMQGB0A8PREsBvEgiKGVESwEJKExnIiplRCIpZUSxMQBPA7ISshSyALIRgQSyECKyAbMkQyJC/8E2GgFJFSUSRDEAMgkSRCIpZUSxTLIgIrIISbIHsgAkshAisgGzJEM=", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 3, "patch": 2 } }, "events": [], "templateVariables": {} }