UNPKG

@bitriel/multisig-wallet

Version:
700 lines 404 kB
{ "deploy": { "VM:-": { "linkReferences": {}, "autoDeployLib": true }, "main:1": { "linkReferences": {}, "autoDeployLib": true }, "ropsten:3": { "linkReferences": {}, "autoDeployLib": true }, "rinkeby:4": { "linkReferences": {}, "autoDeployLib": true }, "kovan:42": { "linkReferences": {}, "autoDeployLib": true }, "görli:5": { "linkReferences": {}, "autoDeployLib": true }, "Custom": { "linkReferences": {}, "autoDeployLib": true } }, "data": { "bytecode": { "generatedSources": [ { "ast": { "nodeType": "YulBlock", "src": "0:1157:21", "statements": [ { "body": { "nodeType": "YulBlock", "src": "70:80:21", "statements": [ { "nodeType": "YulAssignment", "src": "80:22:21", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", "src": "95:6:21" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", "src": "89:5:21" }, "nodeType": "YulFunctionCall", "src": "89:13:21" }, "variableNames": [ { "name": "value", "nodeType": "YulIdentifier", "src": "80:5:21" } ] }, { "expression": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", "src": "138:5:21" } ], "functionName": { "name": "validator_revert_t_address", "nodeType": "YulIdentifier", "src": "111:26:21" }, "nodeType": "YulFunctionCall", "src": "111:33:21" }, "nodeType": "YulExpressionStatement", "src": "111:33:21" } ] }, "name": "abi_decode_t_address_fromMemory", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "offset", "nodeType": "YulTypedName", "src": "48:6:21", "type": "" }, { "name": "end", "nodeType": "YulTypedName", "src": "56:3:21", "type": "" } ], "returnVariables": [ { "name": "value", "nodeType": "YulTypedName", "src": "64:5:21", "type": "" } ], "src": "7:143:21" }, { "body": { "nodeType": "YulBlock", "src": "233:207:21", "statements": [ { "body": { "nodeType": "YulBlock", "src": "279:16:21", "statements": [ { "expression": { "arguments": [ { "kind": "number", "nodeType": "YulLiteral", "src": "288:1:21", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", "src": "291:1:21", "type": "", "value": "0" } ], "functionName": { "name": "revert", "nodeType": "YulIdentifier", "src": "281:6:21" }, "nodeType": "YulFunctionCall", "src": "281:12:21" }, "nodeType": "YulExpressionStatement", "src": "281:12:21" } ] }, "condition": { "arguments": [ { "arguments": [ { "name": "dataEnd", "nodeType": "YulIdentifier", "src": "254:7:21" }, { "name": "headStart", "nodeType": "YulIdentifier", "src": "263:9:21" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", "src": "250:3:21" }, "nodeType": "YulFunctionCall", "src": "250:23:21" }, { "kind": "number", "nodeType": "YulLiteral", "src": "275:2:21", "type": "", "value": "32" } ], "functionName": { "name": "slt", "nodeType": "YulIdentifier", "src": "246:3:21" }, "nodeType": "YulFunctionCall", "src": "246:32:21" }, "nodeType": "YulIf", "src": "243:2:21" }, { "nodeType": "YulBlock", "src": "305:128:21", "statements": [ { "nodeType": "YulVariableDeclaration", "src": "320:15:21", "value": { "kind": "number", "nodeType": "YulLiteral", "src": "334:1:21", "type": "", "value": "0" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", "src": "324:6:21", "type": "" } ] }, { "nodeType": "YulAssignment", "src": "349:74:21", "value": { "arguments": [ { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", "src": "395:9:21" }, { "name": "offset", "nodeType": "YulIdentifier", "src": "406:6:21" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", "src": "391:3:21" }, "nodeType": "YulFunctionCall", "src": "391:22:21" }, { "name": "dataEnd", "nodeType": "YulIdentifier", "src": "415:7:21" } ], "functionName": { "name": "abi_decode_t_address_fromMemory", "nodeType": "YulIdentifier", "src": "359:31:21" }, "nodeType": "YulFunctionCall", "src": "359:64:21" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", "src": "349:6:21" } ] } ] } ] }, "name": "abi_decode_tuple_t_address_fromMemory", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", "src": "203:9:21", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", "src": "214:7:21", "type": "" } ], "returnVariables": [ { "name": "value0", "nodeType": "YulTypedName", "src": "226:6:21", "type": "" } ], "src": "156:284:21" }, { "body": { "nodeType": "YulBlock", "src": "511:53:21", "statements": [ { "expression": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", "src": "528:3:21" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", "src": "551:5:21" } ], "functionName": { "name": "cleanup_t_address", "nodeType": "YulIdentifier", "src": "533:17:21" }, "nodeType": "YulFunctionCall", "src": "533:24:21" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", "src": "521:6:21" }, "nodeType": "YulFunctionCall", "src": "521:37:21" }, "nodeType": "YulExpressionStatement", "src": "521:37:21" } ] }, "name": "abi_encode_t_address_to_t_address_fromStack", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", "src": "499:5:21", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", "src": "506:3:21", "type": "" } ], "src": "446:118:21" }, { "body": { "nodeType": "YulBlock", "src": "668:124:21", "statements": [ { "nodeType": "YulAssignment", "src": "678:26:21", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", "src": "690:9:21" }, { "kind": "number", "nodeType": "YulLiteral", "src": "701:2:21", "type": "", "value": "32" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", "src": "686:3:21" }, "nodeType": "YulFunctionCall", "src": "686:18:21" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", "src": "678:4:21" } ] }, { "expression": { "arguments": [ { "name": "value0", "nodeType": "YulIdentifier", "src": "758:6:21" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", "src": "771:9:21" }, { "kind": "number", "nodeType": "YulLiteral", "src": "782:1:21", "type": "", "value": "0" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", "src": "767:3:21" }, "nodeType": "YulFunctionCall", "src": "767:17:21" } ], "functionName": { "name": "abi_encode_t_address_to_t_address_fromStack", "nodeType": "YulIdentifier", "src": "714:43:21" }, "nodeType": "YulFunctionCall", "src": "714:71:21" }, "nodeType": "YulExpressionStatement", "src": "714:71:21" } ] }, "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", "src": "640:9:21", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", "src": "652:6:21", "type": "" } ], "returnVariables": [ { "name": "tail", "nodeType": "YulTypedName", "src": "663:4:21", "type": "" } ], "src": "570:222:21" }, { "body": { "nodeType": "YulBlock", "src": "843:51:21", "statements": [ { "nodeType": "YulAssignment", "src": "853:35:21", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", "src": "882:5:21" } ], "functionName": { "name": "cleanup_t_uint160", "nodeType": "YulIdentifier", "src": "864:17:21" }, "nodeType": "YulFunctionCall", "src": "864:24:21" }, "variableNames": [ { "name": "cleaned", "nodeType": "YulIdentifier", "src": "853:7:21" } ] } ] }, "name": "cleanup_t_address", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", "src": "825:5:21", "type": "" } ], "returnVariables": [ { "name": "cleaned", "nodeType": "YulTypedName", "src": "835:7:21", "type": "" } ], "src": "798:96:21" }, { "body": { "nodeType": "YulBlock", "src": "945:81:21", "statements": [ { "nodeType": "YulAssignment", "src": "955:65:21", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", "src": "970:5:21" }, { "kind": "number", "nodeType": "YulLiteral", "src": "977:42:21", "type": "", "value": "0xffffffffffffffffffffffffffffffffffffffff" } ], "functionName": { "name": "and", "nodeType": "YulIdentifier", "src": "966:3:21" }, "nodeType": "YulFunctionCall", "src": "966:54:21" }, "variableNames": [ { "name": "cleaned", "nodeType": "YulIdentifier", "src": "955:7:21" } ] } ] }, "name": "cleanup_t_uint160", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", "src": "927:5:21", "type": "" } ], "returnVariables": [ { "name": "cleaned", "nodeType": "YulTypedName", "src": "937:7:21", "type": "" } ], "src": "900:126:21" }, { "body": { "nodeType": "YulBlock", "src": "1075:79:21", "statements": [ { "body": { "nodeType": "YulBlock", "src": "1132:16:21", "statements": [ { "expression": { "arguments": [ { "kind": "number", "nodeType": "YulLiteral", "src": "1141:1:21", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", "src": "1144:1:21", "type": "", "value": "0" } ], "functionName": { "name": "revert", "nodeType": "YulIdentifier", "src": "1134:6:21" }, "nodeType": "YulFunctionCall", "src": "1134:12:21" }, "nodeType": "YulExpressionStatement", "src": "1134:12:21" } ] }, "condition": { "arguments": [ { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", "src": "1098:5:21" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", "src": "1123:5:21" } ], "functionName": { "name": "cleanup_t_address", "nodeType": "YulIdentifier", "src": "1105:17:21" }, "nodeType": "YulFunctionCall", "src": "1105:24:21" } ], "functionName": { "name": "eq", "nodeType": "YulIdentifier", "src": "1095:2:21" }, "nodeType": "YulFunctionCall", "src": "1095:35:21" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", "src": "1088:6:21" }, "nodeType": "YulFunctionCall", "src": "1088:43:21" }, "nodeType": "YulIf", "src": "1085:2:21" } ] }, "name": "validator_revert_t_address", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", "src": "1068:5:21", "type": "" } ], "src": "1032:122:21" } ] }, "contents": "{\n\n function abi_decode_t_address_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_address(value)\n }\n\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n}\n", "id": 21, "language": "Yul", "name": "#utility.yul" } ], "linkReferences": {}, "object": "60a06040523480156200001157600080fd5b506040516200639c3803806200639c833981810160405281019062000037919062000180565b600060405162000047906200014d565b604051809103906000f08015801562000064573d6000803e3d6000fd5b5060405162000073906200015b565b6200007f9190620001bd565b604051809103906000f0801580156200009c573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff1663f2fde38b836040518263ffffffff1660e01b8152600401620000da9190620001bd565b600060405180830381600087803b158015620000f557600080fd5b505af11580156200010a573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050505062000228565b613c298062001cf783390190565b610a7c806200592083390190565b6000815190506200017a816200020e565b92915050565b6000602082840312156200019357600080fd5b6000620001a38482850162000169565b91505092915050565b620001b781620001da565b82525050565b6000602082019050620001d46000830184620001ac565b92915050565b6000620001e782620001ee565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6200021981620001da565b81146200022557600080fd5b50565b60805160601c611aa262000255600039600081816101200152818161022a01526103e80152611aa26000f3fe60806040523480156200001157600080fd5b5060043610620000525760003560e01c80631733ff9e146200005757806341e4c5d0146200008d5780637ad71f7214620000c35780639651bbf914620000f9575b600080fd5b6200007560048036038101906200006f9190620005a6565b6200011b565b60405162000084919062000746565b60405180910390f35b620000ab6004803603810190620000a591906200054c565b62000225565b604051620000ba919062000746565b60405180910390f35b620000e16004803603810190620000db9190620005ef565b620003a6565b604051620000f0919062000746565b60405180910390f35b62000103620003e6565b60405162000112919062000746565b60405180910390f35b6000807f000000000000000000000000000000000000000000000000000000000000000084846040516200014f906200040a565b6200015d9392919062000790565b604051809103906000f0801580156200017a573d6000803e3d6000fd5b5090508091506000819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5b03bfed1c14a02bdeceb5fa582eb1a5765fc0bc64ca0e6af4c20afc9487f08133826040516200021692919062000763565b60405180910390a15092915050565b6000807f0000000000000000000000000000000000000000000000000000000000000000632bbdea4e60e01b858560405160240162000266929190620007fa565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620002d1906200040a565b620002de929190620007c6565b604051809103906000f080158015620002fb573d6000803e3d6000fd5b5090508091506000829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5b03bfed1c14a02bdeceb5fa582eb1a5765fc0bc64ca0e6af4c20afc9487f08133836040516200039792919062000763565b60405180910390a15092915050565b60008181548110620003b757600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61103d8062000a3083390190565b60006200042f620004298462000857565b6200082e565b905080838252602082019050828560208602820111156200044f57600080fd5b60005b858110156200048357816200046888826200048d565b84526020840193506020830192505060018101905062000452565b5050509392505050565b6000813590506200049e81620009e1565b92915050565b600082601f830112620004b657600080fd5b8135620004c884826020860162000418565b91505092915050565b60008083601f840112620004e457600080fd5b8235905067ffffffffffffffff811115620004fe57600080fd5b6020830191508360018202830111156200051757600080fd5b9250929050565b6000813590506200052f81620009fb565b92915050565b600081359050620005468162000a15565b92915050565b600080604083850312156200056057600080fd5b600083013567ffffffffffffffff8111156200057b57600080fd5b6200058985828601620004a4565b92505060206200059c8582860162000535565b9150509250929050565b60008060208385031215620005ba57600080fd5b600083013567ffffffffffffffff811115620005d557600080fd5b620005e385828601620004d1565b92509250509250929050565b6000602082840312156200060257600080fd5b600062000612848285016200051e565b91505092915050565b600062000629838362000635565b60208301905092915050565b6200064081620008db565b82525050565b6200065181620008db565b82525050565b6000620006648262000896565b620006708185620008b9565b93506200067d8362000886565b8060005b83811015620006b45781516200069888826200061b565b9750620006a583620008ac565b92505060018101905062000681565b5085935050505092915050565b6000620006cf8385620008ca565b9350620006de83858462000926565b620006e983620009d0565b840190509392505050565b60006200070182620008a1565b6200070d8185620008ca565b93506200071f81856020860162000935565b6200072a81620009d0565b840191505092915050565b620007408162000919565b82525050565b60006020820190506200075d600083018462000646565b92915050565b60006040820190506200077a600083018562000646565b62000789602083018462000646565b9392505050565b6000604082019050620007a7600083018662000646565b8181036020830152620007bc818486620006c1565b9050949350505050565b6000604082019050620007dd600083018562000646565b8181036020830152620007f18184620006f4565b90509392505050565b6000604082019050818103600083015262000816818562000657565b905062000827602083018462000735565b9392505050565b60006200083a6200084d565b90506200084882826200096b565b919050565b6000604051905090565b600067ffffffffffffffff821115620008755762000874620009a1565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620008e882620008ef565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156200095557808201518184015260208101905062000938565b8381111562000965576000848401525b50505050565b6200097682620009d0565b810181811067ffffffffffffffff82111715620009985762000997620009a1565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b620009ec81620008db565b8114620009f857600080fd5b50565b62000a06816200090f565b811462000a1257600080fd5b50565b62000a208162000919565b811462000a2c57600080fd5b5056fe60806040526040516200103d3803806200103d8339818101604052810190620000299190620005e1565b60017fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5160001c6200005b91906200085c565b60001b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b14620000b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b620000cb82826000620000d360201b60201c565b505062000ab7565b620000e483620001da60201b60201c565b8273ffffffffffffffffffffffffffffffffffffffff167f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e60405160405180910390a2600082511180620001355750805b15620001d557620001d38373ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200018657600080fd5b505afa1580156200019b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c19190620005b5565b836200038960201b620000371760201c565b505b505050565b620001f081620003bf60201b620000641760201c565b62000232576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002299062000765565b60405180910390fd5b620002c98173ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027d57600080fd5b505afa15801562000292573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b89190620005b5565b620003bf60201b620000641760201c565b6200030b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200030290620007a9565b60405180910390fd5b80620003457fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b620003d260201b620000771760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060620003b783836040518060600160405280602781526020016200101660279139620003dc60201b60201c565b905092915050565b600080823b905060008111915050919050565b6000819050919050565b6060620003ef84620003bf60201b60201c565b62000431576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004289062000787565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516200045b919062000728565b600060405180830381855af49150503d806000811462000498576040519150601f19603f3d011682016040523d82523d6000602084013e6200049d565b606091505b5091509150620004b5828286620004c060201b60201c565b925050509392505050565b60608315620004d25782905062000525565b600083511115620004e65782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200051c919062000741565b60405180910390fd5b9392505050565b6000620005436200053d84620007f4565b620007cb565b9050828152602081018484840111156200055c57600080fd5b62000569848285620008d5565b509392505050565b600081519050620005828162000a9d565b92915050565b600082601f8301126200059a57600080fd5b8151620005ac8482602086016200052c565b91505092915050565b600060208284031215620005c857600080fd5b6000620005d88482850162000571565b91505092915050565b60008060408385031215620005f557600080fd5b6000620006058582860162000571565b925050602083015167ffffffffffffffff8111156200062357600080fd5b620006318582860162000588565b9150509250929050565b600062000648826200082a565b62000654818562000840565b935062000666818560208601620008d5565b80840191505092915050565b60006200067f8262000835565b6200068b81856200084b565b93506200069d818560208601620008d5565b620006a8816200099f565b840191505092915050565b6000620006c26025836200084b565b9150620006cf82620009b0565b604082019050919050565b6000620006e96026836200084b565b9150620006f682620009ff565b604082019050919050565b6000620007106030836200084b565b91506200071d8262000a4e565b604082019050919050565b60006200073682846200063b565b915081905092915050565b600060208201905081810360008301526200075d818462000672565b905092915050565b600060208201905081810360008301526200078081620006b3565b9050919050565b60006020820190508181036000830152620007a281620006da565b9050919050565b60006020820190508181036000830152620007c48162000701565b9050919050565b6000620007d7620007ea565b9050620007e582826200090b565b919050565b6000604051905090565b600067ffffffffffffffff82111562000812576200081162000970565b5b6200081d826200099f565b9050602081019050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b60006200086982620008cb565b91506200087683620008cb565b9250828210156200088c576200088b62000941565b5b828203905092915050565b6000620008a482620008ab565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620008f5578082015181840152602081019050620008d8565b8381111562000905576000848401525b50505050565b62000916826200099f565b810181811067ffffffffffffffff8211171562000938576200093762000970565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e60008201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b7f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960008201527f73206e6f74206120636f6e747261637400000000000000000000000000000000602082015250565b62000aa88162000897565b811462000ab457600080fd5b50565b61054f8062000ac76000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610081565b610035610030610083565b61010f565b565b606061005c83836040518060600160405280602781526020016104f360279139610135565b905092915050565b600080823b905060008111915050919050565b6000819050919050565b565b600061008d610202565b73ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156100d257600080fd5b505afa1580156100e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061010a91906102d5565b905090565b3660008037600080366000845af43d6000803e8060008114610130573d6000f35b3d6000fd5b606061014084610064565b61017f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610176906103c4565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101a7919061038b565b600060405180830381855af49150503d80600081146101e2576040519150601f19603f3d011682016040523d82523d6000602084013e6101e7565b606091505b50915091506101f7828286610259565b925050509392505050565b60006102307fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b610077565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608315610269578290506102b9565b60008351111561027c5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b091906103a2565b60405180910390fd5b9392505050565b6000815190506102cf816104db565b92915050565b6000602082840312156102e757600080fd5b60006102f5848285016102c0565b91505092915050565b6000610309826103e4565b61031381856103fa565b9350610323818560208601610448565b80840191505092915050565b600061033a826103ef565b6103448185610405565b9350610354818560208601610448565b61035d8161047b565b840191505092915050565b6000610375602683610405565b91506103808261048c565b604082019050919050565b600061039782846102fe565b915081905092915050565b600060208201905081810360008301526103bc818461032f565b905092915050565b600060208201905081810360008301526103dd81610368565b9050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600061042182610428565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b8381101561046657808201518184015260208101905061044b565b83811115610475576000848401525b50505050565b6000601f19601f8301169050919050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6104e481610416565b81146104ef57600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ad095c81284fd455199a2812ae9833590542bb0c90632f30b22bdc9925c7e37564736f6c63430008040033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212202581015b3c308c8d4360310ddb4eef1a724dff5cfc714f869d028eff7fa569a364736f6c63430008040033608060405234801561001057600080fd5b50613c09806100206000396000f3fe6080604052600436106101435760003560e01c8063b1e130fc116100b6578063bc197c811161006f578063bc197c8114610501578063e0e3671c1461053e578063e318b52b1461057b578063e75235b8146105a4578063ee22610b146105cf578063f23a6e611461060c57610198565b8063b1e130fc146103f5578063b759f9541461041e578063b77bf60014610447578063b7f3358d14610472578063b91a667f1461049b578063ba7e7cab146104c457610198565b8063726881111161010857806372688111146102a6578063784547a7146102d15780638dbcc2e01461030e5780639ace38c21461034b578063a0e67e2b1461038d578063ab2850da146103b857610198565b806223de291461019d57806301ffc9a7146101c6578063150b7a02146102035780632bbdea4e14610240578063547415251461026957610198565b36610198573373ffffffffffffffffffffffffffffffffffffffff167f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258743460405161018e91906134b3565b60405180910390a2005b600080fd5b3480156101a957600080fd5b506101c460048036038101906101bf91906129f1565b610649565b005b3480156101d257600080fd5b506101ed60048036038101906101e89190612d5e565b610653565b6040516101fa9190613215565b60405180910390f35b34801561020f57600080fd5b5061022a60048036038101906102259190612b80565b61078d565b6040516102379190613230565b60405180910390f35b34801561024c57600080fd5b5061026760048036038101906102629190612cce565b6107a2565b005b34801561027557600080fd5b50610290600480360381019061028b9190612d22565b610891565b60405161029d91906134b3565b60405180910390f35b3480156102b257600080fd5b506102bb610933565b6040516102c891906134ce565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f39190612e02565b610938565b6040516103059190613215565b60405180910390f35b34801561031a57600080fd5b5061033560048036038101906103309190612d87565b610975565b60405161034291906134b3565b60405180910390f35b34801561035757600080fd5b50610372600480360381019061036d9190612e02565b610996565b6040516103849695949392919061324b565b60405180910390f35b34801561039957600080fd5b506103a2610aa1565b6040516103af91906131f3565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da9190612e2b565b610c7a565b6040516103ec9190613215565b60405180910390f35b34801561040157600080fd5b5061041c60048036038101906104179190612e02565b610ca9565b005b34801561042a57600080fd5b5061044560048036038101906104409190612e02565b610ef6565b005b34801561045357600080fd5b5061045c61112e565b60405161046991906134b3565b60405180910390f35b34801561047e57600080fd5b5061049960048036038101906104949190612e67565b611134565b005b3480156104a757600080fd5b506104c260048036038101906104bd9190612c92565b611220565b005b3480156104d057600080fd5b506104eb60048036038101906104e69190612e02565b6115a9565b6040516104f891906134ce565b60405180910390f35b34801561050d57600080fd5b5061052860048036038101906105239190612ab4565b6115d6565b6040516105359190613230565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190612979565b6115ee565b6040516105729190613215565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d91906129a2565b6116bf565b005b3480156105b057600080fd5b506105b9611c33565b6040516105c691906134ce565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f19190612e02565b611c4a565b6040516106039190613215565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e9190612c00565b611f3b565b6040516106409190613230565b60405180910390f35b5050505050505050565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061071e57507f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061078657507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600063150b7a0260e01b905095945050505050565b60028054906101000a900460ff166107ca57600260019054906101000a900460ff16156107d3565b6107d2611f51565b5b610812576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610809906133d3565b60405180910390fd5b600060028054906101000a900460ff1615905080156108615760016002806101000a81548160ff0219169083151502179055506001600260016101000a81548160ff0219169083151502179055505b61086b8383611f62565b801561088c5760006002806101000a81548160ff0219169083151502179055505b505050565b600080600090505b60055481101561092c578380156108d157506003600082815260200190815260200160002060030160019054906101000a900460ff16155b80610905575082801561090457506003600082815260200190815260200160002060030160019054906101000a900460ff165b5b1561091957818061091590613746565b9250505b808061092490613746565b915050610899565b5092915050565b603281565b6000610942611c33565b60ff166003600084815260200190815260200160002060030160009054906101000a900460ff1660ff1610159050919050565b6000610983858585856123bd565b905061098e81610ef6565b949350505050565b60036020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020180546109f8906136e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610a24906136e3565b8015610a715780601f10610a4657610100808354040283529160200191610a71565b820191906000526020600020905b815481529060010190602001808311610a5457829003601f168201915b5050505050908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905086565b6060600060015467ffffffffffffffff811115610ae7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610b155781602001602082028036833780820191505090505b5090506000806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060005b600154811015610c715781838281518110610bc3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508080610c6990613746565b915050610b7f565b50819250505090565b60046020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b33610cb3816115ee565b610cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce9906132d3565b60405180910390fd5b81336004600083815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8890613453565b60405180910390fd5b836003600082815260200190815260200160002060030160019054906101000a900460ff1615610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded90613493565b60405180910390fd5b60036000868152602001908152602001600020600301600081819054906101000a900460ff1680929190610e29906136b9565b91906101000a81548160ff021916908360ff1602179055505060006004600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550843373ffffffffffffffffffffffffffffffffffffffff167f3e776e19fc0f05c1b8270744b61c5729d5d1a5d8dded1bfb81e3979e257edd5960405160405180910390a35050505050565b33610f00816115ee565b610f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f36906132d3565b60405180910390fd5b816005548110610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b90613393565b60405180910390fd5b82336004600083815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90613313565b60405180910390fd5b60036000868152602001908152602001600020600301600081819054906101000a900460ff16809291906110579061378f565b91906101000a81548160ff021916908360ff1602179055505060016004600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550843373ffffffffffffffffffffffffffffffffffffffff167f7b19c08b12f940ea76949b68d355070966056a862ad2c1aa6676ecbcc9538a6160405160405180910390a361112685611c4a565b505050505050565b60055481565b61113c61261c565b6001548160ff161115611184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117b90613333565b60405180910390fd5b60018160ff1610156111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c290613473565b60405180910390fd5b80600260006101000a81548160ff021916908360ff1602179055507fa1a39f4ff110596455f47a4a25db50c3662a86ffdb67875e4291c2efde959f1d8160405161121591906134ce565b60405180910390a150565b61122861261c565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561129157503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156112ca5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611309576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611300906132b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd90613413565b60405180910390fd5b600080600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600080600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600081548092919061154390613746565b91905055507f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea268260405161157791906131d8565b60405180910390a18060ff16600260009054906101000a900460ff1660ff16146115a5576115a481611134565b5b5050565b60006003600083815260200190815260200160002060030160009054906101000a900460ff169050919050565b600063bc197c8160e01b905098975050505050505050565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156116b85750600073ffffffffffffffffffffffffffffffffffffffff166000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6116c761261c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561173057503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156117695750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f90613373565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186c90613413565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156118df5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61191e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611915906133b3565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e1906133f3565b60405180910390fd5b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051611bef91906131d8565b60405180910390a17f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2681604051611c2691906131d8565b60405180910390a1505050565b6000600260009054906101000a900460ff16905090565b600033611c56816115ee565b611c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8c906132d3565b60405180910390fd5b82336004600083815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2b90613453565b60405180910390fd5b846003600082815260200190815260200160002060030160019054906101000a900460ff1615611d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9090613493565b60405180910390fd5b611da286610938565b15611f32576000600360008881526020019081526020016000209050611e8e8160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260010154836002018054611dfa906136e3565b9050846002018054611e0b906136e3565b80601f0160208091040260200160405190810160405280929190818152602001828054611e37906136e3565b8015611e845780601f10611e5957610100808354040283529160200191611e84565b820191906000526020600020905b815481529060010190602001808311611e6757829003601f168201915b505050505061268c565b95508515611ee55760018160030160016101000a81548160ff021916908315150217905550867f15ed165a284872ea7017f03df402a0cadfbfab588320ffaf83