From 2d0450654a4d31ab5a4c1d610e5477dd446f6795 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Negovanovi=C4=87?= <93934272+Stefan-Ethernal@users.noreply.github.com> Date: Thu, 23 Feb 2023 17:08:40 +0100 Subject: [PATCH] Use Edge embedded smart contract definitions in genesis generation (#1247) * Generate artifact for Merkle smart contract * Rely on embedded smart contracts when generating genesis * Remove unused function --- command/genesis/polybft_params.go | 45 +++++++------------ .../contractsapi/artifact/artifacts.go | 9 ---- .../contractsapi/artifacts-gen/main.go | 4 ++ consensus/polybft/contractsapi/gen_sc_data.go | 1 + consensus/polybft/contractsapi/init.go | 6 +++ 5 files changed, 28 insertions(+), 37 deletions(-) diff --git a/command/genesis/polybft_params.go b/command/genesis/polybft_params.go index 036e6c989b..92ecf46ac3 100644 --- a/command/genesis/polybft_params.go +++ b/command/genesis/polybft_params.go @@ -8,6 +8,7 @@ import ( "sort" "time" + "github.com/0xPolygon/polygon-edge/consensus/polybft/contractsapi" "github.com/0xPolygon/polygon-edge/consensus/polybft/contractsapi/artifact" "github.com/0xPolygon/polygon-edge/chain" @@ -177,59 +178,47 @@ func (p *genesisParams) generatePolyBftChainConfig() error { func (p *genesisParams) deployContracts(totalStake *big.Int) (map[types.Address]*chain.GenesisAccount, error) { genesisContracts := []struct { - name string - relativePath string - address types.Address + artifact *artifact.Artifact + address types.Address }{ { - // Validator contract - name: "ChildValidatorSet", - relativePath: "child/ChildValidatorSet.sol", - address: contracts.ValidatorSetContract, + // ChildValidatorSet contract + artifact: contractsapi.ChildValidatorSet, + address: contracts.ValidatorSetContract, }, { // State receiver contract - name: "StateReceiver", - relativePath: "child/StateReceiver.sol", - address: contracts.StateReceiverContract, + artifact: contractsapi.StateReceiver, + address: contracts.StateReceiverContract, }, { // Native Token contract (Matic ERC-20) - name: "MRC20", - relativePath: "child/MRC20.sol", - address: contracts.NativeTokenContract, + artifact: contractsapi.MRC20, + address: contracts.NativeTokenContract, }, { // BLS contract - name: "BLS", - relativePath: "common/BLS.sol", - address: contracts.BLSContract, + artifact: contractsapi.BLS, + address: contracts.BLSContract, }, { // Merkle contract - name: "Merkle", - relativePath: "common/Merkle.sol", - address: contracts.MerkleContract, + artifact: contractsapi.Merkle, + address: contracts.MerkleContract, }, { // L2StateSender contract - name: "L2StateSender", - relativePath: "child/L2StateSender.sol", - address: contracts.L2StateSenderContract, + artifact: contractsapi.L2StateSender, + address: contracts.L2StateSenderContract, }, } allocations := make(map[types.Address]*chain.GenesisAccount, len(genesisContracts)) for _, contract := range genesisContracts { - artifact, err := artifact.ReadArtifact(p.smartContractsRootPath, contract.relativePath, contract.name) - if err != nil { - return nil, err - } - allocations[contract.address] = &chain.GenesisAccount{ Balance: big.NewInt(0), - Code: artifact.DeployedBytecode, + Code: contract.artifact.DeployedBytecode, } } diff --git a/consensus/polybft/contractsapi/artifact/artifacts.go b/consensus/polybft/contractsapi/artifact/artifacts.go index 23bacf2c1f..27016eeea4 100644 --- a/consensus/polybft/contractsapi/artifact/artifacts.go +++ b/consensus/polybft/contractsapi/artifact/artifacts.go @@ -10,15 +10,6 @@ import ( "github.com/umbracle/ethgo/abi" ) -func ReadArtifact(rootFolder, contractPath, contractName string) (*Artifact, error) { - data, err := ReadArtifactData(rootFolder, contractPath, contractName) - if err != nil { - return nil, err - } - - return DecodeArtifact(data) -} - func ReadArtifactData(rootFolder, contractPath, contractName string) ([]byte, error) { fileName := filepath.Join(rootFolder, contractPath, fmt.Sprintf("%s.json", contractName)) diff --git a/consensus/polybft/contractsapi/artifacts-gen/main.go b/consensus/polybft/contractsapi/artifacts-gen/main.go index 4e0567eae4..77c1485496 100644 --- a/consensus/polybft/contractsapi/artifacts-gen/main.go +++ b/consensus/polybft/contractsapi/artifacts-gen/main.go @@ -42,6 +42,10 @@ func main() { "common/BN256G2.sol", "BN256G2", }, + { + "common/Merkle.sol", + "Merkle", + }, { "child/StateReceiver.sol", "StateReceiver", diff --git a/consensus/polybft/contractsapi/gen_sc_data.go b/consensus/polybft/contractsapi/gen_sc_data.go index f51ef35ed8..874218374f 100644 --- a/consensus/polybft/contractsapi/gen_sc_data.go +++ b/consensus/polybft/contractsapi/gen_sc_data.go @@ -6,6 +6,7 @@ var ExitHelperArtifact string = "{\n \"_format\": \"hh-sol-artifact-1\",\n \"c var L2StateSenderArtifact string = "{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"L2StateSender\",\n \"sourceName\": \"contracts/child/L2StateSender.sol\",\n \"abi\": [\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"id\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"receiver\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"L2StateSynced\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"MAX_LENGTH\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"counter\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"receiver\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"syncState\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x608060405234801561001057600080fd5b50610297806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806316f198311461004657806361bc221a1461005b578063a6f9885c14610076575b600080fd5b61005961005436600461017a565b61007f565b005b61006460005481565b60405190815260200160405180910390f35b61006461080081565b6001600160a01b0383166100cd5760405162461bcd60e51b815260206004820152601060248201526f24a72b20a624a22fa922a1a2a4ab22a960811b60448201526064015b60405180910390fd5b6108008111156101145760405162461bcd60e51b815260206004820152601260248201527108ab0868a8a88a6be9a82b0be988a9c8ea8960731b60448201526064016100c4565b826001600160a01b0316336001600160a01b031660008081546101369061020b565b9190508190557fedaf3c471ebd67d60c29efe34b639ede7d6a1d92eaeb3f503e784971e67118a5858560405161016d929190610232565b60405180910390a4505050565b60008060006040848603121561018f57600080fd5b83356001600160a01b03811681146101a657600080fd5b9250602084013567ffffffffffffffff808211156101c357600080fd5b818601915086601f8301126101d757600080fd5b8135818111156101e657600080fd5b8760208285010111156101f857600080fd5b6020830194508093505050509250925092565b60006001820161022b57634e487b7160e01b600052601160045260246000fd5b5060010190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea2646970667358221220a59dc3bf8bb1e55549769b7a3a6a0298cc525f2ef05ada19759009590873d22664736f6c63430008110033\",\n \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100415760003560e01c806316f198311461004657806361bc221a1461005b578063a6f9885c14610076575b600080fd5b61005961005436600461017a565b61007f565b005b61006460005481565b60405190815260200160405180910390f35b61006461080081565b6001600160a01b0383166100cd5760405162461bcd60e51b815260206004820152601060248201526f24a72b20a624a22fa922a1a2a4ab22a960811b60448201526064015b60405180910390fd5b6108008111156101145760405162461bcd60e51b815260206004820152601260248201527108ab0868a8a88a6be9a82b0be988a9c8ea8960731b60448201526064016100c4565b826001600160a01b0316336001600160a01b031660008081546101369061020b565b9190508190557fedaf3c471ebd67d60c29efe34b639ede7d6a1d92eaeb3f503e784971e67118a5858560405161016d929190610232565b60405180910390a4505050565b60008060006040848603121561018f57600080fd5b83356001600160a01b03811681146101a657600080fd5b9250602084013567ffffffffffffffff808211156101c357600080fd5b818601915086601f8301126101d757600080fd5b8135818111156101e657600080fd5b8760208285010111156101f857600080fd5b6020830194508093505050509250925092565b60006001820161022b57634e487b7160e01b600052601160045260246000fd5b5060010190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea2646970667358221220a59dc3bf8bb1e55549769b7a3a6a0298cc525f2ef05ada19759009590873d22664736f6c63430008110033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n" var BLSArtifact string = "{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"BLS\",\n \"sourceName\": \"contracts/common/BLS.sol\",\n \"abi\": [\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"domain\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"message\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"expandMsgTo96\",\n \"outputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"domain\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"messages\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"hashToField\",\n \"outputs\": [\n {\n \"internalType\": \"uint256[2]\",\n \"name\": \"\",\n \"type\": \"uint256[2]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"domain\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"message\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"hashToPoint\",\n \"outputs\": [\n {\n \"internalType\": \"uint256[2]\",\n \"name\": \"\",\n \"type\": \"uint256[2]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256[2]\",\n \"name\": \"point\",\n \"type\": \"uint256[2]\"\n }\n ],\n \"name\": \"isOnCurveG1\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"_isOnCurve\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256[4]\",\n \"name\": \"point\",\n \"type\": \"uint256[4]\"\n }\n ],\n \"name\": \"isOnCurveG2\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"_isOnCurve\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256[2]\",\n \"name\": \"signature\",\n \"type\": \"uint256[2]\"\n }\n ],\n \"name\": \"isValidSignature\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_x\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"mapToPoint\",\n \"outputs\": [\n {\n \"internalType\": \"uint256[2]\",\n \"name\": \"p\",\n \"type\": \"uint256[2]\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256[2]\",\n \"name\": \"signature\",\n \"type\": \"uint256[2]\"\n },\n {\n \"internalType\": \"uint256[4][]\",\n \"name\": \"pubkeys\",\n \"type\": \"uint256[4][]\"\n },\n {\n \"internalType\": \"uint256[2][]\",\n \"name\": \"messages\",\n \"type\": \"uint256[2][]\"\n }\n ],\n \"name\": \"verifyMultiple\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"checkResult\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"callSuccess\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256[2]\",\n \"name\": \"signature\",\n \"type\": \"uint256[2]\"\n },\n {\n \"internalType\": \"uint256[4][]\",\n \"name\": \"pubkeys\",\n \"type\": \"uint256[4][]\"\n },\n {\n \"internalType\": \"uint256[2]\",\n \"name\": \"message\",\n \"type\": \"uint256[2]\"\n }\n ],\n \"name\": \"verifyMultipleSameMsg\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"checkResult\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"callSuccess\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256[2]\",\n \"name\": \"signature\",\n \"type\": \"uint256[2]\"\n },\n {\n \"internalType\": \"uint256[4]\",\n \"name\": \"pubkey\",\n \"type\": \"uint256[4]\"\n },\n {\n \"internalType\": \"uint256[2]\",\n \"name\": \"message\",\n \"type\": \"uint256[2]\"\n }\n ],\n \"name\": \"verifySingle\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x608060405234801561001057600080fd5b50612e62806100206000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806391ec2d2b1161006657806391ec2d2b1461013b578063a850a9091461015b578063d58e77331461016e578063e242cce914610181578063ebbdac911461019457600080fd5b8063115000fe146100a3578063247dd9fb146100cb5780633e5476ce146100de5780638669026f146101085780639141376314610128575b600080fd5b6100b66100b13660046127eb565b6101a7565b60405190151581526020015b60405180910390f35b6100b66100d9366004612869565b61030e565b6100f16100ec366004612926565b6103b8565b6040805192151583529015156020830152016100c2565b61011b6101163660046129b5565b6107e8565b6040516100c29190612a3f565b6100f1610136366004612a70565b610904565b61014e6101493660046129b5565b610dee565b6040516100c29190612b6f565b61011b6101693660046129b5565b61108b565b61011b61017c366004612b89565b61126d565b6100b661018f366004612869565b611643565b6100f16101a2366004612ba2565b6116a2565b600081516020830151600080516020612e0d833981519152828309600080516020612e0d8339815191528283098182830101600080516020612e0d8339815191528283840108600080516020612e0d8339815191528682600080516020612e0d83398151915203860109935050600080516020612e0d8339815191528483600080516020612e0d833981519152038301099150600080516020612e0d8339815191527f2b149d40ceb8aaae81be18991be06ac3b5b4c5e559dbefa33267e6dc24a138e584089450600080516020612e0d8339815191527e9713b03af0fed4cd2cafadeed8fdf4a74fa084e52d1852e4a2bd0685c315d2830893506040870151925060608701519150600080516020612e0d8339815191528083600080516020612e0d833981519152038508600080516020612e0d833981519152848608099050600080516020612e0d833981519152828460011b0994149290931491909116949350505050565b8051600090600080516020612e0d83398151915211158061034157506020820151600080516020612e0d83398151915211155b1561034e57506000919050565b60405163e242cce960e01b8152309063e242cce990610371908590600401612a3f565b602060405180830381865afa15801561038e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b29190612c05565b92915050565b60008083806103e25760405162461bcd60e51b81526004016103d990612c27565b60405180910390fd5b60006103ef826001612c7e565b6103fa906006612c91565b905060008167ffffffffffffffff8111156104175761041761277b565b604051908082528060200260200182016040528015610440578160200160208202803683370190505b50905088600060200201358160008151811061045e5761045e612bef565b602090810291909101015288600160200201358160018151811061048457610484612bef565b6020026020010181815250507f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2816002815181106104c4576104c4612bef565b6020026020010181815250507f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed8160038151811061050457610504612bef565b6020026020010181815250507f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec8160048151811061054457610544612bef565b6020026020010181815250507f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d8160058151811061058457610584612bef565b60200260200101818152505060005b838110156107a3578635826105a9836006612c91565b6105b4906006612c7e565b815181106105c4576105c4612bef565b60209081029190910101528660016020020135826105e3836006612c91565b6105ee906007612c7e565b815181106105fe576105fe612bef565b60200260200101818152505088888281811061061c5761061c612bef565b90506080020160016004811061063457610634612bef565b602002013582610645836006612c91565b610650906008612c7e565b8151811061066057610660612bef565b60200260200101818152505088888281811061067e5761067e612bef565b90506080020160006004811061069657610696612bef565b6020020135826106a7836006612c91565b6106b2906009612c7e565b815181106106c2576106c2612bef565b6020026020010181815250508888828181106106e0576106e0612bef565b9050608002016003600481106106f8576106f8612bef565b602002013582610709836006612c91565b61071490600a612c7e565b8151811061072457610724612bef565b60200260200101818152505088888281811061074257610742612bef565b90506080020160026004811061075a5761075a612bef565b60200201358261076b836006612c91565b61077690600b612c7e565b8151811061078657610786612bef565b60209081029190910101528061079b81612ca8565b915050610593565b506107ac612721565b602081602085026020850160085afa9450846107d25760008095509550505050506107df565b5115159450600193505050505b94509492505050565b6107f061273f565b6040516391ec2d2b60e01b815260009030906391ec2d2b906108189087908790600401612cc1565b600060405180830381865afa158015610835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261085d9190810190612ce2565b9050600080600080601885016001600160c01b0381511693506030860190506001600160c01b038151169450600080516020612e0d83398151915285600080516020612e0d833981519152600160c01b870908604887015160608801516001600160c01b0390811697501694509250600080516020612e0d83398151915290508481600160c01b860908604080518082019091529283526020830152509695505050505050565b60008084806109255760405162461bcd60e51b81526004016103d990612c27565b8084146109925760405162461bcd60e51b815260206004820152603560248201527f424c533a206e756d626572206f66207075626c6963206b65797320616e64206d604482015274195cdcd859d95cc81b5d5cdd08189948195c5d585b605a1b60648201526084016103d9565b600061099f826001612c7e565b6109aa906006612c91565b905060008167ffffffffffffffff8111156109c7576109c761277b565b6040519080825280602002602001820160405280156109f0578160200160208202803683370190505b509050896000602002013581600081518110610a0e57610a0e612bef565b6020908102919091010152896001602002013581600181518110610a3457610a34612bef565b6020026020010181815250507f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281600281518110610a7457610a74612bef565b6020026020010181815250507f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81600381518110610ab457610ab4612bef565b6020026020010181815250507f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81600481518110610af457610af4612bef565b6020026020010181815250507f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d81600581518110610b3457610b34612bef565b60200260200101818152505060005b83811015610da857878782818110610b5d57610b5d612bef565b905060400201600060028110610b7557610b75612bef565b602002013582610b86836006612c91565b610b91906006612c7e565b81518110610ba157610ba1612bef565b602002602001018181525050878782818110610bbf57610bbf612bef565b905060400201600160028110610bd757610bd7612bef565b602002013582610be8836006612c91565b610bf3906007612c7e565b81518110610c0357610c03612bef565b602002602001018181525050898982818110610c2157610c21612bef565b905060800201600160048110610c3957610c39612bef565b602002013582610c4a836006612c91565b610c55906008612c7e565b81518110610c6557610c65612bef565b602002602001018181525050898982818110610c8357610c83612bef565b905060800201600060048110610c9b57610c9b612bef565b602002013582610cac836006612c91565b610cb7906009612c7e565b81518110610cc757610cc7612bef565b602002602001018181525050898982818110610ce557610ce5612bef565b905060800201600360048110610cfd57610cfd612bef565b602002013582610d0e836006612c91565b610d1990600a612c7e565b81518110610d2957610d29612bef565b602002602001018181525050898982818110610d4757610d47612bef565b905060800201600260048110610d5f57610d5f612bef565b602002013582610d70836006612c91565b610d7b90600b612c7e565b81518110610d8b57610d8b612bef565b602090810291909101015280610da081612ca8565b915050610b43565b50610db1612721565b602081602085026020850160085afa945084610dd7576000809550955050505050610de4565b5115159450600193505050505b9550959350505050565b80516060906000610e00826020612c7e565b610e0b906040612c7e565b610e16906004612c7e565b67ffffffffffffffff811115610e2e57610e2e61277b565b6040519080825280601f01601f191660200182016040528015610e58576020820181803683370190505b5060408051606080825260808201909252919250600091906020820181803683370190505090506060820160005b84811015610ea05760208188018101518383015201610e86565b5083016000815360010160608153600101600081536001810187905260210160208153506000600283604051610ed69190612d59565b602060405180830381855afa158015610ef3573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610f169190612d75565b9050600060429450848452816020850152600160408501536041840188905260206061850153600284604051610f4c9190612d59565b602060405180830381855afa158015610f69573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610f8c9190612d75565b905080602084015280821880602086015250600260408501536041840188905260206061850153600284604051610fc39190612d59565b602060405180830381855afa158015610fe0573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906110039190612d75565b90508060408401528082188060208601525060036040850153604184018890526020606185015360028460405161103a9190612d59565b602060405180830381855afa158015611057573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061107a9190612d75565b606084015250909695505050505050565b61109361273f565b604051638669026f60e01b81526000903090638669026f906110bb9087908790600401612cc1565b6040805180830381865afa1580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fb9190612d8e565b805160405163d58e773360e01b81526004810191909152909150600090309063d58e7733906024016040805180830381865afa15801561113f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111639190612d8e565b602083015160405163d58e773360e01b81526004810191909152909150600090309063d58e7733906024016040805180830381865afa1580156111aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ce9190612d8e565b90506111d861275d565b825181526020808401518282015282516040808401919091529083015160608301526000908460808460066107d05a03fa9050808061121357fe5b50806112615760405162461bcd60e51b815260206004820152601760248201527f424c533a20626e206164642063616c6c206661696c656400000000000000000060448201526064016103d9565b50919695505050505050565b61127561273f565b600080516020612e0d83398151915282106112de5760405162461bcd60e51b815260206004820152602360248201527f6d6170546f506f696e7446543a20696e76616c6964206669656c6420656c656d604482015262195b9d60ea1b60648201526084016103d9565b8160006112ea82611871565b9150506000600080516020612e0d8339815191528061130b5761130b612de3565b8384099050600080516020612e0d8339815191526004820890506000600080516020612e0d83398151915277b3c4d79d41a91759a9e4c7e359b6b89eaec68e62effffffd850990506000600080516020612e0d83398151915283830990506113728161189a565b9050600080516020612e0d8339815191528283099150600080516020612e0d8339815191528183099150600080516020612e0d8339815191528286099150600080516020612e0d8339815191526113d783600080516020612e0d833981519152612df9565b7759e26bcea0d48bacd4f263f1acdb5c4f5763473177fffffe089450600080516020612e0d8339815191528586099150600080516020612e0d8339815191528583099150600080516020612e0d833981519152600383089150600061143b83611871565b9093509050801561148357846114665761146383600080516020612e0d833981519152612df9565b92505b505060408051808201909152938452602084015250909392505050565b600080516020612e0d833981519152600187086114ae90600080516020612e0d833981519152612df9565b9550600080516020612e0d8339815191528687099250600080516020612e0d8339815191528684099250600080516020612e0d8339815191526003840892506114f683611871565b9093509050801561151e57846114665761146383600080516020612e0d833981519152612df9565b600080516020612e0d8339815191528485099550600080516020612e0d8339815191528687099550600080516020612e0d8339815191528287099550600080516020612e0d8339815191528287099550600080516020612e0d833981519152600187089550600080516020612e0d8339815191528687099250600080516020612e0d8339815191528684099250600080516020612e0d8339815191526003840892506115c983611871565b9093509050806116265760405162461bcd60e51b815260206004820152602260248201527f424c533a20626164206674206d617070696e6720696d706c656d656e7461746960448201526137b760f11b60648201526084016103d9565b846114665761146383600080516020612e0d833981519152612df9565b600081516020830151600080516020612e0d833981519152828309600080516020612e0d8339815191528382099050600080516020612e0d833981519152600382089050600080516020612e0d83398151915282830914949350505050565b6000806000604051806101800160405280876000600281106116c6576116c6612bef565b60200201358152602001876001600281106116e3576116e3612bef565b602002013581526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d81526020018560006002811061179857611798612bef565b60200201358152602001856001600281106117b5576117b5612bef565b60200201358152602001866001600481106117d2576117d2612bef565b60200201358152602001866000600481106117ef576117ef612bef565b602002013581526020018660036004811061180c5761180c612bef565b602002013581526020018660026004811061182957611829612bef565b60200201359052905061183a612721565b60006020826101808560085afa90508061185d5760008094509450505050611869565b50511515925060019150505b935093915050565b60008061187d836118a5565b915082600080516020612e0d833981519152838409149050915091565b60006103b282611fda565b6000600080516020612e0d8339815191528083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508584880996508587880996508587880996508587880996508587880996508587880996508581880996505050505050808283099392505050565b6000600080516020612e0d8339815191528083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996505050838586099450838586099450838586099450838586099450838186099450508284850993508284850993508284850993508281850993508284850993508284850993508285850993508284850993508284850993508284850993508284850993508284850993508284850993508281850995945050505050565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156127b4576127b461277b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156127e3576127e361277b565b604052919050565b6000608082840312156127fd57600080fd5b82601f83011261280c57600080fd5b6040516080810181811067ffffffffffffffff8211171561282f5761282f61277b565b60405280608084018581111561284457600080fd5b845b8181101561285e578035835260209283019201612846565b509195945050505050565b60006040828403121561287b57600080fd5b82601f83011261288a57600080fd5b612892612791565b8060408401858111156128a457600080fd5b845b818110156128be5780358452602093840193016128a6565b509095945050505050565b80604081018310156103b257600080fd5b60008083601f8401126128ec57600080fd5b50813567ffffffffffffffff81111561290457600080fd5b6020830191508360208260071b850101111561291f57600080fd5b9250929050565b60008060008060a0858703121561293c57600080fd5b61294686866128c9565b9350604085013567ffffffffffffffff81111561296257600080fd5b61296e878288016128da565b9094509250612982905086606087016128c9565b905092959194509250565b600067ffffffffffffffff8211156129a7576129a761277b565b50601f01601f191660200190565b600080604083850312156129c857600080fd5b82359150602083013567ffffffffffffffff8111156129e657600080fd5b8301601f810185136129f757600080fd5b8035612a0a612a058261298d565b6127ba565b818152866020838501011115612a1f57600080fd5b816020840160208301376000602083830101528093505050509250929050565b60408101818360005b6002811015612a67578151835260209283019290910190600101612a48565b50505092915050565b600080600080600060808688031215612a8857600080fd5b612a9287876128c9565b9450604086013567ffffffffffffffff80821115612aaf57600080fd5b612abb89838a016128da565b90965094506060880135915080821115612ad457600080fd5b818801915088601f830112612ae857600080fd5b813581811115612af757600080fd5b8960208260061b8501011115612b0c57600080fd5b9699959850939650602001949392505050565b60005b83811015612b3a578181015183820152602001612b22565b50506000910152565b60008151808452612b5b816020860160208601612b1f565b601f01601f19169290920160200192915050565b602081526000612b826020830184612b43565b9392505050565b600060208284031215612b9b57600080fd5b5035919050565b60008060006101008486031215612bb857600080fd5b612bc285856128c9565b925060c0840185811115612bd557600080fd5b604085019250612be586826128c9565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612c1757600080fd5b81518015158114612b8257600080fd5b60208082526021908201527f424c533a206e756d626572206f66207075626c6963206b6579206973207a65726040820152606f60f81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156103b2576103b2612c68565b80820281158282048414176103b2576103b2612c68565b600060018201612cba57612cba612c68565b5060010190565b828152604060208201526000612cda6040830184612b43565b949350505050565b600060208284031215612cf457600080fd5b815167ffffffffffffffff811115612d0b57600080fd5b8201601f81018413612d1c57600080fd5b8051612d2a612a058261298d565b818152856020838501011115612d3f57600080fd5b612d50826020830160208601612b1f565b95945050505050565b60008251612d6b818460208701612b1f565b9190910192915050565b600060208284031215612d8757600080fd5b5051919050565b600060408284031215612da057600080fd5b82601f830112612daf57600080fd5b612db7612791565b806040840185811115612dc957600080fd5b845b818110156128be578051845260209384019301612dcb565b634e487b7160e01b600052601260045260246000fd5b818103818111156103b2576103b2612c6856fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220046fd04cf652b14b5d4629e14b0659a560d128e873764c278e0250d47ac47cde64736f6c63430008110033\",\n \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061009e5760003560e01c806391ec2d2b1161006657806391ec2d2b1461013b578063a850a9091461015b578063d58e77331461016e578063e242cce914610181578063ebbdac911461019457600080fd5b8063115000fe146100a3578063247dd9fb146100cb5780633e5476ce146100de5780638669026f146101085780639141376314610128575b600080fd5b6100b66100b13660046127eb565b6101a7565b60405190151581526020015b60405180910390f35b6100b66100d9366004612869565b61030e565b6100f16100ec366004612926565b6103b8565b6040805192151583529015156020830152016100c2565b61011b6101163660046129b5565b6107e8565b6040516100c29190612a3f565b6100f1610136366004612a70565b610904565b61014e6101493660046129b5565b610dee565b6040516100c29190612b6f565b61011b6101693660046129b5565b61108b565b61011b61017c366004612b89565b61126d565b6100b661018f366004612869565b611643565b6100f16101a2366004612ba2565b6116a2565b600081516020830151600080516020612e0d833981519152828309600080516020612e0d8339815191528283098182830101600080516020612e0d8339815191528283840108600080516020612e0d8339815191528682600080516020612e0d83398151915203860109935050600080516020612e0d8339815191528483600080516020612e0d833981519152038301099150600080516020612e0d8339815191527f2b149d40ceb8aaae81be18991be06ac3b5b4c5e559dbefa33267e6dc24a138e584089450600080516020612e0d8339815191527e9713b03af0fed4cd2cafadeed8fdf4a74fa084e52d1852e4a2bd0685c315d2830893506040870151925060608701519150600080516020612e0d8339815191528083600080516020612e0d833981519152038508600080516020612e0d833981519152848608099050600080516020612e0d833981519152828460011b0994149290931491909116949350505050565b8051600090600080516020612e0d83398151915211158061034157506020820151600080516020612e0d83398151915211155b1561034e57506000919050565b60405163e242cce960e01b8152309063e242cce990610371908590600401612a3f565b602060405180830381865afa15801561038e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b29190612c05565b92915050565b60008083806103e25760405162461bcd60e51b81526004016103d990612c27565b60405180910390fd5b60006103ef826001612c7e565b6103fa906006612c91565b905060008167ffffffffffffffff8111156104175761041761277b565b604051908082528060200260200182016040528015610440578160200160208202803683370190505b50905088600060200201358160008151811061045e5761045e612bef565b602090810291909101015288600160200201358160018151811061048457610484612bef565b6020026020010181815250507f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2816002815181106104c4576104c4612bef565b6020026020010181815250507f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed8160038151811061050457610504612bef565b6020026020010181815250507f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec8160048151811061054457610544612bef565b6020026020010181815250507f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d8160058151811061058457610584612bef565b60200260200101818152505060005b838110156107a3578635826105a9836006612c91565b6105b4906006612c7e565b815181106105c4576105c4612bef565b60209081029190910101528660016020020135826105e3836006612c91565b6105ee906007612c7e565b815181106105fe576105fe612bef565b60200260200101818152505088888281811061061c5761061c612bef565b90506080020160016004811061063457610634612bef565b602002013582610645836006612c91565b610650906008612c7e565b8151811061066057610660612bef565b60200260200101818152505088888281811061067e5761067e612bef565b90506080020160006004811061069657610696612bef565b6020020135826106a7836006612c91565b6106b2906009612c7e565b815181106106c2576106c2612bef565b6020026020010181815250508888828181106106e0576106e0612bef565b9050608002016003600481106106f8576106f8612bef565b602002013582610709836006612c91565b61071490600a612c7e565b8151811061072457610724612bef565b60200260200101818152505088888281811061074257610742612bef565b90506080020160026004811061075a5761075a612bef565b60200201358261076b836006612c91565b61077690600b612c7e565b8151811061078657610786612bef565b60209081029190910101528061079b81612ca8565b915050610593565b506107ac612721565b602081602085026020850160085afa9450846107d25760008095509550505050506107df565b5115159450600193505050505b94509492505050565b6107f061273f565b6040516391ec2d2b60e01b815260009030906391ec2d2b906108189087908790600401612cc1565b600060405180830381865afa158015610835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261085d9190810190612ce2565b9050600080600080601885016001600160c01b0381511693506030860190506001600160c01b038151169450600080516020612e0d83398151915285600080516020612e0d833981519152600160c01b870908604887015160608801516001600160c01b0390811697501694509250600080516020612e0d83398151915290508481600160c01b860908604080518082019091529283526020830152509695505050505050565b60008084806109255760405162461bcd60e51b81526004016103d990612c27565b8084146109925760405162461bcd60e51b815260206004820152603560248201527f424c533a206e756d626572206f66207075626c6963206b65797320616e64206d604482015274195cdcd859d95cc81b5d5cdd08189948195c5d585b605a1b60648201526084016103d9565b600061099f826001612c7e565b6109aa906006612c91565b905060008167ffffffffffffffff8111156109c7576109c761277b565b6040519080825280602002602001820160405280156109f0578160200160208202803683370190505b509050896000602002013581600081518110610a0e57610a0e612bef565b6020908102919091010152896001602002013581600181518110610a3457610a34612bef565b6020026020010181815250507f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281600281518110610a7457610a74612bef565b6020026020010181815250507f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81600381518110610ab457610ab4612bef565b6020026020010181815250507f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81600481518110610af457610af4612bef565b6020026020010181815250507f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d81600581518110610b3457610b34612bef565b60200260200101818152505060005b83811015610da857878782818110610b5d57610b5d612bef565b905060400201600060028110610b7557610b75612bef565b602002013582610b86836006612c91565b610b91906006612c7e565b81518110610ba157610ba1612bef565b602002602001018181525050878782818110610bbf57610bbf612bef565b905060400201600160028110610bd757610bd7612bef565b602002013582610be8836006612c91565b610bf3906007612c7e565b81518110610c0357610c03612bef565b602002602001018181525050898982818110610c2157610c21612bef565b905060800201600160048110610c3957610c39612bef565b602002013582610c4a836006612c91565b610c55906008612c7e565b81518110610c6557610c65612bef565b602002602001018181525050898982818110610c8357610c83612bef565b905060800201600060048110610c9b57610c9b612bef565b602002013582610cac836006612c91565b610cb7906009612c7e565b81518110610cc757610cc7612bef565b602002602001018181525050898982818110610ce557610ce5612bef565b905060800201600360048110610cfd57610cfd612bef565b602002013582610d0e836006612c91565b610d1990600a612c7e565b81518110610d2957610d29612bef565b602002602001018181525050898982818110610d4757610d47612bef565b905060800201600260048110610d5f57610d5f612bef565b602002013582610d70836006612c91565b610d7b90600b612c7e565b81518110610d8b57610d8b612bef565b602090810291909101015280610da081612ca8565b915050610b43565b50610db1612721565b602081602085026020850160085afa945084610dd7576000809550955050505050610de4565b5115159450600193505050505b9550959350505050565b80516060906000610e00826020612c7e565b610e0b906040612c7e565b610e16906004612c7e565b67ffffffffffffffff811115610e2e57610e2e61277b565b6040519080825280601f01601f191660200182016040528015610e58576020820181803683370190505b5060408051606080825260808201909252919250600091906020820181803683370190505090506060820160005b84811015610ea05760208188018101518383015201610e86565b5083016000815360010160608153600101600081536001810187905260210160208153506000600283604051610ed69190612d59565b602060405180830381855afa158015610ef3573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610f169190612d75565b9050600060429450848452816020850152600160408501536041840188905260206061850153600284604051610f4c9190612d59565b602060405180830381855afa158015610f69573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610f8c9190612d75565b905080602084015280821880602086015250600260408501536041840188905260206061850153600284604051610fc39190612d59565b602060405180830381855afa158015610fe0573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906110039190612d75565b90508060408401528082188060208601525060036040850153604184018890526020606185015360028460405161103a9190612d59565b602060405180830381855afa158015611057573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061107a9190612d75565b606084015250909695505050505050565b61109361273f565b604051638669026f60e01b81526000903090638669026f906110bb9087908790600401612cc1565b6040805180830381865afa1580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fb9190612d8e565b805160405163d58e773360e01b81526004810191909152909150600090309063d58e7733906024016040805180830381865afa15801561113f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111639190612d8e565b602083015160405163d58e773360e01b81526004810191909152909150600090309063d58e7733906024016040805180830381865afa1580156111aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ce9190612d8e565b90506111d861275d565b825181526020808401518282015282516040808401919091529083015160608301526000908460808460066107d05a03fa9050808061121357fe5b50806112615760405162461bcd60e51b815260206004820152601760248201527f424c533a20626e206164642063616c6c206661696c656400000000000000000060448201526064016103d9565b50919695505050505050565b61127561273f565b600080516020612e0d83398151915282106112de5760405162461bcd60e51b815260206004820152602360248201527f6d6170546f506f696e7446543a20696e76616c6964206669656c6420656c656d604482015262195b9d60ea1b60648201526084016103d9565b8160006112ea82611871565b9150506000600080516020612e0d8339815191528061130b5761130b612de3565b8384099050600080516020612e0d8339815191526004820890506000600080516020612e0d83398151915277b3c4d79d41a91759a9e4c7e359b6b89eaec68e62effffffd850990506000600080516020612e0d83398151915283830990506113728161189a565b9050600080516020612e0d8339815191528283099150600080516020612e0d8339815191528183099150600080516020612e0d8339815191528286099150600080516020612e0d8339815191526113d783600080516020612e0d833981519152612df9565b7759e26bcea0d48bacd4f263f1acdb5c4f5763473177fffffe089450600080516020612e0d8339815191528586099150600080516020612e0d8339815191528583099150600080516020612e0d833981519152600383089150600061143b83611871565b9093509050801561148357846114665761146383600080516020612e0d833981519152612df9565b92505b505060408051808201909152938452602084015250909392505050565b600080516020612e0d833981519152600187086114ae90600080516020612e0d833981519152612df9565b9550600080516020612e0d8339815191528687099250600080516020612e0d8339815191528684099250600080516020612e0d8339815191526003840892506114f683611871565b9093509050801561151e57846114665761146383600080516020612e0d833981519152612df9565b600080516020612e0d8339815191528485099550600080516020612e0d8339815191528687099550600080516020612e0d8339815191528287099550600080516020612e0d8339815191528287099550600080516020612e0d833981519152600187089550600080516020612e0d8339815191528687099250600080516020612e0d8339815191528684099250600080516020612e0d8339815191526003840892506115c983611871565b9093509050806116265760405162461bcd60e51b815260206004820152602260248201527f424c533a20626164206674206d617070696e6720696d706c656d656e7461746960448201526137b760f11b60648201526084016103d9565b846114665761146383600080516020612e0d833981519152612df9565b600081516020830151600080516020612e0d833981519152828309600080516020612e0d8339815191528382099050600080516020612e0d833981519152600382089050600080516020612e0d83398151915282830914949350505050565b6000806000604051806101800160405280876000600281106116c6576116c6612bef565b60200201358152602001876001600281106116e3576116e3612bef565b602002013581526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d81526020018560006002811061179857611798612bef565b60200201358152602001856001600281106117b5576117b5612bef565b60200201358152602001866001600481106117d2576117d2612bef565b60200201358152602001866000600481106117ef576117ef612bef565b602002013581526020018660036004811061180c5761180c612bef565b602002013581526020018660026004811061182957611829612bef565b60200201359052905061183a612721565b60006020826101808560085afa90508061185d5760008094509450505050611869565b50511515925060019150505b935093915050565b60008061187d836118a5565b915082600080516020612e0d833981519152838409149050915091565b60006103b282611fda565b6000600080516020612e0d8339815191528083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508584880996508587880996508587880996508587880996508587880996508587880996508581880996505050505050808283099392505050565b6000600080516020612e0d8339815191528083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996505050838586099450838586099450838586099450838586099450838186099450508284850993508284850993508284850993508281850993508284850993508284850993508285850993508284850993508284850993508284850993508284850993508284850993508284850993508281850995945050505050565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156127b4576127b461277b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156127e3576127e361277b565b604052919050565b6000608082840312156127fd57600080fd5b82601f83011261280c57600080fd5b6040516080810181811067ffffffffffffffff8211171561282f5761282f61277b565b60405280608084018581111561284457600080fd5b845b8181101561285e578035835260209283019201612846565b509195945050505050565b60006040828403121561287b57600080fd5b82601f83011261288a57600080fd5b612892612791565b8060408401858111156128a457600080fd5b845b818110156128be5780358452602093840193016128a6565b509095945050505050565b80604081018310156103b257600080fd5b60008083601f8401126128ec57600080fd5b50813567ffffffffffffffff81111561290457600080fd5b6020830191508360208260071b850101111561291f57600080fd5b9250929050565b60008060008060a0858703121561293c57600080fd5b61294686866128c9565b9350604085013567ffffffffffffffff81111561296257600080fd5b61296e878288016128da565b9094509250612982905086606087016128c9565b905092959194509250565b600067ffffffffffffffff8211156129a7576129a761277b565b50601f01601f191660200190565b600080604083850312156129c857600080fd5b82359150602083013567ffffffffffffffff8111156129e657600080fd5b8301601f810185136129f757600080fd5b8035612a0a612a058261298d565b6127ba565b818152866020838501011115612a1f57600080fd5b816020840160208301376000602083830101528093505050509250929050565b60408101818360005b6002811015612a67578151835260209283019290910190600101612a48565b50505092915050565b600080600080600060808688031215612a8857600080fd5b612a9287876128c9565b9450604086013567ffffffffffffffff80821115612aaf57600080fd5b612abb89838a016128da565b90965094506060880135915080821115612ad457600080fd5b818801915088601f830112612ae857600080fd5b813581811115612af757600080fd5b8960208260061b8501011115612b0c57600080fd5b9699959850939650602001949392505050565b60005b83811015612b3a578181015183820152602001612b22565b50506000910152565b60008151808452612b5b816020860160208601612b1f565b601f01601f19169290920160200192915050565b602081526000612b826020830184612b43565b9392505050565b600060208284031215612b9b57600080fd5b5035919050565b60008060006101008486031215612bb857600080fd5b612bc285856128c9565b925060c0840185811115612bd557600080fd5b604085019250612be586826128c9565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612c1757600080fd5b81518015158114612b8257600080fd5b60208082526021908201527f424c533a206e756d626572206f66207075626c6963206b6579206973207a65726040820152606f60f81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156103b2576103b2612c68565b80820281158282048414176103b2576103b2612c68565b600060018201612cba57612cba612c68565b5060010190565b828152604060208201526000612cda6040830184612b43565b949350505050565b600060208284031215612cf457600080fd5b815167ffffffffffffffff811115612d0b57600080fd5b8201601f81018413612d1c57600080fd5b8051612d2a612a058261298d565b818152856020838501011115612d3f57600080fd5b612d50826020830160208601612b1f565b95945050505050565b60008251612d6b818460208701612b1f565b9190910192915050565b600060208284031215612d8757600080fd5b5051919050565b600060408284031215612da057600080fd5b82601f830112612daf57600080fd5b612db7612791565b806040840185811115612dc957600080fd5b845b818110156128be578051845260209384019301612dcb565b634e487b7160e01b600052601260045260246000fd5b818103818111156103b2576103b2612c6856fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220046fd04cf652b14b5d4629e14b0659a560d128e873764c278e0250d47ac47cde64736f6c63430008110033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n" var BN256G2Artifact string = "{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"BN256G2\",\n \"sourceName\": \"contracts/common/BN256G2.sol\",\n \"abi\": [\n {\n \"inputs\": [],\n \"name\": \"G2_NEG_X_IM\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"G2_NEG_X_RE\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"G2_NEG_Y_IM\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"G2_NEG_Y_RE\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"pt1xx\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"pt1xy\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"pt1yx\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"pt1yy\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"pt2xx\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"pt2xy\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"pt2yx\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"pt2yy\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ecTwistAdd\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"s\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"pt1xx\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"pt1xy\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"pt1yx\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"pt1yy\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ecTwistMul\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getFieldModulus\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x608060405234801561001057600080fd5b50610e0d806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80639b0c399a1161005b5780639b0c399a146100f7578063ad50f9c11461011e578063cbe96a5014610145578063defbcdee1461017857600080fd5b80635120675214610082578063779d890d146100bc578063783bde80146100d0575b600080fd5b6100a97f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d81565b6040519081526020015b60405180910390f35b600080516020610db88339815191526100a9565b6100a97f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281565b6100a97f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81565b6100a97f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81565b610158610153366004610c9c565b61018b565b6040805194855260208501939093529183015260608201526080016100b3565b610158610186366004610cf1565b61032a565b60008080808b15801561019c57508a155b80156101a6575089155b80156101b0575088155b1561021a57871580156101c1575086155b80156101cb575085155b80156101d5575084155b61020a576101e5888888886103c1565b61020a5760405162461bcd60e51b815260040161020190610d2c565b60405180910390fd5b508692508591508490508361031b565b87158015610226575086155b8015610230575085155b801561023a575084155b156102775761024b8c8c8c8c6103c1565b6102675760405162461bcd60e51b815260040161020190610d2c565b508a92508991508890508761031b565b6102838c8c8c8c6103c1565b61029f5760405162461bcd60e51b815260040161020190610d2c565b6102ab888888886103c1565b6102c75760405162461bcd60e51b815260040161020190610d2c565b60006102e18d8d8d8d600160008f8f8f8f60016000610476565b90506103118160005b602090810291909101519083015160408401516060850151608086015160a0870151610701565b9450945094509450505b98509850985098945050505050565b600080808060018815801561033d575087155b8015610347575086155b8015610351575085155b15610365575060019750879550600061038d565b610371898989896103c1565b61038d5760405162461bcd60e51b815260040161020190610d2c565b600061039f8b8b8b8b8b87600061076c565b90506103ac8160006102ea565b929e919d509b50909950975050505050505050565b60008060008060006103d5878789896107ef565b90945092506103e6898981816107ef565b90925090506103f782828b8b6107ef565b909250905061040884848484610860565b909450925061045884847f2b149d40ceb8aaae81be18991be06ac3b5b4c5e559dbefa33267e6dc24a138e57e9713b03af0fed4cd2cafadeed8fdf4a74fa084e52d1852e4a2bd0685c315d2610860565b909450925083158015610469575082155b9998505050505050505050565b61047e610c60565b8815801561048a575087155b156104cc578686868686868660005b60a089019290925260808801929092526060870192909252604086019290925260208581019390935290910201526106f1565b821580156104d8575081155b156104eb578c8c8c8c8c8c866000610499565b6104f785858b8b6107ef565b90955093506105088b8b85856107ef565b6060830152604082015261051e87878b8b6107ef565b909750955061052f8d8d85856107ef565b60a0830152608082018190528714801561054c575060a081015186145b15610591576040810151851480156105675750606081015184145b156105825761057a8d8d8d8d8d8d6108a2565b866000610499565b60016000818180808681610499565b61059d898985856107ef565b90935091506105bd858583600260200201518460035b6020020151610860565b909d509b506105d887878360045b60200201518460056105b3565b909b5099506105e98b8b81816107ef565b909950975061060a89898360045b60200201518460055b60200201516107ef565b909550935061061b89898d8d6107ef565b909950975061062c898985856107ef565b60a083015260808201526106428d8d81816107ef565b9097509550610653878785856107ef565b909750955061066487878b8b610860565b909750955061067585856002610aea565b909350915061068687878585610860565b90975095506106978b8b89896107ef565b602083015281526106aa85858989610860565b909b5099506106bb8d8d8d8d6107ef565b909b5099506106d589898360026020020151846003610600565b909d509b506106e68b8b8f8f610860565b606083015260408201525b9c9b505050505050505050505050565b600080600080600080610712610c7e565b61071c8989610b1d565b909350915061072d8d8d85856107ef565b602083015281526107408b8b85856107ef565b60608301819052604083018290528251602090930151929f929e50909c509a5098505050505050505050565b610774610c60565b87156107e45760018816156107b5578051602082015160408301516060840151608085015160a08601516107b29594939291908d8d8d8d8d8d610476565b90505b6107c38787878787876108a2565b949b509299509097509550935091506107dd600289610d6e565b9750610774565b979650505050505050565b60008061082d600080516020610db8833981519152858809600080516020610db8833981519152858809600080516020610db8833981519152610ba8565b600080516020610db883398151915280868809600080516020610db8833981519152868a09089150915094509492505050565b60008061087c8685600080516020610db8833981519152610ba8565b6108958685600080516020610db8833981519152610ba8565b9150915094509492505050565b6000806000806000806108b3610c60565b6108bf8d8d6003610aea565b602083018190528183526108d591908f8f6107ef565b602083015281526108e88b8b8b8b6107ef565b90995097506108f98d8d8d8d6107ef565b606083015260408201819052610919908260035b60200201518b8b6107ef565b60608301526040820152805161093c908260015b60200201518351846001610600565b6040830151919e509c5061095a908260035b60200201516008610aea565b60a083015260808201526109718d8d8360046105cb565b909d509b50610982898981816107ef565b60a08301526080820152604081015160608201516109a291906004610aea565b60608301819052604083018290526109bc91908f8f610860565b6060830152604082018190526109d49082600361092d565b606083015260408201526109ea8b8b6008610aea565b60208301819052818352610a0091908d8d6107ef565b60208301819052818352610a1791908360046105f7565b602083015280825260408201516060830151610a35928460016105b3565b60608301526040820152610a4b8d8d6002610aea565b6020830152808252610a5f9082600161090d565b60208301528152610a7389898360046105f7565b60a083015260808201819052610a8b9082600561094e565b826004602002018360056020020191909152528060006020020151816001602002015182600260200201518360036020020151846004602002015185600560200201519650965096509650965096505096509650965096509650969050565b600080600080516020610db8833981519152838609600080516020610db883398151915284860991509150935093915050565b60008080610b5e600080516020610db883398151915280878809600080516020610db883398151915287880908600080516020610db8833981519152610bcc565b9050600080516020610db8833981519152818609600080516020610db8833981519152828609610b9c90600080516020610db8833981519152610d90565b92509250509250929050565b60008180610bb857610bb8610d58565b610bc28484610d90565b8508949350505050565b60008060405160208152602080820152602060408201528460608201526002840360808201528360a082015260208160c08360056107d05a03fa90519250905080610c595760405162461bcd60e51b815260206004820152601a60248201527f6572726f722077697468206d6f64756c617220696e76657273650000000000006044820152606401610201565b5092915050565b6040518060c001604052806006906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b600080600080600080600080610100898b031215610cb957600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b600080600080600060a08688031215610d0957600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b602080825260129082015271706f696e74206e6f7420696e20637572766560701b604082015260600190565b634e487b7160e01b600052601260045260246000fd5b600082610d8b57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610db157634e487b7160e01b600052601160045260246000fd5b9291505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a26469706673582212201adcf05e36cc0972d841126d8c6be8c04faf8e0e619d376b86d705cbb30a1c2864736f6c63430008110033\",\n \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80639b0c399a1161005b5780639b0c399a146100f7578063ad50f9c11461011e578063cbe96a5014610145578063defbcdee1461017857600080fd5b80635120675214610082578063779d890d146100bc578063783bde80146100d0575b600080fd5b6100a97f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d81565b6040519081526020015b60405180910390f35b600080516020610db88339815191526100a9565b6100a97f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281565b6100a97f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81565b6100a97f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81565b610158610153366004610c9c565b61018b565b6040805194855260208501939093529183015260608201526080016100b3565b610158610186366004610cf1565b61032a565b60008080808b15801561019c57508a155b80156101a6575089155b80156101b0575088155b1561021a57871580156101c1575086155b80156101cb575085155b80156101d5575084155b61020a576101e5888888886103c1565b61020a5760405162461bcd60e51b815260040161020190610d2c565b60405180910390fd5b508692508591508490508361031b565b87158015610226575086155b8015610230575085155b801561023a575084155b156102775761024b8c8c8c8c6103c1565b6102675760405162461bcd60e51b815260040161020190610d2c565b508a92508991508890508761031b565b6102838c8c8c8c6103c1565b61029f5760405162461bcd60e51b815260040161020190610d2c565b6102ab888888886103c1565b6102c75760405162461bcd60e51b815260040161020190610d2c565b60006102e18d8d8d8d600160008f8f8f8f60016000610476565b90506103118160005b602090810291909101519083015160408401516060850151608086015160a0870151610701565b9450945094509450505b98509850985098945050505050565b600080808060018815801561033d575087155b8015610347575086155b8015610351575085155b15610365575060019750879550600061038d565b610371898989896103c1565b61038d5760405162461bcd60e51b815260040161020190610d2c565b600061039f8b8b8b8b8b87600061076c565b90506103ac8160006102ea565b929e919d509b50909950975050505050505050565b60008060008060006103d5878789896107ef565b90945092506103e6898981816107ef565b90925090506103f782828b8b6107ef565b909250905061040884848484610860565b909450925061045884847f2b149d40ceb8aaae81be18991be06ac3b5b4c5e559dbefa33267e6dc24a138e57e9713b03af0fed4cd2cafadeed8fdf4a74fa084e52d1852e4a2bd0685c315d2610860565b909450925083158015610469575082155b9998505050505050505050565b61047e610c60565b8815801561048a575087155b156104cc578686868686868660005b60a089019290925260808801929092526060870192909252604086019290925260208581019390935290910201526106f1565b821580156104d8575081155b156104eb578c8c8c8c8c8c866000610499565b6104f785858b8b6107ef565b90955093506105088b8b85856107ef565b6060830152604082015261051e87878b8b6107ef565b909750955061052f8d8d85856107ef565b60a0830152608082018190528714801561054c575060a081015186145b15610591576040810151851480156105675750606081015184145b156105825761057a8d8d8d8d8d8d6108a2565b866000610499565b60016000818180808681610499565b61059d898985856107ef565b90935091506105bd858583600260200201518460035b6020020151610860565b909d509b506105d887878360045b60200201518460056105b3565b909b5099506105e98b8b81816107ef565b909950975061060a89898360045b60200201518460055b60200201516107ef565b909550935061061b89898d8d6107ef565b909950975061062c898985856107ef565b60a083015260808201526106428d8d81816107ef565b9097509550610653878785856107ef565b909750955061066487878b8b610860565b909750955061067585856002610aea565b909350915061068687878585610860565b90975095506106978b8b89896107ef565b602083015281526106aa85858989610860565b909b5099506106bb8d8d8d8d6107ef565b909b5099506106d589898360026020020151846003610600565b909d509b506106e68b8b8f8f610860565b606083015260408201525b9c9b505050505050505050505050565b600080600080600080610712610c7e565b61071c8989610b1d565b909350915061072d8d8d85856107ef565b602083015281526107408b8b85856107ef565b60608301819052604083018290528251602090930151929f929e50909c509a5098505050505050505050565b610774610c60565b87156107e45760018816156107b5578051602082015160408301516060840151608085015160a08601516107b29594939291908d8d8d8d8d8d610476565b90505b6107c38787878787876108a2565b949b509299509097509550935091506107dd600289610d6e565b9750610774565b979650505050505050565b60008061082d600080516020610db8833981519152858809600080516020610db8833981519152858809600080516020610db8833981519152610ba8565b600080516020610db883398151915280868809600080516020610db8833981519152868a09089150915094509492505050565b60008061087c8685600080516020610db8833981519152610ba8565b6108958685600080516020610db8833981519152610ba8565b9150915094509492505050565b6000806000806000806108b3610c60565b6108bf8d8d6003610aea565b602083018190528183526108d591908f8f6107ef565b602083015281526108e88b8b8b8b6107ef565b90995097506108f98d8d8d8d6107ef565b606083015260408201819052610919908260035b60200201518b8b6107ef565b60608301526040820152805161093c908260015b60200201518351846001610600565b6040830151919e509c5061095a908260035b60200201516008610aea565b60a083015260808201526109718d8d8360046105cb565b909d509b50610982898981816107ef565b60a08301526080820152604081015160608201516109a291906004610aea565b60608301819052604083018290526109bc91908f8f610860565b6060830152604082018190526109d49082600361092d565b606083015260408201526109ea8b8b6008610aea565b60208301819052818352610a0091908d8d6107ef565b60208301819052818352610a1791908360046105f7565b602083015280825260408201516060830151610a35928460016105b3565b60608301526040820152610a4b8d8d6002610aea565b6020830152808252610a5f9082600161090d565b60208301528152610a7389898360046105f7565b60a083015260808201819052610a8b9082600561094e565b826004602002018360056020020191909152528060006020020151816001602002015182600260200201518360036020020151846004602002015185600560200201519650965096509650965096505096509650965096509650969050565b600080600080516020610db8833981519152838609600080516020610db883398151915284860991509150935093915050565b60008080610b5e600080516020610db883398151915280878809600080516020610db883398151915287880908600080516020610db8833981519152610bcc565b9050600080516020610db8833981519152818609600080516020610db8833981519152828609610b9c90600080516020610db8833981519152610d90565b92509250509250929050565b60008180610bb857610bb8610d58565b610bc28484610d90565b8508949350505050565b60008060405160208152602080820152602060408201528460608201526002840360808201528360a082015260208160c08360056107d05a03fa90519250905080610c595760405162461bcd60e51b815260206004820152601a60248201527f6572726f722077697468206d6f64756c617220696e76657273650000000000006044820152606401610201565b5092915050565b6040518060c001604052806006906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b600080600080600080600080610100898b031215610cb957600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b600080600080600060a08688031215610d0957600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b602080825260129082015271706f696e74206e6f7420696e20637572766560701b604082015260600190565b634e487b7160e01b600052601260045260246000fd5b600082610d8b57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610db157634e487b7160e01b600052601160045260246000fd5b9291505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a26469706673582212201adcf05e36cc0972d841126d8c6be8c04faf8e0e619d376b86d705cbb30a1c2864736f6c63430008110033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n" +var MerkleArtifact string = "{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"Merkle\",\n \"sourceName\": \"contracts/common/Merkle.sol\",\n \"abi\": [],\n \"bytecode\": \"0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ad9437774f8ba57da87d896ee6746b63a34f690f0d580c71b53b1867c28e290e64736f6c63430008110033\",\n \"deployedBytecode\": \"0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ad9437774f8ba57da87d896ee6746b63a34f690f0d580c71b53b1867c28e290e64736f6c63430008110033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n" var StateReceiverArtifact string = "{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"StateReceiver\",\n \"sourceName\": \"contracts/child/StateReceiver.sol\",\n \"abi\": [\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"only\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"Unauthorized\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"startId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"endId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"root\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"NewCommitment\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"counter\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bool\",\n \"name\": \"status\",\n \"type\": \"bool\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes\",\n \"name\": \"message\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"StateSyncResult\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"NATIVE_TOKEN_CONTRACT\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"NATIVE_TRANSFER_PRECOMPILE\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"NATIVE_TRANSFER_PRECOMPILE_GAS\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"SYSTEM\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"VALIDATOR_PKCHECK_PRECOMPILE\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"VALIDATOR_PKCHECK_PRECOMPILE_GAS\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32[][]\",\n \"name\": \"proofs\",\n \"type\": \"bytes32[][]\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"id\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"receiver\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"internalType\": \"struct StateReceiver.StateSync[]\",\n \"name\": \"objs\",\n \"type\": \"tuple[]\"\n }\n ],\n \"name\": \"batchExecute\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"startId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"endId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"root\",\n \"type\": \"bytes32\"\n }\n ],\n \"internalType\": \"struct StateReceiver.StateSyncCommitment\",\n \"name\": \"commitment\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"signature\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"bitmap\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"commit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"commitmentCounter\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"commitmentIds\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"commitments\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"startId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"endId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"root\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32[]\",\n \"name\": \"proof\",\n \"type\": \"bytes32[]\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"id\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"receiver\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"internalType\": \"struct StateReceiver.StateSync\",\n \"name\": \"obj\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"execute\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"id\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getCommitmentByStateSyncId\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"startId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"endId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"root\",\n \"type\": \"bytes32\"\n }\n ],\n \"internalType\": \"struct StateReceiver.StateSyncCommitment\",\n \"name\": \"\",\n \"type\": \"tuple\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"id\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getRootByStateSyncId\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"lastCommittedId\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"processedStateSyncs\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x608060405234801561001057600080fd5b5061138f806100206000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639017c12711610097578063c59a18f711610066578063c59a18f71461022d578063c6df461714610240578063e0563ab114610253578063eb70ef441461025c57600080fd5b80639017c127146101fe578063947287cf1461021157806397e5230d1461021a578063ad240c2a1461022457600080fd5b806349ce8997116100d357806349ce89971461015e57806350d5b95b146101a857806351351d53146101bd578063544c5e0f146101cb57600080fd5b8063196f1b2d1461010557806323e281cf1461012b578063284017f5146101345780633b878c2214610155575b600080fd5b610118610113366004610d0d565b610291565b6040519081526020015b60405180910390f35b61011860325481565b61013d61202081565b6040516001600160a01b039091168152602001610122565b61013d61101081565b61018d61016c366004610d0d565b60356020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610122565b6101bb6101b6366004610d72565b610310565b005b61013d6002600160a01b0381565b6101ee6101d9366004610d0d565b60346020526000908152604090205460ff1681565b6040519015158152602001610122565b6101bb61020c366004610de2565b6103ba565b61011861520881565b610118620249f081565b61011860335481565b61011861023b366004610d0d565b61053e565b6101bb61024e366004610e90565b61055f565b61013d61203081565b61026f61026a366004610d0d565b610743565b6040805182518152602080840151908201529181015190820152606001610122565b6000806035816102a2603686610806565b815260208101919091526040016000206002015490508061030a5760405162461bcd60e51b815260206004820152601d60248201527f537461746552656365697665723a204e4f5f524f4f545f464f525f494400000060448201526064015b60405180910390fd5b92915050565b600061031c8235610743565b805190915061036f90610330908435610f2f565b82604001518686866040516020016103489190610f87565b604051602081830303815290604052805190602001206108b390949392919063ffffffff16565b6103ab5760405162461bcd60e51b815260206004820152600d60248201526c24a72b20a624a22fa82927a7a360991b6044820152606401610301565b6103b4826109cc565b50505050565b8281811461041d5760405162461bcd60e51b815260206004820152602a60248201527f537461746552656365697665723a20554e4d4154434845445f4c454e4754485f604482015269504152414d455445525360b01b6064820152608401610301565b60005b8181101561053657600061045785858481811061043f5761043f611024565b9050602002810190610451919061103a565b35610743565b905060006104ef826000015187878681811061047557610475611024565b9050602002810190610487919061103a565b610492919035610f2f565b83604001518a8a878181106104a9576104a9611024565b90506020028101906104bb919061105a565b8a8a898181106104cd576104cd611024565b90506020028101906104df919061103a565b6040516020016103489190610f87565b905080610500575050600101610420565b61052c86868581811061051557610515611024565b9050602002810190610527919061103a565b6109cc565b5050600101610420565b505050505050565b6036818154811061054e57600080fd5b600091825260209091200154905081565b336002600160a01b03146105a35760405163973d02cb60e01b815260206004820152600a60248201526914d654d5115350d0531360b21b6044820152606401610301565b6033546105b19060016110a4565b8535146105f35760405162461bcd60e51b815260206004820152601060248201526f1253959053125117d4d510549517d25160821b6044820152606401610301565b8435602086013510156106395760405162461bcd60e51b815260206004820152600e60248201526d1253959053125117d1539117d25160921b6044820152606401610301565b6040805186356020808301919091528701358183015290860135606082015261067e906080016040516020818303038152906040528051906020012085858585610be7565b60328054869160359160009182610694836110b7565b90915550815260208082019290925260409081016000208335815591830135600183015582013560028201555050603680546001810182556000919091526020868101357f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b89092018290556033829055604080519088013581528735917f11efd893530b26afc66d488ff54cb15df117cb6e0e4a08c6dcb166d766c3bf3b910160405180910390a35050505050565b604080516060810182526000808252602082018190529181018290529061076b603684610806565b60365490915081036107cb5760405162461bcd60e51b815260206004820152602360248201527f537461746552656365697665723a204e4f5f434f4d4d49544d454e545f464f5260448201526217d25160ea1b6064820152608401610301565b600090815260356020908152604091829020825160608101845281548152600182015492810192909252600201549181019190915292915050565b815460009081036108195750600061030a565b82546000905b808210156108665760006108338383610ceb565b6000878152602090209091508590820154111561085257809150610860565b61085d8160016110a4565b92505b5061081f565b60008211801561089257508361088f86610881600186610f2f565b600091825260209091200190565b54145b156108ab576108a2600183610f2f565b9250505061030a565b509392505050565b6000816108c18160026111b4565b86106109045760405162461bcd60e51b81526020600482015260126024820152710929cac82989288be988a828cbe929c888ab60731b6044820152606401610301565b8660005b828110156109be57600086868381811061092457610924611024565b90506020020135905060028961093a91906111d6565b60000361097257604080516020810185905290810182905260600160405160208183030381529060405280519060200120925061099f565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b6109aa60028a6111ea565b985050806109b7906110b7565b9050610908565b509094149695505050505050565b803560009081526034602052604090205460ff1615610a3c5760405162461bcd60e51b815260206004820152602660248201527f537461746552656365697665723a2053544154455f53594e435f49535f50524f60448201526510d154d4d15160d21b6064820152608401610301565b610a4c60608201604083016111fe565b6001600160a01b03163b600003610aa0576040805160208082526000908201819052918335917f31c652130602f3ce96ceaf8a4c2b8b49f049166c6fcf2eb31943a75ec7c936ae910160405180910390a350565b8035600090815260346020526040808220805460ff191660011790558190610ace90606085019085016111fe565b6001600160a01b03168335610ae960408601602087016111fe565b610af66060870187611219565b604051602401610b099493929190611260565b60408051601f198184030181529181526020820180516001600160e01b031663eeb4994560e01b17905251610b3e91906112b9565b6000604051808303816000865af19150503d8060008114610b7b576040519150601f19603f3d011682016040523d82523d6000602084013e610b80565b606091505b509150915081610ba35782356000908152603460205260409020805460ff191690555b81151583600001357f31c652130602f3ce96ceaf8a4c2b8b49f049166c6fcf2eb31943a75ec7c936ae83604051610bda91906112cb565b60405180910390a3505050565b6000806120306001600160a01b0316620249f08888888888604051602001610c139594939291906112fe565b60408051601f1981840301815290829052610c2d916112b9565b6000604051808303818686fa925050503d8060008114610c69576040519150601f19603f3d011682016040523d82523d6000602084013e610c6e565b606091505b5091509150600081806020019051810190610c899190611337565b9050828015610c955750805b610ce15760405162461bcd60e51b815260206004820152601d60248201527f5349474e41545552455f564552494649434154494f4e5f4641494c45440000006044820152606401610301565b5050505050505050565b6000610cfa60028484186111ea565b610d06908484166110a4565b9392505050565b600060208284031215610d1f57600080fd5b5035919050565b60008083601f840112610d3857600080fd5b50813567ffffffffffffffff811115610d5057600080fd5b6020830191508360208260051b8501011115610d6b57600080fd5b9250929050565b600080600060408486031215610d8757600080fd5b833567ffffffffffffffff80821115610d9f57600080fd5b610dab87838801610d26565b90955093506020860135915080821115610dc457600080fd5b50840160808187031215610dd757600080fd5b809150509250925092565b60008060008060408587031215610df857600080fd5b843567ffffffffffffffff80821115610e1057600080fd5b610e1c88838901610d26565b90965094506020870135915080821115610e3557600080fd5b50610e4287828801610d26565b95989497509550505050565b60008083601f840112610e6057600080fd5b50813567ffffffffffffffff811115610e7857600080fd5b602083019150836020828501011115610d6b57600080fd5b600080600080600085870360a0811215610ea957600080fd5b6060811215610eb757600080fd5b50859450606086013567ffffffffffffffff80821115610ed657600080fd5b610ee289838a01610e4e565b90965094506080880135915080821115610efb57600080fd5b50610f0888828901610e4e565b969995985093965092949392505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561030a5761030a610f19565b80356001600160a01b0381168114610f5957600080fd5b919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152813560208201526000610fa060208401610f42565b60018060a01b03808216604085015280610fbc60408701610f42565b16606085015250506060830135601e19843603018112610fdb57600080fd5b830160208101903567ffffffffffffffff811115610ff857600080fd5b80360382131561100757600080fd5b60808085015261101b60a085018284610f5e565b95945050505050565b634e487b7160e01b600052603260045260246000fd5b60008235607e1983360301811261105057600080fd5b9190910192915050565b6000808335601e1984360301811261107157600080fd5b83018035915067ffffffffffffffff82111561108c57600080fd5b6020019150600581901b3603821315610d6b57600080fd5b8082018082111561030a5761030a610f19565b6000600182016110c9576110c9610f19565b5060010190565b600181815b8085111561110b5781600019048211156110f1576110f1610f19565b808516156110fe57918102915b93841c93908002906110d5565b509250929050565b6000826111225750600161030a565b8161112f5750600061030a565b8160018114611145576002811461114f5761116b565b600191505061030a565b60ff84111561116057611160610f19565b50506001821b61030a565b5060208310610133831016604e8410600b841016171561118e575081810a61030a565b61119883836110d0565b80600019048211156111ac576111ac610f19565b029392505050565b6000610d068383611113565b634e487b7160e01b600052601260045260246000fd5b6000826111e5576111e56111c0565b500690565b6000826111f9576111f96111c0565b500490565b60006020828403121561121057600080fd5b610d0682610f42565b6000808335601e1984360301811261123057600080fd5b83018035915067ffffffffffffffff82111561124b57600080fd5b602001915036819003821315610d6b57600080fd5b8481526001600160a01b038416602082015260606040820181905260009061128b9083018486610f5e565b9695505050505050565b60005b838110156112b0578181015183820152602001611298565b50506000910152565b60008251611050818460208701611295565b60208152600082518060208401526112ea816040850160208701611295565b601f01601f19169190910160400192915050565b858152606060208201526000611318606083018688610f5e565b828103604084015261132b818587610f5e565b98975050505050505050565b60006020828403121561134957600080fd5b81518015158114610d0657600080fdfea2646970667358221220e4320091d29a9d374eeaa9fa7392305588d9cc74b80955bf333949db7c99053a64736f6c63430008110033\",\n \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106101005760003560e01c80639017c12711610097578063c59a18f711610066578063c59a18f71461022d578063c6df461714610240578063e0563ab114610253578063eb70ef441461025c57600080fd5b80639017c127146101fe578063947287cf1461021157806397e5230d1461021a578063ad240c2a1461022457600080fd5b806349ce8997116100d357806349ce89971461015e57806350d5b95b146101a857806351351d53146101bd578063544c5e0f146101cb57600080fd5b8063196f1b2d1461010557806323e281cf1461012b578063284017f5146101345780633b878c2214610155575b600080fd5b610118610113366004610d0d565b610291565b6040519081526020015b60405180910390f35b61011860325481565b61013d61202081565b6040516001600160a01b039091168152602001610122565b61013d61101081565b61018d61016c366004610d0d565b60356020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610122565b6101bb6101b6366004610d72565b610310565b005b61013d6002600160a01b0381565b6101ee6101d9366004610d0d565b60346020526000908152604090205460ff1681565b6040519015158152602001610122565b6101bb61020c366004610de2565b6103ba565b61011861520881565b610118620249f081565b61011860335481565b61011861023b366004610d0d565b61053e565b6101bb61024e366004610e90565b61055f565b61013d61203081565b61026f61026a366004610d0d565b610743565b6040805182518152602080840151908201529181015190820152606001610122565b6000806035816102a2603686610806565b815260208101919091526040016000206002015490508061030a5760405162461bcd60e51b815260206004820152601d60248201527f537461746552656365697665723a204e4f5f524f4f545f464f525f494400000060448201526064015b60405180910390fd5b92915050565b600061031c8235610743565b805190915061036f90610330908435610f2f565b82604001518686866040516020016103489190610f87565b604051602081830303815290604052805190602001206108b390949392919063ffffffff16565b6103ab5760405162461bcd60e51b815260206004820152600d60248201526c24a72b20a624a22fa82927a7a360991b6044820152606401610301565b6103b4826109cc565b50505050565b8281811461041d5760405162461bcd60e51b815260206004820152602a60248201527f537461746552656365697665723a20554e4d4154434845445f4c454e4754485f604482015269504152414d455445525360b01b6064820152608401610301565b60005b8181101561053657600061045785858481811061043f5761043f611024565b9050602002810190610451919061103a565b35610743565b905060006104ef826000015187878681811061047557610475611024565b9050602002810190610487919061103a565b610492919035610f2f565b83604001518a8a878181106104a9576104a9611024565b90506020028101906104bb919061105a565b8a8a898181106104cd576104cd611024565b90506020028101906104df919061103a565b6040516020016103489190610f87565b905080610500575050600101610420565b61052c86868581811061051557610515611024565b9050602002810190610527919061103a565b6109cc565b5050600101610420565b505050505050565b6036818154811061054e57600080fd5b600091825260209091200154905081565b336002600160a01b03146105a35760405163973d02cb60e01b815260206004820152600a60248201526914d654d5115350d0531360b21b6044820152606401610301565b6033546105b19060016110a4565b8535146105f35760405162461bcd60e51b815260206004820152601060248201526f1253959053125117d4d510549517d25160821b6044820152606401610301565b8435602086013510156106395760405162461bcd60e51b815260206004820152600e60248201526d1253959053125117d1539117d25160921b6044820152606401610301565b6040805186356020808301919091528701358183015290860135606082015261067e906080016040516020818303038152906040528051906020012085858585610be7565b60328054869160359160009182610694836110b7565b90915550815260208082019290925260409081016000208335815591830135600183015582013560028201555050603680546001810182556000919091526020868101357f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b89092018290556033829055604080519088013581528735917f11efd893530b26afc66d488ff54cb15df117cb6e0e4a08c6dcb166d766c3bf3b910160405180910390a35050505050565b604080516060810182526000808252602082018190529181018290529061076b603684610806565b60365490915081036107cb5760405162461bcd60e51b815260206004820152602360248201527f537461746552656365697665723a204e4f5f434f4d4d49544d454e545f464f5260448201526217d25160ea1b6064820152608401610301565b600090815260356020908152604091829020825160608101845281548152600182015492810192909252600201549181019190915292915050565b815460009081036108195750600061030a565b82546000905b808210156108665760006108338383610ceb565b6000878152602090209091508590820154111561085257809150610860565b61085d8160016110a4565b92505b5061081f565b60008211801561089257508361088f86610881600186610f2f565b600091825260209091200190565b54145b156108ab576108a2600183610f2f565b9250505061030a565b509392505050565b6000816108c18160026111b4565b86106109045760405162461bcd60e51b81526020600482015260126024820152710929cac82989288be988a828cbe929c888ab60731b6044820152606401610301565b8660005b828110156109be57600086868381811061092457610924611024565b90506020020135905060028961093a91906111d6565b60000361097257604080516020810185905290810182905260600160405160208183030381529060405280519060200120925061099f565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b6109aa60028a6111ea565b985050806109b7906110b7565b9050610908565b509094149695505050505050565b803560009081526034602052604090205460ff1615610a3c5760405162461bcd60e51b815260206004820152602660248201527f537461746552656365697665723a2053544154455f53594e435f49535f50524f60448201526510d154d4d15160d21b6064820152608401610301565b610a4c60608201604083016111fe565b6001600160a01b03163b600003610aa0576040805160208082526000908201819052918335917f31c652130602f3ce96ceaf8a4c2b8b49f049166c6fcf2eb31943a75ec7c936ae910160405180910390a350565b8035600090815260346020526040808220805460ff191660011790558190610ace90606085019085016111fe565b6001600160a01b03168335610ae960408601602087016111fe565b610af66060870187611219565b604051602401610b099493929190611260565b60408051601f198184030181529181526020820180516001600160e01b031663eeb4994560e01b17905251610b3e91906112b9565b6000604051808303816000865af19150503d8060008114610b7b576040519150601f19603f3d011682016040523d82523d6000602084013e610b80565b606091505b509150915081610ba35782356000908152603460205260409020805460ff191690555b81151583600001357f31c652130602f3ce96ceaf8a4c2b8b49f049166c6fcf2eb31943a75ec7c936ae83604051610bda91906112cb565b60405180910390a3505050565b6000806120306001600160a01b0316620249f08888888888604051602001610c139594939291906112fe565b60408051601f1981840301815290829052610c2d916112b9565b6000604051808303818686fa925050503d8060008114610c69576040519150601f19603f3d011682016040523d82523d6000602084013e610c6e565b606091505b5091509150600081806020019051810190610c899190611337565b9050828015610c955750805b610ce15760405162461bcd60e51b815260206004820152601d60248201527f5349474e41545552455f564552494649434154494f4e5f4641494c45440000006044820152606401610301565b5050505050505050565b6000610cfa60028484186111ea565b610d06908484166110a4565b9392505050565b600060208284031215610d1f57600080fd5b5035919050565b60008083601f840112610d3857600080fd5b50813567ffffffffffffffff811115610d5057600080fd5b6020830191508360208260051b8501011115610d6b57600080fd5b9250929050565b600080600060408486031215610d8757600080fd5b833567ffffffffffffffff80821115610d9f57600080fd5b610dab87838801610d26565b90955093506020860135915080821115610dc457600080fd5b50840160808187031215610dd757600080fd5b809150509250925092565b60008060008060408587031215610df857600080fd5b843567ffffffffffffffff80821115610e1057600080fd5b610e1c88838901610d26565b90965094506020870135915080821115610e3557600080fd5b50610e4287828801610d26565b95989497509550505050565b60008083601f840112610e6057600080fd5b50813567ffffffffffffffff811115610e7857600080fd5b602083019150836020828501011115610d6b57600080fd5b600080600080600085870360a0811215610ea957600080fd5b6060811215610eb757600080fd5b50859450606086013567ffffffffffffffff80821115610ed657600080fd5b610ee289838a01610e4e565b90965094506080880135915080821115610efb57600080fd5b50610f0888828901610e4e565b969995985093965092949392505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561030a5761030a610f19565b80356001600160a01b0381168114610f5957600080fd5b919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152813560208201526000610fa060208401610f42565b60018060a01b03808216604085015280610fbc60408701610f42565b16606085015250506060830135601e19843603018112610fdb57600080fd5b830160208101903567ffffffffffffffff811115610ff857600080fd5b80360382131561100757600080fd5b60808085015261101b60a085018284610f5e565b95945050505050565b634e487b7160e01b600052603260045260246000fd5b60008235607e1983360301811261105057600080fd5b9190910192915050565b6000808335601e1984360301811261107157600080fd5b83018035915067ffffffffffffffff82111561108c57600080fd5b6020019150600581901b3603821315610d6b57600080fd5b8082018082111561030a5761030a610f19565b6000600182016110c9576110c9610f19565b5060010190565b600181815b8085111561110b5781600019048211156110f1576110f1610f19565b808516156110fe57918102915b93841c93908002906110d5565b509250929050565b6000826111225750600161030a565b8161112f5750600061030a565b8160018114611145576002811461114f5761116b565b600191505061030a565b60ff84111561116057611160610f19565b50506001821b61030a565b5060208310610133831016604e8410600b841016171561118e575081810a61030a565b61119883836110d0565b80600019048211156111ac576111ac610f19565b029392505050565b6000610d068383611113565b634e487b7160e01b600052601260045260246000fd5b6000826111e5576111e56111c0565b500690565b6000826111f9576111f96111c0565b500490565b60006020828403121561121057600080fd5b610d0682610f42565b6000808335601e1984360301811261123057600080fd5b83018035915067ffffffffffffffff82111561124b57600080fd5b602001915036819003821315610d6b57600080fd5b8481526001600160a01b038416602082015260606040820181905260009061128b9083018486610f5e565b9695505050505050565b60005b838110156112b0578181015183820152602001611298565b50506000910152565b60008251611050818460208701611295565b60208152600082518060208401526112ea816040850160208701611295565b601f01601f19169190910160400192915050565b858152606060208201526000611318606083018688610f5e565b828103604084015261132b818587610f5e565b98975050505050505050565b60006020828403121561134957600080fd5b81518015158114610d0657600080fdfea2646970667358221220e4320091d29a9d374eeaa9fa7392305588d9cc74b80955bf333949db7c99053a64736f6c63430008110033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n" var StateSenderArtifact string = "{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"StateSender\",\n \"sourceName\": \"contracts/root/StateSender.sol\",\n \"abi\": [\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"id\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"receiver\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"StateSynced\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"MAX_LENGTH\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"counter\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"receiver\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"syncState\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x608060405234801561001057600080fd5b50610297806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806316f198311461004657806361bc221a1461005b578063a6f9885c14610076575b600080fd5b61005961005436600461017a565b61007f565b005b61006460005481565b60405190815260200160405180910390f35b61006461080081565b6001600160a01b0383166100cd5760405162461bcd60e51b815260206004820152601060248201526f24a72b20a624a22fa922a1a2a4ab22a960811b60448201526064015b60405180910390fd5b6108008111156101145760405162461bcd60e51b815260206004820152601260248201527108ab0868a8a88a6be9a82b0be988a9c8ea8960731b60448201526064016100c4565b826001600160a01b0316336001600160a01b031660008081546101369061020b565b9190508190557fd1d7f6609674cc5871fdb4b0bcd4f0a214118411de9e38983866514f22659165858560405161016d929190610232565b60405180910390a4505050565b60008060006040848603121561018f57600080fd5b83356001600160a01b03811681146101a657600080fd5b9250602084013567ffffffffffffffff808211156101c357600080fd5b818601915086601f8301126101d757600080fd5b8135818111156101e657600080fd5b8760208285010111156101f857600080fd5b6020830194508093505050509250925092565b60006001820161022b57634e487b7160e01b600052601160045260246000fd5b5060010190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea26469706673582212205a1ba30322d7585ff3ef32240bc1cf527147c769cbeaf0c55fdf5523649a36ae64736f6c63430008110033\",\n \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100415760003560e01c806316f198311461004657806361bc221a1461005b578063a6f9885c14610076575b600080fd5b61005961005436600461017a565b61007f565b005b61006460005481565b60405190815260200160405180910390f35b61006461080081565b6001600160a01b0383166100cd5760405162461bcd60e51b815260206004820152601060248201526f24a72b20a624a22fa922a1a2a4ab22a960811b60448201526064015b60405180910390fd5b6108008111156101145760405162461bcd60e51b815260206004820152601260248201527108ab0868a8a88a6be9a82b0be988a9c8ea8960731b60448201526064016100c4565b826001600160a01b0316336001600160a01b031660008081546101369061020b565b9190508190557fd1d7f6609674cc5871fdb4b0bcd4f0a214118411de9e38983866514f22659165858560405161016d929190610232565b60405180910390a4505050565b60008060006040848603121561018f57600080fd5b83356001600160a01b03811681146101a657600080fd5b9250602084013567ffffffffffffffff808211156101c357600080fd5b818601915086601f8301126101d757600080fd5b8135818111156101e657600080fd5b8760208285010111156101f857600080fd5b6020830194508093505050509250925092565b60006001820161022b57634e487b7160e01b600052601160045260246000fd5b5060010190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea26469706673582212205a1ba30322d7585ff3ef32240bc1cf527147c769cbeaf0c55fdf5523649a36ae64736f6c63430008110033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n" var ChildValidatorSetArtifact string = "{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"ChildValidatorSet\",\n \"sourceName\": \"contracts/child/ChildValidatorSet.sol\",\n \"abi\": [\n {\n \"inputs\": [],\n \"name\": \"AmountZero\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Exists\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"signer\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"InvalidSignature\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"NoTokensDelegated\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"NotFound\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"src\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"msg\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"StakeRequirement\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"only\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"Unauthorized\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AddedToWhitelist\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"oldCommission\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"newCommission\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"CommissionUpdated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"delegator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Delegated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"delegator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bool\",\n \"name\": \"restake\",\n \"type\": \"bool\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"DelegatorRewardClaimed\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"DelegatorRewardDistributed\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"key\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"epoch\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"pbftRound\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"DoubleSignerSlashed\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint8\",\n \"name\": \"version\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"Initialized\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"id\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"startBlock\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"endBlock\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"epochRoot\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"NewEpoch\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256[4]\",\n \"name\": \"blsKey\",\n \"type\": \"uint256[4]\"\n }\n ],\n \"name\": \"NewValidator\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferStarted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RemovedFromWhitelist\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Staked\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"delegator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Undelegated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Unstaked\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ValidatorRewardClaimed\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ValidatorRewardDistributed\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Withdrawal\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"WithdrawalRegistered\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"ACTIVE_VALIDATOR_SET_SIZE\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"DOMAIN\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"DOUBLE_SIGNING_SLASHING_PERCENT\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MAX_COMMISSION\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"NATIVE_TOKEN_CONTRACT\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"NATIVE_TRANSFER_PRECOMPILE\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"NATIVE_TRANSFER_PRECOMPILE_GAS\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"SYSTEM\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"VALIDATOR_PKCHECK_PRECOMPILE\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"VALIDATOR_PKCHECK_PRECOMPILE_GAS\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"WITHDRAWAL_WAIT_PERIOD\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"acceptOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"whitelistAddreses\",\n \"type\": \"address[]\"\n }\n ],\n \"name\": \"addToWhitelist\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"bls\",\n \"outputs\": [\n {\n \"internalType\": \"contract IBLS\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"restake\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"claimDelegatorReward\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"claimValidatorReward\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"id\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"startBlock\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"endBlock\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"epochRoot\",\n \"type\": \"bytes32\"\n }\n ],\n \"internalType\": \"struct Epoch\",\n \"name\": \"epoch\",\n \"type\": \"tuple\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"epochId\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"signedBlocks\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct UptimeData[]\",\n \"name\": \"uptimeData\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"totalBlocks\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct Uptime\",\n \"name\": \"uptime\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"commitEpoch\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"curEpochId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"blockNumber\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"pbftRound\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"startBlock\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"endBlock\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"epochRoot\",\n \"type\": \"bytes32\"\n }\n ],\n \"internalType\": \"struct Epoch\",\n \"name\": \"epoch\",\n \"type\": \"tuple\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"epochId\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"signedBlocks\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct UptimeData[]\",\n \"name\": \"uptimeData\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"totalBlocks\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct Uptime\",\n \"name\": \"uptime\",\n \"type\": \"tuple\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"epochId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"eventRoot\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"currentValidatorSetHash\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"nextValidatorSetHash\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"blockHash\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"bitmap\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"signature\",\n \"type\": \"bytes\"\n }\n ],\n \"internalType\": \"struct IChildValidatorSetBase.DoubleSignerSlashingInput[]\",\n \"name\": \"inputs\",\n \"type\": \"tuple[]\"\n }\n ],\n \"name\": \"commitEpochWithDoubleSignerSlashing\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"currentEpochId\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"restake\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"delegate\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"delegator\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"delegationOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"doubleSignerSlashes\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"epochEndBlocks\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"epochReward\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"epochSize\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"epochs\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"startBlock\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"endBlock\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"epochRoot\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getCurrentValidatorSet\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"delegator\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"getDelegatorReward\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"blockNumber\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getEpochByBlock\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"startBlock\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"endBlock\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"epochRoot\",\n \"type\": \"bytes32\"\n }\n ],\n \"internalType\": \"struct Epoch\",\n \"name\": \"\",\n \"type\": \"tuple\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"getValidator\",\n \"outputs\": [\n {\n \"internalType\": \"uint256[4]\",\n \"name\": \"blsKey\",\n \"type\": \"uint256[4]\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"stake\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"totalStake\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"commission\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"withdrawableRewards\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"active\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"getValidatorReward\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"epochReward\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"minStake\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"minDelegation\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"epochSize\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct IChildValidatorSetBase.InitStruct\",\n \"name\": \"init\",\n \"type\": \"tuple\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"addr\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256[4]\",\n \"name\": \"pubkey\",\n \"type\": \"uint256[4]\"\n },\n {\n \"internalType\": \"uint256[2]\",\n \"name\": \"signature\",\n \"type\": \"uint256[2]\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"stake\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct IChildValidatorSetBase.ValidatorInit[]\",\n \"name\": \"validators\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"contract IBLS\",\n \"name\": \"newBls\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"governance\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"minDelegation\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"minStake\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"pendingOwner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"pendingWithdrawals\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256[2]\",\n \"name\": \"signature\",\n \"type\": \"uint256[2]\"\n },\n {\n \"internalType\": \"uint256[4]\",\n \"name\": \"pubkey\",\n \"type\": \"uint256[4]\"\n }\n ],\n \"name\": \"register\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"whitelistAddreses\",\n \"type\": \"address[]\"\n }\n ],\n \"name\": \"removeFromWhitelist\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"newCommission\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setCommission\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"n\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"sortedValidators\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"stake\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalActiveStake\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"activeStake\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"totalDelegationOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalStake\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"totalStakeOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"validator\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"undelegate\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"unstake\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"whitelist\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"withdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"withdrawable\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x608060405234801561001057600080fd5b50615d7680620000216000396000f3fe60806040526004361061031a5760003560e01c8063715018a6116101ab578063a2562ddd116100f7578063e0563ab111610095578063ea0fee4f1161006f578063ea0fee4f1461093f578063eacdc5ff14610954578063f2fde38b1461096a578063f3f437031461098a57600080fd5b8063e0563ab1146108eb578063e30c397814610901578063e3f56eaa1461091f57600080fd5b8063a90049d0116100d1578063a90049d014610854578063ae97dde8146103b6578063c6b61e4c14610874578063ce513b6f146108cb57600080fd5b8063a2562ddd146107ff578063a2b915e21461081f578063a77af2291461083f57600080fd5b8063947287cf11610164578063982ef0a71161013e578063982ef0a7146107875780639a91e6d71461079a5780639b19251a146107af578063a1580879146107df57600080fd5b8063947287cf1461073a57806395b0b0271461075057806397e5230d1461077057600080fd5b8063715018a61461066b57806378f619321461068057806379ba5097146106d25780637f649783146106e75780638b0e9f3f146107075780638da5cb5b1461071c57600080fd5b80633a4b66f11161026a57806351351d5311610223578063548db174116101fd578063548db174146105f55780635689762f14610615578063572d356e14610635578063628da5271461064b57600080fd5b806351351d531461058657806351cff8d9146105a157806352a9674b146105c157600080fd5b80633a4b66f1146104c65780633b878c22146104ce5780633fd50001146104e4578063410899c91461050457806346df33d2146105245780634d99dd161461056657600080fd5b80632153f7fa116102d75780632e17de78116102b15780632e17de781461045057806333378ada14610470578063355e6b4314610490578063375b3c0a146104b057600080fd5b80632153f7fa146103ed578063284017f51461040d57806328f731481461043b57600080fd5b80630209fdd01461031f578063029859921461034a5780631604e4161461036e5780631904bb2e146103845780631bce714d146103b65780631f6590b8146103cb575b600080fd5b34801561032b57600080fd5b506103346109aa565b6040516103419190615255565b60405180910390f35b34801561035657600080fd5b5061036060055481565b604051908152602001610341565b34801561037a57600080fd5b5061036060035481565b34801561039057600080fd5b506103a461039f3660046152c2565b6109bb565b604051610341969594939291906152df565b3480156103c257600080fd5b50610360606481565b3480156103d757600080fd5b506103eb6103e6366004615336565b610a8e565b005b3480156103f957600080fd5b50610334610408366004615378565b610b8b565b34801561041957600080fd5b5061042361202081565b6040516001600160a01b039091168152602001610341565b34801561044757600080fd5b50610360610c97565b34801561045c57600080fd5b506103eb61046b366004615378565b610d65565b34801561047c57600080fd5b5061036061048b3660046152c2565b610e8b565b34801561049c57600080fd5b506103eb6104ab366004615378565b610ea2565b3480156104bc57600080fd5b5061036060045481565b6103eb610f89565b3480156104da57600080fd5b5061042361101081565b3480156104f057600080fd5b506103606104ff366004615378565b611084565b34801561051057600080fd5b506103eb61051f3660046153a3565b6110a5565b34801561053057600080fd5b5061054461053f366004615378565b611342565b6040805182518152602080840151908201529181015190820152606001610341565b34801561057257600080fd5b506103eb6105813660046153fb565b6113ba565b34801561059257600080fd5b506104236002600160a01b0381565b3480156105ad57600080fd5b506103eb6105bc3660046152c2565b6114c5565b3480156105cd57600080fd5b506103607ffd10bf199d0185af9cce2005e6acc8d19924428058ac3374e16f18c97569b4ee81565b34801561060157600080fd5b506103eb61061036600461546c565b6115f5565b34801561062157600080fd5b506103606106303660046154ae565b61164e565b34801561064157600080fd5b5061036060005481565b34801561065757600080fd5b506103606106663660046154ae565b61166e565b34801561067757600080fd5b506103eb611685565b34801561068c57600080fd5b506106c261069b3660046154dc565b61013e60209081526000938452604080852082529284528284209052825290205460ff1681565b6040519015158152602001610341565b3480156106de57600080fd5b506103eb611699565b3480156106f357600080fd5b506103eb61070236600461546c565b611710565b34801561071357600080fd5b50600954610360565b34801561072857600080fd5b506076546001600160a01b0316610423565b34801561074657600080fd5b5061036061520881565b34801561075c57600080fd5b50600654610423906001600160a01b031681565b34801561077c57600080fd5b50610360620249f081565b6103eb610795366004615523565b611764565b3480156107a657600080fd5b506103eb6117c0565b3480156107bb57600080fd5b506106c26107ca3660046152c2565b60106020526000908152604090205460ff1681565b3480156107eb57600080fd5b506103eb6107fa366004615551565b611825565b34801561080b57600080fd5b506103eb61081a366004615601565b611b10565b34801561082b57600080fd5b5061036061083a3660046152c2565b611e9f565b34801561084b57600080fd5b50610360600a81565b34801561086057600080fd5b506103eb61086f366004615523565b611eb3565b34801561088057600080fd5b506108b061088f366004615378565b600f6020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610341565b3480156108d757600080fd5b506103606108e63660046152c2565b611f54565b3480156108f757600080fd5b5061042361203081565b34801561090d57600080fd5b5060a8546001600160a01b0316610423565b34801561092b57600080fd5b5061036061093a3660046152c2565b611f82565b34801561094b57600080fd5b50610360600181565b34801561096057600080fd5b5061036060015481565b34801561097657600080fd5b506103eb6109853660046152c2565b611f8f565b34801561099657600080fd5b506103606109a53660046152c2565b612000565b60606109b66064610b8b565b905090565b6109c361517c565b600080808080806109d5600789612027565b604080516101208101909152908160a081018260048282826020028201915b8154815260200190600101908083116109f45750505091835250506004820154602080830191909152600583015460408301526006830154606083015260079283015460ff1615156080909201919091528251908301519099509750909150610a5d9089612045565b546020820151610a6d91906156b1565b94508060400151935080606001519250806080015191505091939550919395565b3360009081526010602052604090205460ff16610adf5760405163973d02cb60e01b815260206004820152600960248201526815d2125511531254d560ba1b60448201526064015b60405180910390fd5b610aea338383612063565b604080516101208101909152610b3d9033908060a0810185600482826080808284376000920182905250928452505060208201819052604082018190526060820152600160809091015260079190612121565b610b46336124d3565b336001600160a01b03167fcab5c47e498c5b85fd42d656842253cfe070f7648c3a198275347b47dec5d27b82604051610b7f91906156c4565b60405180910390a25050565b60606000600760010154831115610ba457600854610ba6565b825b905060008167ffffffffffffffff811115610bc357610bc36156d3565b604051908082528060200260200182016040528015610bec578160200160208202803683370190505b50905081600003610bfe579392505050565b6000610c0a600761251c565b90508082600081518110610c2057610c206156e9565b6001600160a01b039092166020928302919091019091015260015b83811015610c8d57610c4e60078361257d565b915081838281518110610c6357610c636156e9565b6001600160a01b039092166020928302919091019091015280610c85816156ff565b915050610c3b565b5090949350505050565b60008060076001015460641115610cb057600854610cb3565b60645b905080600003610cc557600091505090565b6000610cd1600761251c565b9050610cde600782612045565b54610cea600783612027565b60040154610cf891906156b1565b610d0290846156b1565b925060015b82811015610d5f57610d1a60078361257d565b9150610d27600783612045565b54610d33600784612027565b60040154610d4191906156b1565b610d4b90856156b1565b935080610d57816156ff565b915050610d07565b50505090565b6000610d72600c3361267f565b336000908152600a6020526040902060070154610d8f9190615718565b90506000610d9c836126dc565b905081811315610dbf576040516396906e6360e01b8152600401610ad690615738565b6000610dcb8284615792565b905060045481128015610ddd57508015155b15610dfb576040516396906e6360e01b8152600401610ad6906157b2565b610e036117c0565b610e1e33610e1384600019615805565b600c919060006126ef565b80600003610e46576000610e33600733612027565b600701805460ff19169115159190911790555b610e5033856127f8565b60405184815233907f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f759060200160405180910390a250505050565b6000610e98600783612027565b6006015492915050565b610ead600733612027565b6007015460ff16610eed5760405163973d02cb60e01b81526020600482015260096024820152682b20a624a220aa27a960b91b6044820152606401610ad6565b6064811115610f335760405162461bcd60e51b815260206004820152601260248201527124a72b20a624a22fa1a7a6a6a4a9a9a4a7a760711b6044820152606401610ad6565b6000610f40600733612027565b6005810154604080519182526020820185905291925033917f6e500db30ce535d38852e318f333e9be41a3fec6c65d234ebb06203c896db9a5910160405180910390a260050155565b610f94600733612027565b6007015460ff16610fd45760405163973d02cb60e01b81526020600482015260096024820152682b20a624a220aa27a960b91b6044820152606401610ad6565b6000610fe1600c3361267f565b336000908152600a6020526040902060070154610ffe9190615718565b90506004548161100d346126dc565b6110179190615718565b1215611036576040516396906e6360e01b8152600401610ad690615835565b61103e6117c0565b61104c600c333460006126ef565b60405134815233907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d9060200160405180910390a250565b6002818154811061109457600080fd5b600091825260209091200154905081565b336002600160a01b03146110e95760405163973d02cb60e01b815260206004820152600a60248201526914d654d5115350d0531360b21b6044820152606401610ad6565b60018054600091826110fa836156ff565b9190505590508084146111455760405162461bcd60e51b815260206004820152601360248201527215539156141150d5115117d15413d0d217d251606a1b6044820152606401610ad6565b823560208401351161118f5760405162461bcd60e51b81526020600482015260136024820152721393d7d09313d0d2d4d7d0d3d3535255151151606a1b6044820152606401610ad6565b6000546111a18435602086013561587e565b6111ac9060016156b1565b6111b691906158a7565b156112115760405162461bcd60e51b815260206004820152602560248201527f45504f43485f4d5553545f42455f444956495349424c455f42595f45504f43486044820152645f53495a4560d81b6064820152608401610ad6565b8235600f600061122260018561587e565b815260200190815260200160002060010154600161124091906156b1565b146112835760405162461bcd60e51b8152602060048201526013602482015272494e56414c49445f53544152545f424c4f434b60681b6044820152606401610ad6565b6000818152600f602090815260408083209186013560018084018290558735845591870135600280850191909155805492830181559093527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01919091556112eb8484612864565b6112f3612a35565b83602001358460000135867f0ce8712c4dee4bd5a691f0bc1c39594671591e77395f8ebf6a3fb5f63fbea66a876040013560405161133391815260200190565b60405180910390a45050505050565b604080516060810182526000808252602082018190529181018290529061136a600284612b8d565b9050600f600061137b8360016156b1565b81526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282015481525050915050919050565b60006113c7600784612045565b905060006113d58233612c42565b9050808311156113f8576040516396906e6360e01b8152600401610ad6906158bb565b611403823385612c8e565b600061140f848361587e565b90506005548110801561142157508015155b1561143f576040516396906e6360e01b8152600401610ad6906158e5565b61144a856000611eb3565b6000611455856126dc565b905061147386600061146984600019615805565b600c9291906126ef565b61147d33866127f8565b6040518581526001600160a01b0387169033907f4d10bd049775c77bd7f255195afba5088028ecb3c7c277d393ccff7934f2f92c9060200160405180910390a3505050505050565b6114cd612d63565b6001600160a01b0381166114e3576114e3615940565b336000908152600e602052604081206001549091908190611505908490612dbc565b80855560405182815291935091506001600160a01b0385169033907f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989060200160405180910390a36000846001600160a01b03168360405160006040518083038185875af1925050503d806000811461159a576040519150601f19603f3d011682016040523d82523d6000602084013e61159f565b606091505b50509050806115e45760405162461bcd60e51b815260206004820152601160248201527015d2551211149055d05317d19052531151607a1b6044820152606401610ad6565b505050506115f2600160da55565b50565b6115fd612e35565b60005b818110156116495761163783838381811061161d5761161d6156e9565b905060200201602081019061163291906152c2565b6124d3565b80611641816156ff565b915050611600565b505050565b60006116658261165f600786612045565b90612e8f565b90505b92915050565b60006116658261167f600786612045565b90612c42565b61168d612e35565b6116976000612ebe565b565b60a85433906001600160a01b031681146117075760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610ad6565b6115f281612ebe565b611718612e35565b60005b8181101561164957611752838383818110611738576117386156e9565b905060200201602081019061174d91906152c2565b612ed7565b8061175c816156ff565b91505061171b565b6000611771600784612045565b600554909150346117828333612c42565b61178c91906156b1565b10156117ab576040516396906e6360e01b8152600401610ad690615956565b6117b58383611eb3565b611649338434612f23565b60006117cd600733612027565b600681015490915060008190036117e2575050565b600060068301556117f333826127f8565b60405181815233907f378c825c0ac073cbae19612eb73cde31c0972f0c8ba2dedb659840f32550df2b90602001610b7f565b604354610100900460ff16158080156118455750604354600160ff909116105b8061185f5750303b15801561185f575060435460ff166001145b6118c25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ad6565b6043805460ff1916600117905580156118e5576043805461ff0019166101001790555b336002600160a01b03146119295760405163973d02cb60e01b815260206004820152600a60248201526914d654d5115350d0531360b21b6044820152606401610ad6565b60018055606086013560005561193e82612ebe565b611946612fee565b853560035560208601356004556040860135600555600680546001600160a01b0319166001600160a01b03851617905560005b84811015611ac15760006040518060a001604052808888858181106119a0576119a06156e9565b905061010002016020016004806020026040519081016040528092919082600460200280828437600092019190915250505081526020018888858181106119e9576119e96156e9565b9050610100020160e0013581526020016000815260200160008152602001600115158152509050611a45878784818110611a2557611a256156e9565b611a3c9260206101009092020190810191506152c2565b60079083612121565b611aae878784818110611a5a57611a5a6156e9565b611a719260206101009092020190810191506152c2565b888885818110611a8357611a836156e9565b9050610100020160a001898986818110611a9f57611a9f6156e9565b90506101000201602001612063565b5080611ab9816156ff565b915050611979565b508015611b08576043805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b806002811015611b325760405162461bcd60e51b8152600401610ad6906159a7565b611b3c838361301d565b611b7f5760405162461bcd60e51b8152602060048201526014602482015273424c4f434b484153485f4e4f545f554e4951554560601b6044820152606401610ad6565b60005b81811015611d1957611d114689868685818110611ba157611ba16156e9565b9050602002810190611bb391906159cf565b608001358a888887818110611bca57611bca6156e9565b9050602002810190611bdc91906159cf565b35898988818110611bef57611bef6156e9565b9050602002810190611c0191906159cf565b602001358a8a89818110611c1757611c176156e9565b9050602002810190611c2991906159cf565b604001358b8b8a818110611c3f57611c3f6156e9565b9050602002810190611c5191906159cf565b604080516020810199909952880196909652606087810195909552608087019390935260a086019190915260c085015260e084015201356101008201526101200160405160208183030381529060405280519060200120858584818110611cba57611cba6156e9565b9050602002810190611ccc91906159cf565b611cda9060c08101906159ef565b878786818110611cec57611cec6156e9565b9050602002810190611cfe91906159cf565b611d0c9060a08101906159ef565b6130d3565b600101611b82565b506000606460076001015410611d30576064611d34565b6008545b90506000611d4182610b8b565b905060008267ffffffffffffffff811115611d5e57611d5e6156d3565b604051908082528060200260200182016040528015611d87578160200160208202803683370190505b50905060005b83811015611e85576000805b86811015611e7b57611ddc898983818110611db657611db66156e9565b9050602002810190611dc891906159cf565b611dd69060a08101906159ef565b856131d7565b15611def5781611deb816156ff565b9250505b6001821115611e6957611e40858481518110611e0d57611e0d6156e9565b60200260200101518a8a84818110611e2757611e276156e9565b9050602002810190611e3991906159cf565b358e613241565b6001848481518110611e5457611e546156e9565b91151560209283029190910190910152611e7b565b80611e73816156ff565b915050611d99565b5050600101611d8d565b50611e928b8989846133b2565b5050505050505050505050565b6000611eac600783612045565b5492915050565b6000611ec0600784612045565b90506000611ece82336137c1565b905080600003611ede5750505050565b8215611ef457611eef338583612f23565b611efe565b611efe33826127f8565b821515846001600160a01b0316336001600160a01b03167f6b2cd13395c5d2d1f95934a6a8f884d2cb71e846eb99d6759f7e6a39c060b2d084604051611f4691815260200190565b60405180910390a450505050565b6001546001600160a01b0382166000908152600e602052604081209091611f7b9190612dbc565b5092915050565b6000611668600783613808565b611f97612e35565b60a880546001600160a01b0383166001600160a01b03199091168117909155611fc86076546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001546001600160a01b0382166000908152600e602052604081209091611668919061383d565b6001600160a01b031660009081526003918201602052604090200190565b6001600160a01b031660009081526004919091016020526040902090565b60065460009081906001600160a01b031663ebbdac918585612084896138d3565b6040518463ffffffff1660e01b81526004016120a293929190615a36565b6040805180830381865afa1580156120be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e29190615a7a565b915091508015806120f1575081155b1561211a57604051633615713d60e21b81526001600160a01b0386166004820152602401610ad6565b5050505050565b6001600160a01b03821661213757612137615940565b61214183836139a3565b1561216a5760405163cda981d560e01b81526001600160a01b0383166004820152602401610ad6565b6001600160a01b03821660009081526003808501602052604090912082518392919091019061219c908290600461519a565b50602082810151600483015560408301516005830155606083015160068301556080909201516007909101805460ff19169115159190911790558101516000036121e557505050565b82546000906001600160a01b0316816121fe8686613808565b90505b6001600160a01b038216156122745781925061221d8683613808565b81101561224c576001600160a01b03918216600090815260038701602052604090206001015490911690612201565b6001600160a01b03918216600090815260038701602052604090206002015490911690612201565b6040518060a00160405280846001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160011515815260200185815250866003016000876001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160020160146101000a81548160ff0219169083151502179055506080820151816003016000820151816000019060046123a992919061519a565b506020820151600482015560408201516005820155606082015160068201556080909101516007909101805460ff191691151591909117905550506001600160a01b0383166124105785546001600160a01b0319166001600160a01b03861617865561248d565b61241a8684613808565b811015612459576001600160a01b038381166000908152600388016020526040902060010180546001600160a01b03191691871691909117905561248d565b6001600160a01b038381166000908152600388016020526040902060020180546001600160a01b0319169187169190911790555b61249786866139f4565b6001860180549060006124a9836156ff565b919050555083602001518660020160008282546124c691906156b1565b9091555050505050505050565b6001600160a01b038116600081815260106020526040808220805460ff19169055517fcdd2e9b91a56913d370075169cefa1602ba36be5301664f752192bb1709df7579190a250565b80546001600160a01b03168015612578575b6001600160a01b0381811660009081526003840160205260409020600201541615612578576001600160a01b0390811660009081526003830160205260409020600201541661252e565b919050565b60006001600160a01b0382166125a6576040516365e52d5160e11b815260040160405180910390fd5b6001600160a01b03828116600090815260038501602052604090206001015416156125fd576001600160a01b0380831660009081526003850160205260409020600101546125f691859116613d41565b9050611668565b506001600160a01b038082166000908152600384016020526040902054165b6001600160a01b0381161580159061265557506001600160a01b0380821660009081526003850160205260409020600101548382169116145b15611668576001600160a01b0380821660009081526003850160205260409020549192501661261c565b6001600160a01b0381166000908152602083905260408120546126a457506000611668565b826001016126b28484613d97565b815481106126c2576126c26156e9565b906000526020600020906003020160010154905092915050565b6000818181121561166857611668615940565b6001600160a01b038316600090815260208590526040812054908190036127995760018086015461271f916156b1565b6001600160a01b0385811660008181526020898152604080832086905580516060810182529384528382018981529084018881526001808d0180548083018255908652939094209451600390930290940180546001600160a01b03191692909516919091178455519083015551600290910155905061211a565b6000856001016127a98787613d97565b815481106127b9576127b96156e9565b90600052602060002090600302019050838160010160008282546127dd9190615718565b92505081905550828160020160008282546124c69190615718565b612829816001805461280a91906156b1565b6001600160a01b0385166000908152600e602052604090209190613dcb565b816001600160a01b03167f655c1cd0236fb6dc4916f34c8ff10e3b18fcaea5b344dfc16c36fbb1bdfc5df282604051610b7f91815260200190565b60018054612872919061587e565b8135146128b75760405162461bcd60e51b8152602060048201526013602482015272115413d0d217d393d517d0d3d3535255151151606a1b6044820152606401610ad6565b60006128c66020830183615aa9565b915050606481118015906128dc57506008548111155b6128f85760405162461bcd60e51b8152600401610ad6906159a7565b6000612902610c97565b90506000805460646129149190615af3565b6129238635602088013561587e565b6003546129309190615af3565b61293b906064615af3565b6129459190615b0a565b905060005b83811015611b085760006129616020870187615aa9565b83818110612971576129716156e9565b9050604002018036038101906129879190615b55565b805190915060009061299b90600790612027565b905060006129ad604089013587615af3565b602084015184516129c090600790612045565b5460048501546129d091906156b1565b6129da9088615af3565b6129e49190615af3565b6129ee9190615b0a565b9050600080612a01856000015184613ee9565b91509150612a13856000015183614022565b8451612a1f908261408d565b505050505080612a2e906156ff565b905061294a565b600d60005b8154811015612b82576000828281548110612a5757612a576156e9565b6000918252602080832060408051606081018252600390940290910180546001600160a01b0316808552600182015493850193909352600201549083015290925090612aa4600783612027565b9050612ab16007836139a3565b15612ac157612ac16007836140d7565b612add83602001518260040154612ad89190615718565b6144c1565b60048281019190915560408051610120810191829052612b589285928591839160a0830191849182845b815481526020019060010190808311612b0757505050918352505060048201546020820152600582015460408201526006820154606082015260079182015460ff1615156080909101529190612121565b506001600160a01b03166000908152600c602052604081205550612b7b816156ff565b9050612a3a565b506115f2600c6144d7565b81546000908103612ba057506000611668565b82546000905b80821015612bed576000612bba83836144e5565b60008781526020902090915085908201541115612bd957809150612be7565b612be48160016156b1565b92505b50612ba6565b600082118015612c19575083612c1686612c0860018661587e565b600091825260209091200190565b54145b15612c3257612c2960018361587e565b92505050611668565b509050611668565b505092915050565b60008260010154600003612c5857506000611668565b600183015483546001600160a01b0384166000908152600686016020526040902054612c849190615af3565b6116659190615b0a565b8254600184015460009190612ca39084615af3565b612cad9190615b0a565b6001600160a01b0384166000908152600686016020526040812080549293508392909190612cdc90849061587e565b9250508190555080846001016000828254612cf7919061587e565b90915550506002840154612d1590612d10908390615af3565b6126dc565b6001600160a01b038416600090815260048601602052604081208054909190612d3f908490615718565b9091555050835482908590600090612d5890849061587e565b909155505050505050565b600260da5403612db55760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610ad6565b600260da55565b81546000905b8360010154811015612e2757600081815260028501602090815260409182902082518084019093528054835260010154908201819052841015612e055750612e27565b8051612e1190846156b1565b9250508080612e1f906156ff565b915050612dc2565b9250929050565b600160da55565b6076546001600160a01b031633146116975760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad6565b6001600160a01b0381166000908152600583016020526040812054612eb48484614500565b611665919061587e565b60a880546001600160a01b03191690556115f28161457a565b6001600160a01b038116600081815260106020526040808220805460ff19166001179055517fa850ae9193f515cbae8d35e8925bd2be26627fc91bce650b8652ed254e9cab039190a250565b612f2e600783612027565b6007015460ff16612f765760405163973d02cb60e01b815260206004820152601160248201527024a72b20a624a22fab20a624a220aa27a960791b6044820152606401610ad6565b612f85826000611469846126dc565b612f9c8382612f95600786612045565b91906145cc565b816001600160a01b0316836001600160a01b03167fe5541a6b6103d4fa7e021ed54fad39c66f27a76bd13d374cf6240ae6bd0bb72b83604051612fe191815260200190565b60405180910390a3505050565b604354610100900460ff166130155760405162461bcd60e51b8152600401610ad690615b8f565b6116976146ac565b600081815b818110156130c85760006130378260016156b1565b90505b828110156130b557858582818110613054576130546156e9565b905060200281019061306691906159cf565b6080013586868481811061307c5761307c6156e9565b905060200281019061308e91906159cf565b60800135036130a35760009350505050611668565b806130ad816156ff565b91505061303a565b50806130c0816156ff565b915050613022565b506001949350505050565b6000806120306001600160a01b0316620249f088888888886040516020016130ff959493929190615c03565b60408051601f198184030181529082905261311991615c60565b6000604051808303818686fa925050503d8060008114613155576040519150601f19603f3d011682016040523d82523d6000602084013e61315a565b606091505b50915091506000818060200190518101906131759190615c72565b90508280156131815750805b6131cd5760405162461bcd60e51b815260206004820152601d60248201527f5349474e41545552455f564552494649434154494f4e5f4641494c45440000006044820152606401610ad6565b5050505050505050565b6000806131e5600884615b0a565b905060006131f46008856158a7565b90508482106132085760009250505061323a565b6000600160ff83161b878785818110613223576132236156e9565b9050013560f81c60f81b60f81c60ff161611925050505b9392505050565b600082815261013e6020908152604080832084845282528083206001600160a01b038716845290915290205460ff161561327a57505050565b600082815261013e6020908152604080832084845282528083206001600160a01b03871684529091528120805460ff191660011790556132bb600785612027565b6001600160a01b0385166000908152600b60205260409020549091506064906132e690600a90615af3565b6132f09190615b0a565b6001600160a01b0385166000908152600b60205260408120805490919061331890849061587e565b9250508190555060006064600a83600401546133349190615af3565b61333e9190615b0a565b905080826004016000828254613354919061587e565b90915550506009805482919060009061336e90849061587e565b9091555050604051839085906001600160a01b038816907f2d7432ca38933aadba9547f33f0568008e240e52e66f1a16c6182e742bce3b1390600090a45050505050565b60018054600091826133c3836156ff565b91905055905080851461340e5760405162461bcd60e51b815260206004820152601360248201527215539156141150d5115117d15413d0d217d251606a1b6044820152606401610ad6565b83356020850135116134585760405162461bcd60e51b81526020600482015260136024820152721393d7d09313d0d2d4d7d0d3d3535255151151606a1b6044820152606401610ad6565b8335600f600061346960018561587e565b815260200190815260200160002060010154600161348791906156b1565b146134ca5760405162461bcd60e51b8152602060048201526013602482015272494e56414c49445f53544152545f424c4f434b60681b6044820152606401610ad6565b6000818152600f6020908152604080832087830135600180830182905589358355928901356002808401919091558054938401815585527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90920191909155919061353790860186615aa9565b9150506064811180159061354d57506008548111155b6135695760405162461bcd60e51b8152600401610ad6906159a7565b6000613573610c97565b90506000805460646135859190615af3565b613594893560208b013561587e565b6003546135a19190615af3565b6135ac906064615af3565b6135b69190615b0a565b905060005b83811015613765578681815181106135d5576135d56156e9565b60200260200101516137555760006135f060208a018a615aa9565b83818110613600576136006156e9565b9050604002018036038101906136169190615b55565b805190915060009061362a90600790612027565b9050600061363c60408c013587615af3565b6020840151845161364f90600790612045565b54600485015461365f91906156b1565b6136699088615af3565b6136739190615af3565b61367d9190615b0a565b9050600080613690856000015184613ee9565b91509150818460060160008282546136a891906156b1565b909155505084516040518481526001600160a01b03909116907f65da9d8bbc1fc112cfb499f15f17b3bfe4c5070dfca6a3e30f7f5f7f17bd86849060200160405180910390a2845161370890829061370290600790612045565b906146d3565b84600001516001600160a01b03167f520e62b73478b262ede881cd483440f8e7b8a4651b0ff9154aeb3510089ddbac8260405161374791815260200190565b60405180910390a250505050505b61375e816156ff565b90506135bb565b5061376e612a35565b876020013588600001358a7f0ce8712c4dee4bd5a691f0bc1c39594671591e77395f8ebf6a3fb5f63fbea66a8b604001356040516137ae91815260200190565b60405180910390a4505050505050505050565b60006137cd8383612e8f565b6001600160a01b03831660009081526005850160205260408120805492935083929091906137fc9084906156b1565b90915550909392505050565b6001600160a01b03811660009081526004830160209081526040808320546003860190925282206007015461166591906156b1565b6001820154600090808203613856576000915050611668565b600061386360018361587e565b90505b84548110612c3a5760008181526002860160209081526040918290208251808401909352805483526001015490820181905285106138a45750612c3a565b80516138b090856156b1565b9350816000036138c05750612c3a565b50806138cb81615c8f565b915050613866565b6138db6151d4565b6006546040516bffffffffffffffffffffffff19606085901b1660208201524660348201526001600160a01b039091169063a850a909907ffd10bf199d0185af9cce2005e6acc8d19924428058ac3374e16f18c97569b4ee906054016040516020818303038152906040526040518363ffffffff1660e01b8152600401613963929190615ca6565b6040805180830381865afa15801561397f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116689190615ce0565b60006001600160a01b03821615801590611665575082546001600160a01b03838116911614806116655750506001600160a01b03908116600090815260039290920160205260409091205416151590565b60005b82546001600160a01b03838116911614801590613a4157506001600160a01b0382811660009081526003850160205260408082205490921681522060020154600160a01b900460ff165b15613d13576001600160a01b03808316600090815260038501602052604080822054831680835281832054841683529120600101549091168103613bc9576001600160a01b0381811660009081526003860160205260408082205483168252808220600290810154909316808352912090910154909250600160a01b900460ff1615613b2a576001600160a01b0380821660008181526003870160205260408082206002808201805460ff60a01b1990811690915588871685528385208201805482169055825487168552928420018054909216600160a01b1790915591905254169250613d0d565b6001600160a01b038082166000908152600386016020526040902060020154811690841603613b6057809250613b608484614752565b506001600160a01b0380831660009081526003850160205260408082205483168083528183206002808201805460ff60a01b19908116909155825487168652938520018054909316600160a01b1790925591829052549091613bc491869116614905565b613d0d565b6001600160a01b03818116600090815260038601602052604080822054831682528082206001015490921680825291902060020154909250600160a01b900460ff1615613c73576001600160a01b0380821660008181526003870160205260408082206002808201805460ff60a01b1990811690915588871685528385208201805482169055825487168552928420018054909216600160a01b1790915591905254169250613d0d565b6001600160a01b038082166000908152600386016020526040902060010154811690841603613ca957809250613ca98484614905565b506001600160a01b0380831660009081526003850160205260408082205483168083528183206002808201805460ff60a01b19908116909155825487168652938520018054909316600160a01b1790925591829052549091613d0d91869116614752565b506139f7565b505080546001600160a01b03166000908152600390910160205260409020600201805460ff60a01b19169055565b60005b6001600160a01b0382811660009081526003850160205260409020600201541615613d91576001600160a01b03918216600090815260038401602052604090206002015490911690613d44565b50919050565b6001600160a01b03811660009081526020839052604081205490819003613dc057613dc0615940565b61166560018261587e565b81600003613ddb57613ddb615940565b82546001840154818103613e32576040805180820182528581526020808201868152600085815260028a019092529281209151825591516001918201558601805491613e26836156ff565b91905055505050505050565b60006002860181613e4460018561587e565b815260200190815260200160002060010154905080841015613e6857613e68615940565b83811015613eb7576040805180820182528681526020808201878152600086815260028b019092529281209151825591516001918201558701805491613ead836156ff565b9190505550611b08565b84600287016000613ec960018661587e565b815260200190815260200160002060000160008282546124c691906156b1565b60008080613ef8600786612027565b604080516101208101909152908160a081018260048282826020028201915b815481526020019060010190808311613f175750505091835250506004820154602080830191909152600583015460408301526006830154606083015260079283015460ff161515608090920191909152820151919250600090613f7b9088612045565b5490506000829003613f965760008094509450505050612e27565b80600003613fad5785600094509450505050612e27565b6000613fb982846156b1565b613fc38489615af3565b613fcd9190615b0a565b90506000613fdb828961587e565b905060006064828760400151613ff19190615af3565b613ffb9190615b0a565b905061400781846156b1565b614011828461587e565b975097505050505050509250929050565b600061402f600784612027565b90508181600601600082825461404591906156b1565b90915550506040518281526001600160a01b038416907f65da9d8bbc1fc112cfb499f15f17b3bfe4c5070dfca6a3e30f7f5f7f17bd86849060200160405180910390a2505050565b61409c81613702600785612045565b816001600160a01b03167f520e62b73478b262ede881cd483440f8e7b8a4651b0ff9154aeb3510089ddbac82604051610b7f91815260200190565b6001600160a01b0381166140ed576140ed615940565b6140f782826139a3565b61411f57604051634b2990ed60e11b81526001600160a01b0382166004820152602401610ad6565b6001600160a01b0381811660009081526003840160205260408120600101549091829116158061416c57506001600160a01b03838116600090815260038601602052604090206002015416155b156141785750816141e4565b506001600160a01b038083166000908152600385016020526040902060020154165b6001600160a01b03818116600090815260038601602052604090206001015416156141e4576001600160a01b0390811660009081526003850160205260409020600101541661419a565b6001600160a01b0381811660009081526003860160205260409020600101541615614230576001600160a01b038082166000908152600386016020526040902060010154169150614253565b6001600160a01b0380821660009081526003860160205260409020600201541691505b6001600160a01b038082166000908152600386016020526040808220548584168352912080546001600160a01b03191691909216908117909155801561432c576001600160a01b0380821660009081526003870160205260409020600101548116908316036142f4576001600160a01b038181166000908152600387016020526040902060010180546001600160a01b031916918516919091179055614346565b6001600160a01b038181166000908152600387016020526040902060020180546001600160a01b031916918516919091179055614346565b84546001600160a01b0319166001600160a01b0384161785555b6001600160a01b038281166000818152600388016020526040902060020154600160a01b900460ff16159186161461442157614383868487614ab8565b6001600160a01b03858116600090815260038801602052604080822060018082015488861680865284862092830180549288166001600160a01b03199384168117909155865284862080548316821790556002938401805494909301805494909716938216841787559285529284208054909316821790925590549152815460ff60a01b1916600160a01b9182900460ff1615159091021790559193915b8015614431576144318685614bb0565b6001600160a01b0383166000908152600387016020526040812080546001600160a01b0319908116825560018083018054909216909155600290910180546001600160a81b0319169055870180549161448983615c8f565b90915550506001600160a01b0383166000908152600387016020526040812060070154600288018054919290916124c690849061587e565b6000808212156144d3576144d3615940565b5090565b6115f26001820160006151f2565b60006144f46002848418615b0a565b611665908484166156b1565b6001600160a01b03811660009081526006830160205260408120546002840154829161453091612d109190615af3565b6001600160a01b03841660009081526004860160205260408120549192509061455d90612ad89084615718565b9050614571670de0b6b3a764000082615b0a565b95945050505050565b607680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008360010154600014806145e057508354155b61460457835460018501546145f59084615af3565b6145ff9190615b0a565b614606565b815b6001600160a01b03841660009081526006860160205260408120805492935083929091906146359084906156b1565b925050819055508084600101600082825461465091906156b1565b90915550508354829085906000906146699084906156b1565b9091555050600284015461468290612d10908390615af3565b6001600160a01b038416600090815260048601602052604081208054909190612d58908490615792565b604354610100900460ff16612e2e5760405162461bcd60e51b8152600401610ad690615b8f565b806000036146df575050565b8160010154600003614715576003820154604051636130835f60e01b81526001600160a01b039091166004820152602401610ad6565b600182015461472c670de0b6b3a764000083615af3565b6147369190615b0a565b82600201600082825461474991906156b1565b90915550505050565b6001600160a01b038082166000818152600385016020526040808220600281018054915482871680865293852060010154959094526001600160a01b0319909116938516938417905592169080156147d5576001600160a01b038181166000908152600387016020526040902080546001600160a01b0319169186169190911790555b6001600160a01b038381166000908152600387016020526040902080546001600160a01b03191691841691821790556148265784546001600160a01b0319166001600160a01b0384161785556148bb565b6001600160a01b038083166000908152600387016020526040902060010154811690851603614887576001600160a01b038281166000908152600387016020526040902060010180546001600160a01b0319169185169190911790556148bb565b6001600160a01b038281166000908152600387016020526040902060020180546001600160a01b0319169185169190911790555b50506001600160a01b039081166000818152600390940160205260408085206001018054939094166001600160a01b03199384168117909455928452919092208054909216179055565b6001600160a01b038082166000818152600385016020526040808220600181018054915482871680865293852060020154959094526001600160a01b031990911693851693841790559216908015614988576001600160a01b038181166000908152600387016020526040902080546001600160a01b0319169186169190911790555b6001600160a01b038381166000908152600387016020526040902080546001600160a01b03191691841691821790556149d95784546001600160a01b0319166001600160a01b038416178555614a6e565b6001600160a01b038083166000908152600387016020526040902060020154811690851603614a3a576001600160a01b038281166000908152600387016020526040902060020180546001600160a01b031916918516919091179055614a6e565b6001600160a01b038281166000908152600387016020526040902060010180546001600160a01b0319169185169190911790555b50506001600160a01b039081166000818152600390940160205260408085206002018054939094166001600160a01b03199384168117909455928452919092208054909216179055565b6001600160a01b038082166000908152600385016020526040808220548584168352912080546001600160a01b0319169190921690811790915580614b155783546001600160a01b0319166001600160a01b038416178455614baa565b6001600160a01b038082166000908152600386016020526040902060010154811690831603614b76576001600160a01b038181166000908152600386016020526040902060010180546001600160a01b031916918516919091179055614baa565b6001600160a01b038181166000908152600386016020526040902060020180546001600160a01b0319169185169190911790555b50505050565b60005b82546001600160a01b03838116911614801590614bf557506001600160a01b0382166000908152600384016020526040902060020154600160a01b900460ff16155b15615151576001600160a01b0380831660008181526003860160205260408082205484168083529120600101549092169003614ebf576001600160a01b038181166000908152600386016020526040808220600290810154909316808352912090910154909250600160a01b900460ff1615614cdc576001600160a01b0380831660009081526003860160205260408082206002908101805460ff60a01b1990811690915593851683529120018054909116600160a01b179055614cb98482614752565b6001600160a01b0380821660009081526003860160205260409020600201541691505b6001600160a01b0382811660009081526003860160205260408082206001015490921681522060020154600160a01b900460ff16158015614d4f57506001600160a01b038281166000908152600386016020526040808220600290810154909316825290200154600160a01b900460ff16155b15614d8a576001600160a01b03821660009081526003850160205260409020600201805460ff60a01b1916600160a01b17905591508161514b565b6001600160a01b038281166000908152600386016020526040808220600290810154909316825290200154600160a01b900460ff16614e3f576001600160a01b0380831660008181526003870160205260408082206001810154909416825281206002908101805460ff60a01b19908116909155929091529091018054909116600160a01b179055614e1c8483614905565b6001600160a01b0380821660009081526003860160205260409020600201541691505b6001600160a01b0380821660009081526003860160205260408082206002908101805487861685528385208301805460ff600160a01b9384900416151590920260ff60a01b19928316178155825482169092559054909416835291200180549091169055614ead8482614752565b83546001600160a01b0316925061514b565b6001600160a01b0381811660009081526003860160205260408082206001015490921680825291902060020154909250600160a01b900460ff1615614f6f576001600160a01b0380831660009081526003860160205260408082206002908101805460ff60a01b1990811690915593851683529120018054909116600160a01b179055614f4c8482614905565b6001600160a01b0380821660009081526003860160205260409020600101541691505b6001600160a01b038281166000908152600386016020526040808220600290810154909316825290200154600160a01b900460ff16158015614fe257506001600160a01b0382811660009081526003860160205260408082206001015490921681522060020154600160a01b900460ff16155b1561501d576001600160a01b03821660009081526003850160205260409020600201805460ff60a01b1916600160a01b17905591508161514b565b6001600160a01b0382811660009081526003860160205260408082206001015490921681522060020154600160a01b900460ff166150ca576001600160a01b03808316600081815260038701602052604080822060029081018054909516835290822001805460ff60a01b19908116909155919052815416600160a01b1790556150a78483614752565b6001600160a01b0380821660009081526003860160205260409020600101541691505b6001600160a01b038082166000908152600386016020526040808220600290810180548786168552838520808401805460ff600160a01b9485900416151590930260ff60a01b199384161790558254821690925560019091015490941683529120018054909116905561513d8482614905565b83546001600160a01b031692505b50614bb3565b506001600160a01b03166000908152600390910160205260409020600201805460ff60a01b19169055565b60405180608001604052806004906020820280368337509192915050565b82600481019282156151c8579160200282015b828111156151c85782518255916020019190600101906151ad565b506144d3929150615213565b60405180604001604052806002906020820280368337509192915050565b50805460008255600302906000526020600020908101906115f29190615228565b5b808211156144d35760008155600101615214565b5b808211156144d35780546001600160a01b03191681556000600182018190556002820155600301615229565b6020808252825182820181905260009190848201906040850190845b818110156152965783516001600160a01b031683529284019291840191600101615271565b50909695505050505050565b6001600160a01b03811681146115f257600080fd5b8035612578816152a2565b6000602082840312156152d457600080fd5b813561323a816152a2565b6101208101818860005b60048110156153085781518352602092830192909101906001016152e9565b505050608082019690965260a081019490945260c084019290925260e0830152151561010090910152919050565b60008060c0838503121561534957600080fd5b604083018481111561535a57600080fd5b8392508460c08501111561536d57600080fd5b809150509250929050565b60006020828403121561538a57600080fd5b5035919050565b600060608284031215613d9157600080fd5b600080600060a084860312156153b857600080fd5b833592506153c98560208601615391565b9150608084013567ffffffffffffffff8111156153e557600080fd5b6153f186828701615391565b9150509250925092565b6000806040838503121561540e57600080fd5b8235615419816152a2565b946020939093013593505050565b60008083601f84011261543957600080fd5b50813567ffffffffffffffff81111561545157600080fd5b6020830191508360208260051b8501011115612e2757600080fd5b6000806020838503121561547f57600080fd5b823567ffffffffffffffff81111561549657600080fd5b6154a285828601615427565b90969095509350505050565b600080604083850312156154c157600080fd5b82356154cc816152a2565b9150602083013561536d816152a2565b6000806000606084860312156154f157600080fd5b8335925060208401359150604084013561550a816152a2565b809150509250925092565b80151581146115f257600080fd5b6000806040838503121561553657600080fd5b8235615541816152a2565b9150602083013561536d81615515565b600080600080600085870360e081121561556a57600080fd5b608081121561557857600080fd5b50859450608086013567ffffffffffffffff8082111561559757600080fd5b818801915088601f8301126155ab57600080fd5b8135818111156155ba57600080fd5b8960208260081b85010111156155cf57600080fd5b6020830196508095505050506155e760a087016152b7565b91506155f560c087016152b7565b90509295509295909350565b6000806000806000806000610100888a03121561561d57600080fd5b87359650602088013595506040880135945061563c8960608a01615391565b935060c088013567ffffffffffffffff8082111561565957600080fd5b6156658b838c01615391565b945060e08a013591508082111561567b57600080fd5b506156888a828b01615427565b989b979a50959850939692959293505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156116685761166861569b565b60808181019083833792915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000600182016157115761571161569b565b5060010190565b8082018281126000831280158216821582161715612c3a57612c3a61569b565b60408152600061575f604083016007815266756e7374616b6560c81b602082015260400190565b828103602084015261323a816014815273494e53554646494349454e545f42414c414e434560601b602082015260400190565b8181036000831280158383131683831282161715611f7b57611f7b61569b565b6040815260006157d9604083016007815266756e7374616b6560c81b602082015260400190565b828103602084015261323a81600d81526c5354414b455f544f4f5f4c4f5760981b602082015260400190565b80820260008212600160ff1b841416156158215761582161569b565b81810583148215176116685761166861569b565b6040815260056040820152647374616b6560d81b606082015260806020820152600061166860808301600d81526c5354414b455f544f4f5f4c4f5760981b602082015260400190565b818103818111156116685761166861569b565b634e487b7160e01b600052601260045260246000fd5b6000826158b6576158b6615891565b500690565b60408152600061575f60408301600a815269756e64656c656761746560b01b602082015260400190565b60408152600061590f60408301600a815269756e64656c656761746560b01b602082015260400190565b828103602084015261323a81601281527144454c45474154494f4e5f544f4f5f4c4f5760701b602082015260400190565b634e487b7160e01b600052600160045260246000fd5b60408152600860408201526764656c656761746560c01b606082015260806020820152600061166860808301601281527144454c45474154494f4e5f544f4f5f4c4f5760701b602082015260400190565b6020808252600e908201526d0929cac82989288be988a9c8ea8960931b604082015260600190565b6000823560de198336030181126159e557600080fd5b9190910192915050565b6000808335601e19843603018112615a0657600080fd5b83018035915067ffffffffffffffff821115615a2157600080fd5b602001915036819003821315612e2757600080fd5b61010081016040858337608084604084013760c082018360005b6002811015615a6f578151835260209283019290910190600101615a50565b505050949350505050565b60008060408385031215615a8d57600080fd5b8251615a9881615515565b602084015190925061536d81615515565b6000808335601e19843603018112615ac057600080fd5b83018035915067ffffffffffffffff821115615adb57600080fd5b6020019150600681901b3603821315612e2757600080fd5b80820281158282048414176116685761166861569b565b600082615b1957615b19615891565b500490565b6040805190810167ffffffffffffffff81118282101715615b4f57634e487b7160e01b600052604160045260246000fd5b60405290565b600060408284031215615b6757600080fd5b615b6f615b1e565b8235615b7a816152a2565b81526020928301359281019290925250919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b858152606060208201526000615c1d606083018688615bda565b8281036040840152615c30818587615bda565b98975050505050505050565b60005b83811015615c57578181015183820152602001615c3f565b50506000910152565b600082516159e5818460208701615c3c565b600060208284031215615c8457600080fd5b815161323a81615515565b600081615c9e57615c9e61569b565b506000190190565b8281526040602082015260008251806040840152615ccb816060850160208701615c3c565b601f01601f1916919091016060019392505050565b600060408284031215615cf257600080fd5b82601f830112615d0157600080fd5b615d09615b1e565b806040840185811115615d1b57600080fd5b845b81811015615d35578051845260209384019301615d1d565b50909594505050505056fea264697066735822122092094018521e25da5faeab4a5ecf1d1635ccb2873dcf69bf47bd031dde1f06de64736f6c63430008110033\",\n \"deployedBytecode\": \"0x60806040526004361061031a5760003560e01c8063715018a6116101ab578063a2562ddd116100f7578063e0563ab111610095578063ea0fee4f1161006f578063ea0fee4f1461093f578063eacdc5ff14610954578063f2fde38b1461096a578063f3f437031461098a57600080fd5b8063e0563ab1146108eb578063e30c397814610901578063e3f56eaa1461091f57600080fd5b8063a90049d0116100d1578063a90049d014610854578063ae97dde8146103b6578063c6b61e4c14610874578063ce513b6f146108cb57600080fd5b8063a2562ddd146107ff578063a2b915e21461081f578063a77af2291461083f57600080fd5b8063947287cf11610164578063982ef0a71161013e578063982ef0a7146107875780639a91e6d71461079a5780639b19251a146107af578063a1580879146107df57600080fd5b8063947287cf1461073a57806395b0b0271461075057806397e5230d1461077057600080fd5b8063715018a61461066b57806378f619321461068057806379ba5097146106d25780637f649783146106e75780638b0e9f3f146107075780638da5cb5b1461071c57600080fd5b80633a4b66f11161026a57806351351d5311610223578063548db174116101fd578063548db174146105f55780635689762f14610615578063572d356e14610635578063628da5271461064b57600080fd5b806351351d531461058657806351cff8d9146105a157806352a9674b146105c157600080fd5b80633a4b66f1146104c65780633b878c22146104ce5780633fd50001146104e4578063410899c91461050457806346df33d2146105245780634d99dd161461056657600080fd5b80632153f7fa116102d75780632e17de78116102b15780632e17de781461045057806333378ada14610470578063355e6b4314610490578063375b3c0a146104b057600080fd5b80632153f7fa146103ed578063284017f51461040d57806328f731481461043b57600080fd5b80630209fdd01461031f578063029859921461034a5780631604e4161461036e5780631904bb2e146103845780631bce714d146103b65780631f6590b8146103cb575b600080fd5b34801561032b57600080fd5b506103346109aa565b6040516103419190615255565b60405180910390f35b34801561035657600080fd5b5061036060055481565b604051908152602001610341565b34801561037a57600080fd5b5061036060035481565b34801561039057600080fd5b506103a461039f3660046152c2565b6109bb565b604051610341969594939291906152df565b3480156103c257600080fd5b50610360606481565b3480156103d757600080fd5b506103eb6103e6366004615336565b610a8e565b005b3480156103f957600080fd5b50610334610408366004615378565b610b8b565b34801561041957600080fd5b5061042361202081565b6040516001600160a01b039091168152602001610341565b34801561044757600080fd5b50610360610c97565b34801561045c57600080fd5b506103eb61046b366004615378565b610d65565b34801561047c57600080fd5b5061036061048b3660046152c2565b610e8b565b34801561049c57600080fd5b506103eb6104ab366004615378565b610ea2565b3480156104bc57600080fd5b5061036060045481565b6103eb610f89565b3480156104da57600080fd5b5061042361101081565b3480156104f057600080fd5b506103606104ff366004615378565b611084565b34801561051057600080fd5b506103eb61051f3660046153a3565b6110a5565b34801561053057600080fd5b5061054461053f366004615378565b611342565b6040805182518152602080840151908201529181015190820152606001610341565b34801561057257600080fd5b506103eb6105813660046153fb565b6113ba565b34801561059257600080fd5b506104236002600160a01b0381565b3480156105ad57600080fd5b506103eb6105bc3660046152c2565b6114c5565b3480156105cd57600080fd5b506103607ffd10bf199d0185af9cce2005e6acc8d19924428058ac3374e16f18c97569b4ee81565b34801561060157600080fd5b506103eb61061036600461546c565b6115f5565b34801561062157600080fd5b506103606106303660046154ae565b61164e565b34801561064157600080fd5b5061036060005481565b34801561065757600080fd5b506103606106663660046154ae565b61166e565b34801561067757600080fd5b506103eb611685565b34801561068c57600080fd5b506106c261069b3660046154dc565b61013e60209081526000938452604080852082529284528284209052825290205460ff1681565b6040519015158152602001610341565b3480156106de57600080fd5b506103eb611699565b3480156106f357600080fd5b506103eb61070236600461546c565b611710565b34801561071357600080fd5b50600954610360565b34801561072857600080fd5b506076546001600160a01b0316610423565b34801561074657600080fd5b5061036061520881565b34801561075c57600080fd5b50600654610423906001600160a01b031681565b34801561077c57600080fd5b50610360620249f081565b6103eb610795366004615523565b611764565b3480156107a657600080fd5b506103eb6117c0565b3480156107bb57600080fd5b506106c26107ca3660046152c2565b60106020526000908152604090205460ff1681565b3480156107eb57600080fd5b506103eb6107fa366004615551565b611825565b34801561080b57600080fd5b506103eb61081a366004615601565b611b10565b34801561082b57600080fd5b5061036061083a3660046152c2565b611e9f565b34801561084b57600080fd5b50610360600a81565b34801561086057600080fd5b506103eb61086f366004615523565b611eb3565b34801561088057600080fd5b506108b061088f366004615378565b600f6020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610341565b3480156108d757600080fd5b506103606108e63660046152c2565b611f54565b3480156108f757600080fd5b5061042361203081565b34801561090d57600080fd5b5060a8546001600160a01b0316610423565b34801561092b57600080fd5b5061036061093a3660046152c2565b611f82565b34801561094b57600080fd5b50610360600181565b34801561096057600080fd5b5061036060015481565b34801561097657600080fd5b506103eb6109853660046152c2565b611f8f565b34801561099657600080fd5b506103606109a53660046152c2565b612000565b60606109b66064610b8b565b905090565b6109c361517c565b600080808080806109d5600789612027565b604080516101208101909152908160a081018260048282826020028201915b8154815260200190600101908083116109f45750505091835250506004820154602080830191909152600583015460408301526006830154606083015260079283015460ff1615156080909201919091528251908301519099509750909150610a5d9089612045565b546020820151610a6d91906156b1565b94508060400151935080606001519250806080015191505091939550919395565b3360009081526010602052604090205460ff16610adf5760405163973d02cb60e01b815260206004820152600960248201526815d2125511531254d560ba1b60448201526064015b60405180910390fd5b610aea338383612063565b604080516101208101909152610b3d9033908060a0810185600482826080808284376000920182905250928452505060208201819052604082018190526060820152600160809091015260079190612121565b610b46336124d3565b336001600160a01b03167fcab5c47e498c5b85fd42d656842253cfe070f7648c3a198275347b47dec5d27b82604051610b7f91906156c4565b60405180910390a25050565b60606000600760010154831115610ba457600854610ba6565b825b905060008167ffffffffffffffff811115610bc357610bc36156d3565b604051908082528060200260200182016040528015610bec578160200160208202803683370190505b50905081600003610bfe579392505050565b6000610c0a600761251c565b90508082600081518110610c2057610c206156e9565b6001600160a01b039092166020928302919091019091015260015b83811015610c8d57610c4e60078361257d565b915081838281518110610c6357610c636156e9565b6001600160a01b039092166020928302919091019091015280610c85816156ff565b915050610c3b565b5090949350505050565b60008060076001015460641115610cb057600854610cb3565b60645b905080600003610cc557600091505090565b6000610cd1600761251c565b9050610cde600782612045565b54610cea600783612027565b60040154610cf891906156b1565b610d0290846156b1565b925060015b82811015610d5f57610d1a60078361257d565b9150610d27600783612045565b54610d33600784612027565b60040154610d4191906156b1565b610d4b90856156b1565b935080610d57816156ff565b915050610d07565b50505090565b6000610d72600c3361267f565b336000908152600a6020526040902060070154610d8f9190615718565b90506000610d9c836126dc565b905081811315610dbf576040516396906e6360e01b8152600401610ad690615738565b6000610dcb8284615792565b905060045481128015610ddd57508015155b15610dfb576040516396906e6360e01b8152600401610ad6906157b2565b610e036117c0565b610e1e33610e1384600019615805565b600c919060006126ef565b80600003610e46576000610e33600733612027565b600701805460ff19169115159190911790555b610e5033856127f8565b60405184815233907f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f759060200160405180910390a250505050565b6000610e98600783612027565b6006015492915050565b610ead600733612027565b6007015460ff16610eed5760405163973d02cb60e01b81526020600482015260096024820152682b20a624a220aa27a960b91b6044820152606401610ad6565b6064811115610f335760405162461bcd60e51b815260206004820152601260248201527124a72b20a624a22fa1a7a6a6a4a9a9a4a7a760711b6044820152606401610ad6565b6000610f40600733612027565b6005810154604080519182526020820185905291925033917f6e500db30ce535d38852e318f333e9be41a3fec6c65d234ebb06203c896db9a5910160405180910390a260050155565b610f94600733612027565b6007015460ff16610fd45760405163973d02cb60e01b81526020600482015260096024820152682b20a624a220aa27a960b91b6044820152606401610ad6565b6000610fe1600c3361267f565b336000908152600a6020526040902060070154610ffe9190615718565b90506004548161100d346126dc565b6110179190615718565b1215611036576040516396906e6360e01b8152600401610ad690615835565b61103e6117c0565b61104c600c333460006126ef565b60405134815233907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d9060200160405180910390a250565b6002818154811061109457600080fd5b600091825260209091200154905081565b336002600160a01b03146110e95760405163973d02cb60e01b815260206004820152600a60248201526914d654d5115350d0531360b21b6044820152606401610ad6565b60018054600091826110fa836156ff565b9190505590508084146111455760405162461bcd60e51b815260206004820152601360248201527215539156141150d5115117d15413d0d217d251606a1b6044820152606401610ad6565b823560208401351161118f5760405162461bcd60e51b81526020600482015260136024820152721393d7d09313d0d2d4d7d0d3d3535255151151606a1b6044820152606401610ad6565b6000546111a18435602086013561587e565b6111ac9060016156b1565b6111b691906158a7565b156112115760405162461bcd60e51b815260206004820152602560248201527f45504f43485f4d5553545f42455f444956495349424c455f42595f45504f43486044820152645f53495a4560d81b6064820152608401610ad6565b8235600f600061122260018561587e565b815260200190815260200160002060010154600161124091906156b1565b146112835760405162461bcd60e51b8152602060048201526013602482015272494e56414c49445f53544152545f424c4f434b60681b6044820152606401610ad6565b6000818152600f602090815260408083209186013560018084018290558735845591870135600280850191909155805492830181559093527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01919091556112eb8484612864565b6112f3612a35565b83602001358460000135867f0ce8712c4dee4bd5a691f0bc1c39594671591e77395f8ebf6a3fb5f63fbea66a876040013560405161133391815260200190565b60405180910390a45050505050565b604080516060810182526000808252602082018190529181018290529061136a600284612b8d565b9050600f600061137b8360016156b1565b81526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282015481525050915050919050565b60006113c7600784612045565b905060006113d58233612c42565b9050808311156113f8576040516396906e6360e01b8152600401610ad6906158bb565b611403823385612c8e565b600061140f848361587e565b90506005548110801561142157508015155b1561143f576040516396906e6360e01b8152600401610ad6906158e5565b61144a856000611eb3565b6000611455856126dc565b905061147386600061146984600019615805565b600c9291906126ef565b61147d33866127f8565b6040518581526001600160a01b0387169033907f4d10bd049775c77bd7f255195afba5088028ecb3c7c277d393ccff7934f2f92c9060200160405180910390a3505050505050565b6114cd612d63565b6001600160a01b0381166114e3576114e3615940565b336000908152600e602052604081206001549091908190611505908490612dbc565b80855560405182815291935091506001600160a01b0385169033907f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989060200160405180910390a36000846001600160a01b03168360405160006040518083038185875af1925050503d806000811461159a576040519150601f19603f3d011682016040523d82523d6000602084013e61159f565b606091505b50509050806115e45760405162461bcd60e51b815260206004820152601160248201527015d2551211149055d05317d19052531151607a1b6044820152606401610ad6565b505050506115f2600160da55565b50565b6115fd612e35565b60005b818110156116495761163783838381811061161d5761161d6156e9565b905060200201602081019061163291906152c2565b6124d3565b80611641816156ff565b915050611600565b505050565b60006116658261165f600786612045565b90612e8f565b90505b92915050565b60006116658261167f600786612045565b90612c42565b61168d612e35565b6116976000612ebe565b565b60a85433906001600160a01b031681146117075760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610ad6565b6115f281612ebe565b611718612e35565b60005b8181101561164957611752838383818110611738576117386156e9565b905060200201602081019061174d91906152c2565b612ed7565b8061175c816156ff565b91505061171b565b6000611771600784612045565b600554909150346117828333612c42565b61178c91906156b1565b10156117ab576040516396906e6360e01b8152600401610ad690615956565b6117b58383611eb3565b611649338434612f23565b60006117cd600733612027565b600681015490915060008190036117e2575050565b600060068301556117f333826127f8565b60405181815233907f378c825c0ac073cbae19612eb73cde31c0972f0c8ba2dedb659840f32550df2b90602001610b7f565b604354610100900460ff16158080156118455750604354600160ff909116105b8061185f5750303b15801561185f575060435460ff166001145b6118c25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ad6565b6043805460ff1916600117905580156118e5576043805461ff0019166101001790555b336002600160a01b03146119295760405163973d02cb60e01b815260206004820152600a60248201526914d654d5115350d0531360b21b6044820152606401610ad6565b60018055606086013560005561193e82612ebe565b611946612fee565b853560035560208601356004556040860135600555600680546001600160a01b0319166001600160a01b03851617905560005b84811015611ac15760006040518060a001604052808888858181106119a0576119a06156e9565b905061010002016020016004806020026040519081016040528092919082600460200280828437600092019190915250505081526020018888858181106119e9576119e96156e9565b9050610100020160e0013581526020016000815260200160008152602001600115158152509050611a45878784818110611a2557611a256156e9565b611a3c9260206101009092020190810191506152c2565b60079083612121565b611aae878784818110611a5a57611a5a6156e9565b611a719260206101009092020190810191506152c2565b888885818110611a8357611a836156e9565b9050610100020160a001898986818110611a9f57611a9f6156e9565b90506101000201602001612063565b5080611ab9816156ff565b915050611979565b508015611b08576043805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b806002811015611b325760405162461bcd60e51b8152600401610ad6906159a7565b611b3c838361301d565b611b7f5760405162461bcd60e51b8152602060048201526014602482015273424c4f434b484153485f4e4f545f554e4951554560601b6044820152606401610ad6565b60005b81811015611d1957611d114689868685818110611ba157611ba16156e9565b9050602002810190611bb391906159cf565b608001358a888887818110611bca57611bca6156e9565b9050602002810190611bdc91906159cf565b35898988818110611bef57611bef6156e9565b9050602002810190611c0191906159cf565b602001358a8a89818110611c1757611c176156e9565b9050602002810190611c2991906159cf565b604001358b8b8a818110611c3f57611c3f6156e9565b9050602002810190611c5191906159cf565b604080516020810199909952880196909652606087810195909552608087019390935260a086019190915260c085015260e084015201356101008201526101200160405160208183030381529060405280519060200120858584818110611cba57611cba6156e9565b9050602002810190611ccc91906159cf565b611cda9060c08101906159ef565b878786818110611cec57611cec6156e9565b9050602002810190611cfe91906159cf565b611d0c9060a08101906159ef565b6130d3565b600101611b82565b506000606460076001015410611d30576064611d34565b6008545b90506000611d4182610b8b565b905060008267ffffffffffffffff811115611d5e57611d5e6156d3565b604051908082528060200260200182016040528015611d87578160200160208202803683370190505b50905060005b83811015611e85576000805b86811015611e7b57611ddc898983818110611db657611db66156e9565b9050602002810190611dc891906159cf565b611dd69060a08101906159ef565b856131d7565b15611def5781611deb816156ff565b9250505b6001821115611e6957611e40858481518110611e0d57611e0d6156e9565b60200260200101518a8a84818110611e2757611e276156e9565b9050602002810190611e3991906159cf565b358e613241565b6001848481518110611e5457611e546156e9565b91151560209283029190910190910152611e7b565b80611e73816156ff565b915050611d99565b5050600101611d8d565b50611e928b8989846133b2565b5050505050505050505050565b6000611eac600783612045565b5492915050565b6000611ec0600784612045565b90506000611ece82336137c1565b905080600003611ede5750505050565b8215611ef457611eef338583612f23565b611efe565b611efe33826127f8565b821515846001600160a01b0316336001600160a01b03167f6b2cd13395c5d2d1f95934a6a8f884d2cb71e846eb99d6759f7e6a39c060b2d084604051611f4691815260200190565b60405180910390a450505050565b6001546001600160a01b0382166000908152600e602052604081209091611f7b9190612dbc565b5092915050565b6000611668600783613808565b611f97612e35565b60a880546001600160a01b0383166001600160a01b03199091168117909155611fc86076546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001546001600160a01b0382166000908152600e602052604081209091611668919061383d565b6001600160a01b031660009081526003918201602052604090200190565b6001600160a01b031660009081526004919091016020526040902090565b60065460009081906001600160a01b031663ebbdac918585612084896138d3565b6040518463ffffffff1660e01b81526004016120a293929190615a36565b6040805180830381865afa1580156120be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e29190615a7a565b915091508015806120f1575081155b1561211a57604051633615713d60e21b81526001600160a01b0386166004820152602401610ad6565b5050505050565b6001600160a01b03821661213757612137615940565b61214183836139a3565b1561216a5760405163cda981d560e01b81526001600160a01b0383166004820152602401610ad6565b6001600160a01b03821660009081526003808501602052604090912082518392919091019061219c908290600461519a565b50602082810151600483015560408301516005830155606083015160068301556080909201516007909101805460ff19169115159190911790558101516000036121e557505050565b82546000906001600160a01b0316816121fe8686613808565b90505b6001600160a01b038216156122745781925061221d8683613808565b81101561224c576001600160a01b03918216600090815260038701602052604090206001015490911690612201565b6001600160a01b03918216600090815260038701602052604090206002015490911690612201565b6040518060a00160405280846001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160011515815260200185815250866003016000876001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160020160146101000a81548160ff0219169083151502179055506080820151816003016000820151816000019060046123a992919061519a565b506020820151600482015560408201516005820155606082015160068201556080909101516007909101805460ff191691151591909117905550506001600160a01b0383166124105785546001600160a01b0319166001600160a01b03861617865561248d565b61241a8684613808565b811015612459576001600160a01b038381166000908152600388016020526040902060010180546001600160a01b03191691871691909117905561248d565b6001600160a01b038381166000908152600388016020526040902060020180546001600160a01b0319169187169190911790555b61249786866139f4565b6001860180549060006124a9836156ff565b919050555083602001518660020160008282546124c691906156b1565b9091555050505050505050565b6001600160a01b038116600081815260106020526040808220805460ff19169055517fcdd2e9b91a56913d370075169cefa1602ba36be5301664f752192bb1709df7579190a250565b80546001600160a01b03168015612578575b6001600160a01b0381811660009081526003840160205260409020600201541615612578576001600160a01b0390811660009081526003830160205260409020600201541661252e565b919050565b60006001600160a01b0382166125a6576040516365e52d5160e11b815260040160405180910390fd5b6001600160a01b03828116600090815260038501602052604090206001015416156125fd576001600160a01b0380831660009081526003850160205260409020600101546125f691859116613d41565b9050611668565b506001600160a01b038082166000908152600384016020526040902054165b6001600160a01b0381161580159061265557506001600160a01b0380821660009081526003850160205260409020600101548382169116145b15611668576001600160a01b0380821660009081526003850160205260409020549192501661261c565b6001600160a01b0381166000908152602083905260408120546126a457506000611668565b826001016126b28484613d97565b815481106126c2576126c26156e9565b906000526020600020906003020160010154905092915050565b6000818181121561166857611668615940565b6001600160a01b038316600090815260208590526040812054908190036127995760018086015461271f916156b1565b6001600160a01b0385811660008181526020898152604080832086905580516060810182529384528382018981529084018881526001808d0180548083018255908652939094209451600390930290940180546001600160a01b03191692909516919091178455519083015551600290910155905061211a565b6000856001016127a98787613d97565b815481106127b9576127b96156e9565b90600052602060002090600302019050838160010160008282546127dd9190615718565b92505081905550828160020160008282546124c69190615718565b612829816001805461280a91906156b1565b6001600160a01b0385166000908152600e602052604090209190613dcb565b816001600160a01b03167f655c1cd0236fb6dc4916f34c8ff10e3b18fcaea5b344dfc16c36fbb1bdfc5df282604051610b7f91815260200190565b60018054612872919061587e565b8135146128b75760405162461bcd60e51b8152602060048201526013602482015272115413d0d217d393d517d0d3d3535255151151606a1b6044820152606401610ad6565b60006128c66020830183615aa9565b915050606481118015906128dc57506008548111155b6128f85760405162461bcd60e51b8152600401610ad6906159a7565b6000612902610c97565b90506000805460646129149190615af3565b6129238635602088013561587e565b6003546129309190615af3565b61293b906064615af3565b6129459190615b0a565b905060005b83811015611b085760006129616020870187615aa9565b83818110612971576129716156e9565b9050604002018036038101906129879190615b55565b805190915060009061299b90600790612027565b905060006129ad604089013587615af3565b602084015184516129c090600790612045565b5460048501546129d091906156b1565b6129da9088615af3565b6129e49190615af3565b6129ee9190615b0a565b9050600080612a01856000015184613ee9565b91509150612a13856000015183614022565b8451612a1f908261408d565b505050505080612a2e906156ff565b905061294a565b600d60005b8154811015612b82576000828281548110612a5757612a576156e9565b6000918252602080832060408051606081018252600390940290910180546001600160a01b0316808552600182015493850193909352600201549083015290925090612aa4600783612027565b9050612ab16007836139a3565b15612ac157612ac16007836140d7565b612add83602001518260040154612ad89190615718565b6144c1565b60048281019190915560408051610120810191829052612b589285928591839160a0830191849182845b815481526020019060010190808311612b0757505050918352505060048201546020820152600582015460408201526006820154606082015260079182015460ff1615156080909101529190612121565b506001600160a01b03166000908152600c602052604081205550612b7b816156ff565b9050612a3a565b506115f2600c6144d7565b81546000908103612ba057506000611668565b82546000905b80821015612bed576000612bba83836144e5565b60008781526020902090915085908201541115612bd957809150612be7565b612be48160016156b1565b92505b50612ba6565b600082118015612c19575083612c1686612c0860018661587e565b600091825260209091200190565b54145b15612c3257612c2960018361587e565b92505050611668565b509050611668565b505092915050565b60008260010154600003612c5857506000611668565b600183015483546001600160a01b0384166000908152600686016020526040902054612c849190615af3565b6116659190615b0a565b8254600184015460009190612ca39084615af3565b612cad9190615b0a565b6001600160a01b0384166000908152600686016020526040812080549293508392909190612cdc90849061587e565b9250508190555080846001016000828254612cf7919061587e565b90915550506002840154612d1590612d10908390615af3565b6126dc565b6001600160a01b038416600090815260048601602052604081208054909190612d3f908490615718565b9091555050835482908590600090612d5890849061587e565b909155505050505050565b600260da5403612db55760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610ad6565b600260da55565b81546000905b8360010154811015612e2757600081815260028501602090815260409182902082518084019093528054835260010154908201819052841015612e055750612e27565b8051612e1190846156b1565b9250508080612e1f906156ff565b915050612dc2565b9250929050565b600160da55565b6076546001600160a01b031633146116975760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad6565b6001600160a01b0381166000908152600583016020526040812054612eb48484614500565b611665919061587e565b60a880546001600160a01b03191690556115f28161457a565b6001600160a01b038116600081815260106020526040808220805460ff19166001179055517fa850ae9193f515cbae8d35e8925bd2be26627fc91bce650b8652ed254e9cab039190a250565b612f2e600783612027565b6007015460ff16612f765760405163973d02cb60e01b815260206004820152601160248201527024a72b20a624a22fab20a624a220aa27a960791b6044820152606401610ad6565b612f85826000611469846126dc565b612f9c8382612f95600786612045565b91906145cc565b816001600160a01b0316836001600160a01b03167fe5541a6b6103d4fa7e021ed54fad39c66f27a76bd13d374cf6240ae6bd0bb72b83604051612fe191815260200190565b60405180910390a3505050565b604354610100900460ff166130155760405162461bcd60e51b8152600401610ad690615b8f565b6116976146ac565b600081815b818110156130c85760006130378260016156b1565b90505b828110156130b557858582818110613054576130546156e9565b905060200281019061306691906159cf565b6080013586868481811061307c5761307c6156e9565b905060200281019061308e91906159cf565b60800135036130a35760009350505050611668565b806130ad816156ff565b91505061303a565b50806130c0816156ff565b915050613022565b506001949350505050565b6000806120306001600160a01b0316620249f088888888886040516020016130ff959493929190615c03565b60408051601f198184030181529082905261311991615c60565b6000604051808303818686fa925050503d8060008114613155576040519150601f19603f3d011682016040523d82523d6000602084013e61315a565b606091505b50915091506000818060200190518101906131759190615c72565b90508280156131815750805b6131cd5760405162461bcd60e51b815260206004820152601d60248201527f5349474e41545552455f564552494649434154494f4e5f4641494c45440000006044820152606401610ad6565b5050505050505050565b6000806131e5600884615b0a565b905060006131f46008856158a7565b90508482106132085760009250505061323a565b6000600160ff83161b878785818110613223576132236156e9565b9050013560f81c60f81b60f81c60ff161611925050505b9392505050565b600082815261013e6020908152604080832084845282528083206001600160a01b038716845290915290205460ff161561327a57505050565b600082815261013e6020908152604080832084845282528083206001600160a01b03871684529091528120805460ff191660011790556132bb600785612027565b6001600160a01b0385166000908152600b60205260409020549091506064906132e690600a90615af3565b6132f09190615b0a565b6001600160a01b0385166000908152600b60205260408120805490919061331890849061587e565b9250508190555060006064600a83600401546133349190615af3565b61333e9190615b0a565b905080826004016000828254613354919061587e565b90915550506009805482919060009061336e90849061587e565b9091555050604051839085906001600160a01b038816907f2d7432ca38933aadba9547f33f0568008e240e52e66f1a16c6182e742bce3b1390600090a45050505050565b60018054600091826133c3836156ff565b91905055905080851461340e5760405162461bcd60e51b815260206004820152601360248201527215539156141150d5115117d15413d0d217d251606a1b6044820152606401610ad6565b83356020850135116134585760405162461bcd60e51b81526020600482015260136024820152721393d7d09313d0d2d4d7d0d3d3535255151151606a1b6044820152606401610ad6565b8335600f600061346960018561587e565b815260200190815260200160002060010154600161348791906156b1565b146134ca5760405162461bcd60e51b8152602060048201526013602482015272494e56414c49445f53544152545f424c4f434b60681b6044820152606401610ad6565b6000818152600f6020908152604080832087830135600180830182905589358355928901356002808401919091558054938401815585527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90920191909155919061353790860186615aa9565b9150506064811180159061354d57506008548111155b6135695760405162461bcd60e51b8152600401610ad6906159a7565b6000613573610c97565b90506000805460646135859190615af3565b613594893560208b013561587e565b6003546135a19190615af3565b6135ac906064615af3565b6135b69190615b0a565b905060005b83811015613765578681815181106135d5576135d56156e9565b60200260200101516137555760006135f060208a018a615aa9565b83818110613600576136006156e9565b9050604002018036038101906136169190615b55565b805190915060009061362a90600790612027565b9050600061363c60408c013587615af3565b6020840151845161364f90600790612045565b54600485015461365f91906156b1565b6136699088615af3565b6136739190615af3565b61367d9190615b0a565b9050600080613690856000015184613ee9565b91509150818460060160008282546136a891906156b1565b909155505084516040518481526001600160a01b03909116907f65da9d8bbc1fc112cfb499f15f17b3bfe4c5070dfca6a3e30f7f5f7f17bd86849060200160405180910390a2845161370890829061370290600790612045565b906146d3565b84600001516001600160a01b03167f520e62b73478b262ede881cd483440f8e7b8a4651b0ff9154aeb3510089ddbac8260405161374791815260200190565b60405180910390a250505050505b61375e816156ff565b90506135bb565b5061376e612a35565b876020013588600001358a7f0ce8712c4dee4bd5a691f0bc1c39594671591e77395f8ebf6a3fb5f63fbea66a8b604001356040516137ae91815260200190565b60405180910390a4505050505050505050565b60006137cd8383612e8f565b6001600160a01b03831660009081526005850160205260408120805492935083929091906137fc9084906156b1565b90915550909392505050565b6001600160a01b03811660009081526004830160209081526040808320546003860190925282206007015461166591906156b1565b6001820154600090808203613856576000915050611668565b600061386360018361587e565b90505b84548110612c3a5760008181526002860160209081526040918290208251808401909352805483526001015490820181905285106138a45750612c3a565b80516138b090856156b1565b9350816000036138c05750612c3a565b50806138cb81615c8f565b915050613866565b6138db6151d4565b6006546040516bffffffffffffffffffffffff19606085901b1660208201524660348201526001600160a01b039091169063a850a909907ffd10bf199d0185af9cce2005e6acc8d19924428058ac3374e16f18c97569b4ee906054016040516020818303038152906040526040518363ffffffff1660e01b8152600401613963929190615ca6565b6040805180830381865afa15801561397f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116689190615ce0565b60006001600160a01b03821615801590611665575082546001600160a01b03838116911614806116655750506001600160a01b03908116600090815260039290920160205260409091205416151590565b60005b82546001600160a01b03838116911614801590613a4157506001600160a01b0382811660009081526003850160205260408082205490921681522060020154600160a01b900460ff165b15613d13576001600160a01b03808316600090815260038501602052604080822054831680835281832054841683529120600101549091168103613bc9576001600160a01b0381811660009081526003860160205260408082205483168252808220600290810154909316808352912090910154909250600160a01b900460ff1615613b2a576001600160a01b0380821660008181526003870160205260408082206002808201805460ff60a01b1990811690915588871685528385208201805482169055825487168552928420018054909216600160a01b1790915591905254169250613d0d565b6001600160a01b038082166000908152600386016020526040902060020154811690841603613b6057809250613b608484614752565b506001600160a01b0380831660009081526003850160205260408082205483168083528183206002808201805460ff60a01b19908116909155825487168652938520018054909316600160a01b1790925591829052549091613bc491869116614905565b613d0d565b6001600160a01b03818116600090815260038601602052604080822054831682528082206001015490921680825291902060020154909250600160a01b900460ff1615613c73576001600160a01b0380821660008181526003870160205260408082206002808201805460ff60a01b1990811690915588871685528385208201805482169055825487168552928420018054909216600160a01b1790915591905254169250613d0d565b6001600160a01b038082166000908152600386016020526040902060010154811690841603613ca957809250613ca98484614905565b506001600160a01b0380831660009081526003850160205260408082205483168083528183206002808201805460ff60a01b19908116909155825487168652938520018054909316600160a01b1790925591829052549091613d0d91869116614752565b506139f7565b505080546001600160a01b03166000908152600390910160205260409020600201805460ff60a01b19169055565b60005b6001600160a01b0382811660009081526003850160205260409020600201541615613d91576001600160a01b03918216600090815260038401602052604090206002015490911690613d44565b50919050565b6001600160a01b03811660009081526020839052604081205490819003613dc057613dc0615940565b61166560018261587e565b81600003613ddb57613ddb615940565b82546001840154818103613e32576040805180820182528581526020808201868152600085815260028a019092529281209151825591516001918201558601805491613e26836156ff565b91905055505050505050565b60006002860181613e4460018561587e565b815260200190815260200160002060010154905080841015613e6857613e68615940565b83811015613eb7576040805180820182528681526020808201878152600086815260028b019092529281209151825591516001918201558701805491613ead836156ff565b9190505550611b08565b84600287016000613ec960018661587e565b815260200190815260200160002060000160008282546124c691906156b1565b60008080613ef8600786612027565b604080516101208101909152908160a081018260048282826020028201915b815481526020019060010190808311613f175750505091835250506004820154602080830191909152600583015460408301526006830154606083015260079283015460ff161515608090920191909152820151919250600090613f7b9088612045565b5490506000829003613f965760008094509450505050612e27565b80600003613fad5785600094509450505050612e27565b6000613fb982846156b1565b613fc38489615af3565b613fcd9190615b0a565b90506000613fdb828961587e565b905060006064828760400151613ff19190615af3565b613ffb9190615b0a565b905061400781846156b1565b614011828461587e565b975097505050505050509250929050565b600061402f600784612027565b90508181600601600082825461404591906156b1565b90915550506040518281526001600160a01b038416907f65da9d8bbc1fc112cfb499f15f17b3bfe4c5070dfca6a3e30f7f5f7f17bd86849060200160405180910390a2505050565b61409c81613702600785612045565b816001600160a01b03167f520e62b73478b262ede881cd483440f8e7b8a4651b0ff9154aeb3510089ddbac82604051610b7f91815260200190565b6001600160a01b0381166140ed576140ed615940565b6140f782826139a3565b61411f57604051634b2990ed60e11b81526001600160a01b0382166004820152602401610ad6565b6001600160a01b0381811660009081526003840160205260408120600101549091829116158061416c57506001600160a01b03838116600090815260038601602052604090206002015416155b156141785750816141e4565b506001600160a01b038083166000908152600385016020526040902060020154165b6001600160a01b03818116600090815260038601602052604090206001015416156141e4576001600160a01b0390811660009081526003850160205260409020600101541661419a565b6001600160a01b0381811660009081526003860160205260409020600101541615614230576001600160a01b038082166000908152600386016020526040902060010154169150614253565b6001600160a01b0380821660009081526003860160205260409020600201541691505b6001600160a01b038082166000908152600386016020526040808220548584168352912080546001600160a01b03191691909216908117909155801561432c576001600160a01b0380821660009081526003870160205260409020600101548116908316036142f4576001600160a01b038181166000908152600387016020526040902060010180546001600160a01b031916918516919091179055614346565b6001600160a01b038181166000908152600387016020526040902060020180546001600160a01b031916918516919091179055614346565b84546001600160a01b0319166001600160a01b0384161785555b6001600160a01b038281166000818152600388016020526040902060020154600160a01b900460ff16159186161461442157614383868487614ab8565b6001600160a01b03858116600090815260038801602052604080822060018082015488861680865284862092830180549288166001600160a01b03199384168117909155865284862080548316821790556002938401805494909301805494909716938216841787559285529284208054909316821790925590549152815460ff60a01b1916600160a01b9182900460ff1615159091021790559193915b8015614431576144318685614bb0565b6001600160a01b0383166000908152600387016020526040812080546001600160a01b0319908116825560018083018054909216909155600290910180546001600160a81b0319169055870180549161448983615c8f565b90915550506001600160a01b0383166000908152600387016020526040812060070154600288018054919290916124c690849061587e565b6000808212156144d3576144d3615940565b5090565b6115f26001820160006151f2565b60006144f46002848418615b0a565b611665908484166156b1565b6001600160a01b03811660009081526006830160205260408120546002840154829161453091612d109190615af3565b6001600160a01b03841660009081526004860160205260408120549192509061455d90612ad89084615718565b9050614571670de0b6b3a764000082615b0a565b95945050505050565b607680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008360010154600014806145e057508354155b61460457835460018501546145f59084615af3565b6145ff9190615b0a565b614606565b815b6001600160a01b03841660009081526006860160205260408120805492935083929091906146359084906156b1565b925050819055508084600101600082825461465091906156b1565b90915550508354829085906000906146699084906156b1565b9091555050600284015461468290612d10908390615af3565b6001600160a01b038416600090815260048601602052604081208054909190612d58908490615792565b604354610100900460ff16612e2e5760405162461bcd60e51b8152600401610ad690615b8f565b806000036146df575050565b8160010154600003614715576003820154604051636130835f60e01b81526001600160a01b039091166004820152602401610ad6565b600182015461472c670de0b6b3a764000083615af3565b6147369190615b0a565b82600201600082825461474991906156b1565b90915550505050565b6001600160a01b038082166000818152600385016020526040808220600281018054915482871680865293852060010154959094526001600160a01b0319909116938516938417905592169080156147d5576001600160a01b038181166000908152600387016020526040902080546001600160a01b0319169186169190911790555b6001600160a01b038381166000908152600387016020526040902080546001600160a01b03191691841691821790556148265784546001600160a01b0319166001600160a01b0384161785556148bb565b6001600160a01b038083166000908152600387016020526040902060010154811690851603614887576001600160a01b038281166000908152600387016020526040902060010180546001600160a01b0319169185169190911790556148bb565b6001600160a01b038281166000908152600387016020526040902060020180546001600160a01b0319169185169190911790555b50506001600160a01b039081166000818152600390940160205260408085206001018054939094166001600160a01b03199384168117909455928452919092208054909216179055565b6001600160a01b038082166000818152600385016020526040808220600181018054915482871680865293852060020154959094526001600160a01b031990911693851693841790559216908015614988576001600160a01b038181166000908152600387016020526040902080546001600160a01b0319169186169190911790555b6001600160a01b038381166000908152600387016020526040902080546001600160a01b03191691841691821790556149d95784546001600160a01b0319166001600160a01b038416178555614a6e565b6001600160a01b038083166000908152600387016020526040902060020154811690851603614a3a576001600160a01b038281166000908152600387016020526040902060020180546001600160a01b031916918516919091179055614a6e565b6001600160a01b038281166000908152600387016020526040902060010180546001600160a01b0319169185169190911790555b50506001600160a01b039081166000818152600390940160205260408085206002018054939094166001600160a01b03199384168117909455928452919092208054909216179055565b6001600160a01b038082166000908152600385016020526040808220548584168352912080546001600160a01b0319169190921690811790915580614b155783546001600160a01b0319166001600160a01b038416178455614baa565b6001600160a01b038082166000908152600386016020526040902060010154811690831603614b76576001600160a01b038181166000908152600386016020526040902060010180546001600160a01b031916918516919091179055614baa565b6001600160a01b038181166000908152600386016020526040902060020180546001600160a01b0319169185169190911790555b50505050565b60005b82546001600160a01b03838116911614801590614bf557506001600160a01b0382166000908152600384016020526040902060020154600160a01b900460ff16155b15615151576001600160a01b0380831660008181526003860160205260408082205484168083529120600101549092169003614ebf576001600160a01b038181166000908152600386016020526040808220600290810154909316808352912090910154909250600160a01b900460ff1615614cdc576001600160a01b0380831660009081526003860160205260408082206002908101805460ff60a01b1990811690915593851683529120018054909116600160a01b179055614cb98482614752565b6001600160a01b0380821660009081526003860160205260409020600201541691505b6001600160a01b0382811660009081526003860160205260408082206001015490921681522060020154600160a01b900460ff16158015614d4f57506001600160a01b038281166000908152600386016020526040808220600290810154909316825290200154600160a01b900460ff16155b15614d8a576001600160a01b03821660009081526003850160205260409020600201805460ff60a01b1916600160a01b17905591508161514b565b6001600160a01b038281166000908152600386016020526040808220600290810154909316825290200154600160a01b900460ff16614e3f576001600160a01b0380831660008181526003870160205260408082206001810154909416825281206002908101805460ff60a01b19908116909155929091529091018054909116600160a01b179055614e1c8483614905565b6001600160a01b0380821660009081526003860160205260409020600201541691505b6001600160a01b0380821660009081526003860160205260408082206002908101805487861685528385208301805460ff600160a01b9384900416151590920260ff60a01b19928316178155825482169092559054909416835291200180549091169055614ead8482614752565b83546001600160a01b0316925061514b565b6001600160a01b0381811660009081526003860160205260408082206001015490921680825291902060020154909250600160a01b900460ff1615614f6f576001600160a01b0380831660009081526003860160205260408082206002908101805460ff60a01b1990811690915593851683529120018054909116600160a01b179055614f4c8482614905565b6001600160a01b0380821660009081526003860160205260409020600101541691505b6001600160a01b038281166000908152600386016020526040808220600290810154909316825290200154600160a01b900460ff16158015614fe257506001600160a01b0382811660009081526003860160205260408082206001015490921681522060020154600160a01b900460ff16155b1561501d576001600160a01b03821660009081526003850160205260409020600201805460ff60a01b1916600160a01b17905591508161514b565b6001600160a01b0382811660009081526003860160205260408082206001015490921681522060020154600160a01b900460ff166150ca576001600160a01b03808316600081815260038701602052604080822060029081018054909516835290822001805460ff60a01b19908116909155919052815416600160a01b1790556150a78483614752565b6001600160a01b0380821660009081526003860160205260409020600101541691505b6001600160a01b038082166000908152600386016020526040808220600290810180548786168552838520808401805460ff600160a01b9485900416151590930260ff60a01b199384161790558254821690925560019091015490941683529120018054909116905561513d8482614905565b83546001600160a01b031692505b50614bb3565b506001600160a01b03166000908152600390910160205260409020600201805460ff60a01b19169055565b60405180608001604052806004906020820280368337509192915050565b82600481019282156151c8579160200282015b828111156151c85782518255916020019190600101906151ad565b506144d3929150615213565b60405180604001604052806002906020820280368337509192915050565b50805460008255600302906000526020600020908101906115f29190615228565b5b808211156144d35760008155600101615214565b5b808211156144d35780546001600160a01b03191681556000600182018190556002820155600301615229565b6020808252825182820181905260009190848201906040850190845b818110156152965783516001600160a01b031683529284019291840191600101615271565b50909695505050505050565b6001600160a01b03811681146115f257600080fd5b8035612578816152a2565b6000602082840312156152d457600080fd5b813561323a816152a2565b6101208101818860005b60048110156153085781518352602092830192909101906001016152e9565b505050608082019690965260a081019490945260c084019290925260e0830152151561010090910152919050565b60008060c0838503121561534957600080fd5b604083018481111561535a57600080fd5b8392508460c08501111561536d57600080fd5b809150509250929050565b60006020828403121561538a57600080fd5b5035919050565b600060608284031215613d9157600080fd5b600080600060a084860312156153b857600080fd5b833592506153c98560208601615391565b9150608084013567ffffffffffffffff8111156153e557600080fd5b6153f186828701615391565b9150509250925092565b6000806040838503121561540e57600080fd5b8235615419816152a2565b946020939093013593505050565b60008083601f84011261543957600080fd5b50813567ffffffffffffffff81111561545157600080fd5b6020830191508360208260051b8501011115612e2757600080fd5b6000806020838503121561547f57600080fd5b823567ffffffffffffffff81111561549657600080fd5b6154a285828601615427565b90969095509350505050565b600080604083850312156154c157600080fd5b82356154cc816152a2565b9150602083013561536d816152a2565b6000806000606084860312156154f157600080fd5b8335925060208401359150604084013561550a816152a2565b809150509250925092565b80151581146115f257600080fd5b6000806040838503121561553657600080fd5b8235615541816152a2565b9150602083013561536d81615515565b600080600080600085870360e081121561556a57600080fd5b608081121561557857600080fd5b50859450608086013567ffffffffffffffff8082111561559757600080fd5b818801915088601f8301126155ab57600080fd5b8135818111156155ba57600080fd5b8960208260081b85010111156155cf57600080fd5b6020830196508095505050506155e760a087016152b7565b91506155f560c087016152b7565b90509295509295909350565b6000806000806000806000610100888a03121561561d57600080fd5b87359650602088013595506040880135945061563c8960608a01615391565b935060c088013567ffffffffffffffff8082111561565957600080fd5b6156658b838c01615391565b945060e08a013591508082111561567b57600080fd5b506156888a828b01615427565b989b979a50959850939692959293505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156116685761166861569b565b60808181019083833792915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000600182016157115761571161569b565b5060010190565b8082018281126000831280158216821582161715612c3a57612c3a61569b565b60408152600061575f604083016007815266756e7374616b6560c81b602082015260400190565b828103602084015261323a816014815273494e53554646494349454e545f42414c414e434560601b602082015260400190565b8181036000831280158383131683831282161715611f7b57611f7b61569b565b6040815260006157d9604083016007815266756e7374616b6560c81b602082015260400190565b828103602084015261323a81600d81526c5354414b455f544f4f5f4c4f5760981b602082015260400190565b80820260008212600160ff1b841416156158215761582161569b565b81810583148215176116685761166861569b565b6040815260056040820152647374616b6560d81b606082015260806020820152600061166860808301600d81526c5354414b455f544f4f5f4c4f5760981b602082015260400190565b818103818111156116685761166861569b565b634e487b7160e01b600052601260045260246000fd5b6000826158b6576158b6615891565b500690565b60408152600061575f60408301600a815269756e64656c656761746560b01b602082015260400190565b60408152600061590f60408301600a815269756e64656c656761746560b01b602082015260400190565b828103602084015261323a81601281527144454c45474154494f4e5f544f4f5f4c4f5760701b602082015260400190565b634e487b7160e01b600052600160045260246000fd5b60408152600860408201526764656c656761746560c01b606082015260806020820152600061166860808301601281527144454c45474154494f4e5f544f4f5f4c4f5760701b602082015260400190565b6020808252600e908201526d0929cac82989288be988a9c8ea8960931b604082015260600190565b6000823560de198336030181126159e557600080fd5b9190910192915050565b6000808335601e19843603018112615a0657600080fd5b83018035915067ffffffffffffffff821115615a2157600080fd5b602001915036819003821315612e2757600080fd5b61010081016040858337608084604084013760c082018360005b6002811015615a6f578151835260209283019290910190600101615a50565b505050949350505050565b60008060408385031215615a8d57600080fd5b8251615a9881615515565b602084015190925061536d81615515565b6000808335601e19843603018112615ac057600080fd5b83018035915067ffffffffffffffff821115615adb57600080fd5b6020019150600681901b3603821315612e2757600080fd5b80820281158282048414176116685761166861569b565b600082615b1957615b19615891565b500490565b6040805190810167ffffffffffffffff81118282101715615b4f57634e487b7160e01b600052604160045260246000fd5b60405290565b600060408284031215615b6757600080fd5b615b6f615b1e565b8235615b7a816152a2565b81526020928301359281019290925250919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b858152606060208201526000615c1d606083018688615bda565b8281036040840152615c30818587615bda565b98975050505050505050565b60005b83811015615c57578181015183820152602001615c3f565b50506000910152565b600082516159e5818460208701615c3c565b600060208284031215615c8457600080fd5b815161323a81615515565b600081615c9e57615c9e61569b565b506000190190565b8281526040602082015260008251806040840152615ccb816060850160208701615c3c565b601f01601f1916919091016060019392505050565b600060408284031215615cf257600080fd5b82601f830112615d0157600080fd5b615d09615b1e565b806040840185811115615d1b57600080fd5b845b81811015615d35578051845260209384019301615d1d565b50909594505050505056fea264697066735822122092094018521e25da5faeab4a5ecf1d1635ccb2873dcf69bf47bd031dde1f06de64736f6c63430008110033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n" diff --git a/consensus/polybft/contractsapi/init.go b/consensus/polybft/contractsapi/init.go index 87b3636c49..33b92fc62b 100644 --- a/consensus/polybft/contractsapi/init.go +++ b/consensus/polybft/contractsapi/init.go @@ -21,6 +21,7 @@ var ( BLS *artifact.Artifact BLS256 *artifact.Artifact System *artifact.Artifact + Merkle *artifact.Artifact ChildValidatorSet *artifact.Artifact MRC20 *artifact.Artifact @@ -59,6 +60,11 @@ func init() { panic(err) } + Merkle, err = artifact.DecodeArtifact([]byte(MerkleArtifact)) + if err != nil { + panic(err) + } + StateSender, err = artifact.DecodeArtifact([]byte(StateSenderArtifact)) if err != nil { panic(err)