UNPKG

@mantleio/contracts

Version:
381 lines 53.3 kB
{ "_format": "hh-sol-artifact-1", "contractName": "CallOpVerifier", "sourceName": "contracts/L1/fraud-proof/verifier/subverifiers/CallOpVerifier.sol", "abi": [ { "inputs": [ { "components": [ { "internalType": "address", "name": "coinbase", "type": "address" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "internalType": "uint256", "name": "number", "type": "uint256" }, { "internalType": "address", "name": "origin", "type": "address" }, { "components": [ { "internalType": "uint64", "name": "nonce", "type": "uint64" }, { "internalType": "uint256", "name": "gasPrice", "type": "uint256" }, { "internalType": "uint64", "name": "gas", "type": "uint64" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "uint256", "name": "v", "type": "uint256" }, { "internalType": "uint256", "name": "r", "type": "uint256" }, { "internalType": "uint256", "name": "s", "type": "uint256" } ], "internalType": "struct EVMTypesLib.Transaction", "name": "transaction", "type": "tuple" }, { "internalType": "bytes32", "name": "inputRoot", "type": "bytes32" }, { "internalType": "bytes32", "name": "txHash", "type": "bytes32" } ], "internalType": "struct VerificationContext.Context", "name": "ctx", "type": "tuple" }, { "internalType": "bytes32", "name": "currStateHash", "type": "bytes32" }, { "internalType": "bytes", "name": "encoded", "type": "bytes" } ], "name": "executeOneStepProof", "outputs": [ { "components": [ { "internalType": "uint64", "name": "blockNumber", "type": "uint64" }, { "internalType": "uint64", "name": "transactionIdx", "type": "uint64" }, { "internalType": "uint16", "name": "depth", "type": "uint16" }, { "internalType": "uint64", "name": "gas", "type": "uint64" }, { "internalType": "uint64", "name": "refund", "type": "uint64" }, { "internalType": "bytes32", "name": "lastDepthHash", "type": "bytes32" }, { "internalType": "address", "name": "contractAddress", "type": "address" }, { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint8", "name": "callFlag", "type": "uint8" }, { "internalType": "uint64", "name": "out", "type": "uint64" }, { "internalType": "uint64", "name": "outSize", "type": "uint64" }, { "internalType": "uint64", "name": "pc", "type": "uint64" }, { "internalType": "uint8", "name": "opCode", "type": "uint8" }, { "internalType": "bytes32", "name": "codeHash", "type": "bytes32" }, { "internalType": "uint64", "name": "stackSize", "type": "uint64" }, { "internalType": "bytes32", "name": "stackHash", "type": "bytes32" }, { "internalType": "uint64", "name": "memSize", "type": "uint64" }, { "internalType": "bytes32", "name": "memRoot", "type": "bytes32" }, { "internalType": "uint64", "name": "inputDataSize", "type": "uint64" }, { "internalType": "bytes32", "name": "inputDataRoot", "type": "bytes32" }, { "internalType": "uint64", "name": "returnDataSize", "type": "uint64" }, { "internalType": "bytes32", "name": "returnDataRoot", "type": "bytes32" }, { "internalType": "bytes32", "name": "committedGlobalStateRoot", "type": "bytes32" }, { "internalType": "bytes32", "name": "globalStateRoot", "type": "bytes32" }, { "internalType": "bytes32", "name": "selfDestructAcc", "type": "bytes32" }, { "internalType": "bytes32", "name": "logAcc", "type": "bytes32" }, { "internalType": "bytes32", "name": "blockHashRoot", "type": "bytes32" }, { "internalType": "bytes32", "name": "accessListRoot", "type": "bytes32" } ], "internalType": "struct OneStepProof.StateProof", "name": "endState", "type": "tuple" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "coinbase", "type": "address" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "internalType": "uint256", "name": "number", "type": "uint256" }, { "internalType": "address", "name": "origin", "type": "address" }, { "components": [ { "internalType": "uint64", "name": "nonce", "type": "uint64" }, { "internalType": "uint256", "name": "gasPrice", "type": "uint256" }, { "internalType": "uint64", "name": "gas", "type": "uint64" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "uint256", "name": "v", "type": "uint256" }, { "internalType": "uint256", "name": "r", "type": "uint256" }, { "internalType": "uint256", "name": "s", "type": "uint256" } ], "internalType": "struct EVMTypesLib.Transaction", "name": "transaction", "type": "tuple" }, { "internalType": "bytes32", "name": "inputRoot", "type": "bytes32" }, { "internalType": "bytes32", "name": "txHash", "type": "bytes32" } ], "internalType": "struct VerificationContext.Context", "name": "ctx", "type": "tuple" }, { "internalType": "bytes32", "name": "currStateHash", "type": "bytes32" }, { "internalType": "bytes", "name": "encoded", "type": "bytes" } ], "name": "verifyOneStepProof", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" } ], "bytecode": "0x608060405234801561001057600080fd5b506129d0806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80632138b3e41461003b57806389c3ad0f14610061575b600080fd5b61004e6100493660046124b6565b610081565b6040519081526020015b60405180910390f35b61007461006f3660046124b6565b6100a0565b60405161005891906125a0565b6000610097610092868686866100a0565b6103d9565b95945050505050565b604080516103a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052610260810182905261028081018290526102a081018290526102c081018290526102e081018290526103008101829052610320810182905261034081018290526103608101829052610380810191909152604080516103a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052610260810182905261028081018290526102a081018290526102c081018290526102e081018290526103008101829052610320810182905261034081018290526103608101829052610380810182905261027d87868685610479565b60405191935091506000908387823783902090508681146102e55760405162461bcd60e51b815260206004820152600f60248201527f4261642053746174652050726f6f66000000000000000000000000000000000060448201526064015b60405180910390fd5b6101a082015160f060ff821614156102fc576103cc565b8060ff1660f1141561030d576103cc565b8060ff1660f3141561031e576103cc565b8060ff1660f2141561032f576103cc565b8060ff1660f41415610340576103cc565b8060ff1660f51415610351576103cc565b8060ff1660fa1415610362576103cc565b8060ff1660fd1415610373576103cc565b8060ff1660ff1415610384576103cc565b60405162461bcd60e51b815260206004820152600b60248201527f556e726561636861626c6500000000000000000000000000000000000000000060448201526064016102dc565b5090979650505050505050565b6000816040015161ffff1660001415610462576103f46121dc565b825167ffffffffffffffff9081168252602080850151909116908201526103008301516040820152610100830151606082015260a08084015160808301526103608401519082015261032083015160c082015261034083015160e082015261045b8161112e565b9392505050565b61046b82611139565b805190602001209050919050565b604080516103a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052610260810182905261028081018290526102a081018290526102c081018290526102e0810182905261030081018290526103208101829052610340810182905261036081018290526103808101829052600061056d84866127be565b905061014367ffffffffffffffff82168111156105cc5760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f77202853746174652900000000000000000060448201526064016102dc565b6106198567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506117c89050565b67ffffffffffffffff16835261067c6106338660086127e7565b67ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506117c89050565b67ffffffffffffffff1660208401526106e26106998660106127e7565b67ffffffffffffffff1688888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061182e9050565b61ffff1660408401526106f96106338660126127e7565b67ffffffffffffffff16606084015261071661063386601a6127e7565b67ffffffffffffffff16608084015261077c6107338660226127e7565b67ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506118949050565b60a084015261078c8560426127e7565b94506001836040015161ffff1611156109f5576107aa6061826127e7565b90508067ffffffffffffffff168267ffffffffffffffff1610156108105760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f77202853746174652900000000000000000060448201526064016102dc565b61085d8567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506118fa9050565b73ffffffffffffffffffffffffffffffffffffffff1660c08401526108cf6108868660146127e7565b67ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506118fa9050565b73ffffffffffffffffffffffffffffffffffffffff1660e08401526109416108f88660286127e7565b67ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506119709050565b61010084015261099e6109558660486127e7565b67ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506119cd9050565b60ff166101208401526109b56106338660496127e7565b67ffffffffffffffff166101408401526109d36106338660516127e7565b67ffffffffffffffff166101608401526109ee6059866127e7565b9450610a8a565b60808801516060015173ffffffffffffffffffffffffffffffffffffffff1660c0840152606088015173ffffffffffffffffffffffffffffffffffffffff1660e084015260808089015101516101008401526000610a5889608001516060015190565b73ffffffffffffffffffffffffffffffffffffffff161415610a81576004610120840152610a8a565b60006101208401525b610ad78567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506117c89050565b67ffffffffffffffff16610180840152610af56109558660086127e7565b60ff166101a0840152610b0c6107338660096127e7565b6101c0840152610b206106338660296127e7565b67ffffffffffffffff166101e0840152610b3b6031866127e7565b9450826101e0015167ffffffffffffffff16600014610c2657610b5f6020826127e7565b90508067ffffffffffffffff168267ffffffffffffffff161015610bc55760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f77202853746174652900000000000000000060448201526064016102dc565b610c128567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506118949050565b610200840152610c236020866127e7565b94505b610c738567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506117c89050565b67ffffffffffffffff16610220840152610c8e6008866127e7565b945082610220015167ffffffffffffffff16600014610d7957610cb26020826127e7565b90508067ffffffffffffffff168267ffffffffffffffff161015610d185760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f77202853746174652900000000000000000060448201526064016102dc565b610d658567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506118949050565b610240840152610d766020866127e7565b94505b6001836040015161ffff161115610ee257610dd78567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506117c89050565b67ffffffffffffffff16610260840152610df26008866127e7565b945082610260015167ffffffffffffffff16600014610edd57610e166020826127e7565b90508067ffffffffffffffff168267ffffffffffffffff161015610e7c5760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f77202853746174652900000000000000000060448201526064016102dc565b610ec98567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506118949050565b610280840152610eda6020866127e7565b94505b610f0c565b608088015160a001515167ffffffffffffffff16610260840152610f0588611a33565b6102808401525b610f598567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506117c89050565b67ffffffffffffffff166102a0840152610f746008866127e7565b9450826102a0015167ffffffffffffffff1660001461105f57610f986020826127e7565b90508067ffffffffffffffff168267ffffffffffffffff161015610ffe5760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f77202853746174652900000000000000000060448201526064016102dc565b61104b8567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506118949050565b6102c084015261105c6020866127e7565b94505b6110ac8567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506118949050565b6102e08401526110c06107338660206127e7565b6103008401526110d46107338660406127e7565b6103208401526110e86107338660606127e7565b6103408401526110fc6107338660806127e7565b6103608401526111106107338660a06127e7565b6103808401526111218560c06127e7565b9350505094509492505050565b600061046b82611a5e565b60606111b3826000015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528290611baf565b90506111f8826020015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b905061123d826040015160405160200161117e919060f09190911b7fffff00000000000000000000000000000000000000000000000000000000000016815260020190565b9050611282826060015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b90506112c7826080015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b90506112e38260a0015160405160200161117e91815260200190565b90506001826040015161ffff161115611470576113398260c0015160405160200161117e919060609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b905061137e8260e0015160405160200161117e919060609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b905061139b82610100015160405160200161117e91815260200190565b90506113e182610120015160405160200161117e919060f89190911b7fff0000000000000000000000000000000000000000000000000000000000000016815260010190565b905061142782610140015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b905061146d82610160015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b90505b6114b482610180015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b90506114fa826101a0015160405160200161117e919060f89190911b7fff0000000000000000000000000000000000000000000000000000000000000016815260010190565b9050611517826101c0015160405160200161117e91815260200190565b905061155d826101e0015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b9050816101e0015167ffffffffffffffff166000146115945761159182610200015160405160200161117e91815260200190565b90505b6115d882610220015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b905081610220015167ffffffffffffffff1660001461160f5761160c82610240015160405160200161117e91815260200190565b90505b6001826040015161ffff16111561169b5761166482610260015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b905081610260015167ffffffffffffffff1660001461169b5761169882610280015160405160200161117e91815260200190565b90505b6116df826102a0015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b9050816102a0015167ffffffffffffffff1660001461171657611713826102c0015160405160200161117e91815260200190565b90505b611731826102e0015160405160200161117e91815260200190565b905061174e82610300015160405160200161117e91815260200190565b905061176b82610320015160405160200161117e91815260200190565b905061178882610340015160405160200161117e91815260200190565b90506117a582610360015160405160200161117e91815260200190565b90506117c282610380015160405160200161117e91815260200190565b92915050565b60006117d5826008612813565b835110156118255760405162461bcd60e51b815260206004820152601460248201527f746f55696e7436345f6f75744f66426f756e647300000000000000000000000060448201526064016102dc565b50016008015190565b600061183b826002612813565b8351101561188b5760405162461bcd60e51b815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e647300000000000000000000000060448201526064016102dc565b50016002015190565b60006118a1826020612813565b835110156118f15760405162461bcd60e51b815260206004820152601560248201527f746f427974657333325f6f75744f66426f756e6473000000000000000000000060448201526064016102dc565b50016020015190565b6000611907826014612813565b835110156119575760405162461bcd60e51b815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e6473000000000000000000000060448201526064016102dc565b5001602001516c01000000000000000000000000900490565b600061197d826020612813565b835110156118f15760405162461bcd60e51b815260206004820152601560248201527f746f55696e743235365f6f75744f66426f756e6473000000000000000000000060448201526064016102dc565b60006119da826001612813565b83511015611a2a5760405162461bcd60e51b815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e64730000000000000000000000000060448201526064016102dc565b50016001015190565b60a0810151600090611a5657611a50826080015160a00151611c4a565b60a08301525b5060a0015190565b6060611aa3826000015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b9050611ae8826020015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b9050611b04826040015160405160200161117e91815260200190565b9050611b20826060015160405160200161117e91815260200190565b9050611b3c826080015160405160200161117e91815260200190565b9050611b588260a0015160405160200161117e91815260200190565b9050611b748260c0015160405160200161117e91815260200190565b9050611b908260e0015160405160200161117e91815260200190565b90506117c28261010001516000015160405160200161117e919061282b565b6060806040519050835180825260208201818101602087015b81831015611be0578051835260209283019201611bc8565b50855184518101855292509050808201602086015b81831015611c0d578051835260209283019201611bf5565b508651929092011591909101601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660405250905092915050565b600080611c5960008451611d7d565b905060008167ffffffffffffffff1667ffffffffffffffff811115611c8057611c80612255565b604051908082528060200260200182016040528015611ca9578160200160208202803683370190505b50905060005b611cba6001846127be565b67ffffffffffffffff16811015611d0f57611ce0611cd9826020612860565b8690611894565b828281518110611cf257611cf261289d565b602090810291909101015280611d07816128cc565b915050611caf565b50611d3a611d1e6001846127be565b611d29906020612905565b859067ffffffffffffffff16611db5565b81611d466001856127be565b67ffffffffffffffff1681518110611d6057611d6061289d565b602002602001018181525050611d7581611dfb565b949350505050565b6000611d8a602084612935565b6020611d9684866127e7565b611da190601f6127e7565b611dab9190612935565b61045b91906127be565b6020818301810151600091611dcb908490612813565b8451101561045b578351600090611de3856020612813565b611ded9190612983565b91821c90911b949350505050565b60006117c2825160001b611e0e84611e1d565b60009182526020526040902090565b60006117c2611e2b83611e30565b61209f565b80516060906000611e4860018084169084901c612813565b90508067ffffffffffffffff811115611e6357611e63612255565b604051908082528060200260200182016040528015611e8c578160200160208202803683370190505b5092506000805b828210156120965750600181811b90611eac9085612983565b811415611f4957600060f81b868281518110611eca57611eca61289d565b6020026020010151604051602001611f109291907fff00000000000000000000000000000000000000000000000000000000000000929092168252600182015260210190565b60405160208183030381529060405280519060200120858381518110611f3857611f3861289d565b602002602001018181525050612096565b612068600060f81b878381518110611f6357611f6361289d565b6020026020010151604051602001611fa99291907fff00000000000000000000000000000000000000000000000000000000000000929092168252600182015260210190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120600088611fed856001612813565b81518110611ffd57611ffd61289d565b60200260200101516040516020016120439291907fff00000000000000000000000000000000000000000000000000000000000000929092168252600182015260210190565b6040516020818303038152906040528051906020012060009182526020526040902090565b8583612073816128cc565b9450815181106120855761208561289d565b602002602001018181525050611e93565b50505050919050565b805160009081805b60018311156121b75750600181811b906120c19084612983565b81141561211b578481815181106120da576120da61289d565b60200260200101518583815181106120f4576120f461289d565b60209081029190910101526000915061211460018085169085901c612813565b92506120a7565b828110612137576000915061211460018085169085901c612813565b61218985828151811061214c5761214c61289d565b6020026020010151868360016121629190612813565b815181106121725761217261289d565b602002602001015160009182526020526040902090565b8583612194816128cc565b9450815181106121a6576121a661289d565b6020026020010181815250506120a7565b846000815181106121ca576121ca61289d565b60200260200101519350505050919050565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152610100810161222a61222f565b905290565b6040805161012081019091528061222a6020820160088161010080368337509192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156122a8576122a8612255565b60405290565b60405160e0810167ffffffffffffffff811182821017156122a8576122a8612255565b803573ffffffffffffffffffffffffffffffffffffffff811681146122f557600080fd5b919050565b803567ffffffffffffffff811681146122f557600080fd5b600082601f83011261232357600080fd5b813567ffffffffffffffff8082111561233e5761233e612255565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561238457612384612255565b8160405283815286602085880101111561239d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061012082840312156123d057600080fd5b6123d8612284565b90506123e3826122fa565b8152602082013560208201526123fb604083016122fa565b604082015261240c606083016122d1565b60608201526080820135608082015260a082013567ffffffffffffffff81111561243557600080fd5b61244184828501612312565b60a08301525060c082013560c082015260e082013560e082015261010080830135818301525092915050565b60008083601f84011261247f57600080fd5b50813567ffffffffffffffff81111561249757600080fd5b6020830191508360208285010111156124af57600080fd5b9250929050565b600080600080606085870312156124cc57600080fd5b843567ffffffffffffffff808211156124e457600080fd5b9086019060e082890312156124f857600080fd5b6125006122ae565b612509836122d1565b8152602083013560208201526040830135604082015261252b606084016122d1565b606082015260808301358281111561254257600080fd5b61254e8a8286016123bd565b60808301525060a083013560a082015260c083013560c08201528096505060208701359450604087013591508082111561258757600080fd5b506125948782880161246d565b95989497509550505050565b815167ffffffffffffffff1681526103a0810160208301516125ce602084018267ffffffffffffffff169052565b5060408301516125e4604084018261ffff169052565b506060830151612600606084018267ffffffffffffffff169052565b50608083015161261c608084018267ffffffffffffffff169052565b5060a083015160a083015260c083015161264e60c084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e083015161267660e084018273ffffffffffffffffffffffffffffffffffffffff169052565b5061010083810151908301526101208084015160ff908116918401919091526101408085015167ffffffffffffffff9081169185019190915261016080860151821690850152610180808601518216908501526101a080860151909216918401919091526101c080850151908401526101e08085015182169084015261020080850151908401526102208085015182169084015261024080850151908401526102608085015182169084015261028080850151908401526102a080850151909116908301526102c080840151908301526102e08084015190830152610300808401519083015261032080840151908301526103408084015190830152610360808401519083015261038092830151929091019190915290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff838116908316818110156127df576127df61278f565b039392505050565b600067ffffffffffffffff80831681851680830382111561280a5761280a61278f565b01949350505050565b600082198211156128265761282661278f565b500190565b60008183825b6008811015612850578151835260209283019290910190600101612831565b5050506101008201905092915050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156128985761289861278f565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156128fe576128fe61278f565b5060010190565b600067ffffffffffffffff8083168185168183048111821515161561292c5761292c61278f565b02949350505050565b600067ffffffffffffffff80841680612977577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b6000828210156129955761299561278f565b50039056fea264697066735822122038a70228dd0b1c7a94ae3c606a50cc10187aa52c3f8925d30b2ef69cfc04d29b64736f6c63430008090033", "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80632138b3e41461003b57806389c3ad0f14610061575b600080fd5b61004e6100493660046124b6565b610081565b6040519081526020015b60405180910390f35b61007461006f3660046124b6565b6100a0565b60405161005891906125a0565b6000610097610092868686866100a0565b6103d9565b95945050505050565b604080516103a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052610260810182905261028081018290526102a081018290526102c081018290526102e081018290526103008101829052610320810182905261034081018290526103608101829052610380810191909152604080516103a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052610260810182905261028081018290526102a081018290526102c081018290526102e081018290526103008101829052610320810182905261034081018290526103608101829052610380810182905261027d87868685610479565b60405191935091506000908387823783902090508681146102e55760405162461bcd60e51b815260206004820152600f60248201527f4261642053746174652050726f6f66000000000000000000000000000000000060448201526064015b60405180910390fd5b6101a082015160f060ff821614156102fc576103cc565b8060ff1660f1141561030d576103cc565b8060ff1660f3141561031e576103cc565b8060ff1660f2141561032f576103cc565b8060ff1660f41415610340576103cc565b8060ff1660f51415610351576103cc565b8060ff1660fa1415610362576103cc565b8060ff1660fd1415610373576103cc565b8060ff1660ff1415610384576103cc565b60405162461bcd60e51b815260206004820152600b60248201527f556e726561636861626c6500000000000000000000000000000000000000000060448201526064016102dc565b5090979650505050505050565b6000816040015161ffff1660001415610462576103f46121dc565b825167ffffffffffffffff9081168252602080850151909116908201526103008301516040820152610100830151606082015260a08084015160808301526103608401519082015261032083015160c082015261034083015160e082015261045b8161112e565b9392505050565b61046b82611139565b805190602001209050919050565b604080516103a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052610260810182905261028081018290526102a081018290526102c081018290526102e0810182905261030081018290526103208101829052610340810182905261036081018290526103808101829052600061056d84866127be565b905061014367ffffffffffffffff82168111156105cc5760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f77202853746174652900000000000000000060448201526064016102dc565b6106198567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506117c89050565b67ffffffffffffffff16835261067c6106338660086127e7565b67ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506117c89050565b67ffffffffffffffff1660208401526106e26106998660106127e7565b67ffffffffffffffff1688888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061182e9050565b61ffff1660408401526106f96106338660126127e7565b67ffffffffffffffff16606084015261071661063386601a6127e7565b67ffffffffffffffff16608084015261077c6107338660226127e7565b67ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506118949050565b60a084015261078c8560426127e7565b94506001836040015161ffff1611156109f5576107aa6061826127e7565b90508067ffffffffffffffff168267ffffffffffffffff1610156108105760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f77202853746174652900000000000000000060448201526064016102dc565b61085d8567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506118fa9050565b73ffffffffffffffffffffffffffffffffffffffff1660c08401526108cf6108868660146127e7565b67ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506118fa9050565b73ffffffffffffffffffffffffffffffffffffffff1660e08401526109416108f88660286127e7565b67ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506119709050565b61010084015261099e6109558660486127e7565b67ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506119cd9050565b60ff166101208401526109b56106338660496127e7565b67ffffffffffffffff166101408401526109d36106338660516127e7565b67ffffffffffffffff166101608401526109ee6059866127e7565b9450610a8a565b60808801516060015173ffffffffffffffffffffffffffffffffffffffff1660c0840152606088015173ffffffffffffffffffffffffffffffffffffffff1660e084015260808089015101516101008401526000610a5889608001516060015190565b73ffffffffffffffffffffffffffffffffffffffff161415610a81576004610120840152610a8a565b60006101208401525b610ad78567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506117c89050565b67ffffffffffffffff16610180840152610af56109558660086127e7565b60ff166101a0840152610b0c6107338660096127e7565b6101c0840152610b206106338660296127e7565b67ffffffffffffffff166101e0840152610b3b6031866127e7565b9450826101e0015167ffffffffffffffff16600014610c2657610b5f6020826127e7565b90508067ffffffffffffffff168267ffffffffffffffff161015610bc55760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f77202853746174652900000000000000000060448201526064016102dc565b610c128567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506118949050565b610200840152610c236020866127e7565b94505b610c738567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506117c89050565b67ffffffffffffffff16610220840152610c8e6008866127e7565b945082610220015167ffffffffffffffff16600014610d7957610cb26020826127e7565b90508067ffffffffffffffff168267ffffffffffffffff161015610d185760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f77202853746174652900000000000000000060448201526064016102dc565b610d658567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506118949050565b610240840152610d766020866127e7565b94505b6001836040015161ffff161115610ee257610dd78567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506117c89050565b67ffffffffffffffff16610260840152610df26008866127e7565b945082610260015167ffffffffffffffff16600014610edd57610e166020826127e7565b90508067ffffffffffffffff168267ffffffffffffffff161015610e7c5760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f77202853746174652900000000000000000060448201526064016102dc565b610ec98567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506118949050565b610280840152610eda6020866127e7565b94505b610f0c565b608088015160a001515167ffffffffffffffff16610260840152610f0588611a33565b6102808401525b610f598567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506117c89050565b67ffffffffffffffff166102a0840152610f746008866127e7565b9450826102a0015167ffffffffffffffff1660001461105f57610f986020826127e7565b90508067ffffffffffffffff168267ffffffffffffffff161015610ffe5760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f77202853746174652900000000000000000060448201526064016102dc565b61104b8567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506118949050565b6102c084015261105c6020866127e7565b94505b6110ac8567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506118949050565b6102e08401526110c06107338660206127e7565b6103008401526110d46107338660406127e7565b6103208401526110e86107338660606127e7565b6103408401526110fc6107338660806127e7565b6103608401526111106107338660a06127e7565b6103808401526111218560c06127e7565b9350505094509492505050565b600061046b82611a5e565b60606111b3826000015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528290611baf565b90506111f8826020015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b905061123d826040015160405160200161117e919060f09190911b7fffff00000000000000000000000000000000000000000000000000000000000016815260020190565b9050611282826060015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b90506112c7826080015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b90506112e38260a0015160405160200161117e91815260200190565b90506001826040015161ffff161115611470576113398260c0015160405160200161117e919060609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b905061137e8260e0015160405160200161117e919060609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b905061139b82610100015160405160200161117e91815260200190565b90506113e182610120015160405160200161117e919060f89190911b7fff0000000000000000000000000000000000000000000000000000000000000016815260010190565b905061142782610140015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b905061146d82610160015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b90505b6114b482610180015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b90506114fa826101a0015160405160200161117e919060f89190911b7fff0000000000000000000000000000000000000000000000000000000000000016815260010190565b9050611517826101c0015160405160200161117e91815260200190565b905061155d826101e0015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b9050816101e0015167ffffffffffffffff166000146115945761159182610200015160405160200161117e91815260200190565b90505b6115d882610220015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b905081610220015167ffffffffffffffff1660001461160f5761160c82610240015160405160200161117e91815260200190565b90505b6001826040015161ffff16111561169b5761166482610260015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b905081610260015167ffffffffffffffff1660001461169b5761169882610280015160405160200161117e91815260200190565b90505b6116df826102a0015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b9050816102a0015167ffffffffffffffff1660001461171657611713826102c0015160405160200161117e91815260200190565b90505b611731826102e0015160405160200161117e91815260200190565b905061174e82610300015160405160200161117e91815260200190565b905061176b82610320015160405160200161117e91815260200190565b905061178882610340015160405160200161117e91815260200190565b90506117a582610360015160405160200161117e91815260200190565b90506117c282610380015160405160200161117e91815260200190565b92915050565b60006117d5826008612813565b835110156118255760405162461bcd60e51b815260206004820152601460248201527f746f55696e7436345f6f75744f66426f756e647300000000000000000000000060448201526064016102dc565b50016008015190565b600061183b826002612813565b8351101561188b5760405162461bcd60e51b815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e647300000000000000000000000060448201526064016102dc565b50016002015190565b60006118a1826020612813565b835110156118f15760405162461bcd60e51b815260206004820152601560248201527f746f427974657333325f6f75744f66426f756e6473000000000000000000000060448201526064016102dc565b50016020015190565b6000611907826014612813565b835110156119575760405162461bcd60e51b815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e6473000000000000000000000060448201526064016102dc565b5001602001516c01000000000000000000000000900490565b600061197d826020612813565b835110156118f15760405162461bcd60e51b815260206004820152601560248201527f746f55696e743235365f6f75744f66426f756e6473000000000000000000000060448201526064016102dc565b60006119da826001612813565b83511015611a2a5760405162461bcd60e51b815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e64730000000000000000000000000060448201526064016102dc565b50016001015190565b60a0810151600090611a5657611a50826080015160a00151611c4a565b60a08301525b5060a0015190565b6060611aa3826000015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b9050611ae8826020015160405160200161117e919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b9050611b04826040015160405160200161117e91815260200190565b9050611b20826060015160405160200161117e91815260200190565b9050611b3c826080015160405160200161117e91815260200190565b9050611b588260a0015160405160200161117e91815260200190565b9050611b748260c0015160405160200161117e91815260200190565b9050611b908260e0015160405160200161117e91815260200190565b90506117c28261010001516000015160405160200161117e919061282b565b6060806040519050835180825260208201818101602087015b81831015611be0578051835260209283019201611bc8565b50855184518101855292509050808201602086015b81831015611c0d578051835260209283019201611bf5565b508651929092011591909101601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660405250905092915050565b600080611c5960008451611d7d565b905060008167ffffffffffffffff1667ffffffffffffffff811115611c8057611c80612255565b604051908082528060200260200182016040528015611ca9578160200160208202803683370190505b50905060005b611cba6001846127be565b67ffffffffffffffff16811015611d0f57611ce0611cd9826020612860565b8690611894565b828281518110611cf257611cf261289d565b602090810291909101015280611d07816128cc565b915050611caf565b50611d3a611d1e6001846127be565b611d29906020612905565b859067ffffffffffffffff16611db5565b81611d466001856127be565b67ffffffffffffffff1681518110611d6057611d6061289d565b602002602001018181525050611d7581611dfb565b949350505050565b6000611d8a602084612935565b6020611d9684866127e7565b611da190601f6127e7565b611dab9190612935565b61045b91906127be565b6020818301810151600091611dcb908490612813565b8451101561045b578351600090611de3856020612813565b611ded9190612983565b91821c90911b949350505050565b60006117c2825160001b611e0e84611e1d565b60009182526020526040902090565b60006117c2611e2b83611e30565b61209f565b80516060906000611e4860018084169084901c612813565b90508067ffffffffffffffff811115611e6357611e63612255565b604051908082528060200260200182016040528015611e8c578160200160208202803683370190505b5092506000805b828210156120965750600181811b90611eac9085612983565b811415611f4957600060f81b868281518110611eca57611eca61289d565b6020026020010151604051602001611f109291907fff00000000000000000000000000000000000000000000000000000000000000929092168252600182015260210190565b60405160208183030381529060405280519060200120858381518110611f3857611f3861289d565b602002602001018181525050612096565b612068600060f81b878381518110611f6357611f6361289d565b6020026020010151604051602001611fa99291907fff00000000000000000000000000000000000000000000000000000000000000929092168252600182015260210190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120600088611fed856001612813565b81518110611ffd57611ffd61289d565b60200260200101516040516020016120439291907fff00000000000000000000000000000000000000000000000000000000000000929092168252600182015260210190565b6040516020818303038152906040528051906020012060009182526020526040902090565b8583612073816128cc565b9450815181106120855761208561289d565b602002602001018181525050611e93565b50505050919050565b805160009081805b60018311156121b75750600181811b906120c19084612983565b81141561211b578481815181106120da576120da61289d565b60200260200101518583815181106120f4576120f461289d565b60209081029190910101526000915061211460018085169085901c612813565b92506120a7565b828110612137576000915061211460018085169085901c612813565b61218985828151811061214c5761214c61289d565b6020026020010151868360016121629190612813565b815181106121725761217261289d565b602002602001015160009182526020526040902090565b8583612194816128cc565b9450815181106121a6576121a661289d565b6020026020010181815250506120a7565b846000815181106121ca576121ca61289d565b60200260200101519350505050919050565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152610100810161222a61222f565b905290565b6040805161012081019091528061222a6020820160088161010080368337509192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156122a8576122a8612255565b60405290565b60405160e0810167ffffffffffffffff811182821017156122a8576122a8612255565b803573ffffffffffffffffffffffffffffffffffffffff811681146122f557600080fd5b919050565b803567ffffffffffffffff811681146122f557600080fd5b600082601f83011261232357600080fd5b813567ffffffffffffffff8082111561233e5761233e612255565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561238457612384612255565b