UNPKG

@mantleio/contracts

Version:
559 lines 72.6 kB
{ "_format": "hh-sol-artifact-1", "contractName": "L1CrossDomainMessenger", "sourceName": "contracts/L1/messaging/L1CrossDomainMessenger.sol", "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "msgHash", "type": "bytes32" } ], "name": "FailedRelayedMessage", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "_xDomainCalldataHash", "type": "bytes32" } ], "name": "MessageAllowed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "_xDomainCalldataHash", "type": "bytes32" } ], "name": "MessageBlocked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "msgHash", "type": "bytes32" } ], "name": "RelayedMessage", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, { "indexed": false, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "bytes", "name": "message", "type": "bytes" }, { "indexed": false, "internalType": "uint256", "name": "messageNonce", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "gasLimit", "type": "uint256" } ], "name": "SentMessage", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [ { "internalType": "bytes32", "name": "_xDomainCalldataHash", "type": "bytes32" } ], "name": "allowMessage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_xDomainCalldataHash", "type": "bytes32" } ], "name": "blockMessage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "blockedMessages", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPauseOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_libAddressManager", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "libAddressManager", "outputs": [ { "internalType": "contract Lib_AddressManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pauseByPOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_target", "type": "address" }, { "internalType": "address", "name": "_sender", "type": "address" }, { "internalType": "bytes", "name": "_message", "type": "bytes" }, { "internalType": "uint256", "name": "_messageNonce", "type": "uint256" }, { "components": [ { "internalType": "bytes32", "name": "stateRoot", "type": "bytes32" }, { "components": [ { "internalType": "uint256", "name": "batchIndex", "type": "uint256" }, { "internalType": "bytes32", "name": "batchRoot", "type": "bytes32" }, { "internalType": "uint256", "name": "batchSize", "type": "uint256" }, { "internalType": "uint256", "name": "prevTotalElements", "type": "uint256" }, { "internalType": "bytes", "name": "signature", "type": "bytes" }, { "internalType": "bytes", "name": "extraData", "type": "bytes" } ], "internalType": "struct Lib_BVMCodec.ChainBatchHeader", "name": "stateRootBatchHeader", "type": "tuple" }, { "components": [ { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "bytes32[]", "name": "siblings", "type": "bytes32[]" } ], "internalType": "struct Lib_BVMCodec.ChainInclusionProof", "name": "stateRootProof", "type": "tuple" }, { "internalType": "bytes", "name": "stateTrieWitness", "type": "bytes" }, { "internalType": "bytes", "name": "storageTrieWitness", "type": "bytes" } ], "internalType": "struct IL1CrossDomainMessenger.L2MessageInclusionProof", "name": "_proof", "type": "tuple" } ], "name": "relayMessage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "relayedMessages", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_target", "type": "address" }, { "internalType": "address", "name": "_sender", "type": "address" }, { "internalType": "bytes", "name": "_message", "type": "bytes" }, { "internalType": "uint256", "name": "_queueIndex", "type": "uint256" }, { "internalType": "uint32", "name": "_oldGasLimit", "type": "uint32" }, { "internalType": "uint32", "name": "_newGasLimit", "type": "uint32" } ], "name": "replayMessage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" } ], "name": "resolve", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_target", "type": "address" }, { "internalType": "bytes", "name": "_message", "type": "bytes" }, { "internalType": "uint32", "name": "_gasLimit", "type": "uint32" } ], "name": "sendMessage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_pauseOwner", "type": "address" } ], "name": "setPauseOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "successfulMessages", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "xDomainMessageSender", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x608060405260cc80546001600160a01b03191661dead17905534801561002457600080fd5b50600080546001600160a01b0319169055613a95806100446000396000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80637738034c116100d8578063b1b1b2091161008c578063cba4c65211610066578063cba4c65214610322578063d9ce190114610335578063f2fde38b1461034857600080fd5b8063b1b1b209146102c9578063c4d66de8146102ec578063c6b94ab0146102ff57600080fd5b80638456cb59116100bd5780638456cb59146102855780638da5cb5b1461028d5780638ec6a68a146102ab57600080fd5b80637738034c1461026a57806381ada46c1461027257600080fd5b8063461a44781161012f5780636e296e45116101145780636e296e45146102475780636f1c8d471461024f578063715018a61461026257600080fd5b8063461a4478146102295780635c975abb1461023c57600080fd5b8063299ca47811610160578063299ca478146101c95780633dbb202b1461020e5780633f4ba83a1461022157600080fd5b80630ecf2eea1461017c57806321d800ec14610191575b600080fd5b61018f61018a366004612f18565b61035b565b005b6101b461019f366004612f18565b60ca6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6000546101e99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c0565b61018f61021c3660046130b3565b6103a6565b61018f6104ee565b6101e9610237366004613113565b610500565b60655460ff166101b4565b6101e96105ad565b61018f61025d366004613164565b61063c565b61018f610823565b61018f610835565b61018f610280366004612f18565b6108a4565b61018f6108ec565b60335473ffffffffffffffffffffffffffffffffffffffff166101e9565b60cd5473ffffffffffffffffffffffffffffffffffffffff166101e9565b6101b46102d7366004612f18565b60cb6020526000908152604090205460ff1681565b61018f6102fa3660046131f0565b6108f4565b6101b461030d366004612f18565b60c96020526000908152604090205460ff1681565b61018f6103303660046131f0565b610bcc565b61018f610343366004613360565b610c1b565b61018f6103563660046131f0565b61109f565b61036361113c565b600081815260c96020526040808220805460ff191660011790555182917ff52508d5339edf0d7e5060a416df98db067af561bdc60872d29c0439eaa13a0291a250565b60006103e66040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610500565b905060008173ffffffffffffffffffffffffffffffffffffffff1663b8f770056040518163ffffffff1660e01b815260040160206040518083038186803b15801561043057600080fd5b505afa158015610444573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046891906134ae565b9050600061047f8633878564ffffffffff166111a3565b905061049283828663ffffffff1661121e565b8573ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a338785886040516104de9493929190613525565b60405180910390a2505050505050565b6104f661113c565b6104fe6112bf565b565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac190610557908590600401613578565b60206040518083038186803b15801561056f57600080fd5b505afa158015610583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a7919061358b565b92915050565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff1661dead141561061f5760405162461bcd60e51b815260206004820152601f60248201527f78446f6d61696e4d65737361676553656e646572206973206e6f74207365740060448201526064015b60405180910390fd5b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b600061067c6040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610500565b6040517f2a7f18be0000000000000000000000000000000000000000000000000000000081526004810186905290915060009073ffffffffffffffffffffffffffffffffffffffff831690632a7f18be9060240160606040518083038186803b1580156106e857600080fd5b505afa1580156106fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072091906135a8565b90506000610730898989896111a3565b9050600073111100000000000000000000000000000000111130017342000000000000000000000000000000000000078784604051602001610775949392919061360d565b604051602081830303815290604052805190602001209050826000015181146108065760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520686173206e6f74206265656e20656e60448201527f7175657565642e000000000000000000000000000000000000000000000000006064820152608401610616565b61081784838763ffffffff1661121e565b50505050505050505050565b61082b61113c565b6104fe600061131e565b60cd5473ffffffffffffffffffffffffffffffffffffffff16331461089c5760405162461bcd60e51b815260206004820181905260248201527f6d73672e73656e6465722073686f756c652062652070617573656f776e65722e6044820152606401610616565b6104fe611395565b6108ac61113c565b600081815260c96020526040808220805460ff191690555182917f52c8a2680a9f4cc0ad0bf88f32096eadbebf0646ea611d93a0ce6a29a024040591a250565b61089c61113c565b6000547501000000000000000000000000000000000000000000900460ff161580801561093f575060005460017401000000000000000000000000000000000000000090910460ff16105b806109715750303b158015610971575060005474010000000000000000000000000000000000000000900460ff166001145b6109e35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610616565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610a6957600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60005473ffffffffffffffffffffffffffffffffffffffff1615610af55760405162461bcd60e51b815260206004820152602a60248201527f4c3143726f7373446f6d61696e4d657373656e67657220616c7265616479206960448201527f6e7469616c697a65642e000000000000000000000000000000000000000000006064820152608401610616565b6000805473ffffffffffffffffffffffffffffffffffffffff84167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560cc805490911661dead179055610b4d6113d2565b610b55611463565b610b5d6114fd565b610b6561159a565b8015610bc857600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b610bd461113c565b60cd80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60026097541415610c6e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610616565b6002609755610c7b611632565b6000610c89868686866111a3565b9050610c958183611685565b1515600114610d0c5760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520636f756c64206e6f7420626520766560448201527f7269666965642e000000000000000000000000000000000000000000000000006064820152608401610616565b8051602080830191909120600081815260cb90925260409091205460ff1615610d9d5760405162461bcd60e51b815260206004820152602b60248201527f50726f7669646564206d6573736167652068617320616c72656164792062656560448201527f6e2072656365697665642e0000000000000000000000000000000000000000006064820152608401610616565b600081815260c9602052604090205460ff1615610e225760405162461bcd60e51b815260206004820152602260248201527f50726f7669646564206d65737361676520686173206265656e20626c6f636b6560448201527f642e0000000000000000000000000000000000000000000000000000000000006064820152608401610616565b610e606040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610500565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161415610f015760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f742073656e64204c322d3e4c31206d6573736167657320746f204c60448201527f312073797374656d20636f6e7472616374732e000000000000000000000000006064820152608401610616565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88811691909117909155604051600091891690610f5a908890613652565b6000604051808303816000865af19150503d8060008114610f97576040519150601f19603f3d011682016040523d82523d6000602084013e610f9c565b606091505b505060cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905590508015156001141561101c57600082815260cb6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2611048565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f90600090a25b600083334360405160200161105f9392919061366e565b60408051601f198184030181529181528151602092830120600090815260ca9092529020805460ff19166001908117909155609755505050505050505050565b6110a761113c565b73ffffffffffffffffffffffffffffffffffffffff81166111305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610616565b6111398161131e565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146104fe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610616565b6060848484846040516024016111bc94939291906136c0565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6040517f6fee07e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636fee07e09061128890734200000000000000000000000000000000000007908590879060040161370a565b600060405180830381600087803b1580156112a257600080fd5b505af11580156112b6573d6000803e3d6000fd5b50505050505050565b6112c76116a8565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61139d611632565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112f43390565b6000547501000000000000000000000000000000000000000000900460ff166104fe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610616565b6000547501000000000000000000000000000000000000000000900460ff166114f45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610616565b6104fe3361131e565b6000547501000000000000000000000000000000000000000000900460ff1661158e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610616565b6065805460ff19169055565b6000547501000000000000000000000000000000000000000000900460ff1661162b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610616565b6001609755565b60655460ff16156104fe5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610616565b6000611690826116fa565b80156116a157506116a1838361189c565b9392505050565b60655460ff166104fe5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610616565b60008061173b6040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e000000000000000000000000815250610500565b60208401516040517f89a1d98000000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff8316916389a1d9809161179391600401613795565b60206040518083038186803b1580156117ab57600080fd5b505afa1580156117bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e391906137a8565b1580156116a157508251602084015160408086015190517fb768bb1700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169363b768bb179361184c9391929091906004016137ca565b60206040518083038186803b15801561186457600080fd5b505afa158015611878573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a191906137a8565b600080837342000000000000000000000000000000000000076040516020016118c6929190613842565b60408051601f1981840301815282825280516020918201209083015260009082015260600160408051601f198184030181529082905280516020918201207f420000000000000000000000000000000000000000000000000000000000000091830191909152915060009081906119569060340160408051601f1981840301815291905260608701518751611a80565b90925090506001821515146119f95760405162461bcd60e51b815260206004820152604d60248201527f4d6573736167652070617373696e67207072656465706c6f7920686173206e6f60448201527f74206265656e20696e697469616c697a6564206f7220696e76616c696420707260648201527f6f6f662070726f76696465642e00000000000000000000000000000000000000608482015260a401610616565b6000611a0482611aa9565b9050611a7584604051602001611a1c91815260200190565b60408051601f19818403018152908290527f010000000000000000000000000000000000000000000000000000000000000060208301529060210160405160208183030381529060405288608001518460400151611b6d565b979650505050505050565b600060606000611a8f86611b91565b9050611a9c818686611bc3565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290611ad683611c9e565b90506040518060800160405280611b0683600081518110611af957611af961388c565b6020026020010151611cd1565b8152602001611b2183600181518110611af957611af961388c565b8152602001611b4983600281518110611b3c57611b3c61388c565b6020026020010151611cd8565b8152602001611b6483600381518110611b3c57611b3c61388c565b90529392505050565b600080611b7986611b91565b9050611b8781868686611dda565b9695505050505050565b60608180519060200120604051602001611bad91815260200190565b6040516020818303038152906040529050919050565b600060606000611bd285611e10565b90506000806000611be4848a89611f0b565b81519295509093509150158080611bf85750815b611c445760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e0000000000006044820152606401610616565b600081611c605760405180602001604052806000815250611c8c565b611c8c86611c6f6001886138ea565b81518110611c7f57611c7f61388c565b60200260200101516123a6565b919b919a509098505050505050505050565b6040805180820182526000808252602091820152815180830190925282518252808301908201526060906105a7906123d0565b60006105a7825b6000602182600001511115611d2f5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e0000000000006044820152606401610616565b6000806000611d3d856125cf565b919450925090506000816001811115611d5857611d58613901565b14611da55760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e0000000000006044820152606401610616565b6000838660200151611db79190613930565b80519091506020841015611b875760208490036101000a90049695505050505050565b6000806000611dea878686611bc3565b91509150818015611a755750805160208083019190912087519188019190912014611a75565b60606000611e1d83611c9e565b90506000815167ffffffffffffffff811115611e3b57611e3b612f53565b604051908082528060200260200182016040528015611e8057816020015b6040805180820190915260608082526020820152815260200190600190039081611e595790505b50905060005b8251811015611f03576000611eb3848381518110611ea657611ea661388c565b6020026020010151612920565b90506040518060400160405280828152602001611ecf83611c9e565b815250838381518110611ee457611ee461388c565b6020026020010181905250508080611efb90613948565b915050611e86565b509392505050565b60006060818080611f1b876129b0565b90506000869050600080611f42604051806040016040528060608152602001606081525090565b60005b8c51811015612362578c8181518110611f6057611f6061388c565b602002602001015191508284611f769190613930565b9350611f83600188613930565b965083611fe757815180516020909101208514611fe25760405162461bcd60e51b815260206004820152601160248201527f496e76616c696420726f6f7420686173680000000000000000000000000000006044820152606401610616565b6120a4565b81515160201161204957815180516020909101208514611fe25760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c206861736800000000006044820152606401610616565b846120578360000151612b33565b146120a45760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f646520686173680000000000006044820152606401610616565b6120b060106001613930565b82602001515114156121295785518414156120ca57612362565b60008685815181106120de576120de61388c565b602001015160f81c60f81b60f81c9050600083602001518260ff16815181106121095761210961388c565b6020026020010151905061211c81612b5b565b9650600194505050612350565b6002826020015151141561230857600061214283612b91565b90506000816000815181106121595761215961388c565b016020015160f81c905060006121706002836139b0565b61217b9060026139d2565b9050600061218c848360ff16612bb5565b9050600061219a8b8a612bb5565b905060006121a88383612beb565b905060ff8516600214806121bf575060ff85166003145b15612215578083511480156121d45750808251145b156121e6576121e3818b613930565b99505b507f80000000000000000000000000000000000000000000000000000000000000009950612362945050505050565b60ff85161580612228575060ff85166001145b1561229a578251811461226457507f80000000000000000000000000000000000000000000000000000000000000009950612362945050505050565b61228b886020015160018151811061227e5761227e61388c565b6020026020010151612b5b565b9a509750612350945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e2060448201527f70726566697800000000000000000000000000000000000000000000000000006064820152608401610616565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e0000006044820152606401610616565b8061235a81613948565b915050611f45565b507f80000000000000000000000000000000000000000000000000000000000000008414866123918786612bb5565b909e909d50909b509950505050505050505050565b602081015180516060916105a7916123c0906001906138ea565b81518110611ea657611ea661388c565b60606000806123de846125cf565b919350909150600190508160018111156123fa576123fa613901565b146124475760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c50206c6973742076616c75652e0000000000000000006044820152606401610616565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816124605790505090506000835b86518110156125c4576020821061250c5760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201527f7374206c656e6774682e000000000000000000000000000000000000000000006064820152608401610616565b6000806125496040518060400160405280858c6000015161252d91906138ea565b8152602001858c602001516125429190613930565b90526125cf565b5091509150604051806040016040528083836125659190613930565b8152602001848b6020015161257a9190613930565b81525085858151811061258f5761258f61388c565b60209081029190910101526125a5600185613930565b93506125b18183613930565b6125bb9084613930565b9250505061248d565b508152949350505050565b6000806000808460000151116126275760405162461bcd60e51b815260206004820152601860248201527f524c50206974656d2063616e6e6f74206265206e756c6c2e00000000000000006044820152606401610616565b6020840151805160001a607f811161264c576000600160009450945094505050612919565b60b781116126c85760006126616080836138ea565b9050808760000151116126b65760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420524c502073686f727420737472696e672e000000000000006044820152606401610616565b60019550935060009250612919915050565b60bf81116127b75760006126dd60b7836138ea565b9050808760000151116127325760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e006044820152606401610616565b600183015160208290036101000a900461274c8183613930565b88511161279b5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c50206c6f6e6720737472696e672e00000000000000006044820152606401610616565b6127a6826001613930565b965094506000935061291992505050565b60f781116128325760006127cc60c0836138ea565b9050808760000151116128215760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c502073686f7274206c6973742e0000000000000000006044820152606401610616565b600195509350849250612919915050565b600061283f60f7836138ea565b9050808760000151116128945760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e0000006044820152606401610616565b600183015160208290036101000a90046128ae8183613930565b8851116128fd5760405162461bcd60e51b815260206004820152601660248201527f496e76616c696420524c50206c6f6e67206c6973742e000000000000000000006044820152606401610616565b612908826001613930565b965094506001935061291992505050565b9193909250565b60606000806000612930856125cf565b91945092509050600081600181111561294b5761294b613901565b146129985760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c502062797465732076616c75652e00000000000000006044820152606401610616565b6129a785602001518484612c97565b95945050505050565b60606000825160026129c291906139f5565b67ffffffffffffffff8111156129da576129da612f53565b6040519080825280601f01601f191660200182016040528015612a04576020820181803683370190505b50905060005b8351811015612b2c576004848281518110612a2757612a2761388c565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c82612a5c8360026139f5565b81518110612a6c57612a6c61388c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506010848281518110612aaf57612aaf61388c565b0160200151612ac1919060f81c6139b0565b60f81b82612ad08360026139f5565b612adb906001613930565b81518110612aeb57612aeb61388c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080612b2481613948565b915050612a0a565b5092915050565b6000602082511015612b4757506020015190565b818060200190518101906105a79190613a32565b60006060602083600001511015612b7c57612b7583612d76565b9050612b88565b612b8583612920565b90505b6116a181612b33565b60606105a7612bb08360200151600081518110611ea657611ea661388c565b6129b0565b606082518210612bd457506040805160208101909152600081526105a7565b6116a18383848651612be691906138ea565b612d81565b6000805b808451118015612bff5750808351115b8015612c805750828181518110612c1857612c1861388c565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110612c5757612c5761388c565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156116a15780612c8f81613948565b915050612bef565b606060008267ffffffffffffffff811115612cb457612cb4612f53565b6040519080825280601f01601f191660200182016040528015612cde576020820181803683370190505b509050805160001415612cf25790506116a1565b6000612cfe8587613930565b90506020820160005b612d12602087613a4b565b811015612d495782518252612d28602084613930565b9250612d35602083613930565b915080612d4181613948565b915050612d07565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b60606105a782612f02565b606081612d8f81601f613930565b1015612ddd5760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610616565b82612de88382613930565b1015612e365760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610616565b612e408284613930565b84511015612e905760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610616565b606082158015612eaf5760405191506000825260208201604052612ef9565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612ee8578051835260209283019201612ed0565b5050858452601f01601f1916604052505b50949350505050565b60606105a7826020015160008460000151612c97565b600060208284031215612f2a57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461113957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715612fa557612fa5612f53565b60405290565b6040805190810167ffffffffffffffff81118282101715612fa557612fa5612f53565b60405160a0810167ffffffffffffffff81118282101715612fa557612fa5612f53565b604051601f8201601f1916810167ffffffffffffffff8111828210171561301a5761301a612f53565b604052919050565b600067ffffffffffffffff83111561303c5761303c612f53565b61304f6020601f19601f86011601612ff1565b905082815283838301111561306357600080fd5b828260208301376000602084830101529392505050565b600082601f83011261308b57600080fd5b6116a183833560208501613022565b803563ffffffff811681146130ae57600080fd5b919050565b6000806000606084860312156130c857600080fd5b83356130d381612f31565b9250602084013567ffffffffffffffff8111156130ef57600080fd5b6130fb8682870161307a565b92505061310a6040850161309a565b90509250925092565b60006020828403121561312557600080fd5b813567ffffffffffffffff81111561313c57600080fd5b8201601f8101841361314d57600080fd5b61315c84823560208401613022565b949350505050565b60008060008060008060c0878903121561317d57600080fd5b863561318881612f31565b9550602087013561319881612f31565b9450604087013567ffffffffffffffff8111156131b457600080fd5b6131c089828a0161307a565b945050606087013592506131d66080880161309a565b91506131e460a0880161309a565b90509295509295509295565b60006020828403121561320257600080fd5b81356116a181612f31565b600060c0828403121561321f57600080fd5b613227612f82565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff8082111561326657600080fd5b6132728583860161307a565b608084015260a084013591508082111561328b57600080fd5b506132988482850161307a565b60a08301525092915050565b6000604082840312156132b657600080fd5b6132be612fab565b90508135815260208083013567ffffffffffffffff808211156132e057600080fd5b818501915085601f8301126132f457600080fd5b81358181111561330657613306612f53565b8060051b9150613317848301612ff1565b818152918301840191848101908884111561333157600080fd5b938501935b8385101561334f57843582529385019390850190613336565b808688015250505050505092915050565b600080600080600060a0868803121561337857600080fd5b853561338381612f31565b9450602086013561339381612f31565b9350604086013567ffffffffffffffff808211156133b057600080fd5b6133bc89838a0161307a565b94506060880135935060808801359150808211156133d957600080fd5b9087019060a0828a0312156133ed57600080fd5b6133f5612fce565b8235815260208301358281111561340b57600080fd5b6134178b82860161320d565b60208301525060408301358281111561342f57600080fd5b61343b8b8286016132a4565b60408301525060608301358281111561345357600080fd5b61345f8b82860161307a565b60608301525060808301358281111561347757600080fd5b6134838b82860161307a565b6080830152508093505050509295509295909350565b805164ffffffffff811681146130ae57600080fd5b6000602082840312156134c057600080fd5b6116a182613499565b60005b838110156134e45781810151838201526020016134cc565b838111156134f3576000848401525b50505050565b600081518084526135118160208601602086016134c9565b601f01601f19169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8516815260806020820152600061355460808301866134f9565b905064ffffffffff8416604083015263ffffffff8316606083015295945050505050565b6020815260006116a160208301846134f9565b60006020828403121561359d57600080fd5b81516116a181612f31565b6000606082840312156135ba57600080fd5b6040516060810181811067ffffffffffffffff821117156135dd576135dd612f53565b604052825181526135f060208401613499565b602082015261360160408401613499565b60408201529392505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525063ffffffff8416604083015260806060830152611b8760808301846134f9565b600082516136648184602087016134c9565b9190910192915050565b600084516136808184602089016134c9565b60609490941b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001691909301908152601481019190915260340192915050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526136f960808301856134f9565b905082606083015295945050505050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006129a760608301846134f9565b805182526020810151602083015260408101516040830152606081015160608301526000608082015160c0608085015261377c60c08501826134f9565b905060a083015184820360a08601526129a782826134f9565b6020815260006116a1602083018461373f565b6000602082840312156137ba57600080fd5b815180151581146116a157600080fd5b838152600060206060818401526137e4606084018661373f565b83810360408501526040810185518252828601516040848401528181518084526060850191508583019450600093505b808410156138345784518252938501936001939093019290850190613814565b509998505050505050505050565b600083516138548184602088016134c9565b60609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190920190815260140192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156138fc576138fc6138bb565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60008219821115613943576139436138bb565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561397a5761397a6138bb565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060ff8316806139c3576139c3613981565b8060ff84160691505092915050565b600060ff821660ff8416808210156139ec576139ec6138bb565b90039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a2d57613a2d6138bb565b500290565b600060208284031215613a4457600080fd5b5051919050565b600082613a5a57613a5a613981565b50049056fea2646970667358221220da611c513e7656273012f6e90e115d9967c733b4ae6c4aa49fbc587fdd60984f64736f6c63430008090033", "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101775760003560e01c80637738034c116100d8578063b1b1b2091161008c578063cba4c65211610066578063cba4c65214610322578063d9ce190114610335578063f2fde38b1461034857600080fd5b8063b1b1b209146102c9578063c4d66de8146102ec578063c6b94ab0146102ff57600080fd5b80638456cb59116100bd5780638456cb59146102855780638da5cb5b1461028d5780638ec6a68a146102ab57600080fd5b80637738034c1461026a57806381ada46c1461027257600080fd5b8063461a44781161012f5780636e296e45116101145780636e296e45146102475780636f1c8d471461024f578063715018a61461026257600080fd5b8063461a4478146102295780635c975abb1461023c57600080fd5b8063299ca47811610160578063299ca478146101c95780633dbb202b1461020e5780633f4ba83a1461022157600080fd5b80630ecf2eea1461017c57806321d800ec14610191575b600080fd5b61018f61018a366004612f18565b61035b565b005b6101b461019f366004612f18565b60ca6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6000546101e99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c0565b61018f61021c3660046130b3565b6103a6565b61018f6104ee565b6101e9610237366004613113565b610500565b60655460ff166101b4565b6101e96105ad565b61018f61025d366004613164565b61063c565b61018f610823565b61018f610835565b61018f610280366004612f18565b6108a4565b61018f6108ec565b60335473ffffffffffffffffffffffffffffffffffffffff166101e9565b60cd5473ffffffffffffffffffffffffffffffffffffffff166101e9565b6101b46102d7366004612f18565b60cb6020526000908152604090205460ff1681565b61018f6102fa3660046131f0565b6108f4565b6101b461030d366004612f18565b60c96020526000908152604090205460ff1681565b61018f6103303660046131f0565b610bcc565b61018f610343366004613360565b610c1b565b61018f6103563660046131f0565b61109f565b61036361113c565b600081815260c96020526040808220805460ff191660011790555182917ff52508d5339edf0d7e5060a416df98db067af561bdc60872d29c0439eaa13a0291a250565b60006103e66040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610500565b905060008173ffffffffffffffffffffffffffffffffffffffff1663b8f770056040518163ffffffff1660e01b815260040160206040518083038186803b15801561043057600080fd5b505afa158015610444573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046891906134ae565b9050600061047f8633878564ffffffffff166111a3565b905061049283828663ffffffff1661121e565b8573ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a338785886040516104de9493929190613525565b60405180910390a2505050505050565b6104f661113c565b6104fe6112bf565b565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac190610557908590600401613578565b60206040518083038186803b15801561056f57600080fd5b505afa158015610583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a7919061358b565b92915050565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff1661dead141561061f5760405162461bcd60e51b815260206004820152601f60248201527f78446f6d61696e4d65737361676553656e646572206973206e6f74207365740060448201526064015b60405180910390fd5b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b600061067c6040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610500565b6040517f2a7f18be0000000000000000000000000000000000000000000000000000000081526004810186905290915060009073ffffffffffffffffffffffffffffffffffffffff831690632a7f18be9060240160606040518083038186803b1580156106e857600080fd5b505afa1580156106fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072091906135a8565b90506000610730898989896111a3565b9050600073111100000000000000000000000000000000111130017342000000000000000000000000000000000000078784604051602001610775949392919061360d565b604051602081830303815290604052805190602001209050826000015181146108065760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520686173206e6f74206265656e20656e60448201527f7175657565642e000000000000000000000000000000000000000000000000006064820152608401610616565b61081784838763ffffffff1661121e565b50505050505050505050565b61082b61113c565b6104fe600061131e565b60cd5473ffffffffffffffffffffffffffffffffffffffff16331461089c5760405162461bcd60e51b815260206004820181905260248201527f6d73672e73656e6465722073686f756c652062652070617573656f776e65722e6044820152606401610616565b6104fe611395565b6108ac61113c565b600081815260c96020526040808220805460ff191690555182917f52c8a2680a9f4cc0ad0bf88f32096eadbebf0646ea611d93a0ce6a29a024040591a250565b61089c61113c565b6000547501000000000000000000000000000000000000000000900460ff161580801561093f575060005460017401000000000000000000000000000000000000000090910460ff16105b806109715750303b158015610971575060005474010000000000000000000000000000000000000000900460ff166001145b6109e35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610616565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610a6957600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60005473ffffffffffffffffffffffffffffffffffffffff1615610af55760405162461bcd60e51b815260206004820152602a60248201527f4c3143726f7373446f6d61696e4d657373656e67657220616c7265616479206960448201527f6e7469616c697a65642e000000000000000000000000000000000000000000006064820152608401610616565b6000805473ffffffffffffffffffffffffffffffffffffffff84167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560cc805490911661dead179055610b4d6113d2565b610b55611463565b610b5d6114fd565b610b6561159a565b8015610bc857600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b610bd461113c565b60cd80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60026097541415610c6e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610616565b6002609755610c7b611632565b6000610c89868686866111a3565b9050610c958183611685565b1515600114610d0c5760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520636f756c64206e6f7420626520766560448201527f7269666965642e000000000000000000000000000000000000000000000000006064820152608401610616565b8051602080830191909120600081815260cb90925260409091205460ff1615610d9d5760405162461bcd60e51b815260206004820152602b60248201527f50726f7669646564206d6573736167652068617320616c72656164792062656560448201527f6e2072656365697665642e0000000000000000000000000000000000000000006064820152608401610616565b600081815260c9602052604090205460ff1615610e225760405162461bcd60e51b815260206004820152602260248201527f50726f7669646564206d65737361676520686173206265656e20626c6f636b6560448201527f642e0000000000000000000000000000000000000000000000000000000000006064820152608401610616565b610e606040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610500565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141