@etherspot/contracts
Version:
Etherspot Solidity contracts
619 lines • 83.2 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "Replica",
"sourceName": "@connext/nxtp-contracts/contracts/nomad-core/contracts/Replica.sol",
"abi": [
{
"inputs": [
{
"internalType": "uint32",
"name": "_localDomain",
"type": "uint32"
},
{
"internalType": "uint256",
"name": "_processGas",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_reserveGas",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "bytes32",
"name": "oldRoot",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "bytes32[2]",
"name": "newRoot",
"type": "bytes32[2]"
},
{
"indexed": false,
"internalType": "bytes",
"name": "signature",
"type": "bytes"
},
{
"indexed": false,
"internalType": "bytes",
"name": "signature2",
"type": "bytes"
}
],
"name": "DoubleUpdate",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "oldUpdater",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "newUpdater",
"type": "address"
}
],
"name": "NewUpdater",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "messageHash",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bool",
"name": "success",
"type": "bool"
},
{
"indexed": true,
"internalType": "bytes",
"name": "returnData",
"type": "bytes"
}
],
"name": "Process",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "root",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "uint256",
"name": "previousConfirmAt",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "newConfirmAt",
"type": "uint256"
}
],
"name": "SetConfirmation",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "timeout",
"type": "uint256"
}
],
"name": "SetOptimisticTimeout",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint32",
"name": "homeDomain",
"type": "uint32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "oldRoot",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "newRoot",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "bytes",
"name": "signature",
"type": "bytes"
}
],
"name": "Update",
"type": "event"
},
{
"inputs": [],
"name": "PROCESS_GAS",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "RESERVE_GAS",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "VERSION",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_root",
"type": "bytes32"
}
],
"name": "acceptableRoot",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "committedRoot",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "confirmAt",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_oldRoot",
"type": "bytes32"
},
{
"internalType": "bytes32[2]",
"name": "_newRoot",
"type": "bytes32[2]"
},
{
"internalType": "bytes",
"name": "_signature",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "_signature2",
"type": "bytes"
}
],
"name": "doubleUpdate",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "homeDomainHash",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "_remoteDomain",
"type": "uint32"
},
{
"internalType": "address",
"name": "_updater",
"type": "address"
},
{
"internalType": "bytes32",
"name": "_committedRoot",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "_optimisticSeconds",
"type": "uint256"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "localDomain",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "messages",
"outputs": [
{
"internalType": "enum Replica.MessageStatus",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "optimisticSeconds",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "_message",
"type": "bytes"
}
],
"name": "process",
"outputs": [
{
"internalType": "bool",
"name": "_success",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_leaf",
"type": "bytes32"
},
{
"internalType": "bytes32[32]",
"name": "_proof",
"type": "bytes32[32]"
},
{
"internalType": "uint256",
"name": "_index",
"type": "uint256"
}
],
"name": "prove",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "_message",
"type": "bytes"
},
{
"internalType": "bytes32[32]",
"name": "_proof",
"type": "bytes32[32]"
},
{
"internalType": "uint256",
"name": "_index",
"type": "uint256"
}
],
"name": "proveAndProcess",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "remoteDomain",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_root",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "_confirmAt",
"type": "uint256"
}
],
"name": "setConfirmation",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_optimisticSeconds",
"type": "uint256"
}
],
"name": "setOptimisticTimeout",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_updater",
"type": "address"
}
],
"name": "setUpdater",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "state",
"outputs": [
{
"internalType": "enum NomadBase.States",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_oldRoot",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "_newRoot",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "_signature",
"type": "bytes"
}
],
"name": "update",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "updater",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x60e06040523480156200001157600080fd5b506040516200460238038062004602833981810160405281019062000037919062000178565b828063ffffffff1660808163ffffffff168152505050620cf85082101562000096576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200008d9062000235565b60405180910390fd5b613a98811015620000de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000d590620002a7565b60405180910390fd5b8160a081815250508060c08181525050505050620002c9565b600080fd5b600063ffffffff82169050919050565b6200011781620000fc565b81146200012357600080fd5b50565b60008151905062000137816200010c565b92915050565b6000819050919050565b62000152816200013d565b81146200015e57600080fd5b50565b600081519050620001728162000147565b92915050565b600080600060608486031215620001945762000193620000f7565b5b6000620001a48682870162000126565b9350506020620001b78682870162000161565b9250506040620001ca8682870162000161565b9150509250925092565b600082825260208201905092915050565b7f2170726f63657373206761730000000000000000000000000000000000000000600082015250565b60006200021d600c83620001d4565b91506200022a82620001e5565b602082019050919050565b6000602082019050818103600083015262000250816200020e565b9050919050565b7f2172657365727665206761730000000000000000000000000000000000000000600082015250565b60006200028f600c83620001d4565b91506200029c8262000257565b602082019050919050565b60006020820190508181036000830152620002c28162000280565b9050919050565b60805160a05160c0516142ed62000315600039600081816107680152610cef015260008181610d1001528181610d9a01526111fe015260008181610ac50152610b2c01526142ed6000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80638d3638f4116100de578063b31c01fb11610097578063df034cd011610071578063df034cd014610428578063e7e7a7b714610446578063f2fde38b14610462578063ffa1ad741461047e57610173565b8063b31c01fb146103d0578063c19d93fb146103ec578063d88beda21461040a57610173565b80638d3638f4146102fa5780638da5cb5b14610318578063928bc4b214610336578063961681dc146103665780639d54f41914610384578063a3f81d68146103a057610173565b806345630b1a1161013057806345630b1a1461024c5780636188af0e1461026a57806367a6771d14610286578063715018a6146102a457806371bfb7b8146102ae578063885b5e2d146102de57610173565b8063088b5ed31461017857806319d9d21a1461019457806325e3beda146101b05780632bbd59ca146101ce578063371d3071146101fe578063399926681461022e575b600080fd5b610192600480360381019061018d919061287d565b61049c565b005b6101ae60048036038101906101a99190612944565b610587565b005b6101b8610766565b6040516101c591906129fa565b60405180910390f35b6101e860048036038101906101e39190612a15565b61078a565b6040516101f59190612ab9565b60405180910390f35b61021860048036038101906102139190612af5565b6107aa565b6040516102259190612b65565b60405180910390f35b6102366108d8565b60405161024391906129fa565b60405180910390f35b6102546108de565b6040516102619190612b8f565b60405180910390f35b610284600480360381019061027f9190612ceb565b610900565b005b61028e610960565b60405161029b9190612b8f565b60405180910390f35b6102ac610966565b005b6102c860048036038101906102c39190612a15565b6109ee565b6040516102d591906129fa565b60405180910390f35b6102f860048036038101906102f39190612d5c565b610a06565b005b610302610ac3565b60405161030f9190612da8565b60405180910390f35b610320610ae7565b60405161032d9190612e04565b60405180910390f35b610350600480360381019061034b9190612e1f565b610b11565b60405161035d9190612b65565b60405180910390f35b61036e610f83565b60405161037b9190612da8565b60405180910390f35b61039e60048036038101906103999190612e94565b610f99565b005b6103ba60048036038101906103b59190612a15565b611021565b6040516103c79190612b65565b60405180910390f35b6103ea60048036038101906103e59190612ec1565b61105a565b005b6103f46111e9565b6040516104019190612f78565b60405180910390f35b6104126111fc565b60405161041f91906129fa565b60405180910390f35b610430611220565b60405161043d9190612e04565b60405180910390f35b610460600480360381019061045b9190612fbf565b611246565b005b61047c60048036038101906104779190612e94565b61137a565b005b610486611472565b6040516104939190613042565b60405180910390f35b6104a4611477565b73ffffffffffffffffffffffffffffffffffffffff166104c2610ae7565b73ffffffffffffffffffffffffffffffffffffffff1614610518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050f906130ba565b60405180910390fd5b600060996000848152602001908152602001600020549050816099600085815260200190815260200160002081905550827fe906d465281862f8f37a1bdd7d810e50347f06b0b493701cca6ccb8e6a7b2694828460405161057a9291906130da565b60405180910390a2505050565b60028081111561059a57610599612a42565b5b606560149054906101000a900460ff1660028111156105bc576105bb612a42565b5b14156105fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f49061314f565b60405180910390fd5b61066486866000600281106106155761061461316f565b5b602002013586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061147f565b80156106d357506106d286866001600281106106835761068261316f565b5b602002013584848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061147f565b5b801561070f5750846001600281106106ee576106ed61316f565b5b6020020135856000600281106107075761070661316f565b5b602002013514155b1561075e5761071c611525565b7f2c3f60bab4170347826231b75a920b5053941ddebc6eed6fd2c25721648b186f868686868686604051610755969594939291906131ec565b60405180910390a15b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b609a6020528060005260406000206000915054906101000a900460ff1681565b60008060028111156107bf576107be612a42565b5b609a600086815260200190815260200160002060009054906101000a900460ff1660028111156107f2576107f1612a42565b5b14610832576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108299061328f565b60405180910390fd5b6000610875858560208060200260405190810160405280929190826020800280828437600081840152601f19601f8201169050808301925050505050508561152f565b905061088081611021565b156108cb576001609a600087815260200190815260200160002060006101000a81548160ff021916908360028111156108bc576108bb612a42565b5b021790555060019150506108d1565b60009150505b9392505050565b60975481565b60006108fb609660009054906101000a900463ffffffff166115e9565b905090565b610912838051906020012083836107aa565b610951576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610948906132fb565b60405180910390fd5b61095a83610b11565b50505050565b60665481565b61096e611477565b73ffffffffffffffffffffffffffffffffffffffff1661098c610ae7565b73ffffffffffffffffffffffffffffffffffffffff16146109e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d9906130ba565b60405180910390fd5b6109ec6000611619565b565b60996020528060005260406000206000915090505481565b610a0e611477565b73ffffffffffffffffffffffffffffffffffffffff16610a2c610ae7565b73ffffffffffffffffffffffffffffffffffffffff1614610a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a79906130ba565b60405180910390fd5b806097819055507fa8de34d9c26dbb20579bc8c8957813e3168af7c5092d7668390e34471dc4ffb481604051610ab891906129fa565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080610b286000846116df90919063ffffffff16565b90507f000000000000000000000000000000000000000000000000000000000000000063ffffffff16610b608262ffffff191661170a565b63ffffffff1614610ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9d90613367565b60405180910390fd5b6000610bb78262ffffff1916611730565b905060016002811115610bcd57610bcc612a42565b5b609a600083815260200190815260200160002060009054906101000a900460ff166002811115610c0057610bff612a42565b5b14610c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c37906133d3565b60405180910390fd5b6001609860009054906101000a900460ff1660ff1614610c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8c9061343f565b60405180910390fd5b6000609860006101000a81548160ff021916908360ff1602179055506002609a600083815260200190815260200160002060006101000a81548160ff02191690836002811115610ce857610ce7612a42565b5b02179055507f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610d39919061348e565b5a1015610d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7290613530565b60405180910390fd5b6000610d8c8362ffffff1916611773565b9050600080610100905060007f0000000000000000000000000000000000000000000000000000000000000000905060008267ffffffffffffffff811115610dd757610dd6612bc0565b5b6040519080825280601f01601f191660200182016040528015610e095781602001600182028036833780820191505090505b5090506000610e1d8862ffffff191661178d565b610e2c8962ffffff19166117b3565b610e3b8a62ffffff19166117d9565b610e58610e4d8c62ffffff19166117ff565b62ffffff191661184e565b604051602401610e6b94939291906135c7565b6040516020818303038152906040527fab2dc3f5000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008082516020840160008a88f198503d945083851115610f09578394505b848252846000602084013e81604051610f22919061364f565b6040518091039020891515887fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4860405160405180910390a46001609860006101000a81548160ff021916908360ff1602179055505050505050505050919050565b609660009054906101000a900463ffffffff1681565b610fa1611477565b73ffffffffffffffffffffffffffffffffffffffff16610fbf610ae7565b73ffffffffffffffffffffffffffffffffffffffff1614611015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100c906130ba565b60405180910390fd5b61101e81611895565b50565b60008060996000848152602001908152602001600020549050600081141561104d576000915050611055565b804210159150505b919050565b60028081111561106d5761106c612a42565b5b606560149054906101000a900460ff16600281111561108f5761108e612a42565b5b14156110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c79061314f565b60405180910390fd5b6066548314611114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110b906136b2565b60405180910390fd5b61111f83838361147f565b61115e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111559061371e565b60405180910390fd5b61116661193a565b60975442611174919061348e565b6099600084815260200190815260200160002081905550816066819055508183609660009054906101000a900463ffffffff1663ffffffff167f608828ad904a0c9250c09004ba7226efb08f35a5c815bb3f76b5a8a271cd08b2846040516111dc919061373e565b60405180910390a4505050565b606560149054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611252600161193c565b90508015611276576001600060016101000a81548160ff0219169083151502179055505b61127f84611a2c565b6001609860006101000a81548160ff021916908360ff16021790555084609660006101000a81548163ffffffff021916908363ffffffff1602179055508260668190555060016099600085815260200190815260200160002081905550816097819055507fa8de34d9c26dbb20579bc8c8957813e3168af7c5092d7668390e34471dc4ffb48260405161131291906129fa565b60405180910390a180156113735760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161136a91906137a5565b60405180910390a15b5050505050565b611382611477565b73ffffffffffffffffffffffffffffffffffffffff166113a0610ae7565b73ffffffffffffffffffffffffffffffffffffffff16146113f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ed906130ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145d90613832565b60405180910390fd5b61146f81611619565b50565b600081565b600033905090565b60008061148a6108de565b858560405160200161149e93929190613873565b6040516020818303038152906040528051906020012090506114bf81611af5565b9050606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115048285611b25565b73ffffffffffffffffffffffffffffffffffffffff16149150509392505050565b61152d611b4c565b565b600083905060005b60208110156115e157600060018285901c16905060008583602081106115605761155f61316f565b5b6020020151905060018214156115a05780846040516020016115839291906138b0565b6040516020818303038152906040528051906020012093506115cc565b83816040516020016115b39291906138b0565b6040516020818303038152906040528051906020012093505b505080806115d9906138dc565b915050611537565b509392505050565b6000816040516020016115fc91906139b2565b604051602081830303815290604052805190602001209050919050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808351905060006020850190506117008464ffffffffff168284611b79565b9250505092915050565b6000611729602860048462ffffff1916611be19092919063ffffffff16565b9050919050565b60008061173c83611c18565b6bffffffffffffffffffffffff169050600061175784611c38565b6bffffffffffffffffffffffff16905080822092505050919050565b600061178661178183611c58565b611c7e565b9050919050565b60006117ac600060048462ffffff1916611be19092919063ffffffff16565b9050919050565b60006117d2602460048462ffffff1916611be19092919063ffffffff16565b9050919050565b60006117f8600460208462ffffff1916611c8b9092919063ffffffff16565b9050919050565b6000611847604c806118168562ffffff1916611c38565b6bffffffffffffffffffffffff1661182e91906139d8565b60008562ffffff1916611dd0909392919063ffffffff16565b9050919050565b606060008061185c84611c38565b6bffffffffffffffffffffffff16905060405191508192506118818460208401611e67565b506020818301016040528082525050919050565b6000606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f0f20622a7af9e952a6fec654a196f29e04477b5d335772c26902bec35cc9f22a818360405161192e929190613a0c565b60405180910390a15050565b565b60008060019054906101000a900460ff16156119b35760018260ff1614801561196b575061196930611f72565b155b6119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a190613aa7565b60405180910390fd5b60009050611a27565b8160ff1660008054906101000a900460ff1660ff1610611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff90613aa7565b60405180910390fd5b816000806101000a81548160ff021916908360ff160217905550600190505b919050565b6000611a38600161193c565b90508015611a5c576001600060016101000a81548160ff0219169083151502179055505b611a64611f95565b611a6d82611895565b6001606560146101000a81548160ff02191690836002811115611a9357611a92612a42565b5b02179055508015611af15760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611ae891906137a5565b60405180910390a15b5050565b600081604051602001611b089190613b13565b604051602081830303815290604052805190602001209050919050565b6000806000611b348585611fee565b91509150611b4181612071565b819250505092915050565b6002606560146101000a81548160ff02191690836002811115611b7257611b71612a42565b5b0217905550565b6000808284611b88919061348e565b9050604051811115611b9957600090505b6000811415611bcb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050611bda565b611bd6858585612246565b9150505b9392505050565b60006008826020611bf29190613b39565b611bfc9190613b6d565b60ff16611c0a858585611c8b565b60001c901c90509392505050565b6000806bffffffffffffffffffffffff9050808360781c16915050919050565b6000806bffffffffffffffffffffffff9050808360181c16915050919050565b6000611c77602c60208462ffffff1916611c8b9092919063ffffffff16565b9050919050565b60008160001c9050919050565b6000808260ff161415611ca3576000801b9050611dc9565b611cac84611c38565b6bffffffffffffffffffffffff168260ff1684611cc9919061348e565b1115611d4657611d0a611cdb85611c18565b6bffffffffffffffffffffffff16611cf286611c38565b6bffffffffffffffffffffffff16858560ff16612267565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3d9190613bec565b60405180910390fd5b60208260ff161115611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8490613c80565b60405180910390fd5b60006008830290506000611da086611c18565b6bffffffffffffffffffffffff1690506000611dbb836122d5565b905080868301511693505050505b9392505050565b600080611ddc86611c18565b6bffffffffffffffffffffffff169050611df586612304565b848683611e02919061348e565b611e0c919061348e565b1115611e3b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050611e5f565b8481611e47919061348e565b9050611e5b8364ffffffffff168286611b79565b9150505b949350505050565b6000611e728361232e565b611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea890613d12565b60405180910390fd5b611eba83612341565b611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef090613da4565b60405180910390fd5b6000611f0484611c38565b6bffffffffffffffffffffffff1690506000611f1f85611c18565b6bffffffffffffffffffffffff1690506000604051905084811115611f445760206060fd5b8285848460045afa50611f67611f5987612384565b64ffffffffff168685612246565b935050505092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdb90613e36565b60405180910390fd5b611fec612391565b565b6000806041835114156120305760008060006020860151925060408601519150606086015160001a9050612024878285856123f2565b9450945050505061206a565b6040835114156120615760008060208501519150604085015190506120568683836124ff565b93509350505061206a565b60006002915091505b9250929050565b6000600481111561208557612084612a42565b5b81600481111561209857612097612a42565b5b14156120a357612243565b600160048111156120b7576120b6612a42565b5b8160048111156120ca576120c9612a42565b5b141561210b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210290613ea2565b60405180910390fd5b6002600481111561211f5761211e612a42565b5b81600481111561213257612131612a42565b5b1415612173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216a90613f0e565b60405180910390fd5b6003600481111561218757612186612a42565b5b81600481111561219a57612199612a42565b5b14156121db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d290613fa0565b60405180910390fd5b6004808111156121ee576121ed612a42565b5b81600481111561220157612200612a42565b5b1415612242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223990614032565b60405180910390fd5b5b50565b600083811760601b905082811760601b905081811760181b90509392505050565b606060006122748661255e565b91505060006122828661255e565b91505060006122908661255e565b915050600061229e8661255e565b915050838383836040516020016122b89493929190614216565b604051602081830303815290604052945050505050949350505050565b60007f8000000000000000000000000000000000000000000000000000000000000000600183031d9050919050565b600061230f82611c38565b61231883611c18565b016bffffffffffffffffffffffff169050919050565b60006123398261261c565b159050919050565b600064ffffffffff61235283612384565b64ffffffffff161415612368576000905061237f565b600061237383612304565b90506040518111199150505b919050565b60008160d81c9050919050565b600060019054906101000a900460ff166123e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d790613e36565b60405180910390fd5b6123f06123eb611477565b611619565b565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561242d5760006003915091506124f6565b601b8560ff16141580156124455750601c8560ff1614155b156124575760006004915091506124f6565b60006001878787876040516000815260200160405260405161247c949392919061429b565b6020604051602081039080840390855afa15801561249e573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124ed576000600192509250506124f6565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c612542919061348e565b9050612550878288856123f2565b935093505050935093915050565b6000806000601f90505b600f8160ff1611156125bb5760006008826125839190613b6d565b60ff1685901c905061259481612654565b61ffff168417935060108260ff16146125af57601084901b93505b60018203915050612568565b506000600f90505b60ff8160ff1610156126165760006008826125de9190613b6d565b60ff1685901c90506125ef81612654565b61ffff168317925060008260ff161461260a57601083901b92505b600182039150506125c3565b50915091565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000062ffffff19168262ffffff1916149050919050565b600061266660048360ff16901c61268d565b60ff168117905060088161ffff16901b90506126818261268d565b60ff1681179050919050565b60008060f08317905060f08160ff1614156126ac5760309150506127f8565b60f18160ff1614156126c25760319150506127f8565b60f28160ff1614156126d85760329150506127f8565b60f38160ff1614156126ee5760339150506127f8565b60f48160ff1614156127045760349150506127f8565b60f58160ff16141561271a5760359150506127f8565b60f68160ff1614156127305760369150506127f8565b60f78160ff1614156127465760379150506127f8565b60f88160ff16141561275c5760389150506127f8565b60f98160ff1614156127725760399150506127f8565b60fa8160ff1614156127885760619150506127f8565b60fb8160ff16141561279e5760629150506127f8565b60fc8160ff1614156127b45760639150506127f8565b60fd8160ff1614156127ca5760649150506127f8565b60fe8160ff1614156127e05760659150506127f8565b60ff8160ff1614156127f65760669150506127f8565b505b919050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61282481612811565b811461282f57600080fd5b50565b6000813590506128418161281b565b92915050565b6000819050919050565b61285a81612847565b811461286557600080fd5b50565b60008135905061287781612851565b92915050565b6000806040838503121561289457612893612807565b5b60006128a285828601612832565b92505060206128b385828601612868565b9150509250929050565b600080fd5b6000819050826020600202820111156128de576128dd6128bd565b5b92915050565b600080fd5b600080fd5b60008083601f840112612904576129036128e4565b5b8235905067ffffffffffffffff811115612921576129206128e9565b5b60208301915083600182028301111561293d5761293c6128bd565b5b9250929050565b60008060008060008060a0878903121561296157612960612807565b5b600061296f89828a01612832565b965050602061298089828a016128c2565b955050606087013567ffffffffffffffff8111156129a1576129a061280c565b5b6129ad89828a016128ee565b9450945050608087013567ffffffffffffffff8111156129d0576129cf61280c565b5b6129dc89828a016128ee565b92509250509295509295509295565b6129f481612847565b82525050565b6000602082019050612a0f60008301846129eb565b92915050565b600060208284031215612a2b57612a2a612807565b5b6000612a3984828501612832565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110612a8257612a81612a42565b5b50565b6000819050612a9382612a71565b919050565b6000612aa382612a85565b9050919050565b612ab381612a98565b82525050565b6000602082019050612ace6000830184612aaa565b92915050565b6000819050826020800282011115612aef57612aee6128bd565b5b92915050565b60008060006104408486031215612b0f57612b0e612807565b5b6000612b1d86828701612832565b9350506020612b2e86828701612ad4565b925050610420612b4086828701612868565b9150509250925092565b60008115159050919050565b612b5f81612b4a565b82525050565b6000602082019050612b7a6000830184612b56565b92915050565b612b8981612811565b82525050565b6000602082019050612ba46000830184612b80565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612bf882612baf565b810181811067ffffffffffffffff82111715612c1757612c16612bc0565b5b80604052505050565b6000612c2a6127fd565b9050612c368282612bef565b919050565b600067ffffffffffffffff821115612c5657612c55612bc0565b5b612c5f82612baf565b9050602081019050919050565b82818337600083830152505050565b6000612c8e612c8984612c3b565b612c20565b905082815260208101848484011115612caa57612ca9612baa565b5b612cb5848285612c6c565b509392505050565b600082601f830112612cd257612cd16128e4565b5b8135612ce2848260208601612c7b565b91505092915050565b60008060006104408486031215612d0557612d04612807565b5b600084013567ffffffffffffffff811115612d2357612d2261280c565b5b612d2f86828701612cbd565b9350506020612d4086828701612ad4565b925050610420612d5286828701612868565b9150509250925092565b600060208284031215612d7257612d71612807565b5b6000612d8084828501612868565b91505092915050565b600063ffffffff82169050919050565b612da281612d89565b82525050565b6000602082019050612dbd6000830184612d99565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612dee82612dc3565b9050919050565b612dfe81612de3565b82525050565b6000602082019050612e196000830184612df5565b92915050565b600060208284031215612e3557612e34612807565b5b600082013567ffffffffffffffff811115612e5357612e5261280c565b5b612e5f84828501612cbd565b91505092915050565b612e7181612de3565b8114612e7c57600080fd5b50565b600081359050612e8e81612e68565b92915050565b600060208284031215612eaa57612ea9612807565b5b6000612eb884828501612e7f565b91505092915050565b600080600060608486031215612eda57612ed9612807565b5b6000612ee886828701612832565b9350506020612ef986828701612832565b925050604084013567ffffffffffffffff811115612f1a57612f1961280c565b5b612f2686828701612cbd565b9150509250925092565b60038110612f4157612f40612a42565b5b50565b6000819050612f5282612f30565b919050565b6000612f6282612f44565b9050919050565b612f7281612f57565b82525050565b6000602082019050612f8d6000830184612f69565b92915050565b612f9c81612d89565b8114612fa757600080fd5b50565b600081359050612fb981612f93565b92915050565b60008060008060808587031215612fd957612fd8612807565b5b6000612fe787828801612faa565b9450506020612ff887828801612e7f565b935050604061300987828801612832565b925050606061301a87828801612868565b91505092959194509250565b600060ff82169050919050565b61303c81613026565b82525050565b60006020820190506130576000830184613033565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130a460208361305d565b91506130af8261306e565b602082019050919050565b600060208201905081810360008301526130d381613097565b9050919050565b60006040820190506130ef60008301856129eb565b6130fc60208301846129eb565b9392505050565b7f6661696c65642073746174650000000000000000000000000000000000000000600082015250565b6000613139600c8361305d565b915061314482613103565b602082019050919050565b600060208201905081810360008301526131688161312c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6131aa60408383612c6c565b5050565b600082825260208201905092915050565b60006131cb83856131ae565b93506131d8838584612c6c565b6131e183612baf565b840190509392505050565b600060a0820190506132016000830189612b80565b61320e602083018861319e565b81810360608301526132218186886131bf565b905081810360808301526132368184866131bf565b9050979650505050505050565b7f214d6573736167655374617475732e4e6f6e6500000000000000000000000000600082015250565b600061327960138361305d565b915061328482613243565b602082019050919050565b600060208201905081810360008301526132a88161326c565b9050919050565b7f2170726f76650000000000000000000000000000000000000000000000000000600082015250565b60006132e560068361305d565b91506132f0826132af565b602082019050919050565b60006020820190508181036000830152613314816132d8565b9050919050565b7f2164657374696e6174696f6e0000000000000000000000000000000000000000600082015250565b6000613351600c8361305d565b915061335c8261331b565b602082019050919050565b6000602082019050818103600083015261338081613344565b9050919050565b7f2170726f76656e00000000000000000000000000000000000000000000000000600082015250565b60006133bd60078361305d565b91506133c882613387565b602082019050919050565b600060208201905081810360008301526133ec816133b0565b9050919050565b7f217265656e7472616e7400000000000000000000000000000000000000000000600082015250565b6000613429600a8361305d565b9150613434826133f3565b602082019050919050565b600060208201905081810360008301526134588161341c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061349982612847565b91506134a483612847565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134d9576134d861345f565b5b828201905092915050565b7f2167617300000000000000000000000000000000000000000000000000000000600082015250565b600061351a60048361305d565b9150613525826134e4565b602082019050919050565b600060208201905081810360008301526135498161350d565b9050919050565b600081519050919050565b60005b8381101561357957808201518184015260208101905061355e565b83811115613588576000848401525b50505050565b600061359982613550565b6135a381856131ae565b93506135b381856020860161355b565b6135bc81612baf565b840191505092915050565b60006080820190506135dc6000830187612d99565b6135e96020830186612d99565b6135f66040830185612b80565b8181036060830152613608818461358e565b905095945050505050565b600081905092915050565b600061362982613550565b6136338185613613565b935061364381856020860161355b565b80840191505092915050565b600061365b828461361e565b915081905092915050565b7f6e6f742063757272656e74207570646174650000000000000000000000000000600082015250565b600061369c60128361305d565b91506136a782613666565b602082019050919050565b600060208201905081810360008301526136cb8161368f565b9050919050565b7f2175706461746572207369670000000000000000000000000000000000000000600082015250565b6000613708600c8361305d565b9150613713826136d2565b602082019050919050565b60006020820190508181036000830152613737816136fb565b9050919050565b60006020820190508181036000830152613758818461358e565b905092915050565b6000819050919050565b6000819050919050565b600061378f61378a61378584613760565b61376a565b613026565b9050919050565b61379f81613774565b82525050565b60006020820190506137ba6000830184613796565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061381c60268361305d565b9150613827826137c0565b604082019050919050565b6000602082019050818103600083015261384b8161380f565b9050919050565b6000819050919050565b61386d61386882612811565b613852565b82525050565b600061387f828661385c565b60208201915061388f828561385c565b60208201915061389f828461385c565b602082019150819050949350505050565b60006138bc828561385c565b6020820191506138cc828461385c565b6020820191508190509392505050565b60006138e782612847565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561391a5761391961345f565b5b600182019050919050565b60008160e01b9050919050565b600061393d82613925565b9050919050565b61395561395082612d89565b613932565b82525050565b600081905092915050565b7f4e4f4d4144000000000000000000000000000000000000000000000000000000600082015250565b600061399c60058361395b565b91506139a782613966565b600582019050919050565b60006139be8284613944565b6004820191506139cd8261398f565b915081905092915050565b60006139e382612847565b91506139ee83612847565b925082821015613a0157613a0061345f565b5b828203905092915050565b6000604082019050613a216000830185612df5565b613a2e6020830184612df5565b9392505050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000613a91602e8361305d565b9150613a9c82613a35565b604082019050919050565b60006020820190508181036000830152613ac081613a84565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000613afd601c8361395b565b9150613b0882613ac7565b601c82019050919050565b6000613b1e82613af0565b9150613b2a828461385c565b60208201915081905092915050565b6000613b4482613026565b9150613b4f83613026565b925082821015613b6257613b6161345f565b5b828203905092915050565b6000613b7882613026565b9150613b8383613026565b92508160ff0483118215151615613b9d57613b9c61345f565b5b828202905092915050565b600081519050919050565b6000613bbe82613ba8565b613bc8818561305d565b9350613bd881856020860161355b565b613be181612baf565b840191505092915050565b60006020820190508181036000830152613c068184613bb3565b905092915050565b7f54797065644d656d566965772f696e646578202d20417474656d70746564207460008201527f6f20696e646578206d6f7265207468616e203332206279746573000000000000602082015250565b6000613c6a603a8361305d565b9150613c7582613c0e565b604082019050919050565b60006020820190508181036000830152613c9981613c5d565b9050919050565b7f54797065644d656d566965772f636f7079546f202d204e756c6c20706f696e7460008201527f6572206465726566000000000000000000000000000000000000000000000000602082015250565b6000613cfc60288361305d565b9150613d0782613ca0565b604082019050919050565b60006020820190508181036000830152613d2b81613cef565b9050919050565b7f54797065644d656d566965772f636f7079546f202d20496e76616c696420706f60008201527f696e746572206465726566000000000000000000000000000000000000000000602082015250565b6000613d8e602b8361305d565b9150613d9982613d32565b604082019050919050565b60006020820190508181036000830152613dbd81613d81565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6000613e20602b8361305d565b9150613e2b82613dc4565b604082019050919050565b60006020820190508181036000830152613e4f81613e13565b9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000613e8c60188361305d565b9150613e9782613e56565b602082019050919050565b60006020820190508181036000830152613ebb81613e7f565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000613ef8601f8361305d565b9150613f0382613ec2565b602082019050919050565b60006020820190508181036000830152613f2781613eeb565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f8a60228361305d565b9150613f9582613f2e565b604082019050919050565b60006020820190508181036000830152613fb981613f7d565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b600061401c60228361305d565b915061402782613fc0565b604082019050919050565b6000602082019050818103600083015261404b8161400f565b9050919050565b7f54797065644d656d566965772f696e646578202d204f76657272616e2074686560008201527f20766965772e20536c6963652069732061742030780000000000000000000000602082015250565b60006140ae60358361395b565b91506140b982614052565b603582019050919050565b600065ffffffffffff82169050919050565b60008160d01b9050919050565b60006140ee826140d6565b9050919050565b614106614101826140c4565b6140e3565b82525050565b7f2077697468206c656e6774682030780000000000000000000000000000000000600082015250565b6000614142600f8361395b565b915061414d8261410c565b600f82019050919050565b7f2e20417474656d7074656420746f20696e646578206174206f6666736574203060008201527f7800000000000000000000000000000000000000000000000000000000000000602082015250565b60006141b460218361395b565b91506141bf82614158565b602182019050919050565b7f2e00000000000000000000000000000000000000000000000000000000000000600082015250565b600061420060018361395b565b915061420b826141ca565b600182019050919050565b6000614221826140a1565b915061422d82876140f5565b60068201915061423c82614135565b915061424882866140f5565b600682019150614257826141a7565b915061426382856140f5565b60068201915061427282614135565b915061427e82846140f5565b60068201915061428d826141f3565b915081905095945050505050565b60006080820190506142b06000830187612b80565b6142bd6020830186613033565b6142ca6040830185612b80565b6142d76060830184612b80565b9594505050505056fea164736f6c634300080b000a",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101735760003560e01c80638d3638f4116100de578063b31c01fb11610097578063df034cd011610071578063df034cd014610428578063e7e7a7b714610446578063f2fde38b14610462578063ffa1ad741461047e57610173565b8063b31c01fb146103d0578063c19d93fb146103ec578063d88beda21461040a57610173565b80638d3638f4146102fa5780638da5cb5b14610318578063928bc4b214610336578063961681dc146103665780639d54f41914610384578063a3f81d68146103a057610173565b806345630b1a1161013057806345630b1a1461024c5780636188af0e1461026a57806367a6771d14610286578063715018a6146102a457806371bfb7b8146102ae578063885b5e2d146102de57610173565b8063088b5ed31461017857806319d9d21a1461019457806325e3beda146101b05780632bbd59ca146101ce578063371d3071146101fe578063399926681461022e575b600080fd5b610192600480360381019061018d919061287d565b61049c565b005b6101ae60048036038101906101a99190612944565b610587565b005b6101b8610766565b6040516101c591906129fa565b60405180910390f35b6101e860048036038101906101e39190612a15565b61078a565b6040516101f59190612ab9565b60405180910390f35b61021860048036038101906102139190612af5565b6107aa565b6040516102259190612b65565b60405180910390f35b6102366108d8565b6040516