{ "name": "MarketFactory", "structs": {}, "methods": [ { "name": "create", "args": [ { "type": "uint64", "name": "protocol_config_id" } ], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "noop", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "No-op for box IO budget pooling in transaction groups.", "events": [], "recommendations": {} }, { "name": "create_program_box", "args": [ { "type": "byte[]", "name": "box_key" }, { "type": "uint64", "name": "size" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Create or recreate a program box with the given size. Creator-only.", "events": [], "recommendations": {} }, { "name": "write_program_chunk", "args": [ { "type": "byte[]", "name": "box_key" }, { "type": "uint64", "name": "offset" }, { "type": "byte[]", "name": "data" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Write a chunk of bytecode to a program box at the given offset. Creator-only.", "events": [], "recommendations": {} }, { "name": "opt_into_asset", "args": [ { "type": "uint64", "name": "asset" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Opt factory into a currency ASA so it can receive and forward deposits. Creator-only.", "events": [], "recommendations": {} }, { "name": "create_market", "args": [ { "type": "uint64", "name": "currency_asa" }, { "type": "byte[]", "name": "question_hash" }, { "type": "uint64", "name": "num_outcomes" }, { "type": "uint64", "name": "initial_liquidity_b" }, { "type": "uint64", "name": "lp_fee_bps" }, { "type": "byte[]", "name": "blueprint_cid" }, { "type": "uint64", "name": "deadline" }, { "type": "uint64", "name": "challenge_window_secs" }, { "type": "address", "name": "market_admin" }, { "type": "uint64", "name": "grace_period_secs" }, { "type": "bool", "name": "cancellable" }, { "type": "uint64", "name": "lp_entry_max_price_fp" }, { "type": "uint64", "name": "deposit_amount" }, { "type": "pay", "name": "algo_funding" }, { "type": "axfer", "name": "usdc_funding" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "desc": "Factory for atomic market deployment.\n\n Stores QuestionMarket approval/clear programs in boxes.\n Creates markets via arc4_create with compiled bytecode from boxes.\n ", "networks": {}, "state": { "schema": { "global": { "ints": 1, "bytes": 0 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "protocol_config_id": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cGNp" } }, "local": {}, "box": { "approval_program_box": { "keyType": "AVMBytes", "valueType": "AVMBytes", "key": "YXA=" }, "clear_program_box": { "keyType": "AVMBytes", "valueType": "AVMBytes", "key": "Y3A=" } } }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 961 ], "errorMessage": "application exists" }, { "pc": [ 844 ], "errorMessage": "check self.clear_program_box exists" }, { "pc": [ 543 ], "errorMessage": "check self.protocol_config_id exists" }, { "pc": [ 112, 164, 185, 273, 320 ], "errorMessage": "invalid array length header" }, { "pc": [ 380 ], "errorMessage": "invalid number of bytes for arc4.bool" }, { "pc": [ 119, 171, 192, 279, 326 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 359 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 98, 129, 179, 222, 264, 290, 300, 311, 337, 348, 370, 390, 401 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 422 ], "errorMessage": "transaction type is axfer" }, { "pc": [ 411 ], "errorMessage": "transaction type is pay" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDggMSAyIDQwOTYgMTAwMDAgODE5MgogICAgYnl0ZWNibG9jayAweDYxNzAgMHggInBjaSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weTo3MQogICAgLy8gY2xhc3MgTWFya2V0RmFjdG9yeShBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAxMQogICAgcHVzaGJ5dGVzcyAweGU4M2E4N2FiIDB4NTZhYjA3YzEgMHg4YTVjMDVjZiAweGQ4ZjYyZDlhIDB4ZTcxNWU2MTQgLy8gbWV0aG9kICJub29wKCl2b2lkIiwgbWV0aG9kICJjcmVhdGVfcHJvZ3JhbV9ib3goYnl0ZVtdLHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJ3cml0ZV9wcm9ncmFtX2NodW5rKGJ5dGVbXSx1aW50NjQsYnl0ZVtdKXZvaWQiLCBtZXRob2QgIm9wdF9pbnRvX2Fzc2V0KHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJjcmVhdGVfbWFya2V0KHVpbnQ2NCxieXRlW10sdWludDY0LHVpbnQ2NCx1aW50NjQsYnl0ZVtdLHVpbnQ2NCx1aW50NjQsYWRkcmVzcyx1aW50NjQsYm9vbCx1aW50NjQsdWludDY0LHBheSxheGZlcil1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX25vb3Bfcm91dGVANSBjcmVhdGVfcHJvZ3JhbV9ib3ggd3JpdGVfcHJvZ3JhbV9jaHVuayBvcHRfaW50b19hc3NldCBjcmVhdGVfbWFya2V0CiAgICBlcnIKCm1haW5fbm9vcF9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjEyNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCm1haW5fY3JlYXRlX05vT3BAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6NzEKICAgIC8vIGNsYXNzIE1hcmtldEZhY3RvcnkoQVJDNENvbnRyYWN0KToKICAgIHB1c2hieXRlcyAweDI0MGQyZjY3IC8vIG1ldGhvZCAiY3JlYXRlKHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggY3JlYXRlCiAgICBlcnIKCgovLyBzbWFydF9jb250cmFjdHMubWFya2V0X2ZhY3RvcnkuY29udHJhY3QuTWFya2V0RmFjdG9yeS5jcmVhdGVbcm91dGluZ10oKSAtPiB2b2lkOgpjcmVhdGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MTIwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToxMjIKICAgIC8vIGFzc2VydCBwcm90b2NvbF9jb25maWdfaWQuYXNfdWludDY0KCkgPiBVSW50NjQoMCkKICAgIGJ0b2kKICAgIGR1cAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MTIzCiAgICAvLyBzZWxmLnByb3RvY29sX2NvbmZpZ19pZC52YWx1ZSA9IHByb3RvY29sX2NvbmZpZ19pZC5hc191aW50NjQoKQogICAgYnl0ZWNfMiAvLyAicGNpIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToxMjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChjcmVhdGU9InJlcXVpcmUiKQogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5tYXJrZXRfZmFjdG9yeS5jb250cmFjdC5NYXJrZXRGYWN0b3J5LmNyZWF0ZV9wcm9ncmFtX2JveFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZV9wcm9ncmFtX2JveDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToxMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MTMzCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBHbG9iYWwuY3JlYXRvcl9hZGRyZXNzCiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToxMzQKICAgIC8vIGtleSA9IGJveF9rZXkubmF0aXZlCiAgICBleHRyYWN0IDIgMAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MTM1CiAgICAvLyBfZXhpc3RlZCwgX3ZhbCA9IG9wLkJveC5nZXQoa2V5KQogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MTM2CiAgICAvLyBpZiBfZXhpc3RlZDoKICAgIGxlbgogICAgYnogY3JlYXRlX3Byb2dyYW1fYm94X2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjEzNwogICAgLy8gb3AuQm94LmRlbGV0ZShrZXkpCiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAoKY3JlYXRlX3Byb2dyYW1fYm94X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToxMzgKICAgIC8vIG9wLkJveC5jcmVhdGUoa2V5LCBzaXplLmFzX3VpbnQ2NCgpKQogICAgZGlnIDEKICAgIGJ0b2kKICAgIGRpZyAxCiAgICBzd2FwCiAgICBib3hfY3JlYXRlCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToxMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLm1hcmtldF9mYWN0b3J5LmNvbnRyYWN0Lk1hcmtldEZhY3Rvcnkud3JpdGVfcHJvZ3JhbV9jaHVua1tyb3V0aW5nXSgpIC0+IHZvaWQ6CndyaXRlX3Byb2dyYW1fY2h1bms6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MTQwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18zIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18zIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjE0MwogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gR2xvYmFsLmNyZWF0b3JfYWRkcmVzcwogICAgdHhuIFNlbmRlcgogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MTQ0CiAgICAvLyBvcC5Cb3gucmVwbGFjZShib3hfa2V5Lm5hdGl2ZSwgb2Zmc2V0LmFzX3VpbnQ2NCgpLCBkYXRhLm5hdGl2ZSkKICAgIHVuY292ZXIgMgogICAgZXh0cmFjdCAyIDAKICAgIHVuY292ZXIgMgogICAgYnRvaQogICAgdW5jb3ZlciAyCiAgICBleHRyYWN0IDIgMAogICAgYm94X3JlcGxhY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToxNDAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLm1hcmtldF9mYWN0b3J5LmNvbnRyYWN0Lk1hcmtldEZhY3Rvcnkub3B0X2ludG9fYXNzZXRbcm91dGluZ10oKSAtPiB2b2lkOgpvcHRfaW50b19hc3NldDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToxNDYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MTQ5CiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBHbG9iYWwuY3JlYXRvcl9hZGRyZXNzCiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToxNTAtMTU1CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1Bc3NldChhc3NldC5hc191aW50NjQoKSksCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBhc3NldF9hbW91bnQ9MCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToxNTEKICAgIC8vIHhmZXJfYXNzZXQ9QXNzZXQoYXNzZXQuYXNfdWludDY0KCkpLAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjE1MgogICAgLy8gYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MTUzCiAgICAvLyBhc3NldF9hbW91bnQ9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MTUwCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToxNTQKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MTUwLTE1NQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9QXNzZXQoYXNzZXQuYXNfdWludDY0KCkpLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PTAsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjE0NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMubWFya2V0X2ZhY3RvcnkuY29udHJhY3QuTWFya2V0RmFjdG9yeS5jcmVhdGVfbWFya2V0W3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlX21hcmtldDoKICAgIGludGNfMCAvLyAwCiAgICBkdXBuIDIKICAgIGJ5dGVjXzEgLy8gIiIKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjE1NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18zIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgY292ZXIgMwogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIGR1cAogICAgY292ZXIgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNgogICAgZHVwCiAgICBjb3ZlciA0CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDcKICAgIGR1cAogICAgY292ZXIgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOAogICAgZHVwCiAgICBjb3ZlciA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA5CiAgICBkdXAKICAgIGNvdmVyIDYKICAgIGxlbgogICAgcHVzaGludCAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxMAogICAgZHVwCiAgICBjb3ZlciA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxMQogICAgZHVwCiAgICBjb3ZlciA3CiAgICBsZW4KICAgIGludGNfMiAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEyCiAgICBkdXAKICAgIGNvdmVyIDcKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxMwogICAgZHVwCiAgICBjb3ZlciA3CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18zIC8vIDIKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMiAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzIgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgcHVzaGludCA0IC8vIGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToxNzYtMTc3CiAgICAvLyAjIFZhbGlkYXRlIEFMR08gZnVuZGluZwogICAgLy8gYXNzZXJ0IGFsZ29fZnVuZGluZy5zZW5kZXIgPT0gVHhuLnNlbmRlcgogICAgZGlnIDEKICAgIGd0eG5zIFNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjE3OAogICAgLy8gYXNzZXJ0IGFsZ29fZnVuZGluZy5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkaWcgMQogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MTc5CiAgICAvLyBhc3NlcnQgYWxnb19mdW5kaW5nLmFtb3VudCA9PSBDUkVBVEVfTUFSS0VUX01JTl9GVU5ESU5HCiAgICBkaWcgMQogICAgZ3R4bnMgQW1vdW50CiAgICBkdXAKICAgIGNvdmVyIDEwCiAgICBwdXNoaW50IDI5OTY1MDAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToxODAKICAgIC8vIGFzc2VydCBhbGdvX2Z1bmRpbmcucmVrZXlfdG8gPT0gR2xvYmFsLnplcm9fYWRkcmVzcwogICAgZGlnIDEKICAgIGd0eG5zIFJla2V5VG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjE4MQogICAgLy8gYXNzZXJ0IGFsZ29fZnVuZGluZy5jbG9zZV9yZW1haW5kZXJfdG8gPT0gR2xvYmFsLnplcm9fYWRkcmVzcwogICAgc3dhcAogICAgZ3R4bnMgQ2xvc2VSZW1haW5kZXJUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MTgzLTE4NAogICAgLy8gIyBWYWxpZGF0ZSBVU0RDIGZ1bmRpbmcKICAgIC8vIGFzc2VydCB1c2RjX2Z1bmRpbmcuc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGR1cAogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MTg1CiAgICAvLyBhc3NlcnQgdXNkY19mdW5kaW5nLmFzc2V0X3JlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MKICAgIGR1cAogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToxODYKICAgIC8vIGFzc2VydCB1c2RjX2Z1bmRpbmcueGZlcl9hc3NldC5pZCA9PSBjdXJyZW5jeV9hc2EuYXNfdWludDY0KCkKICAgIGR1cAogICAgZ3R4bnMgWGZlckFzc2V0CiAgICB1bmNvdmVyIDgKICAgIGJ0b2kKICAgIGR1cAogICAgY292ZXIgOQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjE4NwogICAgLy8gYXNzZXJ0IHVzZGNfZnVuZGluZy5hc3NldF9hbW91bnQgPj0gZGVwb3NpdF9hbW91bnQuYXNfdWludDY0KCkKICAgIGR1cAogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIGR1cAogICAgY292ZXIgOAogICAgdW5jb3ZlciAyCiAgICBidG9pCiAgICBkdXAKICAgIGNvdmVyIDgKICAgID49CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToxODgKICAgIC8vIGFzc2VydCB1c2RjX2Z1bmRpbmcuYXNzZXRfc2VuZGVyID09IEdsb2JhbC56ZXJvX2FkZHJlc3MKICAgIGR1cAogICAgZ3R4bnMgQXNzZXRTZW5kZXIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjE4OQogICAgLy8gYXNzZXJ0IHVzZGNfZnVuZGluZy5yZWtleV90byA9PSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICBkdXAKICAgIGd0eG5zIFJla2V5VG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjE5MAogICAgLy8gYXNzZXJ0IHVzZGNfZnVuZGluZy5hc3NldF9jbG9zZV90byA9PSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICBndHhucyBBc3NldENsb3NlVG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjE5MgogICAgLy8gYXNzZXJ0IG51bV9vdXRjb21lcy5hc191aW50NjQoKSA8PSBNQVhfQUNUSVZFX0xQX09VVENPTUVTCiAgICB1bmNvdmVyIDQKICAgIGJ0b2kKICAgIGR1cAogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToxOTMKICAgIC8vIHByb3RvY29sX2NvbmZpZ19pZCA9IFR4bi5hcHBsaWNhdGlvbnMoMSkuaWQKICAgIHR4bmEgQXBwbGljYXRpb25zIDEKICAgIGR1cAogICAgY292ZXIgNgogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjE5NAogICAgLy8gYXNzZXJ0IHByb3RvY29sX2NvbmZpZ19pZCA9PSBzZWxmLnByb3RvY29sX2NvbmZpZ19pZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gInBjaSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wcm90b2NvbF9jb25maWdfaWQgZXhpc3RzCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5Ojg1CiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gb3AuQXBwR2xvYmFsLmdldF9leF91aW50NjQoYXBwLCBrZXkpCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToxOTYKICAgIC8vIGxpbmtlZF9mYWN0b3J5X2lkID0gc2VsZi5fY29uZmlnX3VpbnQ2NChwcm90b2NvbF9jb25maWdfYXBwLCBCeXRlcyhiIm1maSIpKQogICAgcHVzaGJ5dGVzIDB4NmQ2NjY5CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6ODUKICAgIC8vIHZhbHVlLCBleGlzdHMgPSBvcC5BcHBHbG9iYWwuZ2V0X2V4X3VpbnQ2NChhcHAsIGtleSkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6ODYKICAgIC8vIGFzc2VydCBleGlzdHMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjE5NwogICAgLy8gYXNzZXJ0IGxpbmtlZF9mYWN0b3J5X2lkID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2lkLmlkCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uSUQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weTo4NQogICAgLy8gdmFsdWUsIGV4aXN0cyA9IG9wLkFwcEdsb2JhbC5nZXRfZXhfdWludDY0KGFwcCwga2V5KQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MTk4CiAgICAvLyBhc3NlcnQgbnVtX291dGNvbWVzLmFzX3VpbnQ2NCgpIDw9IHNlbGYuX2NvbmZpZ191aW50NjQocHJvdG9jb2xfY29uZmlnX2FwcCwgQnl0ZXMoYiJtYXhfb3V0Y29tZXMiKSkKICAgIHB1c2hieXRlcyAweDZkNjE3ODVmNmY3NTc0NjM2ZjZkNjU3MwogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5Ojg1CiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gb3AuQXBwR2xvYmFsLmdldF9leF91aW50NjQoYXBwLCBrZXkpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5Ojg2CiAgICAvLyBhc3NlcnQgZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToxOTgKICAgIC8vIGFzc2VydCBudW1fb3V0Y29tZXMuYXNfdWludDY0KCkgPD0gc2VsZi5fY29uZmlnX3VpbnQ2NChwcm90b2NvbF9jb25maWdfYXBwLCBCeXRlcyhiIm1heF9vdXRjb21lcyIpKQogICAgdW5jb3ZlciAyCiAgICA+PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MTk5CiAgICAvLyBhc3NlcnQgbHBfZmVlX2Jwcy5hc191aW50NjQoKSA8PSBzZWxmLl9jb25maWdfdWludDY0KHByb3RvY29sX2NvbmZpZ19hcHAsIEJ5dGVzKGIibWF4X2xwX2ZlZV9icHMiKSkKICAgIHVuY292ZXIgNAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5Ojg1CiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gb3AuQXBwR2xvYmFsLmdldF9leF91aW50NjQoYXBwLCBrZXkpCiAgICBkaWcgMQogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjE5OQogICAgLy8gYXNzZXJ0IGxwX2ZlZV9icHMuYXNfdWludDY0KCkgPD0gc2VsZi5fY29uZmlnX3VpbnQ2NChwcm90b2NvbF9jb25maWdfYXBwLCBCeXRlcyhiIm1heF9scF9mZWVfYnBzIikpCiAgICBwdXNoYnl0ZXMgMHg2ZDYxNzg1ZjZjNzA1ZjY2NjU2NTVmNjI3MDczCiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6ODUKICAgIC8vIHZhbHVlLCBleGlzdHMgPSBvcC5BcHBHbG9iYWwuZ2V0X2V4X3VpbnQ2NChhcHAsIGtleSkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6ODYKICAgIC8vIGFzc2VydCBleGlzdHMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjE5OQogICAgLy8gYXNzZXJ0IGxwX2ZlZV9icHMuYXNfdWludDY0KCkgPD0gc2VsZi5fY29uZmlnX3VpbnQ2NChwcm90b2NvbF9jb25maWdfYXBwLCBCeXRlcyhiIm1heF9scF9mZWVfYnBzIikpCiAgICBkaWcgMQogICAgPj0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5Ojg1CiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gb3AuQXBwR2xvYmFsLmdldF9leF91aW50NjQoYXBwLCBrZXkpCiAgICBkaWcgMQogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjIwMQogICAgLy8gbHBfZmVlX2Jwcy5hc191aW50NjQoKSArIHNlbGYuX2NvbmZpZ191aW50NjQocHJvdG9jb2xfY29uZmlnX2FwcCwgQnl0ZXMoYiJwZmIiKSkKICAgIHB1c2hieXRlcyAweDcwNjY2MgogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5Ojg1CiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gb3AuQXBwR2xvYmFsLmdldF9leF91aW50NjQoYXBwLCBrZXkpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5Ojg2CiAgICAvLyBhc3NlcnQgZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyMDEKICAgIC8vIGxwX2ZlZV9icHMuYXNfdWludDY0KCkgKyBzZWxmLl9jb25maWdfdWludDY0KHByb3RvY29sX2NvbmZpZ19hcHAsIEJ5dGVzKGIicGZiIikpCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MjAyCiAgICAvLyA8PSBVSW50NjQoQlBTX0RFTk9NSU5BVE9SKQogICAgaW50YyA1IC8vIDEwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MjAxLTIwMgogICAgLy8gbHBfZmVlX2Jwcy5hc191aW50NjQoKSArIHNlbGYuX2NvbmZpZ191aW50NjQocHJvdG9jb2xfY29uZmlnX2FwcCwgQnl0ZXMoYiJwZmIiKSkKICAgIC8vIDw9IFVJbnQ2NChCUFNfREVOT01JTkFUT1IpCiAgICA8PQogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjIwMC0yMDMKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgbHBfZmVlX2Jwcy5hc191aW50NjQoKSArIHNlbGYuX2NvbmZpZ191aW50NjQocHJvdG9jb2xfY29uZmlnX2FwcCwgQnl0ZXMoYiJwZmIiKSkKICAgIC8vICAgICA8PSBVSW50NjQoQlBTX0RFTk9NSU5BVE9SKQogICAgLy8gKQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MjA0CiAgICAvLyBhc3NlcnQgZ3JhY2VfcGVyaW9kX3NlY3MuYXNfdWludDY0KCkgPj0gc2VsZi5fY29uZmlnX3VpbnQ2NChwcm90b2NvbF9jb25maWdfYXBwLCBCeXRlcyhiIm1pbl9ncmFjZV9wZXJpb2Rfc2VjcyIpKQogICAgc3dhcAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5Ojg1CiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gb3AuQXBwR2xvYmFsLmdldF9leF91aW50NjQoYXBwLCBrZXkpCiAgICBkaWcgMQogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjIwNAogICAgLy8gYXNzZXJ0IGdyYWNlX3BlcmlvZF9zZWNzLmFzX3VpbnQ2NCgpID49IHNlbGYuX2NvbmZpZ191aW50NjQocHJvdG9jb2xfY29uZmlnX2FwcCwgQnl0ZXMoYiJtaW5fZ3JhY2VfcGVyaW9kX3NlY3MiKSkKICAgIHB1c2hieXRlcyAweDZkNjk2ZTVmNjc3MjYxNjM2NTVmNzA2NTcyNjk2ZjY0NWY3MzY1NjM3MwogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5Ojg1CiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gb3AuQXBwR2xvYmFsLmdldF9leF91aW50NjQoYXBwLCBrZXkpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5Ojg2CiAgICAvLyBhc3NlcnQgZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyMDQKICAgIC8vIGFzc2VydCBncmFjZV9wZXJpb2Rfc2Vjcy5hc191aW50NjQoKSA+PSBzZWxmLl9jb25maWdfdWludDY0KHByb3RvY29sX2NvbmZpZ19hcHAsIEJ5dGVzKGIibWluX2dyYWNlX3BlcmlvZF9zZWNzIikpCiAgICBkaWcgMQogICAgPD0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjIwNQogICAgLy8gYXNzZXJ0IGRlYWRsaW5lLmFzX3VpbnQ2NCgpIDw9IFVJbnQ2NChVSU5UNjRfTUFYKSAtIGdyYWNlX3BlcmlvZF9zZWNzLmFzX3VpbnQ2NCgpCiAgICB1bmNvdmVyIDMKICAgIGJ0b2kKICAgIHB1c2hpbnQgMTg0NDY3NDQwNzM3MDk1NTE2MTUKICAgIHVuY292ZXIgMgogICAgLQogICAgPD0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5Ojg1CiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gb3AuQXBwR2xvYmFsLmdldF9leF91aW50NjQoYXBwLCBrZXkpCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyMDcKICAgIC8vIHNlbGYuX2NvbmZpZ191aW50NjQocHJvdG9jb2xfY29uZmlnX2FwcCwgQnl0ZXMoYiJwYiIpKSwKICAgIHB1c2hieXRlcyAweDcwNjIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weTo4NQogICAgLy8gdmFsdWUsIGV4aXN0cyA9IG9wLkFwcEdsb2JhbC5nZXRfZXhfdWludDY0KGFwcCwga2V5KQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weTo4NgogICAgLy8gYXNzZXJ0IGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6ODUKICAgIC8vIHZhbHVlLCBleGlzdHMgPSBvcC5BcHBHbG9iYWwuZ2V0X2V4X3VpbnQ2NChhcHAsIGtleSkKICAgIGRpZyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MjA4CiAgICAvLyBzZWxmLl9jb25maWdfdWludDY0KHByb3RvY29sX2NvbmZpZ19hcHAsIEJ5dGVzKGIicGJjIikpLAogICAgcHVzaGJ5dGVzIDB4NzA2MjYzCiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6ODUKICAgIC8vIHZhbHVlLCBleGlzdHMgPSBvcC5BcHBHbG9iYWwuZ2V0X2V4X3VpbnQ2NChhcHAsIGtleSkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6ODYKICAgIC8vIGFzc2VydCBleGlzdHMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5Ojg1CiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gb3AuQXBwR2xvYmFsLmdldF9leF91aW50NjQoYXBwLCBrZXkpCiAgICBkaWcgMgogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjIwOQogICAgLy8gc2VsZi5fY29uZmlnX3VpbnQ2NChwcm90b2NvbF9jb25maWdfYXBwLCBCeXRlcyhiInBmZCIpKSwKICAgIHB1c2hieXRlcyAweDcwNjY2NAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5Ojg1CiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gb3AuQXBwR2xvYmFsLmdldF9leF91aW50NjQoYXBwLCBrZXkpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5Ojg2CiAgICAvLyBhc3NlcnQgZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weTo4NQogICAgLy8gdmFsdWUsIGV4aXN0cyA9IG9wLkFwcEdsb2JhbC5nZXRfZXhfdWludDY0KGFwcCwga2V5KQogICAgdW5jb3ZlciAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MjEwCiAgICAvLyBzZWxmLl9jb25maWdfdWludDY0KHByb3RvY29sX2NvbmZpZ19hcHAsIEJ5dGVzKGIicGZmIikpLAogICAgcHVzaGJ5dGVzIDB4NzA2NjY2CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6ODUKICAgIC8vIHZhbHVlLCBleGlzdHMgPSBvcC5BcHBHbG9iYWwuZ2V0X2V4X3VpbnQ2NChhcHAsIGtleSkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6ODYKICAgIC8vIGFzc2VydCBleGlzdHMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjIxMQogICAgLy8gY2hhbGxlbmdlX3dpbmRvd19zZWNzLmFzX3VpbnQ2NCgpLAogICAgdW5jb3ZlciA0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MTEzCiAgICAvLyBmbG9vcl9mZWUgPSBzZWxmLl9tdWxfZGl2X2NlaWwocHJvcG9zYWxfYm9uZCwgcHJvcG9zZXJfZmVlX2Zsb29yX2JwcywgVUludDY0KEJQU19ERU5PTUlOQVRPUikpCiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgMgogICAgaW50YyA1IC8vIDEwMDAwCiAgICBjYWxsc3ViIF9tdWxfZGl2X2NlaWwKICAgIGR1cAogICAgY292ZXIgMgogICAgY292ZXIgNAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjExNAogICAgLy8gZGFpbHlfZmVlID0gc2VsZi5fbXVsX2Rpdl9jZWlsKHByb3Bvc2FsX2JvbmRfY2FwLCBwcm9wb3Nlcl9mZWVfYnBzLCBVSW50NjQoQlBTX0RFTk9NSU5BVE9SKSkKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAzCiAgICBpbnRjIDUgLy8gMTAwMDAKICAgIGNhbGxzdWIgX211bF9kaXZfY2VpbAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjExNQogICAgLy8gd2luZG93X2ZlZSA9IHNlbGYuX211bF9kaXZfY2VpbChkYWlseV9mZWUsIGNoYWxsZW5nZV93aW5kb3dfc2VjcywgVUludDY0KFNFQ09ORFNfUEVSX0RBWSkpCiAgICBzd2FwCiAgICBwdXNoaW50IDg2NDAwCiAgICBjYWxsc3ViIF9tdWxfZGl2X2NlaWwKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MTE2CiAgICAvLyBpZiB3aW5kb3dfZmVlID4gZmxvb3JfZmVlOgogICAgPgogICAgYnogY3JlYXRlX21hcmtldF9hZnRlcl9pZl9lbHNlQDEyCiAgICBkdXAKCmNyZWF0ZV9tYXJrZXRfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMubWFya2V0X2ZhY3RvcnkuY29udHJhY3QuTWFya2V0RmFjdG9yeS5fbWF4X3Byb3Bvc2VyX2ZlZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyMTMKICAgIC8vIGFzc2VydCB1c2RjX2Z1bmRpbmcuYXNzZXRfYW1vdW50ID09IGRlcG9zaXRfYW1vdW50LmFzX3VpbnQ2NCgpICsgYnVkZ2V0X3JlcXVpcmVkCiAgICBkaWcgNAogICAgKwogICAgZGlnIDUKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyMTUtMjE2CiAgICAvLyAjIFJlYWQgc3RvcmVkIGJ5dGVjb2RlIGZyb20gYm94ZXMgaW4gY2h1bmtzIChBVk0gc3RhY2sgbGltaXQ6IDQwOTYgYnl0ZXMgcGVyIHZhbHVlKQogICAgLy8gYXBfbGVuLCBfYXBfZXhpc3RzID0gb3AuQm94Lmxlbmd0aChCeXRlcyhiImFwIikpCiAgICBieXRlY18wIC8vIDB4NjE3MAogICAgYm94X2xlbgogICAgcG9wCiAgICBkdXAKICAgIGJ1cnkgMjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyMTgKICAgIC8vIGlmIGFwX3BhZ2UwX2xlbiA+IFVJbnQ2NCg0MDk2KToKICAgIGludGMgNCAvLyA0MDk2CiAgICA+CiAgICBkdXAKICAgIGJ1cnkgMjIKICAgIGJueiBjcmVhdGVfbWFya2V0X2lmX2JvZHlAMgogICAgZGlnIDIyCgpjcmVhdGVfbWFya2V0X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyMjAKICAgIC8vIGFwX3BhZ2UwID0gb3AuQm94LmV4dHJhY3QoQnl0ZXMoYiJhcCIpLCBVSW50NjQoMCksIGFwX3BhZ2UwX2xlbikKICAgIGJ5dGVjXzAgLy8gMHg2MTcwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBib3hfZXh0cmFjdAogICAgYnVyeSAyNgogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjIyMQogICAgLy8gYXBfcGFnZTEgPSBCeXRlcygpCiAgICBieXRlY18xIC8vIDB4CiAgICBidXJ5IDI1CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MjIyCiAgICAvLyBhcF9wYWdlMiA9IEJ5dGVzKCkKICAgIGJ5dGVjXzEgLy8gMHgKICAgIGJ1cnkgMjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyMjMKICAgIC8vIGlmIGFwX2xlbiA+IFVJbnQ2NCg0MDk2KToKICAgIGRpZyAyMAogICAgYnogY3JlYXRlX21hcmtldF9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyMjQKICAgIC8vIGFwX3BhZ2UxX2xlbiA9IGFwX2xlbiAtIFVJbnQ2NCg0MDk2KQogICAgZGlnIDIyCiAgICBpbnRjIDQgLy8gNDA5NgogICAgLQogICAgZHVwCiAgICBidXJ5IDIzCiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MjI1CiAgICAvLyBpZiBhcF9wYWdlMV9sZW4gPiBVSW50NjQoNDA5Nik6CiAgICBpbnRjIDQgLy8gNDA5NgogICAgPgogICAgYnogY3JlYXRlX21hcmtldF9hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyMjYKICAgIC8vIGFwX3BhZ2UxX2xlbiA9IFVJbnQ2NCg0MDk2KQogICAgaW50YyA0IC8vIDQwOTYKICAgIGJ1cnkgMjIKCmNyZWF0ZV9tYXJrZXRfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjIyNwogICAgLy8gYXBfcGFnZTEgPSBvcC5Cb3guZXh0cmFjdChCeXRlcyhiImFwIiksIFVJbnQ2NCg0MDk2KSwgYXBfcGFnZTFfbGVuKQogICAgYnl0ZWNfMCAvLyAweDYxNzAKICAgIGludGMgNCAvLyA0MDk2CiAgICBkaWcgMjMKICAgIGJveF9leHRyYWN0CiAgICBidXJ5IDI1CgpjcmVhdGVfbWFya2V0X2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyMjgKICAgIC8vIGlmIGFwX2xlbiA+IFVJbnQ2NCg4MTkyKToKICAgIGRpZyAyMgogICAgaW50YyA2IC8vIDgxOTIKICAgID4KICAgIGJ6IGNyZWF0ZV9tYXJrZXRfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MjI5CiAgICAvLyBhcF9wYWdlMiA9IG9wLkJveC5leHRyYWN0KEJ5dGVzKGIiYXAiKSwgVUludDY0KDgxOTIpLCBhcF9sZW4gLSBVSW50NjQoODE5MikpCiAgICBkaWcgMjIKICAgIGludGMgNiAvLyA4MTkyCiAgICAtCiAgICBieXRlY18wIC8vIDB4NjE3MAogICAgaW50YyA2IC8vIDgxOTIKICAgIHVuY292ZXIgMgogICAgYm94X2V4dHJhY3QKICAgIGJ1cnkgMjQKCmNyZWF0ZV9tYXJrZXRfYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjIzMAogICAgLy8gY2xlYXJfcHJvZ3JhbSA9IHNlbGYuY2xlYXJfcHJvZ3JhbV9ib3gudmFsdWUKICAgIHB1c2hieXRlcyAweDYzNzAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNsZWFyX3Byb2dyYW1fYm94IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjIzNi0yNjMKICAgIC8vIGNyZWF0ZV9pdHhuID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwcm92YWxfcHJvZ3JhbT0oYXBfcGFnZTAsIGFwX3BhZ2UxLCBhcF9wYWdlMiksCiAgICAvLyAgICAgY2xlYXJfc3RhdGVfcHJvZ3JhbT0oY2xlYXJfcHJvZ3JhbSwpLAogICAgLy8gICAgIGdsb2JhbF9udW1fdWludD1VSW50NjQoUVVFU1RJT05fTUFSS0VUX0dMT0JBTF9VSU5UUyksCiAgICAvLyAgICAgZ2xvYmFsX251bV9ieXRlcz1VSW50NjQoUVVFU1RJT05fTUFSS0VUX0dMT0JBTF9CWVRFUyksCiAgICAvLyAgICAgbG9jYWxfbnVtX3VpbnQ9VUludDY0KFFVRVNUSU9OX01BUktFVF9MT0NBTF9VSU5UUyksCiAgICAvLyAgICAgbG9jYWxfbnVtX2J5dGVzPVVJbnQ2NChRVUVTVElPTl9NQVJLRVRfTE9DQUxfQllURVMpLAogICAgLy8gICAgIGV4dHJhX3Byb2dyYW1fcGFnZXM9VUludDY0KFFVRVNUSU9OX01BUktFVF9FWFRSQV9QQUdFUyksCiAgICAvLyAgICAgYXBwX2FyZ3M9KAogICAgLy8gICAgICAgICBtYXJrZXRfY3JlYXRlX3NlbCwKICAgIC8vICAgICAgICAgYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLAogICAgLy8gICAgICAgICBjdXJyZW5jeV9hc2EsCiAgICAvLyAgICAgICAgIG51bV9vdXRjb21lcywKICAgIC8vICAgICAgICAgaW5pdGlhbF9saXF1aWRpdHlfYiwKICAgIC8vICAgICAgICAgbHBfZmVlX2JwcywKICAgIC8vICAgICAgICAgZGVhZGxpbmUsCiAgICAvLyAgICAgICAgIHF1ZXN0aW9uX2hhc2gsCiAgICAvLyAgICAgICAgIGJsdWVwcmludF9jaWQsCiAgICAvLyAgICAgICAgIGNoYWxsZW5nZV93aW5kb3dfc2VjcywKICAgIC8vICAgICAgICAgYXJjNC5BZGRyZXNzKEdsb2JhbC5jcmVhdG9yX2FkZHJlc3MpLAogICAgLy8gICAgICAgICBncmFjZV9wZXJpb2Rfc2VjcywKICAgIC8vICAgICAgICAgbWFya2V0X2FkbWluLAogICAgLy8gICAgICAgICBhcmM0LlVJbnQ2NChwcm90b2NvbF9jb25maWdfaWQpLAogICAgLy8gICAgICAgICBjYW5jZWxsYWJsZSwKICAgIC8vICAgICAgICAgbHBfZW50cnlfbWF4X3ByaWNlX2ZwLAogICAgLy8gICAgICksCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MjQ2CiAgICAvLyBhcmM0LkFkZHJlc3MoVHhuLnNlbmRlciksCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MjU1CiAgICAvLyBhcmM0LkFkZHJlc3MoR2xvYmFsLmNyZWF0b3JfYWRkcmVzcyksCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyNTgKICAgIC8vIGFyYzQuVUludDY0KHByb3RvY29sX2NvbmZpZ19pZCksCiAgICBkaWcgNQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjIzMi0yMzUKICAgIC8vICMgVGhlIGN1cnJlbnQgbWFya2V0IGFwcHJvdmFsIHByb2dyYW0gc3BhbnMgZml2ZSAyS0IgQVZNIHBhZ2VzLCB3aGljaCBubwogICAgLy8gIyBsb25nZXIgZml0cyB0aHJvdWdoIENvbXBpbGVkQ29udHJhY3QncyB0d28tc2xvdCBwYWdlIHR1cGxlLiBVc2UgYSBtYW51YWwKICAgIC8vICMgaW5uZXIgYXBwLWNyZWF0ZSBzbyB3ZSBjYW4gYXBwZW5kIGFsbCBhcHByb3ZhbCBwYWdlcyBleHBsaWNpdGx5LgogICAgLy8gbWFya2V0X2NyZWF0ZV9zZWwgPSBCeXRlcy5mcm9tX2hleCgiNkYyMkJFMEEiKQogICAgcHVzaGJ5dGVzIDB4NmYyMmJlMGEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICB1bmNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgMjIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgMjAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgMTkKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgMTgKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgMTYKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgMjEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgMTcKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgMTUKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZGlnIDEyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZGlnIDEzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGRpZyAxMAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGRpZyA5CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjI0MwogICAgLy8gZXh0cmFfcHJvZ3JhbV9wYWdlcz1VSW50NjQoUVVFU1RJT05fTUFSS0VUX0VYVFJBX1BBR0VTKSwKICAgIHB1c2hpbnQgMwogICAgaXR4bl9maWVsZCBFeHRyYVByb2dyYW1QYWdlcwogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjI0MQogICAgLy8gbG9jYWxfbnVtX3VpbnQ9VUludDY0KFFVRVNUSU9OX01BUktFVF9MT0NBTF9VSU5UUyksCiAgICBwdXNoaW50IDUKICAgIGl0eG5fZmllbGQgTG9jYWxOdW1VaW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MjQwCiAgICAvLyBnbG9iYWxfbnVtX2J5dGVzPVVJbnQ2NChRVUVTVElPTl9NQVJLRVRfR0xPQkFMX0JZVEVTKSwKICAgIHB1c2hpbnQgMTQKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MjM5CiAgICAvLyBnbG9iYWxfbnVtX3VpbnQ9VUludDY0KFFVRVNUSU9OX01BUktFVF9HTE9CQUxfVUlOVFMpLAogICAgcHVzaGludCA0OQogICAgaXR4bl9maWVsZCBHbG9iYWxOdW1VaW50CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGRpZyAyNQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgZGlnIDI0CiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICBkaWcgMjMKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyMzYKICAgIC8vIGNyZWF0ZV9pdHhuID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjI2MgogICAgLy8gZmVlPTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyMzYtMjYzCiAgICAvLyBjcmVhdGVfaXR4biA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcHJvdmFsX3Byb2dyYW09KGFwX3BhZ2UwLCBhcF9wYWdlMSwgYXBfcGFnZTIpLAogICAgLy8gICAgIGNsZWFyX3N0YXRlX3Byb2dyYW09KGNsZWFyX3Byb2dyYW0sKSwKICAgIC8vICAgICBnbG9iYWxfbnVtX3VpbnQ9VUludDY0KFFVRVNUSU9OX01BUktFVF9HTE9CQUxfVUlOVFMpLAogICAgLy8gICAgIGdsb2JhbF9udW1fYnl0ZXM9VUludDY0KFFVRVNUSU9OX01BUktFVF9HTE9CQUxfQllURVMpLAogICAgLy8gICAgIGxvY2FsX251bV91aW50PVVJbnQ2NChRVUVTVElPTl9NQVJLRVRfTE9DQUxfVUlOVFMpLAogICAgLy8gICAgIGxvY2FsX251bV9ieXRlcz1VSW50NjQoUVVFU1RJT05fTUFSS0VUX0xPQ0FMX0JZVEVTKSwKICAgIC8vICAgICBleHRyYV9wcm9ncmFtX3BhZ2VzPVVJbnQ2NChRVUVTVElPTl9NQVJLRVRfRVhUUkFfUEFHRVMpLAogICAgLy8gICAgIGFwcF9hcmdzPSgKICAgIC8vICAgICAgICAgbWFya2V0X2NyZWF0ZV9zZWwsCiAgICAvLyAgICAgICAgIGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwKICAgIC8vICAgICAgICAgY3VycmVuY3lfYXNhLAogICAgLy8gICAgICAgICBudW1fb3V0Y29tZXMsCiAgICAvLyAgICAgICAgIGluaXRpYWxfbGlxdWlkaXR5X2IsCiAgICAvLyAgICAgICAgIGxwX2ZlZV9icHMsCiAgICAvLyAgICAgICAgIGRlYWRsaW5lLAogICAgLy8gICAgICAgICBxdWVzdGlvbl9oYXNoLAogICAgLy8gICAgICAgICBibHVlcHJpbnRfY2lkLAogICAgLy8gICAgICAgICBjaGFsbGVuZ2Vfd2luZG93X3NlY3MsCiAgICAvLyAgICAgICAgIGFyYzQuQWRkcmVzcyhHbG9iYWwuY3JlYXRvcl9hZGRyZXNzKSwKICAgIC8vICAgICAgICAgZ3JhY2VfcGVyaW9kX3NlY3MsCiAgICAvLyAgICAgICAgIG1hcmtldF9hZG1pbiwKICAgIC8vICAgICAgICAgYXJjNC5VSW50NjQocHJvdG9jb2xfY29uZmlnX2lkKSwKICAgIC8vICAgICAgICAgY2FuY2VsbGFibGUsCiAgICAvLyAgICAgICAgIGxwX2VudHJ5X21heF9wcmljZV9mcCwKICAgIC8vICAgICApLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyNjYKICAgIC8vIGNyZWF0ZWRfYXBwX2FkZHIgPSBjcmVhdGVkX2FwcC5hZGRyZXNzCiAgICBkdXAKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyNjgtMjc0CiAgICAvLyAjIFJldGFpbiB0aGUgY3JlYXRvci1zaWRlIGFwcCBNQlIgaW4gdGhlIGZhY3RvcnkgYWNjb3VudDsgb25seSBmb3J3YXJkIHRoZQogICAgLy8gIyBjcmVhdGVkIG1hcmtldCdzIGFwcC1hY2NvdW50IGZ1bmRpbmcgdG8gdGhlIG5ldyBhcHAgYWRkcmVzcy4KICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1jcmVhdGVkX2FwcF9hZGRyLAogICAgLy8gICAgIGFtb3VudD1hbGdvX2Z1bmRpbmcuYW1vdW50IC0gRkFDVE9SWV9SRVNFUlZFIC0gTUFSS0VUX0NSRUFUT1JfTUlOX0JBTEFOQ0UsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MjcyCiAgICAvLyBhbW91bnQ9YWxnb19mdW5kaW5nLmFtb3VudCAtIEZBQ1RPUllfUkVTRVJWRSAtIE1BUktFVF9DUkVBVE9SX01JTl9CQUxBTkNFLAogICAgZGlnIDgKICAgIHB1c2hpbnQgMTAwMDAwCiAgICAtCiAgICBwdXNoaW50IDI0OTY1MDAKICAgIC0KICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBkdXAKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyNjgtMjcwCiAgICAvLyAjIFJldGFpbiB0aGUgY3JlYXRvci1zaWRlIGFwcCBNQlIgaW4gdGhlIGZhY3RvcnkgYWNjb3VudDsgb25seSBmb3J3YXJkIHRoZQogICAgLy8gIyBjcmVhdGVkIG1hcmtldCdzIGFwcC1hY2NvdW50IGZ1bmRpbmcgdG8gdGhlIG5ldyBhcHAgYWRkcmVzcy4KICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIGludGNfMiAvLyBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyNzMKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MjY4LTI3NAogICAgLy8gIyBSZXRhaW4gdGhlIGNyZWF0b3Itc2lkZSBhcHAgTUJSIGluIHRoZSBmYWN0b3J5IGFjY291bnQ7IG9ubHkgZm9yd2FyZCB0aGUKICAgIC8vICMgY3JlYXRlZCBtYXJrZXQncyBhcHAtYWNjb3VudCBmdW5kaW5nIHRvIHRoZSBuZXcgYXBwIGFkZHJlc3MuCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9Y3JlYXRlZF9hcHBfYWRkciwKICAgIC8vICAgICBhbW91bnQ9YWxnb19mdW5kaW5nLmFtb3VudCAtIEZBQ1RPUllfUkVTRVJWRSAtIE1BUktFVF9DUkVBVE9SX01JTl9CQUxBTkNFLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyNzgtMjgzCiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfaWQ9Y3JlYXRlZF9hcHAsCiAgICAvLyAgICAgYXBwX2FyZ3M9KG1hcmtldF9pbml0aWFsaXplX3NlbCwpLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gICAgIGFzc2V0cz0oQXNzZXQoY3VycmVuY3lfYXNhLmFzX3VpbnQ2NCgpKSwpLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgZGlnIDcKICAgIGR1cAogICAgaXR4bl9maWVsZCBBc3NldHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyNzYtMjc3CiAgICAvLyAjIOKUgOKUgCBJbm5lciB0eG4gMzogQ2FsbCBpbml0aWFsaXplIChvcHQgaW50byBjdXJyZW5jeSBBU0EpIOKUgOKUgAogICAgLy8gbWFya2V0X2luaXRpYWxpemVfc2VsID0gQnl0ZXMuZnJvbV9oZXgoIkZEMkM5M0NEIikKICAgIHB1c2hieXRlcyAweGZkMmM5M2NkCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZGlnIDIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjI3OAogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjI4MQogICAgLy8gZmVlPTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyNzgtMjgzCiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfaWQ9Y3JlYXRlZF9hcHAsCiAgICAvLyAgICAgYXBwX2FyZ3M9KG1hcmtldF9pbml0aWFsaXplX3NlbCwpLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gICAgIGFzc2V0cz0oQXNzZXQoY3VycmVuY3lfYXNhLmFzX3VpbnQ2NCgpKSwpLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyODctMjk5CiAgICAvLyBpdHhuLnN1Ym1pdF90eG5zKAogICAgLy8gICAgIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICAgICAgeGZlcl9hc3NldD1Bc3NldChjdXJyZW5jeV9hc2EuYXNfdWludDY0KCkpLAogICAgLy8gICAgICAgICBhc3NldF9yZWNlaXZlcj1jcmVhdGVkX2FwcF9hZGRyLAogICAgLy8gICAgICAgICBhc3NldF9hbW91bnQ9dXNkY19mdW5kaW5nLmFzc2V0X2Ftb3VudCwKICAgIC8vICAgICAgICAgZmVlPTAsCiAgICAvLyAgICAgKSwKICAgIC8vICAgICBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICAgICAgYXBwX2lkPWNyZWF0ZWRfYXBwLAogICAgLy8gICAgICAgICBhcHBfYXJncz0obWFya2V0X2Jvb3RzdHJhcF9zZWwsIGRlcG9zaXRfYW1vdW50LmJ5dGVzKSwKICAgIC8vICAgICAgICAgZmVlPTAsCiAgICAvLyAgICAgKSwKICAgIC8vICkKICAgIGl0eG5fYmVnaW4KICAgIGRpZyA3CiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6Mjg4CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyOTIKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6Mjk0LTI5OAogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2lkPWNyZWF0ZWRfYXBwLAogICAgLy8gICAgIGFwcF9hcmdzPShtYXJrZXRfYm9vdHN0cmFwX3NlbCwgZGVwb3NpdF9hbW91bnQuYnl0ZXMpLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKSwKICAgIGl0eG5fbmV4dAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjI4NS0yODYKICAgIC8vICMg4pSA4pSAIElubmVyIHR4bnMgNCs1OiBGb3J3YXJkIFVTREMgKyBib290c3RyYXAgYXMgYSBncm91cGVkIHBhaXIg4pSA4pSACiAgICAvLyBtYXJrZXRfYm9vdHN0cmFwX3NlbCA9IEJ5dGVzLmZyb21faGV4KCJCNDkwOTRFMSIpCiAgICBwdXNoYnl0ZXMgMHhiNDkwOTRlMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGRpZyA4CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyOTQKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToyOTcKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6Mjg3LTI5OQogICAgLy8gaXR4bi5zdWJtaXRfdHhucygKICAgIC8vICAgICBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgICAgIHhmZXJfYXNzZXQ9QXNzZXQoY3VycmVuY3lfYXNhLmFzX3VpbnQ2NCgpKSwKICAgIC8vICAgICAgICAgYXNzZXRfcmVjZWl2ZXI9Y3JlYXRlZF9hcHBfYWRkciwKICAgIC8vICAgICAgICAgYXNzZXRfYW1vdW50PXVzZGNfZnVuZGluZy5hc3NldF9hbW91bnQsCiAgICAvLyAgICAgICAgIGZlZT0wLAogICAgLy8gICAgICksCiAgICAvLyAgICAgaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgICAgIGFwcF9pZD1jcmVhdGVkX2FwcCwKICAgIC8vICAgICAgICAgYXBwX2FyZ3M9KG1hcmtldF9ib290c3RyYXBfc2VsLCBkZXBvc2l0X2Ftb3VudC5ieXRlcyksCiAgICAvLyAgICAgICAgIGZlZT0wLAogICAgLy8gICAgICksCiAgICAvLyApCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjMwMQogICAgLy8gcmV0dXJuIGFyYzQuVUludDY0KGNyZWF0ZWRfYXBwLmlkKQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjE1NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKY3JlYXRlX21hcmtldF9pZl9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MjE5CiAgICAvLyBhcF9wYWdlMF9sZW4gPSBVSW50NjQoNDA5NikKICAgIGludGMgNCAvLyA0MDk2CiAgICBiIGNyZWF0ZV9tYXJrZXRfYWZ0ZXJfaWZfZWxzZUAzCgpjcmVhdGVfbWFya2V0X2FmdGVyX2lmX2Vsc2VAMTI6CiAgICBkaWcgMQogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjIwNi0yMTIKICAgIC8vIGJ1ZGdldF9yZXF1aXJlZCA9IHNlbGYuX21heF9wcm9wb3Nlcl9mZWUoCiAgICAvLyAgICAgc2VsZi5fY29uZmlnX3VpbnQ2NChwcm90b2NvbF9jb25maWdfYXBwLCBCeXRlcyhiInBiIikpLAogICAgLy8gICAgIHNlbGYuX2NvbmZpZ191aW50NjQocHJvdG9jb2xfY29uZmlnX2FwcCwgQnl0ZXMoYiJwYmMiKSksCiAgICAvLyAgICAgc2VsZi5fY29uZmlnX3VpbnQ2NChwcm90b2NvbF9jb25maWdfYXBwLCBCeXRlcyhiInBmZCIpKSwKICAgIC8vICAgICBzZWxmLl9jb25maWdfdWludDY0KHByb3RvY29sX2NvbmZpZ19hcHAsIEJ5dGVzKGIicGZmIikpLAogICAgLy8gICAgIGNoYWxsZW5nZV93aW5kb3dfc2Vjcy5hc191aW50NjQoKSwKICAgIC8vICkKICAgIGIgY3JlYXRlX21hcmtldF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5tYXJrZXRfZmFjdG9yeS5jb250cmFjdC5NYXJrZXRGYWN0b3J5Ll9tYXhfcHJvcG9zZXJfZmVlQDEzCgoKLy8gc21hcnRfY29udHJhY3RzLm1hcmtldF9mYWN0b3J5LmNvbnRyYWN0Lk1hcmtldEZhY3RvcnkuX211bF9kaXZfY2VpbChhOiB1aW50NjQsIGI6IHVpbnQ2NCwgZGVub21pbmF0b3I6IHVpbnQ2NCkgLT4gdWludDY0OgpfbXVsX2Rpdl9jZWlsOgogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5Ojg5LTkwCiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIF9tdWxfZGl2X2NlaWwoc2VsZiwgYTogVUludDY0LCBiOiBVSW50NjQsIGRlbm9taW5hdG9yOiBVSW50NjQpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDMgMQogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjkxCiAgICAvLyBhc3NlcnQgZGVub21pbmF0b3IgPiBVSW50NjQoMCkKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6OTIKICAgIC8vIHByb2R1Y3RfaGlnaCwgcHJvZHVjdF9sb3cgPSBvcC5tdWx3KGEsIGIpCiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgbXVsdwogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5Ojk2CiAgICAvLyBVSW50NjQoMCksCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL21hcmtldF9mYWN0b3J5L2NvbnRyYWN0LnB5OjkzLTk4CiAgICAvLyBxdW90aWVudF9oaWdoLCBxdW90aWVudF9sb3csIHJlbWFpbmRlcl9oaWdoLCByZW1haW5kZXJfbG93ID0gb3AuZGl2bW9kdygKICAgIC8vICAgICBwcm9kdWN0X2hpZ2gsCiAgICAvLyAgICAgcHJvZHVjdF9sb3csCiAgICAvLyAgICAgVUludDY0KDApLAogICAgLy8gICAgIGRlbm9taW5hdG9yLAogICAgLy8gKQogICAgZnJhbWVfZGlnIC0xCiAgICBkaXZtb2R3CiAgICBjb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weTo5OQogICAgLy8gYXNzZXJ0IHF1b3RpZW50X2hpZ2ggPT0gVUludDY0KDApCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToxMDAKICAgIC8vIGlmIHJlbWFpbmRlcl9oaWdoID09IFVJbnQ2NCgwKSBhbmQgcmVtYWluZGVyX2xvdyA9PSBVSW50NjQoMCk6CiAgICBibnogX211bF9kaXZfY2VpbF9hZnRlcl9pZl9lbHNlQDMKICAgIGZyYW1lX2RpZyAwCiAgICBibnogX211bF9kaXZfY2VpbF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tYXJrZXRfZmFjdG9yeS9jb250cmFjdC5weToxMDEKICAgIC8vIHJldHVybiBxdW90aWVudF9sb3cKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKX211bF9kaXZfY2VpbF9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbWFya2V0X2ZhY3RvcnkvY29udHJhY3QucHk6MTAyCiAgICAvLyByZXR1cm4gcXVvdGllbnRfbG93ICsgVUludDY0KDEpCiAgICBmcmFtZV9kaWcgMQogICAgaW50Y18yIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAHAAgBAoAgkE6AQCYDAmFwAANwY2kxGRREMRhBAC2CBQToOoerBFarB8EEilwFzwTY9i2aBOcV5hQ2GgCOBQABACEAVQCNALAAJEOABCQNL2c2GgCOAQABADYaAUkVIxJEF0lEKkxnJEM2GgFJIlklCEsBFRJENhoCSU4CFSMSRDEAMgkSRFcCAEm+SBVBAANJvEhLARdLAUy5SCRDNhoBSSJZJQhLARUSRDYaAkkVIxJENhoDSSJZJQhLARUSRDEAMgkSRE8CVwIATwIXTwJXAgC7JEM2GgFJFSMSRDEAMgkSRLEXMgoishKyFLIRgQSyECKyAbMkQyJHAilHAjYaAUcCFSMSRDYaAklOAkkiWSUITBUSRDYaA0lOAkkVIxJENhoESU4DFSMSRDYaBUlOA0kVIxJENhoGSU4ESSJZJQhMFRJENhoHSU4ESRUjEkQ2GghJTgVJFSMSRDYaCUlOBhWBIBJENhoKSU4GSRUjEkQ2GgtJTgcVJBJENhoMSU4HFSMSRDYaDUlOB0kVIxJEMRYlCUk4ECQSRDEWJAlJOBCBBBJESwE4ADEAEkRLATgHMgoSREsBOAhJTgqBlPK2ARJESwE4IDIDEkRMOAkyAxJESTgAMQASREk4FDIKEkRJOBFPCBdJTgkSREk4EklOCE8CF0lOCA9ESTgTMgMSREk4IDIDEkQ4FTIDEkRPBBdJIw5ENjIBSU4GIiplREsBEkRJgANtZmllRDIIEkRJgAxtYXhfb3V0Y29tZXNlRE8CD0RPBBdLAYAObWF4X2xwX2ZlZV9icHNlREsBD0RLAYADcGZiZUQIIQUOREwXSwGAFW1pbl9ncmFjZV9wZXJpb2Rfc2Vjc2VESwEORE8DF4H///////////8BTwIJDkRJgAJwYmVESwGAA3BiY2VESwKAA3BmZGVETwOAA3BmZmVETwQXTwRPAiEFiAFkSU4CTgRPA08DIQWIAVZMgYCjBYgBTklPAg1BAUJJSwQISwUSRCi9SElFGCEEDUlFFkABJksWKCJPArpFGilFGSlFGEsUQQAaSxYhBAlJRRchBA1BAAQhBEUWKCEESxe6RRlLFiEGDUEADUsWIQYJKCEGTwK6RRiAAmNwvkSxMQAyCUsFFoAEbyK+CrIaTwKyGksWshpLFLIaSxOyGksSshpLELIaSxWyGksRshpLD7IaTLIaSwyyGksNshqyGksKshpLCbIagQOyOIEFsjaBDrI1gTGyNLJCSxmyQEsYskBLF7JAgQayECKyAbO0PUlyCESxSwiBoI0GCYH0r5gBCbIISbIHJLIQIrIBs7FLB0myMIAE/SyTzbIaSwKyGIEGshAisgGzsUsHshKyEbIUgQSyECKyAbaABLSQlOGyGksIshpJshiBBrIQIrIBsxaABBUffHVMULAkQyEEQv7XSwFC/rqKAwGL/0SL/Yv+HSKL/x9OA08CFERAAAqLAEAABYsBjACJiwEkCIwAiQ==", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 7, "patch": 1 } }, "events": [], "templateVariables": {} }