UNPKG

@mantleio/contracts

Version:
381 lines 73.9 kB
{ "_format": "hh-sol-artifact-1", "contractName": "EnvironmentalOpVerifier", "sourceName": "contracts/L1/fraud-proof/verifier/subverifiers/EnvironmentalOpVerifier.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": "", "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": "0x608060405234801561001057600080fd5b50613ded806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80632138b3e41461003b57806389c3ad0f14610061575b600080fd5b61004e610049366004613804565b610081565b6040519081526020015b60405180910390f35b61007461006f366004613804565b6100a2565b60405161005891906138ee565b6000610097610092868686866100a2565b61053c565b90505b949350505050565b604080516103a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052610260810182905261028081018290526102a081018290526102c081018290526102e081018290526103008101829052610320810182905261034081018290526103608101829052610380810191909152604080516103a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052610260810182905261028081018290526102a081018290526102c081018290526102e081018290526103008101829052610320810182905261034081018290526103608101829052610380810182905261027f878686856105dc565b60405191935091506000908387823783902090508681146102e75760405162461bcd60e51b815260206004820152600f60248201527f4261642053746174652050726f6f66000000000000000000000000000000000060448201526064015b60405180910390fd5b6040805180820190915260008082526020820152610306878786611292565b6101a08501519195509150603060ff8216141561032e5761032985858a8a611407565b6104cf565b8060ff1660321415610347576103298a86868b8b611436565b8060ff166033141561035f5761032985858a8a61146c565b8060ff16603414156103775761032985858a8a611495565b8060ff1660381415610390576103298585848b8b6114bf565b8060ff16603614156103a85761032985858a8a6114dc565b8060ff16603a14156103c1576103298a86868b8b6114fa565b8060ff16603d14156103d95761032985858a8a611517565b8060ff16604014156103f15761032985858a8a611535565b8060ff166041141561040a576103298a86868b8b61187c565b8060ff1660421415610423576103298a86868b8b61188b565b8060ff166043141561043c576103298a86868b8b61189d565b8060ff1660441415610455576103298a86868b8b6118af565b8060ff166045141561046e576103298a86868b8b6118bd565b8060ff1660461415610487576103298a86868b8b6118d0565b60405162461bcd60e51b815260206004820152600b60248201527f556e726561636861626c6500000000000000000000000000000000000000000060448201526064016102de565b604084015161ffff161561052e5783610180015167ffffffffffffffff16826020015167ffffffffffffffff161115610525576101808401516105179083908a908a906118df565b60ff166101a085015261052e565b60006101a08501525b509198975050505050505050565b6000816040015161ffff16600014156105c557610557613531565b825167ffffffffffffffff9081168252602080850151909116908201526103008301516040820152610100830151606082015260a08084015160808301526103608401519082015261032083015160c082015261034083015160e08201526105be81611945565b9392505050565b6105ce82611950565b805190602001209050919050565b604080516103a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052610260810182905261028081018290526102a081018290526102c081018290526102e081018290526103008101829052610320810182905261034081018290526103608101829052610380810182905260006106d08486613b0c565b905061014367ffffffffffffffff821681111561072f5760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f77202853746174652900000000000000000060448201526064016102de565b61077c8567ffffffffffffffff1688888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611fdf9050565b67ffffffffffffffff1683526107df610796866008613b35565b67ffffffffffffffff1688888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611fdf9050565b67ffffffffffffffff1660208401526108456107fc866010613b35565b67ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506120459050565b61ffff16604084015261085c610796866012613b35565b67ffffffffffffffff16606084015261087961079686601a613b35565b67ffffffffffffffff1660808401526108df610896866022613b35565b67ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506120ab9050565b60a08401526108ef856042613b35565b94506001836040015161ffff161115610b585761090d606182613b35565b90508067ffffffffffffffff168267ffffffffffffffff1610156109735760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f77202853746174652900000000000000000060448201526064016102de565b6109c08567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506121119050565b73ffffffffffffffffffffffffffffffffffffffff1660c0840152610a326109e9866014613b35565b67ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506121119050565b73ffffffffffffffffffffffffffffffffffffffff1660e0840152610aa4610a5b866028613b35565b67ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506121879050565b610100840152610b01610ab8866048613b35565b67ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506121e49050565b60ff16610120840152610b18610796866049613b35565b67ffffffffffffffff16610140840152610b36610796866051613b35565b67ffffffffffffffff16610160840152610b51605986613b35565b9450610bed565b60808801516060015173ffffffffffffffffffffffffffffffffffffffff1660c0840152606088015173ffffffffffffffffffffffffffffffffffffffff1660e084015260808089015101516101008401526000610bbb89608001516060015190565b73ffffffffffffffffffffffffffffffffffffffff161415610be4576004610120840152610bed565b60006101208401525b610c3a8567ffffffffffffffff1688888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611fdf9050565b67ffffffffffffffff16610180840152610c58610ab8866008613b35565b60ff166101a0840152610c6f610896866009613b35565b6101c0840152610c83610796866029613b35565b67ffffffffffffffff166101e0840152610c9e603186613b35565b9450826101e0015167ffffffffffffffff16600014610d8957610cc2602082613b35565b90508067ffffffffffffffff168267ffffffffffffffff161015610d285760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f77202853746174652900000000000000000060448201526064016102de565b610d758567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506120ab9050565b610200840152610d86602086613b35565b94505b610dd68567ffffffffffffffff1688888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611fdf9050565b67ffffffffffffffff16610220840152610df1600886613b35565b945082610220015167ffffffffffffffff16600014610edc57610e15602082613b35565b90508067ffffffffffffffff168267ffffffffffffffff161015610e7b5760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f77202853746174652900000000000000000060448201526064016102de565b610ec88567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506120ab9050565b610240840152610ed9602086613b35565b94505b6001836040015161ffff16111561104557610f3a8567ffffffffffffffff1688888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611fdf9050565b67ffffffffffffffff16610260840152610f55600886613b35565b945082610260015167ffffffffffffffff1660001461104057610f79602082613b35565b90508067ffffffffffffffff168267ffffffffffffffff161015610fdf5760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f77202853746174652900000000000000000060448201526064016102de565b61102c8567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506120ab9050565b61028084015261103d602086613b35565b94505b61106f565b608088015160a001515167ffffffffffffffff166102608401526110688861224a565b6102808401525b6110bc8567ffffffffffffffff1688888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611fdf9050565b67ffffffffffffffff166102a08401526110d7600886613b35565b9450826102a0015167ffffffffffffffff166000146111c2576110fb602082613b35565b90508067ffffffffffffffff168267ffffffffffffffff1610156111615760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f77202853746174652900000000000000000060448201526064016102de565b6111ae8567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506120ab9050565b6102c08401526111bf602086613b35565b94505b61120f8567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506120ab9050565b6102e0840152611223610896866020613b35565b610300840152611237610896866040613b35565b61032084015261124b610896866060613b35565b61034084015261125f610896866080613b35565b6103608401526112736108968660a0613b35565b6103808401526112848560c0613b35565b935050505b94509492505050565b604080518082019091526000808252602082018190529060086112bf67ffffffffffffffff851686613b61565b101561130d5760405162461bcd60e51b815260206004820152601660248201527f50726f6f6620556e646572666c6f772028436f6465290000000000000000000060448201526064016102de565b600061135c8467ffffffffffffffff1687878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611fdf9050565b9050611369816008613b35565b67ffffffffffffffff9081169061138290861687613b61565b10156113d05760405162461bcd60e51b815260206004820152601660248201527f50726f6f6620556e646572666c6f772028436f6465290000000000000000000060448201526064016102de565b6113db600885613b35565b67ffffffffffffffff80821684528216602084015293506113fc8185613b35565b925050935093915050565b611430848460028660c0015173ffffffffffffffffffffffffffffffffffffffff168686612275565b50505050565b61146584846002611448896060015190565b73ffffffffffffffffffffffffffffffffffffffff168686612275565b5050505050565b611430848460028660e0015173ffffffffffffffffffffffffffffffffffffffff168686612275565b6114308484600286610100015173ffffffffffffffffffffffffffffffffffffffff168686612275565b61146585856002866020015167ffffffffffffffff168686612275565b6114308484600286610260015167ffffffffffffffff168686612275565b6114658484600261151089608001516020015190565b8686612275565b61143084846002866102a0015167ffffffffffffffff168686612275565b6001836101e0015167ffffffffffffffff16101561163757604080516103a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052610260810182905261028081018290526102a081018290526102c081018290526102e0810182905261030081018290526103208101829052610340810182905261036081018290526103800152611430565b60408051808201909152606081526000602082015261165a84600187868661253f565b6060860151919650915060149067ffffffffffffffff1681111561176457604080516103a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052610260810182905261028081018290526102a081018290526102c081018290526102e08101829052610300810182905261032081018290526103408101829052610360810182905261038001525050611430565b80856060018181516117769190613b0c565b67ffffffffffffffff169052508151805160009190829061179957611799613b78565b6020026020010151905060008167ffffffffffffffff16876000015167ffffffffffffffff161015806117ee57506117d361010083613b0c565b67ffffffffffffffff16876000015167ffffffffffffffff16105b156117fb57506000611813565b61180d888787858b610360015161266d565b90985090505b60208085015160405161183192849101918252602082015260400190565b6040516020818303038152906040528051906020012087610200018181525050600187610180018181516118659190613b35565b67ffffffffffffffff169052505050505050505050565b61146584846002611448895190565b61146584846002611510896020015190565b61146584846002611510896040015190565b611465848460026001611510565b611465848460026304c4b4008686612275565b611465848460026134d7611510565b6000846020015167ffffffffffffffff168267ffffffffffffffff16106119085750600061009a565b838383876000015161191a9190613b35565b67ffffffffffffffff1681811061193357611933613b78565b919091013560f81c9695505050505050565b60006105ce826128b2565b60606119ca8260000151604051602001611995919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528290612a03565b9050611a0f8260200151604051602001611995919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b9050611a548260400151604051602001611995919060f09190911b7fffff00000000000000000000000000000000000000000000000000000000000016815260020190565b9050611a998260600151604051602001611995919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b9050611ade8260800151604051602001611995919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b9050611afa8260a0015160405160200161199591815260200190565b90506001826040015161ffff161115611c8757611b508260c00151604051602001611995919060609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b9050611b958260e00151604051602001611995919060609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b9050611bb282610100015160405160200161199591815260200190565b9050611bf8826101200151604051602001611995919060f89190911b7fff0000000000000000000000000000000000000000000000000000000000000016815260010190565b9050611c3e826101400151604051602001611995919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b9050611c84826101600151604051602001611995919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b90505b611ccb826101800151604051602001611995919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b9050611d11826101a00151604051602001611995919060f89190911b7fff0000000000000000000000000000000000000000000000000000000000000016815260010190565b9050611d2e826101c0015160405160200161199591815260200190565b9050611d74826101e00151604051602001611995919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b9050816101e0015167ffffffffffffffff16600014611dab57611da882610200015160405160200161199591815260200190565b90505b611def826102200151604051602001611995919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b905081610220015167ffffffffffffffff16600014611e2657611e2382610240015160405160200161199591815260200190565b90505b6001826040015161ffff161115611eb257611e7b826102600151604051602001611995919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b905081610260015167ffffffffffffffff16600014611eb257611eaf82610280015160405160200161199591815260200190565b90505b611ef6826102a00151604051602001611995919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b9050816102a0015167ffffffffffffffff16600014611f2d57611f2a826102c0015160405160200161199591815260200190565b90505b611f48826102e0015160405160200161199591815260200190565b9050611f6582610300015160405160200161199591815260200190565b9050611f8282610320015160405160200161199591815260200190565b9050611f9f82610340015160405160200161199591815260200190565b9050611fbc82610360015160405160200161199591815260200190565b9050611fd982610380015160405160200161199591815260200190565b92915050565b6000611fec826008613ba7565b8351101561203c5760405162461bcd60e51b815260206004820152601460248201527f746f55696e7436345f6f75744f66426f756e647300000000000000000000000060448201526064016102de565b50016008015190565b6000612052826002613ba7565b835110156120a25760405162461bcd60e51b815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e647300000000000000000000000060448201526064016102de565b50016002015190565b60006120b8826020613ba7565b835110156121085760405162461bcd60e51b815260206004820152601560248201527f746f427974657333325f6f75744f66426f756e6473000000000000000000000060448201526064016102de565b50016020015190565b600061211e826014613ba7565b8351101561216e5760405162461bcd60e51b815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e6473000000000000000000000060448201526064016102de565b5001602001516c01000000000000000000000000900490565b6000612194826020613ba7565b835110156121085760405162461bcd60e51b815260206004820152601560248201527f746f55696e743235365f6f75744f66426f756e6473000000000000000000000060448201526064016102de565b60006121f1826001613ba7565b835110156122415760405162461bcd60e51b815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e64730000000000000000000000000060448201526064016102de565b50016001015190565b60a081015160009061226d57612267826080015160a00151612a9e565b60a08301525b5060a0015190565b6122826001610400613b0c565b67ffffffffffffffff16856101e0015167ffffffffffffffff161061238e57604080516103a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052610260810182905261028081018290526102a081018290526102c081018290526102e0810182905261030081018290526103208101829052610340810182905261036081018290526103800152845b50612537565b8367ffffffffffffffff16856060015167ffffffffffffffff16101561249957604080516103a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052610260810182905261028081018290526102a081018290526102c081018290526102e081018290526103008101829052610320810182905261034081018290526103608101829052610380015284612388565b83856060018181516124ab9190613b0c565b67ffffffffffffffff16905250610200850151604080516020810192909252810184905260600160405160208183030381529060405280519060200120856102000181815250506001856101e0018181516125069190613b35565b67ffffffffffffffff169052506101808501805160019190612529908390613b35565b67ffffffffffffffff169052505b505050505050565b60408051808201909152606081526000602082018190529061256384848789612bc9565b909550905067ffffffffffffffff8616156126545760208101518151515b60ff8116156125f95782518290612599600184613bbf565b60ff16815181106125ac576125ac613b78565b60200260200101516040516020016125ce929190918252602082015260400190565b60405160208183030381529060405280519060200120915080806125f190613be2565b915050612581565b50876102000151811461264e5760405162461bcd60e51b815260206004820152600e60248201527f42616420537461636b50726f6f6600000000000000000000000000000000000060448201526064016102de565b50612660565b61020087015160208201525b8491509550959350505050565b6040805160208101909152600080825290819061268b87878a612de7565b60408051808201909152600081526060602082015291995091506126e688888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d9250612ec0915050565b83518151929b50909250906000805b8460200151518160ff1610156127ee5760018084161415612775578385602001518260ff168151811061272a5761272a613b78565b602002602001015160405160200161274c929190918252602082015260400190565b6040516020818303038152906040528051906020012093508060ff166001901b821791506127ca565b84602001518160ff168151811061278e5761278e613b78565b6020026020010151846040516020016127b1929190918252602082015260400190565b6040516020818303038152906040528051906020012093505b60018367ffffffffffffffff16901c925080806127e690613c1d565b9150506126f5565b5087831461283e5760405162461bcd60e51b815260206004820152601260248201527f42616420426c6f636b4861736850726f6f66000000000000000000000000000060448201526064016102de565b8867ffffffffffffffff168167ffffffffffffffff16146128a15760405162461bcd60e51b815260206004820152601260248201527f42616420426c6f636b4861736850726f6f66000000000000000000000000000060448201526064016102de565b505091519899975050505050505050565b60606128f78260000151604051602001611995919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b905061293c8260200151604051602001611995919060c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016815260080190565b9050612958826040015160405160200161199591815260200190565b9050612974826060015160405160200161199591815260200190565b9050612990826080015160405160200161199591815260200190565b90506129ac8260a0015160405160200161199591815260200190565b90506129c88260c0015160405160200161199591815260200190565b90506129e48260e0015160405160200161199591815260200190565b9050611fd9826101000151600001516040516020016119959190613c3d565b6060806040519050835180825260208201818101602087015b81831015612a34578051835260209283019201612a1c565b50855184518101855292509050808201602086015b81831015612a61578051835260209283019201612a49565b508651929092011591909101601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660405250905092915050565b600080612aad600084516130d2565b905060008167ffffffffffffffff1667ffffffffffffffff811115612ad457612ad46135aa565b604051908082528060200260200182016040528015612afd578160200160208202803683370190505b50905060005b612b0e600184613b0c565b67ffffffffffffffff16811015612b6357612b34612b2d826020613c72565b86906120ab565b828281518110612b4657612b46613b78565b602090810291909101015280612b5b81613caf565b915050612b03565b50612b8e612b72600184613b0c565b612b7d906020613ce8565b859067ffffffffffffffff1661310a565b81612b9a600185613b0c565b67ffffffffffffffff1681518110612bb457612bb4613b78565b60200260200101818152505061009a81613150565b60408051808201909152606081526000602082018190529067ffffffffffffffff8316612bf857839150611289565b612c03836001613b35565b612c0e906020613ce8565b67ffffffffffffffff90811690612c2790861687613b61565b1015612c755760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f772028537461636b2900000000000000000060448201526064016102de565b8267ffffffffffffffff1667ffffffffffffffff811115612c9857612c986135aa565b604051908082528060200260200182016040528015612cc1578160200160208202803683370190505b50815260005b8367ffffffffffffffff168167ffffffffffffffff161015612d7b57612d308567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506121879050565b8251805167ffffffffffffffff8416908110612d4e57612d4e613b78565b602002602001018181525050602085612d679190613b35565b945080612d7381613d18565b915050612cc7565b50612dc98467ffffffffffffffff1687878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506120ab9050565b602080830191909152612ddc9085613b35565b969095509350505050565b60408051602081019091526000808252906020612e0e67ffffffffffffffff851686613b61565b1015612e5c5760405162461bcd60e51b815260206004820152600f60248201527f50726f6f6620556e646572666c6f77000000000000000000000000000000000060448201526064016102de565b612ea98367ffffffffffffffff1686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506120ab9050565b8152612eb6836020613b35565b9150935093915050565b604080518082019091526000808252606060208301529060098367ffffffffffffffff168551612ef09190613b61565b1015612f3e5760405162461bcd60e51b815260206004820152600f60248201527f50726f6f6620556e646572666c6f77000000000000000000000000000000000060448201526064016102de565b612f528467ffffffffffffffff8516611fdf565b67ffffffffffffffff1681526000612f7f612f6e856008613b35565b869067ffffffffffffffff166121e4565b9050612f8c600985613b35565b9350612f99816020613d40565b60ff168467ffffffffffffffff168651612fb39190613b61565b10156130015760405162461bcd60e51b815260206004820152600f60248201527f50726f6f6620556e646572666c6f77000000000000000000000000000000000060448201526064016102de565b8060ff1667ffffffffffffffff81111561301d5761301d6135aa565b604051908082528060200260200182016040528015613046578160200160208202803683370190505b50602083015260005b8160ff168167ffffffffffffffff1610156130c5576130788667ffffffffffffffff87166120ab565b83602001518267ffffffffffffffff168151811061309857613098613b78565b6020026020010181815250506020856130b19190613b35565b9450806130bd81613d18565b91505061304f565b50839250505b9250929050565b60006130df602084613d69565b60206130eb8486613b35565b6130f690601f613b35565b6131009190613d69565b6105be9190613b0c565b6020818301810151600091613120908490613ba7565b845110156105be578351600090613138856020613ba7565b6131429190613b61565b91821c90911b949350505050565b6000611fd9825160001b61316384613172565b60009182526020526040902090565b6000611fd961318083613185565b6133f4565b8051606090600061319d60018084169084901c613ba7565b90508067ffffffffffffffff8111156131b8576131b86135aa565b6040519080825280602002602001820160405280156131e1578160200160208202803683370190505b5092506000805b828210156133eb5750600181811b906132019085613b61565b81141561329e57600060f81b86828151811061321f5761321f613b78565b60200260200101516040516020016132659291907fff00000000000000000000000000000000000000000000000000000000000000929092168252600182015260210190565b6040516020818303038152906040528051906020012085838151811061328d5761328d613b78565b6020026020010181815250506133eb565b6133bd600060f81b8783815181106132b8576132b8613b78565b60200260200101516040516020016132fe9291907fff00000000000000000000000000000000000000000000000000000000000000929092168252600182015260210190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120600088613342856001613ba7565b8151811061335257613352613b78565b60200260200101516040516020016133989291907fff00000000000000000000000000000000000000000000000000000000000000929092168252600182015260210190565b6040516020818303038152906040528051906020012060009182526020526040902090565b85836133c881613caf565b9450815181106133da576133da613b78565b6020026020010181815250506131e8565b50505050919050565b805160009081805b600183111561350c5750600181811b906134169084613b61565b8114156134705784818151811061342f5761342f613b78565b602002602001015185838151811061344957613449613b78565b60209081029190910101526000915061346960018085169085901c613ba7565b92506133fc565b82811061348c576000915061346960018085169085901c613ba7565b6134de8582815181106134a1576134a1613b78565b6020026020010151868360016134b79190613ba7565b815181106134c7576134c7613b78565b602002602001015160009182526020526040902090565b85836134e981613caf565b9450815181106134fb576134fb613b78565b6020026020010181815250506133fc565b8460008151811061351f5761351f613b78565b60200260200101519350505050919050565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152610100810161357f613584565b905290565b6040805161012081019091528061357f6020820160088161010080368337509192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156135fd576135fd6135aa565b60405290565b60405160e0810167ffffffffffffffff811182821017156135fd576135fd6135aa565b803573ffffffffffffffffffffffffffffffffffffffff8116811461364a57600080fd5b919050565b803567ffffffffffffffff8116811461364a57600080fd5b600082601f83011261367857600080fd5b813567ffffffffffffffff80821115613693576136936135aa565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156136d9576136d96135aa565b816040528381528660208588010111156136f257600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610120828403121561372557600080fd5b61372d6135d9565b90506137388261364f565b8152602082013560208201526137506040830161364f565b604082015261376160608301613626565b60608201526080820135608082015260a082013567ffffffffffffffff81111561378a57600080fd5b61379684828501613667565b60a08301525060c082013560c082015260e082013560e082015261010080830135818301525092915050565b60008083601f8401126137d457600080fd5b50813567ffffffffffffffff8111156137ec57600080fd5b6020830191508360208285010111156130cb57600080fd5b6000806000806060858703121561381a57600080fd5b843567ffffffffffffffff8082111561383257600080fd5b9086019060e0828903121561384657600080fd5b61384e613603565b61385783613626565b8152602083013560208201526040830135604082015261387960608401613626565b606082015260808301358281111561389057600080fd5b61389c8a828601613712565b60808301525060a083013560a082015260c083013560c0820152809650506020870135945060408701359150808211156138d557600080fd5b506138e2878288016137c2565b95989497509550505050565b815167ffffffffffffffff1681526103a08101602083015161391c602084018267ffffffffffffffff169052565b506040830151613932604084018261ffff169052565b50606083015161394e606084018267ffffffffffffffff169052565b50608083015161396a608084018267ffffffffffffffff169052565b5060a083015160a083015260c083015161399c60c084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e08301516139c460e084018273ffffffffffffffffffffffffffffffffffffffff169052565b5061010083810151908301526101208084015160ff908116918401919091526101408085015167ffffffffffffffff9081169185019190915261016080860151821690850152610180808601518216908501526101a080860151909216918401919091526101c080850151908401526101e08085015182169084015261020080850151908401526102208085015182169084015261024080850151908401526102608085015182169084015261028080850151908401526102a080850151909116908301526102c080840151908301526102e08084015190830152610300808401519083015261032080840151908301526103408084015190830152610360808401519083015261038092830151929091019190915290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff83811690831681811015613b2d57613b2d613add565b039392505050565b600067ffffffffffffffff808316818516808303821115613b5857613b58613add565b01949350505050565b600082821015613b7357613b73613add565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115613bba57613bba613add565b500190565b600060ff821660ff841680821015613bd957613bd9613add565b90039392505050565b600060ff821680613bf557613bf5613add565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b600060ff821660ff811415613c3457613c34613add565b60010192915050565b60008183825b6008811015613c62578151835260209283019290910190600101613c43565b5050506101008201905092915050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613caa57613caa613add565b500290565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ce157613ce1613add565b5060010190565b600067ffffffffffffffff80831681851681830481118215151615613d0f57613d0f613add565b02949350505050565b600067ffffffffffffffff80831681811415613d3657613d36613add565b6001019392505050565b600060ff821660ff84168160ff0481118215151615613d6157613d61613add565b029392505050565b600067ffffffffffffffff80841680613dab577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b9216919091049291505056fea26469706673582212208e37a37cab3fd7b6e507e561695eb899c581cea789fb8973790f3e79c2dfa8e664736f6c63430008090033", "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80632138b3e41461003b57806389c3ad0f14610061575b600080fd5b61004e610049366004613804565b610081565b6040519081526020015b60405180910390f35b61007461006f366004613804565b6100a2565b60405161005891906138ee565b6000610097610092868686866100a2565b61053c565b90505b949350505050565b604080516103a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052610260810182905261028081018290526102a081018290526102c081018290526102e081018290526103008101829052610320810182905261034081018290526103608101829052610380810191909152604080516103a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052610260810182905261028081018290526102a081018290526102c081018290526102e081018290526103008101829052610320810182905261034081018290526103608101829052610380810182905261027f878686856105dc565b60405191935091506000908387823783902090508681146102e75760405162461bcd60e51b815260206004820152600f60248201527f4261642053746174652050726f6f66000000000000000000000000000000000060448201526064015b60405180910390fd5b6040805180820190915260008082526020820152610306878786611292565b6101a08501519195509150603060ff8216141561032e5761032985858a8a611407565b6104cf565b8060ff1660321415610347576103298a86868b8b611436565b8060ff166033141561035f5761032985858a8a61146c565b8060ff16603414156103775761032985858a8a611495565b8060ff1660381415610390576103298585848b8b6114bf565b8060ff16603614156103a85761032985858a8a6114dc565b8060ff16603a14156103c1576103298a86868b8b6114fa565b8060ff16603d14156103d95761032985858a8a611517565b8060ff16604014156103f15761032985858a8a611535565b8060ff166041141561040a576103298a86868b8b61187c565b8060ff1660421415610423576103298a86868b8b61188b565b8060ff166043141561043c576103298a86868b8b61189d565b8060ff1660441415610455576103298a86868b8b6118af565b8060ff166045141561046e576103298a86868b8b6118bd565b8060ff1660461415610487576103298a86868b8b6118d0565b60405162461bcd60e51b815260206004820152600b60248201527f556e726561636861626c6500000000000000000000000000000000000000000060448201526064016102de565b604084015161ffff161561052e5783610180015167ffffffffffffffff16826020015167ffffffffffffffff161115610525576101808401516105179083908a908a906118df565b60ff166101a085015261052e565b60006101a08501525b509198975050505050505050565b6000816040015161ffff16600014156105c557610557613531565b825167ffffffffffffffff9081168252602080850151909116908201526103008301516040820152610100830151606082015260a08084015160808301526103608401519082015261032083015160c082015261034083015160e08201526105be81611945565b9392505050565b6105ce82611950565b805190602001209050919050565b604080516103a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052610260810182905261028081018290526102a081018290526102c081018290526102e081018290526103008101829052610320810182905261034081018290526103608101829052610380810182905260006106d08486613b0c565b905061014367ffffffffffffffff821681111561072f5760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f77202853746174652900000000000000000060448201526064016102de565b61077c8567ffffffffffffffff1688888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611fdf9050565b67ffffffffffffffff1683526107df610796866008613b35565b67ffffffffffffffff1688888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611fdf9050565b67ffffffffffffffff1660208401526108456107fc866010613b35565b67ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506120459050565b61ffff16604084015261085c610796866012613b35565b67ffffffffffffffff16606084015261087961079686601a613b35565b67ffffffffffffffff1660808401526108df610896866022613b35565b67ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506120ab9050565b60a08401526108ef856042613b35565b94506001836040015161ffff161115610b585761090d606182613b35565b90508067ffffffffffffffff168267ffffffffffffffff1610156109735760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f77202853746174652900000000000000000060448201526064016102de565b6109c08567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506121119050565b73ffffffffffffffffffffffffffffffffffffffff1660c0840152610a326109e9866014613b35565b67ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506121119050565b73ffffffffffffffffffffffffffffffffffffffff1660e0840152610aa4610a5b866028613b35565b67ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506121879050565b610100840152610b01610ab8866048613b35565b67ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506121e49050565b60ff16610120840152610b18610796866049613b35565b67ffffffffffffffff16610140840152610b36610796866051613b35565b67ffffffffffffffff16610160840152610b51605986613b35565b9450610bed565b60808801516060015173ffffffffffffffffffffffffffffffffffffffff1660c0840152606088015173ffffffffffffffffffffffffffffffffffffffff1660e084015260808089015101516101008401526000610bbb89608001516060015190565b73ffffffffffffffffffffffffffffffffffffffff161415610be4576004610120840152610bed565b60006101208401525b610c3a8567ffffffffffffffff1688888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611fdf9050565b67ffffffffffffffff16610180840152610c58610ab8866008613b35565b60ff166101a0840152610c6f610896866009613b35565b6101c0840152610c83610796866029613b35565b67ffffffffffffffff166101e0840152610c9e603186613b35565b9450826101e0015167ffffffffffffffff16600014610d8957610cc2602082613b35565b90508067ffffffffffffffff168267ffffffffffffffff161015610d285760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f77202853746174652900000000000000000060448201526064016102de565b610d758567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506120ab9050565b610200840152610d86602086613b35565b94505b610dd68567ffffffffffffffff1688888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611fdf9050565b67ffffffffffffffff16610220840152610df1600886613b35565b945082610220015167ffffffffffffffff16600014610edc57610e15602082613b35565b90508067ffffffffffffffff168267ffffffffffffffff161015610e7b5760405162461bcd60e51b815260206004820152601760248201527f50726f6f6620556e646572666c6f77202853746174652900000000000000000060448201526064016102de565b610ec88567ffffffffffffffff1688888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506120ab9050565b610240840152610ed9602086613b35565b94505b6001836040015161ffff16111561104557610f3a8567ffffffffffffffff1688888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611fdf9050565b67ffffffffffffffff16610260840152610f55600886613b35565b945082610260015167ffffffff