{ "name": "AlgoCdtStable", "structs": {}, "methods": [ { "name": "create_asa", "args": [ { "type": "string", "name": "name_" }, { "type": "string", "name": "symbol_" }, { "type": "uint64", "name": "decimals_" }, { "type": "uint64", "name": "cap_" }, { "type": "address", "name": "reserve_addr" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "set_asset", "args": [ { "type": "uint64", "name": "asset_id_" }, { "type": "address", "name": "reserve_addr_" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "mint", "args": [ { "type": "address", "name": "to" }, { "type": "uint64", "name": "amount" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "burn", "args": [ { "type": "uint64", "name": "amount" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "burn_from", "args": [ { "type": "address", "name": "account" }, { "type": "uint64", "name": "amount" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "transfer", "args": [ { "type": "address", "name": "to" }, { "type": "uint64", "name": "amount" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "transfer_from", "args": [ { "type": "address", "name": "from_" }, { "type": "address", "name": "to" }, { "type": "uint64", "name": "amount" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "approve", "args": [ { "type": "address", "name": "spender" }, { "type": "uint64", "name": "amount" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "allowance", "args": [ { "type": "address", "name": "owner" }, { "type": "address", "name": "spender" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "balance_of", "args": [ { "type": "address", "name": "account" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "add_minter", "args": [ { "type": "address", "name": "account" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "remove_minter", "args": [ { "type": "address", "name": "account" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "is_minter", "args": [ { "type": "address", "name": "account" } ], "returns": { "type": "bool" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "get_total_supply", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "get_cap", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "set_reserve", "args": [ { "type": "address", "name": "reserve_addr_" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 4, "bytes": 5 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "asset_id": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YXNzZXRfaWQ=" }, "name": { "keyType": "AVMString", "valueType": "AVMString", "key": "bmFtZQ==" }, "symbol": { "keyType": "AVMString", "valueType": "AVMString", "key": "c3ltYm9s" }, "decimals": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "ZGVjaW1hbHM=" }, "total_supply": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dG90YWxfc3VwcGx5" }, "cap": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Y2Fw" }, "reserve_addr": { "keyType": "AVMString", "valueType": "address", "key": "cmVzZXJ2ZV9hZGRy" }, "allowances": { "keyType": "AVMString", "valueType": "(address,(address,uint64)[])[]", "key": "YWxsb3dhbmNlcw==" }, "minters": { "keyType": "AVMString", "valueType": "address[]", "key": "bWludGVycw==" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 613 ], "errorMessage": "Burn amount exceeds allowance" }, { "pc": [ 516, 807, 853 ], "errorMessage": "Caller is not a minter" }, { "pc": [ 857 ], "errorMessage": "Cannot remove self" }, { "pc": [ 532 ], "errorMessage": "Cap exceeded" }, { "pc": [ 109 ], "errorMessage": "OnCompletion must be NoOp" }, { "pc": [ 240 ], "errorMessage": "OnCompletion must be NoOp && can only call when creating" }, { "pc": [ 308 ], "errorMessage": "Only deployer can create ASA" }, { "pc": [ 465 ], "errorMessage": "Only deployer can set asset" }, { "pc": [ 994 ], "errorMessage": "Only deployer can set reserve" }, { "pc": [ 696 ], "errorMessage": "Transfer amount exceeds allowance" }, { "pc": [ 1185, 1204, 1273, 1420, 1654, 1669, 1730 ], "errorMessage": "check self.allowances exists" }, { "pc": [ 542, 1020, 1052 ], "errorMessage": "check self.asset_id exists" }, { "pc": [ 528, 972 ], "errorMessage": "check self.cap exists" }, { "pc": [ 817, 867, 1789 ], "errorMessage": "check self.minters exists" }, { "pc": [ 520, 959, 1007 ], "errorMessage": "check self.total_supply exists" }, { "pc": [ 888, 1119, 1145, 1234, 1283, 1612, 1699, 1746, 1811 ], "errorMessage": "index access is out of bounds" }, { "pc": [ 248, 264, 869, 1094, 1187, 1211, 1276, 1590, 1656, 1676, 1737, 1791 ], "errorMessage": "invalid array length header" }, { "pc": [ 255, 271 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 302, 459, 500, 591, 639, 666, 674, 722, 749, 757, 775, 801, 847, 938, 988 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 283, 293, 450, 509, 574, 600, 648, 683, 731 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 91, 821, 903, 1168 ], "errorMessage": "max array length exceeded" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMzIgMgogICAgYnl0ZWNibG9jayAiYWxsb3dhbmNlcyIgIm1pbnRlcnMiICJ0b3RhbF9zdXBwbHkiICJhc3NldF9pZCIgMHgxNTFmN2M3NSAweDAwMDAgImNhcCIgInJlc2VydmVfYWRkciIgMHgwMDIyCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToyOAogICAgLy8gc2VsZi5hbGxvd2FuY2VzID0gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5UdXBsZVthcmM0LkFkZHJlc3MsIGFyYzQuRHluYW1pY0FycmF5W2FyYzQuVHVwbGVbYXJjNC5BZGRyZXNzLCBVSW50NjRdXV1dKCkKICAgIGJ5dGVjXzAgLy8gImFsbG93YW5jZXMiCiAgICBieXRlYyA1IC8vIDB4MDAwMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjI5CiAgICAvLyBzZWxmLm1pbnRlcnMgPSBhcmM0LkR5bmFtaWNBcnJheVthcmM0LkFkZHJlc3NdKCkKICAgIGJ5dGVjIDUgLy8gMHgwMDAwCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTozMC0zMQogICAgLy8gIyBBZGQgZGVwbG95ZXIgYXMgaW5pdGlhbCBtaW50ZXIKICAgIC8vIHNlbGYubWludGVycy5hcHBlbmQoYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpKQogICAgdHhuIFNlbmRlcgogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICBwdXNoYnl0ZXMgMHgwMDAxCiAgICByZXBsYWNlMiAwCiAgICBieXRlY18xIC8vICJtaW50ZXJzIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTUKICAgIC8vIGNsYXNzIEFsZ29DZHRTdGFibGUoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDI1CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweDFhMmQ1YjJlIDB4MTI1OWZlZTIgMHg0ODIwYjQ3OCAweDdmMWQ0M2UxIDB4ZDgxOGNlOGIgMHg5ZmVlNzQxOCAweDU4OWJjM2ZhIDB4ZWUxZDU4YjMgMHg0NjdiYzdhNCAweDhhNzc3ODM5IDB4ZWQzMGQ5NjggMHg0ODBkZjcxYSAweGEyNmRiMWM0IDB4NDY5MDkzNTUgMHhmNDVhYjg4ZSAweGIxYzliYWE0IC8vIG1ldGhvZCAiY3JlYXRlX2FzYShzdHJpbmcsc3RyaW5nLHVpbnQ2NCx1aW50NjQsYWRkcmVzcyl1aW50NjQiLCBtZXRob2QgInNldF9hc3NldCh1aW50NjQsYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJtaW50KGFkZHJlc3MsdWludDY0KXZvaWQiLCBtZXRob2QgImJ1cm4odWludDY0KXZvaWQiLCBtZXRob2QgImJ1cm5fZnJvbShhZGRyZXNzLHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJ0cmFuc2ZlcihhZGRyZXNzLHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJ0cmFuc2Zlcl9mcm9tKGFkZHJlc3MsYWRkcmVzcyx1aW50NjQpdm9pZCIsIG1ldGhvZCAiYXBwcm92ZShhZGRyZXNzLHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJhbGxvd2FuY2UoYWRkcmVzcyxhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAiYmFsYW5jZV9vZihhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAiYWRkX21pbnRlcihhZGRyZXNzKXZvaWQiLCBtZXRob2QgInJlbW92ZV9taW50ZXIoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJpc19taW50ZXIoYWRkcmVzcylib29sIiwgbWV0aG9kICJnZXRfdG90YWxfc3VwcGx5KCl1aW50NjQiLCBtZXRob2QgImdldF9jYXAoKXVpbnQ2NCIsIG1ldGhvZCAic2V0X3Jlc2VydmUoYWRkcmVzcyl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggY3JlYXRlX2FzYSBzZXRfYXNzZXQgbWludCBidXJuIGJ1cm5fZnJvbSB0cmFuc2ZlciB0cmFuc2Zlcl9mcm9tIGFwcHJvdmUgYWxsb3dhbmNlIGJhbGFuY2Vfb2YgYWRkX21pbnRlciByZW1vdmVfbWludGVyIGlzX21pbnRlciBnZXRfdG90YWxfc3VwcGx5IGdldF9jYXAgc2V0X3Jlc2VydmUKICAgIGVycgoKbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAyNToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29fY2R0X3N0YWJsZS5jb250cmFjdC5BbGdvQ2R0U3RhYmxlLmNyZWF0ZV9hc2Fbcm91dGluZ10oKSAtPiB2b2lkOgpjcmVhdGVfYXNhOgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MzMKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18zIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjQyLTQzCiAgICAvLyAjIE9ubHkgZGVwbG95ZXIgY2FuIGNyZWF0ZSBBU0EKICAgIC8vIGFzc2VydCBhcmM0LkFkZHJlc3MoVHhuLnNlbmRlcikgPT0gYXJjNC5BZGRyZXNzKEdsb2JhbC5jcmVhdG9yX2FkZHJlc3MpLCAiT25seSBkZXBsb3llciBjYW4gY3JlYXRlIEFTQSIKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBPbmx5IGRlcGxveWVyIGNhbiBjcmVhdGUgQVNBCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTo0NQogICAgLy8gc2VsZi5uYW1lID0gbmFtZV8KICAgIHB1c2hieXRlcyAibmFtZSIKICAgIGRpZyA1CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6NDYKICAgIC8vIHNlbGYuc3ltYm9sID0gc3ltYm9sXwogICAgcHVzaGJ5dGVzICJzeW1ib2wiCiAgICBkaWcgNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjQ3CiAgICAvLyBzZWxmLmRlY2ltYWxzID0gZGVjaW1hbHNfCiAgICBwdXNoYnl0ZXMgImRlY2ltYWxzIgogICAgZGlnIDMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTo0OAogICAgLy8gc2VsZi5jYXAgPSBjYXBfCiAgICBieXRlYyA2IC8vICJjYXAiCiAgICBkaWcgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjQ5CiAgICAvLyBzZWxmLnJlc2VydmVfYWRkciA9IHJlc2VydmVfYWRkcgogICAgYnl0ZWMgNyAvLyAicmVzZXJ2ZV9hZGRyIgogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTo1MAogICAgLy8gc2VsZi50b3RhbF9zdXBwbHkgPSBVSW50NjQoMCkKICAgIGJ5dGVjXzIgLy8gInRvdGFsX3N1cHBseSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6NTItNjUKICAgIC8vICMgQ3JlYXRlIEFTQSB3aXRoIHRvdGFsID0gY2FwLCBjbGF3YmFjayA9IGFwcCwgcmVzZXJ2ZSA9IHJlc2VydmVfYWRkcgogICAgLy8gcmVzdWx0ID0gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICB0b3RhbD1jYXBfLAogICAgLy8gICAgIGRlY2ltYWxzPWRlY2ltYWxzXywKICAgIC8vICAgICBkZWZhdWx0X2Zyb3plbj1GYWxzZSwKICAgIC8vICAgICB1bml0X25hbWU9c3ltYm9sXywKICAgIC8vICAgICBhc3NldF9uYW1lPW5hbWVfLAogICAgLy8gICAgIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlPXJlc2VydmVfYWRkci5uYXRpdmUsCiAgICAvLyAgICAgZnJlZXplPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgY2xhd2JhY2s9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICB1cmw9Imh0dHBzOi8vY2FzYWRvdG9rZW4uY29tLmJyLyIsCiAgICAvLyAgICAgZmVlPUdsb2JhbC5taW5fdHhuX2ZlZSwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjY0CiAgICAvLyBmZWU9R2xvYmFsLm1pbl90eG5fZmVlLAogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6NTkKICAgIC8vIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTo2MS02MgogICAgLy8gZnJlZXplPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyBjbGF3YmFjaz1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZHVwbiAyCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTo2MwogICAgLy8gdXJsPSJodHRwczovL2Nhc2Fkb3Rva2VuLmNvbS5ici8iLAogICAgcHVzaGJ5dGVzICJodHRwczovL2Nhc2Fkb3Rva2VuLmNvbS5ici8iCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRGcmVlemUKICAgIHVuY292ZXIgMgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICB1bmNvdmVyIDQKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICB1bmNvdmVyIDMKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6NTYKICAgIC8vIGRlZmF1bHRfZnJvemVuPUZhbHNlLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWZhdWx0RnJvemVuCiAgICB1bmNvdmVyIDIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgc3dhcAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTo1Mi01MwogICAgLy8gIyBDcmVhdGUgQVNBIHdpdGggdG90YWwgPSBjYXAsIGNsYXdiYWNrID0gYXBwLCByZXNlcnZlID0gcmVzZXJ2ZV9hZGRyCiAgICAvLyByZXN1bHQgPSBpdHhuLkFzc2V0Q29uZmlnKAogICAgcHVzaGludCAzIC8vIGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTo1Mi02NQogICAgLy8gIyBDcmVhdGUgQVNBIHdpdGggdG90YWwgPSBjYXAsIGNsYXdiYWNrID0gYXBwLCByZXNlcnZlID0gcmVzZXJ2ZV9hZGRyCiAgICAvLyByZXN1bHQgPSBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIHRvdGFsPWNhcF8sCiAgICAvLyAgICAgZGVjaW1hbHM9ZGVjaW1hbHNfLAogICAgLy8gICAgIGRlZmF1bHRfZnJvemVuPUZhbHNlLAogICAgLy8gICAgIHVuaXRfbmFtZT1zeW1ib2xfLAogICAgLy8gICAgIGFzc2V0X25hbWU9bmFtZV8sCiAgICAvLyAgICAgbWFuYWdlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU9cmVzZXJ2ZV9hZGRyLm5hdGl2ZSwKICAgIC8vICAgICBmcmVlemU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBjbGF3YmFjaz1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIHVybD0iaHR0cHM6Ly9jYXNhZG90b2tlbi5jb20uYnIvIiwKICAgIC8vICAgICBmZWU9R2xvYmFsLm1pbl90eG5fZmVlLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjY3LTY4CiAgICAvLyAjIElEIGRvIEFTQSBjcmlhZG8gcGVsYSBpbm5lciB0eAogICAgLy8gc2VsZi5hc3NldF9pZCA9IHJlc3VsdC5jcmVhdGVkX2Fzc2V0LmlkCiAgICBieXRlY18zIC8vICJhc3NldF9pZCIKICAgIGRpZyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MzMKICAgIC8vIEBhYmltZXRob2QoKQogICAgaXRvYgogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvX2NkdF9zdGFibGUuY29udHJhY3QuQWxnb0NkdFN0YWJsZS5zZXRfYXNzZXRbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRfYXNzZXQ6CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTo3MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5Ojc0LTc1CiAgICAvLyAjIE9ubHkgZGVwbG95ZXIgY2FuIHNldCBhc3NldAogICAgLy8gYXNzZXJ0IGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSA9PSBhcmM0LkFkZHJlc3MoR2xvYmFsLmNyZWF0b3JfYWRkcmVzcyksICJPbmx5IGRlcGxveWVyIGNhbiBzZXQgYXNzZXQiCiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gT25seSBkZXBsb3llciBjYW4gc2V0IGFzc2V0CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTo3NwogICAgLy8gc2VsZi5hc3NldF9pZCA9IGFzc2V0X2lkXwogICAgYnl0ZWNfMyAvLyAiYXNzZXRfaWQiCiAgICBkaWcgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5Ojc4CiAgICAvLyBzZWxmLnJlc2VydmVfYWRkciA9IHJlc2VydmVfYWRkcl8KICAgIGJ5dGVjIDcgLy8gInJlc2VydmVfYWRkciIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTo4MC04NQogICAgLy8gIyBSZWNvbmZpZ3VyZSBBU0EgKGV4LjogZ2FyYW50aXIgY2xhd2JhY2sgPSBhcHApCiAgICAvLyBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIGNvbmZpZ19hc3NldD1hc3NldF9pZF8sCiAgICAvLyAgICAgY2xhd2JhY2s9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBmZWU9R2xvYmFsLm1pbl90eG5fZmVlLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6ODQKICAgIC8vIGZlZT1HbG9iYWwubWluX3R4bl9mZWUsCiAgICBnbG9iYWwgTWluVHhuRmVlCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTo4MwogICAgLy8gY2xhd2JhY2s9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKICAgIHN3YXAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXQKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjgwLTgxCiAgICAvLyAjIFJlY29uZmlndXJlIEFTQSAoZXguOiBnYXJhbnRpciBjbGF3YmFjayA9IGFwcCkKICAgIC8vIGl0eG4uQXNzZXRDb25maWcoCiAgICBwdXNoaW50IDMgLy8gYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjgwLTg1CiAgICAvLyAjIFJlY29uZmlndXJlIEFTQSAoZXguOiBnYXJhbnRpciBjbGF3YmFjayA9IGFwcCkKICAgIC8vIGl0eG4uQXNzZXRDb25maWcoCiAgICAvLyAgICAgY29uZmlnX2Fzc2V0PWFzc2V0X2lkXywKICAgIC8vICAgICBjbGF3YmFjaz1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGZlZT1HbG9iYWwubWluX3R4bl9mZWUsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6NzIKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvX2NkdF9zdGFibGUuY29udHJhY3QuQWxnb0NkdFN0YWJsZS5taW50W3JvdXRpbmddKCkgLT4gdm9pZDoKbWludDoKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5Ojg3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6ODkKICAgIC8vIGFzc2VydCBzZWxmLl9pc19taW50ZXIoYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpKSwgIkNhbGxlciBpcyBub3QgYSBtaW50ZXIiCiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIF9pc19taW50ZXIKICAgIGFzc2VydCAvLyBDYWxsZXIgaXMgbm90IGEgbWludGVyCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTo5NAogICAgLy8gYXNzZXJ0IHNlbGYudG90YWxfc3VwcGx5ICsgYW1vdW50IDw9IHNlbGYuY2FwLCAiQ2FwIGV4Y2VlZGVkIgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gInRvdGFsX3N1cHBseSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9zdXBwbHkgZXhpc3RzCiAgICBkaWcgMQogICAgKwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImNhcCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jYXAgZXhpc3RzCiAgICBkaWcgMQogICAgPj0KICAgIGFzc2VydCAvLyBDYXAgZXhjZWVkZWQKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5Ojk1CiAgICAvLyBzZWxmLnRvdGFsX3N1cHBseSArPSBhbW91bnQKICAgIGJ5dGVjXzIgLy8gInRvdGFsX3N1cHBseSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTo5Ny0xMDQKICAgIC8vICMgTWludCB2aWEgY2xhd2JhY2sgdHJhbnNmZXIgZnJvbSB0aGUgYXBwIGVzY3JvdyB0byB0aGUgcmVjaXBpZW50CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFzc2V0X2lkLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1hbW91bnQsCiAgICAvLyAgICAgYXNzZXRfc2VuZGVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9dG8ubmF0aXZlLAogICAgLy8gICAgIGZlZT1HbG9iYWwubWluX3R4bl9mZWUsICAjIGltcG9ydGFudGUKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjEwMwogICAgLy8gZmVlPUdsb2JhbC5taW5fdHhuX2ZlZSwgICMgaW1wb3J0YW50ZQogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6OTkKICAgIC8vIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJhc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldF9pZCBleGlzdHMKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjEwMQogICAgLy8gYXNzZXRfc2VuZGVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgdW5jb3ZlciA0CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQXNzZXRTZW5kZXIKICAgIHVuY292ZXIgMgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5Ojk3LTk4CiAgICAvLyAjIE1pbnQgdmlhIGNsYXdiYWNrIHRyYW5zZmVyIGZyb20gdGhlIGFwcCBlc2Nyb3cgdG8gdGhlIHJlY2lwaWVudAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgcHVzaGludCA0IC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6OTctMTA0CiAgICAvLyAjIE1pbnQgdmlhIGNsYXdiYWNrIHRyYW5zZmVyIGZyb20gdGhlIGFwcCBlc2Nyb3cgdG8gdGhlIHJlY2lwaWVudAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9YW1vdW50LAogICAgLy8gICAgIGFzc2V0X3NlbmRlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPXRvLm5hdGl2ZSwKICAgIC8vICAgICBmZWU9R2xvYmFsLm1pbl90eG5fZmVlLCAgIyBpbXBvcnRhbnRlCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6ODcKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvX2NkdF9zdGFibGUuY29udHJhY3QuQWxnb0NkdFN0YWJsZS5idXJuW3JvdXRpbmddKCkgLT4gdm9pZDoKYnVybjoKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjEwNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxMDgKICAgIC8vIHNlbGYuX2J1cm4oYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLCBhbW91bnQpCiAgICB0eG4gU2VuZGVyCiAgICBzd2FwCiAgICBjYWxsc3ViIF9idXJuCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxMDYKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvX2NkdF9zdGFibGUuY29udHJhY3QuQWxnb0NkdFN0YWJsZS5idXJuX2Zyb21bcm91dGluZ10oKSAtPiB2b2lkOgpidXJuX2Zyb206CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxMTAKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxMTIKICAgIC8vIGFsbG93YW5jZSA9IHNlbGYuX2dldF9hbGxvd2FuY2UoYWNjb3VudCwgYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpKQogICAgZGlnIDEKICAgIHR4biBTZW5kZXIKICAgIGNhbGxzdWIgX2dldF9hbGxvd2FuY2UKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjExMwogICAgLy8gYXNzZXJ0IGFsbG93YW5jZSA+PSBhbW91bnQsICJCdXJuIGFtb3VudCBleGNlZWRzIGFsbG93YW5jZSIKICAgIGR1cAogICAgZGlnIDIKICAgID49CiAgICBhc3NlcnQgLy8gQnVybiBhbW91bnQgZXhjZWVkcyBhbGxvd2FuY2UKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjExNAogICAgLy8gc2VsZi5fYXBwcm92ZShhY2NvdW50LCBhcmM0LkFkZHJlc3MoVHhuLnNlbmRlciksIGFsbG93YW5jZSAtIGFtb3VudCkKICAgIHR4biBTZW5kZXIKICAgIHN3YXAKICAgIGRpZyAyCiAgICAtCiAgICBkaWcgMwogICAgY292ZXIgMgogICAgY2FsbHN1YiBfYXBwcm92ZQogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTE1CiAgICAvLyBzZWxmLl9idXJuKGFjY291bnQsIGFtb3VudCkKICAgIGNhbGxzdWIgX2J1cm4KICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjExMAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29fY2R0X3N0YWJsZS5jb250cmFjdC5BbGdvQ2R0U3RhYmxlLnRyYW5zZmVyW3JvdXRpbmddKCkgLT4gdm9pZDoKdHJhbnNmZXI6CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxMzAKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxMzIKICAgIC8vIHNlbGYuX3RyYW5zZmVyKGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwgdG8sIGFtb3VudCkKICAgIHR4biBTZW5kZXIKICAgIGNvdmVyIDIKICAgIGNhbGxzdWIgX3RyYW5zZmVyCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxMzAKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvX2NkdF9zdGFibGUuY29udHJhY3QuQWxnb0NkdFN0YWJsZS50cmFuc2Zlcl9mcm9tW3JvdXRpbmddKCkgLT4gdm9pZDoKdHJhbnNmZXJfZnJvbToKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjEzNAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTM2CiAgICAvLyBhbGxvd2FuY2UgPSBzZWxmLl9nZXRfYWxsb3dhbmNlKGZyb21fLCBhcmM0LkFkZHJlc3MoVHhuLnNlbmRlcikpCiAgICBkaWcgMgogICAgdHhuIFNlbmRlcgogICAgY2FsbHN1YiBfZ2V0X2FsbG93YW5jZQogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTM3CiAgICAvLyBhc3NlcnQgYWxsb3dhbmNlID49IGFtb3VudCwgIlRyYW5zZmVyIGFtb3VudCBleGNlZWRzIGFsbG93YW5jZSIKICAgIGR1cAogICAgZGlnIDIKICAgID49CiAgICBhc3NlcnQgLy8gVHJhbnNmZXIgYW1vdW50IGV4Y2VlZHMgYWxsb3dhbmNlCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxMzgKICAgIC8vIHNlbGYuX2FwcHJvdmUoZnJvbV8sIGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwgYWxsb3dhbmNlIC0gYW1vdW50KQogICAgdHhuIFNlbmRlcgogICAgc3dhcAogICAgZGlnIDIKICAgIC0KICAgIGRpZyA0CiAgICBjb3ZlciAyCiAgICBjYWxsc3ViIF9hcHByb3ZlCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxMzkKICAgIC8vIHNlbGYuX3RyYW5zZmVyKGZyb21fLCB0bywgYW1vdW50KQogICAgY2FsbHN1YiBfdHJhbnNmZXIKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjEzNAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29fY2R0X3N0YWJsZS5jb250cmFjdC5BbGdvQ2R0U3RhYmxlLmFwcHJvdmVbcm91dGluZ10oKSAtPiB2b2lkOgphcHByb3ZlOgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTUyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTU0CiAgICAvLyBzZWxmLl9hcHByb3ZlKGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwgc3BlbmRlciwgYW1vdW50KQogICAgdHhuIFNlbmRlcgogICAgY292ZXIgMgogICAgY2FsbHN1YiBfYXBwcm92ZQogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTUyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb19jZHRfc3RhYmxlLmNvbnRyYWN0LkFsZ29DZHRTdGFibGUuYWxsb3dhbmNlW3JvdXRpbmddKCkgLT4gdm9pZDoKYWxsb3dhbmNlOgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTc2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxNzgKICAgIC8vIHJldHVybiBzZWxmLl9nZXRfYWxsb3dhbmNlKG93bmVyLCBzcGVuZGVyKQogICAgY2FsbHN1YiBfZ2V0X2FsbG93YW5jZQogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTc2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGl0b2IKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb19jZHRfc3RhYmxlLmNvbnRyYWN0LkFsZ29DZHRTdGFibGUuYmFsYW5jZV9vZltyb3V0aW5nXSgpIC0+IHZvaWQ6CmJhbGFuY2Vfb2Y6CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxOTUKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAwMDAwCiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb19jZHRfc3RhYmxlLmNvbnRyYWN0LkFsZ29DZHRTdGFibGUuYWRkX21pbnRlcltyb3V0aW5nXSgpIC0+IHZvaWQ6CmFkZF9taW50ZXI6CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToyMDAKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwbiAyCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToyMDIKICAgIC8vIGFzc2VydCBzZWxmLl9pc19taW50ZXIoYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpKSwgIkNhbGxlciBpcyBub3QgYSBtaW50ZXIiCiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIF9pc19taW50ZXIKICAgIGFzc2VydCAvLyBDYWxsZXIgaXMgbm90IGEgbWludGVyCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToyMDMKICAgIC8vIGlmIG5vdCBzZWxmLl9pc19taW50ZXIoYWNjb3VudCk6CiAgICBjYWxsc3ViIF9pc19taW50ZXIKICAgIGJueiBhZGRfbWludGVyX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjA0CiAgICAvLyBzZWxmLm1pbnRlcnMuYXBwZW5kKGFjY291bnQpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibWludGVycyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5taW50ZXJzIGV4aXN0cwogICAgZHVwCiAgICBkaWcgMgogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcmVwbGFjZTIgMAogICAgYnl0ZWNfMSAvLyAibWludGVycyIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgphZGRfbWludGVyX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjIwMAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29fY2R0X3N0YWJsZS5jb250cmFjdC5BbGdvQ2R0U3RhYmxlLnJlbW92ZV9taW50ZXJbcm91dGluZ10oKSAtPiB2b2lkOgpyZW1vdmVfbWludGVyOgogICAgaW50Y18wIC8vIDAKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjIwNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXBuIDIKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjIwOAogICAgLy8gYXNzZXJ0IHNlbGYuX2lzX21pbnRlcihhcmM0LkFkZHJlc3MoVHhuLnNlbmRlcikpLCAiQ2FsbGVyIGlzIG5vdCBhIG1pbnRlciIKICAgIHR4biBTZW5kZXIKICAgIGNhbGxzdWIgX2lzX21pbnRlcgogICAgYXNzZXJ0IC8vIENhbGxlciBpcyBub3QgYSBtaW50ZXIKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjIwOQogICAgLy8gYXNzZXJ0IGFjY291bnQgIT0gYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLCAiQ2Fubm90IHJlbW92ZSBzZWxmIgogICAgdHhuIFNlbmRlcgogICAgIT0KICAgIGFzc2VydCAvLyBDYW5ub3QgcmVtb3ZlIHNlbGYKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjIxMAogICAgLy8gbmV3X21pbnRlcnMgPSBhcmM0LkR5bmFtaWNBcnJheVthcmM0LkFkZHJlc3NdKCkKICAgIGJ5dGVjIDUgLy8gMHgwMDAwCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToyMTEKICAgIC8vIGZvciBtaW50ZXIgaW4gc2VsZi5taW50ZXJzOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gIm1pbnRlcnMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1pbnRlcnMgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18wIC8vIDAKCnJlbW92ZV9taW50ZXJfZm9yX2hlYWRlckAyOgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjExCiAgICAvLyBmb3IgbWludGVyIGluIHNlbGYubWludGVyczoKICAgIGR1cAogICAgZGlnIDIKICAgIDwKICAgIGJ6IHJlbW92ZV9taW50ZXJfYWZ0ZXJfZm9yQDcKICAgIGRpZyAyCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGludGNfMiAvLyAzMgogICAgKgogICAgaW50Y18yIC8vIDMyCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgYnVyeSA3CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToyMTIKICAgIC8vIGlmIG1pbnRlciAhPSBhY2NvdW50OgogICAgZGlnIDUKICAgICE9CiAgICBieiByZW1vdmVfbWludGVyX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjEzCiAgICAvLyBuZXdfbWludGVycy5hcHBlbmQobWludGVyKQogICAgZGlnIDMKICAgIGR1cAogICAgZGlnIDcKICAgIGNvbmNhdCAvLyBvbiBlcnJvcjogbWF4IGFycmF5IGxlbmd0aCBleGNlZWRlZAogICAgc3dhcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHJlcGxhY2UyIDAKICAgIGJ1cnkgNAoKcmVtb3ZlX21pbnRlcl9hZnRlcl9pZl9lbHNlQDU6CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgcmVtb3ZlX21pbnRlcl9mb3JfaGVhZGVyQDIKCnJlbW92ZV9taW50ZXJfYWZ0ZXJfZm9yQDc6CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToyMTQKICAgIC8vIHNlbGYubWludGVycyA9IG5ld19taW50ZXJzLmNvcHkoKQogICAgYnl0ZWNfMSAvLyAibWludGVycyIKICAgIGRpZyA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjA2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb19jZHRfc3RhYmxlLmNvbnRyYWN0LkFsZ29DZHRTdGFibGUuaXNfbWludGVyW3JvdXRpbmddKCkgLT4gdm9pZDoKaXNfbWludGVyOgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjE2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjE4CiAgICAvLyByZXR1cm4gc2VsZi5faXNfbWludGVyKGFjY291bnQpCiAgICBjYWxsc3ViIF9pc19taW50ZXIKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjIxNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBwdXNoYnl0ZXMgMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29fY2R0X3N0YWJsZS5jb250cmFjdC5BbGdvQ2R0U3RhYmxlLmdldF90b3RhbF9zdXBwbHlbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfdG90YWxfc3VwcGx5OgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjI5CiAgICAvLyByZXR1cm4gc2VsZi50b3RhbF9zdXBwbHkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJ0b3RhbF9zdXBwbHkiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfc3VwcGx5IGV4aXN0cwogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjI3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGl0b2IKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb19jZHRfc3RhYmxlLmNvbnRyYWN0LkFsZ29DZHRTdGFibGUuZ2V0X2NhcFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9jYXA6CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToyMzMKICAgIC8vIHJldHVybiBzZWxmLmNhcAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImNhcCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jYXAgZXhpc3RzCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToyMzEKICAgIC8vIEBhYmltZXRob2QoKQogICAgaXRvYgogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvX2NkdF9zdGFibGUuY29udHJhY3QuQWxnb0NkdFN0YWJsZS5zZXRfcmVzZXJ2ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldF9yZXNlcnZlOgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjM1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjM3LTIzOAogICAgLy8gIyBPbmx5IGRlcGxveWVyIGNhbiBzZXQgcmVzZXJ2ZQogICAgLy8gYXNzZXJ0IGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSA9PSBhcmM0LkFkZHJlc3MoR2xvYmFsLmNyZWF0b3JfYWRkcmVzcyksICJPbmx5IGRlcGxveWVyIGNhbiBzZXQgcmVzZXJ2ZSIKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBPbmx5IGRlcGxveWVyIGNhbiBzZXQgcmVzZXJ2ZQogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjM5CiAgICAvLyBzZWxmLnJlc2VydmVfYWRkciA9IHJlc2VydmVfYWRkcl8KICAgIGJ5dGVjIDcgLy8gInJlc2VydmVfYWRkciIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToyMzUKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvX2NkdF9zdGFibGUuY29udHJhY3QuQWxnb0NkdFN0YWJsZS5fYnVybihhY2NvdW50OiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6Cl9idXJuOgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTE3LTExOAogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfYnVybihzZWxmLCBhY2NvdW50OiBhcmM0LkFkZHJlc3MsIGFtb3VudDogVUludDY0KSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxMTkKICAgIC8vIHNlbGYudG90YWxfc3VwcGx5IC09IGFtb3VudAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gInRvdGFsX3N1cHBseSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9zdXBwbHkgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgIC0KICAgIGJ5dGVjXzIgLy8gInRvdGFsX3N1cHBseSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxMjEtMTI4CiAgICAvLyAjIEJ1cm4gdmlhIGNsYXdiYWNrIHRyYW5zZmVyIGZyb20gYWNjb3VudCBiYWNrIGludG8gdGhlIGFwcCBlc2Nyb3cKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuYXNzZXRfaWQsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PWFtb3VudCwKICAgIC8vICAgICBhc3NldF9zZW5kZXI9YWNjb3VudC5uYXRpdmUsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBmZWU9R2xvYmFsLm1pbl90eG5fZmVlLCAgIyBpbXBvcnRhbnRlCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxMjcKICAgIC8vIGZlZT1HbG9iYWwubWluX3R4bl9mZWUsICAjIGltcG9ydGFudGUKICAgIGdsb2JhbCBNaW5UeG5GZWUKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjEyMwogICAgLy8geGZlcl9hc3NldD1zZWxmLmFzc2V0X2lkLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImFzc2V0X2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0X2lkIGV4aXN0cwogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTI2CiAgICAvLyBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFzc2V0U2VuZGVyCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxMjEtMTIyCiAgICAvLyAjIEJ1cm4gdmlhIGNsYXdiYWNrIHRyYW5zZmVyIGZyb20gYWNjb3VudCBiYWNrIGludG8gdGhlIGFwcCBlc2Nyb3cKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjEyMS0xMjgKICAgIC8vICMgQnVybiB2aWEgY2xhd2JhY2sgdHJhbnNmZXIgZnJvbSBhY2NvdW50IGJhY2sgaW50byB0aGUgYXBwIGVzY3JvdwogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9YW1vdW50LAogICAgLy8gICAgIGFzc2V0X3NlbmRlcj1hY2NvdW50Lm5hdGl2ZSwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGZlZT1HbG9iYWwubWluX3R4bl9mZWUsICAjIGltcG9ydGFudGUKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYWxnb19jZHRfc3RhYmxlLmNvbnRyYWN0LkFsZ29DZHRTdGFibGUuX3RyYW5zZmVyKGZyb21fOiBieXRlcywgdG86IGJ5dGVzLCBhbW91bnQ6IHVpbnQ2NCkgLT4gdm9pZDoKX3RyYW5zZmVyOgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTQxLTE0MgogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfdHJhbnNmZXIoc2VsZiwgZnJvbV86IGFyYzQuQWRkcmVzcywgdG86IGFyYzQuQWRkcmVzcywgYW1vdW50OiBVSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAzIDAKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE0My0xNTAKICAgIC8vICMgVHJhbnNmZXLDqm5jaWEgdmlhIGNsYXdiYWNrIChvIGFwcCDDqSBvIGNsYXdiYWNrIGNvbmZpZ3VyYWRvIG5vIEFTQSkKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuYXNzZXRfaWQsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PWFtb3VudCwKICAgIC8vICAgICBhc3NldF9zZW5kZXI9ZnJvbV8ubmF0aXZlLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPXRvLm5hdGl2ZSwKICAgIC8vICAgICBmZWU9R2xvYmFsLm1pbl90eG5fZmVlLCAgIyBpbXBvcnRhbnRlCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxNDkKICAgIC8vIGZlZT1HbG9iYWwubWluX3R4bl9mZWUsICAjIGltcG9ydGFudGUKICAgIGdsb2JhbCBNaW5UeG5GZWUKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE0NQogICAgLy8geGZlcl9hc3NldD1zZWxmLmFzc2V0X2lkLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImFzc2V0X2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0X2lkIGV4aXN0cwogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyAtMwogICAgaXR4bl9maWVsZCBBc3NldFNlbmRlcgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTQzLTE0NAogICAgLy8gIyBUcmFuc2ZlcsOqbmNpYSB2aWEgY2xhd2JhY2sgKG8gYXBwIMOpIG8gY2xhd2JhY2sgY29uZmlndXJhZG8gbm8gQVNBKQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgcHVzaGludCA0IC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTQzLTE1MAogICAgLy8gIyBUcmFuc2ZlcsOqbmNpYSB2aWEgY2xhd2JhY2sgKG8gYXBwIMOpIG8gY2xhd2JhY2sgY29uZmlndXJhZG8gbm8gQVNBKQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9YW1vdW50LAogICAgLy8gICAgIGFzc2V0X3NlbmRlcj1mcm9tXy5uYXRpdmUsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9dG8ubmF0aXZlLAogICAgLy8gICAgIGZlZT1HbG9iYWwubWluX3R4bl9mZWUsICAjIGltcG9ydGFudGUKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYWxnb19jZHRfc3RhYmxlLmNvbnRyYWN0LkFsZ29DZHRTdGFibGUuX2FwcHJvdmUob3duZXI6IGJ5dGVzLCBzcGVuZGVyOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6Cl9hcHByb3ZlOgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTU2LTE1NwogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfYXBwcm92ZShzZWxmLCBvd25lcjogYXJjNC5BZGRyZXNzLCBzcGVuZGVyOiBhcmM0LkFkZHJlc3MsIGFtb3VudDogVUludDY0KSAtPiBOb25lOgogICAgcHJvdG8gMyAwCiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiAzCiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cG4gMTEKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE1OC0xNTkKICAgIC8vICMgVXBkYXRlIGFsbG93YW5jZXMgaW4gc3RhdGUKICAgIC8vIG93bmVyX2FsbG93YW5jZXMgPSBzZWxmLl9nZXRfb3duZXJfYWxsb3dhbmNlcyhvd25lcikKICAgIGZyYW1lX2RpZyAtMwogICAgY2FsbHN1YiBfZ2V0X293bmVyX2FsbG93YW5jZXMKICAgIGR1cAogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTYwCiAgICAvLyBzcGVuZGVyX2ZvdW5kID0gRmFsc2UKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxNjEKICAgIC8vIGZvciBpIGluIHVyYW5nZShvd25lcl9hbGxvd2FuY2VzLmxlbmd0aCk6CiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18wIC8vIDAKCl9hcHByb3ZlX2Zvcl9oZWFkZXJAMToKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE2MQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKG93bmVyX2FsbG93YW5jZXMubGVuZ3RoKToKICAgIGZyYW1lX2RpZyAxOQogICAgZnJhbWVfZGlnIDE4CiAgICA8CiAgICBieiBfYXBwcm92ZV9hZnRlcl9mb3JANgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTYyCiAgICAvLyBpZiBvd25lcl9hbGxvd2FuY2VzW2ldWzBdID09IHNwZW5kZXI6CiAgICBmcmFtZV9kaWcgMTYKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgMTkKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgICoKICAgIGR1cAogICAgZnJhbWVfYnVyeSA1CiAgICBwdXNoaW50IDQwIC8vIDQwCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGV4dHJhY3QgMCAzMgogICAgZnJhbWVfZGlnIC0yCiAgICA9PQogICAgYnogX2FwcHJvdmVfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxNjMKICAgIC8vIG93bmVyX2FsbG93YW5jZXNbaV0gPSBhcmM0LlR1cGxlKChzcGVuZGVyLCBhbW91bnQpKQogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDUKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBmcmFtZV9kaWcgMTYKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgcmVwbGFjZTMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBmcmFtZV9idXJ5IDE2CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxNjQKICAgIC8vIHNwZW5kZXJfZm91bmQgPSBUcnVlCiAgICBpbnRjXzEgLy8gMQogICAgZnJhbWVfYnVyeSAxNwoKX2FwcHJvdmVfYWZ0ZXJfZm9yQDY6CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxNjYKICAgIC8vIGlmIG5vdCBzcGVuZGVyX2ZvdW5kOgogICAgZnJhbWVfZGlnIDE3CiAgICBibnogX2FwcHJvdmVfYWZ0ZXJfaWZfZWxzZUA4CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxNjcKICAgIC8vIG93bmVyX2FsbG93YW5jZXMuYXBwZW5kKGFyYzQuVHVwbGUoKHNwZW5kZXIsIGFtb3VudCkpKQogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDE2CiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcmVwbGFjZTIgMAogICAgZnJhbWVfYnVyeSAxNgoKX2FwcHJvdmVfYWZ0ZXJfaWZfZWxzZUA4OgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTY5LTE3MAogICAgLy8gIyBVcGRhdGUgdGhlIGFsbG93YW5jZXMgYXJyYXkKICAgIC8vIGZvciBpIGluIHVyYW5nZShzZWxmLmFsbG93YW5jZXMubGVuZ3RoKToKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJhbGxvd2FuY2VzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFsbG93YW5jZXMgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZnJhbWVfYnVyeSA0CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAxOQoKX2FwcHJvdmVfZm9yX2hlYWRlckA5OgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTY5LTE3MAogICAgLy8gIyBVcGRhdGUgdGhlIGFsbG93YW5jZXMgYXJyYXkKICAgIC8vIGZvciBpIGluIHVyYW5nZShzZWxmLmFsbG93YW5jZXMubGVuZ3RoKToKICAgIGZyYW1lX2RpZyAxOQogICAgZnJhbWVfZGlnIDQKICAgIDwKICAgIGJ6IF9hcHByb3ZlX2FmdGVyX2ZvckAxNAogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTcxCiAgICAvLyBpZiBzZWxmLmFsbG93YW5jZXNbaV1bMF0gPT0gb3duZXI6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiYWxsb3dhbmNlcyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hbGxvd2FuY2VzIGV4aXN0cwogICAgZHVwCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGZyYW1lX2RpZyAxOQogICAgZHVwCiAgICBpbnRjXzMgLy8gMgogICAgKgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDYKICAgIGRpZyAzCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgc3dhcAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGR1cAogICAgZnJhbWVfYnVyeSA3CiAgICB1bmNvdmVyIDIKICAgIGRpZyAxCiAgICAtIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDMKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICBpbnRjXzMgLy8gMgogICAgKgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDgKICAgIGRpZyA0CiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIHN1YnN0cmluZzMKICAgIGV4dHJhY3QgMCAzMgogICAgZnJhbWVfZGlnIC0zCiAgICA9PQogICAgYnogX2FwcHJvdmVfYWZ0ZXJfaWZfZWxzZUAxMgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTcyCiAgICAvLyBzZWxmLmFsbG93YW5jZXNbaV0gPSBhcmM0LlR1cGxlKChvd25lciwgb3duZXJfYWxsb3dhbmNlcy5jb3B5KCkpKQogICAgZnJhbWVfZGlnIC0zCiAgICBieXRlYyA4IC8vIDB4MDAyMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMTYKICAgIGNvbmNhdAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImFsbG93YW5jZXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWxsb3dhbmNlcyBleGlzdHMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGZyYW1lX2RpZyAxOQogICAgZHVwCiAgICBjb3ZlciAzCiAgICA+CiAgICBhc3NlcnQgLy8gaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgc3Vic3RyaW5nIDAgMgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDMKICAgIGJ0b2kKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIGZyYW1lX2RpZyA2CiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIGZyYW1lX2RpZyA4CiAgICBkdXAKICAgIGNvdmVyIDYKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMgogICAgbGVuCiAgICBkaWcgNAogICAgdW5jb3ZlciA2CiAgICAtCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZGlnIDEKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGR1cAogICAgZGlnIDMKICAgIC0KICAgIGZyYW1lX2J1cnkgMTMKICAgIGRpZyA2CiAgICBsZW4KICAgIGZyYW1lX2J1cnkgMTIKICAgIGRpZyAzCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciA0CiAgICBzdWJzdHJpbmczCiAgICB1bmNvdmVyIDYKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMwogICAgc3Vic3RyaW5nMwogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDIKICAgIGludGNfMyAvLyAyCiAgICAqCiAgICBmcmFtZV9idXJ5IDE1CiAgICBmcmFtZV9idXJ5IDExCgpfYXBwcm92ZV9mb3JfaGVhZGVyQDIzOgogICAgZnJhbWVfZGlnIDExCiAgICBmcmFtZV9kaWcgMTUKICAgIDwKICAgIGJ6IF9hcHByb3ZlX2FmdGVyX2ZvckAyNQogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgZnJhbWVfZGlnIDExCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgMTIKICAgICsKICAgIGZyYW1lX2RpZyAxMwogICAgLQogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGRpZyAyCiAgICBzd2FwCiAgICByZXBsYWNlMwogICAgZnJhbWVfYnVyeSAyCiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSAxMQogICAgYiBfYXBwcm92ZV9mb3JfaGVhZGVyQDIzCgpfYXBwcm92ZV9hZnRlcl9mb3JAMjU6CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfZGlnIDIKICAgIGNvbmNhdAogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTcyCiAgICAvLyBzZWxmLmFsbG93YW5jZXNbaV0gPSBhcmM0LlR1cGxlKChvd25lciwgb3duZXJfYWxsb3dhbmNlcy5jb3B5KCkpKQogICAgYnl0ZWNfMCAvLyAiYWxsb3dhbmNlcyIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxNzMKICAgIC8vIHJldHVybgogICAgcmV0c3ViCgpfYXBwcm92ZV9hZnRlcl9pZl9lbHNlQDEyOgogICAgZnJhbWVfZGlnIDcKICAgIGZyYW1lX2J1cnkgMTkKICAgIGIgX2FwcHJvdmVfZm9yX2hlYWRlckA5CgpfYXBwcm92ZV9hZnRlcl9mb3JAMTQ6CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxNzQKICAgIC8vIHNlbGYuYWxsb3dhbmNlcy5hcHBlbmQoYXJjNC5UdXBsZSgob3duZXIsIG93bmVyX2FsbG93YW5jZXMpKSkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJhbGxvd2FuY2VzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFsbG93YW5jZXMgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTMKICAgIGJ5dGVjIDggLy8gMHgwMDIyCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAxNgogICAgY29uY2F0CiAgICBkaWcgMQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGZyYW1lX2J1cnkgOQogICAgc3dhcAogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2J1cnkgMAogICAgcHVzaGJ5dGVzIDB4MDAwMgogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDIKICAgIHB1c2hieXRlcyAweAogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzMgLy8gMgogICAgKgogICAgZnJhbWVfYnVyeSAxNAogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMTEKCl9hcHByb3ZlX2Zvcl9oZWFkZXJAMTY6CiAgICBmcmFtZV9kaWcgMTEKICAgIGZyYW1lX2RpZyAxNAogICAgPAogICAgYnogX2FwcHJvdmVfYWZ0ZXJfZm9yQDE4CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDExCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAxCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMQogICAgaW50Y18zIC8vIDIKICAgICsKICAgIGZyYW1lX2J1cnkgMTEKICAgIGIgX2FwcHJvdmVfZm9yX2hlYWRlckAxNgoKX2FwcHJvdmVfYWZ0ZXJfZm9yQDE4OgogICAgZnJhbWVfZGlnIDAKICAgIGxlbgogICAgZnJhbWVfYnVyeSAxMAogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMTEKCl9hcHByb3ZlX2Zvcl9oZWFkZXJAMTk6CiAgICBmcmFtZV9kaWcgMTEKICAgIGludGNfMyAvLyAyCiAgICA8CiAgICBieiBfYXBwcm92ZV9hZnRlcl9mb3JAMjEKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMTEKICAgIGR1cAogICAgY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyAxMAogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAxCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMQogICAgaW50Y18zIC8vIDIKICAgICsKICAgIGZyYW1lX2J1cnkgMTEKICAgIGIgX2FwcHJvdmVfZm9yX2hlYWRlckAxOQoKX2FwcHJvdmVfYWZ0ZXJfZm9yQDIxOgogICAgZnJhbWVfZGlnIDkKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE3NAogICAgLy8gc2VsZi5hbGxvd2FuY2VzLmFwcGVuZChhcmM0LlR1cGxlKChvd25lciwgb3duZXJfYWxsb3dhbmNlcykpKQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDE0CiAgICBmcmFtZV9kaWcgMTAKICAgIHN1YnN0cmluZzMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBjb25jYXQKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE3NAogICAgLy8gc2VsZi5hbGxvd2FuY2VzLmFwcGVuZChhcmM0LlR1cGxlKChvd25lciwgb3duZXJfYWxsb3dhbmNlcykpKQogICAgYnl0ZWNfMCAvLyAiYWxsb3dhbmNlcyIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCl9hcHByb3ZlX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE2MQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKG93bmVyX2FsbG93YW5jZXMubGVuZ3RoKToKICAgIGZyYW1lX2RpZyAxOQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMTkKICAgIGIgX2FwcHJvdmVfZm9yX2hlYWRlckAxCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29fY2R0X3N0YWJsZS5jb250cmFjdC5BbGdvQ2R0U3RhYmxlLl9nZXRfYWxsb3dhbmNlKG93bmVyOiBieXRlcywgc3BlbmRlcjogYnl0ZXMpIC0+IHVpbnQ2NDoKX2dldF9hbGxvd2FuY2U6CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxODAtMTgxCiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIF9nZXRfYWxsb3dhbmNlKHNlbGYsIG93bmVyOiBhcmM0LkFkZHJlc3MsIHNwZW5kZXI6IGFyYzQuQWRkcmVzcykgLT4gVUludDY0OgogICAgcHJvdG8gMiAxCiAgICBpbnRjXzAgLy8gMAogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTgyCiAgICAvLyBvd25lcl9hbGxvd2FuY2VzID0gc2VsZi5fZ2V0X293bmVyX2FsbG93YW5jZXMob3duZXIpCiAgICBmcmFtZV9kaWcgLTIKICAgIGNhbGxzdWIgX2dldF9vd25lcl9hbGxvd2FuY2VzCiAgICBkdXAKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE4MwogICAgLy8gZm9yIGFsbG93YW5jZSBpbiBvd25lcl9hbGxvd2FuY2VzOgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMCAvLyAwCgpfZ2V0X2FsbG93YW5jZV9mb3JfaGVhZGVyQDE6CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxODMKICAgIC8vIGZvciBhbGxvd2FuY2UgaW4gb3duZXJfYWxsb3dhbmNlczoKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogX2dldF9hbGxvd2FuY2VfYWZ0ZXJfZm9yQDYKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE4My0xODQKICAgIC8vIGZvciBhbGxvd2FuY2UgaW4gb3duZXJfYWxsb3dhbmNlczoKICAgIC8vICAgICBpZiBhbGxvd2FuY2VbMF0gPT0gc3BlbmRlcjoKICAgIGZyYW1lX2RpZyAxCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDMKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgICoKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIGV4dHJhY3QgMCAzMgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTg0CiAgICAvLyBpZiBhbGxvd2FuY2VbMF0gPT0gc3BlbmRlcjoKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGJ6IF9nZXRfYWxsb3dhbmNlX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTg1CiAgICAvLyByZXR1cm4gYWxsb3dhbmNlWzFdCiAgICBmcmFtZV9kaWcgMAogICAgaW50Y18yIC8vIDMyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCl9nZXRfYWxsb3dhbmNlX2FmdGVyX2lmX2Vsc2VANDoKICAgIGZyYW1lX2RpZyAzCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAzCiAgICBiIF9nZXRfYWxsb3dhbmNlX2Zvcl9oZWFkZXJAMQoKX2dldF9hbGxvd2FuY2VfYWZ0ZXJfZm9yQDY6CiAgICAvLyBwcm9qZWN0cy9DRFRCUkwvc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxODYKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvX2NkdF9zdGFibGUuY29udHJhY3QuQWxnb0NkdFN0YWJsZS5fZ2V0X293bmVyX2FsbG93YW5jZXMob3duZXI6IGJ5dGVzKSAtPiBieXRlczoKX2dldF9vd25lcl9hbGxvd2FuY2VzOgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTg4LTE4OQogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X293bmVyX2FsbG93YW5jZXMoc2VsZiwgb3duZXI6IGFyYzQuQWRkcmVzcykgLT4gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5UdXBsZVthcmM0LkFkZHJlc3MsIFVJbnQ2NF1dOgogICAgcHJvdG8gMSAxCiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cAogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTkwCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2Uoc2VsZi5hbGxvd2FuY2VzLmxlbmd0aCk6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiYWxsb3dhbmNlcyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hbGxvd2FuY2VzIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMCAvLyAwCgpfZ2V0X293bmVyX2FsbG93YW5jZXNfZm9yX2hlYWRlckAxOgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTkwCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2Uoc2VsZi5hbGxvd2FuY2VzLmxlbmd0aCk6CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfZGlnIDIKICAgIDwKICAgIGJ6IF9nZXRfb3duZXJfYWxsb3dhbmNlc19hZnRlcl9mb3JANgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTkxCiAgICAvLyBpZiBzZWxmLmFsbG93YW5jZXNbaV1bMF0gPT0gb3duZXI6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiYWxsb3dhbmNlcyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hbGxvd2FuY2VzIGV4aXN0cwogICAgZHVwCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGludGNfMyAvLyAyCiAgICAqCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgZGlnIDMKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZHVwCiAgICBjb3ZlciA0CiAgICB1bmNvdmVyIDIKICAgIGRpZyAxCiAgICAtIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDMKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICBpbnRjXzMgLy8gMgogICAgKgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEKICAgIGRpZyA0CiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIHN1YnN0cmluZzMKICAgIGV4dHJhY3QgMCAzMgogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYnogX2dldF9vd25lcl9hbGxvd2FuY2VzX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTkyCiAgICAvLyByZXR1cm4gc2VsZi5hbGxvd2FuY2VzW2ldWzFdCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiYWxsb3dhbmNlcyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hbGxvd2FuY2VzIGV4aXN0cwogICAgZHVwCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGRpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIHVuY292ZXIgMwogICAgLSAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGRpZyAyCiAgICBsZW4KICAgIGRpZyAzCiAgICBmcmFtZV9kaWcgMQogICAgZXh0cmFjdF91aW50MTYKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBzdWJzdHJpbmczCiAgICBkdXAKICAgIGludGNfMiAvLyAzMgogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAxCiAgICBsZW4KICAgIHN1YnN0cmluZzMKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfZ2V0X293bmVyX2FsbG93YW5jZXNfYWZ0ZXJfaWZfZWxzZUA0OgogICAgZnJhbWVfYnVyeSAzCiAgICBiIF9nZXRfb3duZXJfYWxsb3dhbmNlc19mb3JfaGVhZGVyQDEKCl9nZXRfb3duZXJfYWxsb3dhbmNlc19hZnRlcl9mb3JANjoKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE5MwogICAgLy8gcmV0dXJuIGFyYzQuRHluYW1pY0FycmF5W2FyYzQuVHVwbGVbYXJjNC5BZGRyZXNzLCBVSW50NjRdXSgpCiAgICBieXRlYyA1IC8vIDB4MDAwMAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYWxnb19jZHRfc3RhYmxlLmNvbnRyYWN0LkFsZ29DZHRTdGFibGUuX2lzX21pbnRlcihhY2NvdW50OiBieXRlcykgLT4gdWludDY0OgpfaXNfbWludGVyOgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjIwLTIyMQogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfaXNfbWludGVyKHNlbGYsIGFjY291bnQ6IGFyYzQuQWRkcmVzcykgLT4gYm9vbDoKICAgIHByb3RvIDEgMQogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjIyCiAgICAvLyBmb3IgbWludGVyIGluIHNlbGYubWludGVyczoKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJtaW50ZXJzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5taW50ZXJzIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMCAvLyAwCgpfaXNfbWludGVyX2Zvcl9oZWFkZXJAMToKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjIyMgogICAgLy8gZm9yIG1pbnRlciBpbiBzZWxmLm1pbnRlcnM6CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDEKICAgIDwKICAgIGJ6IF9pc19taW50ZXJfYWZ0ZXJfZm9yQDYKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDIKICAgIGludGNfMiAvLyAzMgogICAgKgogICAgaW50Y18yIC8vIDMyCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHByb2plY3RzL0NEVEJSTC9zbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjIyMwogICAgLy8gaWYgbWludGVyID09IGFjY291bnQ6CiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICBieiBfaXNfbWludGVyX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjI0CiAgICAvLyByZXR1cm4gVHJ1ZQogICAgaW50Y18xIC8vIDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfaXNfbWludGVyX2FmdGVyX2lmX2Vsc2VANDoKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAyCiAgICBiIF9pc19taW50ZXJfZm9yX2hlYWRlckAxCgpfaXNfbWludGVyX2FmdGVyX2ZvckA2OgogICAgLy8gcHJvamVjdHMvQ0RUQlJML3NtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjI1CiAgICAvLyByZXR1cm4gRmFsc2UKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { "approval": "CyAEAAEgAiYJCmFsbG93YW5jZXMHbWludGVycwx0b3RhbF9zdXBwbHkIYXNzZXRfaWQEFR98dQIAAANjYXAMcmVzZXJ2ZV9hZGRyAgAiMRhAABIoJwVnJwUxAFCAAgABXAApTGcxG0EAfzEZFEQxGESCEAQaLVsuBBJZ/uIESCC0eAR/HUPhBNgYzosEn+50GARYm8P6BO4dWLMERnvHpASKd3g5BO0w2WgESA33GgSibbHEBEaQk1UE9Fq4jgSxybqkNhoAjhAACwDSAQUBTgFgAZABqwHjAf4CGQIxAl4CuwLUAuAC7QAxGRQxGBQQRCNDNhoBSSJZJQhLARUSRFcCADYaAkkiWSUISwEVEkRXAgA2GgNJFYEIEkQXNhoESRWBCBJEFzYaBUkVJBJEMQAyCRJEgARuYW1lSwVngAZzeW1ib2xLBGeACGRlY2ltYWxzSwNnJwZLAmcnB0sBZyoiZ7EyADIKRwKAG2h0dHBzOi8vY2FzYWRvdG9rZW4uY29tLmJyL7InsiyyK08CsiqyKU8EsiZPA7IlIrIkTwKyI0yyIoEDshCyAbO0PCtLAWcWJwRMULAjQzYaAUkVgQgSRBc2GgJJFSQSRDEAMgkSRCtLAmcnB0xnsTIAMgqyLEyyIYEDshCyAbMjQzYaAUkVJBJENhoCSRWBCBJEFzEAiATvRCIqZURLAQgiJwZlREsBD0QqTGexMgAiK2VEMgpPBLIUshNPArISshGBBLIQsgGzI0M2GgFJFYEIEkQXMQBMiAGjI0M2GgFJFSQSRDYaAkkVgQgSRBdLATEAiAPKSUsCD0QxAExLAglLA04CiAHAiAFzI0M2GgFJFSQSRDYaAkkVgQgSRBcxAE4CiAGCI0M2GgFJFSQSRDYaAkkVJBJENhoDSRWBCBJEF0sCMQCIA3dJSwIPRDEATEsCCUsETgKIAW2IAUojQzYaAUkVJBJENhoCSRWBCBJEFzEATgKIAU8jQzYaAUkVJBJENhoCSRUkEkSIAzIWJwRMULAjQzYaARUkEkSADBUffHUAAAAAAAAAALAjQzYaAUcCFSQSRDEAiAPMRIgDyEAAFiIpZURJSwJQTCJZIwgWVwYCXAApTGcjQyI2GgFHAhUkEkQxAIgDnkQxABNEJwUiKWVMSU8CRCJZIklLAgxBAC9LAlcCAEsBJAskWElFB0sFE0EAE0sDSUsHUEwiWSMIFlcGAlwARQRJIwhFAUL/yilLBGcjQzYaAUkVJBJEiANFgAEAIk8CVCcETFCwI0MiKmVEFicETFCwI0MiJwZlRBYnBExQsCNDNhoBSRUkEkQxADIJEkQnB0xnI0OKAgAiKmVEi/8JKkxnsTIAIitlRDIKshSL/rITi/+yErIRgQSyELIBs4mKAwCxMgAiK2VEi/6yFIv9shOL/7ISshGBBLIQsgGziYoDACJHA4AARwuL/YgCK0kiTCJZIosTixIMQQAvixBXAgCLE4EoC0mMBYEoWFcAIIv+EkEBuYv/Fov+TFCLBSUIixBMTwJdjBAjjBGLEUAAGov/Fov+TFCLEElPAlBMIlkjCBZXBgJcAIwQIihlRCJZjAQijBOLE4sEDEEA2CIoZURJVwIATCJZixNJJQtJjAZLA0xZTCMISYwHTwJLAQlLAxVPAiULSYwISwRMWU8CTVJXACCL/RJBAJSL/ScIUIsQUCIoZURJIlmLE0lOAw1ESVEAAkmMAxdMVwIASYsGWUsBiwhJTgZZSwIVSwRPBgkjCUsBTwNPAk1JSwMJjA1LBhWMDEsDIk8EUk8GUE8DTwJPA1JQjAIlC4wPjAuLC4sPDEEAIIsCSYsLSU4DWYsMCIsNCRZXBgJLAkxdjAIlCIwLQv/YiwOLAlAoTGeJiweME0L/ICIoZUSL/ScIUIsQUEsBIllJTgOMCUxXAgCMAIACAAJMUIwCgACMASULjA4ijAuLC4sODEEAG4sAiwtJTgJZJQgWVwYCiwFMUIwBJQiMC0L/3YsAFYwKIowLiwslDEEAHIsCiwtJTgJZiwoIFlcGAosBTFCMASUIjAtC/92LCSMIFlcGAosBUIsAiw6LClJQiwJXAgBQKExniYsTIwiME0L+HYoCASKL/ogAOUkiWSKLA4sCDEEAKYsBVwIAiwOBKAuBKFhJjABXACCL/xJBAAeLACRbjACJiwMjCIwDQv/PIowAiYoBAYAASSIoZUQiWSKLA4sCDEEAbCIoZURJVwIATCJZiwNJJQtJjABLA0xZTCMISU4ETwJLAQlLAxVPAiULSYwBSwRMWU8CTVJXACCL/xJBACoiKGVESVcCAEwiWUsBiwBZTE8DCUsCFUsDiwFZTwJNUkkkWUsBFVKMAImMA0L/jCcFjACJigEBIillTElPAkQiWSKLAosBDEEAHosAVwIAiwIkCyRYi/8SQQAEI4wAiYsCIwiMAkL/2iKMAIk=", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 4, "patch": 0 } }, "events": [], "templateVariables": {} }