UNPKG

@etherspot/contracts

Version:

Etherspot Solidity contracts

447 lines 63.5 kB
{ "_format": "hh-sol-artifact-1", "contractName": "RelayerFeeRouter", "sourceName": "@connext/nxtp-contracts/contracts/core/relayer-fee/RelayerFeeRouter.sol", "abi": [ { "inputs": [], "name": "ProposedOwnable__acceptProposedOwner_delayNotElapsed", "type": "error" }, { "inputs": [], "name": "ProposedOwnable__onlyOwner_notOwner", "type": "error" }, { "inputs": [], "name": "ProposedOwnable__onlyProposed_notProposedOwner", "type": "error" }, { "inputs": [], "name": "ProposedOwnable__proposeNewOwner_invalidProposal", "type": "error" }, { "inputs": [], "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", "type": "error" }, { "inputs": [], "name": "ProposedOwnable__renounceOwnership_delayNotElapsed", "type": "error" }, { "inputs": [], "name": "ProposedOwnable__renounceOwnership_invalidProposal", "type": "error" }, { "inputs": [], "name": "ProposedOwnable__renounceOwnership_noProposal", "type": "error" }, { "inputs": [], "name": "RelayerFeeRouter__onlyConnext_notConnext", "type": "error" }, { "inputs": [], "name": "RelayerFeeRouter__send_claimEmpty", "type": "error" }, { "inputs": [], "name": "RelayerFeeRouter__send_recipientEmpty", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "proposedOwner", "type": "address" } ], "name": "OwnershipProposed", "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": true, "internalType": "uint64", "name": "originAndNonce", "type": "uint64" }, { "indexed": true, "internalType": "uint32", "name": "origin", "type": "uint32" }, { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "bytes32[]", "name": "transferIds", "type": "bytes32[]" } ], "name": "Receive", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint32", "name": "domain", "type": "uint32" }, { "indexed": false, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "bytes32[]", "name": "transferIds", "type": "bytes32[]" }, { "indexed": false, "internalType": "bytes32", "name": "remote", "type": "bytes32" }, { "indexed": false, "internalType": "bytes", "name": "message", "type": "bytes" } ], "name": "Send", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "connext", "type": "address" } ], "name": "SetConnext", "type": "event" }, { "inputs": [], "name": "VERSION", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptProposedOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "connext", "outputs": [ { "internalType": "contract IConnextHandler", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "delay", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_domain", "type": "uint32" }, { "internalType": "bytes32", "name": "_router", "type": "bytes32" } ], "name": "enrollRemoteRouter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_origin", "type": "uint32" }, { "internalType": "uint32", "name": "_nonce", "type": "uint32" }, { "internalType": "bytes32", "name": "_sender", "type": "bytes32" }, { "internalType": "bytes", "name": "_message", "type": "bytes" } ], "name": "handle", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_xAppConnectionManager", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newlyProposed", "type": "address" } ], "name": "proposeNewOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "proposed", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proposedTimestamp", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "name": "remotes", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounced", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_domain", "type": "uint32" }, { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "bytes32[]", "name": "_transferIds", "type": "bytes32[]" } ], "name": "send", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_connext", "type": "address" } ], "name": "setConnext", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_xAppConnectionManager", "type": "address" } ], "name": "setXAppConnectionManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "xAppConnectionManager", "outputs": [ { "internalType": "contract XAppConnectionManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x608060405234801561001057600080fd5b50613490806100206000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063b1f8100d116100a2578063d1851c9211610071578063d1851c921461027f578063d232c2201461029d578063d7d680a3146102bb578063de4b0548146102d7578063ffa1ad74146102f557610116565b8063b1f8100d14610221578063b49c53a71461023d578063c4d66de814610259578063c5b350df1461027557610116565b80636a42b8f8116100e95780636a42b8f81461018f578063715018a6146101ad57806383bbb806146101b75780638da5cb5b146101e7578063ab2dc3f51461020557610116565b80633339df961461011b5780633cf52ffb1461013957806341bdc8b5146101575780634d6f201314610173575b600080fd5b610123610313565b6040516101309190612090565b60405180910390f35b610141610339565b60405161014e91906120c4565b60405180910390f35b610171600480360381019061016c9190612131565b610343565b005b61018d60048036038101906101889190612131565b61040e565b005b61019761051c565b6040516101a491906120c4565b60405180910390f35b6101b5610527565b005b6101d160048036038101906101cc919061219a565b6106e9565b6040516101de91906121e0565b60405180910390f35b6101ef610701565b6040516101fc919061220a565b60405180910390f35b61021f600480360381019061021a9190612397565b61072a565b005b61023b60048036038101906102369190612131565b61090c565b005b6102576004803603810190610252919061241a565b610ae8565b005b610273600480360381019061026e9190612131565b610b97565b005b61027d610c2d565b005b610287610d2a565b604051610294919061220a565b60405180910390f35b6102a5610d54565b6040516102b29190612475565b60405180910390f35b6102d560048036038101906102d091906124f0565b610dac565b005b6102df61103c565b6040516102ec9190612585565b60405180910390f35b6102fd611062565b60405161030a91906125bc565b60405180910390f35b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b3373ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146103ca576040517f8d450dd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80603460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610495576040517f8d450dd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80609860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f8ff00ea0f06ea523b8f4b80a53bb86b4967c9909b4e354b47a83371249ad57f360405160405180910390a250565b600062093a80905090565b3373ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105ae576040517f8d450dd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025414156105eb576040517f392cc0fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a80600254426105fd9190612606565b11610634576040517f86d4b3f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106bc576040517f23295ef900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106e7600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611067565b565b60666020528060005260406000206000915090505481565b60008060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61073333611176565b610772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076990612697565b60405180910390fd5b838261077e828261121b565b6107bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b490612703565b60405180910390fd5b60006107e16107d660008661124790919063ffffffff16565b62ffffff1916611272565b905060006107f48262ffffff1916611292565b905060006108078362ffffff19166112e6565b9050609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d7aada8183836040518363ffffffff1660e01b81526004016108669291906127e1565b600060405180830381600087803b15801561088057600080fd5b505af1158015610894573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168963ffffffff166108c08b8b611400565b67ffffffffffffffff167fb29810b17f96b207e4d6c91fd73ec7ab882db28c3a239f2eb6c7c801c43d003b846040516108f99190612811565b60405180910390a4505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610993576040517f8d450dd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015610a1d5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15610a54576040517f23780cca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610adc576040517f945f6e7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ae581611427565b50565b3373ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b6f576040517f8d450dd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80606660008463ffffffff1663ffffffff168152602001908152602001600020819055505050565b6000610ba360016114d7565b90508015610bc7576001600060016101000a81548160ff0219169083151502179055505b610bd0826115c7565b8015610c295760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610c20919061286e565b60405180910390a15b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cb4576040517f234fe4e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8060025442610cc69190612606565b11610cfd576040517fd39c12bb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d28600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611067565b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008073ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905090565b609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e33576040517f14e189b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828290501415610e71576040517f5aef8ded00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ed8576040517ff7afa16f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ee38561169d565b90506000610ef285858561170c565b9050603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fa92f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8591906128c7565b73ffffffffffffffffffffffffffffffffffffffff1663fa31de018784846040518463ffffffff1660e01b8152600401610fc19392919061298b565b600060405180830381600087803b158015610fdb57600080fd5b505af1158015610fef573d6000803e3d6000fd5b505050507f90d6f02f078dba10aa43c39bf7a3d3bc9629a280b078d473da5486c6531ec64186868686868660405161102c96959493929190612a2a565b60405180910390a1505050505050565b609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081565b60008060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006002819055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635190bc53836040518263ffffffff1660e01b81526004016111d3919061220a565b602060405180830381865afa1580156111f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112149190612ab9565b9050919050565b600081606660008563ffffffff1663ffffffff1681526020019081526020016000205414905092915050565b6000808351905060006020850190506112688464ffffffffff168284611754565b9250505092915050565b600061128b611280836117bc565b62ffffff191661180e565b9050919050565b60008160016112c28160018111156112ad576112ac612ae6565b5b8362ffffff191661186090919063ffffffff16565b506112dd60018562ffffff191661190e90919063ffffffff16565b92505050919050565b606081600161131681600181111561130157611300612ae6565b5b8362ffffff191661186090919063ffffffff16565b506000611336601560208762ffffff19166119249092919063ffffffff16565b905060008167ffffffffffffffff8111156113545761135361226c565b5b6040519080825280602002602001820160405280156113825781602001602082028036833780820191505090505b50905060005b828110156113f3576113c7602060ff16826113a39190612b15565b60356113af9190612b6f565b60208962ffffff191661195b9092919063ffffffff16565b8282815181106113da576113d9612bc5565b5b6020026020010181815250508080600101915050611388565b5080945050505050919050565b60008163ffffffff1660208463ffffffff1667ffffffffffffffff16901b17905092915050565b4260028190555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a60405160405180910390a250565b60008060019054906101000a900460ff161561154e5760018260ff16148015611506575061150430611aa0565b155b611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c90612c66565b60405180910390fd5b600090506115c2565b8160ff1660008054906101000a900460ff1660ff16106115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90612c66565b60405180910390fd5b816000806101000a81548160ff021916908360ff160217905550600190505b919050565b60006115d360016114d7565b905080156115f7576001600060016101000a81548160ff0219169083151502179055505b81603460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611640611ac3565b80156116995760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611690919061286e565b60405180910390a15b5050565b6000606660008363ffffffff1663ffffffff1681526020019081526020016000205490506000801b811415611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe90612cd2565b60405180910390fd5b919050565b606060018081111561172157611720612ae6565b5b8484849050858560405160200161173c959493929190612df8565b60405160208183030381529060405290509392505050565b60008082846117639190612b6f565b905060405181111561177457600090505b60008114156117a6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009150506117b5565b6117b1858585611b1c565b9150505b9392505050565b60006117c782611b3d565b156117fe576117f76001808111156117e2576117e1612ae6565b5b8362ffffff1916611b9390919063ffffffff16565b9050611809565b611806611bae565b90505b919050565b600061181982611bd6565b611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184f90612e90565b60405180910390fd5b819050919050565b600061186c8383611c19565b61190557600061188a61187e85611c3c565b64ffffffffff16611c49565b915050600061189f8464ffffffffff16611c49565b915050600082826040516020016118b7929190612f9f565b6040516020818303038152906040529050806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc9190613025565b60405180910390fd5b82905092915050565b600061191c83836014611924565b905092915050565b600060088260206119359190613047565b61193f919061307b565b60ff1661194d85858561195b565b60001c901c90509392505050565b6000808260ff161415611973576000801b9050611a99565b61197c84611d07565b6bffffffffffffffffffffffff168260ff16846119999190612b6f565b1115611a16576119da6119ab85611d27565b6bffffffffffffffffffffffff166119c286611d07565b6bffffffffffffffffffffffff16858560ff16611d47565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0d9190613025565b60405180910390fd5b60208260ff161115611a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5490613128565b60405180910390fd5b60006008830290506000611a7086611d27565b6bffffffffffffffffffffffff1690506000611a8b83611db5565b905080868301511693505050505b9392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b09906131ba565b60405180910390fd5b611b1a611de4565b565b600083811760601b905082811760601b905081811760181b90509392505050565b600080611b4f8362ffffff1916611d07565b6bffffffffffffffffffffffff16905060558110158015611b8b57506000602060ff16603583611b7f9190612606565b611b899190613209565b145b915050919050565b60008260281b60281c811790508160d81b8117905092915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000905090565b600064ffffffffff611be783611c3c565b64ffffffffff161415611bfd5760009050611c14565b6000611c0883611e3e565b90506040518111199150505b919050565b60008164ffffffffff16611c2c84611c3c565b64ffffffffff1614905092915050565b60008160d81c9050919050565b6000806000601f90505b600f8160ff161115611ca6576000600882611c6e919061307b565b60ff1685901c9050611c7f81611e68565b61ffff168417935060108260ff1614611c9a57601084901b93505b60018203915050611c53565b506000600f90505b60ff8160ff161015611d01576000600882611cc9919061307b565b60ff1685901c9050611cda81611e68565b61ffff168317925060008260ff1614611cf557601083901b92505b60018203915050611cae565b50915091565b6000806bffffffffffffffffffffffff9050808360181c16915050919050565b6000806bffffffffffffffffffffffff9050808360781c16915050919050565b60606000611d5486611c49565b9150506000611d6286611c49565b9150506000611d7086611c49565b9150506000611d7e86611c49565b91505083838383604051602001611d9894939291906133fe565b604051602081830303815290604052945050505050949350505050565b60007f8000000000000000000000000000000000000000000000000000000000000000600183031d9050919050565b600060019054906101000a900460ff16611e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2a906131ba565b60405180910390fd5b611e3c33611067565b565b6000611e4982611d07565b611e5283611d27565b016bffffffffffffffffffffffff169050919050565b6000611e7a60048360ff16901c611ea1565b60ff168117905060088161ffff16901b9050611e9582611ea1565b60ff1681179050919050565b60008060f08317905060f08160ff161415611ec057603091505061200c565b60f18160ff161415611ed657603191505061200c565b60f28160ff161415611eec57603291505061200c565b60f38160ff161415611f0257603391505061200c565b60f48160ff161415611f1857603491505061200c565b60f58160ff161415611f2e57603591505061200c565b60f68160ff161415611f4457603691505061200c565b60f78160ff161415611f5a57603791505061200c565b60f88160ff161415611f7057603891505061200c565b60f98160ff161415611f8657603991505061200c565b60fa8160ff161415611f9c57606191505061200c565b60fb8160ff161415611fb257606291505061200c565b60fc8160ff161415611fc857606391505061200c565b60fd8160ff161415611fde57606491505061200c565b60fe8160ff161415611ff457606591505061200c565b60ff8160ff16141561200a57606691505061200c565b505b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061205661205161204c84612011565b612031565b612011565b9050919050565b60006120688261203b565b9050919050565b600061207a8261205d565b9050919050565b61208a8161206f565b82525050565b60006020820190506120a56000830184612081565b92915050565b6000819050919050565b6120be816120ab565b82525050565b60006020820190506120d960008301846120b5565b92915050565b6000604051905090565b600080fd5b600080fd5b60006120fe82612011565b9050919050565b61210e816120f3565b811461211957600080fd5b50565b60008135905061212b81612105565b92915050565b600060208284031215612147576121466120e9565b5b60006121558482850161211c565b91505092915050565b600063ffffffff82169050919050565b6121778161215e565b811461218257600080fd5b50565b6000813590506121948161216e565b92915050565b6000602082840312156121b0576121af6120e9565b5b60006121be84828501612185565b91505092915050565b6000819050919050565b6121da816121c7565b82525050565b60006020820190506121f560008301846121d1565b92915050565b612204816120f3565b82525050565b600060208201905061221f60008301846121fb565b92915050565b61222e816121c7565b811461223957600080fd5b50565b60008135905061224b81612225565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6122a48261225b565b810181811067ffffffffffffffff821117156122c3576122c261226c565b5b80604052505050565b60006122d66120df565b90506122e2828261229b565b919050565b600067ffffffffffffffff8211156123025761230161226c565b5b61230b8261225b565b9050602081019050919050565b82818337600083830152505050565b600061233a612335846122e7565b6122cc565b90508281526020810184848401111561235657612355612256565b5b612361848285612318565b509392505050565b600082601f83011261237e5761237d612251565b5b813561238e848260208601612327565b91505092915050565b600080600080608085870312156123b1576123b06120e9565b5b60006123bf87828801612185565b94505060206123d087828801612185565b93505060406123e18782880161223c565b925050606085013567ffffffffffffffff811115612402576124016120ee565b5b61240e87828801612369565b91505092959194509250565b60008060408385031215612431576124306120e9565b5b600061243f85828601612185565b92505060206124508582860161223c565b9150509250929050565b60008115159050919050565b61246f8161245a565b82525050565b600060208201905061248a6000830184612466565b92915050565b600080fd5b600080fd5b60008083601f8401126124b0576124af612251565b5b8235905067ffffffffffffffff8111156124cd576124cc612490565b5b6020830191508360208202830111156124e9576124e8612495565b5b9250929050565b6000806000806060858703121561250a576125096120e9565b5b600061251887828801612185565b94505060206125298782880161211c565b935050604085013567ffffffffffffffff81111561254a576125496120ee565b5b6125568782880161249a565b925092505092959194509250565b600061256f8261205d565b9050919050565b61257f81612564565b82525050565b600060208201905061259a6000830184612576565b92915050565b600060ff82169050919050565b6125b6816125a0565b82525050565b60006020820190506125d160008301846125ad565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612611826120ab565b915061261c836120ab565b92508282101561262f5761262e6125d7565b5b828203905092915050565b600082825260208201905092915050565b7f217265706c696361000000000000000000000000000000000000000000000000600082015250565b600061268160088361263a565b915061268c8261264b565b602082019050919050565b600060208201905081810360008301526126b081612674565b9050919050565b7f2172656d6f746520726f75746572000000000000000000000000000000000000600082015250565b60006126ed600e8361263a565b91506126f8826126b7565b602082019050919050565b6000602082019050818103600083015261271c816126e0565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612758816121c7565b82525050565b600061276a838361274f565b60208301905092915050565b6000602082019050919050565b600061278e82612723565b612798818561272e565b93506127a38361273f565b8060005b838110156127d45781516127bb888261275e565b97506127c683612776565b9250506001810190506127a7565b5085935050505092915050565b60006040820190506127f660008301856121fb565b81810360208301526128088184612783565b90509392505050565b6000602082019050818103600083015261282b8184612783565b905092915050565b6000819050919050565b600061285861285361284e84612833565b612031565b6125a0565b9050919050565b6128688161283d565b82525050565b6000602082019050612883600083018461285f565b92915050565b6000612894826120f3565b9050919050565b6128a481612889565b81146128af57600080fd5b50565b6000815190506128c18161289b565b92915050565b6000602082840312156128dd576128dc6120e9565b5b60006128eb848285016128b2565b91505092915050565b6128fd8161215e565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561293d578082015181840152602081019050612922565b8381111561294c576000848401525b50505050565b600061295d82612903565b612967818561290e565b935061297781856020860161291f565b6129808161225b565b840191505092915050565b60006060820190506129a060008301866128f4565b6129ad60208301856121d1565b81810360408301526129bf8184612952565b9050949350505050565b600080fd5b60006129da838561272e565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115612a0d57612a0c6129c9565b5b602083029250612a1e838584612318565b82840190509392505050565b600060a082019050612a3f60008301896128f4565b612a4c60208301886121fb565b8181036040830152612a5f8186886129ce565b9050612a6e60608301856121d1565b8181036080830152612a808184612952565b9050979650505050505050565b612a968161245a565b8114612aa157600080fd5b50565b600081519050612ab381612a8d565b92915050565b600060208284031215612acf57612ace6120e9565b5b6000612add84828501612aa4565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000612b20826120ab565b9150612b2b836120ab565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b6457612b636125d7565b5b828202905092915050565b6000612b7a826120ab565b9150612b85836120ab565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bba57612bb96125d7565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612c50602e8361263a565b9150612c5b82612bf4565b604082019050919050565b60006020820190508181036000830152612c7f81612c43565b9050919050565b7f2172656d6f746500000000000000000000000000000000000000000000000000600082015250565b6000612cbc60078361263a565b9150612cc782612c86565b602082019050919050565b60006020820190508181036000830152612ceb81612caf565b9050919050565b60008160f81b9050919050565b6000612d0a82612cf2565b9050919050565b612d22612d1d826125a0565b612cff565b82525050565b60008160601b9050919050565b6000612d4082612d28565b9050919050565b6000612d5282612d35565b9050919050565b612d6a612d65826120f3565b612d47565b82525050565b6000819050919050565b612d8b612d86826120ab565b612d70565b82525050565b600081905092915050565b6000612da88385612d91565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115612ddb57612dda6129c9565b5b602083029250612dec838584612318565b82840190509392505050565b6000612e048288612d11565b600182019150612e148287612d59565b601482019150612e248286612d7a565b602082019150612e35828486612d9c565b91508190509695505050505050565b7f56616c696469747920617373657274696f6e206661696c656400000000000000600082015250565b6000612e7a60198361263a565b9150612e8582612e44565b602082019050919050565b60006020820190508181036000830152612ea981612e6d565b9050919050565b600081905092915050565b7f5479706520617373657274696f6e206661696c65642e20476f74203078000000600082015250565b6000612ef1601d83612eb0565b9150612efc82612ebb565b601d82019050919050565b600069ffffffffffffffffffff82169050919050565b60008160b01b9050919050565b6000612f3582612f1d565b9050919050565b612f4d612f4882612f07565b612f2a565b82525050565b7f2e20457870656374656420307800000000000000000000000000000000000000600082015250565b6000612f89600d83612eb0565b9150612f9482612f53565b600d82019050919050565b6000612faa82612ee4565b9150612fb68285612f3c565b600a82019150612fc582612f7c565b9150612fd18284612f3c565b600a820191508190509392505050565b600081519050919050565b6000612ff782612fe1565b613001818561263a565b935061301181856020860161291f565b61301a8161225b565b840191505092915050565b6000602082019050818103600083015261303f8184612fec565b905092915050565b6000613052826125a0565b915061305d836125a0565b9250828210156130705761306f6125d7565b5b828203905092915050565b6000613086826125a0565b9150613091836125a0565b92508160ff04831182151516156130ab576130aa6125d7565b5b828202905092915050565b7f54797065644d656d566965772f696e646578202d20417474656d70746564207460008201527f6f20696e646578206d6f7265207468616e203332206279746573000000000000602082015250565b6000613112603a8361263a565b915061311d826130b6565b604082019050919050565b6000602082019050818103600083015261314181613105565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b60006131a4602b8361263a565b91506131af82613148565b604082019050919050565b600060208201905081810360008301526131d381613197565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613214826120ab565b915061321f836120ab565b92508261322f5761322e6131da565b5b828206905092915050565b7f54797065644d656d566965772f696e646578202d204f76657272616e2074686560008201527f20766965772e20536c6963652069732061742030780000000000000000000000602082015250565b6000613296603583612eb0565b91506132a18261323a565b603582019050919050565b600065ffffffffffff82169050919050565b60008160d01b9050919050565b60006132d6826132be565b9050919050565b6132ee6132e9826132ac565b6132cb565b82525050565b7f2077697468206c656e6774682030780000000000000000000000000000000000600082015250565b600061332a600f83612eb0565b9150613335826132f4565b600f82019050919050565b7f2e20417474656d7074656420746f20696e646578206174206f6666736574203060008201527f7800000000000000000000000000000000000000000000000000000000000000602082015250565b600061339c602183612eb0565b91506133a782613340565b602182019050919050565b7f2e00000000000000000000000000000000000000000000000000000000000000600082015250565b60006133e8600183612eb0565b91506133f3826133b2565b600182019050919050565b600061340982613289565b915061341582876132dd565b6006820191506134248261331d565b915061343082866132dd565b60068201915061343f8261338f565b915061344b82856132dd565b60068201915061345a8261331d565b915061346682846132dd565b600682019150613475826133db565b91508190509594505050505056fea164736f6c634300080b000a", "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063b1f8100d116100a2578063d1851c9211610071578063d1851c921461027f578063d232c2201461029d578063d7d680a3146102bb578063de4b0548146102d7578063ffa1ad74146102f557610116565b8063b1f8100d14610221578063b49c53a71461023d578063c4d66de814610259578063c5b350df1461027557610116565b80636a42b8f8116100e95780636a42b8f81461018f578063715018a6146101ad57806383bbb806146101b75780638da5cb5b146101e7578063ab2dc3f51461020557610116565b80633339df961461011b5780633cf52ffb1461013957806341bdc8b5146101575780634d6f201314610173575b600080fd5b610123610313565b6040516101309190612090565b60405180910390f35b610141610339565b60405161014e91906120c4565b60405180910390f35b610171600480360381019061016c9190612131565b610343565b005b61018d60048036038101906101889190612131565b61040e565b005b61019761051c565b6040516101a491906120c4565b60405180910390f35b6101b5610527565b005b6101d160048036038101906101cc919061219a565b6106e9565b6040516101de91906121e0565b60405180910390f35b6101ef610701565b6040516101fc919061220a565b60405180910390f35b61021f600480360381019061021a9190612397565b61072a565b005b61023b60048036038101906102369190612131565b61090c565b005b6102576004803603810190610252919061241a565b610ae8565b005b610273600480360381019061026e9190612131565b610b97565b005b61027d610c2d565b005b610287610d2a565b604051610294919061220a565b60405180910390f35b6102a5610d54565b6040516102b29190612475565b60405180910390f35b6102d560048036038101906102d091906124f0565b610dac565b005b6102df61103c565b6040516102ec9190612585565b60405180910390f35b6102fd611062565b60405161030a91906125bc565b60405180910390f35b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b3373ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146103ca576040517f8d450dd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80603460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610495576040517f8d450dd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80609860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f8ff00ea0f06ea523b8f4b80a53bb86b4967c9909b4e354b47a83371249ad57f360405160405180910390a250565b600062093a80905090565b3373ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105ae576040517f8d450dd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025414156105eb576040517f392cc0fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a80600254426105fd9190612606565b11610634576040517f86d4b3f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106bc576040517f23295ef900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106e7600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611067565b565b60666020528060005260406000206000915090505481565b60008060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61073333611176565b610772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076990612697565b60405180910390fd5b838261077e828261121b565b6107bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b490612703565b60405180910390fd5b60006107e16107d660008661124790919063ffffffff16565b62ffffff1916611272565b905060006107f48262ffffff1916611292565b905060006108078362ffffff19166112e6565b9050609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d7aada8183836040518363ffffffff1660e01b81526004016108669291906127e1565b600060405180830381600087803b15801561088057600080fd5b505af1158015610894573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168963ffffffff166108c08b8b611400565b67ffffffffffffffff167fb29810b17f96b207e4d6c91fd73ec7ab882db28c3a239f2eb6c7c801c43d003b846040516108f99190612811565b60405180910390a4505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610993576040517f8d450dd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015610a1d5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15610a54576040517f23780cca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610adc576040517f945f6e7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ae581611427565b50565b3373ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b6f576040517f8d450dd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80606660008463ffffffff1663ffffffff168152602001908152602001600020819055505050565b6000610ba360016114d7565b90508015610bc7576001600060016101000a81548160ff0219169083151502179055505b610bd0826115c7565b8015610c295760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610c20919061286e565b60405180910390a15b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cb4576040517f234fe4e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8060025442610cc69190612606565b11610cfd576040517fd39c12bb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d28600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611067565b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008073ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905090565b609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e33576040517f14e189b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828290501415610e71576040517f5aef8ded00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ed8576040517ff7afa16f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ee38561169d565b90506000610ef285858561170c565b9050603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fa92f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8591906128c7565b73ffffffffffffffffffffffffffffffffffffffff1663fa31de018784846040518463ffffffff1660e01b8152600401610fc19392919061298b565b600060405180830381600087803b158015610fdb57600080fd5b505af1158015610fef573d6000803e3d6000fd5b505050507f90d6f02f078dba10aa43c39bf7a3d3bc9629a280b078d473da5486c6531ec64186868686868660405161102c96959493929190612a2a565b60405180910390a1505050505050565b609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081565b60008060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006002819055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635190bc53836040518263ffffffff1660e01b81526004016111d3919061220a565b602060405180830381865afa1580156111f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112149190612ab9565b9050919050565b600081606660008563ffffffff1663ffffffff1681526020019081526020016000205414905092915050565b6000808351905060006020850190506112688464ffffffffff168284611754565b9250505092915050565b600061128b611280836117bc565b62ffffff191661180e565b9050919050565b60008160016112c28160018111156112ad576112ac612ae6565b5b8362ffffff191661186090919063ffffffff16565b506112dd60018562ffffff191661190e90919063ffffffff16565b92505050919050565b606081600161131681600181111561130157611300612ae6565b5b8362ffffff191661186090919063ffffffff16565b506000611336601560208762ffffff19166119249092919063ffffffff16565b905060008167ffffffffffffffff8111156113545761135361226c565b5b6040519080825280602002602001820160405280156113825781602001602082028036833780820191505090505b50905060005b828110156113f3576113c7602060ff16826113a39190612b15565b60356113af9190612b6f565b60208962ffffff191661195b9092919063ffffffff16565b8282815181106113da576113d9612bc5565b5b6020026020010181815250508080600101915050611388565b5080945050505050919050565b60008163ffffffff1660208463ffffffff1667ffffffffffffffff16901b17905092915050565b4260028190555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a60405160405180910390a250565b60008060019054906101000a900460ff161561154e5760018260ff16148015611506575061150430611aa0565b155b611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c90612c66565b60405180910390fd5b600090506115c2565b8160ff1660008054906101000a900460ff1660ff16106115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90612c66565b60405180910390fd5b816000806101000a81548160ff021916908360ff160217905550600190505b919050565b60006115d360016114d7565b905080156115f7576001600060016101000a81548160ff0219169083151502179055505b81603460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611640611ac3565b80156116995760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611690919061286e565b60405180910390a15b5050565b6000606660008363ffffffff1663ffffffff1681526020019081526020016000205490506000801b811415611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe90612cd2565b60405180910390fd5b919050565b606060018081111561172157611720612ae6565b5b8484849050858560405160200161173c959493929190612df8565b60405160208183030381529060405290509392505050565b60008082846117639190612b6f565b905060405181111561177457600090505b60008114156117a6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009150506117b5565b6117b1858585611b1c565b9150505b9392505050565b60006117c782611b3d565b156117fe576117f76001808111156117e2576117e1612ae6565b5b8362ffffff1916611b9390919063ffffffff16565b9050611809565b611806611bae565b90505b919050565b600061181982611bd6565b611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184f90612e90565b60405180910390fd5b819050919050565b600061186c8383611c19565b61190557600061188a61187e85611c3c565b64ffffffffff16611c49565b915050600061189f8464ffffffffff16611c49565b915050600082826040516020016118b7929190612f9f565b6040516020818303038152906040529050806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc9190613025565b60405180910390fd5b82905092915050565b600061191c83836014611924565b905092915050565b600060088260206119359190613047565b61193f919061307b565b60ff1661194d85858561195b565b60001c901c90509392505050565b6000808260ff161415611973576000801b9050611a99565b61197c84611d07565b6bffffffffffffffffffffffff168260ff16846119999190612b6f565b1115611a16576119da6119ab85611d27565b6bffffffffffffffffffffffff166119c286611d07565b6bffffffffffffffffffffffff16858560ff16611d47565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0d9190613025565b60405180910390fd5b60208260ff161115611a5d576040517f08c379a000000000000000000000000000000000000000000000000000