{ "name": "ProtocolConfig", "structs": {}, "methods": [ { "name": "create", "args": [ { "type": "address", "name": "admin" }, { "type": "uint64", "name": "min_bootstrap_deposit" }, { "type": "uint64", "name": "challenge_bond" }, { "type": "uint64", "name": "proposal_bond" }, { "type": "uint64", "name": "challenge_bond_bps" }, { "type": "uint64", "name": "proposal_bond_bps" }, { "type": "uint64", "name": "challenge_bond_cap" }, { "type": "uint64", "name": "proposal_bond_cap" }, { "type": "uint64", "name": "proposer_fee_bps" }, { "type": "uint64", "name": "proposer_fee_floor_bps" }, { "type": "uint64", "name": "default_b" }, { "type": "uint64", "name": "protocol_fee_ceiling_bps" }, { "type": "uint64", "name": "protocol_fee_bps" }, { "type": "address", "name": "protocol_treasury" }, { "type": "uint64", "name": "market_factory_id" }, { "type": "uint64", "name": "max_outcomes" }, { "type": "uint64", "name": "min_challenge_window_secs" }, { "type": "uint64", "name": "min_grace_period_secs" }, { "type": "uint64", "name": "max_lp_fee_bps" }, { "type": "uint64", "name": "default_residual_linear_lambda_fp" }, { "type": "uint64", "name": "max_active_lp_v4_outcomes" } ], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_admin", "args": [ { "type": "address", "name": "admin" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_min_bootstrap_deposit", "args": [ { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_challenge_bond", "args": [ { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_proposal_bond", "args": [ { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_challenge_bond_bps", "args": [ { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_proposal_bond_bps", "args": [ { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_challenge_bond_cap", "args": [ { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_proposal_bond_cap", "args": [ { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_proposer_fee_bps", "args": [ { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_proposer_fee_floor_bps", "args": [ { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_default_b", "args": [ { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_protocol_fee_bps", "args": [ { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_protocol_fee_ceiling_bps", "args": [ { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_protocol_treasury", "args": [ { "type": "address", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_market_factory_id", "args": [ { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_max_outcomes", "args": [ { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_min_challenge_window_secs", "args": [ { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_min_grace_period_secs", "args": [ { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_max_lp_fee_bps", "args": [ { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_default_residual_linear_lambda_fp", "args": [ { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_max_active_lp_v4_outcomes", "args": [ { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "op_up", "args": [ { "type": "uint64", "name": "count" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "noop", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "desc": "Protocol-wide governance/configuration state stored in global state.", "networks": {}, "state": { "schema": { "global": { "ints": 19, "bytes": 2 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "admin": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "YWRtaW4=" }, "min_bootstrap_deposit": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "bWluX2Jvb3RzdHJhcF9kZXBvc2l0" }, "challenge_bond": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "Y2I=" }, "proposal_bond": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cGI=" }, "challenge_bond_bps": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "Y2Ji" }, "proposal_bond_bps": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cGJi" }, "challenge_bond_cap": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "Y2Jj" }, "proposal_bond_cap": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cGJj" }, "proposer_fee_bps": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cGZk" }, "proposer_fee_floor_bps": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cGZm" }, "default_b": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "ZGVmYXVsdF9i" }, "protocol_fee_bps": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cGZi" }, "protocol_fee_ceiling_bps": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cHJvdG9jb2xfZmVlX2NlaWxpbmdfYnBz" }, "protocol_treasury": { "keyType": "AVMBytes", "valueType": "AVMBytes", "key": "cHQ=" }, "market_factory_id": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "bWZp" }, "max_outcomes": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "bWF4X291dGNvbWVz" }, "min_challenge_window_secs": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "bWN3" }, "min_grace_period_secs": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "bWluX2dyYWNlX3BlcmlvZF9zZWNz" }, "max_lp_fee_bps": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "bWF4X2xwX2ZlZV9icHM=" }, "default_residual_linear_lambda_fp": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cmxm" }, "max_active_lp_v4_outcomes": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "bWF4X2FjdGl2ZV9scF92NF9vdXRjb21lcw==" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": [], "call": [ "NoOp" ] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 1416 ], "errorMessage": "check self.admin exists" }, { "pc": [ 1016 ], "errorMessage": "check self.challenge_bond exists" }, { "pc": [ 916 ], "errorMessage": "check self.challenge_bond_cap exists" }, { "pc": [ 1350 ], "errorMessage": "check self.max_outcomes exists" }, { "pc": [ 1046 ], "errorMessage": "check self.proposal_bond exists" }, { "pc": [ 945 ], "errorMessage": "check self.proposal_bond_cap exists" }, { "pc": [ 1174 ], "errorMessage": "check self.protocol_fee_bps exists" }, { "pc": [ 1143 ], "errorMessage": "check self.protocol_fee_ceiling_bps exists" }, { "pc": [ 415, 520, 837, 1193 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 529, 538, 547, 556, 565, 574, 583 ], "errorMessage": "invalid number of bytes for arc4.tuple" }, { "pc": [ 423, 431, 439, 447, 455, 463, 471, 479, 487, 495, 503, 511, 890, 908, 936, 965, 987, 1009, 1039, 1070, 1092, 1114, 1134, 1161, 1210, 1228, 1251, 1271, 1291, 1313, 1336, 1368 ], "errorMessage": "invalid number of bytes for arc4.uint64" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayA4IDEgMTAwMDAgMCAxMDAwMDAwCiAgICBieXRlY2Jsb2NrICJhZG1pbiIgMHg2MzYyIDB4NzA2MiAweDYzNjI2MyAweDcwNjI2MyAweDcwNjY2MiAweDcwNzI2Zjc0NmY2MzZmNmM1ZjY2NjU2NTVmNjM2NTY5NmM2OTZlNjc1ZjYyNzA3MyAweDZkNjE3ODVmNmY3NTc0NjM2ZjZkNjU3MyAweDZkNjk2ZTVmNjI2ZjZmNzQ3Mzc0NzI2MTcwNWY2NDY1NzA2ZjczNjk3NCAweDYzNjI2MiAweDcwNjI2MiAweDcwNjY2NCAweDcwNjY2NiAweDY0NjU2NjYxNzU2Yzc0NWY2MiAweDcwNzQgMHg2ZDY2NjkgMHg2ZDYzNzcgMHg2ZDY5NmU1ZjY3NzI2MTYzNjU1ZjcwNjU3MjY5NmY2NDVmNzM2NTYzNzMgMHg2ZDYxNzg1ZjZjNzA1ZjY2NjU2NTVmNjI3MDczIDB4NzI2YzY2IDB4NmQ2MTc4NWY2MTYzNzQ2OTc2NjU1ZjZjNzA1Zjc2MzQ1ZjZmNzU3NDYzNmY2ZDY1NzMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6NDAKICAgIC8vIGNsYXNzIFByb3RvY29sQ29uZmlnKEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX25vb3BAMzQKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJ6IG1haW5fY3JlYXRlX05vT3BAMzAKICAgIHB1c2hieXRlc3MgMHg0YTE2NWVlNyAweGFlNTA2ZTFmIDB4ODQxNjc0ZDUgMHhmNWY4M2U3YSAweDFhMzcyZDk3IDB4MjU1MjgwNzkgMHhjYTBjYTkzMyAweDc1MmJiYzVlIDB4YzhlMTdlNDkgMHgyOTY1MWQ5NCAweDU3MTk2MjQyIDB4ZTYwZWNlZjYgMHg5MDZhOTllMiAweDJkY2I0MTdhIDB4ZThhZjdmMTIgMHhiOThlMTgyYSAweDgzYWFmMDIwIDB4YjNjZTA3Y2MgMHg1NmVlNGIyZCAweGJhNWNjMDg4IDB4NDQ2M2E5NjMgMHhiZWYxNGJkOSAweGU4M2E4N2FiIC8vIG1ldGhvZCAidXBkYXRlX2FkbWluKGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAidXBkYXRlX21pbl9ib290c3RyYXBfZGVwb3NpdCh1aW50NjQpdm9pZCIsIG1ldGhvZCAidXBkYXRlX2NoYWxsZW5nZV9ib25kKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJ1cGRhdGVfcHJvcG9zYWxfYm9uZCh1aW50NjQpdm9pZCIsIG1ldGhvZCAidXBkYXRlX2NoYWxsZW5nZV9ib25kX2Jwcyh1aW50NjQpdm9pZCIsIG1ldGhvZCAidXBkYXRlX3Byb3Bvc2FsX2JvbmRfYnBzKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJ1cGRhdGVfY2hhbGxlbmdlX2JvbmRfY2FwKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJ1cGRhdGVfcHJvcG9zYWxfYm9uZF9jYXAodWludDY0KXZvaWQiLCBtZXRob2QgInVwZGF0ZV9wcm9wb3Nlcl9mZWVfYnBzKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJ1cGRhdGVfcHJvcG9zZXJfZmVlX2Zsb29yX2Jwcyh1aW50NjQpdm9pZCIsIG1ldGhvZCAidXBkYXRlX2RlZmF1bHRfYih1aW50NjQpdm9pZCIsIG1ldGhvZCAidXBkYXRlX3Byb3RvY29sX2ZlZV9icHModWludDY0KXZvaWQiLCBtZXRob2QgInVwZGF0ZV9wcm90b2NvbF9mZWVfY2VpbGluZ19icHModWludDY0KXZvaWQiLCBtZXRob2QgInVwZGF0ZV9wcm90b2NvbF90cmVhc3VyeShhZGRyZXNzKXZvaWQiLCBtZXRob2QgInVwZGF0ZV9tYXJrZXRfZmFjdG9yeV9pZCh1aW50NjQpdm9pZCIsIG1ldGhvZCAidXBkYXRlX21heF9vdXRjb21lcyh1aW50NjQpdm9pZCIsIG1ldGhvZCAidXBkYXRlX21pbl9jaGFsbGVuZ2Vfd2luZG93X3NlY3ModWludDY0KXZvaWQiLCBtZXRob2QgInVwZGF0ZV9taW5fZ3JhY2VfcGVyaW9kX3NlY3ModWludDY0KXZvaWQiLCBtZXRob2QgInVwZGF0ZV9tYXhfbHBfZmVlX2Jwcyh1aW50NjQpdm9pZCIsIG1ldGhvZCAidXBkYXRlX2RlZmF1bHRfcmVzaWR1YWxfbGluZWFyX2xhbWJkYV9mcCh1aW50NjQpdm9pZCIsIG1ldGhvZCAidXBkYXRlX21heF9hY3RpdmVfbHBfdjRfb3V0Y29tZXModWludDY0KXZvaWQiLCBtZXRob2QgIm9wX3VwKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJub29wKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggdXBkYXRlX2FkbWluIHVwZGF0ZV9taW5fYm9vdHN0cmFwX2RlcG9zaXQgdXBkYXRlX2NoYWxsZW5nZV9ib25kIHVwZGF0ZV9wcm9wb3NhbF9ib25kIHVwZGF0ZV9jaGFsbGVuZ2VfYm9uZF9icHMgdXBkYXRlX3Byb3Bvc2FsX2JvbmRfYnBzIHVwZGF0ZV9jaGFsbGVuZ2VfYm9uZF9jYXAgdXBkYXRlX3Byb3Bvc2FsX2JvbmRfY2FwIHVwZGF0ZV9wcm9wb3Nlcl9mZWVfYnBzIHVwZGF0ZV9wcm9wb3Nlcl9mZWVfZmxvb3JfYnBzIHVwZGF0ZV9kZWZhdWx0X2IgdXBkYXRlX3Byb3RvY29sX2ZlZV9icHMgdXBkYXRlX3Byb3RvY29sX2ZlZV9jZWlsaW5nX2JwcyB1cGRhdGVfcHJvdG9jb2xfdHJlYXN1cnkgdXBkYXRlX21hcmtldF9mYWN0b3J5X2lkIHVwZGF0ZV9tYXhfb3V0Y29tZXMgdXBkYXRlX21pbl9jaGFsbGVuZ2Vfd2luZG93X3NlY3MgdXBkYXRlX21pbl9ncmFjZV9wZXJpb2Rfc2VjcyB1cGRhdGVfbWF4X2xwX2ZlZV9icHMgdXBkYXRlX2RlZmF1bHRfcmVzaWR1YWxfbGluZWFyX2xhbWJkYV9mcCB1cGRhdGVfbWF4X2FjdGl2ZV9scF92NF9vdXRjb21lcyBvcF91cCBtYWluX25vb3Bfcm91dGVAMjgKICAgIGVycgoKbWFpbl9ub29wX3JvdXRlQDI4OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyOTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2NyZWF0ZV9Ob09wQDMwOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weTo0MAogICAgLy8gY2xhc3MgUHJvdG9jb2xDb25maWcoQVJDNENvbnRyYWN0KToKICAgIHB1c2hieXRlcyAweGRmN2QxYjNjIC8vIG1ldGhvZCAiY3JlYXRlKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGNyZWF0ZQogICAgZXJyCgptYWluX2JhcmVfbm9vcEAzNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MjcyCiAgICAvLyBAYXJjNC5iYXJlbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnByb3RvY29sX2NvbmZpZy5jb250cmFjdC5Qcm90b2NvbENvbmZpZy5jcmVhdGVbcm91dGluZ10oKSAtPiB2b2lkOgpjcmVhdGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjgyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDcKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDkKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEwCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxNAogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDU2CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnR1cGxlPGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDU2CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnR1cGxlPGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDU2CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnR1cGxlPGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDU2CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnR1cGxlPGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDU2CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnR1cGxlPGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDU2CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnR1cGxlPGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDU2CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnR1cGxlPGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0LGFyYzQudWludDY0PgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxMDcKICAgIC8vIHNlbGYuX3JlcXVpcmUoZGVmYXVsdF9iLmFzX3VpbnQ2NCgpID4gVUludDY0KDApKQogICAgdW5jb3ZlciAxMAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weTo2NwogICAgLy8gYXNzZXJ0IGNvbmRpdGlvbgogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTA4CiAgICAvLyBzZWxmLl9yZXF1aXJlKG1heF9vdXRjb21lcy5hc191aW50NjQoKSA+PSBVSW50NjQoTUlOX09VVENPTUVTKSkKICAgIHVuY292ZXIgNgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weTo4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICBpbnRjXzAgLy8gOAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxMDgKICAgIC8vIHNlbGYuX3JlcXVpcmUobWF4X291dGNvbWVzLmFzX3VpbnQ2NCgpID49IFVJbnQ2NChNSU5fT1VUQ09NRVMpKQogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgcHVzaGludCAyCiAgICA+PQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weTo2NwogICAgLy8gYXNzZXJ0IGNvbmRpdGlvbgogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjEwOQogICAgLy8gc2VsZi5fcmVxdWlyZShtaW5fY2hhbGxlbmdlX3dpbmRvd19zZWNzLmFzX3VpbnQ2NCgpID4gVUludDY0KDApKQogICAgdW5jb3ZlciA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjgyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIHB1c2hpbnQgMTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTA5CiAgICAvLyBzZWxmLl9yZXF1aXJlKG1pbl9jaGFsbGVuZ2Vfd2luZG93X3NlY3MuYXNfdWludDY0KCkgPiBVSW50NjQoMCkpCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weTo2NwogICAgLy8gYXNzZXJ0IGNvbmRpdGlvbgogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTEwCiAgICAvLyBzZWxmLl9yZXF1aXJlKG1pbl9ncmFjZV9wZXJpb2Rfc2Vjcy5hc191aW50NjQoKSA+IFVJbnQ2NCgwKSkKICAgIHVuY292ZXIgNgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weTo4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICBwdXNoaW50IDI0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjExMAogICAgLy8gc2VsZi5fcmVxdWlyZShtaW5fZ3JhY2VfcGVyaW9kX3NlY3MuYXNfdWludDY0KCkgPiBVSW50NjQoMCkpCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weTo2NwogICAgLy8gYXNzZXJ0IGNvbmRpdGlvbgogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTExCiAgICAvLyBzZWxmLl9yZXF1aXJlX2JvbmRfYm91bmRzKGNoYWxsZW5nZV9ib25kLmFzX3VpbnQ2NCgpLCBjaGFsbGVuZ2VfYm9uZF9jYXAuYXNfdWludDY0KCkpCiAgICB1bmNvdmVyIDE4CiAgICBidG9pCiAgICB1bmNvdmVyIDE1CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBhc3NlcnQgY29uZGl0aW9uCiAgICBkaWcgMQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjgwCiAgICAvLyBzZWxmLl9yZXF1aXJlKGNhcCA+PSBtaW5pbXVtKQogICAgZHVwCiAgICBkaWcgMgogICAgPj0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6NjcKICAgIC8vIGFzc2VydCBjb25kaXRpb24KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxMTIKICAgIC8vIHNlbGYuX3JlcXVpcmVfYm9uZF9ib3VuZHMocHJvcG9zYWxfYm9uZC5hc191aW50NjQoKSwgcHJvcG9zYWxfYm9uZF9jYXAuYXNfdWludDY0KCkpCiAgICB1bmNvdmVyIDE4CiAgICBidG9pCiAgICB1bmNvdmVyIDE2CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBhc3NlcnQgY29uZGl0aW9uCiAgICBkaWcgMQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjgwCiAgICAvLyBzZWxmLl9yZXF1aXJlKGNhcCA+PSBtaW5pbXVtKQogICAgZHVwCiAgICBkaWcgMgogICAgPj0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6NjcKICAgIC8vIGFzc2VydCBjb25kaXRpb24KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxMTMKICAgIC8vIHNlbGYuX3JlcXVpcmVfYnBzKGNoYWxsZW5nZV9ib25kX2Jwcy5hc191aW50NjQoKSkKICAgIHVuY292ZXIgMTgKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6NzYKICAgIC8vIHNlbGYuX3JlcXVpcmUodmFsdWUgPD0gVUludDY0KEJQU19ERU5PTUlOQVRPUikpCiAgICBkdXAKICAgIGludGNfMiAvLyAxMDAwMAogICAgPD0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6NjcKICAgIC8vIGFzc2VydCBjb25kaXRpb24KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxMTQKICAgIC8vIHNlbGYuX3JlcXVpcmVfYnBzKHByb3Bvc2FsX2JvbmRfYnBzLmFzX3VpbnQ2NCgpKQogICAgdW5jb3ZlciAxOAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weTo3NgogICAgLy8gc2VsZi5fcmVxdWlyZSh2YWx1ZSA8PSBVSW50NjQoQlBTX0RFTk9NSU5BVE9SKSkKICAgIGR1cAogICAgaW50Y18yIC8vIDEwMDAwCiAgICA8PQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weTo2NwogICAgLy8gYXNzZXJ0IGNvbmRpdGlvbgogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjExNQogICAgLy8gc2VsZi5fcmVxdWlyZV9icHMocHJvcG9zZXJfZmVlX2Jwcy5hc191aW50NjQoKSkKICAgIHVuY292ZXIgMTgKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6NzYKICAgIC8vIHNlbGYuX3JlcXVpcmUodmFsdWUgPD0gVUludDY0KEJQU19ERU5PTUlOQVRPUikpCiAgICBkdXAKICAgIGludGNfMiAvLyAxMDAwMAogICAgPD0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6NjcKICAgIC8vIGFzc2VydCBjb25kaXRpb24KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxMTYKICAgIC8vIHNlbGYuX3JlcXVpcmVfYnBzKHByb3Bvc2VyX2ZlZV9mbG9vcl9icHMuYXNfdWludDY0KCkpCiAgICB1bmNvdmVyIDE4CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5Ojc2CiAgICAvLyBzZWxmLl9yZXF1aXJlKHZhbHVlIDw9IFVJbnQ2NChCUFNfREVOT01JTkFUT1IpKQogICAgZHVwCiAgICBpbnRjXzIgLy8gMTAwMDAKICAgIDw9CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBhc3NlcnQgY29uZGl0aW9uCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTE3CiAgICAvLyBzZWxmLl9yZXF1aXJlX2Jwcyhwcm90b2NvbF9mZWVfY2VpbGluZ19icHMuYXNfdWludDY0KCkpCiAgICB1bmNvdmVyIDE4CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5Ojc2CiAgICAvLyBzZWxmLl9yZXF1aXJlKHZhbHVlIDw9IFVJbnQ2NChCUFNfREVOT01JTkFUT1IpKQogICAgZHVwCiAgICBpbnRjXzIgLy8gMTAwMDAKICAgIDw9CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBhc3NlcnQgY29uZGl0aW9uCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTE4CiAgICAvLyBzZWxmLl9yZXF1aXJlX2Jwcyhwcm90b2NvbF9mZWVfYnBzLmFzX3VpbnQ2NCgpKQogICAgdW5jb3ZlciAxOAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weTo3NgogICAgLy8gc2VsZi5fcmVxdWlyZSh2YWx1ZSA8PSBVSW50NjQoQlBTX0RFTk9NSU5BVE9SKSkKICAgIGR1cAogICAgaW50Y18yIC8vIDEwMDAwCiAgICA8PQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weTo2NwogICAgLy8gYXNzZXJ0IGNvbmRpdGlvbgogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjExOQogICAgLy8gc2VsZi5fcmVxdWlyZV9icHMobWF4X2xwX2ZlZV9icHMuYXNfdWludDY0KCkpCiAgICB1bmNvdmVyIDE2CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjgyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIHB1c2hpbnQgMzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTE5CiAgICAvLyBzZWxmLl9yZXF1aXJlX2JwcyhtYXhfbHBfZmVlX2Jwcy5hc191aW50NjQoKSkKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5Ojc2CiAgICAvLyBzZWxmLl9yZXF1aXJlKHZhbHVlIDw9IFVJbnQ2NChCUFNfREVOT01JTkFUT1IpKQogICAgZHVwCiAgICBpbnRjXzIgLy8gMTAwMDAKICAgIDw9CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBhc3NlcnQgY29uZGl0aW9uCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTIwCiAgICAvLyBzZWxmLl9yZXF1aXJlKGRlZmF1bHRfcmVzaWR1YWxfbGluZWFyX2xhbWJkYV9mcC5hc191aW50NjQoKSA8PSBVSW50NjQoUkVTSURVQUxfV0VJR0hUX1NDQUxFX0ZQKSkKICAgIHVuY292ZXIgMTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6ODIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChjcmVhdGU9InJlcXVpcmUiKQogICAgcHVzaGludCA0MAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxMjAKICAgIC8vIHNlbGYuX3JlcXVpcmUoZGVmYXVsdF9yZXNpZHVhbF9saW5lYXJfbGFtYmRhX2ZwLmFzX3VpbnQ2NCgpIDw9IFVJbnQ2NChSRVNJRFVBTF9XRUlHSFRfU0NBTEVfRlApKQogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgaW50YyA0IC8vIDEwMDAwMDAKICAgIDw9CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBhc3NlcnQgY29uZGl0aW9uCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTIxCiAgICAvLyBzZWxmLl9yZXF1aXJlKG1heF9hY3RpdmVfbHBfdjRfb3V0Y29tZXMuYXNfdWludDY0KCkgPj0gVUludDY0KE1JTl9PVVRDT01FUykpCiAgICB1bmNvdmVyIDE2CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjgyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIHB1c2hpbnQgNDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTIxCiAgICAvLyBzZWxmLl9yZXF1aXJlKG1heF9hY3RpdmVfbHBfdjRfb3V0Y29tZXMuYXNfdWludDY0KCkgPj0gVUludDY0KE1JTl9PVVRDT01FUykpCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBwdXNoaW50IDIKICAgID49CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBhc3NlcnQgY29uZGl0aW9uCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTIyCiAgICAvLyBzZWxmLl9yZXF1aXJlKG1heF9hY3RpdmVfbHBfdjRfb3V0Y29tZXMuYXNfdWludDY0KCkgPD0gbWF4X291dGNvbWVzLmFzX3VpbnQ2NCgpKQogICAgZHVwCiAgICBkaWcgMTYKICAgIDw9CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBhc3NlcnQgY29uZGl0aW9uCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6NzMKICAgIC8vIHNlbGYuX3JlcXVpcmUoZmVlX2JwcyA8PSBjZWlsaW5nX2JwcykKICAgIGRpZyAzCiAgICBkaWcgNQogICAgPD0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6NjcKICAgIC8vIGFzc2VydCBjb25kaXRpb24KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxMjUKICAgIC8vIHNlbGYuYWRtaW4udmFsdWUgPSBhZG1pbi5ieXRlcwogICAgYnl0ZWNfMCAvLyAiYWRtaW4iCiAgICB1bmNvdmVyIDIxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxMjYKICAgIC8vIHNlbGYubWluX2Jvb3RzdHJhcF9kZXBvc2l0LnZhbHVlID0gbWluX2Jvb3RzdHJhcF9kZXBvc2l0LmFzX3VpbnQ2NCgpCiAgICB1bmNvdmVyIDE5CiAgICBidG9pCiAgICBieXRlYyA4IC8vIDB4NmQ2OTZlNWY2MjZmNmY3NDczNzQ3MjYxNzA1ZjY0NjU3MDZmNzM2OTc0CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxMjcKICAgIC8vIHNlbGYuY2hhbGxlbmdlX2JvbmQudmFsdWUgPSBjaGFsbGVuZ2VfYm9uZC5hc191aW50NjQoKQogICAgYnl0ZWNfMSAvLyAweDYzNjIKICAgIHVuY292ZXIgMTMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjEyOAogICAgLy8gc2VsZi5wcm9wb3NhbF9ib25kLnZhbHVlID0gcHJvcG9zYWxfYm9uZC5hc191aW50NjQoKQogICAgYnl0ZWNfMiAvLyAweDcwNjIKICAgIHVuY292ZXIgMTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjEyOQogICAgLy8gc2VsZi5jaGFsbGVuZ2VfYm9uZF9icHMudmFsdWUgPSBjaGFsbGVuZ2VfYm9uZF9icHMuYXNfdWludDY0KCkKICAgIGJ5dGVjIDkgLy8gMHg2MzYyNjIKICAgIHVuY292ZXIgOQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTMwCiAgICAvLyBzZWxmLnByb3Bvc2FsX2JvbmRfYnBzLnZhbHVlID0gcHJvcG9zYWxfYm9uZF9icHMuYXNfdWludDY0KCkKICAgIGJ5dGVjIDEwIC8vIDB4NzA2MjYyCiAgICB1bmNvdmVyIDgKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjEzMQogICAgLy8gc2VsZi5jaGFsbGVuZ2VfYm9uZF9jYXAudmFsdWUgPSBjaGFsbGVuZ2VfYm9uZF9jYXAuYXNfdWludDY0KCkKICAgIGJ5dGVjXzMgLy8gMHg2MzYyNjMKICAgIHVuY292ZXIgOQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTMyCiAgICAvLyBzZWxmLnByb3Bvc2FsX2JvbmRfY2FwLnZhbHVlID0gcHJvcG9zYWxfYm9uZF9jYXAuYXNfdWludDY0KCkKICAgIGJ5dGVjIDQgLy8gMHg3MDYyNjMKICAgIHVuY292ZXIgOAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTMzCiAgICAvLyBzZWxmLnByb3Bvc2VyX2ZlZV9icHMudmFsdWUgPSBwcm9wb3Nlcl9mZWVfYnBzLmFzX3VpbnQ2NCgpCiAgICBieXRlYyAxMSAvLyAweDcwNjY2NAogICAgdW5jb3ZlciA3CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxMzQKICAgIC8vIHNlbGYucHJvcG9zZXJfZmVlX2Zsb29yX2Jwcy52YWx1ZSA9IHByb3Bvc2VyX2ZlZV9mbG9vcl9icHMuYXNfdWludDY0KCkKICAgIGJ5dGVjIDEyIC8vIDB4NzA2NjY2CiAgICB1bmNvdmVyIDYKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjEzNQogICAgLy8gc2VsZi5kZWZhdWx0X2IudmFsdWUgPSBkZWZhdWx0X2IuYXNfdWludDY0KCkKICAgIGJ5dGVjIDEzIC8vIDB4NjQ2NTY2NjE3NTZjNzQ1ZjYyCiAgICB1bmNvdmVyIDkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjEzNgogICAgLy8gc2VsZi5wcm90b2NvbF9mZWVfYnBzLnZhbHVlID0gcHJvdG9jb2xfZmVlX2Jwcy5hc191aW50NjQoKQogICAgYnl0ZWMgNSAvLyAweDcwNjY2MgogICAgdW5jb3ZlciA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxMzcKICAgIC8vIHNlbGYucHJvdG9jb2xfZmVlX2NlaWxpbmdfYnBzLnZhbHVlID0gcHJvdG9jb2xfZmVlX2NlaWxpbmdfYnBzLmFzX3VpbnQ2NCgpCiAgICBieXRlYyA2IC8vIDB4NzA3MjZmNzQ2ZjYzNmY2YzVmNjY2NTY1NWY2MzY1Njk2YzY5NmU2NzVmNjI3MDczCiAgICB1bmNvdmVyIDQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjEzOAogICAgLy8gc2VsZi5wcm90b2NvbF90cmVhc3VyeS52YWx1ZSA9IHByb3RvY29sX3RyZWFzdXJ5LmJ5dGVzCiAgICBieXRlYyAxNCAvLyAweDcwNzQKICAgIHVuY292ZXIgOAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTM5CiAgICAvLyBzZWxmLm1hcmtldF9mYWN0b3J5X2lkLnZhbHVlID0gbWFya2V0X2ZhY3RvcnlfaWQuYXNfdWludDY0KCkKICAgIHVuY292ZXIgNgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weTo4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICBpbnRjXzMgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxMzkKICAgIC8vIHNlbGYubWFya2V0X2ZhY3RvcnlfaWQudmFsdWUgPSBtYXJrZXRfZmFjdG9yeV9pZC5hc191aW50NjQoKQogICAgZXh0cmFjdF91aW50NjQKICAgIGJ5dGVjIDE1IC8vIDB4NmQ2NjY5CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxNDAKICAgIC8vIHNlbGYubWF4X291dGNvbWVzLnZhbHVlID0gbWF4X291dGNvbWVzLmFzX3VpbnQ2NCgpCiAgICBieXRlYyA3IC8vIDB4NmQ2MTc4NWY2Zjc1NzQ2MzZmNmQ2NTczCiAgICB1bmNvdmVyIDYKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjE0MQogICAgLy8gc2VsZi5taW5fY2hhbGxlbmdlX3dpbmRvd19zZWNzLnZhbHVlID0gbWluX2NoYWxsZW5nZV93aW5kb3dfc2Vjcy5hc191aW50NjQoKQogICAgYnl0ZWMgMTYgLy8gMHg2ZDYzNzcKICAgIHVuY292ZXIgNQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTQyCiAgICAvLyBzZWxmLm1pbl9ncmFjZV9wZXJpb2Rfc2Vjcy52YWx1ZSA9IG1pbl9ncmFjZV9wZXJpb2Rfc2Vjcy5hc191aW50NjQoKQogICAgYnl0ZWMgMTcgLy8gMHg2ZDY5NmU1ZjY3NzI2MTYzNjU1ZjcwNjU3MjY5NmY2NDVmNzM2NTYzNzMKICAgIHVuY292ZXIgNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTQzCiAgICAvLyBzZWxmLm1heF9scF9mZWVfYnBzLnZhbHVlID0gbWF4X2xwX2ZlZV9icHMuYXNfdWludDY0KCkKICAgIGJ5dGVjIDE4IC8vIDB4NmQ2MTc4NWY2YzcwNWY2NjY1NjU1ZjYyNzA3MwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxNDQKICAgIC8vIHNlbGYuZGVmYXVsdF9yZXNpZHVhbF9saW5lYXJfbGFtYmRhX2ZwLnZhbHVlID0gZGVmYXVsdF9yZXNpZHVhbF9saW5lYXJfbGFtYmRhX2ZwLmFzX3VpbnQ2NCgpCiAgICBieXRlYyAxOSAvLyAweDcyNmM2NgogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxNDUKICAgIC8vIHNlbGYubWF4X2FjdGl2ZV9scF92NF9vdXRjb21lcy52YWx1ZSA9IG1heF9hY3RpdmVfbHBfdjRfb3V0Y29tZXMuYXNfdWludDY0KCkKICAgIGJ5dGVjIDIwIC8vIDB4NmQ2MTc4NWY2MTYzNzQ2OTc2NjU1ZjZjNzA1Zjc2MzQ1ZjZmNzU3NDYzNmY2ZDY1NzMKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjgyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMucHJvdG9jb2xfY29uZmlnLmNvbnRyYWN0LlByb3RvY29sQ29uZmlnLnVwZGF0ZV9hZG1pbltyb3V0aW5nXSgpIC0+IHZvaWQ6CnVwZGF0ZV9hZG1pbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxNDkKICAgIC8vIHNlbGYuX3JlcXVpcmVfYWRtaW4oKQogICAgY2FsbHN1YiBfcmVxdWlyZV9hZG1pbgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxNTAKICAgIC8vIHNlbGYuX3JlcXVpcmUoYWRtaW4uYnl0ZXMgIT0gQnl0ZXMoYiJceDAwIiAqIDMyKSkKICAgIGR1cAogICAgcHVzaGJ5dGVzIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgIT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6NjcKICAgIC8vIGFzc2VydCBjb25kaXRpb24KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxNTEKICAgIC8vIHNlbGYuYWRtaW4udmFsdWUgPSBhZG1pbi5ieXRlcwogICAgYnl0ZWNfMCAvLyAiYWRtaW4iCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxNDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnByb3RvY29sX2NvbmZpZy5jb250cmFjdC5Qcm90b2NvbENvbmZpZy51cGRhdGVfbWluX2Jvb3RzdHJhcF9kZXBvc2l0W3JvdXRpbmddKCkgLT4gdm9pZDoKdXBkYXRlX21pbl9ib290c3RyYXBfZGVwb3NpdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxNTUKICAgIC8vIHNlbGYuX3JlcXVpcmVfYWRtaW4oKQogICAgY2FsbHN1YiBfcmVxdWlyZV9hZG1pbgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxNTYKICAgIC8vIHNlbGYubWluX2Jvb3RzdHJhcF9kZXBvc2l0LnZhbHVlID0gdmFsdWUuYXNfdWludDY0KCkKICAgIGJ0b2kKICAgIGJ5dGVjIDggLy8gMHg2ZDY5NmU1ZjYyNmY2Zjc0NzM3NDcyNjE3MDVmNjQ2NTcwNmY3MzY5NzQKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjE1MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMucHJvdG9jb2xfY29uZmlnLmNvbnRyYWN0LlByb3RvY29sQ29uZmlnLnVwZGF0ZV9jaGFsbGVuZ2VfYm9uZFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnVwZGF0ZV9jaGFsbGVuZ2VfYm9uZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTU4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxNjAKICAgIC8vIHNlbGYuX3JlcXVpcmVfYWRtaW4oKQogICAgY2FsbHN1YiBfcmVxdWlyZV9hZG1pbgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxNjEKICAgIC8vIHNlbGYuX3JlcXVpcmVfYm9uZF9ib3VuZHModmFsdWUuYXNfdWludDY0KCksIHNlbGYuY2hhbGxlbmdlX2JvbmRfY2FwLnZhbHVlKQogICAgYnRvaQogICAgaW50Y18zIC8vIDAKICAgIGJ5dGVjXzMgLy8gMHg2MzYyNjMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jaGFsbGVuZ2VfYm9uZF9jYXAgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBhc3NlcnQgY29uZGl0aW9uCiAgICBkaWcgMQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjgwCiAgICAvLyBzZWxmLl9yZXF1aXJlKGNhcCA+PSBtaW5pbXVtKQogICAgZGlnIDEKICAgID49CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBhc3NlcnQgY29uZGl0aW9uCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTYyCiAgICAvLyBzZWxmLmNoYWxsZW5nZV9ib25kLnZhbHVlID0gdmFsdWUuYXNfdWludDY0KCkKICAgIGJ5dGVjXzEgLy8gMHg2MzYyCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxNTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnByb3RvY29sX2NvbmZpZy5jb250cmFjdC5Qcm90b2NvbENvbmZpZy51cGRhdGVfcHJvcG9zYWxfYm9uZFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnVwZGF0ZV9wcm9wb3NhbF9ib25kOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxNjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjE2NgogICAgLy8gc2VsZi5fcmVxdWlyZV9hZG1pbigpCiAgICBjYWxsc3ViIF9yZXF1aXJlX2FkbWluCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjE2NwogICAgLy8gc2VsZi5fcmVxdWlyZV9ib25kX2JvdW5kcyh2YWx1ZS5hc191aW50NjQoKSwgc2VsZi5wcm9wb3NhbF9ib25kX2NhcC52YWx1ZSkKICAgIGJ0b2kKICAgIGludGNfMyAvLyAwCiAgICBieXRlYyA0IC8vIDB4NzA2MjYzCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucHJvcG9zYWxfYm9uZF9jYXAgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBhc3NlcnQgY29uZGl0aW9uCiAgICBkaWcgMQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjgwCiAgICAvLyBzZWxmLl9yZXF1aXJlKGNhcCA+PSBtaW5pbXVtKQogICAgZGlnIDEKICAgID49CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBhc3NlcnQgY29uZGl0aW9uCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTY4CiAgICAvLyBzZWxmLnByb3Bvc2FsX2JvbmQudmFsdWUgPSB2YWx1ZS5hc191aW50NjQoKQogICAgYnl0ZWNfMiAvLyAweDcwNjIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjE2NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMucHJvdG9jb2xfY29uZmlnLmNvbnRyYWN0LlByb3RvY29sQ29uZmlnLnVwZGF0ZV9jaGFsbGVuZ2VfYm9uZF9icHNbcm91dGluZ10oKSAtPiB2b2lkOgp1cGRhdGVfY2hhbGxlbmdlX2JvbmRfYnBzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxNzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjE3MgogICAgLy8gc2VsZi5fcmVxdWlyZV9hZG1pbigpCiAgICBjYWxsc3ViIF9yZXF1aXJlX2FkbWluCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjE3MwogICAgLy8gc2VsZi5fcmVxdWlyZV9icHModmFsdWUuYXNfdWludDY0KCkpCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5Ojc2CiAgICAvLyBzZWxmLl9yZXF1aXJlKHZhbHVlIDw9IFVJbnQ2NChCUFNfREVOT01JTkFUT1IpKQogICAgZHVwCiAgICBpbnRjXzIgLy8gMTAwMDAKICAgIDw9CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBhc3NlcnQgY29uZGl0aW9uCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTc0CiAgICAvLyBzZWxmLmNoYWxsZW5nZV9ib25kX2Jwcy52YWx1ZSA9IHZhbHVlLmFzX3VpbnQ2NCgpCiAgICBieXRlYyA5IC8vIDB4NjM2MjYyCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxNzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnByb3RvY29sX2NvbmZpZy5jb250cmFjdC5Qcm90b2NvbENvbmZpZy51cGRhdGVfcHJvcG9zYWxfYm9uZF9icHNbcm91dGluZ10oKSAtPiB2b2lkOgp1cGRhdGVfcHJvcG9zYWxfYm9uZF9icHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjE3NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTc4CiAgICAvLyBzZWxmLl9yZXF1aXJlX2FkbWluKCkKICAgIGNhbGxzdWIgX3JlcXVpcmVfYWRtaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTc5CiAgICAvLyBzZWxmLl9yZXF1aXJlX2Jwcyh2YWx1ZS5hc191aW50NjQoKSkKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6NzYKICAgIC8vIHNlbGYuX3JlcXVpcmUodmFsdWUgPD0gVUludDY0KEJQU19ERU5PTUlOQVRPUikpCiAgICBkdXAKICAgIGludGNfMiAvLyAxMDAwMAogICAgPD0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6NjcKICAgIC8vIGFzc2VydCBjb25kaXRpb24KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxODAKICAgIC8vIHNlbGYucHJvcG9zYWxfYm9uZF9icHMudmFsdWUgPSB2YWx1ZS5hc191aW50NjQoKQogICAgYnl0ZWMgMTAgLy8gMHg3MDYyNjIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjE3NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMucHJvdG9jb2xfY29uZmlnLmNvbnRyYWN0LlByb3RvY29sQ29uZmlnLnVwZGF0ZV9jaGFsbGVuZ2VfYm9uZF9jYXBbcm91dGluZ10oKSAtPiB2b2lkOgp1cGRhdGVfY2hhbGxlbmdlX2JvbmRfY2FwOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxODIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjE4NAogICAgLy8gc2VsZi5fcmVxdWlyZV9hZG1pbigpCiAgICBjYWxsc3ViIF9yZXF1aXJlX2FkbWluCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjE4NQogICAgLy8gc2VsZi5fcmVxdWlyZV9ib25kX2JvdW5kcyhzZWxmLmNoYWxsZW5nZV9ib25kLnZhbHVlLCB2YWx1ZS5hc191aW50NjQoKSkKICAgIGludGNfMyAvLyAwCiAgICBieXRlY18xIC8vIDB4NjM2MgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNoYWxsZW5nZV9ib25kIGV4aXN0cwogICAgc3dhcAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weTo2NwogICAgLy8gYXNzZXJ0IGNvbmRpdGlvbgogICAgZGlnIDEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weTo4MAogICAgLy8gc2VsZi5fcmVxdWlyZShjYXAgPj0gbWluaW11bSkKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICA+PQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weTo2NwogICAgLy8gYXNzZXJ0IGNvbmRpdGlvbgogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjE4NgogICAgLy8gc2VsZi5jaGFsbGVuZ2VfYm9uZF9jYXAudmFsdWUgPSB2YWx1ZS5hc191aW50NjQoKQogICAgYnl0ZWNfMyAvLyAweDYzNjI2MwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTgyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5wcm90b2NvbF9jb25maWcuY29udHJhY3QuUHJvdG9jb2xDb25maWcudXBkYXRlX3Byb3Bvc2FsX2JvbmRfY2FwW3JvdXRpbmddKCkgLT4gdm9pZDoKdXBkYXRlX3Byb3Bvc2FsX2JvbmRfY2FwOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxODgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjE5MAogICAgLy8gc2VsZi5fcmVxdWlyZV9hZG1pbigpCiAgICBjYWxsc3ViIF9yZXF1aXJlX2FkbWluCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjE5MQogICAgLy8gc2VsZi5fcmVxdWlyZV9ib25kX2JvdW5kcyhzZWxmLnByb3Bvc2FsX2JvbmQudmFsdWUsIHZhbHVlLmFzX3VpbnQ2NCgpKQogICAgaW50Y18zIC8vIDAKICAgIGJ5dGVjXzIgLy8gMHg3MDYyCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucHJvcG9zYWxfYm9uZCBleGlzdHMKICAgIHN3YXAKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6NjcKICAgIC8vIGFzc2VydCBjb25kaXRpb24KICAgIGRpZyAxCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6ODAKICAgIC8vIHNlbGYuX3JlcXVpcmUoY2FwID49IG1pbmltdW0pCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgPj0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6NjcKICAgIC8vIGFzc2VydCBjb25kaXRpb24KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxOTIKICAgIC8vIHNlbGYucHJvcG9zYWxfYm9uZF9jYXAudmFsdWUgPSB2YWx1ZS5hc191aW50NjQoKQogICAgYnl0ZWMgNCAvLyAweDcwNjI2MwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTg4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5wcm90b2NvbF9jb25maWcuY29udHJhY3QuUHJvdG9jb2xDb25maWcudXBkYXRlX3Byb3Bvc2VyX2ZlZV9icHNbcm91dGluZ10oKSAtPiB2b2lkOgp1cGRhdGVfcHJvcG9zZXJfZmVlX2JwczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MTk0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxOTYKICAgIC8vIHNlbGYuX3JlcXVpcmVfYWRtaW4oKQogICAgY2FsbHN1YiBfcmVxdWlyZV9hZG1pbgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxOTcKICAgIC8vIHNlbGYuX3JlcXVpcmVfYnBzKHZhbHVlLmFzX3VpbnQ2NCgpKQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weTo3NgogICAgLy8gc2VsZi5fcmVxdWlyZSh2YWx1ZSA8PSBVSW50NjQoQlBTX0RFTk9NSU5BVE9SKSkKICAgIGR1cAogICAgaW50Y18yIC8vIDEwMDAwCiAgICA8PQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weTo2NwogICAgLy8gYXNzZXJ0IGNvbmRpdGlvbgogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjE5OAogICAgLy8gc2VsZi5wcm9wb3Nlcl9mZWVfYnBzLnZhbHVlID0gdmFsdWUuYXNfdWludDY0KCkKICAgIGJ5dGVjIDExIC8vIDB4NzA2NjY0CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToxOTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnByb3RvY29sX2NvbmZpZy5jb250cmFjdC5Qcm90b2NvbENvbmZpZy51cGRhdGVfcHJvcG9zZXJfZmVlX2Zsb29yX2Jwc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnVwZGF0ZV9wcm9wb3Nlcl9mZWVfZmxvb3JfYnBzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyMDAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjIwMgogICAgLy8gc2VsZi5fcmVxdWlyZV9hZG1pbigpCiAgICBjYWxsc3ViIF9yZXF1aXJlX2FkbWluCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjIwMwogICAgLy8gc2VsZi5fcmVxdWlyZV9icHModmFsdWUuYXNfdWludDY0KCkpCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5Ojc2CiAgICAvLyBzZWxmLl9yZXF1aXJlKHZhbHVlIDw9IFVJbnQ2NChCUFNfREVOT01JTkFUT1IpKQogICAgZHVwCiAgICBpbnRjXzIgLy8gMTAwMDAKICAgIDw9CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBhc3NlcnQgY29uZGl0aW9uCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MjA0CiAgICAvLyBzZWxmLnByb3Bvc2VyX2ZlZV9mbG9vcl9icHMudmFsdWUgPSB2YWx1ZS5hc191aW50NjQoKQogICAgYnl0ZWMgMTIgLy8gMHg3MDY2NjYKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjIwMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMucHJvdG9jb2xfY29uZmlnLmNvbnRyYWN0LlByb3RvY29sQ29uZmlnLnVwZGF0ZV9kZWZhdWx0X2Jbcm91dGluZ10oKSAtPiB2b2lkOgp1cGRhdGVfZGVmYXVsdF9iOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyMDYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjIwOAogICAgLy8gc2VsZi5fcmVxdWlyZV9hZG1pbigpCiAgICBjYWxsc3ViIF9yZXF1aXJlX2FkbWluCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjIwOQogICAgLy8gc2VsZi5fcmVxdWlyZSh2YWx1ZS5hc191aW50NjQoKSA+IFVJbnQ2NCgwKSkKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6NjcKICAgIC8vIGFzc2VydCBjb25kaXRpb24KICAgIGR1cAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjIxMAogICAgLy8gc2VsZi5kZWZhdWx0X2IudmFsdWUgPSB2YWx1ZS5hc191aW50NjQoKQogICAgYnl0ZWMgMTMgLy8gMHg2NDY1NjY2MTc1NmM3NDVmNjIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjIwNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMucHJvdG9jb2xfY29uZmlnLmNvbnRyYWN0LlByb3RvY29sQ29uZmlnLnVwZGF0ZV9wcm90b2NvbF9mZWVfYnBzW3JvdXRpbmddKCkgLT4gdm9pZDoKdXBkYXRlX3Byb3RvY29sX2ZlZV9icHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjIxMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MjE0CiAgICAvLyBzZWxmLl9yZXF1aXJlX2FkbWluKCkKICAgIGNhbGxzdWIgX3JlcXVpcmVfYWRtaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MjE1CiAgICAvLyBzZWxmLl9yZXF1aXJlX2ZlZV93aXRoaW5fY2VpbGluZyh2YWx1ZS5hc191aW50NjQoKSwgc2VsZi5wcm90b2NvbF9mZWVfY2VpbGluZ19icHMudmFsdWUpCiAgICBidG9pCiAgICBpbnRjXzMgLy8gMAogICAgYnl0ZWMgNiAvLyAweDcwNzI2Zjc0NmY2MzZmNmM1ZjY2NjU2NTVmNjM2NTY5NmM2OTZlNjc1ZjYyNzA3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnByb3RvY29sX2ZlZV9jZWlsaW5nX2JwcyBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6NzMKICAgIC8vIHNlbGYuX3JlcXVpcmUoZmVlX2JwcyA8PSBjZWlsaW5nX2JwcykKICAgIGRpZyAxCiAgICA+PQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weTo2NwogICAgLy8gYXNzZXJ0IGNvbmRpdGlvbgogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjIxNgogICAgLy8gc2VsZi5wcm90b2NvbF9mZWVfYnBzLnZhbHVlID0gdmFsdWUuYXNfdWludDY0KCkKICAgIGJ5dGVjIDUgLy8gMHg3MDY2NjIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjIxMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMucHJvdG9jb2xfY29uZmlnLmNvbnRyYWN0LlByb3RvY29sQ29uZmlnLnVwZGF0ZV9wcm90b2NvbF9mZWVfY2VpbGluZ19icHNbcm91dGluZ10oKSAtPiB2b2lkOgp1cGRhdGVfcHJvdG9jb2xfZmVlX2NlaWxpbmdfYnBzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyMTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjIyMAogICAgLy8gc2VsZi5fcmVxdWlyZV9hZG1pbigpCiAgICBjYWxsc3ViIF9yZXF1aXJlX2FkbWluCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjIyMQogICAgLy8gc2VsZi5fcmVxdWlyZV9icHModmFsdWUuYXNfdWludDY0KCkpCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5Ojc2CiAgICAvLyBzZWxmLl9yZXF1aXJlKHZhbHVlIDw9IFVJbnQ2NChCUFNfREVOT01JTkFUT1IpKQogICAgZHVwCiAgICBpbnRjXzIgLy8gMTAwMDAKICAgIDw9CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBhc3NlcnQgY29uZGl0aW9uCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MjIyCiAgICAvLyBzZWxmLl9yZXF1aXJlX2ZlZV93aXRoaW5fY2VpbGluZyhzZWxmLnByb3RvY29sX2ZlZV9icHMudmFsdWUsIHZhbHVlLmFzX3VpbnQ2NCgpKQogICAgaW50Y18zIC8vIDAKICAgIGJ5dGVjIDUgLy8gMHg3MDY2NjIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wcm90b2NvbF9mZWVfYnBzIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weTo3MwogICAgLy8gc2VsZi5fcmVxdWlyZShmZWVfYnBzIDw9IGNlaWxpbmdfYnBzKQogICAgZGlnIDEKICAgIDw9CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBhc3NlcnQgY29uZGl0aW9uCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MjIzCiAgICAvLyBzZWxmLnByb3RvY29sX2ZlZV9jZWlsaW5nX2Jwcy52YWx1ZSA9IHZhbHVlLmFzX3VpbnQ2NCgpCiAgICBieXRlYyA2IC8vIDB4NzA3MjZmNzQ2ZjYzNmY2YzVmNjY2NTY1NWY2MzY1Njk2YzY5NmU2NzVmNjI3MDczCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyMTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnByb3RvY29sX2NvbmZpZy5jb250cmFjdC5Qcm90b2NvbENvbmZpZy51cGRhdGVfcHJvdG9jb2xfdHJlYXN1cnlbcm91dGluZ10oKSAtPiB2b2lkOgp1cGRhdGVfcHJvdG9jb2xfdHJlYXN1cnk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjIyNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MjI3CiAgICAvLyBzZWxmLl9yZXF1aXJlX2FkbWluKCkKICAgIGNhbGxzdWIgX3JlcXVpcmVfYWRtaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MjI4CiAgICAvLyBzZWxmLnByb3RvY29sX3RyZWFzdXJ5LnZhbHVlID0gdmFsdWUuYnl0ZXMKICAgIGJ5dGVjIDE0IC8vIDB4NzA3NAogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MjI1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5wcm90b2NvbF9jb25maWcuY29udHJhY3QuUHJvdG9jb2xDb25maWcudXBkYXRlX21hcmtldF9mYWN0b3J5X2lkW3JvdXRpbmddKCkgLT4gdm9pZDoKdXBkYXRlX21hcmtldF9mYWN0b3J5X2lkOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjIzMgogICAgLy8gc2VsZi5fcmVxdWlyZV9hZG1pbigpCiAgICBjYWxsc3ViIF9yZXF1aXJlX2FkbWluCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjIzMwogICAgLy8gc2VsZi5tYXJrZXRfZmFjdG9yeV9pZC52YWx1ZSA9IHZhbHVlLmFzX3VpbnQ2NCgpCiAgICBidG9pCiAgICBieXRlYyAxNSAvLyAweDZkNjY2OQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MjMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5wcm90b2NvbF9jb25maWcuY29udHJhY3QuUHJvdG9jb2xDb25maWcudXBkYXRlX21heF9vdXRjb21lc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnVwZGF0ZV9tYXhfb3V0Y29tZXM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjIzNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MjM3CiAgICAvLyBzZWxmLl9yZXF1aXJlX2FkbWluKCkKICAgIGNhbGxzdWIgX3JlcXVpcmVfYWRtaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MjM4CiAgICAvLyBzZWxmLl9yZXF1aXJlKHZhbHVlLmFzX3VpbnQ2NCgpID49IFVJbnQ2NChNSU5fT1VUQ09NRVMpKQogICAgYnRvaQogICAgZHVwCiAgICBwdXNoaW50IDIKICAgID49CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBhc3NlcnQgY29uZGl0aW9uCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MjM5CiAgICAvLyBzZWxmLm1heF9vdXRjb21lcy52YWx1ZSA9IHZhbHVlLmFzX3VpbnQ2NCgpCiAgICBieXRlYyA3IC8vIDB4NmQ2MTc4NWY2Zjc1NzQ2MzZmNmQ2NTczCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyMzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnByb3RvY29sX2NvbmZpZy5jb250cmFjdC5Qcm90b2NvbENvbmZpZy51cGRhdGVfbWluX2NoYWxsZW5nZV93aW5kb3dfc2Vjc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnVwZGF0ZV9taW5fY2hhbGxlbmdlX3dpbmRvd19zZWNzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyNDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjI0MwogICAgLy8gc2VsZi5fcmVxdWlyZV9hZG1pbigpCiAgICBjYWxsc3ViIF9yZXF1aXJlX2FkbWluCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjI0NAogICAgLy8gc2VsZi5fcmVxdWlyZSh2YWx1ZS5hc191aW50NjQoKSA+IFVJbnQ2NCgwKSkKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6NjcKICAgIC8vIGFzc2VydCBjb25kaXRpb24KICAgIGR1cAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjI0NQogICAgLy8gc2VsZi5taW5fY2hhbGxlbmdlX3dpbmRvd19zZWNzLnZhbHVlID0gdmFsdWUuYXNfdWludDY0KCkKICAgIGJ5dGVjIDE2IC8vIDB4NmQ2Mzc3CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyNDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnByb3RvY29sX2NvbmZpZy5jb250cmFjdC5Qcm90b2NvbENvbmZpZy51cGRhdGVfbWluX2dyYWNlX3BlcmlvZF9zZWNzW3JvdXRpbmddKCkgLT4gdm9pZDoKdXBkYXRlX21pbl9ncmFjZV9wZXJpb2Rfc2VjczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MjQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyNDkKICAgIC8vIHNlbGYuX3JlcXVpcmVfYWRtaW4oKQogICAgY2FsbHN1YiBfcmVxdWlyZV9hZG1pbgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyNTAKICAgIC8vIHNlbGYuX3JlcXVpcmUodmFsdWUuYXNfdWludDY0KCkgPiBVSW50NjQoMCkpCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBhc3NlcnQgY29uZGl0aW9uCiAgICBkdXAKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyNTEKICAgIC8vIHNlbGYubWluX2dyYWNlX3BlcmlvZF9zZWNzLnZhbHVlID0gdmFsdWUuYXNfdWludDY0KCkKICAgIGJ5dGVjIDE3IC8vIDB4NmQ2OTZlNWY2NzcyNjE2MzY1NWY3MDY1NzI2OTZmNjQ1ZjczNjU2MzczCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyNDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnByb3RvY29sX2NvbmZpZy5jb250cmFjdC5Qcm90b2NvbENvbmZpZy51cGRhdGVfbWF4X2xwX2ZlZV9icHNbcm91dGluZ10oKSAtPiB2b2lkOgp1cGRhdGVfbWF4X2xwX2ZlZV9icHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjI1MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MjU1CiAgICAvLyBzZWxmLl9yZXF1aXJlX2FkbWluKCkKICAgIGNhbGxzdWIgX3JlcXVpcmVfYWRtaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MjU2CiAgICAvLyBzZWxmLl9yZXF1aXJlX2Jwcyh2YWx1ZS5hc191aW50NjQoKSkKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6NzYKICAgIC8vIHNlbGYuX3JlcXVpcmUodmFsdWUgPD0gVUludDY0KEJQU19ERU5PTUlOQVRPUikpCiAgICBkdXAKICAgIGludGNfMiAvLyAxMDAwMAogICAgPD0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6NjcKICAgIC8vIGFzc2VydCBjb25kaXRpb24KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyNTcKICAgIC8vIHNlbGYubWF4X2xwX2ZlZV9icHMudmFsdWUgPSB2YWx1ZS5hc191aW50NjQoKQogICAgYnl0ZWMgMTggLy8gMHg2ZDYxNzg1ZjZjNzA1ZjY2NjU2NTVmNjI3MDczCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyNTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnByb3RvY29sX2NvbmZpZy5jb250cmFjdC5Qcm90b2NvbENvbmZpZy51cGRhdGVfZGVmYXVsdF9yZXNpZHVhbF9saW5lYXJfbGFtYmRhX2ZwW3JvdXRpbmddKCkgLT4gdm9pZDoKdXBkYXRlX2RlZmF1bHRfcmVzaWR1YWxfbGluZWFyX2xhbWJkYV9mcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MjU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyNjEKICAgIC8vIHNlbGYuX3JlcXVpcmVfYWRtaW4oKQogICAgY2FsbHN1YiBfcmVxdWlyZV9hZG1pbgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyNjIKICAgIC8vIHNlbGYuX3JlcXVpcmUodmFsdWUuYXNfdWludDY0KCkgPD0gVUludDY0KFJFU0lEVUFMX1dFSUdIVF9TQ0FMRV9GUCkpCiAgICBidG9pCiAgICBkdXAKICAgIGludGMgNCAvLyAxMDAwMDAwCiAgICA8PQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weTo2NwogICAgLy8gYXNzZXJ0IGNvbmRpdGlvbgogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjI2MwogICAgLy8gc2VsZi5kZWZhdWx0X3Jlc2lkdWFsX2xpbmVhcl9sYW1iZGFfZnAudmFsdWUgPSB2YWx1ZS5hc191aW50NjQoKQogICAgYnl0ZWMgMTkgLy8gMHg3MjZjNjYKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjI1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMucHJvdG9jb2xfY29uZmlnLmNvbnRyYWN0LlByb3RvY29sQ29uZmlnLnVwZGF0ZV9tYXhfYWN0aXZlX2xwX3Y0X291dGNvbWVzW3JvdXRpbmddKCkgLT4gdm9pZDoKdXBkYXRlX21heF9hY3RpdmVfbHBfdjRfb3V0Y29tZXM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjI2NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MjY3CiAgICAvLyBzZWxmLl9yZXF1aXJlX2FkbWluKCkKICAgIGNhbGxzdWIgX3JlcXVpcmVfYWRtaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MjY4CiAgICAvLyBzZWxmLl9yZXF1aXJlKHZhbHVlLmFzX3VpbnQ2NCgpID49IFVJbnQ2NChNSU5fT1VUQ09NRVMpKQogICAgYnRvaQogICAgZHVwCiAgICBwdXNoaW50IDIKICAgID49CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBhc3NlcnQgY29uZGl0aW9uCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MjY5CiAgICAvLyBzZWxmLl9yZXF1aXJlKHZhbHVlLmFzX3VpbnQ2NCgpIDw9IHNlbGYubWF4X291dGNvbWVzLnZhbHVlKQogICAgaW50Y18zIC8vIDAKICAgIGJ5dGVjIDcgLy8gMHg2ZDYxNzg1ZjZmNzU3NDYzNmY2ZDY1NzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5tYXhfb3V0Y29tZXMgZXhpc3RzCiAgICBkaWcgMQogICAgPj0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6NjcKICAgIC8vIGFzc2VydCBjb25kaXRpb24KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyNzAKICAgIC8vIHNlbGYubWF4X2FjdGl2ZV9scF92NF9vdXRjb21lcy52YWx1ZSA9IHZhbHVlLmFzX3VpbnQ2NCgpCiAgICBieXRlYyAyMCAvLyAweDZkNjE3ODVmNjE2Mzc0Njk3NjY1NWY2YzcwNWY3NjM0NWY2Zjc1NzQ2MzZmNmQ2NTczCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyNjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnByb3RvY29sX2NvbmZpZy5jb250cmFjdC5Qcm90b2NvbENvbmZpZy5vcF91cFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wX3VwOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyNzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjI3OAogICAgLy8gY291bnRfdmFsID0gY291bnQuYXNfdWludDY0KCkKICAgIGJ0b2kKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weTo2NwogICAgLy8gYXNzZXJ0IGNvbmRpdGlvbgogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjI4MAogICAgLy8gdGFyZ2V0X2FwcF9pZCA9IFR4bi5hcHBsaWNhdGlvbnMoMSkuaWQKICAgIHR4bmEgQXBwbGljYXRpb25zIDEKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weTo2NwogICAgLy8gYXNzZXJ0IGNvbmRpdGlvbgogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjI4MwogICAgLy8gZm9yIF9pIGluIHVyYW5nZShjb3VudF92YWwpOgogICAgaW50Y18zIC8vIDAKCm9wX3VwX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6MjgzCiAgICAvLyBmb3IgX2kgaW4gdXJhbmdlKGNvdW50X3ZhbCk6CiAgICBkdXAKICAgIGRpZyAzCiAgICA8CiAgICBieiBvcF91cF9hZnRlcl9mb3JANgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyODQtMjg4CiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfaWQ9dGFyZ2V0X2FwcCwKICAgIC8vICAgICBvbl9jb21wbGV0aW9uPU9uQ29tcGxldGVBY3Rpb24uTm9PcCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6Mjg2CiAgICAvLyBvbl9jb21wbGV0aW9uPU9uQ29tcGxldGVBY3Rpb24uTm9PcCwKICAgIGludGNfMyAvLyBOb09wCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgZGlnIDEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyODQKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm90b2NvbF9jb25maWcvY29udHJhY3QucHk6Mjg3CiAgICAvLyBmZWU9MCwKICAgIGludGNfMyAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3RvY29sX2NvbmZpZy9jb250cmFjdC5weToyODQtMjg4CiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfaWQ9dGFyZ2V0X2FwcCwKICAgIC8vICAgICBvbl9jb21wbGV0aW9uPU9uQ29tcGxldGVBY3Rpb24uTm9PcCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjI4MwogICAgLy8gZm9yIF9pIGluIHVyYW5nZShjb3VudF92YWwpOgogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIG9wX3VwX2Zvcl9oZWFkZXJAMgoKb3BfdXBfYWZ0ZXJfZm9yQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjI3NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMucHJvdG9jb2xfY29uZmlnLmNvbnRyYWN0LlByb3RvY29sQ29uZmlnLl9yZXF1aXJlX2FkbWluKCkgLT4gdm9pZDoKX3JlcXVpcmVfYWRtaW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjcwCiAgICAvLyBzZWxmLl9yZXF1aXJlKFR4bi5zZW5kZXIuYnl0ZXMgPT0gc2VsZi5hZG1pbi52YWx1ZSkKICAgIHR4biBTZW5kZXIKICAgIGludGNfMyAvLyAwCiAgICBieXRlY18wIC8vICJhZG1pbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hZG1pbiBleGlzdHMKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvdG9jb2xfY29uZmlnL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBhc3NlcnQgY29uZGl0aW9uCiAgICBhc3NlcnQKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAFCAGQTgDAhD0mFQVhZG1pbgJjYgJwYgNjYmMDcGJjA3BmYhhwcm90b2NvbF9mZWVfY2VpbGluZ19icHMMbWF4X291dGNvbWVzFW1pbl9ib290c3RyYXBfZGVwb3NpdANjYmIDcGJiA3BmZANwZmYJZGVmYXVsdF9iAnB0A21maQNtY3cVbWluX2dyYWNlX3BlcmlvZF9zZWNzDm1heF9scF9mZWVfYnBzA3JsZhltYXhfYWN0aXZlX2xwX3Y0X291dGNvbWVzMRtBAMIxGRREMRhBAKuCFwRKFl7nBK5Qbh8EhBZ01QT1+D56BBo3LZcEJVKAeQTKDKkzBHUrvF4EyOF+SQQpZR2UBFcZYkIE5g7O9gSQapniBC3LQXoE6K9/EgS5jhgqBIOq8CAEs84HzARW7kstBLpcwIgERGOpYwS+8UvZBOg6h6s2GgCOFwG+AfQCBgIiAj8CVQJrAokCqAK+AtQC6AMDAyIDNANGA10DcQOFA5sDsgPSAAEAI0OABN99Gzw2GgCOAQAIADEZFDEYEEM2GgFJFYEgEkQ2GgJJFSISRDYaA0kVIhJENhoESRUiEkQ2GgVJFSISRDYaBkkVIhJENhoHSRUiEkQ2GghJFSISRDYaCUkVIhJENhoKSRUiEkQ2GgtJFSISRDYaDEkVIhJENhoNSRUiEkQ2Gg5JFYEgEkQ2Gg9JFYE4EkQ2Gg9JFYE4EkQ2Gg9JFYE4EkQ2Gg9JFYE4EkQ2Gg9JFYE4EkQ2Gg9JFYE4EkQ2Gg9JFYE4EkRPChdJRE8GIltJgQIPRE8GgRBbSURPBoEYW0lETxIXTw8XSwFESUsCD0RPEhdPEBdLAURJSwIPRE8SF0kkDkRPEhdJJA5ETxIXSSQORE8SF0kkDkRPEhdJJA5ETxIXSSQORE8QgSBbSSQORE8QgShbSSEEDkRPEIEwW0mBAg9ESUsQDkRLA0sFDkQoTxVnTxMXJwhMZylPDWcqTwtnJwlPCWcnCk8IZytPCWcnBE8IZycLTwdnJwxPBmcnDU8JZycFTwRnJwZPBGcnDk8IZ08GJVsnD0xnJwdPBmcnEE8FZycRTwRnJxJPA2cnE08CZycUTGcjQzYaAUkVgSASRIgCOkmAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE0QoTGcjQzYaAUkVIhJEiAIFFycITGcjQzYaAUkVIhJEiAHzFyUrZURLAURLAQ9EKUxnI0M2GgFJFSISRIgB1xclJwRlREsBREsBD0QqTGcjQzYaAUkVIhJEiAG6F0kkDkQnCUxnI0M2GgFJFSISRIgBpBdJJA5EJwpMZyNDNhoBSRUiEkSIAY4lKWVETBdLAURJTwIPRCtMZyNDNhoBSRUiEkSIAXAlKmVETBdLAURJTwIPRCcETGcjQzYaAUkVIhJEiAFRF0kkDkQnC0xnI0M2GgFJFSISRIgBOxdJJA5EJwxMZyNDNhoBSRUiEkSIASUXSUQnDUxnI0M2GgFJFSISRIgBERclJwZlREsBD0QnBUxnI0M2GgFJFSISRIgA9hdJJA5EJScFZURLAQ5EJwZMZyNDNhoBSRWBIBJEiADWJw5MZyNDNhoBSRUiEkSIAMUXJw9MZyNDNhoBSRUiEkSIALMXSYECD0QnB0xnI0M2GgFJFSISRIgAnBdJRCcQTGcjQzYaAUkVIhJEiACIF0lEJxFMZyNDNhoBSRUiEkSIAHQXSSQORCcSTGcjQzYaAUkVIhJEiABeF0khBA5EJxNMZyNDNhoBSRUiEkSIAEcXSYECD0QlJwdlREsBD0QnFExnI0M2GgFJFSISRBdJRDYyAUlEJUlLAwxBABixJbIZSwGyGIEGshAlsgGzSSMIRQFC/+EjQzEAJShlRBJEiQ==", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 7, "patch": 1 } }, "events": [], "templateVariables": {} }