From c3da0d476d4b667c5a70f22a3633c417bc2eb6d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Negovanovi=C4=87?= <93934272+Stefan-Ethernal@users.noreply.github.com> Date: Thu, 7 Sep 2023 10:56:49 +0200 Subject: [PATCH] Index methods by signature when there is ambiguity (#1880) * Index methods by signature when there is ambiguity * Lint fix and renames * Simplify --- .../polybft/contractsapi/bindings-gen/main.go | 53 ++++++++++++------- .../polybft/contractsapi/contractsapi.go | 6 +-- consensus/polybft/contractsapi/gen_sc_data.go | 2 +- 3 files changed, 39 insertions(+), 22 deletions(-) diff --git a/consensus/polybft/contractsapi/bindings-gen/main.go b/consensus/polybft/contractsapi/bindings-gen/main.go index 58a386af23..db0c8a6cfa 100644 --- a/consensus/polybft/contractsapi/bindings-gen/main.go +++ b/consensus/polybft/contractsapi/bindings-gen/main.go @@ -487,14 +487,19 @@ func main() { // There could be two objects with the same name in the generated JSON ABI (hardhat bug). // This case can be fixed by specifying a function signature instead of just name // e.g. "myFunc(address,bool,uint256)" instead of just "myFunc" - var method *abi.Method + var ( + method *abi.Method + resolvedBySignature = false + ) + if signatureFunctionFormat.MatchString(methodRaw) { method = c.artifact.Abi.GetMethodBySignature(methodRaw) + resolvedBySignature = true } else { method = c.artifact.Abi.GetMethod(methodRaw) } - if err := generateFunction(generatedData, c.contractName, method); err != nil { + if err := generateFunction(generatedData, c.contractName, method, resolvedBySignature); err != nil { log.Fatal(err) } } @@ -769,7 +774,8 @@ func ({{.Sig}} *{{.TName}}) DecodeAbi(buf []byte) error { } // generateFunction generates code for smart contract function and its parameters -func generateFunction(generatedData *generatedData, contractName string, method *abi.Method) error { +func generateFunction(generatedData *generatedData, contractName string, + method *abi.Method, fnSigResolution bool) error { methodName := fmt.Sprintf(functionNameFormat, strings.Title(method.Name+contractName)) res := []string{} @@ -779,22 +785,28 @@ func generateFunction(generatedData *generatedData, contractName string, method } // write encode/decode functions - tmplStr := ` -{{range .Structs}} - {{.}} -{{ end }} - -func ({{.Sig}} *{{.TName}}) Sig() []byte { - return {{.ContractName}}.Abi.Methods["{{.Name}}"].ID() -} -func ({{.Sig}} *{{.TName}}) EncodeAbi() ([]byte, error) { - return {{.ContractName}}.Abi.Methods["{{.Name}}"].Encode({{.Sig}}) -} + tmplString := ` + {{range .Structs}} + {{.}} + {{ end }} + + func ({{.Sig}} *{{.TName}}) Sig() []byte { + return {{.ContractName}}.Abi.{{.MethodGetter}}["{{.Name}}"].ID() + } + + func ({{.Sig}} *{{.TName}}) EncodeAbi() ([]byte, error) { + return {{.ContractName}}.Abi.{{.MethodGetter}}["{{.Name}}"].Encode({{.Sig}}) + } + + func ({{.Sig}} *{{.TName}}) DecodeAbi(buf []byte) error { + return decodeMethod({{.ContractName}}.Abi.{{.MethodGetter}}["{{.Name}}"], buf, {{.Sig}}) + }` -func ({{.Sig}} *{{.TName}}) DecodeAbi(buf []byte) error { - return decodeMethod({{.ContractName}}.Abi.Methods["{{.Name}}"], buf, {{.Sig}}) -}` + methodGetter := "Methods" + if fnSigResolution { + methodGetter = "MethodsBySignature" + } inputs := map[string]interface{}{ "Structs": res, @@ -802,9 +814,14 @@ func ({{.Sig}} *{{.TName}}) DecodeAbi(buf []byte) error { "Name": method.Name, "ContractName": contractName, "TName": strings.Title(methodName), + "MethodGetter": methodGetter, } - renderedString, err := renderTmpl(tmplStr, inputs) + if fnSigResolution { + inputs["Name"] = method.Sig() + } + + renderedString, err := renderTmpl(tmplString, inputs) if err != nil { return err } diff --git a/consensus/polybft/contractsapi/contractsapi.go b/consensus/polybft/contractsapi/contractsapi.go index a84b80c8df..69f97f9d08 100644 --- a/consensus/polybft/contractsapi/contractsapi.go +++ b/consensus/polybft/contractsapi/contractsapi.go @@ -372,15 +372,15 @@ type InitializeChildERC20PredicateACLFn struct { } func (i *InitializeChildERC20PredicateACLFn) Sig() []byte { - return ChildERC20PredicateACL.Abi.Methods["initialize"].ID() + return ChildERC20PredicateACL.Abi.MethodsBySignature["initialize(address,address,address,address,address,bool,bool,address)"].ID() } func (i *InitializeChildERC20PredicateACLFn) EncodeAbi() ([]byte, error) { - return ChildERC20PredicateACL.Abi.Methods["initialize"].Encode(i) + return ChildERC20PredicateACL.Abi.MethodsBySignature["initialize(address,address,address,address,address,bool,bool,address)"].Encode(i) } func (i *InitializeChildERC20PredicateACLFn) DecodeAbi(buf []byte) error { - return decodeMethod(ChildERC20PredicateACL.Abi.Methods["initialize"], buf, i) + return decodeMethod(ChildERC20PredicateACL.Abi.MethodsBySignature["initialize(address,address,address,address,address,bool,bool,address)"], buf, i) } type WithdrawToChildERC20PredicateACLFn struct { diff --git a/consensus/polybft/contractsapi/gen_sc_data.go b/consensus/polybft/contractsapi/gen_sc_data.go index 53b990b0f8..a5c28a4204 100644 --- a/consensus/polybft/contractsapi/gen_sc_data.go +++ b/consensus/polybft/contractsapi/gen_sc_data.go @@ -7,7 +7,7 @@ var NativeERC20Artifact string = `{"_format":"hh-sol-artifact-1","contractName": var NativeERC20MintableArtifact string = `{"_format":"hh-sol-artifact-1","contractName":"NativeERC20Mintable","sourceName":"contracts/child/NativeERC20Mintable.sol","abi":[{"inputs":[{"internalType":"string","name":"only","type":"string"}],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","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":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ALLOWLIST_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCKLIST_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVE_TOKEN_CONTRACT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVE_TRANSFER_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVE_TRANSFER_PRECOMPILE_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"READ_ADDRESSLIST_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SYSTEM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VALIDATOR_PKCHECK_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VALIDATOR_PKCHECK_PRECOMPILE_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"predicate_","type":"address"},{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"rootToken_","type":"address"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"uint256","name":"tokenSupply_","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"predicate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rootToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b5061001a3361001f565b61008d565b603480546001600160a01b03191690556100388161003b565b50565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61150a8061009c6000396000f3fe608060405234801561001057600080fd5b506004361061019a5760003560e01c806370a08231116100e45780639dc29fac116100925780639dc29fac1461031a578063a457c2d71461032d578063a9059cbb14610340578063dd62ed3e14610353578063e0563ab114610366578063e30c39781461036f578063e619870514610380578063f2fde38b1461039157600080fd5b806370a08231146102c3578063715018a6146102de57806379ba5097146102e65780638da5cb5b146102ee578063947287cf146102ff57806395d89b411461030857806397e5230d1461031057600080fd5b8063313ce5671161014c578063313ce56714610245578063395093511461025a5780633b878c221461026d57806340c10f191461027657806351351d531461028957806355b01e4d146102975780635ea5df79146102a55780636091636b146102ae57600080fd5b806306fdde031461019f57806307b3e252146101bd578063095ea7b3146101e357806318160ddd146102065780631f2d00651461021857806323b872dd14610229578063284017f51461023c575b600080fd5b6101a76103a4565b6040516101b49190611022565b60405180910390f35b6101cb6004600360981b0181565b6040516001600160a01b0390911681526020016101b4565b6101f66101f1366004611071565b610436565b60405190151581526020016101b4565b6036545b6040519081526020016101b4565b6038546001600160a01b03166101cb565b6101f661023736600461109b565b610450565b6101cb61202081565b603b5460405160ff90911681526020016101b4565b6101f6610268366004611071565b610474565b6101cb61101081565b6101f6610284366004611071565b610496565b6101cb6002600160a01b0381565b6101cb6004600160991b0181565b61020a61138881565b6102c16102bc366004611120565b6104f4565b005b61020a6102d13660046111e4565b6001600160a01b03163190565b6102c1610714565b6102c1610728565b6033546001600160a01b03166101cb565b61020a61520881565b6101a76107a2565b61020a620249f081565b6101f6610328366004611071565b6107b1565b6101f661033b366004611071565b6107fd565b6101f661034e366004611071565b610878565b61020a610361366004611206565b610886565b6101cb61203081565b6034546001600160a01b03166101cb565b6037546001600160a01b03166101cb565b6102c161039f3660046111e4565b6108b1565b6060603980546103b390611239565b80601f01602080910402602001604051908101604052809291908181526020018280546103df90611239565b801561042c5780601f106104015761010080835404028352916020019161042c565b820191906000526020600020905b81548152906001019060200180831161040f57829003601f168201915b5050505050905090565b600033610444818585610922565b60019150505b92915050565b60003361045e858285610a46565b610469858585610ac0565b506001949350505050565b6000336104448185856104878383610886565b6104919190611289565b610922565b6037546000906001600160a01b03163314806104bc57506033546001600160a01b031633145b6104e15760405162461bcd60e51b81526004016104d89061129c565b60405180910390fd5b6104eb8383610c85565b50600192915050565b600054610100900460ff16158080156105145750600054600160ff909116105b8061052e5750303b15801561052e575060005460ff166001145b6105915760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104d8565b6000805460ff1916600117905580156105b4576000805461ff0019166101001790555b336002600160a01b03146105f85760405163973d02cb60e01b815260206004820152600a60248201526914d654d5115350d0531360b21b60448201526064016104d8565b6001600160a01b0389166106595760405162461bcd60e51b815260206004820152602260248201527f4e617469766545524332303a20496e76616c6964206f776e6572206164647265604482015261737360f01b60648201526084016104d8565b603780546001600160a01b03808d166001600160a01b03199283161790925560388054928b1692909116919091179055603961069687898361134e565b50603a6106a485878361134e565b50603b805460ff191660ff851617905560368290556106c289610ddf565b8015610708576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b61071c610df8565b6107266000610ddf565b565b60345433906001600160a01b031681146107965760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016104d8565b61079f81610ddf565b50565b6060603a80546103b390611239565b6037546000906001600160a01b03163314806107d757506033546001600160a01b031633145b6107f35760405162461bcd60e51b81526004016104d89061129c565b6104eb8383610e52565b6000338161080b8286610886565b90508381101561086b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d8565b6104698286868403610922565b600033610444818585610ac0565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6108b9610df8565b603480546001600160a01b0383166001600160a01b031990911681179091556108ea6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b0383166109845760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d8565b6001600160a01b0382166109e55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d8565b6001600160a01b0383811660008181526035602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610a528484610886565b90506000198114610aba5781811015610aad5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d8565b610aba8484848403610922565b50505050565b6001600160a01b038316610b245760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d8565b6001600160a01b038216610b865760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d8565b6000806120206001600160a01b0316858585604051602001610baa9392919061140f565b60408051601f1981840301815290829052610bc491611433565b6000604051808303816000865af19150503d8060008114610c01576040519150601f19603f3d011682016040523d82523d6000602084013e610c06565b606091505b5091509150818015610c27575080806020019051810190610c27919061144f565b610c435760405162461bcd60e51b81526004016104d890611471565b836001600160a01b0316856001600160a01b03166000805160206114b583398151915285604051610c7691815260200190565b60405180910390a35050505050565b6001600160a01b038216610cdb5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d8565b8060366000828254610ced9190611289565b9091555050604051600090819061202090610d109083908790879060200161140f565b60408051601f1981840301815290829052610d2a91611433565b6000604051808303816000865af19150503d8060008114610d67576040519150601f19603f3d011682016040523d82523d6000602084013e610d6c565b606091505b5091509150818015610d8d575080806020019051810190610d8d919061144f565b610da95760405162461bcd60e51b81526004016104d890611471565b6040518381526001600160a01b038516906000906000805160206114b5833981519152906020015b60405180910390a350505050565b603480546001600160a01b031916905561079f81610fac565b6033546001600160a01b031633146107265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d8565b6001600160a01b038216610eb25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d8565b8060366000828254610ec491906114a1565b9091555050604051600090819061202090610ee79086908490879060200161140f565b60408051601f1981840301815290829052610f0191611433565b6000604051808303816000865af19150503d8060008114610f3e576040519150601f19603f3d011682016040523d82523d6000602084013e610f43565b606091505b5091509150818015610f64575080806020019051810190610f64919061144f565b610f805760405162461bcd60e51b81526004016104d890611471565b6040518381526000906001600160a01b038616906000805160206114b583398151915290602001610dd1565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b83811015611019578181015183820152602001611001565b50506000910152565b6020815260008251806020840152611041816040850160208701610ffe565b601f01601f19169190910160400192915050565b80356001600160a01b038116811461106c57600080fd5b919050565b6000806040838503121561108457600080fd5b61108d83611055565b946020939093013593505050565b6000806000606084860312156110b057600080fd5b6110b984611055565b92506110c760208501611055565b9150604084013590509250925092565b60008083601f8401126110e957600080fd5b50813567ffffffffffffffff81111561110157600080fd5b60208301915083602082850101111561111957600080fd5b9250929050565b600080600080600080600080600060e08a8c03121561113e57600080fd5b6111478a611055565b985061115560208b01611055565b975061116360408b01611055565b965060608a013567ffffffffffffffff8082111561118057600080fd5b61118c8d838e016110d7565b909850965060808c01359150808211156111a557600080fd5b506111b28c828d016110d7565b90955093505060a08a013560ff811681146111cc57600080fd5b8092505060c08a013590509295985092959850929598565b6000602082840312156111f657600080fd5b6111ff82611055565b9392505050565b6000806040838503121561121957600080fd5b61122283611055565b915061123060208401611055565b90509250929050565b600181811c9082168061124d57607f821691505b60208210810361126d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561044a5761044a611273565b6020808252602d908201527f4e617469766545524332303a204f6e6c7920707265646963617465206f72206f60408201526c1ddb995c8818d85b8818d85b1b609a1b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b601f82111561134957600081815260208120601f850160051c810160208610156113265750805b601f850160051c820191505b8181101561134557828155600101611332565b5050505b505050565b67ffffffffffffffff831115611366576113666112e9565b61137a836113748354611239565b836112ff565b6000601f8411600181146113ae57600085156113965750838201355b600019600387901b1c1916600186901b178355611408565b600083815260209020601f19861690835b828110156113df57868501358255602094850194600190920191016113bf565b50868210156113fc5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60008251611445818460208701610ffe565b9190910192915050565b60006020828403121561146157600080fd5b815180151581146111ff57600080fd5b60208082526016908201527514149150d3d35412531157d0d0531317d1905253115160521b604082015260600190565b8181038181111561044a5761044a61127356feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220c841ea6b2ede0321e38158aa4ac46f255ea0caf34a5429d64b9287ce7df103b364736f6c63430008130033","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061019a5760003560e01c806370a08231116100e45780639dc29fac116100925780639dc29fac1461031a578063a457c2d71461032d578063a9059cbb14610340578063dd62ed3e14610353578063e0563ab114610366578063e30c39781461036f578063e619870514610380578063f2fde38b1461039157600080fd5b806370a08231146102c3578063715018a6146102de57806379ba5097146102e65780638da5cb5b146102ee578063947287cf146102ff57806395d89b411461030857806397e5230d1461031057600080fd5b8063313ce5671161014c578063313ce56714610245578063395093511461025a5780633b878c221461026d57806340c10f191461027657806351351d531461028957806355b01e4d146102975780635ea5df79146102a55780636091636b146102ae57600080fd5b806306fdde031461019f57806307b3e252146101bd578063095ea7b3146101e357806318160ddd146102065780631f2d00651461021857806323b872dd14610229578063284017f51461023c575b600080fd5b6101a76103a4565b6040516101b49190611022565b60405180910390f35b6101cb6004600360981b0181565b6040516001600160a01b0390911681526020016101b4565b6101f66101f1366004611071565b610436565b60405190151581526020016101b4565b6036545b6040519081526020016101b4565b6038546001600160a01b03166101cb565b6101f661023736600461109b565b610450565b6101cb61202081565b603b5460405160ff90911681526020016101b4565b6101f6610268366004611071565b610474565b6101cb61101081565b6101f6610284366004611071565b610496565b6101cb6002600160a01b0381565b6101cb6004600160991b0181565b61020a61138881565b6102c16102bc366004611120565b6104f4565b005b61020a6102d13660046111e4565b6001600160a01b03163190565b6102c1610714565b6102c1610728565b6033546001600160a01b03166101cb565b61020a61520881565b6101a76107a2565b61020a620249f081565b6101f6610328366004611071565b6107b1565b6101f661033b366004611071565b6107fd565b6101f661034e366004611071565b610878565b61020a610361366004611206565b610886565b6101cb61203081565b6034546001600160a01b03166101cb565b6037546001600160a01b03166101cb565b6102c161039f3660046111e4565b6108b1565b6060603980546103b390611239565b80601f01602080910402602001604051908101604052809291908181526020018280546103df90611239565b801561042c5780601f106104015761010080835404028352916020019161042c565b820191906000526020600020905b81548152906001019060200180831161040f57829003601f168201915b5050505050905090565b600033610444818585610922565b60019150505b92915050565b60003361045e858285610a46565b610469858585610ac0565b506001949350505050565b6000336104448185856104878383610886565b6104919190611289565b610922565b6037546000906001600160a01b03163314806104bc57506033546001600160a01b031633145b6104e15760405162461bcd60e51b81526004016104d89061129c565b60405180910390fd5b6104eb8383610c85565b50600192915050565b600054610100900460ff16158080156105145750600054600160ff909116105b8061052e5750303b15801561052e575060005460ff166001145b6105915760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104d8565b6000805460ff1916600117905580156105b4576000805461ff0019166101001790555b336002600160a01b03146105f85760405163973d02cb60e01b815260206004820152600a60248201526914d654d5115350d0531360b21b60448201526064016104d8565b6001600160a01b0389166106595760405162461bcd60e51b815260206004820152602260248201527f4e617469766545524332303a20496e76616c6964206f776e6572206164647265604482015261737360f01b60648201526084016104d8565b603780546001600160a01b03808d166001600160a01b03199283161790925560388054928b1692909116919091179055603961069687898361134e565b50603a6106a485878361134e565b50603b805460ff191660ff851617905560368290556106c289610ddf565b8015610708576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b61071c610df8565b6107266000610ddf565b565b60345433906001600160a01b031681146107965760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016104d8565b61079f81610ddf565b50565b6060603a80546103b390611239565b6037546000906001600160a01b03163314806107d757506033546001600160a01b031633145b6107f35760405162461bcd60e51b81526004016104d89061129c565b6104eb8383610e52565b6000338161080b8286610886565b90508381101561086b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d8565b6104698286868403610922565b600033610444818585610ac0565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6108b9610df8565b603480546001600160a01b0383166001600160a01b031990911681179091556108ea6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b0383166109845760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d8565b6001600160a01b0382166109e55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d8565b6001600160a01b0383811660008181526035602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610a528484610886565b90506000198114610aba5781811015610aad5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d8565b610aba8484848403610922565b50505050565b6001600160a01b038316610b245760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d8565b6001600160a01b038216610b865760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d8565b6000806120206001600160a01b0316858585604051602001610baa9392919061140f565b60408051601f1981840301815290829052610bc491611433565b6000604051808303816000865af19150503d8060008114610c01576040519150601f19603f3d011682016040523d82523d6000602084013e610c06565b606091505b5091509150818015610c27575080806020019051810190610c27919061144f565b610c435760405162461bcd60e51b81526004016104d890611471565b836001600160a01b0316856001600160a01b03166000805160206114b583398151915285604051610c7691815260200190565b60405180910390a35050505050565b6001600160a01b038216610cdb5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d8565b8060366000828254610ced9190611289565b9091555050604051600090819061202090610d109083908790879060200161140f565b60408051601f1981840301815290829052610d2a91611433565b6000604051808303816000865af19150503d8060008114610d67576040519150601f19603f3d011682016040523d82523d6000602084013e610d6c565b606091505b5091509150818015610d8d575080806020019051810190610d8d919061144f565b610da95760405162461bcd60e51b81526004016104d890611471565b6040518381526001600160a01b038516906000906000805160206114b5833981519152906020015b60405180910390a350505050565b603480546001600160a01b031916905561079f81610fac565b6033546001600160a01b031633146107265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d8565b6001600160a01b038216610eb25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d8565b8060366000828254610ec491906114a1565b9091555050604051600090819061202090610ee79086908490879060200161140f565b60408051601f1981840301815290829052610f0191611433565b6000604051808303816000865af19150503d8060008114610f3e576040519150601f19603f3d011682016040523d82523d6000602084013e610f43565b606091505b5091509150818015610f64575080806020019051810190610f64919061144f565b610f805760405162461bcd60e51b81526004016104d890611471565b6040518381526000906001600160a01b038616906000805160206114b583398151915290602001610dd1565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b83811015611019578181015183820152602001611001565b50506000910152565b6020815260008251806020840152611041816040850160208701610ffe565b601f01601f19169190910160400192915050565b80356001600160a01b038116811461106c57600080fd5b919050565b6000806040838503121561108457600080fd5b61108d83611055565b946020939093013593505050565b6000806000606084860312156110b057600080fd5b6110b984611055565b92506110c760208501611055565b9150604084013590509250925092565b60008083601f8401126110e957600080fd5b50813567ffffffffffffffff81111561110157600080fd5b60208301915083602082850101111561111957600080fd5b9250929050565b600080600080600080600080600060e08a8c03121561113e57600080fd5b6111478a611055565b985061115560208b01611055565b975061116360408b01611055565b965060608a013567ffffffffffffffff8082111561118057600080fd5b61118c8d838e016110d7565b909850965060808c01359150808211156111a557600080fd5b506111b28c828d016110d7565b90955093505060a08a013560ff811681146111cc57600080fd5b8092505060c08a013590509295985092959850929598565b6000602082840312156111f657600080fd5b6111ff82611055565b9392505050565b6000806040838503121561121957600080fd5b61122283611055565b915061123060208401611055565b90509250929050565b600181811c9082168061124d57607f821691505b60208210810361126d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561044a5761044a611273565b6020808252602d908201527f4e617469766545524332303a204f6e6c7920707265646963617465206f72206f60408201526c1ddb995c8818d85b8818d85b1b609a1b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b601f82111561134957600081815260208120601f850160051c810160208610156113265750805b601f850160051c820191505b8181101561134557828155600101611332565b5050505b505050565b67ffffffffffffffff831115611366576113666112e9565b61137a836113748354611239565b836112ff565b6000601f8411600181146113ae57600085156113965750838201355b600019600387901b1c1916600186901b178355611408565b600083815260209020601f19861690835b828110156113df57868501358255602094850194600190920191016113bf565b50868210156113fc5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60008251611445818460208701610ffe565b9190910192915050565b60006020828403121561146157600080fd5b815180151581146111ff57600080fd5b60208082526016908201527514149150d3d35412531157d0d0531317d1905253115160521b604082015260600190565b8181038181111561044a5761044a61127356feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220c841ea6b2ede0321e38158aa4ac46f255ea0caf34a5429d64b9287ce7df103b364736f6c63430008130033","linkReferences":{},"deployedLinkReferences":{}}` var ChildERC20Artifact string = `{"_format":"hh-sol-artifact-1","contractName":"ChildERC20","sourceName":"contracts/child/ChildERC20.sol","abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address","name":"relayerAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"functionSignature","type":"bytes"}],"name":"MetaTransactionExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"executeMetaTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rootToken_","type":"address"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"offset","type":"uint256"}],"name":"invalidateNext","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"predicate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rootToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b50611920806100206000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806340c10f19116100ad578063a457c2d711610071578063a457c2d71461028b578063a9059cbb1461029e578063dd62ed3e146102b1578063e6198705146102c4578063f6d2ee86146102d557600080fd5b806340c10f191461021f57806370a082311461023257806395d89b411461025b5780639b77ef11146102635780639dc29fac1461027857600080fd5b80631f2d0065116100f45780631f2d00651461018c57806323b872dd146101b15780632d0335ab146101c4578063313ce567146101ed578063395093511461020c57600080fd5b806306fdde0314610126578063095ea7b3146101445780630c53c51c1461016757806318160ddd1461017a575b600080fd5b61012e6102e8565b60405161013b9190611395565b60405180910390f35b6101576101523660046113cb565b61037a565b604051901515815260200161013b565b61012e61017536600461144f565b61039e565b60a0545b60405190815260200161013b565b60d1546001600160a01b03165b6040516001600160a01b03909116815260200161013b565b6101576101bf3660046114c5565b610681565b61017e6101d2366004611501565b6001600160a01b031660009081526038602052604090205490565b60d154600160a01b900460ff1660405160ff909116815260200161013b565b61015761021a3660046113cb565b6106af565b61015761022d3660046113cb565b6106db565b61017e610240366004611501565b6001600160a01b03166000908152609e602052604090205490565b61012e61071b565b61027661027136600461151c565b61072a565b005b6101576102863660046113cb565b610751565b6101576102993660046113cb565b610788565b6101576102ac3660046113cb565b61080e565b61017e6102bf366004611535565b610826565b60d0546001600160a01b0316610199565b6102766102e3366004611568565b610851565b606060a180546102f7906115ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610323906115ec565b80156103705780601f1061034557610100808354040283529160200191610370565b820191906000526020600020905b81548152906001019060200180831161035357829003601f168201915b5050505050905090565b600080610385610ad1565b9050610392818585610ae0565b60019150505b92915050565b606060006103e187878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c0592505050565b90506001600160e01b031960003581169082160361046c5760405162461bcd60e51b815260206004820152603d60248201527f66756e6374696f6e5369676e61747572652063616e206e6f74206265206f662060448201527f657865637574654d6574615472616e73616374696f6e206d6574686f6400000060648201526084015b60405180910390fd5b604080516060810182526001600160a01b038a16600081815260386020908152848220548452808401929092528351601f8b0183900483028101830185528a815290938301918b908b9081908401838280828437600092019190915250505091525090506104dd8982888888610c20565b6105335760405162461bcd60e51b815260206004820152602160248201527f5369676e657220616e64207369676e617475726520646f206e6f74206d6174636044820152600d60fb1b6064820152608401610463565b603860008a6001600160a01b03166001600160a01b031681526020019081526020016000206000815460010191905081905550600080306001600160a01b03168a8a8d60405160200161058893929190611626565b60408051601f19818403018152908290526105a29161164c565b6000604051808303816000865af19150503d80600081146105df576040519150601f19603f3d011682016040523d82523d6000602084013e6105e4565b606091505b5091509150816106365760405162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c000000006044820152606401610463565b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8b338c8c60405161066b9493929190611668565b60405180910390a19a9950505050505050505050565b60008061068c610ad1565b9050610699858285610cfc565b6106a4858585610d76565b506001949350505050565b6000806106ba610ad1565b90506103928185856106cc8589610826565b6106d691906116b4565b610ae0565b60d0546000906001600160a01b031633146107085760405162461bcd60e51b8152600401610463906116d5565b6107128383610f0f565b50600192915050565b606060a280546102f7906115ec565b33600090815260386020526040812080548392906107499084906116b4565b909155505050565b60d0546000906001600160a01b0316331461077e5760405162461bcd60e51b8152600401610463906116d5565b6107128383610fbf565b600080610793610ad1565b905060006107a18286610826565b9050838110156108015760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610463565b6106a48286868403610ae0565b600080610819610ad1565b9050610392818585610d76565b6001600160a01b039182166000908152609f6020908152604080832093909416825291909152205490565b606b54610100900460ff16158080156108715750606b54600160ff909116105b8061088b5750303b15801561088b5750606b5460ff166001145b6108ee5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610463565b606b805460ff19166001179055801561091157606b805461ff0019166101001790555b6001600160a01b0387161580159061092857508415155b801561093357508215155b61097f5760405162461bcd60e51b815260206004820152601e60248201527f4368696c6445524332303a204241445f494e495449414c495a4154494f4e00006044820152606401610463565b60d1805460ff8416600160a01b026001600160a81b03199091166001600160a01b038a161717905560d080546001600160a01b03191633179055604080516020601f8801819004810282018101909252868152610a2a91889088908190840183828082843760009201919091525050604080516020601f8a0181900481028201810190925288815292508891508790819084018382808284376000920191909152506110de92505050565b610a8286868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260018152603160f81b6020820152915061110f9050565b8015610ac857606b805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6000610adb61117b565b905090565b6001600160a01b038316610b425760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610463565b6001600160a01b038216610ba35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610463565b6001600160a01b038381166000818152609f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60008151600003610c1857506000919050565b506020015190565b6000806001610c36610c31886111d7565b611254565b6040805160008152602081018083529290925260ff861690820152606081018790526080810186905260a0016020604051602081039080840390855afa158015610c84573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610cdb5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606401610463565b866001600160a01b0316816001600160a01b03161491505095945050505050565b6000610d088484610826565b90506000198114610d705781811015610d635760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610463565b610d708484848403610ae0565b50505050565b6001600160a01b038316610dda5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610463565b6001600160a01b038216610e3c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610463565b6001600160a01b0383166000908152609e602052604090205481811015610eb45760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610463565b6001600160a01b038085166000818152609e602052604080822086860390559286168082529083902080548601905591516000805160206118cb83398151915290610f029086815260200190565b60405180910390a3610d70565b6001600160a01b038216610f655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610463565b8060a06000828254610f7791906116b4565b90915550506001600160a01b0382166000818152609e60209081526040808320805486019055518481526000805160206118cb833981519152910160405180910390a35b5050565b6001600160a01b03821661101f5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610463565b6001600160a01b0382166000908152609e6020526040902054818110156110935760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610463565b6001600160a01b0383166000818152609e60209081526040808320868603905560a080548790039055518581529192916000805160206118cb8339815191529101610bf8565b505050565b606b54610100900460ff166111055760405162461bcd60e51b815260040161046390611718565b610fbb8282611281565b815160208084019190912082519183019190912060038290556004819055466001557f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61115d8184846112c1565b600055600280546001600160a01b0319163017905560055550505050565b60003033036111d157600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506111d49050565b50335b90565b60006040518060800160405280604381526020016118886043913980516020918201208351848301516040808701518051908601209051611237950193845260208401929092526001600160a01b03166040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b600061039861126161130a565b8360405161190160f01b8152600281019290925260228201526042902090565b606b54610100900460ff166112a85760405162461bcd60e51b815260040161046390611718565b60a16112b483826117c7565b5060a26110d982826117c7565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6002546000906001600160a01b031630148015611328575060015446145b15611334575060005490565b610adb6005546003546004546112c1565b60005b83811015611360578181015183820152602001611348565b50506000910152565b60008151808452611381816020860160208601611345565b601f01601f19169290920160200192915050565b6020815260006113a86020830184611369565b9392505050565b80356001600160a01b03811681146113c657600080fd5b919050565b600080604083850312156113de57600080fd5b6113e7836113af565b946020939093013593505050565b60008083601f84011261140757600080fd5b50813567ffffffffffffffff81111561141f57600080fd5b60208301915083602082850101111561143757600080fd5b9250929050565b803560ff811681146113c657600080fd5b60008060008060008060a0878903121561146857600080fd5b611471876113af565b9550602087013567ffffffffffffffff81111561148d57600080fd5b61149989828a016113f5565b90965094505060408701359250606087013591506114b96080880161143e565b90509295509295509295565b6000806000606084860312156114da57600080fd5b6114e3846113af565b92506114f1602085016113af565b9150604084013590509250925092565b60006020828403121561151357600080fd5b6113a8826113af565b60006020828403121561152e57600080fd5b5035919050565b6000806040838503121561154857600080fd5b611551836113af565b915061155f602084016113af565b90509250929050565b6000806000806000806080878903121561158157600080fd5b61158a876113af565b9550602087013567ffffffffffffffff808211156115a757600080fd5b6115b38a838b016113f5565b909750955060408901359150808211156115cc57600080fd5b506115d989828a016113f5565b90945092506114b990506060880161143e565b600181811c9082168061160057607f821691505b60208210810361162057634e487b7160e01b600052602260045260246000fd5b50919050565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b6000825161165e818460208701611345565b9190910192915050565b6001600160a01b0385811682528416602082015260606040820181905281018290526000828460808401376000608084840101526080601f19601f850116830101905095945050505050565b8082018082111561039857634e487b7160e01b600052601160045260246000fd5b60208082526023908201527f4368696c6445524332303a204f6e6c79207072656469636174652063616e2063604082015262185b1b60ea1b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b601f8211156110d957600081815260208120601f850160051c810160208610156117a05750805b601f850160051c820191505b818110156117bf578281556001016117ac565b505050505050565b815167ffffffffffffffff8111156117e1576117e1611763565b6117f5816117ef84546115ec565b84611779565b602080601f83116001811461182a57600084156118125750858301515b600019600386901b1c1916600185901b1785556117bf565b600085815260208120601f198616915b828110156118595788860151825594840194600190910190840161183a565b50858210156118775787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e617475726529ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122005bc8220d8b2e5c3650a7eeba7bb65c9d963e5b9e60b935baa9a28790f22937364736f6c63430008130033","deployedBytecode":"0x608060405234801561001057600080fd5b50600436106101215760003560e01c806340c10f19116100ad578063a457c2d711610071578063a457c2d71461028b578063a9059cbb1461029e578063dd62ed3e146102b1578063e6198705146102c4578063f6d2ee86146102d557600080fd5b806340c10f191461021f57806370a082311461023257806395d89b411461025b5780639b77ef11146102635780639dc29fac1461027857600080fd5b80631f2d0065116100f45780631f2d00651461018c57806323b872dd146101b15780632d0335ab146101c4578063313ce567146101ed578063395093511461020c57600080fd5b806306fdde0314610126578063095ea7b3146101445780630c53c51c1461016757806318160ddd1461017a575b600080fd5b61012e6102e8565b60405161013b9190611395565b60405180910390f35b6101576101523660046113cb565b61037a565b604051901515815260200161013b565b61012e61017536600461144f565b61039e565b60a0545b60405190815260200161013b565b60d1546001600160a01b03165b6040516001600160a01b03909116815260200161013b565b6101576101bf3660046114c5565b610681565b61017e6101d2366004611501565b6001600160a01b031660009081526038602052604090205490565b60d154600160a01b900460ff1660405160ff909116815260200161013b565b61015761021a3660046113cb565b6106af565b61015761022d3660046113cb565b6106db565b61017e610240366004611501565b6001600160a01b03166000908152609e602052604090205490565b61012e61071b565b61027661027136600461151c565b61072a565b005b6101576102863660046113cb565b610751565b6101576102993660046113cb565b610788565b6101576102ac3660046113cb565b61080e565b61017e6102bf366004611535565b610826565b60d0546001600160a01b0316610199565b6102766102e3366004611568565b610851565b606060a180546102f7906115ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610323906115ec565b80156103705780601f1061034557610100808354040283529160200191610370565b820191906000526020600020905b81548152906001019060200180831161035357829003601f168201915b5050505050905090565b600080610385610ad1565b9050610392818585610ae0565b60019150505b92915050565b606060006103e187878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c0592505050565b90506001600160e01b031960003581169082160361046c5760405162461bcd60e51b815260206004820152603d60248201527f66756e6374696f6e5369676e61747572652063616e206e6f74206265206f662060448201527f657865637574654d6574615472616e73616374696f6e206d6574686f6400000060648201526084015b60405180910390fd5b604080516060810182526001600160a01b038a16600081815260386020908152848220548452808401929092528351601f8b0183900483028101830185528a815290938301918b908b9081908401838280828437600092019190915250505091525090506104dd8982888888610c20565b6105335760405162461bcd60e51b815260206004820152602160248201527f5369676e657220616e64207369676e617475726520646f206e6f74206d6174636044820152600d60fb1b6064820152608401610463565b603860008a6001600160a01b03166001600160a01b031681526020019081526020016000206000815460010191905081905550600080306001600160a01b03168a8a8d60405160200161058893929190611626565b60408051601f19818403018152908290526105a29161164c565b6000604051808303816000865af19150503d80600081146105df576040519150601f19603f3d011682016040523d82523d6000602084013e6105e4565b606091505b5091509150816106365760405162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c000000006044820152606401610463565b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8b338c8c60405161066b9493929190611668565b60405180910390a19a9950505050505050505050565b60008061068c610ad1565b9050610699858285610cfc565b6106a4858585610d76565b506001949350505050565b6000806106ba610ad1565b90506103928185856106cc8589610826565b6106d691906116b4565b610ae0565b60d0546000906001600160a01b031633146107085760405162461bcd60e51b8152600401610463906116d5565b6107128383610f0f565b50600192915050565b606060a280546102f7906115ec565b33600090815260386020526040812080548392906107499084906116b4565b909155505050565b60d0546000906001600160a01b0316331461077e5760405162461bcd60e51b8152600401610463906116d5565b6107128383610fbf565b600080610793610ad1565b905060006107a18286610826565b9050838110156108015760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610463565b6106a48286868403610ae0565b600080610819610ad1565b9050610392818585610d76565b6001600160a01b039182166000908152609f6020908152604080832093909416825291909152205490565b606b54610100900460ff16158080156108715750606b54600160ff909116105b8061088b5750303b15801561088b5750606b5460ff166001145b6108ee5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610463565b606b805460ff19166001179055801561091157606b805461ff0019166101001790555b6001600160a01b0387161580159061092857508415155b801561093357508215155b61097f5760405162461bcd60e51b815260206004820152601e60248201527f4368696c6445524332303a204241445f494e495449414c495a4154494f4e00006044820152606401610463565b60d1805460ff8416600160a01b026001600160a81b03199091166001600160a01b038a161717905560d080546001600160a01b03191633179055604080516020601f8801819004810282018101909252868152610a2a91889088908190840183828082843760009201919091525050604080516020601f8a0181900481028201810190925288815292508891508790819084018382808284376000920191909152506110de92505050565b610a8286868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260018152603160f81b6020820152915061110f9050565b8015610ac857606b805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6000610adb61117b565b905090565b6001600160a01b038316610b425760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610463565b6001600160a01b038216610ba35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610463565b6001600160a01b038381166000818152609f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60008151600003610c1857506000919050565b506020015190565b6000806001610c36610c31886111d7565b611254565b6040805160008152602081018083529290925260ff861690820152606081018790526080810186905260a0016020604051602081039080840390855afa158015610c84573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610cdb5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606401610463565b866001600160a01b0316816001600160a01b03161491505095945050505050565b6000610d088484610826565b90506000198114610d705781811015610d635760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610463565b610d708484848403610ae0565b50505050565b6001600160a01b038316610dda5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610463565b6001600160a01b038216610e3c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610463565b6001600160a01b0383166000908152609e602052604090205481811015610eb45760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610463565b6001600160a01b038085166000818152609e602052604080822086860390559286168082529083902080548601905591516000805160206118cb83398151915290610f029086815260200190565b60405180910390a3610d70565b6001600160a01b038216610f655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610463565b8060a06000828254610f7791906116b4565b90915550506001600160a01b0382166000818152609e60209081526040808320805486019055518481526000805160206118cb833981519152910160405180910390a35b5050565b6001600160a01b03821661101f5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610463565b6001600160a01b0382166000908152609e6020526040902054818110156110935760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610463565b6001600160a01b0383166000818152609e60209081526040808320868603905560a080548790039055518581529192916000805160206118cb8339815191529101610bf8565b505050565b606b54610100900460ff166111055760405162461bcd60e51b815260040161046390611718565b610fbb8282611281565b815160208084019190912082519183019190912060038290556004819055466001557f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61115d8184846112c1565b600055600280546001600160a01b0319163017905560055550505050565b60003033036111d157600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506111d49050565b50335b90565b60006040518060800160405280604381526020016118886043913980516020918201208351848301516040808701518051908601209051611237950193845260208401929092526001600160a01b03166040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b600061039861126161130a565b8360405161190160f01b8152600281019290925260228201526042902090565b606b54610100900460ff166112a85760405162461bcd60e51b815260040161046390611718565b60a16112b483826117c7565b5060a26110d982826117c7565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6002546000906001600160a01b031630148015611328575060015446145b15611334575060005490565b610adb6005546003546004546112c1565b60005b83811015611360578181015183820152602001611348565b50506000910152565b60008151808452611381816020860160208601611345565b601f01601f19169290920160200192915050565b6020815260006113a86020830184611369565b9392505050565b80356001600160a01b03811681146113c657600080fd5b919050565b600080604083850312156113de57600080fd5b6113e7836113af565b946020939093013593505050565b60008083601f84011261140757600080fd5b50813567ffffffffffffffff81111561141f57600080fd5b60208301915083602082850101111561143757600080fd5b9250929050565b803560ff811681146113c657600080fd5b60008060008060008060a0878903121561146857600080fd5b611471876113af565b9550602087013567ffffffffffffffff81111561148d57600080fd5b61149989828a016113f5565b90965094505060408701359250606087013591506114b96080880161143e565b90509295509295509295565b6000806000606084860312156114da57600080fd5b6114e3846113af565b92506114f1602085016113af565b9150604084013590509250925092565b60006020828403121561151357600080fd5b6113a8826113af565b60006020828403121561152e57600080fd5b5035919050565b6000806040838503121561154857600080fd5b611551836113af565b915061155f602084016113af565b90509250929050565b6000806000806000806080878903121561158157600080fd5b61158a876113af565b9550602087013567ffffffffffffffff808211156115a757600080fd5b6115b38a838b016113f5565b909750955060408901359150808211156115cc57600080fd5b506115d989828a016113f5565b90945092506114b990506060880161143e565b600181811c9082168061160057607f821691505b60208210810361162057634e487b7160e01b600052602260045260246000fd5b50919050565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b6000825161165e818460208701611345565b9190910192915050565b6001600160a01b0385811682528416602082015260606040820181905281018290526000828460808401376000608084840101526080601f19601f850116830101905095945050505050565b8082018082111561039857634e487b7160e01b600052601160045260246000fd5b60208082526023908201527f4368696c6445524332303a204f6e6c79207072656469636174652063616e2063604082015262185b1b60ea1b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b601f8211156110d957600081815260208120601f850160051c810160208610156117a05750805b601f850160051c820191505b818110156117bf578281556001016117ac565b505050505050565b815167ffffffffffffffff8111156117e1576117e1611763565b6117f5816117ef84546115ec565b84611779565b602080601f83116001811461182a57600084156118125750858301515b600019600386901b1c1916600185901b1785556117bf565b600085815260208120601f198616915b828110156118595788860151825594840194600190910190840161183a565b50858210156118775787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e617475726529ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122005bc8220d8b2e5c3650a7eeba7bb65c9d963e5b9e60b935baa9a28790f22937364736f6c63430008130033","linkReferences":{},"deployedLinkReferences":{}}` var ChildERC20PredicateArtifact string = `{"_format":"hh-sol-artifact-1","contractName":"ChildERC20Predicate","sourceName":"contracts/child/ChildERC20Predicate.sol","abi":[{"inputs":[{"internalType":"string","name":"only","type":"string"}],"name":"Unauthorized","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":"rootToken","type":"address"},{"indexed":true,"internalType":"address","name":"childToken","type":"address"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"L2ERC20Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"rootToken","type":"address"},{"indexed":true,"internalType":"address","name":"childToken","type":"address"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"L2ERC20Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"rootToken","type":"address"},{"indexed":true,"internalType":"address","name":"childToken","type":"address"}],"name":"L2TokenMapped","type":"event"},{"inputs":[],"name":"ALLOWLIST_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCKLIST_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEPOSIT_SIG","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAP_TOKEN_SIG","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVE_TOKEN_CONTRACT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVE_TRANSFER_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVE_TRANSFER_PRECOMPILE_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"READ_ADDRESSLIST_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SYSTEM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VALIDATOR_PKCHECK_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VALIDATOR_PKCHECK_PRECOMPILE_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WITHDRAW_SIG","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"childTokenTemplate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newL2StateSender","type":"address"},{"internalType":"address","name":"newStateReceiver","type":"address"},{"internalType":"address","name":"newRootERC20Predicate","type":"address"},{"internalType":"address","name":"newChildTokenTemplate","type":"address"},{"internalType":"address","name":"newNativeTokenRootAddress","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"l2StateSender","outputs":[{"internalType":"contract IStateSender","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onStateReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rootERC20Predicate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rootTokenToChildToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stateReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IChildERC20","name":"childToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IChildERC20","name":"childToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTo","outputs":[],"stateMutability":"nonpayable","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b506114ea806100206000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80637efab4f5116100b8578063c3b35a7e1161007c578063c3b35a7e14610270578063d41f177114610283578063e0563ab1146102aa578063eeb49945146102b3578063f3fef3a3146102c6578063f6451255146102d957600080fd5b80637efab4f5146101fa578063947287cf1461022357806397e5230d1461022c578063b176806514610236578063b68ad1e41461025d57600080fd5b80633b878c22116100ff5780633b878c22146101ab57806351351d53146101b457806355b01e4d146101c25780635ea5df79146101d057806371cf93b7146101e757600080fd5b806305dc2e8f1461013c57806307b3e2521461016c5780631459457a1461017a5780631bc114ba1461018f578063284017f5146101a2575b600080fd5b60345461014f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61014f6004600360981b0181565b61018d610188366004610ff2565b610300565b005b60335461014f906001600160a01b031681565b61014f61202081565b61014f61101081565b61014f6002600160a01b0381565b61014f6004600160991b0181565b6101d961138881565b604051908152602001610163565b60355461014f906001600160a01b031681565b61014f610208366004611063565b6037602052600090815260409020546001600160a01b031681565b6101d961520881565b6101d9620249f081565b6101d97f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e98286981565b60365461014f906001600160a01b031681565b61018d61027e366004611087565b610464565b6101d97f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f82181565b61014f61203081565b61018d6102c13660046110c8565b610474565b61018d6102d4366004611151565b610648565b6101d97f2cef46a936bdc5b7e6e8c71aa04560c41cf7d88bb26901a7e7f4936ff02accad81565b336002600160a01b03146103495760405163973d02cb60e01b815260206004820152600a60248201526914d654d5115350d0531360b21b60448201526064015b60405180910390fd5b600054610100900460ff16158080156103695750600054600160ff909116105b806103835750303b158015610383575060005460ff166001145b6103e65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610340565b6000805460ff191660011790558015610409576000805461ff0019166101001790555b6104168686868686610657565b801561045c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b61046f8383836107a7565b505050565b6034546001600160a01b031633146104df5760405162461bcd60e51b815260206004820152602860248201527f4368696c6445524332305072656469636174653a204f4e4c595f53544154455f6044820152672922a1a2a4ab22a960c11b6064820152608401610340565b6035546001600160a01b0384811691161461054d5760405162461bcd60e51b815260206004820152602860248201527f4368696c6445524332305072656469636174653a204f4e4c595f524f4f545f50604482015267524544494341544560c01b6064820152608401610340565b7f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f82161057c60206000848661117d565b610585916111a7565b036105a45761059f61059a826020818661117d565b610b1d565b610642565b7f2cef46a936bdc5b7e6e8c71aa04560c41cf7d88bb26901a7e7f4936ff02accad6105d360206000848661117d565b6105dc916111a7565b036105eb5761059f8282610dc8565b60405162461bcd60e51b815260206004820152602660248201527f4368696c6445524332305072656469636174653a20494e56414c49445f5349476044820152654e415455524560d01b6064820152608401610340565b50505050565b6106538233836107a7565b5050565b6001600160a01b0385161580159061067757506001600160a01b03841615155b801561068b57506001600160a01b03831615155b801561069f57506001600160a01b03821615155b6106fb5760405162461bcd60e51b815260206004820152602760248201527f4368696c6445524332305072656469636174653a204241445f494e495449414c60448201526624ad20aa24a7a760c91b6064820152608401610340565b603380546001600160a01b03199081166001600160a01b0388811691909117909255603480548216878416179055603580548216868416179055603680549091168483161790558116156107a0576001600160a01b03811660008181526037602052604080822080546001600160a01b03191661101090811790915590519092917f46bd56f98e1b14fd35691959270a6e1edf7cb8fcd489e0f9dda89e46c0d1ff0d91a35b5050505050565b826001600160a01b03163b60000361080b5760405162461bcd60e51b815260206004820152602160248201527f4368696c6445524332305072656469636174653a204e4f545f434f4e545241436044820152601560fa1b6064820152608401610340565b6000836001600160a01b0316631f2d00656040518163ffffffff1660e01b8152600401602060405180830381865afa15801561084b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086f91906111c5565b6001600160a01b038181166000908152603760205260409020549192508581169116146108ae5760405162461bcd60e51b8152600401610340906111e2565b6001600160a01b0381166108c4576108c4611225565b306001600160a01b0316846001600160a01b031663e61987056040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093091906111c5565b6001600160a01b03161461094657610946611225565b604051632770a7eb60e21b81526001600160a01b03851690639dc29fac90610974903390869060040161123b565b6020604051808303816000875af1158015610993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b79190611254565b610a035760405162461bcd60e51b815260206004820181905260248201527f4368696c6445524332305072656469636174653a204255524e5f4641494c45446044820152606401610340565b603354603554604080517f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e98286960208201526001600160a01b0385811682840152336060830152878116608083015260a08083018890528351808403909101815260c08301938490526316f1983160e01b909352938416936316f1983193610a8e9391169160c4016112bc565b600060405180830381600087803b158015610aa857600080fd5b505af1158015610abc573d6000803e3d6000fd5b50505050826001600160a01b0316846001600160a01b0316826001600160a01b03167fa0923f060a16fc784558d43de424ffde7b01643de5e5d335851b9df94c76bb273386604051610b0f92919061123b565b60405180910390a450505050565b6000808080610b2e858701876112e8565b6001600160a01b0380851660009081526037602052604090205494985092965090945092501680610b715760405162461bcd60e51b8152600401610340906111e2565b806001600160a01b03163b600003610b8b57610b8b611225565b6000816001600160a01b0316631f2d00656040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bef91906111c5565b9050856001600160a01b0316816001600160a01b031614610c1257610c12611225565b6001600160a01b038116610c2857610c28611225565b306001600160a01b0316826001600160a01b031663e61987056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9491906111c5565b6001600160a01b031614610caa57610caa611225565b6040516340c10f1960e01b81526001600160a01b038316906340c10f1990610cd8908790879060040161123b565b6020604051808303816000875af1158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b9190611254565b610d675760405162461bcd60e51b815260206004820181905260248201527f4368696c6445524332305072656469636174653a204d494e545f4641494c45446044820152606401610340565b836001600160a01b0316826001600160a01b0316876001600160a01b03167fdf34f3a3ed8bedc14a4b284ebaee5374d55b64bac6a84c270dabe8fd6b4cdafd8887604051610db692919061123b565b60405180910390a45050505050505050565b6000808080610dd9858701876113dc565b92975090955093509150506001600160a01b038416610dfa57610dfa611225565b6001600160a01b038481166000908152603760205260409020541615610e2257610e22611225565b6036546040516bffffffffffffffffffffffff19606087901b166020820152600091610e72916001600160a01b039091169060340160405160208183030381529060405280519060200120610f3d565b6001600160a01b038681166000908152603760205260409081902080546001600160a01b031916928416928317905551637b69774360e11b81529192509063f6d2ee8690610eca908890889088908890600401611469565b600060405180830381600087803b158015610ee457600080fd5b505af1158015610ef8573d6000803e3d6000fd5b50506040516001600160a01b038085169350881691507f46bd56f98e1b14fd35691959270a6e1edf7cb8fcd489e0f9dda89e46c0d1ff0d90600090a350505050505050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b038116610fd45760405162461bcd60e51b8152602060048201526017602482015276115490cc4c4d8dce8818dc99585d194c8819985a5b1959604a1b6044820152606401610340565b92915050565b6001600160a01b0381168114610fef57600080fd5b50565b600080600080600060a0868803121561100a57600080fd5b853561101581610fda565b9450602086013561102581610fda565b9350604086013561103581610fda565b9250606086013561104581610fda565b9150608086013561105581610fda565b809150509295509295909350565b60006020828403121561107557600080fd5b813561108081610fda565b9392505050565b60008060006060848603121561109c57600080fd5b83356110a781610fda565b925060208401356110b781610fda565b929592945050506040919091013590565b600080600080606085870312156110de57600080fd5b8435935060208501356110f081610fda565b9250604085013567ffffffffffffffff8082111561110d57600080fd5b818701915087601f83011261112157600080fd5b81358181111561113057600080fd5b88602082850101111561114257600080fd5b95989497505060200194505050565b6000806040838503121561116457600080fd5b823561116f81610fda565b946020939093013593505050565b6000808585111561118d57600080fd5b8386111561119a57600080fd5b5050820193919092039150565b80356020831015610fd457600019602084900360031b1b1692915050565b6000602082840312156111d757600080fd5b815161108081610fda565b60208082526023908201527f4368696c6445524332305072656469636174653a20554e4d41505045445f544f60408201526225a2a760e91b606082015260800190565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b03929092168252602082015260400190565b60006020828403121561126657600080fd5b8151801515811461108057600080fd5b6000815180845260005b8181101561129c57602081850181015186830182015201611280565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03831681526040602082018190526000906112e090830184611276565b949350505050565b600080600080608085870312156112fe57600080fd5b843561130981610fda565b9350602085013561131981610fda565b9250604085013561132981610fda565b9396929550929360600135925050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261136057600080fd5b813567ffffffffffffffff8082111561137b5761137b611339565b604051601f8301601f19908116603f011681019082821181831017156113a3576113a3611339565b816040528381528660208588010111156113bc57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113f457600080fd5b85359450602086013561140681610fda565b9350604086013567ffffffffffffffff8082111561142357600080fd5b61142f89838a0161134f565b9450606088013591508082111561144557600080fd5b506114528882890161134f565b925050608086013560ff8116811461105557600080fd5b6001600160a01b038516815260806020820181905260009061148d90830186611276565b828103604084015261149f8186611276565b91505060ff831660608301529594505050505056fea2646970667358221220e0f44ad7883c5cd2dbd85a60832f6c9874795bf975cefd366724cc91bbc22dcd64736f6c63430008130033","deployedBytecode":"0x608060405234801561001057600080fd5b50600436106101375760003560e01c80637efab4f5116100b8578063c3b35a7e1161007c578063c3b35a7e14610270578063d41f177114610283578063e0563ab1146102aa578063eeb49945146102b3578063f3fef3a3146102c6578063f6451255146102d957600080fd5b80637efab4f5146101fa578063947287cf1461022357806397e5230d1461022c578063b176806514610236578063b68ad1e41461025d57600080fd5b80633b878c22116100ff5780633b878c22146101ab57806351351d53146101b457806355b01e4d146101c25780635ea5df79146101d057806371cf93b7146101e757600080fd5b806305dc2e8f1461013c57806307b3e2521461016c5780631459457a1461017a5780631bc114ba1461018f578063284017f5146101a2575b600080fd5b60345461014f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61014f6004600360981b0181565b61018d610188366004610ff2565b610300565b005b60335461014f906001600160a01b031681565b61014f61202081565b61014f61101081565b61014f6002600160a01b0381565b61014f6004600160991b0181565b6101d961138881565b604051908152602001610163565b60355461014f906001600160a01b031681565b61014f610208366004611063565b6037602052600090815260409020546001600160a01b031681565b6101d961520881565b6101d9620249f081565b6101d97f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e98286981565b60365461014f906001600160a01b031681565b61018d61027e366004611087565b610464565b6101d97f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f82181565b61014f61203081565b61018d6102c13660046110c8565b610474565b61018d6102d4366004611151565b610648565b6101d97f2cef46a936bdc5b7e6e8c71aa04560c41cf7d88bb26901a7e7f4936ff02accad81565b336002600160a01b03146103495760405163973d02cb60e01b815260206004820152600a60248201526914d654d5115350d0531360b21b60448201526064015b60405180910390fd5b600054610100900460ff16158080156103695750600054600160ff909116105b806103835750303b158015610383575060005460ff166001145b6103e65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610340565b6000805460ff191660011790558015610409576000805461ff0019166101001790555b6104168686868686610657565b801561045c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b61046f8383836107a7565b505050565b6034546001600160a01b031633146104df5760405162461bcd60e51b815260206004820152602860248201527f4368696c6445524332305072656469636174653a204f4e4c595f53544154455f6044820152672922a1a2a4ab22a960c11b6064820152608401610340565b6035546001600160a01b0384811691161461054d5760405162461bcd60e51b815260206004820152602860248201527f4368696c6445524332305072656469636174653a204f4e4c595f524f4f545f50604482015267524544494341544560c01b6064820152608401610340565b7f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f82161057c60206000848661117d565b610585916111a7565b036105a45761059f61059a826020818661117d565b610b1d565b610642565b7f2cef46a936bdc5b7e6e8c71aa04560c41cf7d88bb26901a7e7f4936ff02accad6105d360206000848661117d565b6105dc916111a7565b036105eb5761059f8282610dc8565b60405162461bcd60e51b815260206004820152602660248201527f4368696c6445524332305072656469636174653a20494e56414c49445f5349476044820152654e415455524560d01b6064820152608401610340565b50505050565b6106538233836107a7565b5050565b6001600160a01b0385161580159061067757506001600160a01b03841615155b801561068b57506001600160a01b03831615155b801561069f57506001600160a01b03821615155b6106fb5760405162461bcd60e51b815260206004820152602760248201527f4368696c6445524332305072656469636174653a204241445f494e495449414c60448201526624ad20aa24a7a760c91b6064820152608401610340565b603380546001600160a01b03199081166001600160a01b0388811691909117909255603480548216878416179055603580548216868416179055603680549091168483161790558116156107a0576001600160a01b03811660008181526037602052604080822080546001600160a01b03191661101090811790915590519092917f46bd56f98e1b14fd35691959270a6e1edf7cb8fcd489e0f9dda89e46c0d1ff0d91a35b5050505050565b826001600160a01b03163b60000361080b5760405162461bcd60e51b815260206004820152602160248201527f4368696c6445524332305072656469636174653a204e4f545f434f4e545241436044820152601560fa1b6064820152608401610340565b6000836001600160a01b0316631f2d00656040518163ffffffff1660e01b8152600401602060405180830381865afa15801561084b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086f91906111c5565b6001600160a01b038181166000908152603760205260409020549192508581169116146108ae5760405162461bcd60e51b8152600401610340906111e2565b6001600160a01b0381166108c4576108c4611225565b306001600160a01b0316846001600160a01b031663e61987056040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093091906111c5565b6001600160a01b03161461094657610946611225565b604051632770a7eb60e21b81526001600160a01b03851690639dc29fac90610974903390869060040161123b565b6020604051808303816000875af1158015610993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b79190611254565b610a035760405162461bcd60e51b815260206004820181905260248201527f4368696c6445524332305072656469636174653a204255524e5f4641494c45446044820152606401610340565b603354603554604080517f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e98286960208201526001600160a01b0385811682840152336060830152878116608083015260a08083018890528351808403909101815260c08301938490526316f1983160e01b909352938416936316f1983193610a8e9391169160c4016112bc565b600060405180830381600087803b158015610aa857600080fd5b505af1158015610abc573d6000803e3d6000fd5b50505050826001600160a01b0316846001600160a01b0316826001600160a01b03167fa0923f060a16fc784558d43de424ffde7b01643de5e5d335851b9df94c76bb273386604051610b0f92919061123b565b60405180910390a450505050565b6000808080610b2e858701876112e8565b6001600160a01b0380851660009081526037602052604090205494985092965090945092501680610b715760405162461bcd60e51b8152600401610340906111e2565b806001600160a01b03163b600003610b8b57610b8b611225565b6000816001600160a01b0316631f2d00656040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bef91906111c5565b9050856001600160a01b0316816001600160a01b031614610c1257610c12611225565b6001600160a01b038116610c2857610c28611225565b306001600160a01b0316826001600160a01b031663e61987056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9491906111c5565b6001600160a01b031614610caa57610caa611225565b6040516340c10f1960e01b81526001600160a01b038316906340c10f1990610cd8908790879060040161123b565b6020604051808303816000875af1158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b9190611254565b610d675760405162461bcd60e51b815260206004820181905260248201527f4368696c6445524332305072656469636174653a204d494e545f4641494c45446044820152606401610340565b836001600160a01b0316826001600160a01b0316876001600160a01b03167fdf34f3a3ed8bedc14a4b284ebaee5374d55b64bac6a84c270dabe8fd6b4cdafd8887604051610db692919061123b565b60405180910390a45050505050505050565b6000808080610dd9858701876113dc565b92975090955093509150506001600160a01b038416610dfa57610dfa611225565b6001600160a01b038481166000908152603760205260409020541615610e2257610e22611225565b6036546040516bffffffffffffffffffffffff19606087901b166020820152600091610e72916001600160a01b039091169060340160405160208183030381529060405280519060200120610f3d565b6001600160a01b038681166000908152603760205260409081902080546001600160a01b031916928416928317905551637b69774360e11b81529192509063f6d2ee8690610eca908890889088908890600401611469565b600060405180830381600087803b158015610ee457600080fd5b505af1158015610ef8573d6000803e3d6000fd5b50506040516001600160a01b038085169350881691507f46bd56f98e1b14fd35691959270a6e1edf7cb8fcd489e0f9dda89e46c0d1ff0d90600090a350505050505050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b038116610fd45760405162461bcd60e51b8152602060048201526017602482015276115490cc4c4d8dce8818dc99585d194c8819985a5b1959604a1b6044820152606401610340565b92915050565b6001600160a01b0381168114610fef57600080fd5b50565b600080600080600060a0868803121561100a57600080fd5b853561101581610fda565b9450602086013561102581610fda565b9350604086013561103581610fda565b9250606086013561104581610fda565b9150608086013561105581610fda565b809150509295509295909350565b60006020828403121561107557600080fd5b813561108081610fda565b9392505050565b60008060006060848603121561109c57600080fd5b83356110a781610fda565b925060208401356110b781610fda565b929592945050506040919091013590565b600080600080606085870312156110de57600080fd5b8435935060208501356110f081610fda565b9250604085013567ffffffffffffffff8082111561110d57600080fd5b818701915087601f83011261112157600080fd5b81358181111561113057600080fd5b88602082850101111561114257600080fd5b95989497505060200194505050565b6000806040838503121561116457600080fd5b823561116f81610fda565b946020939093013593505050565b6000808585111561118d57600080fd5b8386111561119a57600080fd5b5050820193919092039150565b80356020831015610fd457600019602084900360031b1b1692915050565b6000602082840312156111d757600080fd5b815161108081610fda565b60208082526023908201527f4368696c6445524332305072656469636174653a20554e4d41505045445f544f60408201526225a2a760e91b606082015260800190565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b03929092168252602082015260400190565b60006020828403121561126657600080fd5b8151801515811461108057600080fd5b6000815180845260005b8181101561129c57602081850181015186830182015201611280565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03831681526040602082018190526000906112e090830184611276565b949350505050565b600080600080608085870312156112fe57600080fd5b843561130981610fda565b9350602085013561131981610fda565b9250604085013561132981610fda565b9396929550929360600135925050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261136057600080fd5b813567ffffffffffffffff8082111561137b5761137b611339565b604051601f8301601f19908116603f011681019082821181831017156113a3576113a3611339565b816040528381528660208588010111156113bc57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113f457600080fd5b85359450602086013561140681610fda565b9350604086013567ffffffffffffffff8082111561142357600080fd5b61142f89838a0161134f565b9450606088013591508082111561144557600080fd5b506114528882890161134f565b925050608086013560ff8116811461105557600080fd5b6001600160a01b038516815260806020820181905260009061148d90830186611276565b828103604084015261149f8186611276565b91505060ff831660608301529594505050505056fea2646970667358221220e0f44ad7883c5cd2dbd85a60832f6c9874795bf975cefd366724cc91bbc22dcd64736f6c63430008130033","linkReferences":{},"deployedLinkReferences":{}}` -var ChildERC20PredicateACLArtifact string = `{"_format":"hh-sol-artifact-1","contractName":"ChildERC20PredicateAccessList","sourceName":"contracts/child/ChildERC20PredicateAccessList.sol","abi":[{"inputs":[{"internalType":"string","name":"only","type":"string"}],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"AllowListUsageSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"BlockListUsageSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"rootToken","type":"address"},{"indexed":true,"internalType":"address","name":"childToken","type":"address"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"L2ERC20Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"rootToken","type":"address"},{"indexed":true,"internalType":"address","name":"childToken","type":"address"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"L2ERC20Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"rootToken","type":"address"},{"indexed":true,"internalType":"address","name":"childToken","type":"address"}],"name":"L2TokenMapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","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"},{"inputs":[],"name":"ALLOWLIST_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCKLIST_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEPOSIT_SIG","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAP_TOKEN_SIG","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVE_TOKEN_CONTRACT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVE_TRANSFER_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVE_TRANSFER_PRECOMPILE_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"READ_ADDRESSLIST_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SYSTEM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VALIDATOR_PKCHECK_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VALIDATOR_PKCHECK_PRECOMPILE_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WITHDRAW_SIG","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"childTokenTemplate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newL2StateSender","type":"address"},{"internalType":"address","name":"newStateReceiver","type":"address"},{"internalType":"address","name":"newRootERC20Predicate","type":"address"},{"internalType":"address","name":"newChildTokenTemplate","type":"address"},{"internalType":"address","name":"newNativeTokenRootAddress","type":"address"},{"internalType":"bool","name":"newUseAllowList","type":"bool"},{"internalType":"bool","name":"newUseBlockList","type":"bool"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"l2StateSender","outputs":[{"internalType":"contract IStateSender","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onStateReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rootERC20Predicate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rootTokenToChildToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newUseAllowList","type":"bool"}],"name":"setAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newUseBlockList","type":"bool"}],"name":"setBlockList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stateReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IChildERC20","name":"childToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IChildERC20","name":"childToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTo","outputs":[],"stateMutability":"nonpayable","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b50611c8e806100206000396000f3fe608060405234801561001057600080fd5b506004361061018f5760003560e01c80638da5cb5b116100e4578063c5e4683a11610092578063c5e4683a14610323578063d41f177114610336578063e0563ab11461035d578063e30c397814610366578063eeb4994514610377578063f2fde38b1461038a578063f3fef3a31461039d578063f6451255146103b057600080fd5b80638da5cb5b1461029f578063947287cf146102b057806397e5230d146102b9578063b1768065146102c3578063b68ad1e4146102ea578063c1225a20146102fd578063c3b35a7e1461031057600080fd5b806354f8abad1161014157806354f8abad1461021a57806355b01e4d1461022d5780635ea5df791461023b578063715018a61461025257806371cf93b71461025a57806379ba50971461026d5780637efab4f51461027557600080fd5b806305dc2e8f1461019457806307b3e252146101c45780631459457a146101d25780631bc114ba146101e7578063284017f5146101fa5780633b878c221461020357806351351d531461020c575b600080fd5b60fd546101a7906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101a76004600360981b0181565b6101e56101e0366004611616565b6103d7565b005b60fc546101a7906001600160a01b031681565b6101a761202081565b6101a761101081565b6101a76002600160a01b0381565b6101e5610228366004611695565b6104db565b6101a76004600160991b0181565b61024461138881565b6040519081526020016101bb565b6101e56105fe565b60fe546101a7906001600160a01b031681565b6101e5610612565b6101a761028336600461173e565b610100602052600090815260409020546001600160a01b031681565b6033546001600160a01b03166101a7565b61024461520881565b610244620249f081565b6102447f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e98286981565b60ff546101a7906001600160a01b031681565b6101e561030b366004611762565b61068c565b6101e561031e36600461177f565b6106db565b6101e5610331366004611762565b6106f3565b6102447f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f82181565b6101a761203081565b6065546001600160a01b03166101a7565b6101e56103853660046117c0565b61073a565b6101e561039836600461173e565b61090e565b6101e56103ab366004611849565b61097f565b6102447f2cef46a936bdc5b7e6e8c71aa04560c41cf7d88bb26901a7e7f4936ff02accad81565b336002600160a01b03146104075760405163973d02cb60e01b81526004016103fe90611875565b60405180910390fd5b600054610100900460ff16158080156104275750600054600160ff909116105b806104415750303b158015610441575060005460ff166001145b61045d5760405162461bcd60e51b81526004016103fe90611899565b6000805460ff191660011790558015610480576000805461ff0019166101001790555b61048d8686868686610996565b80156104d3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b336002600160a01b03146105025760405163973d02cb60e01b81526004016103fe90611875565b600054610100900460ff16158080156105225750600054600160ff909116105b8061053c5750303b15801561053c575060005460ff166001145b6105585760405162461bcd60e51b81526004016103fe90611899565b6000805460ff19166001179055801561057b576000805461ff0019166101001790555b6105888989898989610996565b60c9805461ffff191685151561ff00191617610100851515021790556105ad82610ae7565b80156105f3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b610606610b00565b6106106000610ae7565b565b60655433906001600160a01b031681146106805760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016103fe565b61068981610ae7565b50565b610694610b00565b60c9805461ff0019166101008315159081029190911790915560405143907f61d574757cde41a357d030b39b2705796ccd699578037ab9a1cfd8117d82bf8690600090a350565b6106e3610b5a565b6106ee838383610b62565b505050565b6106fb610b00565b60c9805460ff191682151590811790915560405143907fe0a0f0fa52db091cb71c202d80420311430ce1ae2e7794149877b6720ce8bf0b90600090a350565b60fd546001600160a01b031633146107a55760405162461bcd60e51b815260206004820152602860248201527f4368696c6445524332305072656469636174653a204f4e4c595f53544154455f6044820152672922a1a2a4ab22a960c11b60648201526084016103fe565b60fe546001600160a01b038481169116146108135760405162461bcd60e51b815260206004820152602860248201527f4368696c6445524332305072656469636174653a204f4e4c595f524f4f545f50604482015267524544494341544560c01b60648201526084016103fe565b7f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f8216108426020600084866118e7565b61084b91611911565b0361086a5761086561086082602081866118e7565b610ed9565b610908565b7f2cef46a936bdc5b7e6e8c71aa04560c41cf7d88bb26901a7e7f4936ff02accad6108996020600084866118e7565b6108a291611911565b036108b1576108658282611185565b60405162461bcd60e51b815260206004820152602660248201527f4368696c6445524332305072656469636174653a20494e56414c49445f5349476044820152654e415455524560d01b60648201526084016103fe565b50505050565b610916610b00565b606580546001600160a01b0383166001600160a01b031990911681179091556109476033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b610987610b5a565b610992823383610b62565b5050565b6001600160a01b038516158015906109b657506001600160a01b03841615155b80156109ca57506001600160a01b03831615155b80156109de57506001600160a01b03821615155b610a3a5760405162461bcd60e51b815260206004820152602760248201527f4368696c6445524332305072656469636174653a204241445f494e495449414c60448201526624ad20aa24a7a760c91b60648201526084016103fe565b60fc80546001600160a01b03199081166001600160a01b038881169190911790925560fd8054821687841617905560fe8054821686841617905560ff8054909116848316179055811615610ae0576001600160a01b0381166000818152610100602052604080822080546001600160a01b03191661101090811790915590519092917f46bd56f98e1b14fd35691959270a6e1edf7cb8fcd489e0f9dda89e46c0d1ff0d91a35b5050505050565b606580546001600160a01b0319169055610689816112fc565b6033546001600160a01b031633146106105760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103fe565b61061061134e565b826001600160a01b03163b600003610bc65760405162461bcd60e51b815260206004820152602160248201527f4368696c6445524332305072656469636174653a204e4f545f434f4e545241436044820152601560fa1b60648201526084016103fe565b6000836001600160a01b0316631f2d00656040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2a919061192f565b6001600160a01b0381811660009081526101006020526040902054919250858116911614610c6a5760405162461bcd60e51b81526004016103fe9061194c565b6001600160a01b038116610c8057610c8061198f565b306001600160a01b0316846001600160a01b031663e61987056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec919061192f565b6001600160a01b031614610d0257610d0261198f565b604051632770a7eb60e21b81526001600160a01b03851690639dc29fac90610d3090339086906004016119a5565b6020604051808303816000875af1158015610d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7391906119be565b610dbf5760405162461bcd60e51b815260206004820181905260248201527f4368696c6445524332305072656469636174653a204255524e5f4641494c454460448201526064016103fe565b60fc5460fe54604080517f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e98286960208201526001600160a01b0385811682840152336060830152878116608083015260a08083018890528351808403909101815260c08301938490526316f1983160e01b909352938416936316f1983193610e4a9391169160c401611a2b565b600060405180830381600087803b158015610e6457600080fd5b505af1158015610e78573d6000803e3d6000fd5b50505050826001600160a01b0316846001600160a01b0316826001600160a01b03167fa0923f060a16fc784558d43de424ffde7b01643de5e5d335851b9df94c76bb273386604051610ecb9291906119a5565b60405180910390a450505050565b6000808080610eea85870187611a57565b6001600160a01b038085166000908152610100602052604090205494985092965090945092501680610f2e5760405162461bcd60e51b81526004016103fe9061194c565b806001600160a01b03163b600003610f4857610f4861198f565b6000816001600160a01b0316631f2d00656040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fac919061192f565b9050856001600160a01b0316816001600160a01b031614610fcf57610fcf61198f565b6001600160a01b038116610fe557610fe561198f565b306001600160a01b0316826001600160a01b031663e61987056040518163ffffffff1660e01b8152600401602060405180830381865afa15801561102d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611051919061192f565b6001600160a01b0316146110675761106761198f565b6040516340c10f1960e01b81526001600160a01b038316906340c10f199061109590879087906004016119a5565b6020604051808303816000875af11580156110b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d891906119be565b6111245760405162461bcd60e51b815260206004820181905260248201527f4368696c6445524332305072656469636174653a204d494e545f4641494c454460448201526064016103fe565b836001600160a01b0316826001600160a01b0316876001600160a01b03167fdf34f3a3ed8bedc14a4b284ebaee5374d55b64bac6a84c270dabe8fd6b4cdafd88876040516111739291906119a5565b60405180910390a45050505050505050565b600080808061119685870187611b4b565b92975090955093509150506001600160a01b0384166111b7576111b761198f565b6001600160a01b038481166000908152610100602052604090205416156111e0576111e061198f565b60ff546040516bffffffffffffffffffffffff19606087901b166020820152600091611230916001600160a01b039091169060340160405160208183030381529060405280519060200120611564565b6001600160a01b03868116600090815261010060205260409081902080546001600160a01b031916928416928317905551637b69774360e11b81529192509063f6d2ee8690611289908890889088908890600401611bd8565b600060405180830381600087803b1580156112a357600080fd5b505af11580156112b7573d6000803e3d6000fd5b50506040516001600160a01b038085169350881691507f46bd56f98e1b14fd35691959270a6e1edf7cb8fcd489e0f9dda89e46c0d1ff0d90600090a350505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60c95460ff161561145957604080513360248083019190915282518083039091018152604490910182526020810180516001600160e01b031663d78bca6960e01b179052905160009182916004600160991b0191611388916113b09190611c23565b6000604051808303818686fa925050503d80600081146113ec576040519150601f19603f3d011682016040523d82523d6000602084013e6113f1565b606091505b509150915081801561141657506000818060200190518101906114149190611c3f565b115b6114565760405162461bcd60e51b81526020600482015260116024820152702224a9a0a62627aba2a22fa9a2a72222a960791b60448201526064016103fe565b50505b60c954610100900460ff161561061057604080513360248083019190915282518083039091018152604490910182526020810180516001600160e01b031663d78bca6960e01b179052905160009182916004600360981b0191611388916114c09190611c23565b6000604051808303818686fa925050503d80600081146114fc576040519150601f19603f3d011682016040523d82523d6000602084013e611501565b606091505b50915091508180156115275750808060200190518101906115229190611c3f565b600114155b6109925760405162461bcd60e51b815260206004820152600e60248201526d212627a1a5a2a22fa9a2a72222a960911b60448201526064016103fe565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b0381166115fb5760405162461bcd60e51b8152602060048201526017602482015276115490cc4c4d8dce8818dc99585d194c8819985a5b1959604a1b60448201526064016103fe565b92915050565b6001600160a01b038116811461068957600080fd5b600080600080600060a0868803121561162e57600080fd5b853561163981611601565b9450602086013561164981611601565b9350604086013561165981611601565b9250606086013561166981611601565b9150608086013561167981611601565b809150509295509295909350565b801515811461068957600080fd5b600080600080600080600080610100898b0312156116b257600080fd5b88356116bd81611601565b975060208901356116cd81611601565b965060408901356116dd81611601565b955060608901356116ed81611601565b945060808901356116fd81611601565b935060a089013561170d81611687565b925060c089013561171d81611687565b915060e089013561172d81611601565b809150509295985092959890939650565b60006020828403121561175057600080fd5b813561175b81611601565b9392505050565b60006020828403121561177457600080fd5b813561175b81611687565b60008060006060848603121561179457600080fd5b833561179f81611601565b925060208401356117af81611601565b929592945050506040919091013590565b600080600080606085870312156117d657600080fd5b8435935060208501356117e881611601565b9250604085013567ffffffffffffffff8082111561180557600080fd5b818701915087601f83011261181957600080fd5b81358181111561182857600080fd5b88602082850101111561183a57600080fd5b95989497505060200194505050565b6000806040838503121561185c57600080fd5b823561186781611601565b946020939093013593505050565b6020808252600a908201526914d654d5115350d0531360b21b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b600080858511156118f757600080fd5b8386111561190457600080fd5b5050820193919092039150565b803560208310156115fb57600019602084900360031b1b1692915050565b60006020828403121561194157600080fd5b815161175b81611601565b60208082526023908201527f4368696c6445524332305072656469636174653a20554e4d41505045445f544f60408201526225a2a760e91b606082015260800190565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b03929092168252602082015260400190565b6000602082840312156119d057600080fd5b815161175b81611687565b60005b838110156119f65781810151838201526020016119de565b50506000910152565b60008151808452611a178160208601602086016119db565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201819052600090611a4f908301846119ff565b949350505050565b60008060008060808587031215611a6d57600080fd5b8435611a7881611601565b93506020850135611a8881611601565b92506040850135611a9881611601565b9396929550929360600135925050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112611acf57600080fd5b813567ffffffffffffffff80821115611aea57611aea611aa8565b604051601f8301601f19908116603f01168101908282118183101715611b1257611b12611aa8565b81604052838152866020858801011115611b2b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a08688031215611b6357600080fd5b853594506020860135611b7581611601565b9350604086013567ffffffffffffffff80821115611b9257600080fd5b611b9e89838a01611abe565b94506060880135915080821115611bb457600080fd5b50611bc188828901611abe565b925050608086013560ff8116811461167957600080fd5b6001600160a01b0385168152608060208201819052600090611bfc908301866119ff565b8281036040840152611c0e81866119ff565b91505060ff8316606083015295945050505050565b60008251611c358184602087016119db565b9190910192915050565b600060208284031215611c5157600080fd5b505191905056fea2646970667358221220cd247ecebcec885e3bec4a56116d63a7b8bf87a8c549ebd4a2d8ffb315fe8a2064736f6c63430008130033","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061018f5760003560e01c80638da5cb5b116100e4578063c5e4683a11610092578063c5e4683a14610323578063d41f177114610336578063e0563ab11461035d578063e30c397814610366578063eeb4994514610377578063f2fde38b1461038a578063f3fef3a31461039d578063f6451255146103b057600080fd5b80638da5cb5b1461029f578063947287cf146102b057806397e5230d146102b9578063b1768065146102c3578063b68ad1e4146102ea578063c1225a20146102fd578063c3b35a7e1461031057600080fd5b806354f8abad1161014157806354f8abad1461021a57806355b01e4d1461022d5780635ea5df791461023b578063715018a61461025257806371cf93b71461025a57806379ba50971461026d5780637efab4f51461027557600080fd5b806305dc2e8f1461019457806307b3e252146101c45780631459457a146101d25780631bc114ba146101e7578063284017f5146101fa5780633b878c221461020357806351351d531461020c575b600080fd5b60fd546101a7906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101a76004600360981b0181565b6101e56101e0366004611616565b6103d7565b005b60fc546101a7906001600160a01b031681565b6101a761202081565b6101a761101081565b6101a76002600160a01b0381565b6101e5610228366004611695565b6104db565b6101a76004600160991b0181565b61024461138881565b6040519081526020016101bb565b6101e56105fe565b60fe546101a7906001600160a01b031681565b6101e5610612565b6101a761028336600461173e565b610100602052600090815260409020546001600160a01b031681565b6033546001600160a01b03166101a7565b61024461520881565b610244620249f081565b6102447f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e98286981565b60ff546101a7906001600160a01b031681565b6101e561030b366004611762565b61068c565b6101e561031e36600461177f565b6106db565b6101e5610331366004611762565b6106f3565b6102447f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f82181565b6101a761203081565b6065546001600160a01b03166101a7565b6101e56103853660046117c0565b61073a565b6101e561039836600461173e565b61090e565b6101e56103ab366004611849565b61097f565b6102447f2cef46a936bdc5b7e6e8c71aa04560c41cf7d88bb26901a7e7f4936ff02accad81565b336002600160a01b03146104075760405163973d02cb60e01b81526004016103fe90611875565b60405180910390fd5b600054610100900460ff16158080156104275750600054600160ff909116105b806104415750303b158015610441575060005460ff166001145b61045d5760405162461bcd60e51b81526004016103fe90611899565b6000805460ff191660011790558015610480576000805461ff0019166101001790555b61048d8686868686610996565b80156104d3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b336002600160a01b03146105025760405163973d02cb60e01b81526004016103fe90611875565b600054610100900460ff16158080156105225750600054600160ff909116105b8061053c5750303b15801561053c575060005460ff166001145b6105585760405162461bcd60e51b81526004016103fe90611899565b6000805460ff19166001179055801561057b576000805461ff0019166101001790555b6105888989898989610996565b60c9805461ffff191685151561ff00191617610100851515021790556105ad82610ae7565b80156105f3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b610606610b00565b6106106000610ae7565b565b60655433906001600160a01b031681146106805760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016103fe565b61068981610ae7565b50565b610694610b00565b60c9805461ff0019166101008315159081029190911790915560405143907f61d574757cde41a357d030b39b2705796ccd699578037ab9a1cfd8117d82bf8690600090a350565b6106e3610b5a565b6106ee838383610b62565b505050565b6106fb610b00565b60c9805460ff191682151590811790915560405143907fe0a0f0fa52db091cb71c202d80420311430ce1ae2e7794149877b6720ce8bf0b90600090a350565b60fd546001600160a01b031633146107a55760405162461bcd60e51b815260206004820152602860248201527f4368696c6445524332305072656469636174653a204f4e4c595f53544154455f6044820152672922a1a2a4ab22a960c11b60648201526084016103fe565b60fe546001600160a01b038481169116146108135760405162461bcd60e51b815260206004820152602860248201527f4368696c6445524332305072656469636174653a204f4e4c595f524f4f545f50604482015267524544494341544560c01b60648201526084016103fe565b7f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f8216108426020600084866118e7565b61084b91611911565b0361086a5761086561086082602081866118e7565b610ed9565b610908565b7f2cef46a936bdc5b7e6e8c71aa04560c41cf7d88bb26901a7e7f4936ff02accad6108996020600084866118e7565b6108a291611911565b036108b1576108658282611185565b60405162461bcd60e51b815260206004820152602660248201527f4368696c6445524332305072656469636174653a20494e56414c49445f5349476044820152654e415455524560d01b60648201526084016103fe565b50505050565b610916610b00565b606580546001600160a01b0383166001600160a01b031990911681179091556109476033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b610987610b5a565b610992823383610b62565b5050565b6001600160a01b038516158015906109b657506001600160a01b03841615155b80156109ca57506001600160a01b03831615155b80156109de57506001600160a01b03821615155b610a3a5760405162461bcd60e51b815260206004820152602760248201527f4368696c6445524332305072656469636174653a204241445f494e495449414c60448201526624ad20aa24a7a760c91b60648201526084016103fe565b60fc80546001600160a01b03199081166001600160a01b038881169190911790925560fd8054821687841617905560fe8054821686841617905560ff8054909116848316179055811615610ae0576001600160a01b0381166000818152610100602052604080822080546001600160a01b03191661101090811790915590519092917f46bd56f98e1b14fd35691959270a6e1edf7cb8fcd489e0f9dda89e46c0d1ff0d91a35b5050505050565b606580546001600160a01b0319169055610689816112fc565b6033546001600160a01b031633146106105760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103fe565b61061061134e565b826001600160a01b03163b600003610bc65760405162461bcd60e51b815260206004820152602160248201527f4368696c6445524332305072656469636174653a204e4f545f434f4e545241436044820152601560fa1b60648201526084016103fe565b6000836001600160a01b0316631f2d00656040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2a919061192f565b6001600160a01b0381811660009081526101006020526040902054919250858116911614610c6a5760405162461bcd60e51b81526004016103fe9061194c565b6001600160a01b038116610c8057610c8061198f565b306001600160a01b0316846001600160a01b031663e61987056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec919061192f565b6001600160a01b031614610d0257610d0261198f565b604051632770a7eb60e21b81526001600160a01b03851690639dc29fac90610d3090339086906004016119a5565b6020604051808303816000875af1158015610d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7391906119be565b610dbf5760405162461bcd60e51b815260206004820181905260248201527f4368696c6445524332305072656469636174653a204255524e5f4641494c454460448201526064016103fe565b60fc5460fe54604080517f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e98286960208201526001600160a01b0385811682840152336060830152878116608083015260a08083018890528351808403909101815260c08301938490526316f1983160e01b909352938416936316f1983193610e4a9391169160c401611a2b565b600060405180830381600087803b158015610e6457600080fd5b505af1158015610e78573d6000803e3d6000fd5b50505050826001600160a01b0316846001600160a01b0316826001600160a01b03167fa0923f060a16fc784558d43de424ffde7b01643de5e5d335851b9df94c76bb273386604051610ecb9291906119a5565b60405180910390a450505050565b6000808080610eea85870187611a57565b6001600160a01b038085166000908152610100602052604090205494985092965090945092501680610f2e5760405162461bcd60e51b81526004016103fe9061194c565b806001600160a01b03163b600003610f4857610f4861198f565b6000816001600160a01b0316631f2d00656040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fac919061192f565b9050856001600160a01b0316816001600160a01b031614610fcf57610fcf61198f565b6001600160a01b038116610fe557610fe561198f565b306001600160a01b0316826001600160a01b031663e61987056040518163ffffffff1660e01b8152600401602060405180830381865afa15801561102d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611051919061192f565b6001600160a01b0316146110675761106761198f565b6040516340c10f1960e01b81526001600160a01b038316906340c10f199061109590879087906004016119a5565b6020604051808303816000875af11580156110b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d891906119be565b6111245760405162461bcd60e51b815260206004820181905260248201527f4368696c6445524332305072656469636174653a204d494e545f4641494c454460448201526064016103fe565b836001600160a01b0316826001600160a01b0316876001600160a01b03167fdf34f3a3ed8bedc14a4b284ebaee5374d55b64bac6a84c270dabe8fd6b4cdafd88876040516111739291906119a5565b60405180910390a45050505050505050565b600080808061119685870187611b4b565b92975090955093509150506001600160a01b0384166111b7576111b761198f565b6001600160a01b038481166000908152610100602052604090205416156111e0576111e061198f565b60ff546040516bffffffffffffffffffffffff19606087901b166020820152600091611230916001600160a01b039091169060340160405160208183030381529060405280519060200120611564565b6001600160a01b03868116600090815261010060205260409081902080546001600160a01b031916928416928317905551637b69774360e11b81529192509063f6d2ee8690611289908890889088908890600401611bd8565b600060405180830381600087803b1580156112a357600080fd5b505af11580156112b7573d6000803e3d6000fd5b50506040516001600160a01b038085169350881691507f46bd56f98e1b14fd35691959270a6e1edf7cb8fcd489e0f9dda89e46c0d1ff0d90600090a350505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60c95460ff161561145957604080513360248083019190915282518083039091018152604490910182526020810180516001600160e01b031663d78bca6960e01b179052905160009182916004600160991b0191611388916113b09190611c23565b6000604051808303818686fa925050503d80600081146113ec576040519150601f19603f3d011682016040523d82523d6000602084013e6113f1565b606091505b509150915081801561141657506000818060200190518101906114149190611c3f565b115b6114565760405162461bcd60e51b81526020600482015260116024820152702224a9a0a62627aba2a22fa9a2a72222a960791b60448201526064016103fe565b50505b60c954610100900460ff161561061057604080513360248083019190915282518083039091018152604490910182526020810180516001600160e01b031663d78bca6960e01b179052905160009182916004600360981b0191611388916114c09190611c23565b6000604051808303818686fa925050503d80600081146114fc576040519150601f19603f3d011682016040523d82523d6000602084013e611501565b606091505b50915091508180156115275750808060200190518101906115229190611c3f565b600114155b6109925760405162461bcd60e51b815260206004820152600e60248201526d212627a1a5a2a22fa9a2a72222a960911b60448201526064016103fe565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b0381166115fb5760405162461bcd60e51b8152602060048201526017602482015276115490cc4c4d8dce8818dc99585d194c8819985a5b1959604a1b60448201526064016103fe565b92915050565b6001600160a01b038116811461068957600080fd5b600080600080600060a0868803121561162e57600080fd5b853561163981611601565b9450602086013561164981611601565b9350604086013561165981611601565b9250606086013561166981611601565b9150608086013561167981611601565b809150509295509295909350565b801515811461068957600080fd5b600080600080600080600080610100898b0312156116b257600080fd5b88356116bd81611601565b975060208901356116cd81611601565b965060408901356116dd81611601565b955060608901356116ed81611601565b945060808901356116fd81611601565b935060a089013561170d81611687565b925060c089013561171d81611687565b915060e089013561172d81611601565b809150509295985092959890939650565b60006020828403121561175057600080fd5b813561175b81611601565b9392505050565b60006020828403121561177457600080fd5b813561175b81611687565b60008060006060848603121561179457600080fd5b833561179f81611601565b925060208401356117af81611601565b929592945050506040919091013590565b600080600080606085870312156117d657600080fd5b8435935060208501356117e881611601565b9250604085013567ffffffffffffffff8082111561180557600080fd5b818701915087601f83011261181957600080fd5b81358181111561182857600080fd5b88602082850101111561183a57600080fd5b95989497505060200194505050565b6000806040838503121561185c57600080fd5b823561186781611601565b946020939093013593505050565b6020808252600a908201526914d654d5115350d0531360b21b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b600080858511156118f757600080fd5b8386111561190457600080fd5b5050820193919092039150565b803560208310156115fb57600019602084900360031b1b1692915050565b60006020828403121561194157600080fd5b815161175b81611601565b60208082526023908201527f4368696c6445524332305072656469636174653a20554e4d41505045445f544f60408201526225a2a760e91b606082015260800190565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b03929092168252602082015260400190565b6000602082840312156119d057600080fd5b815161175b81611687565b60005b838110156119f65781810151838201526020016119de565b50506000910152565b60008151808452611a178160208601602086016119db565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201819052600090611a4f908301846119ff565b949350505050565b60008060008060808587031215611a6d57600080fd5b8435611a7881611601565b93506020850135611a8881611601565b92506040850135611a9881611601565b9396929550929360600135925050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112611acf57600080fd5b813567ffffffffffffffff80821115611aea57611aea611aa8565b604051601f8301601f19908116603f01168101908282118183101715611b1257611b12611aa8565b81604052838152866020858801011115611b2b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a08688031215611b6357600080fd5b853594506020860135611b7581611601565b9350604086013567ffffffffffffffff80821115611b9257600080fd5b611b9e89838a01611abe565b94506060880135915080821115611bb457600080fd5b50611bc188828901611abe565b925050608086013560ff8116811461167957600080fd5b6001600160a01b0385168152608060208201819052600090611bfc908301866119ff565b8281036040840152611c0e81866119ff565b91505060ff8316606083015295945050505050565b60008251611c358184602087016119db565b9190910192915050565b600060208284031215611c5157600080fd5b505191905056fea2646970667358221220cd247ecebcec885e3bec4a56116d63a7b8bf87a8c549ebd4a2d8ffb315fe8a2064736f6c63430008130033","linkReferences":{},"deployedLinkReferences":{}}` +var ChildERC20PredicateACLArtifact string = `{"_format":"hh-sol-artifact-1","contractName":"ChildERC20PredicateAccessList","sourceName":"contracts/child/ChildERC20PredicateAccessList.sol","abi":[{"inputs":[{"internalType":"string","name":"only","type":"string"}],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"AllowListUsageSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"BlockListUsageSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"rootToken","type":"address"},{"indexed":true,"internalType":"address","name":"childToken","type":"address"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"L2ERC20Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"rootToken","type":"address"},{"indexed":true,"internalType":"address","name":"childToken","type":"address"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"L2ERC20Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"rootToken","type":"address"},{"indexed":true,"internalType":"address","name":"childToken","type":"address"}],"name":"L2TokenMapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","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"},{"inputs":[],"name":"ALLOWLIST_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCKLIST_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEPOSIT_SIG","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAP_TOKEN_SIG","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVE_TOKEN_CONTRACT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVE_TRANSFER_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVE_TRANSFER_PRECOMPILE_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"READ_ADDRESSLIST_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SYSTEM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VALIDATOR_PKCHECK_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VALIDATOR_PKCHECK_PRECOMPILE_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WITHDRAW_SIG","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"childTokenTemplate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newL2StateSender","type":"address"},{"internalType":"address","name":"newStateReceiver","type":"address"},{"internalType":"address","name":"newRootERC20Predicate","type":"address"},{"internalType":"address","name":"newChildTokenTemplate","type":"address"},{"internalType":"address","name":"newNativeTokenRootAddress","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newL2StateSender","type":"address"},{"internalType":"address","name":"newStateReceiver","type":"address"},{"internalType":"address","name":"newRootERC20Predicate","type":"address"},{"internalType":"address","name":"newChildTokenTemplate","type":"address"},{"internalType":"address","name":"newNativeTokenRootAddress","type":"address"},{"internalType":"bool","name":"newUseAllowList","type":"bool"},{"internalType":"bool","name":"newUseBlockList","type":"bool"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"l2StateSender","outputs":[{"internalType":"contract IStateSender","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onStateReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rootERC20Predicate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rootTokenToChildToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newUseAllowList","type":"bool"}],"name":"setAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newUseBlockList","type":"bool"}],"name":"setBlockList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stateReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IChildERC20","name":"childToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IChildERC20","name":"childToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTo","outputs":[],"stateMutability":"nonpayable","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b50611c8e806100206000396000f3fe608060405234801561001057600080fd5b506004361061018f5760003560e01c80638da5cb5b116100e4578063c5e4683a11610092578063c5e4683a14610323578063d41f177114610336578063e0563ab11461035d578063e30c397814610366578063eeb4994514610377578063f2fde38b1461038a578063f3fef3a31461039d578063f6451255146103b057600080fd5b80638da5cb5b1461029f578063947287cf146102b057806397e5230d146102b9578063b1768065146102c3578063b68ad1e4146102ea578063c1225a20146102fd578063c3b35a7e1461031057600080fd5b806354f8abad1161014157806354f8abad1461021a57806355b01e4d1461022d5780635ea5df791461023b578063715018a61461025257806371cf93b71461025a57806379ba50971461026d5780637efab4f51461027557600080fd5b806305dc2e8f1461019457806307b3e252146101c45780631459457a146101d25780631bc114ba146101e7578063284017f5146101fa5780633b878c221461020357806351351d531461020c575b600080fd5b60fd546101a7906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101a76004600360981b0181565b6101e56101e0366004611616565b6103d7565b005b60fc546101a7906001600160a01b031681565b6101a761202081565b6101a761101081565b6101a76002600160a01b0381565b6101e5610228366004611695565b6104db565b6101a76004600160991b0181565b61024461138881565b6040519081526020016101bb565b6101e56105fe565b60fe546101a7906001600160a01b031681565b6101e5610612565b6101a761028336600461173e565b610100602052600090815260409020546001600160a01b031681565b6033546001600160a01b03166101a7565b61024461520881565b610244620249f081565b6102447f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e98286981565b60ff546101a7906001600160a01b031681565b6101e561030b366004611762565b61068c565b6101e561031e36600461177f565b6106db565b6101e5610331366004611762565b6106f3565b6102447f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f82181565b6101a761203081565b6065546001600160a01b03166101a7565b6101e56103853660046117c0565b61073a565b6101e561039836600461173e565b61090e565b6101e56103ab366004611849565b61097f565b6102447f2cef46a936bdc5b7e6e8c71aa04560c41cf7d88bb26901a7e7f4936ff02accad81565b336002600160a01b03146104075760405163973d02cb60e01b81526004016103fe90611875565b60405180910390fd5b600054610100900460ff16158080156104275750600054600160ff909116105b806104415750303b158015610441575060005460ff166001145b61045d5760405162461bcd60e51b81526004016103fe90611899565b6000805460ff191660011790558015610480576000805461ff0019166101001790555b61048d8686868686610996565b80156104d3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b336002600160a01b03146105025760405163973d02cb60e01b81526004016103fe90611875565b600054610100900460ff16158080156105225750600054600160ff909116105b8061053c5750303b15801561053c575060005460ff166001145b6105585760405162461bcd60e51b81526004016103fe90611899565b6000805460ff19166001179055801561057b576000805461ff0019166101001790555b6105888989898989610996565b60c9805461ffff191685151561ff00191617610100851515021790556105ad82610ae7565b80156105f3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b610606610b00565b6106106000610ae7565b565b60655433906001600160a01b031681146106805760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016103fe565b61068981610ae7565b50565b610694610b00565b60c9805461ff0019166101008315159081029190911790915560405143907f61d574757cde41a357d030b39b2705796ccd699578037ab9a1cfd8117d82bf8690600090a350565b6106e3610b5a565b6106ee838383610b62565b505050565b6106fb610b00565b60c9805460ff191682151590811790915560405143907fe0a0f0fa52db091cb71c202d80420311430ce1ae2e7794149877b6720ce8bf0b90600090a350565b60fd546001600160a01b031633146107a55760405162461bcd60e51b815260206004820152602860248201527f4368696c6445524332305072656469636174653a204f4e4c595f53544154455f6044820152672922a1a2a4ab22a960c11b60648201526084016103fe565b60fe546001600160a01b038481169116146108135760405162461bcd60e51b815260206004820152602860248201527f4368696c6445524332305072656469636174653a204f4e4c595f524f4f545f50604482015267524544494341544560c01b60648201526084016103fe565b7f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f8216108426020600084866118e7565b61084b91611911565b0361086a5761086561086082602081866118e7565b610ed9565b610908565b7f2cef46a936bdc5b7e6e8c71aa04560c41cf7d88bb26901a7e7f4936ff02accad6108996020600084866118e7565b6108a291611911565b036108b1576108658282611185565b60405162461bcd60e51b815260206004820152602660248201527f4368696c6445524332305072656469636174653a20494e56414c49445f5349476044820152654e415455524560d01b60648201526084016103fe565b50505050565b610916610b00565b606580546001600160a01b0383166001600160a01b031990911681179091556109476033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b610987610b5a565b610992823383610b62565b5050565b6001600160a01b038516158015906109b657506001600160a01b03841615155b80156109ca57506001600160a01b03831615155b80156109de57506001600160a01b03821615155b610a3a5760405162461bcd60e51b815260206004820152602760248201527f4368696c6445524332305072656469636174653a204241445f494e495449414c60448201526624ad20aa24a7a760c91b60648201526084016103fe565b60fc80546001600160a01b03199081166001600160a01b038881169190911790925560fd8054821687841617905560fe8054821686841617905560ff8054909116848316179055811615610ae0576001600160a01b0381166000818152610100602052604080822080546001600160a01b03191661101090811790915590519092917f46bd56f98e1b14fd35691959270a6e1edf7cb8fcd489e0f9dda89e46c0d1ff0d91a35b5050505050565b606580546001600160a01b0319169055610689816112fc565b6033546001600160a01b031633146106105760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103fe565b61061061134e565b826001600160a01b03163b600003610bc65760405162461bcd60e51b815260206004820152602160248201527f4368696c6445524332305072656469636174653a204e4f545f434f4e545241436044820152601560fa1b60648201526084016103fe565b6000836001600160a01b0316631f2d00656040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2a919061192f565b6001600160a01b0381811660009081526101006020526040902054919250858116911614610c6a5760405162461bcd60e51b81526004016103fe9061194c565b6001600160a01b038116610c8057610c8061198f565b306001600160a01b0316846001600160a01b031663e61987056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec919061192f565b6001600160a01b031614610d0257610d0261198f565b604051632770a7eb60e21b81526001600160a01b03851690639dc29fac90610d3090339086906004016119a5565b6020604051808303816000875af1158015610d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7391906119be565b610dbf5760405162461bcd60e51b815260206004820181905260248201527f4368696c6445524332305072656469636174653a204255524e5f4641494c454460448201526064016103fe565b60fc5460fe54604080517f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e98286960208201526001600160a01b0385811682840152336060830152878116608083015260a08083018890528351808403909101815260c08301938490526316f1983160e01b909352938416936316f1983193610e4a9391169160c401611a2b565b600060405180830381600087803b158015610e6457600080fd5b505af1158015610e78573d6000803e3d6000fd5b50505050826001600160a01b0316846001600160a01b0316826001600160a01b03167fa0923f060a16fc784558d43de424ffde7b01643de5e5d335851b9df94c76bb273386604051610ecb9291906119a5565b60405180910390a450505050565b6000808080610eea85870187611a57565b6001600160a01b038085166000908152610100602052604090205494985092965090945092501680610f2e5760405162461bcd60e51b81526004016103fe9061194c565b806001600160a01b03163b600003610f4857610f4861198f565b6000816001600160a01b0316631f2d00656040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fac919061192f565b9050856001600160a01b0316816001600160a01b031614610fcf57610fcf61198f565b6001600160a01b038116610fe557610fe561198f565b306001600160a01b0316826001600160a01b031663e61987056040518163ffffffff1660e01b8152600401602060405180830381865afa15801561102d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611051919061192f565b6001600160a01b0316146110675761106761198f565b6040516340c10f1960e01b81526001600160a01b038316906340c10f199061109590879087906004016119a5565b6020604051808303816000875af11580156110b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d891906119be565b6111245760405162461bcd60e51b815260206004820181905260248201527f4368696c6445524332305072656469636174653a204d494e545f4641494c454460448201526064016103fe565b836001600160a01b0316826001600160a01b0316876001600160a01b03167fdf34f3a3ed8bedc14a4b284ebaee5374d55b64bac6a84c270dabe8fd6b4cdafd88876040516111739291906119a5565b60405180910390a45050505050505050565b600080808061119685870187611b4b565b92975090955093509150506001600160a01b0384166111b7576111b761198f565b6001600160a01b038481166000908152610100602052604090205416156111e0576111e061198f565b60ff546040516bffffffffffffffffffffffff19606087901b166020820152600091611230916001600160a01b039091169060340160405160208183030381529060405280519060200120611564565b6001600160a01b03868116600090815261010060205260409081902080546001600160a01b031916928416928317905551637b69774360e11b81529192509063f6d2ee8690611289908890889088908890600401611bd8565b600060405180830381600087803b1580156112a357600080fd5b505af11580156112b7573d6000803e3d6000fd5b50506040516001600160a01b038085169350881691507f46bd56f98e1b14fd35691959270a6e1edf7cb8fcd489e0f9dda89e46c0d1ff0d90600090a350505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60c95460ff161561145957604080513360248083019190915282518083039091018152604490910182526020810180516001600160e01b031663d78bca6960e01b179052905160009182916004600160991b0191611388916113b09190611c23565b6000604051808303818686fa925050503d80600081146113ec576040519150601f19603f3d011682016040523d82523d6000602084013e6113f1565b606091505b509150915081801561141657506000818060200190518101906114149190611c3f565b115b6114565760405162461bcd60e51b81526020600482015260116024820152702224a9a0a62627aba2a22fa9a2a72222a960791b60448201526064016103fe565b50505b60c954610100900460ff161561061057604080513360248083019190915282518083039091018152604490910182526020810180516001600160e01b031663d78bca6960e01b179052905160009182916004600360981b0191611388916114c09190611c23565b6000604051808303818686fa925050503d80600081146114fc576040519150601f19603f3d011682016040523d82523d6000602084013e611501565b606091505b50915091508180156115275750808060200190518101906115229190611c3f565b600114155b6109925760405162461bcd60e51b815260206004820152600e60248201526d212627a1a5a2a22fa9a2a72222a960911b60448201526064016103fe565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b0381166115fb5760405162461bcd60e51b8152602060048201526017602482015276115490cc4c4d8dce8818dc99585d194c8819985a5b1959604a1b60448201526064016103fe565b92915050565b6001600160a01b038116811461068957600080fd5b600080600080600060a0868803121561162e57600080fd5b853561163981611601565b9450602086013561164981611601565b9350604086013561165981611601565b9250606086013561166981611601565b9150608086013561167981611601565b809150509295509295909350565b801515811461068957600080fd5b600080600080600080600080610100898b0312156116b257600080fd5b88356116bd81611601565b975060208901356116cd81611601565b965060408901356116dd81611601565b955060608901356116ed81611601565b945060808901356116fd81611601565b935060a089013561170d81611687565b925060c089013561171d81611687565b915060e089013561172d81611601565b809150509295985092959890939650565b60006020828403121561175057600080fd5b813561175b81611601565b9392505050565b60006020828403121561177457600080fd5b813561175b81611687565b60008060006060848603121561179457600080fd5b833561179f81611601565b925060208401356117af81611601565b929592945050506040919091013590565b600080600080606085870312156117d657600080fd5b8435935060208501356117e881611601565b9250604085013567ffffffffffffffff8082111561180557600080fd5b818701915087601f83011261181957600080fd5b81358181111561182857600080fd5b88602082850101111561183a57600080fd5b95989497505060200194505050565b6000806040838503121561185c57600080fd5b823561186781611601565b946020939093013593505050565b6020808252600a908201526914d654d5115350d0531360b21b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b600080858511156118f757600080fd5b8386111561190457600080fd5b5050820193919092039150565b803560208310156115fb57600019602084900360031b1b1692915050565b60006020828403121561194157600080fd5b815161175b81611601565b60208082526023908201527f4368696c6445524332305072656469636174653a20554e4d41505045445f544f60408201526225a2a760e91b606082015260800190565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b03929092168252602082015260400190565b6000602082840312156119d057600080fd5b815161175b81611687565b60005b838110156119f65781810151838201526020016119de565b50506000910152565b60008151808452611a178160208601602086016119db565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201819052600090611a4f908301846119ff565b949350505050565b60008060008060808587031215611a6d57600080fd5b8435611a7881611601565b93506020850135611a8881611601565b92506040850135611a9881611601565b9396929550929360600135925050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112611acf57600080fd5b813567ffffffffffffffff80821115611aea57611aea611aa8565b604051601f8301601f19908116603f01168101908282118183101715611b1257611b12611aa8565b81604052838152866020858801011115611b2b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a08688031215611b6357600080fd5b853594506020860135611b7581611601565b9350604086013567ffffffffffffffff80821115611b9257600080fd5b611b9e89838a01611abe565b94506060880135915080821115611bb457600080fd5b50611bc188828901611abe565b925050608086013560ff8116811461167957600080fd5b6001600160a01b0385168152608060208201819052600090611bfc908301866119ff565b8281036040840152611c0e81866119ff565b91505060ff8316606083015295945050505050565b60008251611c358184602087016119db565b9190910192915050565b600060208284031215611c5157600080fd5b505191905056fea2646970667358221220cd247ecebcec885e3bec4a56116d63a7b8bf87a8c549ebd4a2d8ffb315fe8a2064736f6c63430008130033","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061018f5760003560e01c80638da5cb5b116100e4578063c5e4683a11610092578063c5e4683a14610323578063d41f177114610336578063e0563ab11461035d578063e30c397814610366578063eeb4994514610377578063f2fde38b1461038a578063f3fef3a31461039d578063f6451255146103b057600080fd5b80638da5cb5b1461029f578063947287cf146102b057806397e5230d146102b9578063b1768065146102c3578063b68ad1e4146102ea578063c1225a20146102fd578063c3b35a7e1461031057600080fd5b806354f8abad1161014157806354f8abad1461021a57806355b01e4d1461022d5780635ea5df791461023b578063715018a61461025257806371cf93b71461025a57806379ba50971461026d5780637efab4f51461027557600080fd5b806305dc2e8f1461019457806307b3e252146101c45780631459457a146101d25780631bc114ba146101e7578063284017f5146101fa5780633b878c221461020357806351351d531461020c575b600080fd5b60fd546101a7906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101a76004600360981b0181565b6101e56101e0366004611616565b6103d7565b005b60fc546101a7906001600160a01b031681565b6101a761202081565b6101a761101081565b6101a76002600160a01b0381565b6101e5610228366004611695565b6104db565b6101a76004600160991b0181565b61024461138881565b6040519081526020016101bb565b6101e56105fe565b60fe546101a7906001600160a01b031681565b6101e5610612565b6101a761028336600461173e565b610100602052600090815260409020546001600160a01b031681565b6033546001600160a01b03166101a7565b61024461520881565b610244620249f081565b6102447f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e98286981565b60ff546101a7906001600160a01b031681565b6101e561030b366004611762565b61068c565b6101e561031e36600461177f565b6106db565b6101e5610331366004611762565b6106f3565b6102447f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f82181565b6101a761203081565b6065546001600160a01b03166101a7565b6101e56103853660046117c0565b61073a565b6101e561039836600461173e565b61090e565b6101e56103ab366004611849565b61097f565b6102447f2cef46a936bdc5b7e6e8c71aa04560c41cf7d88bb26901a7e7f4936ff02accad81565b336002600160a01b03146104075760405163973d02cb60e01b81526004016103fe90611875565b60405180910390fd5b600054610100900460ff16158080156104275750600054600160ff909116105b806104415750303b158015610441575060005460ff166001145b61045d5760405162461bcd60e51b81526004016103fe90611899565b6000805460ff191660011790558015610480576000805461ff0019166101001790555b61048d8686868686610996565b80156104d3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b336002600160a01b03146105025760405163973d02cb60e01b81526004016103fe90611875565b600054610100900460ff16158080156105225750600054600160ff909116105b8061053c5750303b15801561053c575060005460ff166001145b6105585760405162461bcd60e51b81526004016103fe90611899565b6000805460ff19166001179055801561057b576000805461ff0019166101001790555b6105888989898989610996565b60c9805461ffff191685151561ff00191617610100851515021790556105ad82610ae7565b80156105f3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b610606610b00565b6106106000610ae7565b565b60655433906001600160a01b031681146106805760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016103fe565b61068981610ae7565b50565b610694610b00565b60c9805461ff0019166101008315159081029190911790915560405143907f61d574757cde41a357d030b39b2705796ccd699578037ab9a1cfd8117d82bf8690600090a350565b6106e3610b5a565b6106ee838383610b62565b505050565b6106fb610b00565b60c9805460ff191682151590811790915560405143907fe0a0f0fa52db091cb71c202d80420311430ce1ae2e7794149877b6720ce8bf0b90600090a350565b60fd546001600160a01b031633146107a55760405162461bcd60e51b815260206004820152602860248201527f4368696c6445524332305072656469636174653a204f4e4c595f53544154455f6044820152672922a1a2a4ab22a960c11b60648201526084016103fe565b60fe546001600160a01b038481169116146108135760405162461bcd60e51b815260206004820152602860248201527f4368696c6445524332305072656469636174653a204f4e4c595f524f4f545f50604482015267524544494341544560c01b60648201526084016103fe565b7f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f8216108426020600084866118e7565b61084b91611911565b0361086a5761086561086082602081866118e7565b610ed9565b610908565b7f2cef46a936bdc5b7e6e8c71aa04560c41cf7d88bb26901a7e7f4936ff02accad6108996020600084866118e7565b6108a291611911565b036108b1576108658282611185565b60405162461bcd60e51b815260206004820152602660248201527f4368696c6445524332305072656469636174653a20494e56414c49445f5349476044820152654e415455524560d01b60648201526084016103fe565b50505050565b610916610b00565b606580546001600160a01b0383166001600160a01b031990911681179091556109476033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b610987610b5a565b610992823383610b62565b5050565b6001600160a01b038516158015906109b657506001600160a01b03841615155b80156109ca57506001600160a01b03831615155b80156109de57506001600160a01b03821615155b610a3a5760405162461bcd60e51b815260206004820152602760248201527f4368696c6445524332305072656469636174653a204241445f494e495449414c60448201526624ad20aa24a7a760c91b60648201526084016103fe565b60fc80546001600160a01b03199081166001600160a01b038881169190911790925560fd8054821687841617905560fe8054821686841617905560ff8054909116848316179055811615610ae0576001600160a01b0381166000818152610100602052604080822080546001600160a01b03191661101090811790915590519092917f46bd56f98e1b14fd35691959270a6e1edf7cb8fcd489e0f9dda89e46c0d1ff0d91a35b5050505050565b606580546001600160a01b0319169055610689816112fc565b6033546001600160a01b031633146106105760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103fe565b61061061134e565b826001600160a01b03163b600003610bc65760405162461bcd60e51b815260206004820152602160248201527f4368696c6445524332305072656469636174653a204e4f545f434f4e545241436044820152601560fa1b60648201526084016103fe565b6000836001600160a01b0316631f2d00656040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2a919061192f565b6001600160a01b0381811660009081526101006020526040902054919250858116911614610c6a5760405162461bcd60e51b81526004016103fe9061194c565b6001600160a01b038116610c8057610c8061198f565b306001600160a01b0316846001600160a01b031663e61987056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec919061192f565b6001600160a01b031614610d0257610d0261198f565b604051632770a7eb60e21b81526001600160a01b03851690639dc29fac90610d3090339086906004016119a5565b6020604051808303816000875af1158015610d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7391906119be565b610dbf5760405162461bcd60e51b815260206004820181905260248201527f4368696c6445524332305072656469636174653a204255524e5f4641494c454460448201526064016103fe565b60fc5460fe54604080517f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e98286960208201526001600160a01b0385811682840152336060830152878116608083015260a08083018890528351808403909101815260c08301938490526316f1983160e01b909352938416936316f1983193610e4a9391169160c401611a2b565b600060405180830381600087803b158015610e6457600080fd5b505af1158015610e78573d6000803e3d6000fd5b50505050826001600160a01b0316846001600160a01b0316826001600160a01b03167fa0923f060a16fc784558d43de424ffde7b01643de5e5d335851b9df94c76bb273386604051610ecb9291906119a5565b60405180910390a450505050565b6000808080610eea85870187611a57565b6001600160a01b038085166000908152610100602052604090205494985092965090945092501680610f2e5760405162461bcd60e51b81526004016103fe9061194c565b806001600160a01b03163b600003610f4857610f4861198f565b6000816001600160a01b0316631f2d00656040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fac919061192f565b9050856001600160a01b0316816001600160a01b031614610fcf57610fcf61198f565b6001600160a01b038116610fe557610fe561198f565b306001600160a01b0316826001600160a01b031663e61987056040518163ffffffff1660e01b8152600401602060405180830381865afa15801561102d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611051919061192f565b6001600160a01b0316146110675761106761198f565b6040516340c10f1960e01b81526001600160a01b038316906340c10f199061109590879087906004016119a5565b6020604051808303816000875af11580156110b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d891906119be565b6111245760405162461bcd60e51b815260206004820181905260248201527f4368696c6445524332305072656469636174653a204d494e545f4641494c454460448201526064016103fe565b836001600160a01b0316826001600160a01b0316876001600160a01b03167fdf34f3a3ed8bedc14a4b284ebaee5374d55b64bac6a84c270dabe8fd6b4cdafd88876040516111739291906119a5565b60405180910390a45050505050505050565b600080808061119685870187611b4b565b92975090955093509150506001600160a01b0384166111b7576111b761198f565b6001600160a01b038481166000908152610100602052604090205416156111e0576111e061198f565b60ff546040516bffffffffffffffffffffffff19606087901b166020820152600091611230916001600160a01b039091169060340160405160208183030381529060405280519060200120611564565b6001600160a01b03868116600090815261010060205260409081902080546001600160a01b031916928416928317905551637b69774360e11b81529192509063f6d2ee8690611289908890889088908890600401611bd8565b600060405180830381600087803b1580156112a357600080fd5b505af11580156112b7573d6000803e3d6000fd5b50506040516001600160a01b038085169350881691507f46bd56f98e1b14fd35691959270a6e1edf7cb8fcd489e0f9dda89e46c0d1ff0d90600090a350505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60c95460ff161561145957604080513360248083019190915282518083039091018152604490910182526020810180516001600160e01b031663d78bca6960e01b179052905160009182916004600160991b0191611388916113b09190611c23565b6000604051808303818686fa925050503d80600081146113ec576040519150601f19603f3d011682016040523d82523d6000602084013e6113f1565b606091505b509150915081801561141657506000818060200190518101906114149190611c3f565b115b6114565760405162461bcd60e51b81526020600482015260116024820152702224a9a0a62627aba2a22fa9a2a72222a960791b60448201526064016103fe565b50505b60c954610100900460ff161561061057604080513360248083019190915282518083039091018152604490910182526020810180516001600160e01b031663d78bca6960e01b179052905160009182916004600360981b0191611388916114c09190611c23565b6000604051808303818686fa925050503d80600081146114fc576040519150601f19603f3d011682016040523d82523d6000602084013e611501565b606091505b50915091508180156115275750808060200190518101906115229190611c3f565b600114155b6109925760405162461bcd60e51b815260206004820152600e60248201526d212627a1a5a2a22fa9a2a72222a960911b60448201526064016103fe565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b0381166115fb5760405162461bcd60e51b8152602060048201526017602482015276115490cc4c4d8dce8818dc99585d194c8819985a5b1959604a1b60448201526064016103fe565b92915050565b6001600160a01b038116811461068957600080fd5b600080600080600060a0868803121561162e57600080fd5b853561163981611601565b9450602086013561164981611601565b9350604086013561165981611601565b9250606086013561166981611601565b9150608086013561167981611601565b809150509295509295909350565b801515811461068957600080fd5b600080600080600080600080610100898b0312156116b257600080fd5b88356116bd81611601565b975060208901356116cd81611601565b965060408901356116dd81611601565b955060608901356116ed81611601565b945060808901356116fd81611601565b935060a089013561170d81611687565b925060c089013561171d81611687565b915060e089013561172d81611601565b809150509295985092959890939650565b60006020828403121561175057600080fd5b813561175b81611601565b9392505050565b60006020828403121561177457600080fd5b813561175b81611687565b60008060006060848603121561179457600080fd5b833561179f81611601565b925060208401356117af81611601565b929592945050506040919091013590565b600080600080606085870312156117d657600080fd5b8435935060208501356117e881611601565b9250604085013567ffffffffffffffff8082111561180557600080fd5b818701915087601f83011261181957600080fd5b81358181111561182857600080fd5b88602082850101111561183a57600080fd5b95989497505060200194505050565b6000806040838503121561185c57600080fd5b823561186781611601565b946020939093013593505050565b6020808252600a908201526914d654d5115350d0531360b21b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b600080858511156118f757600080fd5b8386111561190457600080fd5b5050820193919092039150565b803560208310156115fb57600019602084900360031b1b1692915050565b60006020828403121561194157600080fd5b815161175b81611601565b60208082526023908201527f4368696c6445524332305072656469636174653a20554e4d41505045445f544f60408201526225a2a760e91b606082015260800190565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b03929092168252602082015260400190565b6000602082840312156119d057600080fd5b815161175b81611687565b60005b838110156119f65781810151838201526020016119de565b50506000910152565b60008151808452611a178160208601602086016119db565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201819052600090611a4f908301846119ff565b949350505050565b60008060008060808587031215611a6d57600080fd5b8435611a7881611601565b93506020850135611a8881611601565b92506040850135611a9881611601565b9396929550929360600135925050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112611acf57600080fd5b813567ffffffffffffffff80821115611aea57611aea611aa8565b604051601f8301601f19908116603f01168101908282118183101715611b1257611b12611aa8565b81604052838152866020858801011115611b2b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a08688031215611b6357600080fd5b853594506020860135611b7581611601565b9350604086013567ffffffffffffffff80821115611b9257600080fd5b611b9e89838a01611abe565b94506060880135915080821115611bb457600080fd5b50611bc188828901611abe565b925050608086013560ff8116811461167957600080fd5b6001600160a01b0385168152608060208201819052600090611bfc908301866119ff565b8281036040840152611c0e81866119ff565b91505060ff8316606083015295945050505050565b60008251611c358184602087016119db565b9190910192915050565b600060208284031215611c5157600080fd5b505191905056fea2646970667358221220cd247ecebcec885e3bec4a56116d63a7b8bf87a8c549ebd4a2d8ffb315fe8a2064736f6c63430008130033","linkReferences":{},"deployedLinkReferences":{}}` var RootMintableERC20PredicateArtifact string = `{"_format":"hh-sol-artifact-1","contractName":"RootMintableERC20Predicate","sourceName":"contracts/child/RootMintableERC20Predicate.sol","abi":[{"inputs":[{"internalType":"string","name":"only","type":"string"}],"name":"Unauthorized","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":"rootToken","type":"address"},{"indexed":true,"internalType":"address","name":"childToken","type":"address"},{"indexed":false,"internalType":"address","name":"depositor","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"L2MintableERC20Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"rootToken","type":"address"},{"indexed":true,"internalType":"address","name":"childToken","type":"address"},{"indexed":false,"internalType":"address","name":"withdrawer","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"L2MintableERC20Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"rootToken","type":"address"},{"indexed":true,"internalType":"address","name":"childToken","type":"address"}],"name":"L2MintableTokenMapped","type":"event"},{"inputs":[],"name":"ALLOWLIST_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCKLIST_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEPOSIT_SIG","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAP_TOKEN_SIG","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVE_TOKEN_CONTRACT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVE_TRANSFER_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVE_TRANSFER_PRECOMPILE_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"READ_ADDRESSLIST_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SYSTEM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VALIDATOR_PKCHECK_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VALIDATOR_PKCHECK_PRECOMPILE_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WITHDRAW_SIG","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"childERC20Predicate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"childTokenTemplate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20Metadata","name":"rootToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20Metadata","name":"rootToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newL2StateSender","type":"address"},{"internalType":"address","name":"newStateReceiver","type":"address"},{"internalType":"address","name":"newChildERC20Predicate","type":"address"},{"internalType":"address","name":"newChildTokenTemplate","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"l2StateSender","outputs":[{"internalType":"contract IStateSender","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20Metadata","name":"rootToken","type":"address"}],"name":"mapToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onStateReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rootTokenToChildToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stateReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b5061149f806100206000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806397e5230d116100b8578063e0563ab11161007c578063e0563ab1146102a2578063eeb49945146102ab578063f213159c146102be578063f4a120f7146102d1578063f6451255146102e4578063f8c8765e1461030b57600080fd5b806397e5230d14610224578063b17680651461022e578063b68ad1e414610255578063d41f177114610268578063d57184e41461028f57600080fd5b806347e7ef241161010a57806347e7ef24146101aa57806351351d53146101bf57806355b01e4d146101cd5780635ea5df79146101db5780637efab4f5146101f2578063947287cf1461021b57600080fd5b806305dc2e8f1461014757806307b3e252146101775780631bc114ba14610185578063284017f5146101985780633b878c22146101a1575b600080fd5b60345461015a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61015a6004600360981b0181565b60335461015a906001600160a01b031681565b61015a61202081565b61015a61101081565b6101bd6101b8366004611038565b61031e565b005b61015a6002600160a01b0381565b61015a6004600160991b0181565b6101e461138881565b60405190815260200161016e565b61015a610200366004611064565b6037602052600090815260409020546001600160a01b031681565b6101e461520881565b6101e4620249f081565b6101e47f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e98286981565b60365461015a906001600160a01b031681565b6101e47f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f82181565b60355461015a906001600160a01b031681565b61015a61203081565b6101bd6102b9366004611088565b61032d565b6101bd6102cc366004611111565b6104d5565b61015a6102df366004611064565b6104e5565b6101e47f2cef46a936bdc5b7e6e8c71aa04560c41cf7d88bb26901a7e7f4936ff02accad81565b6101bd610319366004611152565b6108b1565b610329823383610a0e565b5050565b6034546001600160a01b031633146103a45760405162461bcd60e51b815260206004820152602f60248201527f526f6f744d696e7461626c6545524332305072656469636174653a204f4e4c5960448201526e2fa9aa20aa22afa922a1a2a4ab22a960891b60648201526084015b60405180910390fd5b6035546001600160a01b0384811691161461041a5760405162461bcd60e51b815260206004820152603060248201527f526f6f744d696e7461626c6545524332305072656469636174653a204f4e4c5960448201526f5f4348494c445f50524544494341544560801b606482015260840161039b565b7f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e9828696104496020600084866111ae565b610452916111d8565b036104715761046c61046782602081866111ae565b610b7e565b6104cf565b60405162461bcd60e51b815260206004820152602d60248201527f526f6f744d696e7461626c6545524332305072656469636174653a20494e564160448201526c4c49445f5349474e415455524560981b606482015260840161039b565b50505050565b6104e0838383610a0e565b505050565b60006001600160a01b03821661054f5760405162461bcd60e51b815260206004820152602960248201527f526f6f744d696e7461626c6545524332305072656469636174653a20494e56416044820152682624a22faa27a5a2a760b91b606482015260840161039b565b6001600160a01b0382811660009081526037602052604090205416156105ca5760405162461bcd60e51b815260206004820152602a60248201527f526f6f744d696e7461626c6545524332305072656469636174653a20414c524560448201526910511657d3505414115160b21b606482015260840161039b565b6035546036546040516bffffffffffffffffffffffff19606086901b1660208201526001600160a01b039283169260009261067892911690603401604051602081830303815290604052805190602001208460405160388101919091526f5af43d82803e903d91602b57fd5bf3ff60248201526014810192909252733d602d80600a3d3981f3363d3d373d3d3d363d73825260588201526037600c8201206078820152605560439091012090565b6001600160a01b0385811660008181526037602052604080822080546001600160a01b03191686861617905560335481516306fdde0360e01b81529151959650909316936316f198319387937f2cef46a936bdc5b7e6e8c71aa04560c41cf7d88bb26901a7e7f4936ff02accad938b9391926306fdde0392600480830193928290030181865afa158015610710573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107389190810190611231565b896001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610776573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261079e9190810190611231565b8a6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080091906112d3565b604051602001610814959493929190611322565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610840929190611374565b600060405180830381600087803b15801561085a57600080fd5b505af115801561086e573d6000803e3d6000fd5b50506040516001600160a01b038085169350871691507fb96a191bae4e25ffdff7f4136994eb0dec75d263750a07c035202c348c9515f090600090a39392505050565b336002600160a01b03146108f55760405163973d02cb60e01b815260206004820152600a60248201526914d654d5115350d0531360b21b604482015260640161039b565b600054610100900460ff16158080156109155750600054600160ff909116105b8061092f5750303b15801561092f575060005460ff166001145b6109925760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161039b565b6000805460ff1916600117905580156109b5576000805461ff0019166101001790555b6109c185858585610c36565b8015610a07576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6001600160a01b038084166000908152603760205260409020541680610a3a57610a37846104e5565b90505b6001600160a01b038116610a5057610a50611398565b610a656001600160a01b038516333085610d31565b603354603554604080517f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f82160208201526001600160a01b0388811682840152336060830152878116608083015260a08083018890528351808403909101815260c08301938490526316f1983160e01b909352938416936316f1983193610af09391169160c401611374565b600060405180830381600087803b158015610b0a57600080fd5b505af1158015610b1e573d6000803e3d6000fd5b50505050826001600160a01b0316816001600160a01b0316856001600160a01b03167f1666a3f7b8a7494f2ebcebe646a5187ae55b1db3a068097377d90cd64a258ce93386604051610b719291906113ae565b60405180910390a46104cf565b6000808080610b8f858701876113c7565b6001600160a01b0380851660009081526037602052604090205494985092965090945092501680610bc257610bc2611398565b610bd66001600160a01b0386168484610d9c565b826001600160a01b0316816001600160a01b0316866001600160a01b03167fb9f935478aae5b1da868de596dafe0a2b41eeb61311fdd60c6dbbe46a1debee88786604051610c259291906113ae565b60405180910390a450505050505050565b6001600160a01b03841615801590610c5657506001600160a01b03831615155b8015610c6a57506001600160a01b03821615155b8015610c7e57506001600160a01b03811615155b610ce15760405162461bcd60e51b815260206004820152602e60248201527f526f6f744d696e7461626c6545524332305072656469636174653a204241445f60448201526d24a724aa24a0a624ad20aa24a7a760911b606482015260840161039b565b603380546001600160a01b039586166001600160a01b0319918216179091556034805494861694821694909417909355603580549285169284169290921790915560368054919093169116179055565b6040516001600160a01b03808516602483015283166044820152606481018290526104cf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610dbb565b6104e08363a9059cbb60e01b8484604051602401610d659291906113ae565b6000610e10826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610e909092919063ffffffff16565b9050805160001480610e31575080806020019051810190610e319190611418565b6104e05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161039b565b6060610e9f8484600085610ea7565b949350505050565b606082471015610f085760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161039b565b600080866001600160a01b03168587604051610f24919061143a565b60006040518083038185875af1925050503d8060008114610f61576040519150601f19603f3d011682016040523d82523d6000602084013e610f66565b606091505b5091509150610f7787838387610f82565b979650505050505050565b60608315610ff1578251600003610fea576001600160a01b0385163b610fea5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161039b565b5081610e9f565b610e9f83838151156110065781518083602001fd5b8060405162461bcd60e51b815260040161039b9190611456565b6001600160a01b038116811461103557600080fd5b50565b6000806040838503121561104b57600080fd5b823561105681611020565b946020939093013593505050565b60006020828403121561107657600080fd5b813561108181611020565b9392505050565b6000806000806060858703121561109e57600080fd5b8435935060208501356110b081611020565b9250604085013567ffffffffffffffff808211156110cd57600080fd5b818701915087601f8301126110e157600080fd5b8135818111156110f057600080fd5b88602082850101111561110257600080fd5b95989497505060200194505050565b60008060006060848603121561112657600080fd5b833561113181611020565b9250602084013561114181611020565b929592945050506040919091013590565b6000806000806080858703121561116857600080fd5b843561117381611020565b9350602085013561118381611020565b9250604085013561119381611020565b915060608501356111a381611020565b939692955090935050565b600080858511156111be57600080fd5b838611156111cb57600080fd5b5050820193919092039150565b803560208310156111f157600019602084900360031b1b165b92915050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015611228578181015183820152602001611210565b50506000910152565b60006020828403121561124357600080fd5b815167ffffffffffffffff8082111561125b57600080fd5b818401915084601f83011261126f57600080fd5b815181811115611281576112816111f7565b604051601f8201601f19908116603f011681019083821181831017156112a9576112a96111f7565b816040528281528760208487010111156112c257600080fd5b610f7783602083016020880161120d565b6000602082840312156112e557600080fd5b815160ff8116811461108157600080fd5b6000815180845261130e81602086016020860161120d565b601f01601f19169290920160200192915050565b8581526001600160a01b038516602082015260a06040820181905260009061134c908301866112f6565b828103606084015261135e81866112f6565b91505060ff831660808301529695505050505050565b6001600160a01b0383168152604060208201819052600090610e9f908301846112f6565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b03929092168252602082015260400190565b600080600080608085870312156113dd57600080fd5b84356113e881611020565b935060208501356113f881611020565b9250604085013561140881611020565b9396929550929360600135925050565b60006020828403121561142a57600080fd5b8151801515811461108157600080fd5b6000825161144c81846020870161120d565b9190910192915050565b60208152600061108160208301846112f656fea264697066735822122084ec8ad36f0d03abcfc5bde4447836ff970764edfea496ff308f22046530682b64736f6c63430008130033","deployedBytecode":"0x608060405234801561001057600080fd5b50600436106101425760003560e01c806397e5230d116100b8578063e0563ab11161007c578063e0563ab1146102a2578063eeb49945146102ab578063f213159c146102be578063f4a120f7146102d1578063f6451255146102e4578063f8c8765e1461030b57600080fd5b806397e5230d14610224578063b17680651461022e578063b68ad1e414610255578063d41f177114610268578063d57184e41461028f57600080fd5b806347e7ef241161010a57806347e7ef24146101aa57806351351d53146101bf57806355b01e4d146101cd5780635ea5df79146101db5780637efab4f5146101f2578063947287cf1461021b57600080fd5b806305dc2e8f1461014757806307b3e252146101775780631bc114ba14610185578063284017f5146101985780633b878c22146101a1575b600080fd5b60345461015a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61015a6004600360981b0181565b60335461015a906001600160a01b031681565b61015a61202081565b61015a61101081565b6101bd6101b8366004611038565b61031e565b005b61015a6002600160a01b0381565b61015a6004600160991b0181565b6101e461138881565b60405190815260200161016e565b61015a610200366004611064565b6037602052600090815260409020546001600160a01b031681565b6101e461520881565b6101e4620249f081565b6101e47f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e98286981565b60365461015a906001600160a01b031681565b6101e47f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f82181565b60355461015a906001600160a01b031681565b61015a61203081565b6101bd6102b9366004611088565b61032d565b6101bd6102cc366004611111565b6104d5565b61015a6102df366004611064565b6104e5565b6101e47f2cef46a936bdc5b7e6e8c71aa04560c41cf7d88bb26901a7e7f4936ff02accad81565b6101bd610319366004611152565b6108b1565b610329823383610a0e565b5050565b6034546001600160a01b031633146103a45760405162461bcd60e51b815260206004820152602f60248201527f526f6f744d696e7461626c6545524332305072656469636174653a204f4e4c5960448201526e2fa9aa20aa22afa922a1a2a4ab22a960891b60648201526084015b60405180910390fd5b6035546001600160a01b0384811691161461041a5760405162461bcd60e51b815260206004820152603060248201527f526f6f744d696e7461626c6545524332305072656469636174653a204f4e4c5960448201526f5f4348494c445f50524544494341544560801b606482015260840161039b565b7f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e9828696104496020600084866111ae565b610452916111d8565b036104715761046c61046782602081866111ae565b610b7e565b6104cf565b60405162461bcd60e51b815260206004820152602d60248201527f526f6f744d696e7461626c6545524332305072656469636174653a20494e564160448201526c4c49445f5349474e415455524560981b606482015260840161039b565b50505050565b6104e0838383610a0e565b505050565b60006001600160a01b03821661054f5760405162461bcd60e51b815260206004820152602960248201527f526f6f744d696e7461626c6545524332305072656469636174653a20494e56416044820152682624a22faa27a5a2a760b91b606482015260840161039b565b6001600160a01b0382811660009081526037602052604090205416156105ca5760405162461bcd60e51b815260206004820152602a60248201527f526f6f744d696e7461626c6545524332305072656469636174653a20414c524560448201526910511657d3505414115160b21b606482015260840161039b565b6035546036546040516bffffffffffffffffffffffff19606086901b1660208201526001600160a01b039283169260009261067892911690603401604051602081830303815290604052805190602001208460405160388101919091526f5af43d82803e903d91602b57fd5bf3ff60248201526014810192909252733d602d80600a3d3981f3363d3d373d3d3d363d73825260588201526037600c8201206078820152605560439091012090565b6001600160a01b0385811660008181526037602052604080822080546001600160a01b03191686861617905560335481516306fdde0360e01b81529151959650909316936316f198319387937f2cef46a936bdc5b7e6e8c71aa04560c41cf7d88bb26901a7e7f4936ff02accad938b9391926306fdde0392600480830193928290030181865afa158015610710573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107389190810190611231565b896001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610776573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261079e9190810190611231565b8a6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080091906112d3565b604051602001610814959493929190611322565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610840929190611374565b600060405180830381600087803b15801561085a57600080fd5b505af115801561086e573d6000803e3d6000fd5b50506040516001600160a01b038085169350871691507fb96a191bae4e25ffdff7f4136994eb0dec75d263750a07c035202c348c9515f090600090a39392505050565b336002600160a01b03146108f55760405163973d02cb60e01b815260206004820152600a60248201526914d654d5115350d0531360b21b604482015260640161039b565b600054610100900460ff16158080156109155750600054600160ff909116105b8061092f5750303b15801561092f575060005460ff166001145b6109925760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161039b565b6000805460ff1916600117905580156109b5576000805461ff0019166101001790555b6109c185858585610c36565b8015610a07576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6001600160a01b038084166000908152603760205260409020541680610a3a57610a37846104e5565b90505b6001600160a01b038116610a5057610a50611398565b610a656001600160a01b038516333085610d31565b603354603554604080517f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f82160208201526001600160a01b0388811682840152336060830152878116608083015260a08083018890528351808403909101815260c08301938490526316f1983160e01b909352938416936316f1983193610af09391169160c401611374565b600060405180830381600087803b158015610b0a57600080fd5b505af1158015610b1e573d6000803e3d6000fd5b50505050826001600160a01b0316816001600160a01b0316856001600160a01b03167f1666a3f7b8a7494f2ebcebe646a5187ae55b1db3a068097377d90cd64a258ce93386604051610b719291906113ae565b60405180910390a46104cf565b6000808080610b8f858701876113c7565b6001600160a01b0380851660009081526037602052604090205494985092965090945092501680610bc257610bc2611398565b610bd66001600160a01b0386168484610d9c565b826001600160a01b0316816001600160a01b0316866001600160a01b03167fb9f935478aae5b1da868de596dafe0a2b41eeb61311fdd60c6dbbe46a1debee88786604051610c259291906113ae565b60405180910390a450505050505050565b6001600160a01b03841615801590610c5657506001600160a01b03831615155b8015610c6a57506001600160a01b03821615155b8015610c7e57506001600160a01b03811615155b610ce15760405162461bcd60e51b815260206004820152602e60248201527f526f6f744d696e7461626c6545524332305072656469636174653a204241445f60448201526d24a724aa24a0a624ad20aa24a7a760911b606482015260840161039b565b603380546001600160a01b039586166001600160a01b0319918216179091556034805494861694821694909417909355603580549285169284169290921790915560368054919093169116179055565b6040516001600160a01b03808516602483015283166044820152606481018290526104cf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610dbb565b6104e08363a9059cbb60e01b8484604051602401610d659291906113ae565b6000610e10826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610e909092919063ffffffff16565b9050805160001480610e31575080806020019051810190610e319190611418565b6104e05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161039b565b6060610e9f8484600085610ea7565b949350505050565b606082471015610f085760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161039b565b600080866001600160a01b03168587604051610f24919061143a565b60006040518083038185875af1925050503d8060008114610f61576040519150601f19603f3d011682016040523d82523d6000602084013e610f66565b606091505b5091509150610f7787838387610f82565b979650505050505050565b60608315610ff1578251600003610fea576001600160a01b0385163b610fea5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161039b565b5081610e9f565b610e9f83838151156110065781518083602001fd5b8060405162461bcd60e51b815260040161039b9190611456565b6001600160a01b038116811461103557600080fd5b50565b6000806040838503121561104b57600080fd5b823561105681611020565b946020939093013593505050565b60006020828403121561107657600080fd5b813561108181611020565b9392505050565b6000806000806060858703121561109e57600080fd5b8435935060208501356110b081611020565b9250604085013567ffffffffffffffff808211156110cd57600080fd5b818701915087601f8301126110e157600080fd5b8135818111156110f057600080fd5b88602082850101111561110257600080fd5b95989497505060200194505050565b60008060006060848603121561112657600080fd5b833561113181611020565b9250602084013561114181611020565b929592945050506040919091013590565b6000806000806080858703121561116857600080fd5b843561117381611020565b9350602085013561118381611020565b9250604085013561119381611020565b915060608501356111a381611020565b939692955090935050565b600080858511156111be57600080fd5b838611156111cb57600080fd5b5050820193919092039150565b803560208310156111f157600019602084900360031b1b165b92915050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015611228578181015183820152602001611210565b50506000910152565b60006020828403121561124357600080fd5b815167ffffffffffffffff8082111561125b57600080fd5b818401915084601f83011261126f57600080fd5b815181811115611281576112816111f7565b604051601f8201601f19908116603f011681019083821181831017156112a9576112a96111f7565b816040528281528760208487010111156112c257600080fd5b610f7783602083016020880161120d565b6000602082840312156112e557600080fd5b815160ff8116811461108157600080fd5b6000815180845261130e81602086016020860161120d565b601f01601f19169290920160200192915050565b8581526001600160a01b038516602082015260a06040820181905260009061134c908301866112f6565b828103606084015261135e81866112f6565b91505060ff831660808301529695505050505050565b6001600160a01b0383168152604060208201819052600090610e9f908301846112f6565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b03929092168252602082015260400190565b600080600080608085870312156113dd57600080fd5b84356113e881611020565b935060208501356113f881611020565b9250604085013561140881611020565b9396929550929360600135925050565b60006020828403121561142a57600080fd5b8151801515811461108157600080fd5b6000825161144c81846020870161120d565b9190910192915050565b60208152600061108160208301846112f656fea264697066735822122084ec8ad36f0d03abcfc5bde4447836ff970764edfea496ff308f22046530682b64736f6c63430008130033","linkReferences":{},"deployedLinkReferences":{}}` var RootMintableERC20PredicateACLArtifact string = `{"_format":"hh-sol-artifact-1","contractName":"RootMintableERC20PredicateAccessList","sourceName":"contracts/child/RootMintableERC20PredicateAccessList.sol","abi":[{"inputs":[{"internalType":"string","name":"only","type":"string"}],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"AllowListUsageSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"BlockListUsageSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"rootToken","type":"address"},{"indexed":true,"internalType":"address","name":"childToken","type":"address"},{"indexed":false,"internalType":"address","name":"depositor","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"L2MintableERC20Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"rootToken","type":"address"},{"indexed":true,"internalType":"address","name":"childToken","type":"address"},{"indexed":false,"internalType":"address","name":"withdrawer","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"L2MintableERC20Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"rootToken","type":"address"},{"indexed":true,"internalType":"address","name":"childToken","type":"address"}],"name":"L2MintableTokenMapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","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"},{"inputs":[],"name":"ALLOWLIST_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCKLIST_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEPOSIT_SIG","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAP_TOKEN_SIG","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVE_TOKEN_CONTRACT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVE_TRANSFER_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVE_TRANSFER_PRECOMPILE_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"READ_ADDRESSLIST_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SYSTEM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VALIDATOR_PKCHECK_PRECOMPILE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VALIDATOR_PKCHECK_PRECOMPILE_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WITHDRAW_SIG","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"childERC20Predicate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"childTokenTemplate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20Metadata","name":"rootToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20Metadata","name":"rootToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newL2StateSender","type":"address"},{"internalType":"address","name":"newStateReceiver","type":"address"},{"internalType":"address","name":"newChildERC20Predicate","type":"address"},{"internalType":"address","name":"newChildTokenTemplate","type":"address"},{"internalType":"bool","name":"newUseAllowList","type":"bool"},{"internalType":"bool","name":"newUseBlockList","type":"bool"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newL2StateSender","type":"address"},{"internalType":"address","name":"newStateReceiver","type":"address"},{"internalType":"address","name":"newChildERC20Predicate","type":"address"},{"internalType":"address","name":"newChildTokenTemplate","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"l2StateSender","outputs":[{"internalType":"contract IStateSender","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20Metadata","name":"rootToken","type":"address"}],"name":"mapToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onStateReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rootTokenToChildToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newUseAllowList","type":"bool"}],"name":"setAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newUseBlockList","type":"bool"}],"name":"setBlockList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stateReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b50611bfb806100206000396000f3fe608060405234801561001057600080fd5b506004361061019a5760003560e01c8063b1768065116100e4578063e0563ab111610092578063e0563ab114610355578063e30c39781461035e578063eeb499451461036f578063f213159c14610382578063f2fde38b14610395578063f4a120f7146103a8578063f6451255146103bb578063f8c8765e146103e257600080fd5b8063b1768065146102a8578063b68ad1e4146102cf578063c1225a20146102e2578063c5e4683a146102f5578063d41f177114610308578063d57184e41461032f578063d8dd17731461034257600080fd5b806355b01e4d1161014c57806355b01e4d146102255780635ea5df7914610233578063715018a61461024a57806379ba5097146102525780637efab4f51461025a5780638da5cb5b14610284578063947287cf1461029557806397e5230d1461029e57600080fd5b806305dc2e8f1461019f57806307b3e252146101cf5780631bc114ba146101dd578063284017f5146101f05780633b878c22146101f957806347e7ef241461020257806351351d5314610217575b600080fd5b60fd546101b2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101b26004600360981b0181565b60fc546101b2906001600160a01b031681565b6101b261202081565b6101b261101081565b61021561021036600461164d565b6103f5565b005b6101b26002600160a01b0381565b6101b26004600160991b0181565b61023c61138881565b6040519081526020016101c6565b610215610404565b610215610418565b6101b2610268366004611679565b610100602052600090815260409020546001600160a01b031681565b6033546001600160a01b03166101b2565b61023c61520881565b61023c620249f081565b61023c7f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e98286981565b60ff546101b2906001600160a01b031681565b6102156102f03660046116ab565b610497565b6102156103033660046116ab565b6104e6565b61023c7f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f82181565b60fe546101b2906001600160a01b031681565b6102156103503660046116c8565b61052d565b6101b261203081565b6065546001600160a01b03166101b2565b61021561037d36600461175e565b61064e565b6102156103903660046117e7565b6107f1565b6102156103a3366004611679565b610801565b6101b26103b6366004611679565b610872565b61023c7f2cef46a936bdc5b7e6e8c71aa04560c41cf7d88bb26901a7e7f4936ff02accad81565b6102156103f0366004611828565b610c40565b610400823383610d39565b5050565b61040c610eb2565b6104166000610f0c565b565b60655433906001600160a01b0316811461048b5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084015b60405180910390fd5b61049481610f0c565b50565b61049f610eb2565b60c9805461ff0019166101008315159081029190911790915560405143907f61d574757cde41a357d030b39b2705796ccd699578037ab9a1cfd8117d82bf8690600090a350565b6104ee610eb2565b60c9805460ff191682151590811790915560405143907fe0a0f0fa52db091cb71c202d80420311430ce1ae2e7794149877b6720ce8bf0b90600090a350565b336002600160a01b03146105545760405163973d02cb60e01b815260040161048290611884565b600054610100900460ff16158080156105745750600054600160ff909116105b8061058e5750303b15801561058e575060005460ff166001145b6105aa5760405162461bcd60e51b8152600401610482906118a8565b6000805460ff1916600117905580156105cd576000805461ff0019166101001790555b6105d988888888610f25565b60c9805461ffff191685151561ff00191617610100851515021790556105fe82610f0c565b8015610644576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b60fd546001600160a01b031633146106c05760405162461bcd60e51b815260206004820152602f60248201527f526f6f744d696e7461626c6545524332305072656469636174653a204f4e4c5960448201526e2fa9aa20aa22afa922a1a2a4ab22a960891b6064820152608401610482565b60fe546001600160a01b038481169116146107365760405162461bcd60e51b815260206004820152603060248201527f526f6f744d696e7461626c6545524332305072656469636174653a204f4e4c5960448201526f5f4348494c445f50524544494341544560801b6064820152608401610482565b7f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e9828696107656020600084866118f6565b61076e91611920565b0361078d5761078861078382602081866118f6565b611020565b6107eb565b60405162461bcd60e51b815260206004820152602d60248201527f526f6f744d696e7461626c6545524332305072656469636174653a20494e564160448201526c4c49445f5349474e415455524560981b6064820152608401610482565b50505050565b6107fc838383610d39565b505050565b610809610eb2565b606580546001600160a01b0383166001600160a01b0319909116811790915561083a6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60006001600160a01b0382166108dc5760405162461bcd60e51b815260206004820152602960248201527f526f6f744d696e7461626c6545524332305072656469636174653a20494e56416044820152682624a22faa27a5a2a760b91b6064820152608401610482565b6001600160a01b038281166000908152610100602052604090205416156109585760405162461bcd60e51b815260206004820152602a60248201527f526f6f744d696e7461626c6545524332305072656469636174653a20414c524560448201526910511657d3505414115160b21b6064820152608401610482565b60fe5460ff546040516bffffffffffffffffffffffff19606086901b1660208201526001600160a01b0392831692600092610a0692911690603401604051602081830303815290604052805190602001208460405160388101919091526f5af43d82803e903d91602b57fd5bf3ff60248201526014810192909252733d602d80600a3d3981f3363d3d373d3d3d363d73825260588201526037600c8201206078820152605560439091012090565b6001600160a01b038581166000818152610100602052604080822080546001600160a01b03191686861617905560fc5481516306fdde0360e01b81529151959650909316936316f198319387937f2cef46a936bdc5b7e6e8c71aa04560c41cf7d88bb26901a7e7f4936ff02accad938b9391926306fdde0392600480830193928290030181865afa158015610a9f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ac79190810190611979565b896001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610b05573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b2d9190810190611979565b8a6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8f9190611a1b565b604051602001610ba3959493929190611a6a565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610bcf929190611abc565b600060405180830381600087803b158015610be957600080fd5b505af1158015610bfd573d6000803e3d6000fd5b50506040516001600160a01b038085169350871691507fb96a191bae4e25ffdff7f4136994eb0dec75d263750a07c035202c348c9515f090600090a39392505050565b336002600160a01b0314610c675760405163973d02cb60e01b815260040161048290611884565b600054610100900460ff1615808015610c875750600054600160ff909116105b80610ca15750303b158015610ca1575060005460ff166001145b610cbd5760405162461bcd60e51b8152600401610482906118a8565b6000805460ff191660011790558015610ce0576000805461ff0019166101001790555b610cec85858585610f25565b8015610d32576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610d416110d9565b6001600160a01b03808416600090815261010060205260409020541680610d6e57610d6b84610872565b90505b6001600160a01b038116610d8457610d84611ae0565b610d996001600160a01b0385163330856110e1565b60fc5460fe54604080517f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f82160208201526001600160a01b0388811682840152336060830152878116608083015260a08083018890528351808403909101815260c08301938490526316f1983160e01b909352938416936316f1983193610e249391169160c401611abc565b600060405180830381600087803b158015610e3e57600080fd5b505af1158015610e52573d6000803e3d6000fd5b50505050826001600160a01b0316816001600160a01b0316856001600160a01b03167f1666a3f7b8a7494f2ebcebe646a5187ae55b1db3a068097377d90cd64a258ce93386604051610ea5929190611af6565b60405180910390a46107eb565b6033546001600160a01b031633146104165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610482565b606580546001600160a01b03191690556104948161114c565b6001600160a01b03841615801590610f4557506001600160a01b03831615155b8015610f5957506001600160a01b03821615155b8015610f6d57506001600160a01b03811615155b610fd05760405162461bcd60e51b815260206004820152602e60248201527f526f6f744d696e7461626c6545524332305072656469636174653a204241445f60448201526d24a724aa24a0a624ad20aa24a7a760911b6064820152608401610482565b60fc80546001600160a01b039586166001600160a01b03199182161790915560fd80549486169482169490941790935560fe80549285169284169290921790915560ff8054919093169116179055565b600080808061103185870187611b0f565b6001600160a01b03808516600090815261010060205260409020549498509296509094509250168061106557611065611ae0565b6110796001600160a01b038616848461119e565b826001600160a01b0316816001600160a01b0316866001600160a01b03167fb9f935478aae5b1da868de596dafe0a2b41eeb61311fdd60c6dbbe46a1debee887866040516110c8929190611af6565b60405180910390a450505050505050565b6104166111bd565b6040516001600160a01b03808516602483015283166044820152606481018290526107eb9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526113d3565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6107fc8363a9059cbb60e01b8484604051602401611115929190611af6565b60c95460ff16156112c857604080513360248083019190915282518083039091018152604490910182526020810180516001600160e01b031663d78bca6960e01b179052905160009182916004600160991b01916113889161121f9190611b60565b6000604051808303818686fa925050503d806000811461125b576040519150601f19603f3d011682016040523d82523d6000602084013e611260565b606091505b509150915081801561128557506000818060200190518101906112839190611b7c565b115b6112c55760405162461bcd60e51b81526020600482015260116024820152702224a9a0a62627aba2a22fa9a2a72222a960791b6044820152606401610482565b50505b60c954610100900460ff161561041657604080513360248083019190915282518083039091018152604490910182526020810180516001600160e01b031663d78bca6960e01b179052905160009182916004600360981b01916113889161132f9190611b60565b6000604051808303818686fa925050503d806000811461136b576040519150601f19603f3d011682016040523d82523d6000602084013e611370565b606091505b50915091508180156113965750808060200190518101906113919190611b7c565b600114155b6104005760405162461bcd60e51b815260206004820152600e60248201526d212627a1a5a2a22fa9a2a72222a960911b6044820152606401610482565b6000611428826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166114a89092919063ffffffff16565b90508051600014806114495750808060200190518101906114499190611b95565b6107fc5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610482565b60606114b784846000856114bf565b949350505050565b6060824710156115205760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610482565b600080866001600160a01b0316858760405161153c9190611b60565b60006040518083038185875af1925050503d8060008114611579576040519150601f19603f3d011682016040523d82523d6000602084013e61157e565b606091505b509150915061158f8783838761159a565b979650505050505050565b60608315611609578251600003611602576001600160a01b0385163b6116025760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610482565b50816114b7565b6114b7838381511561161e5781518083602001fd5b8060405162461bcd60e51b81526004016104829190611bb2565b6001600160a01b038116811461049457600080fd5b6000806040838503121561166057600080fd5b823561166b81611638565b946020939093013593505050565b60006020828403121561168b57600080fd5b813561169681611638565b9392505050565b801515811461049457600080fd5b6000602082840312156116bd57600080fd5b81356116968161169d565b600080600080600080600060e0888a0312156116e357600080fd5b87356116ee81611638565b965060208801356116fe81611638565b9550604088013561170e81611638565b9450606088013561171e81611638565b9350608088013561172e8161169d565b925060a088013561173e8161169d565b915060c088013561174e81611638565b8091505092959891949750929550565b6000806000806060858703121561177457600080fd5b84359350602085013561178681611638565b9250604085013567ffffffffffffffff808211156117a357600080fd5b818701915087601f8301126117b757600080fd5b8135818111156117c657600080fd5b8860208285010111156117d857600080fd5b95989497505060200194505050565b6000806000606084860312156117fc57600080fd5b833561180781611638565b9250602084013561181781611638565b929592945050506040919091013590565b6000806000806080858703121561183e57600080fd5b843561184981611638565b9350602085013561185981611638565b9250604085013561186981611638565b9150606085013561187981611638565b939692955090935050565b6020808252600a908201526914d654d5115350d0531360b21b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000808585111561190657600080fd5b8386111561191357600080fd5b5050820193919092039150565b8035602083101561193957600019602084900360031b1b165b92915050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015611970578181015183820152602001611958565b50506000910152565b60006020828403121561198b57600080fd5b815167ffffffffffffffff808211156119a357600080fd5b818401915084601f8301126119b757600080fd5b8151818111156119c9576119c961193f565b604051601f8201601f19908116603f011681019083821181831017156119f1576119f161193f565b81604052828152876020848701011115611a0a57600080fd5b61158f836020830160208801611955565b600060208284031215611a2d57600080fd5b815160ff8116811461169657600080fd5b60008151808452611a56816020860160208601611955565b601f01601f19169290920160200192915050565b8581526001600160a01b038516602082015260a060408201819052600090611a9490830186611a3e565b8281036060840152611aa68186611a3e565b91505060ff831660808301529695505050505050565b6001600160a01b03831681526040602082018190526000906114b790830184611a3e565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b03929092168252602082015260400190565b60008060008060808587031215611b2557600080fd5b8435611b3081611638565b93506020850135611b4081611638565b92506040850135611b5081611638565b9396929550929360600135925050565b60008251611b72818460208701611955565b9190910192915050565b600060208284031215611b8e57600080fd5b5051919050565b600060208284031215611ba757600080fd5b81516116968161169d565b6020815260006116966020830184611a3e56fea2646970667358221220615463247d535c38b7f73523205414c5239774b2b0ad1ec61e5ed51a5bc812e464736f6c63430008130033","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061019a5760003560e01c8063b1768065116100e4578063e0563ab111610092578063e0563ab114610355578063e30c39781461035e578063eeb499451461036f578063f213159c14610382578063f2fde38b14610395578063f4a120f7146103a8578063f6451255146103bb578063f8c8765e146103e257600080fd5b8063b1768065146102a8578063b68ad1e4146102cf578063c1225a20146102e2578063c5e4683a146102f5578063d41f177114610308578063d57184e41461032f578063d8dd17731461034257600080fd5b806355b01e4d1161014c57806355b01e4d146102255780635ea5df7914610233578063715018a61461024a57806379ba5097146102525780637efab4f51461025a5780638da5cb5b14610284578063947287cf1461029557806397e5230d1461029e57600080fd5b806305dc2e8f1461019f57806307b3e252146101cf5780631bc114ba146101dd578063284017f5146101f05780633b878c22146101f957806347e7ef241461020257806351351d5314610217575b600080fd5b60fd546101b2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101b26004600360981b0181565b60fc546101b2906001600160a01b031681565b6101b261202081565b6101b261101081565b61021561021036600461164d565b6103f5565b005b6101b26002600160a01b0381565b6101b26004600160991b0181565b61023c61138881565b6040519081526020016101c6565b610215610404565b610215610418565b6101b2610268366004611679565b610100602052600090815260409020546001600160a01b031681565b6033546001600160a01b03166101b2565b61023c61520881565b61023c620249f081565b61023c7f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e98286981565b60ff546101b2906001600160a01b031681565b6102156102f03660046116ab565b610497565b6102156103033660046116ab565b6104e6565b61023c7f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f82181565b60fe546101b2906001600160a01b031681565b6102156103503660046116c8565b61052d565b6101b261203081565b6065546001600160a01b03166101b2565b61021561037d36600461175e565b61064e565b6102156103903660046117e7565b6107f1565b6102156103a3366004611679565b610801565b6101b26103b6366004611679565b610872565b61023c7f2cef46a936bdc5b7e6e8c71aa04560c41cf7d88bb26901a7e7f4936ff02accad81565b6102156103f0366004611828565b610c40565b610400823383610d39565b5050565b61040c610eb2565b6104166000610f0c565b565b60655433906001600160a01b0316811461048b5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084015b60405180910390fd5b61049481610f0c565b50565b61049f610eb2565b60c9805461ff0019166101008315159081029190911790915560405143907f61d574757cde41a357d030b39b2705796ccd699578037ab9a1cfd8117d82bf8690600090a350565b6104ee610eb2565b60c9805460ff191682151590811790915560405143907fe0a0f0fa52db091cb71c202d80420311430ce1ae2e7794149877b6720ce8bf0b90600090a350565b336002600160a01b03146105545760405163973d02cb60e01b815260040161048290611884565b600054610100900460ff16158080156105745750600054600160ff909116105b8061058e5750303b15801561058e575060005460ff166001145b6105aa5760405162461bcd60e51b8152600401610482906118a8565b6000805460ff1916600117905580156105cd576000805461ff0019166101001790555b6105d988888888610f25565b60c9805461ffff191685151561ff00191617610100851515021790556105fe82610f0c565b8015610644576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b60fd546001600160a01b031633146106c05760405162461bcd60e51b815260206004820152602f60248201527f526f6f744d696e7461626c6545524332305072656469636174653a204f4e4c5960448201526e2fa9aa20aa22afa922a1a2a4ab22a960891b6064820152608401610482565b60fe546001600160a01b038481169116146107365760405162461bcd60e51b815260206004820152603060248201527f526f6f744d696e7461626c6545524332305072656469636174653a204f4e4c5960448201526f5f4348494c445f50524544494341544560801b6064820152608401610482565b7f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e9828696107656020600084866118f6565b61076e91611920565b0361078d5761078861078382602081866118f6565b611020565b6107eb565b60405162461bcd60e51b815260206004820152602d60248201527f526f6f744d696e7461626c6545524332305072656469636174653a20494e564160448201526c4c49445f5349474e415455524560981b6064820152608401610482565b50505050565b6107fc838383610d39565b505050565b610809610eb2565b606580546001600160a01b0383166001600160a01b0319909116811790915561083a6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60006001600160a01b0382166108dc5760405162461bcd60e51b815260206004820152602960248201527f526f6f744d696e7461626c6545524332305072656469636174653a20494e56416044820152682624a22faa27a5a2a760b91b6064820152608401610482565b6001600160a01b038281166000908152610100602052604090205416156109585760405162461bcd60e51b815260206004820152602a60248201527f526f6f744d696e7461626c6545524332305072656469636174653a20414c524560448201526910511657d3505414115160b21b6064820152608401610482565b60fe5460ff546040516bffffffffffffffffffffffff19606086901b1660208201526001600160a01b0392831692600092610a0692911690603401604051602081830303815290604052805190602001208460405160388101919091526f5af43d82803e903d91602b57fd5bf3ff60248201526014810192909252733d602d80600a3d3981f3363d3d373d3d3d363d73825260588201526037600c8201206078820152605560439091012090565b6001600160a01b038581166000818152610100602052604080822080546001600160a01b03191686861617905560fc5481516306fdde0360e01b81529151959650909316936316f198319387937f2cef46a936bdc5b7e6e8c71aa04560c41cf7d88bb26901a7e7f4936ff02accad938b9391926306fdde0392600480830193928290030181865afa158015610a9f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ac79190810190611979565b896001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610b05573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b2d9190810190611979565b8a6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8f9190611a1b565b604051602001610ba3959493929190611a6a565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610bcf929190611abc565b600060405180830381600087803b158015610be957600080fd5b505af1158015610bfd573d6000803e3d6000fd5b50506040516001600160a01b038085169350871691507fb96a191bae4e25ffdff7f4136994eb0dec75d263750a07c035202c348c9515f090600090a39392505050565b336002600160a01b0314610c675760405163973d02cb60e01b815260040161048290611884565b600054610100900460ff1615808015610c875750600054600160ff909116105b80610ca15750303b158015610ca1575060005460ff166001145b610cbd5760405162461bcd60e51b8152600401610482906118a8565b6000805460ff191660011790558015610ce0576000805461ff0019166101001790555b610cec85858585610f25565b8015610d32576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610d416110d9565b6001600160a01b03808416600090815261010060205260409020541680610d6e57610d6b84610872565b90505b6001600160a01b038116610d8457610d84611ae0565b610d996001600160a01b0385163330856110e1565b60fc5460fe54604080517f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f82160208201526001600160a01b0388811682840152336060830152878116608083015260a08083018890528351808403909101815260c08301938490526316f1983160e01b909352938416936316f1983193610e249391169160c401611abc565b600060405180830381600087803b158015610e3e57600080fd5b505af1158015610e52573d6000803e3d6000fd5b50505050826001600160a01b0316816001600160a01b0316856001600160a01b03167f1666a3f7b8a7494f2ebcebe646a5187ae55b1db3a068097377d90cd64a258ce93386604051610ea5929190611af6565b60405180910390a46107eb565b6033546001600160a01b031633146104165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610482565b606580546001600160a01b03191690556104948161114c565b6001600160a01b03841615801590610f4557506001600160a01b03831615155b8015610f5957506001600160a01b03821615155b8015610f6d57506001600160a01b03811615155b610fd05760405162461bcd60e51b815260206004820152602e60248201527f526f6f744d696e7461626c6545524332305072656469636174653a204241445f60448201526d24a724aa24a0a624ad20aa24a7a760911b6064820152608401610482565b60fc80546001600160a01b039586166001600160a01b03199182161790915560fd80549486169482169490941790935560fe80549285169284169290921790915560ff8054919093169116179055565b600080808061103185870187611b0f565b6001600160a01b03808516600090815261010060205260409020549498509296509094509250168061106557611065611ae0565b6110796001600160a01b038616848461119e565b826001600160a01b0316816001600160a01b0316866001600160a01b03167fb9f935478aae5b1da868de596dafe0a2b41eeb61311fdd60c6dbbe46a1debee887866040516110c8929190611af6565b60405180910390a450505050505050565b6104166111bd565b6040516001600160a01b03808516602483015283166044820152606481018290526107eb9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526113d3565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6107fc8363a9059cbb60e01b8484604051602401611115929190611af6565b60c95460ff16156112c857604080513360248083019190915282518083039091018152604490910182526020810180516001600160e01b031663d78bca6960e01b179052905160009182916004600160991b01916113889161121f9190611b60565b6000604051808303818686fa925050503d806000811461125b576040519150601f19603f3d011682016040523d82523d6000602084013e611260565b606091505b509150915081801561128557506000818060200190518101906112839190611b7c565b115b6112c55760405162461bcd60e51b81526020600482015260116024820152702224a9a0a62627aba2a22fa9a2a72222a960791b6044820152606401610482565b50505b60c954610100900460ff161561041657604080513360248083019190915282518083039091018152604490910182526020810180516001600160e01b031663d78bca6960e01b179052905160009182916004600360981b01916113889161132f9190611b60565b6000604051808303818686fa925050503d806000811461136b576040519150601f19603f3d011682016040523d82523d6000602084013e611370565b606091505b50915091508180156113965750808060200190518101906113919190611b7c565b600114155b6104005760405162461bcd60e51b815260206004820152600e60248201526d212627a1a5a2a22fa9a2a72222a960911b6044820152606401610482565b6000611428826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166114a89092919063ffffffff16565b90508051600014806114495750808060200190518101906114499190611b95565b6107fc5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610482565b60606114b784846000856114bf565b949350505050565b6060824710156115205760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610482565b600080866001600160a01b0316858760405161153c9190611b60565b60006040518083038185875af1925050503d8060008114611579576040519150601f19603f3d011682016040523d82523d6000602084013e61157e565b606091505b509150915061158f8783838761159a565b979650505050505050565b60608315611609578251600003611602576001600160a01b0385163b6116025760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610482565b50816114b7565b6114b7838381511561161e5781518083602001fd5b8060405162461bcd60e51b81526004016104829190611bb2565b6001600160a01b038116811461049457600080fd5b6000806040838503121561166057600080fd5b823561166b81611638565b946020939093013593505050565b60006020828403121561168b57600080fd5b813561169681611638565b9392505050565b801515811461049457600080fd5b6000602082840312156116bd57600080fd5b81356116968161169d565b600080600080600080600060e0888a0312156116e357600080fd5b87356116ee81611638565b965060208801356116fe81611638565b9550604088013561170e81611638565b9450606088013561171e81611638565b9350608088013561172e8161169d565b925060a088013561173e8161169d565b915060c088013561174e81611638565b8091505092959891949750929550565b6000806000806060858703121561177457600080fd5b84359350602085013561178681611638565b9250604085013567ffffffffffffffff808211156117a357600080fd5b818701915087601f8301126117b757600080fd5b8135818111156117c657600080fd5b8860208285010111156117d857600080fd5b95989497505060200194505050565b6000806000606084860312156117fc57600080fd5b833561180781611638565b9250602084013561181781611638565b929592945050506040919091013590565b6000806000806080858703121561183e57600080fd5b843561184981611638565b9350602085013561185981611638565b9250604085013561186981611638565b9150606085013561187981611638565b939692955090935050565b6020808252600a908201526914d654d5115350d0531360b21b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000808585111561190657600080fd5b8386111561191357600080fd5b5050820193919092039150565b8035602083101561193957600019602084900360031b1b165b92915050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015611970578181015183820152602001611958565b50506000910152565b60006020828403121561198b57600080fd5b815167ffffffffffffffff808211156119a357600080fd5b818401915084601f8301126119b757600080fd5b8151818111156119c9576119c961193f565b604051601f8201601f19908116603f011681019083821181831017156119f1576119f161193f565b81604052828152876020848701011115611a0a57600080fd5b61158f836020830160208801611955565b600060208284031215611a2d57600080fd5b815160ff8116811461169657600080fd5b60008151808452611a56816020860160208601611955565b601f01601f19169290920160200192915050565b8581526001600160a01b038516602082015260a060408201819052600090611a9490830186611a3e565b8281036060840152611aa68186611a3e565b91505060ff831660808301529695505050505050565b6001600160a01b03831681526040602082018190526000906114b790830184611a3e565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b03929092168252602082015260400190565b60008060008060808587031215611b2557600080fd5b8435611b3081611638565b93506020850135611b4081611638565b92506040850135611b5081611638565b9396929550929360600135925050565b60008251611b72818460208701611955565b9190910192915050565b600060208284031215611b8e57600080fd5b5051919050565b600060208284031215611ba757600080fd5b81516116968161169d565b6020815260006116966020830184611a3e56fea2646970667358221220615463247d535c38b7f73523205414c5239774b2b0ad1ec61e5ed51a5bc812e464736f6c63430008130033","linkReferences":{},"deployedLinkReferences":{}}` var ChildERC721Artifact string = `{"_format":"hh-sol-artifact-1","contractName":"ChildERC721","sourceName":"contracts/child/ChildERC721.sol","abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address","name":"relayerAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"functionSignature","type":"bytes"}],"name":"MetaTransactionExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"burnBatch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"executeMetaTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"rootToken_","type":"address"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"offset","type":"uint256"}],"name":"invalidateNext","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"mintBatch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"predicate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rootToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b50612488806100206000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c3578063a22cb4651161007c578063a22cb465146102de578063b2dc5dc3146102f1578063b88d4fde14610304578063c87b56dd14610317578063e61987051461032a578063e985e9c51461033c57600080fd5b806370a08231146102775780637c88e3d91461028a578063906571471461029d57806395d89b41146102b05780639b77ef11146102b85780639dc29fac146102cb57600080fd5b80631f2d0065116101155780631f2d0065146101e257806323b872dd146101f45780632d0335ab1461020757806340c10f191461023e57806342842e0e146102515780636352211e1461026457600080fd5b806301ffc9a71461015257806306fdde031461017a578063081812fc1461018f578063095ea7b3146101ba5780630c53c51c146101cf575b600080fd5b610165610160366004611a73565b61034f565b60405190151581526020015b60405180910390f35b6101826103a1565b6040516101719190611ae0565b6101a261019d366004611af3565b610433565b6040516001600160a01b039091168152602001610171565b6101cd6101c8366004611b28565b61045a565b005b6101826101dd366004611b9a565b610586565b610103546001600160a01b03166101a2565b6101cd610202366004611c19565b610864565b610230610215366004611c55565b6001600160a01b031660009081526038602052604090205490565b604051908152602001610171565b61016561024c366004611b28565b61089c565b6101cd61025f366004611c19565b6108dd565b6101a2610272366004611af3565b6108f8565b610230610285366004611c55565b61092d565b610165610298366004611cb4565b6109b3565b6101cd6102ab366004611d1f565b610a9b565b610182610d0b565b6101cd6102c6366004611af3565b610d1a565b6101656102d9366004611b28565b610d41565b6101cd6102ec366004611d9f565b610db1565b6101656102ff366004611ddb565b610dc7565b6101cd610312366004611e43565b610e75565b610182610325366004611af3565b610eb4565b610102546001600160a01b03166101a2565b61016561034a366004611f1e565b610f28565b60006001600160e01b031982166380ac58cd60e01b148061038057506001600160e01b03198216635b5e139f60e01b145b8061039b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060d080546103b090611f51565b80601f01602080910402602001604051908101604052809291908181526020018280546103dc90611f51565b80156104295780601f106103fe57610100808354040283529160200191610429565b820191906000526020600020905b81548152906001019060200180831161040c57829003601f168201915b5050505050905090565b600061043e82610f56565b50600090815260d460205260409020546001600160a01b031690565b6000610465826108f8565b9050806001600160a01b0316836001600160a01b0316036104d75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b806001600160a01b03166104e9610f7e565b6001600160a01b0316148061050557506105058161034a610f7e565b6105775760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016104ce565b6105818383610f8d565b505050565b606060006105c987878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ffb92505050565b90506001600160e01b031960003581169082160361064f5760405162461bcd60e51b815260206004820152603d60248201527f66756e6374696f6e5369676e61747572652063616e206e6f74206265206f662060448201527f657865637574654d6574615472616e73616374696f6e206d6574686f6400000060648201526084016104ce565b604080516060810182526001600160a01b038a16600081815260386020908152848220548452808401929092528351601f8b0183900483028101830185528a815290938301918b908b9081908401838280828437600092019190915250505091525090506106c08982888888611016565b6107165760405162461bcd60e51b815260206004820152602160248201527f5369676e657220616e64207369676e617475726520646f206e6f74206d6174636044820152600d60fb1b60648201526084016104ce565b603860008a6001600160a01b03166001600160a01b031681526020019081526020016000206000815460010191905081905550600080306001600160a01b03168a8a8d60405160200161076b93929190611f8b565b60408051601f198184030181529082905261078591611fb1565b6000604051808303816000865af19150503d80600081146107c2576040519150601f19603f3d011682016040523d82523d6000602084013e6107c7565b606091505b5091509150816108195760405162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c0000000060448201526064016104ce565b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8b338c8c60405161084e9493929190611fcd565b60405180910390a19a9950505050505050505050565b61087561086f610f7e565b826110f2565b6108915760405162461bcd60e51b81526004016104ce90612019565b610581838383611150565b610102546000906001600160a01b031633146108ca5760405162461bcd60e51b81526004016104ce90612066565b6108d483836112a2565b50600192915050565b61058183838360405180602001604052806000815250610e75565b600081815260d260205260408120546001600160a01b03168061039b5760405162461bcd60e51b81526004016104ce906120aa565b60006001600160a01b0382166109975760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016104ce565b506001600160a01b0316600090815260d3602052604090205490565b610102546000906001600160a01b031633146109e15760405162461bcd60e51b81526004016104ce90612066565b83828114610a315760405162461bcd60e51b815260206004820152601f60248201527f4368696c644552433732313a204172726179206c656e206d69736d617463680060448201526064016104ce565b60005b81811015610a8c57610a84878783818110610a5157610a516120dc565b9050602002016020810190610a669190611c55565b868684818110610a7857610a786120dc565b905060200201356112a2565b600101610a34565b5060019150505b949350505050565b606b54610100900460ff1615808015610abb5750606b54600160ff909116105b80610ad55750303b158015610ad55750606b5460ff166001145b610b385760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104ce565b606b805460ff191660011790558015610b5b57606b805461ff0019166101001790555b6001600160a01b03861615801590610b7257508315155b8015610b7d57508115155b610bc95760405162461bcd60e51b815260206004820152601f60248201527f4368696c644552433732313a2042616420696e697469616c697a6174696f6e0060448201526064016104ce565b61010380546001600160a01b0388166001600160a01b031991821617909155610102805490911633179055604080516020601f8701819004810282018101909252858152610c6591879087908190840183828082843760009201919091525050604080516020601f890181900481028201810190925287815292508791508690819084018382808284376000920191909152506112bc92505050565b610cbd85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260018152603160f81b602082015291506112ed9050565b8015610d0357606b805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b606060d180546103b090611f51565b3360009081526038602052604081208054839290610d399084906120f2565b909155505050565b610102546000906001600160a01b03163314610d6f5760405162461bcd60e51b81526004016104ce90612066565b610d78826108f8565b6001600160a01b0316836001600160a01b031614610da85760405162461bcd60e51b81526004016104ce90612113565b6108d482611359565b610dc3610dbc610f7e565b83836113dc565b5050565b610102546000906001600160a01b03163314610df55760405162461bcd60e51b81526004016104ce90612066565b8160005b81811015610e69576000858583818110610e1557610e156120dc565b905060200201359050610e27816108f8565b6001600160a01b0316876001600160a01b031614610e575760405162461bcd60e51b81526004016104ce90612113565b610e6081611359565b50600101610df9565b50600195945050505050565b610e86610e80610f7e565b836110f2565b610ea25760405162461bcd60e51b81526004016104ce90612019565b610eae848484846114a6565b50505050565b6060610ebf82610f56565b6000610ed660408051602081019091526000815290565b90506000815111610ef65760405180602001604052806000815250610f21565b80610f00846114d9565b604051602001610f11929190612148565b6040516020818303038152906040525b9392505050565b6001600160a01b03918216600090815260d56020908152604080832093909416825291909152205460ff1690565b610f5f8161156b565b610f7b5760405162461bcd60e51b81526004016104ce906120aa565b50565b6000610f88611588565b905090565b600081815260d46020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610fc2826108f8565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000815160000361100e57506000919050565b506020015190565b600080600161102c611027886115e4565b611661565b6040805160008152602081018083529290925260ff861690820152606081018790526080810186905260a0016020604051602081039080840390855afa15801561107a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166110d15760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016104ce565b866001600160a01b0316816001600160a01b03161491505095945050505050565b6000806110fe836108f8565b9050806001600160a01b0316846001600160a01b0316148061112557506111258185610f28565b80610a935750836001600160a01b031661113e84610433565b6001600160a01b031614949350505050565b826001600160a01b0316611163826108f8565b6001600160a01b0316146111895760405162461bcd60e51b81526004016104ce90612177565b6001600160a01b0382166111eb5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016104ce565b826001600160a01b03166111fe826108f8565b6001600160a01b0316146112245760405162461bcd60e51b81526004016104ce90612177565b600081815260d46020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260d3855283862080546000190190559087168086528386208054600101905586865260d2909452828520805490921684179091559051849360008051602061243383398151915291a4505050565b610dc382826040518060200160405280600081525061168e565b606b54610100900460ff166112e35760405162461bcd60e51b81526004016104ce906121bc565b610dc382826116c1565b815160208084019190912082519183019190912060038290556004819055466001557f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61133b818484611701565b600055600280546001600160a01b0319163017905560055550505050565b6000611364826108f8565b905061136f826108f8565b600083815260d46020908152604080832080546001600160a01b03199081169091556001600160a01b03851680855260d38452828520805460001901905587855260d290935281842080549091169055519293508492600080516020612433833981519152908390a45050565b816001600160a01b0316836001600160a01b0316036114395760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b60448201526064016104ce565b6001600160a01b03838116600081815260d56020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6114b1848484611150565b6114bd8484848461174a565b610eae5760405162461bcd60e51b81526004016104ce90612207565b606060006114e68361184f565b60010190506000816001600160401b0381111561150557611505611e2d565b6040519080825280601f01601f19166020018201604052801561152f576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461153957509392505050565b600090815260d260205260409020546001600160a01b0316151590565b60003033036115de57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506115e19050565b50335b90565b60006040518060800160405280604381526020016123f06043913980516020918201208351848301516040808701518051908601209051611644950193845260208401929092526001600160a01b03166040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b600061039b61166e611927565b8360405161190160f01b8152600281019290925260228201526042902090565b6116988383611962565b6116a5600084848461174a565b6105815760405162461bcd60e51b81526004016104ce90612207565b606b54610100900460ff166116e85760405162461bcd60e51b81526004016104ce906121bc565b60d06116f4838261229f565b5060d1610581828261229f565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b60006001600160a01b0384163b1561184757836001600160a01b031663150b7a02611773610f7e565b8786866040518563ffffffff1660e01b8152600401611795949392919061235e565b6020604051808303816000875af19250505080156117d0575060408051601f3d908101601f191682019092526117cd9181019061239b565b60015b61182d573d8080156117fe576040519150601f19603f3d011682016040523d82523d6000602084013e611803565b606091505b5080516000036118255760405162461bcd60e51b81526004016104ce90612207565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610a93565b506001610a93565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061188e5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106118ba576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106118d857662386f26fc10000830492506010015b6305f5e10083106118f0576305f5e100830492506008015b612710831061190457612710830492506004015b60648310611916576064830492506002015b600a831061039b5760010192915050565b6002546000906001600160a01b031630148015611945575060015446145b15611951575060005490565b610f88600554600354600454611701565b6001600160a01b0382166119b85760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016104ce565b6119c18161156b565b156119de5760405162461bcd60e51b81526004016104ce906123b8565b6119e78161156b565b15611a045760405162461bcd60e51b81526004016104ce906123b8565b6001600160a01b038216600081815260d3602090815260408083208054600101905584835260d290915280822080546001600160a01b031916841790555183929190600080516020612433833981519152908290a45050565b6001600160e01b031981168114610f7b57600080fd5b600060208284031215611a8557600080fd5b8135610f2181611a5d565b60005b83811015611aab578181015183820152602001611a93565b50506000910152565b60008151808452611acc816020860160208601611a90565b601f01601f19169290920160200192915050565b602081526000610f216020830184611ab4565b600060208284031215611b0557600080fd5b5035919050565b80356001600160a01b0381168114611b2357600080fd5b919050565b60008060408385031215611b3b57600080fd5b611b4483611b0c565b946020939093013593505050565b60008083601f840112611b6457600080fd5b5081356001600160401b03811115611b7b57600080fd5b602083019150836020828501011115611b9357600080fd5b9250929050565b60008060008060008060a08789031215611bb357600080fd5b611bbc87611b0c565b955060208701356001600160401b03811115611bd757600080fd5b611be389828a01611b52565b9096509450506040870135925060608701359150608087013560ff81168114611c0b57600080fd5b809150509295509295509295565b600080600060608486031215611c2e57600080fd5b611c3784611b0c565b9250611c4560208501611b0c565b9150604084013590509250925092565b600060208284031215611c6757600080fd5b610f2182611b0c565b60008083601f840112611c8257600080fd5b5081356001600160401b03811115611c9957600080fd5b6020830191508360208260051b8501011115611b9357600080fd5b60008060008060408587031215611cca57600080fd5b84356001600160401b0380821115611ce157600080fd5b611ced88838901611c70565b90965094506020870135915080821115611d0657600080fd5b50611d1387828801611c70565b95989497509550505050565b600080600080600060608688031215611d3757600080fd5b611d4086611b0c565b945060208601356001600160401b0380821115611d5c57600080fd5b611d6889838a01611b52565b90965094506040880135915080821115611d8157600080fd5b50611d8e88828901611b52565b969995985093965092949392505050565b60008060408385031215611db257600080fd5b611dbb83611b0c565b915060208301358015158114611dd057600080fd5b809150509250929050565b600080600060408486031215611df057600080fd5b611df984611b0c565b925060208401356001600160401b03811115611e1457600080fd5b611e2086828701611c70565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215611e5957600080fd5b611e6285611b0c565b9350611e7060208601611b0c565b92506040850135915060608501356001600160401b0380821115611e9357600080fd5b818701915087601f830112611ea757600080fd5b813581811115611eb957611eb9611e2d565b604051601f8201601f19908116603f01168101908382118183101715611ee157611ee1611e2d565b816040528281528a6020848701011115611efa57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060408385031215611f3157600080fd5b611f3a83611b0c565b9150611f4860208401611b0c565b90509250929050565b600181811c90821680611f6557607f821691505b602082108103611f8557634e487b7160e01b600052602260045260246000fd5b50919050565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b60008251611fc3818460208701611a90565b9190910192915050565b6001600160a01b0385811682528416602082015260606040820181905281018290526000828460808401376000608084840101526080601f19601f850116830101905095945050505050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526024908201527f4368696c644552433732313a204f6e6c79207072656469636174652063616e2060408201526318d85b1b60e21b606082015260800190565b602080825260189082015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b8082018082111561039b57634e487b7160e01b600052601160045260246000fd5b6020808252818101527f4368696c644552433732313a204f6e6c79206f776e65722063616e206275726e604082015260600190565b6000835161215a818460208801611a90565b83519083019061216e818360208801611a90565b01949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b601f82111561058157600081815260208120601f850160051c810160208610156122805750805b601f850160051c820191505b81811015610d035782815560010161228c565b81516001600160401b038111156122b8576122b8611e2d565b6122cc816122c68454611f51565b84612259565b602080601f83116001811461230157600084156122e95750858301515b600019600386901b1c1916600185901b178555610d03565b600085815260208120601f198616915b8281101561233057888601518255948401946001909101908401612311565b508582101561234e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061239190830184611ab4565b9695505050505050565b6000602082840312156123ad57600080fd5b8151610f2181611a5d565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060408201526060019056fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e617475726529ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a8d0be5e9351ad4480a613e61819b4e9fba19a9ae0bf0f2a3f439049b13321aa64736f6c63430008130033","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c3578063a22cb4651161007c578063a22cb465146102de578063b2dc5dc3146102f1578063b88d4fde14610304578063c87b56dd14610317578063e61987051461032a578063e985e9c51461033c57600080fd5b806370a08231146102775780637c88e3d91461028a578063906571471461029d57806395d89b41146102b05780639b77ef11146102b85780639dc29fac146102cb57600080fd5b80631f2d0065116101155780631f2d0065146101e257806323b872dd146101f45780632d0335ab1461020757806340c10f191461023e57806342842e0e146102515780636352211e1461026457600080fd5b806301ffc9a71461015257806306fdde031461017a578063081812fc1461018f578063095ea7b3146101ba5780630c53c51c146101cf575b600080fd5b610165610160366004611a73565b61034f565b60405190151581526020015b60405180910390f35b6101826103a1565b6040516101719190611ae0565b6101a261019d366004611af3565b610433565b6040516001600160a01b039091168152602001610171565b6101cd6101c8366004611b28565b61045a565b005b6101826101dd366004611b9a565b610586565b610103546001600160a01b03166101a2565b6101cd610202366004611c19565b610864565b610230610215366004611c55565b6001600160a01b031660009081526038602052604090205490565b604051908152602001610171565b61016561024c366004611b28565b61089c565b6101cd61025f366004611c19565b6108dd565b6101a2610272366004611af3565b6108f8565b610230610285366004611c55565b61092d565b610165610298366004611cb4565b6109b3565b6101cd6102ab366004611d1f565b610a9b565b610182610d0b565b6101cd6102c6366004611af3565b610d1a565b6101656102d9366004611b28565b610d41565b6101cd6102ec366004611d9f565b610db1565b6101656102ff366004611ddb565b610dc7565b6101cd610312366004611e43565b610e75565b610182610325366004611af3565b610eb4565b610102546001600160a01b03166101a2565b61016561034a366004611f1e565b610f28565b60006001600160e01b031982166380ac58cd60e01b148061038057506001600160e01b03198216635b5e139f60e01b145b8061039b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060d080546103b090611f51565b80601f01602080910402602001604051908101604052809291908181526020018280546103dc90611f51565b80156104295780601f106103fe57610100808354040283529160200191610429565b820191906000526020600020905b81548152906001019060200180831161040c57829003601f168201915b5050505050905090565b600061043e82610f56565b50600090815260d460205260409020546001600160a01b031690565b6000610465826108f8565b9050806001600160a01b0316836001600160a01b0316036104d75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b806001600160a01b03166104e9610f7e565b6001600160a01b0316148061050557506105058161034a610f7e565b6105775760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016104ce565b6105818383610f8d565b505050565b606060006105c987878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ffb92505050565b90506001600160e01b031960003581169082160361064f5760405162461bcd60e51b815260206004820152603d60248201527f66756e6374696f6e5369676e61747572652063616e206e6f74206265206f662060448201527f657865637574654d6574615472616e73616374696f6e206d6574686f6400000060648201526084016104ce565b604080516060810182526001600160a01b038a16600081815260386020908152848220548452808401929092528351601f8b0183900483028101830185528a815290938301918b908b9081908401838280828437600092019190915250505091525090506106c08982888888611016565b6107165760405162461bcd60e51b815260206004820152602160248201527f5369676e657220616e64207369676e617475726520646f206e6f74206d6174636044820152600d60fb1b60648201526084016104ce565b603860008a6001600160a01b03166001600160a01b031681526020019081526020016000206000815460010191905081905550600080306001600160a01b03168a8a8d60405160200161076b93929190611f8b565b60408051601f198184030181529082905261078591611fb1565b6000604051808303816000865af19150503d80600081146107c2576040519150601f19603f3d011682016040523d82523d6000602084013e6107c7565b606091505b5091509150816108195760405162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c0000000060448201526064016104ce565b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8b338c8c60405161084e9493929190611fcd565b60405180910390a19a9950505050505050505050565b61087561086f610f7e565b826110f2565b6108915760405162461bcd60e51b81526004016104ce90612019565b610581838383611150565b610102546000906001600160a01b031633146108ca5760405162461bcd60e51b81526004016104ce90612066565b6108d483836112a2565b50600192915050565b61058183838360405180602001604052806000815250610e75565b600081815260d260205260408120546001600160a01b03168061039b5760405162461bcd60e51b81526004016104ce906120aa565b60006001600160a01b0382166109975760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016104ce565b506001600160a01b0316600090815260d3602052604090205490565b610102546000906001600160a01b031633146109e15760405162461bcd60e51b81526004016104ce90612066565b83828114610a315760405162461bcd60e51b815260206004820152601f60248201527f4368696c644552433732313a204172726179206c656e206d69736d617463680060448201526064016104ce565b60005b81811015610a8c57610a84878783818110610a5157610a516120dc565b9050602002016020810190610a669190611c55565b868684818110610a7857610a786120dc565b905060200201356112a2565b600101610a34565b5060019150505b949350505050565b606b54610100900460ff1615808015610abb5750606b54600160ff909116105b80610ad55750303b158015610ad55750606b5460ff166001145b610b385760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104ce565b606b805460ff191660011790558015610b5b57606b805461ff0019166101001790555b6001600160a01b03861615801590610b7257508315155b8015610b7d57508115155b610bc95760405162461bcd60e51b815260206004820152601f60248201527f4368696c644552433732313a2042616420696e697469616c697a6174696f6e0060448201526064016104ce565b61010380546001600160a01b0388166001600160a01b031991821617909155610102805490911633179055604080516020601f8701819004810282018101909252858152610c6591879087908190840183828082843760009201919091525050604080516020601f890181900481028201810190925287815292508791508690819084018382808284376000920191909152506112bc92505050565b610cbd85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260018152603160f81b602082015291506112ed9050565b8015610d0357606b805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b606060d180546103b090611f51565b3360009081526038602052604081208054839290610d399084906120f2565b909155505050565b610102546000906001600160a01b03163314610d6f5760405162461bcd60e51b81526004016104ce90612066565b610d78826108f8565b6001600160a01b0316836001600160a01b031614610da85760405162461bcd60e51b81526004016104ce90612113565b6108d482611359565b610dc3610dbc610f7e565b83836113dc565b5050565b610102546000906001600160a01b03163314610df55760405162461bcd60e51b81526004016104ce90612066565b8160005b81811015610e69576000858583818110610e1557610e156120dc565b905060200201359050610e27816108f8565b6001600160a01b0316876001600160a01b031614610e575760405162461bcd60e51b81526004016104ce90612113565b610e6081611359565b50600101610df9565b50600195945050505050565b610e86610e80610f7e565b836110f2565b610ea25760405162461bcd60e51b81526004016104ce90612019565b610eae848484846114a6565b50505050565b6060610ebf82610f56565b6000610ed660408051602081019091526000815290565b90506000815111610ef65760405180602001604052806000815250610f21565b80610f00846114d9565b604051602001610f11929190612148565b6040516020818303038152906040525b9392505050565b6001600160a01b03918216600090815260d56020908152604080832093909416825291909152205460ff1690565b610f5f8161156b565b610f7b5760405162461bcd60e51b81526004016104ce906120aa565b50565b6000610f88611588565b905090565b600081815260d46020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610fc2826108f8565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000815160000361100e57506000919050565b506020015190565b600080600161102c611027886115e4565b611661565b6040805160008152602081018083529290925260ff861690820152606081018790526080810186905260a0016020604051602081039080840390855afa15801561107a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166110d15760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016104ce565b866001600160a01b0316816001600160a01b03161491505095945050505050565b6000806110fe836108f8565b9050806001600160a01b0316846001600160a01b0316148061112557506111258185610f28565b80610a935750836001600160a01b031661113e84610433565b6001600160a01b031614949350505050565b826001600160a01b0316611163826108f8565b6001600160a01b0316146111895760405162461bcd60e51b81526004016104ce90612177565b6001600160a01b0382166111eb5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016104ce565b826001600160a01b03166111fe826108f8565b6001600160a01b0316146112245760405162461bcd60e51b81526004016104ce90612177565b600081815260d46020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260d3855283862080546000190190559087168086528386208054600101905586865260d2909452828520805490921684179091559051849360008051602061243383398151915291a4505050565b610dc382826040518060200160405280600081525061168e565b606b54610100900460ff166112e35760405162461bcd60e51b81526004016104ce906121bc565b610dc382826116c1565b815160208084019190912082519183019190912060038290556004819055466001557f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61133b818484611701565b600055600280546001600160a01b0319163017905560055550505050565b6000611364826108f8565b905061136f826108f8565b600083815260d46020908152604080832080546001600160a01b03199081169091556001600160a01b03851680855260d38452828520805460001901905587855260d290935281842080549091169055519293508492600080516020612433833981519152908390a45050565b816001600160a01b0316836001600160a01b0316036114395760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b60448201526064016104ce565b6001600160a01b03838116600081815260d56020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6114b1848484611150565b6114bd8484848461174a565b610eae5760405162461bcd60e51b81526004016104ce90612207565b606060006114e68361184f565b60010190506000816001600160401b0381111561150557611505611e2d565b6040519080825280601f01601f19166020018201604052801561152f576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461153957509392505050565b600090815260d260205260409020546001600160a01b0316151590565b60003033036115de57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506115e19050565b50335b90565b60006040518060800160405280604381526020016123f06043913980516020918201208351848301516040808701518051908601209051611644950193845260208401929092526001600160a01b03166040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b600061039b61166e611927565b8360405161190160f01b8152600281019290925260228201526042902090565b6116988383611962565b6116a5600084848461174a565b6105815760405162461bcd60e51b81526004016104ce90612207565b606b54610100900460ff166116e85760405162461bcd60e51b81526004016104ce906121bc565b60d06116f4838261229f565b5060d1610581828261229f565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b60006001600160a01b0384163b1561184757836001600160a01b031663150b7a02611773610f7e565b8786866040518563ffffffff1660e01b8152600401611795949392919061235e565b6020604051808303816000875af19250505080156117d0575060408051601f3d908101601f191682019092526117cd9181019061239b565b60015b61182d573d8080156117fe576040519150601f19603f3d011682016040523d82523d6000602084013e611803565b606091505b5080516000036118255760405162461bcd60e51b81526004016104ce90612207565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610a93565b506001610a93565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061188e5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106118ba576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106118d857662386f26fc10000830492506010015b6305f5e10083106118f0576305f5e100830492506008015b612710831061190457612710830492506004015b60648310611916576064830492506002015b600a831061039b5760010192915050565b6002546000906001600160a01b031630148015611945575060015446145b15611951575060005490565b610f88600554600354600454611701565b6001600160a01b0382166119b85760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016104ce565b6119c18161156b565b156119de5760405162461bcd60e51b81526004016104ce906123b8565b6119e78161156b565b15611a045760405162461bcd60e51b81526004016104ce906123b8565b6001600160a01b038216600081815260d3602090815260408083208054600101905584835260d290915280822080546001600160a01b031916841790555183929190600080516020612433833981519152908290a45050565b6001600160e01b031981168114610f7b57600080fd5b600060208284031215611a8557600080fd5b8135610f2181611a5d565b60005b83811015611aab578181015183820152602001611a93565b50506000910152565b60008151808452611acc816020860160208601611a90565b601f01601f19169290920160200192915050565b602081526000610f216020830184611ab4565b600060208284031215611b0557600080fd5b5035919050565b80356001600160a01b0381168114611b2357600080fd5b919050565b60008060408385031215611b3b57600080fd5b611b4483611b0c565b946020939093013593505050565b60008083601f840112611b6457600080fd5b5081356001600160401b03811115611b7b57600080fd5b602083019150836020828501011115611b9357600080fd5b9250929050565b60008060008060008060a08789031215611bb357600080fd5b611bbc87611b0c565b955060208701356001600160401b03811115611bd757600080fd5b611be389828a01611b52565b9096509450506040870135925060608701359150608087013560ff81168114611c0b57600080fd5b809150509295509295509295565b600080600060608486031215611c2e57600080fd5b611c3784611b0c565b9250611c4560208501611b0c565b9150604084013590509250925092565b600060208284031215611c6757600080fd5b610f2182611b0c565b60008083601f840112611c8257600080fd5b5081356001600160401b03811115611c9957600080fd5b6020830191508360208260051b8501011115611b9357600080fd5b60008060008060408587031215611cca57600080fd5b84356001600160401b0380821115611ce157600080fd5b611ced88838901611c70565b90965094506020870135915080821115611d0657600080fd5b50611d1387828801611c70565b95989497509550505050565b600080600080600060608688031215611d3757600080fd5b611d4086611b0c565b945060208601356001600160401b0380821115611d5c57600080fd5b611d6889838a01611b52565b90965094506040880135915080821115611d8157600080fd5b50611d8e88828901611b52565b969995985093965092949392505050565b60008060408385031215611db257600080fd5b611dbb83611b0c565b915060208301358015158114611dd057600080fd5b809150509250929050565b600080600060408486031215611df057600080fd5b611df984611b0c565b925060208401356001600160401b03811115611e1457600080fd5b611e2086828701611c70565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215611e5957600080fd5b611e6285611b0c565b9350611e7060208601611b0c565b92506040850135915060608501356001600160401b0380821115611e9357600080fd5b818701915087601f830112611ea757600080fd5b813581811115611eb957611eb9611e2d565b604051601f8201601f19908116603f01168101908382118183101715611ee157611ee1611e2d565b816040528281528a6020848701011115611efa57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060408385031215611f3157600080fd5b611f3a83611b0c565b9150611f4860208401611b0c565b90509250929050565b600181811c90821680611f6557607f821691505b602082108103611f8557634e487b7160e01b600052602260045260246000fd5b50919050565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b60008251611fc3818460208701611a90565b9190910192915050565b6001600160a01b0385811682528416602082015260606040820181905281018290526000828460808401376000608084840101526080601f19601f850116830101905095945050505050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526024908201527f4368696c644552433732313a204f6e6c79207072656469636174652063616e2060408201526318d85b1b60e21b606082015260800190565b602080825260189082015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b8082018082111561039b57634e487b7160e01b600052601160045260246000fd5b6020808252818101527f4368696c644552433732313a204f6e6c79206f776e65722063616e206275726e604082015260600190565b6000835161215a818460208801611a90565b83519083019061216e818360208801611a90565b01949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b601f82111561058157600081815260208120601f850160051c810160208610156122805750805b601f850160051c820191505b81811015610d035782815560010161228c565b81516001600160401b038111156122b8576122b8611e2d565b6122cc816122c68454611f51565b84612259565b602080601f83116001811461230157600084156122e95750858301515b600019600386901b1c1916600185901b178555610d03565b600085815260208120601f198616915b8281101561233057888601518255948401946001909101908401612311565b508582101561234e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061239190830184611ab4565b9695505050505050565b6000602082840312156123ad57600080fd5b8151610f2181611a5d565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060408201526060019056fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e617475726529ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a8d0be5e9351ad4480a613e61819b4e9fba19a9ae0bf0f2a3f439049b13321aa64736f6c63430008130033","linkReferences":{},"deployedLinkReferences":{}}`