From bdf263e5c5345663ef1355959381c07cc3e9a772 Mon Sep 17 00:00:00 2001 From: zfliex Date: Sun, 24 Mar 2024 15:13:21 +0800 Subject: [PATCH] upgrade: configure poseidon upgrade on testnet --- core/systemcontracts/upgrade.go | 30 ++++++++++ core/systemcontracts/upgrade_test.go | 86 ++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+) create mode 100644 core/systemcontracts/upgrade_test.go diff --git a/core/systemcontracts/upgrade.go b/core/systemcontracts/upgrade.go index 34f524177..d30d20495 100644 --- a/core/systemcontracts/upgrade.go +++ b/core/systemcontracts/upgrade.go @@ -42,6 +42,8 @@ var ( zeusUpgrade = make(map[string]*Upgrade) heraUpgrade = make(map[string]*Upgrade) + + poseidonUpgrade = make(map[string]*Upgrade) ) func init() { @@ -190,6 +192,31 @@ func init() { }, }, } + poseidonUpgrade[buffaloNet] = &Upgrade{ + UpgradeName: "poseidon", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(ValidatorContract), + CommitUrl: "https://github.com/coredao-org/core-genesis-contract/commit/f95ba12cc2baf8f4c13e2dd2c4278f33a0081aed", + Code: "6080604052600436106101dc5760003560e01c8063983443df11610102578063b7ab4db511610095578063eb57e20211610064578063eb57e2021461056d578063f340fa011461058d578063f9a2bbc7146105a0578063facd743b146105b657600080fd5b8063b7ab4db514610517578063c81b16621461052c578063dc927faf14610542578063e1c7392a1461055857600080fd5b8063a78abc16116100d1578063a78abc161461048a578063ac431751146104b4578063ad3c9da6146104d4578063b11717241461050157600080fd5b8063983443df146104265780639dc092621461043c578063a5422d5c14610452578063a730c8911461047457600080fd5b806334bc99b31161017a5780636969a25c116101495780636969a25c1461036c578063783028a9146103d25780637f05b9ef146103e85780638f73c5ae1461040457600080fd5b806334bc99b31461030957806343756e5c146103205780634392b20114610336578063565c56b31461034c57600080fd5b8063239cba4a116101b6578063239cba4a1461029e57806325ee13e2146102be578063270159f7146102d45780632eae3523146102f457600080fd5b806304e9e3a4146102245780630ac168a11461026457806314c1e1f71461028857600080fd5b3661021f57341561021d5760405134815233907ff11e547d796cc64acdf758e7cee90439494fd886a19159454aa61e473fdbafef9060200160405180910390a25b005b600080fd5b34801561023057600080fd5b5061023a61100781565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561027057600080fd5b5061027a60015481565b60405190815260200161025b565b34801561029457600080fd5b5061023a61100481565b3480156102aa57600080fd5b5061021d6102b93660046130e5565b6105fb565b3480156102ca57600080fd5b5061023a61100581565b3480156102e057600080fd5b5061021d6102ef366004613119565b610b94565b34801561030057600080fd5b5061027a600a81565b34801561031557600080fd5b5061027a62a0668081565b34801561032c57600080fd5b5061023a61100181565b34801561034257600080fd5b5061027a60045481565b34801561035857600080fd5b5061027a6103673660046130c9565b611299565b34801561037857600080fd5b5061038c610387366004613241565b611312565b6040805173ffffffffffffffffffffffffffffffffffffffff9687168152948616602086015292909416918301919091526060820152608081019190915260a00161025b565b3480156103de57600080fd5b5061023a61100881565b3480156103f457600080fd5b5061027a6729a2241af62c000081565b34801561041057600080fd5b5061041961136e565b60405161025b919061330d565b34801561043257600080fd5b5061027a60025481565b34801561044857600080fd5b5061023a61100681565b34801561045e57600080fd5b50610467611887565b60405161025b9190613376565b34801561048057600080fd5b5061027a6125a781565b34801561049657600080fd5b506000546104a49060ff1681565b604051901515815260200161025b565b3480156104c057600080fd5b5061021d6104cf3660046131d8565b6118a4565b3480156104e057600080fd5b5061027a6104ef3660046130c9565b60056020526000908152604090205481565b34801561050d57600080fd5b5061023a61100981565b34801561052357600080fd5b50610419611b3e565b34801561053857600080fd5b5061023a61100281565b34801561054e57600080fd5b5061023a61100381565b34801561056457600080fd5b5061021d611c55565b34801561057957600080fd5b5061021d6105883660046130c9565b611ee9565b61021d61059b3660046130c9565b6121a3565b3480156105ac57600080fd5b5061023a61100081565b3480156105c257600080fd5b506104a46105d13660046130c9565b73ffffffffffffffffffffffffffffffffffffffff16600090815260056020526040902054151590565b33611001146106775760405162461bcd60e51b815260206004820152602560248201527f746865206d73672073656e646572206d75737420626520736c61736820636f6e60448201527f747261637400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260056020526040902054806106a85750505050565b6106b36001826134af565b90506000600382815481106106d857634e487b7160e01b600052603260045260246000fd5b600091825260208220600460059092020101546003549092506106fd906001906134af565b9050806107445760006003848154811061072757634e487b7160e01b600052603260045260246000fd5b906000526020600020906005020160040181905550505050505050565b60006003848154811061076757634e487b7160e01b600052603260045260246000fd5b60009182526020918290206005909102015460405185815273ffffffffffffffffffffffffffffffffffffffff909116925082917f3b6f9ef90462b512a1293ecec018670bf7b7f1876fb727590a8a6d7643130a70910160405180910390a273ffffffffffffffffffffffffffffffffffffffff87166000908152600560205260408120556003546107fb906001906134af565b841461095f5760038054610811906001906134af565b8154811061082f57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600502016003858154811061085e57634e487b7160e01b600052603260045260246000fd5b60009182526020909120825460059092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff9384161782556001808501548184018054841691861691909117905560028086015490840180549093169416939093179055600380840154908201556004928301549201919091556108fe908590613446565b600560006003878154811061092357634e487b7160e01b600052603260045260246000fd5b600091825260208083206001600590930201919091015473ffffffffffffffffffffffffffffffffffffffff1683528201929092526040019020555b600380548061097e57634e487b7160e01b600052603160045260246000fd5b60008281526020812060057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019283020180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168255600182018054821690556002820180549091169055600381018290556004018190559155610a07838561345e565b90508015610a7a5760035460005b81811015610a77578260038281548110610a3f57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600502016004016000828254610a5f9190613446565b90915550819050610a6f81613519565b915050610a15565b50505b6040517fa9955b4000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260248101889052604481018790526110059063a9955b4090606401600060405180830381600087803b158015610af157600080fd5b505af1158015610b05573d6000803e3d6000fd5b50506040517fce73711200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152611007925063ce7371129150602401600060405180830381600087803b158015610b7257600080fd5b505af1158015610b86573d6000803e3d6000fd5b505050505050505050505050565b3361100514610c0b5760405162461bcd60e51b815260206004820152602960248201527f746865206d73672073656e646572206d7573742062652063616e64696461746560448201527f20636f6e74726163740000000000000000000000000000000000000000000000606482015260840161066e565b610cda88888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808c0282810182019093528b82529093508b92508a91829185019084908082843760009201919091525050604080516020808b0282810182019093528a82529093508a92508991829185019084908082843760009201919091525050604080516020808a0282810182019093528982529093508992508891829185019084908082843760009201919091525061245392505050565b84610ce45761128f565b600354600090865b81831015610d66576005600060038581548110610d1957634e487b7160e01b600052603260045260246000fd5b600091825260208083206001600590930201919091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400181205582610d5e81613519565b935050610cec565b8092505b81831015610e20576003805480610d9157634e487b7160e01b600052603160045260246000fd5b60008281526020812060057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019283020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811682556001820180548216905560028201805490911690556003810182905560040155905582610e1881613519565b935050610d6a565b600092505b80831015611262578183106110025760036040518060a001604052808d8d87818110610e6157634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610e7691906130c9565b73ffffffffffffffffffffffffffffffffffffffff1681526020018b8b87818110610eb157634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610ec691906130c9565b73ffffffffffffffffffffffffffffffffffffffff168152602001898987818110610f0157634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610f1691906130c9565b73ffffffffffffffffffffffffffffffffffffffff168152602001878787818110610f5157634e487b7160e01b600052603260045260246000fd5b602090810292909201358352506000918101829052835460018181018655948352918190208351600590930201805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617825591840151948101805495841695831695909517909455604083015160028501805491909316911617905560608101516003830155608001516004909101556111e7565b6040518060a001604052808c8c8681811061102d57634e487b7160e01b600052603260045260246000fd5b905060200201602081019061104291906130c9565b73ffffffffffffffffffffffffffffffffffffffff1681526020018a8a8681811061107d57634e487b7160e01b600052603260045260246000fd5b905060200201602081019061109291906130c9565b73ffffffffffffffffffffffffffffffffffffffff1681526020018888868181106110cd57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906110e291906130c9565b73ffffffffffffffffffffffffffffffffffffffff16815260200186868681811061111d57634e487b7160e01b600052603260045260246000fd5b90506020020135815260200160008152506003848154811061114f57634e487b7160e01b600052603260045260246000fd5b60009182526020918290208351600590920201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216178255928401516001820180549184169185169190911790556040840151600282018054919093169316929092179055606082015160038201556080909101516004909101555b6111f2836001613446565b600560008b8b8781811061121657634e487b7160e01b600052603260045260246000fd5b905060200201602081019061122b91906130c9565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205561125b83613519565b9250610e25565b6040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf90600090a15050505b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260056020526040812054806112cd5750600092915050565b60036112da6001836134af565b815481106112f857634e487b7160e01b600052603260045260246000fd5b906000526020600020906005020160040154915050919050565b6003818154811061132257600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015473ffffffffffffffffffffffffffffffffffffffff9384169550918316939216919085565b606033611005146113e75760405162461bcd60e51b815260206004820152602960248201527f746865206d73672073656e646572206d7573742062652063616e64696461746560448201527f20636f6e74726163740000000000000000000000000000000000000000000000606482015260840161066e565b60035460009081908190815b8181101561148c5760006003828154811061141e57634e487b7160e01b600052603260045260246000fd5b906000526020600020906005020190506000606460025483600401546114449190613472565b61144e919061345e565b905061145a8186613446565b94508082600401600082825461147091906134af565b925050819055505050808061148490613519565b9150506113f3565b5061100273ffffffffffffffffffffffffffffffffffffffff1663631cbe3c836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156114d757600080fd5b505af11580156114eb573d6000803e3d6000fd5b50505050508067ffffffffffffffff81111561151757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611540578160200160208202803683370190505b50945060008167ffffffffffffffff81111561156c57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611595578160200160208202803683370190505b509050600080805b84811015611803576000600382815481106115c857634e487b7160e01b600052603260045260246000fd5b6000918252602090912060059091020180548b5191925073ffffffffffffffffffffffffffffffffffffffff16908b908490811061161657634e487b7160e01b600052603260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526004810154925082156117f0576002810154600382015473ffffffffffffffffffffffffffffffffffffffff90911699506103e89061167a9085613472565b611684919061345e565b9750878311156116fa5761169888846134af565b8583815181106116b857634e487b7160e01b600052603260045260246000fd5b6020026020010181815250508482815181106116e457634e487b7160e01b600052603260045260246000fd5b6020026020010151846116f79190613446565b93505b60006004820181905560405173ffffffffffffffffffffffffffffffffffffffff8b16908a156108fc02908b9084818181858888f1935050505090508015611797578154604080518b81526020810187905273ffffffffffffffffffffffffffffffffffffffff8d81169316917f5f05434e85dc7eb0d20406bd66f9b9c92a6d4d710b8cffeb61176632c83974d3910160405180910390a36117ee565b8154604080518b81526020810187905273ffffffffffffffffffffffffffffffffffffffff8d81169316917fa49797d31ee4d8d18eeb937551b21f754dd96d6e3922324d5c5ba4522ebc45bc910160405180910390a35b505b50806117fb81613519565b91505061159d565b506040517fbaa4402b0000000000000000000000000000000000000000000000000000000081526110079063baa4402b908490611846908c908890600401613320565b6000604051808303818588803b15801561185f57600080fd5b505af1158015611873573d6000803e3d6000fd5b505060006004555050505050505050505090565b60405180610100016040528060d981526020016135b560d9913981565b60005460ff166118f65760405162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604482015260640161066e565b336110061461196d5760405162461bcd60e51b815260206004820152602a60248201527f746865206d73672073656e646572206d75737420626520676f7665726e616e6360448201527f6520636f6e747261637400000000000000000000000000000000000000000000606482015260840161066e565b602081146119ab5783836040517fad23613c00000000000000000000000000000000000000000000000000000000815260040161066e9291906133c7565b611a1f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601b81527f626c6f636b526577617264496e63656e7469766550657263656e740000000000602082015291506127d69050565b15611ab357604080516020601f8401819004810282018101909252828152600091611a629185858083850183828082843760009201919091525061282f92505050565b90506064811115611aab57848482600060646040517f808861f900000000000000000000000000000000000000000000000000000000815260040161066e959493929190613415565b600255611afb565b60405162461bcd60e51b815260206004820152600d60248201527f756e6b6e6f776e20706172616d00000000000000000000000000000000000000604482015260640161066e565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a84848484604051611b3094939291906133e3565b60405180910390a150505050565b60035460609060008167ffffffffffffffff811115611b6d57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611b96578160200160208202803683370190505b50905060005b82811015611c4e5760038181548110611bc557634e487b7160e01b600052603260045260246000fd5b906000526020600020906005020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828281518110611c1757634e487b7160e01b600052603260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015280611c4681613519565b915050611b9c565b5092915050565b60005460ff1615611ca85760405162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015260640161066e565b600080611ccd60405180610100016040528060d981526020016135b560d99139612834565b9150915080611d445760405162461bcd60e51b815260206004820152602160248201527f6661696c656420746f20706172736520696e69742076616c696461746f72536560448201527f7400000000000000000000000000000000000000000000000000000000000000606482015260840161066e565b815160005b81811015611ea5576003848281518110611d7357634e487b7160e01b600052603260045260246000fd5b602090810291909101810151825460018082018555600094855293839020825160059092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255938301518186018054861691841691909117905560408301516002820180549095169216919091179092556060810151600383015560800151600490910155611e24908290613446565b60056000868481518110611e4857634e487b7160e01b600052603260045260246000fd5b60200260200101516020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611e9d90613519565b915050611d49565b50506729a2241af62c00006001908155600a600255600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690911790555050565b3361100114611f605760405162461bcd60e51b815260206004820152602560248201527f746865206d73672073656e646572206d75737420626520736c61736820636f6e60448201527f7472616374000000000000000000000000000000000000000000000000000000606482015260840161066e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604090205480611f8f575050565b611f9a6001826134af565b9050600060038281548110611fbf57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060050201600401549050600060038381548110611ff657634e487b7160e01b600052603260045260246000fd5b6000918252602082206004600590920201019190915560035461201b906001906134af565b905060006003848154811061204057634e487b7160e01b600052603260045260246000fd5b60009182526020918290206005909102015460405185815273ffffffffffffffffffffffffffffffffffffffff909116925082917f8cd4e147d8af98a9e3b6724021b8bf6aed2e5dac71c38f2dce8161b82585b25d910160405180910390a2816120ab575050505050565b60006120b7838561345e565b9050801561219a5760005b858110156121245781600382815481106120ec57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060050201600401600082825461210c9190613446565b9091555081905061211c81613519565b9150506120c2565b506003546000612135876001613446565b90505b8181101561128f57826003828154811061216257634e487b7160e01b600052603260045260246000fd5b906000526020600020906005020160040160008282546121829190613446565b9091555081905061219281613519565b915050612138565b50505050505b50565b3341146122185760405162461bcd60e51b815260206004820152602d60248201527f746865206d6573736167652073656e646572206d75737420626520746865206260448201527f6c6f636b2070726f647563657200000000000000000000000000000000000000606482015260840161066e565b60005460ff1661226a5760405162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604482015260640161066e565b3a156122b85760405162461bcd60e51b815260206004820152601460248201527f6761737072696365206973206e6f74207a65726f000000000000000000000000604482015260640161066e565b6122c562a0668043613552565b6122ea576127106125a76001546122dc9190613472565b6122e6919061345e565b6001555b6001546004543491906122fe908390613446565b6123089190613446565b471061231e5760015461231b9082613446565b90505b73ffffffffffffffffffffffffffffffffffffffff821660009081526005602052604090205480156123fe57600060036123596001846134af565b8154811061237757634e487b7160e01b600052603260045260246000fd5b90600052602060002090600502019050826004546123959190613446565b60049081558101546123a8908490613446565b600482015560405183815273ffffffffffffffffffffffffffffffffffffffff8516907f93a090ecc682c002995fad3c85b30c5651d7fd29b0be5da9d784a3302aedc0559060200160405180910390a250505050565b8273ffffffffffffffffffffffffffffffffffffffff167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b48360405161244691815260200190565b60405180910390a2505050565b83518351146124f05760405162461bcd60e51b815260206004820152604660248201527f746865206e756d62657273206f6620636f6e73656e737573416464726573736560448201527f7320616e64206f7065726174654164647265737365732073686f756c6420626560648201527f20657175616c0000000000000000000000000000000000000000000000000000608482015260a40161066e565b815183511461258d5760405162461bcd60e51b815260206004820152604260248201527f746865206e756d62657273206f6620636f6e73656e737573416464726573736560448201527f7320616e64206665654164647265737365732073686f756c642062652065717560648201527f616c000000000000000000000000000000000000000000000000000000000000608482015260a40161066e565b805183511461262a5760405162461bcd60e51b815260206004820152604c60248201527f746865206e756d62657273206f6620636f6e73656e737573416464726573736560448201527f7320616e6420636f6d6d697373696f6e54686f7573616e64746873732073686f60648201527f756c6420626520657175616c0000000000000000000000000000000000000000608482015260a40161066e565b60005b83518110156127cf5760005b8181101561271d5784818151811061266157634e487b7160e01b600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1685838151811061269f57634e487b7160e01b600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141561270b5760405162461bcd60e51b815260206004820152601b60248201527f6475706c696361746520636f6e73656e73757320616464726573730000000000604482015260640161066e565b8061271581613519565b915050612639565b506103e882828151811061274157634e487b7160e01b600052603260045260246000fd5b602002602001015111156127bd5760405162461bcd60e51b815260206004820152602260248201527f636f6d6d697373696f6e54686f7573616e64746873206f7574206f6620626f7560448201527f6e64000000000000000000000000000000000000000000000000000000000000606482015260840161066e565b806127c781613519565b91505061262d565b5050505050565b6000816040516020016127e991906132f1565b604051602081830303815290604052805190602001208360405160200161281091906132f1565b6040516020818303038152906040528051906020012014905092915050565b015190565b606060008061287261286d8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6129bf565b805190915060008167ffffffffffffffff8111156128a057634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561291757816020015b6040805160a0810182526000808252602080830182905292820181905260608201819052608082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816128be5790505b50905060005b828110156129b25760008061295886848151811061294b57634e487b7160e01b600052603260045260246000fd5b6020026020010151612af1565b9150915080612971575091976000975095505050505050565b8184848151811061299257634e487b7160e01b600052603260045260246000fd5b6020026020010181905250505080806129aa90613519565b91505061291d565b5095901515945092505050565b60606129ca82612bd7565b6129d357600080fd5b60006129de83612c10565b905060008167ffffffffffffffff811115612a0957634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612a4e57816020015b6040805180820190915260008082526020820152815260200190600190039081612a275790505b5090506000612a608560200151612c93565b8560200151612a6f9190613446565b90506000805b84811015612ae657612a8683612d15565b9150604051806040016040528083815260200184815250848281518110612abd57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152612ad28284613446565b925080612ade81613519565b915050612a75565b509195945050505050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040805160a08101825260008082526020820181905291810182905260608101829052608081018290526000612b5185612e65565b905060005b612b5f82612ed1565b15612bcb57612b75612b7083612ef5565b612f52565b73ffffffffffffffffffffffffffffffffffffffff166020840152612b9c612b7083612ef5565b73ffffffffffffffffffffffffffffffffffffffff16604084018190528352506103e860608301526001612b56565b91959194509092505050565b8051600090612be857506000919050565b6020820151805160001a9060c0821015612c06575060009392505050565b5060019392505050565b8051600090612c2157506000919050565b600080612c318460200151612c93565b8460200151612c409190613446565b9050600084600001518560200151612c589190613446565b90505b80821015612c8a57612c6c82612d15565b612c769083613446565b915082612c8281613519565b935050612c5b565b50909392505050565b8051600090811a6080811015612cac5750600092915050565b60b8811080612cc7575060c08110801590612cc7575060f881105b15612cd55750600192915050565b60c0811015612d0957612cea600160b86134c6565b612cf79060ff16826134af565b612d02906001613446565b9392505050565b612cea600160f86134c6565b80516000908190811a6080811015612d305760019150611c4e565b60b8811015612d5657612d446080826134af565b612d4f906001613446565b9150611c4e565b60c0811015612dd757600060b78203600186019550806020036101000a865104915060018101820193505080831015612dd15760405162461bcd60e51b815260206004820152601160248201527f6164646974696f6e206f766572666c6f77000000000000000000000000000000604482015260640161066e565b50611c4e565b60f8811015612deb57612d4460c0826134af565b600060f78203600186019550806020036101000a865104915060018101820193505080831015612e5d5760405162461bcd60e51b815260206004820152601160248201527f6164646974696f6e206f766572666c6f77000000000000000000000000000000604482015260640161066e565b505092915050565b6040805160808101825260009181018281526060820183905281526020810191909152612e9182612bd7565b612e9a57600080fd5b6000612ea98360200151612c93565b8360200151612eb89190613446565b6040805180820190915293845260208401525090919050565b80518051602082015160009291612ee791613446565b836020015110915050919050565b6040805180820190915260008082526020820152612f1282612ed1565b612f1b57600080fd5b60208201516000612f2b82612d15565b9050612f378183613446565b60209485015260408051808201909152908152928301525090565b8051600090601514612f6357600080fd5b612f6c82612f72565b92915050565b805160009015801590612f8757508151602110155b612f9057600080fd5b6000612f9f8360200151612c93565b90508083600001511015612ff55760405162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015260640161066e565b82516000906130059083906134af565b905060008083866020015161301a9190613446565b905080519150602083101561303657826020036101000a820491505b50949350505050565b60008083601f840112613050578182fd5b50813567ffffffffffffffff811115613067578182fd5b6020830191508360208260051b850101111561308257600080fd5b9250929050565b60008083601f84011261309a578182fd5b50813567ffffffffffffffff8111156130b1578182fd5b60208301915083602082850101111561308257600080fd5b6000602082840312156130da578081fd5b8135612d0281613592565b6000806000606084860312156130f9578182fd5b833561310481613592565b95602085013595506040909401359392505050565b6000806000806000806000806080898b031215613134578384fd5b883567ffffffffffffffff8082111561314b578586fd5b6131578c838d0161303f565b909a50985060208b013591508082111561316f578586fd5b61317b8c838d0161303f565b909850965060408b0135915080821115613193578586fd5b61319f8c838d0161303f565b909650945060608b01359150808211156131b7578384fd5b506131c48b828c0161303f565b999c989b5096995094979396929594505050565b600080600080604085870312156131ed578384fd5b843567ffffffffffffffff80821115613204578586fd5b61321088838901613089565b90965094506020870135915080821115613228578384fd5b5061323587828801613089565b95989497509550505050565b600060208284031215613252578081fd5b5035919050565b6000815180845260208085019450808401835b8381101561329e57815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161326c565b509495945050505050565b81835281816020850137506000806020838501015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600082516133038184602087016134e9565b9190910192915050565b602081526000612d026020830184613259565b6040815260006133336040830185613259565b828103602084810191909152845180835285820192820190845b818110156133695784518352938301939183019160010161334d565b5090979650505050505050565b60208152600082518060208401526133958160408501602087016134e9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6020815260006133db6020830184866132a9565b949350505050565b6040815260006133f76040830186886132a9565b828103602084015261340a8185876132a9565b979650505050505050565b6080815260006134296080830187896132a9565b602083019590955250604081019290925260609091015292915050565b6000821982111561345957613459613566565b500190565b60008261346d5761346d61357c565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156134aa576134aa613566565b500290565b6000828210156134c1576134c1613566565b500390565b600060ff821660ff8416808210156134e0576134e0613566565b90039392505050565b60005b838110156135045781810151838201526020016134ec565b83811115613513576000848401525b50505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561354b5761354b613566565b5060010190565b6000826135615761356161357c565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff811681146121a057600080fdfef8d7ea9401bca3615d24d3c638836691517b2b9b49b054b1943ae030dc3717c66f63d6e8f1d1508a5c941ff46dea94a458499604a85e90225a14946f36368ae24df16d94de442f5ba55687a24f04419424e0dc2593cc9f4cea945e00c0d5c4c10d4c805aba878d51129a89d513e094cb089be171e256acdaac1ebbeb32ffba0dd438eeea941cd652bc64af3f09b490daae27f46e53726ce230940a53b7e0ffd97357e444b85f4d683c1d8e22879aea94da37ccecbb2d7c83ae27ee2bebfe8ebce162c60094d82c24274ebbfe438788d684dc6034c3c67664a4a264697066735822122016d9dece0c7909fa2d9f8fe43960bdd3367a872102ea9b86f0307faf423c926464736f6c63430008040033", + }, + { + ContractAddr: common.HexToAddress(LightClientContract), + CommitUrl: "https://github.com/coredao-org/core-genesis-contract/commit/f95ba12cc2baf8f4c13e2dd2c4278f33a0081aed", + Code: "608060405234801561001057600080fd5b50600436106104dd5760003560e01c80638a9c5aa111610286578063c81b16621161016b578063e1c7392a116100e3578063f016e48111610097578063f7d134071161007c578063f7d134071461099a578063f9a2bbc7146109a3578063fdd31fcd146109ac57600080fd5b8063f016e4811461098a578063f446687d1461099257600080fd5b8063e75d72c7116100c8578063e75d72c71461095c578063ea54b2aa1461096f578063edade1891461097757600080fd5b8063e1c7392a1461094b578063e287d9ac1461095357600080fd5b8063d5fe55581161013a578063dcae76ab1161011f578063dcae76ab14610925578063dd86037e1461092e578063dfb6419f1461093857600080fd5b8063d5fe555814610914578063dc927faf1461091c57600080fd5b8063c81b1662146108dd578063cab8966b146108e6578063d06305a9146108ee578063d45c44351461090157600080fd5b8063a78abc16116101fe578063ac7b3b7c116101cd578063b1171724116101b2578063b1171724146108b8578063b8a6c086146108c1578063b95c4a57146108d457600080fd5b8063ac7b3b7c146108a5578063ad2dec82146108ae57600080fd5b8063a78abc1614610869578063a8b0bb8314610876578063ac0e37a01461087f578063ac4317511461089257600080fd5b806393e9d41311610255578063951188891161023a578063951188891461082d5780639dc092621461084d578063a7206cd61461085657600080fd5b806393e9d413146107f7578063948602331461080a57600080fd5b80638a9c5aa1146107b25780638b07ac61146107bb5780638ea7e9be146107c4578063930e1b09146107d757600080fd5b80633a975612116103c75780636949b35c1161033f578063783028a9116102f35780637ba53285116102d85780637ba532851461076e57806382f8b6e914610781578063896efbf21461078a57600080fd5b8063783028a914610752578063792626be1461075b57600080fd5b8063730055aa11610324578063730055aa1461072057806374f2272d14610740578063750a012e1461074957600080fd5b80636949b35c146106f75780636daf2f5b1461071757600080fd5b806351b6ada31161039657806353a467291161037b57806353a46729146106dd57806354133307146106e65780635e9d2b1f146106ee57600080fd5b806351b6ada3146106aa57806351e13fac146106ca57600080fd5b80633a9756121461067c5780633cfc97bf1461068457806343756e5c146106975780634c86f558146106a057600080fd5b8063285d84cc1161045a5780632ca3212511610429578063352b33551161040e578063352b33551461061c578063378bc94c1461063d578063388d3a551461067357600080fd5b80632ca32125146105f35780632ed87b09146105fc57600080fd5b8063285d84cc146105a4578063288e8dc4146105c75780632a88b694146105cf5780632b861629146105de57600080fd5b80631ad5bb5c116104b15780631c643312116104965780631c6433121461057f5780631fca52781461059257806325ee13e21461059b57600080fd5b80631ad5bb5c146105405780631b20087c1461057657600080fd5b80625eeee9146104e257806304e9e3a41461050157806308f2ec061461052f57806314c1e1f714610537575b600080fd5b6104ee640826299e0081565b6040519081526020015b60405180910390f35b61050a61100781565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016104f8565b6104ee601481565b61050a61100481565b61050a61054e366004613320565b60009081526011602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6104ee60085481565b61050a61058d366004613320565b6109cc565b6104ee60015481565b61050a61100581565b6104ee7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b6104ee600681565b6104ee678ac7230489e8000081565b6105f16105ec3660046133c5565b610a03565b005b6104ee60035481565b6104ee61060a3660046134e3565b60136020526000908152604090205481565b6106246110b5565b60405167ffffffffffffffff90911681526020016104f8565b61050a61064b366004613320565b60116020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6104ee61272481565b6104ee603281565b6104ee610692366004613320565b6110c6565b61050a61100181565b6104ee6201518081565b6106bd6106b836600461346e565b61118c565b6040516104f89190613561565b6104ee6106d8366004613320565b611227565b6104ee61271a81565b6104ee606481565b6104ee60065481565b6104ee6107053660046134e3565b60106020526000908152604090205481565b6104ee61274281565b61073361072e366004613320565b611390565b6040516104f891906135f3565b6104ee60045481565b6104ee60025481565b61050a61100881565b6104ee610769366004613320565b61142a565b6104ee61077c366004613320565b6114e2565b6104ee600a5481565b61079d610798366004613320565b61150e565b60405163ffffffff90911681526020016104f8565b6104ee61273881565b6104ee60055481565b61079d6107d2366004613320565b611532565b6104ee6107e53660046132df565b600c6020526000908152604090205481565b6106bd610805366004613320565b61157f565b61081d610818366004613320565b6115f8565b60405190151581526020016104f8565b61084061083b366004613499565b611615565b6040516104f891906135bb565b61050a61100681565b6104ee610864366004613320565b61172c565b60005461081d9060ff1681565b6104ee60075481565b61050a61088d366004613320565b611751565b6105f16108a0366004613405565b611775565b6104ee61276a81565b61079d620af38081565b61050a61100981565b6108406108cf36600461346e565b611eac565b6104ee61272e81565b61050a61100281565b61079d611f34565b61079d6108fc366004613320565b611f46565b61062461090f366004613320565b611f6a565b610624611f9d565b61050a61100381565b6104ee60095481565b6106246212750081565b61050a610946366004613320565b611fab565b6105f1611fcf565b6104ee60125481565b6105f161096a3660046132df565b612154565b610733612311565b61081d610985366004613350565b61232d565b6104ee600781565b6002546104ee565b61079d6107e081565b61050a61100081565b6104ee6109ba3660046132df565b600d6020526000908152604090205481565b600b81815481106109dc57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517f541d55480000000000000000000000000000000000000000000000000000000081523360048201526110049063541d55489060240160206040518083038186803b158015610a5457600080fd5b505afa158015610a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8c9190613300565b610af7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f746865206d73672073656e646572206973206e6f7420612072656c617965720060448201526064015b60405180910390fd5b60125415610b0757601254610b0e565b640826299e005b3a14610b76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f6d75737420757365206c696d69746564206761737072696365000000000000006044820152606401610aee565b6000610bba83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250605091506124679050565b90506000610bc7826124e0565b60008181526011602052604090205490915073ffffffffffffffffffffffffffffffffffffffff1615610c56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e27742073796e63206475706c69636174656420686561646572000000006044820152606401610aee565b6000806000610c6585856125c0565b92509250925080600014610ca957604051819085907f591f7e28c6b17bc54bdf2bdbf67daf8aaca92221f3577319607fba0ce38edc7290600090a350505050505050565b610cb460025461150e565b63ffffffff16610cc6846102d06136db565b63ffffffff1611610d33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e27742073796e6320686561646572203520646179732061676f000000006044820152606401610aee565b6000610d408760206136c3565b90506000610d8589898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508c91506124679050565b9050610d8f613145565b6000808060808487876064600019fa610da757600080fd5b5050815160208301516040840151919250906000610dc76107e08b613717565b9050610dd78c848b8d8589612822565b60008c8152600f602090815260409091208251610dfa9391929190910190613163565b50610e076107e08b6138fe565b63ffffffff16610e2a5763ffffffff811660009081526010602052604090208b90555b60008b815260116020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790556005546009805491929091610e769084906136c3565b9091555050336000908152600c6020526040902054610eea57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555b336000908152600c60205260408120805491610f05836138ab565b9190505550600654600860008154610f1c906138ab565b918290555010610f60576000610f30612900565b336000908152600d6020526040812080549293508392909190610f549084906136c3565b90915550506000600855505b6001548910611047576000610f7660018c6137de565b90506000610f838d611227565b90505b63ffffffff82166000908152601360205260409020548114801590610fc357508b63ffffffff1660068363ffffffff16610fc091906136c3565b10155b15610ffb5763ffffffff82166000908152601360205260409020819055610fe982613850565b9150610ff481611227565b9050610f86565b61100660025461150e565b63ffffffff168c63ffffffff161115611022576110228d612cd2565b505060028b9055600189905563ffffffff8a1660009081526013602052604090208b90555b6040805173ffffffffffffffffffffffffffffffffffffffff86811682526020820185905263ffffffff8d1692908616918e917f04d2d7fea49cb37d18896bf3ec2d974275b276f48a657185bc22fb2c7bb3323a910160405180910390a45050505050505050505050505050565b6110c36212750060046137a0565b81565b6000818152600f602052604081208054829160e09161116e91609c916110eb90613870565b80601f016020809104026020016040519081016040528092919081815260200182805461111790613870565b80156111645780601f1061113957610100808354040283529160200191611164565b820191906000526020600020905b81548152906001019060200180831161114757829003601f168201915b5050505050015190565b63ffffffff911c166000908152601060205260409020549392505050565b6000828152600e6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845260010182529182902080548351818402810184019094528084526060939283018282801561121a57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111ef575b5050505050905092915050565b6000818152600f60205260408120805461138a9161124c91602491906110eb90613870565b7bffffffff000000000000000000000000ffffffff00000000000000007eff000000ff000000ff000000ff000000ff000000ff000000ff000000ff0000600883811c9182167fff000000ff000000ff000000ff000000ff000000ff000000ff000000ff0000009490911b93841617601090811c7cff000000ff000000ff000000ff000000ff000000ff000000ff000000ff9092167dff000000ff000000ff000000ff000000ff000000ff000000ff000000ff009094169390931790921b91909117602081811c9283167fffffffff000000000000000000000000ffffffff0000000000000000000000009290911b91821617604090811c73ffffffff000000000000000000000000ffffffff90931677ffffffff000000000000000000000000ffffffff0000000090921691909117901b17608081811c91901b1790565b92915050565b600f60205260009081526040902080546113a990613870565b80601f01602080910402602001604051908101604052809291908181526020018280546113d590613870565b80156114225780601f106113f757610100808354040283529160200191611422565b820191906000526020600020905b81548152906001019060200180831161140557829003601f168201915b505050505081565b60006007548211611439575090565b816007541080156114575750600754611453906002613755565b8211155b1561146457505060075490565b8160075460026114749190613755565b1080156114b357506004600754600361148d9190613755565b6114979190613703565b6007546114a5906002613755565b6114af91906136c3565b8211155b156114d2578160075460036114c89190613755565b61138a91906137c7565b61138a600483613703565b919050565b6000818152600f60205260408120805460809161150691608891906110eb90613870565b901c92915050565b6000818152600f60205260408120805460e09161150691609891906110eb90613870565b6000818152600f60205260408120805461138a9160e091611559916068916110eb90613870565b901c600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1790565b6000818152600e60209081526040918290208054835181840281018401909452808452606093928301828280156115ec57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116115c1575b50505050509050919050565b6000620af3806116078361150e565b63ffffffff16101592915050565b6060818067ffffffffffffffff81111561163f57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611668578160200160208202803683370190505b506000868152600e602052604081209193505b82811015611722578160010160008787848181106116a957634e487b7160e01b600052603260045260246000fd5b90506020020160208101906116be91906132df565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002054845185908390811061170757634e487b7160e01b600052603260045260246000fd5b602090810291909101015261171b816138ab565b905061167b565b5050509392505050565b6000818152600f60205260408120805461138a9161124c91604491906110eb90613870565b6000818152600f60205260408120805460609161150691607491906110eb90613870565b60005460ff166117e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e697420796574000000000000006044820152606401610aee565b3361100614611872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f746865206d73672073656e646572206d75737420626520676f7665726e616e6360448201527f6520636f6e7472616374000000000000000000000000000000000000000000006064820152608401610aee565b602081146118b05783836040517fad23613c000000000000000000000000000000000000000000000000000000008152600401610aee929190613644565b61192484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601381527f726577617264466f7253796e634865616465720000000000000000000000000060208201529150612f149050565b156119d157604080516020601f840181900481028201810190925282815260009161196791858580838501838280828437600092019190915250612f0f92505050565b905080158061197e575068056bc75e2d6310000081115b156119c957848482600168056bc75e2d631000006040517f808861f9000000000000000000000000000000000000000000000000000000008152600401610aee959493929190613692565b600555611e69565b611a4584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601a81527f63616c6c6572436f6d70656e736174696f6e4d6f6c6563756c6500000000000060208201529150612f149050565b15611adb57604080516020601f8401819004810282018101909252828152600091611a8891858580838501838280828437600092019190915250612f0f92505050565b9050612710811115611ad35784848260006127106040517f808861f9000000000000000000000000000000000000000000000000000000008152600401610aee959493929190613692565b600455611e69565b611b4f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600981527f726f756e6453697a65000000000000000000000000000000000000000000000060208201529150612f149050565b15611be557604080516020601f8401819004810282018101909252828152600091611b9291858580838501838280828437600092019190915250612f0f92505050565b9050600754811015611bdd576007546040517f808861f9000000000000000000000000000000000000000000000000000000008152610aee9187918791859160001990600401613692565b600655611e69565b611c5984848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600981527f6d6178576569676874000000000000000000000000000000000000000000000060208201529150612f149050565b15611cf857604080516020601f8401819004810282018101909252828152600091611c9c91858580838501838280828437600092019190915250612f0f92505050565b9050801580611cac575060065481115b15611cf05784848260016006546040517f808861f9000000000000000000000000000000000000000000000000000000008152600401610aee959493929190613692565b600755611e69565b611d6c84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601281527f73746f7265426c6f636b4761735072696365000000000000000000000000000060208201529150612f149050565b15611e0757604080516020601f8401819004810282018101909252828152600091611daf91858580838501838280828437600092019190915250612f0f92505050565b9050633b9aca00811015611dff57848482633b9aca006000196040517f808861f9000000000000000000000000000000000000000000000000000000008152600401610aee959493929190613692565b601255611e69565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f756e6b6e6f776e20706172616d000000000000000000000000000000000000006044820152606401610aee565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a84848484604051611e9e9493929190613660565b60405180910390a150505050565b6000828152600e6020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452600190810183529281902090920180548351818402810184019094528084526060939283018282801561121a57602002820191906000526020600020905b815481526020019060010190808311611f14575050505050905092915050565b6000611f4160025461150e565b905090565b6000818152600f60205260408120805460e09161150691609c91906110eb90613870565b6000818152600f602052604081208054611f919160e091611559916064916110eb90613870565b63ffffffff1692915050565b6110c360046212750061373a565b6000818152600f6020526040812080546060916115069160a091906110eb90613870565b60005460ff161561203c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e6974000000000000006044820152606401610aee565b600061205f60405180608001604052806050815260200161394e605091396124e0565b60018080556002829055600382905560408051608081019091526050808252929350600092839291839161394e6020830139905060006120a46107e0620af380613717565b63ffffffff811660009081526010602052604081208890559091506120d0838786620af380868a612822565b6000888152600f6020908152604090912082519293506120f4929091840190613163565b5050678ac7230489e8000060055550506032600455505060646006555050601460075562015180600a55640826299e00601255600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60005460ff166121c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e697420796574000000000000006044820152606401610aee565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600d60205260409020548061224d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6e6f2072656c61796572207265776172640000000000000000000000000000006044820152606401610aee565b73ffffffffffffffffffffffffffffffffffffffff82166000818152600d602052604080822091909155517f9a99b4f0000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052829061100290639a99b4f090604401602060405180830381600087803b1580156122d357600080fd5b505af11580156122e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230b9190613338565b50505050565b60405180608001604052806050815260200161394e6050913981565b63ffffffff851660009081526013602052604081205461234b611f34565b63ffffffff1661235b87896136db565b63ffffffff16118061236b575087155b80612374575080155b1561238357600091505061245d565b6000818152600f6020526040812080546123a3916044916110eb90613870565b9050846123b5578814915061245d9050565b8860005b86811015612457576123cc6002876138ea565b6001141561240b576124048888838181106123f757634e487b7160e01b600052603260045260246000fd5b9050602002013583612f6d565b915061243e565b61243b8289898481811061242f57634e487b7160e01b600052603260045260246000fd5b90506020020135612f6d565b91505b60019590951c948061244f816138ab565b9150506123b9565b50149150505b9695505050505050565b6060600061247584846137c7565b90508067ffffffffffffffff81111561249e57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156124c8576020820181803683370190505b50915060208581019085840101611722828285612f99565b600061138a600280846040516124f69190613545565b602060405180830381855afa158015612513573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125369190613338565b60405160200161254891815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261258091613545565b602060405180830381855afa15801561259d573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061124c9190613338565b6000806000806125d461124c602488015190565b905060006125e1826114e2565b9050806125f5575061272e915061281b9050565b6125fe866114e2565b935083156126135750612738915061281b9050565b600061262560e061155960688b015190565b9050600061263282612ff2565b90508715806126415750808810155b15612655575061276a935061281b92505050565b61265e8461150e565b6126699060016136db565b9650600061267685611532565b90506126846107e0896138fe565b63ffffffff16156126ca578063ffffffff168363ffffffff16141580156126b0575063ffffffff811615155b156126c5575061271a945061281b9350505050565b6127da565b60006126d582612ff2565b905060006126e287611f6a565b905060006126ef886110c6565b905060006126fc82611f6a565b9050600061270a8285613803565b905061271a60046212750061373a565b67ffffffffffffffff168167ffffffffffffffff1610156127465761274360046212750061373a565b90505b6127546212750060046137a0565b67ffffffffffffffff168167ffffffffffffffff1611156127805761277d6212750060046137a0565b90505b6212750081860204600061279382613068565b90508063ffffffff168a63ffffffff16141580156127b6575063ffffffff811615155b156127d257506127249b5061281b9a5050505050505050505050565b505050505050505b6000612802837bffff0000000000000000000000000000000000000000000000000000613703565b905061280e81866136c3565b9750600096505050505050505b9250925092565b6040805160a080825260c08201909252606091602082018180368337019050509050600060408773ffffffffffffffffffffffffffffffffffffffff16901b9050600060408563ffffffff16901b60608763ffffffff16901b608089901b61288a91906136c3565b61289491906136c3565b90507fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b1660208481019060708601908c015b818310156128e35780518352602092830192016128cb565b509384525060188301919091526030909101529695505050505050565b600954600b805460408051602080840282018101909252828152600094938593849383018282801561296857602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161293d575b5050505050905060008151905060008167ffffffffffffffff81111561299e57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156129c7578160200160208202803683370190505b50905060005b82811015612a9a5760008482815181106129f757634e487b7160e01b600052603260045260246000fd5b602002602001015190506000612a4b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461142a565b905080848481518110612a6e57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152612a8381886136c3565b965050508080612a92906138ab565b9150506129cd565b50600061271060045487612aae9190613755565b612ab89190613703565b9050612ac481876137c7565b95508560015b84811015612bb05760008789868481518110612af657634e487b7160e01b600052603260045260246000fd5b6020026020010151612b089190613755565b612b129190613703565b905080600d6000898581518110612b3957634e487b7160e01b600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b8a91906136c3565b90915550612b9a905081846137c7565b9250508080612ba8906138ab565b915050612aca565b5080600d600087600081518110612bd757634e487b7160e01b600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c2891906136c3565b9091555050600060098190555b84811015612cba57600c6000878381518110612c6157634e487b7160e01b600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558080612cb2906138ab565b915050612c35565b50612cc7600b60006131e7565b509695505050505050565b60005b6006811015612d0757600354821415612cec575050565b612cf582611227565b9150612d00816138ab565b9050612cd5565b506000600a54612d1683611f6a565b67ffffffffffffffff16612d2a9190613703565b90506000612d3783611fab565b90506000600761100573ffffffffffffffffffffffffffffffffffffffff166373fa03ed6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d8557600080fd5b505afa158015612d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbd9190613338565b612dc791906137c7565b905073ffffffffffffffffffffffffffffffffffffffff821615801590612ded57508083115b1561230b576000612dfd85611751565b6000858152600e6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845260018101909252909120549192509080612e8c5781546001810183556000838152602090200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87161790555b5073ffffffffffffffffffffffffffffffffffffffff93841660009081526001918201602090815260408220805480850182558184528284200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169590971694909417909555918101805491820181558252929020909101929092555050565b015190565b600081604051602001612f279190613545565b6040516020818303038152906040528051906020012083604051602001612f4e9190613545565b6040516020818303038152906040528051906020012014905092915050565b600060405183815282602082015260208160408360025afa5060208160208360025afa50519392505050565b60208110612fd15782518252612fb06020836136c3565b9150612fbd6020846136c3565b9250612fca6020826137c7565b9050612f99565b915181516020939093036101000a6000190180199091169216919091179052565b600060ff601883901c1662ffffff831660038211613036576130158260036137de565b613020906008613774565b63ffffffff9182169082161c9081169250613061565b63ffffffff8116925061304a6003836137de565b613055906008613774565b63ffffffff1683901b92505b5050919050565b600080825b80156130885760011c81613080816138c6565b92505061306d565b600060036130978460076136db565b63ffffffff16901c9050600060038263ffffffff16116130e2576130bc8260036137de565b6130c7906008613774565b63ffffffff168662ffffff1663ffffffff16901b905061310c565b6130ed6003836137de565b6130f8906008613774565b63ffffffff1686901c90508062ffffff1690505b6280000081161561312d5760081c62ffffff1681613129816138c6565b9250505b60188263ffffffff16901b8117945050505050919050565b60405180608001604052806004906020820280368337509192915050565b82805461316f90613870565b90600052602060002090601f01602090048101928261319157600085556131d7565b82601f106131aa57805160ff19168380011785556131d7565b828001600101855582156131d7579182015b828111156131d75782518255916020019190600101906131bc565b506131e3929150613208565b5090565b50805460008255906000526020600020908101906132059190613208565b50565b5b808211156131e35760008155600101613209565b803573ffffffffffffffffffffffffffffffffffffffff811681146114dd57600080fd5b60008083601f840112613252578182fd5b50813567ffffffffffffffff811115613269578182fd5b6020830191508360208260051b850101111561328457600080fd5b9250929050565b60008083601f84011261329c578182fd5b50813567ffffffffffffffff8111156132b3578182fd5b60208301915083602082850101111561328457600080fd5b803563ffffffff811681146114dd57600080fd5b6000602082840312156132f0578081fd5b6132f98261321d565b9392505050565b600060208284031215613311578081fd5b815180151581146132f9578182fd5b600060208284031215613331578081fd5b5035919050565b600060208284031215613349578081fd5b5051919050565b60008060008060008060a08789031215613368578182fd5b86359550613378602088016132cb565b9450613386604088016132cb565b9350606087013567ffffffffffffffff8111156133a1578283fd5b6133ad89828a01613241565b979a9699509497949695608090950135949350505050565b600080602083850312156133d7578182fd5b823567ffffffffffffffff8111156133ed578283fd5b6133f98582860161328b565b90969095509350505050565b6000806000806040858703121561341a578384fd5b843567ffffffffffffffff80821115613431578586fd5b61343d8883890161328b565b90965094506020870135915080821115613455578384fd5b506134628782880161328b565b95989497509550505050565b60008060408385031215613480578182fd5b823591506134906020840161321d565b90509250929050565b6000806000604084860312156134ad578283fd5b83359250602084013567ffffffffffffffff8111156134ca578283fd5b6134d686828701613241565b9497909650939450505050565b6000602082840312156134f4578081fd5b6132f9826132cb565b81835281816020850137506000806020838501015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60008251613557818460208701613824565b9190910192915050565b6020808252825182820181905260009190848201906040850190845b818110156135af57835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161357d565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156135af578351835292840192918401916001016135d7565b6020815260008251806020840152613612816040850160208701613824565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6020815260006136586020830184866134fd565b949350505050565b6040815260006136746040830186886134fd565b82810360208401526136878185876134fd565b979650505050505050565b6080815260006136a66080830187896134fd565b602083019590955250604081019290925260609091015292915050565b600082198211156136d6576136d6613921565b500190565b600063ffffffff8083168185168083038211156136fa576136fa613921565b01949350505050565b60008261371257613712613937565b500490565b600063ffffffff8084168061372e5761372e613937565b92169190910492915050565b600067ffffffffffffffff8084168061372e5761372e613937565b600081600019048311821515161561376f5761376f613921565b500290565b600063ffffffff8083168185168183048111821515161561379757613797613921565b02949350505050565b600067ffffffffffffffff8083168185168183048111821515161561379757613797613921565b6000828210156137d9576137d9613921565b500390565b600063ffffffff838116908316818110156137fb576137fb613921565b039392505050565b600067ffffffffffffffff838116908316818110156137fb576137fb613921565b60005b8381101561383f578181015183820152602001613827565b8381111561230b5750506000910152565b600063ffffffff82168061386657613866613921565b6000190192915050565b600181811c9082168061388457607f821691505b602082108114156138a557634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156138bf576138bf613921565b5060010190565b600063ffffffff808316818114156138e0576138e0613921565b6001019392505050565b6000826138f9576138f9613937565b500690565b600063ffffffff8084168061391557613915613937565b92169190910692915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fdfe000040209acaa5d26d392ace656c2428c991b0a3d3d773845a1300000000000000000000aa8e225b1f3ea6c4b7afd5aa1cecf691a8beaa7fa1e579ce240e4a62b5ac8ecc2141d9618b8c0b170d5c05bba2646970667358221220c9b06eff57a4405c0e4a11430d7d3adb20897b5f1db5383a57962dcbf25a814064736f6c63430008040033", + }, + { + ContractAddr: common.HexToAddress(CandidateHubContract), + CommitUrl: "https://github.com/coredao-org/core-genesis-contract/commit/f95ba12cc2baf8f4c13e2dd2c4278f33a0081aed", + Code: "60806040526004361061034a5760003560e01c806395468d26116101bb578063c81b1662116100f7578063e59dcea511610095578063eef504661161006f578063eef50466146108d1578063f04d7834146108e6578063f9a2bbc7146108f9578063fed9727e1461090f57600080fd5b8063e59dcea514610891578063e79a198f146108a7578063ee9de3f6146108bc57600080fd5b8063d6dd7c0a116100d1578063d6dd7c0a14610831578063d87cf91e14610851578063dc927faf14610866578063e1c7392a1461087c57600080fd5b8063c81b1662146107d9578063cd7ac977146107ef578063d2a36e461461081c57600080fd5b8063ae6079f211610164578063b894aac51161013e578063b894aac51461070b578063ba70d54a14610777578063c666907b1461078c578063c6a9dcc0146107ac57600080fd5b8063ae6079f2146106cb578063b1171724146106e0578063b87c6c82146106f657600080fd5b8063a78abc1611610195578063a78abc1614610671578063a9955b401461068b578063ac431751146106ab57600080fd5b806395468d26146106295780639c54a73d146106465780639dc092621461065b57600080fd5b806343756e5c1161028a57806373fa03ed11610233578063791afc0f1161020d578063791afc0f146105d457806382f8b6e9146105e95780638d09732f146105ff57806395254e601461061457600080fd5b806373fa03ed1461059357806375b10c71146105a8578063783028a9146105be57600080fd5b80634c86f558116102645780634c86f5581461055157806364f54ec7146105685780636a87d7801461057d57600080fd5b806343756e5c1461051b578063483a00e81461053157806348fdb8711461053b57600080fd5b806314bfb527116102f7578063210d6fd7116102d1578063210d6fd7146104a357806325ee13e2146104b85780632845986b146104ce57806330b5468e146104e357600080fd5b806314bfb5271461043b57806314c1e1f7146104785780631768b43b1461048e57600080fd5b80630bd5a92f116103285780630bd5a92f146103c75780630f43a6771461040f57806314843ac91461042557600080fd5b8063035f8b701461034f57806304e9e3a41461037757806306a49fce146103a5575b600080fd5b34801561035b57600080fd5b50610364600181565b6040519081526020015b60405180910390f35b34801561038357600080fd5b5061038d61100781565b6040516001600160a01b03909116815260200161036e565b3480156103b157600080fd5b506103ba61092d565b60405161036e9190613ec0565b3480156103d357600080fd5b506103ff6103e2366004613b6f565b6001600160a01b0316600090815260086020526040902054151590565b604051901515815260200161036e565b34801561041b57600080fd5b5061036460045481565b34801561043157600080fd5b506103646103e881565b34801561044757600080fd5b506103ff610456366004613b6f565b600a546001600160a01b03909116600090815260096020526040902054101590565b34801561048457600080fd5b5061038d61100481565b34801561049a57600080fd5b50610364600881565b3480156104af57600080fd5b50610364610a24565b3480156104c457600080fd5b5061038d61100581565b3480156104da57600080fd5b50610364600281565b3480156104ef57600080fd5b506103ff6104fe366004613b6f565b6001600160a01b0316600090815260076020526040902054151590565b34801561052757600080fd5b5061038d61100181565b610539610a33565b005b34801561054757600080fd5b5061036460015481565b34801561055d57600080fd5b506103646201518081565b34801561057457600080fd5b50610539610c86565b34801561058957600080fd5b5061036460025481565b34801561059f57600080fd5b50600a54610364565b3480156105b457600080fd5b50610364600a5481565b3480156105ca57600080fd5b5061038d61100881565b3480156105e057600080fd5b50610364600b81565b3480156105f557600080fd5b5061036460035481565b34801561060b57600080fd5b506103646119a2565b34801561062057600080fd5b506103646119ae565b34801561063557600080fd5b5061036468056bc75e2d6310000081565b34801561065257600080fd5b506103646119ba565b34801561066757600080fd5b5061038d61100681565b34801561067d57600080fd5b506000546103ff9060ff1681565b34801561069757600080fd5b506105396106a6366004613be4565b6119c6565b3480156106b757600080fd5b506105396106c6366004613d40565b611c98565b3480156106d757600080fd5b50610364601081565b3480156106ec57600080fd5b5061038d61100981565b34801561070257600080fd5b506105396122b5565b34801561071757600080fd5b5061072b610726366004613da9565b6123c5565b604080516001600160a01b03998a168152978916602089015295909716948601949094526060850192909252608084015260a083015260c082015260e08101919091526101000161036e565b34801561078357600080fd5b50610364601181565b34801561079857600080fd5b506103ff6107a7366004613b6f565b612429565b3480156107b857600080fd5b506103646107c7366004613b6f565b60076020526000908152604090205481565b3480156107e557600080fd5b5061038d61100281565b3480156107fb57600080fd5b5061036461080a366004613b6f565b60096020526000908152604090205481565b34801561082857600080fd5b50610364600a81565b34801561083d57600080fd5b5061053961084c366004613b92565b61249e565b34801561085d57600080fd5b5061053961293e565b34801561087257600080fd5b5061038d61100381565b34801561088857600080fd5b50610539612a57565b34801561089d57600080fd5b5061036460055481565b3480156108b357600080fd5b50610539612b12565b3480156108c857600080fd5b50610364600481565b3480156108dd57600080fd5b50610364600981565b6105396108f4366004613b92565b612cff565b34801561090557600080fd5b5061038d61100081565b34801561091b57600080fd5b5061036469021e19e0c9bab240000081565b60065460609060008167ffffffffffffffff81111561095c57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610985578160200160208202803683370190505b50905060005b82811015610a1d57600681815481106109b457634e487b7160e01b600052603260045260246000fd5b600091825260209091206008909102015482516001600160a01b03909116908390839081106109f357634e487b7160e01b600052603260045260246000fd5b6001600160a01b039092166020928302919091019091015280610a15816140e3565b91505061098b565b5092915050565b610a30600860ff6140cc565b81565b60005460ff16610a8a5760405162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e6974207965740000000000000060448201526064015b60405180910390fd5b33600090815260076020526040902054610ae65760405162461bcd60e51b815260206004820152601860248201527f63616e64696461746520646f6573206e6f7420657869737400000000000000006044820152606401610a81565b34610b335760405162461bcd60e51b815260206004820152601860248201527f76616c75652073686f756c64206e6f74206265207a65726f00000000000000006044820152606401610a81565b3360009081526007602052604081205490346006610b526001856140cc565b81548110610b7057634e487b7160e01b600052603260045260246000fd5b906000526020600020906008020160040154610b8c9190614094565b9050806006610b9c6001856140cc565b81548110610bba57634e487b7160e01b600052603260045260246000fd5b906000526020600020906008020160040181905550336001600160a01b03167f4ab0f80899f780c0521f849ed8883e85682657aa1d8979dde42d5f347b995db63483604051610c13929190918252602082015260400190565b60405180910390a26001548110610c825760006006610c336001856140cc565b81548110610c5157634e487b7160e01b600052603260045260246000fd5b6000918252602082206008918202019250610c6d9060ff6140cc565b8260050154169050610c7f8282613295565b50505b5050565b334114610cfb5760405162461bcd60e51b815260206004820152602d60248201527f746865206d6573736167652073656e646572206d75737420626520746865206260448201527f6c6f636b2070726f6475636572000000000000000000000000000000000000006064820152608401610a81565b60005460ff16610d4d5760405162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e697420796574000000000000006044820152606401610a81565b3a15610d9b5760405162461bcd60e51b815260206004820152601460248201527f6761737072696365206973206e6f74207a65726f0000000000000000000000006044820152606401610a81565b60006110006001600160a01b0316638f73c5ae6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610dda57600080fd5b505af1158015610dee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e169190810190613c18565b805190915060005b81811015610f925760006110036001600160a01b03166351b6ada36007600a54610e4891906140cc565b868581518110610e6857634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b8152600401610e9f9291909182526001600160a01b0316602082015260400190565b60006040518083038186803b158015610eb757600080fd5b505afa158015610ecb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ef39190810190613c18565b90506110076001600160a01b0316634fd6979e858481518110610f2657634e487b7160e01b600052603260045260246000fd5b6020026020010151836040518363ffffffff1660e01b8152600401610f4c929190613e96565b600060405180830381600087803b158015610f6657600080fd5b505af1158015610f7a573d6000803e3d6000fd5b50505050508080610f8a906140e3565b915050610e1e565b50600060035442610fa391906140ac565b9050600a54811161101c5760405162461bcd60e51b815260206004820152602d60248201527f6e6f7420616c6c6f77656420746f207475726e20726f756e642c20776169742060448201527f666f72206d6f72652074696d65000000000000000000000000000000000000006064820152608401610a81565b600a8190556006546000808267ffffffffffffffff81111561104e57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611077578160200160208202803683370190505b50905060005b8381101561114157611091601060ff6140cc565b600682815481106110b257634e487b7160e01b600052603260045260246000fd5b906000526020600020906008020160050154168282815181106110e557634e487b7160e01b600052603260045260246000fd5b602002602001018181525050600182828151811061111357634e487b7160e01b600052603260045260246000fd5b6020026020010151141561112f578261112b816140e3565b9350505b80611139816140e3565b91505061107d565b50606060008367ffffffffffffffff81111561116d57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611196578160200160208202803683370190505b5090506000805b8681101561126e5760018582815181106111c757634e487b7160e01b600052603260045260246000fd5b6020026020010151141561125c57600681815481106111f657634e487b7160e01b600052603260045260246000fd5b60009182526020909120600890910201546001600160a01b0316838361121b816140e3565b94508151811061123b57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250505b80611266816140e3565b91505061119d565b506110036001600160a01b031663951188896007600a5461128f91906140cc565b846040518363ffffffff1660e01b81526004016112ad929190614026565b60006040518083038186803b1580156112c557600080fd5b505afa1580156112d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113019190810190613cb9565b600a546040517fc62846a70000000000000000000000000000000000000000000000000000000081529194506000916110079163c62846a79161134b918791899190600401613f57565b600060405180830381600087803b15801561136557600080fd5b505af1158015611379573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113a19190810190613cb9565b905060006113b284836004546132f4565b805190915060008167ffffffffffffffff8111156113e057634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611409578160200160208202803683370190505b50905060008267ffffffffffffffff81111561143557634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561145e578160200160208202803683370190505b50905060008367ffffffffffffffff81111561148a57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156114b3578160200160208202803683370190505b50905060005b848110156116d0576000600760008884815181106114e757634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205490506000600660018361152391906140cc565b8154811061154157634e487b7160e01b600052603260045260246000fd5b906000526020600020906008020190508060010160009054906101000a90046001600160a01b031686848151811061158957634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600282015486519116908690859081106115c957634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505088838151811061160957634e487b7160e01b600052603260045260246000fd5b60200260200101516000141561164d576103e884848151811061163c57634e487b7160e01b600052603260045260246000fd5b60200260200101818152505061167f565b806003015484848151811061167257634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b60108d61168d6001856140cc565b815181106116ab57634e487b7160e01b600052603260045260246000fd5b6020026020010181815117915081815250505050806116c9906140e3565b90506114b9565b506040517f270159f70000000000000000000000000000000000000000000000000000000081526110009063270159f790611715908890879087908790600401613ed3565b600060405180830381600087803b15801561172f57600080fd5b505af1158015611743573d6000803e3d6000fd5b505050506110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561178457600080fd5b505af1158015611798573d6000803e3d6000fd5b5050600a546040517f773b807e000000000000000000000000000000000000000000000000000000008152611007935063773b807e92506117dd918991600401613f8d565b600060405180830381600087803b1580156117f757600080fd5b505af115801561180b573d6000803e3d6000fd5b5050505060005b8c8110156119135760006006828154811061183d57634e487b7160e01b600052603260045260246000fd5b600091825260208083206008909202909101546001600160a01b03168083526009909152604090912054909150801580159061187b5750600a548111155b156118fe5761188c600460ff6140cc565b8d84815181106118ac57634e487b7160e01b600052603260045260246000fd5b6020026020010151168d84815181106118d557634e487b7160e01b600052603260045260246000fd5b6020908102919091018101919091526001600160a01b0383166000908152600990915260408120555b5050808061190b906140e3565b915050611812565b5060005b8c8110156119905761197e6006828154811061194357634e487b7160e01b600052603260045260246000fd5b90600052602060002090600802018c838151811061197157634e487b7160e01b600052603260045260246000fd5b6020026020010151613295565b80611988816140e3565b915050611917565b50505050505050505050505050505050565b610a30600460ff6140cc565b610a30600260ff6140cc565b610a30601060ff6140cc565b3361100014611a3d5760405162461bcd60e51b815260206004820152602c60248201527f746865206d73672073656e646572206d7573742062652076616c696461746f7260448201527f53657420636f6e747261637400000000000000000000000000000000000000006064820152608401610a81565b6001600160a01b03831660009081526007602052604090205480611a615750505050565b60006006611a706001846140cc565b81548110611a8e57634e487b7160e01b600052603260045260246000fd5b906000526020600020906008020190506000816004015490506002548110158015611ac657508360025482611ac391906140cc565b10155b15611c115760058201546001600160a01b03871660009081526009602052604090205460049091179015611b36576001600160a01b038716600090815260096020526040902054611b18908790614094565b6001600160a01b038816600090815260096020526040902055611b5e565b85600a54611b449190614094565b6001600160a01b0388166000908152600960205260409020555b6000611b6a86846140cc565b6004850181905560408051888152602081018390529192506001600160a01b038a16917f81cfec6c72eedd64db356101ba3b131efdc623de91bb003917d85a30dd79dc14910160405180910390a2600154811015611bc9576008821791505b611bd38483613295565b8515611c0a576040516110029087156108fc029088906000818181858888f19350505050158015611c08573d6000803e3d6000fd5b505b5050611c8f565b611c1a8361367f565b6040516110029082156108fc029083906000818181858888f19350505050158015611c49573d6000803e3d6000fd5b5060408051828152600060208201526001600160a01b038816917f81cfec6c72eedd64db356101ba3b131efdc623de91bb003917d85a30dd79dc14910160405180910390a25b5050505b505050565b60005460ff16611cea5760405162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e697420796574000000000000006044820152606401610a81565b3361100614611d615760405162461bcd60e51b815260206004820152602a60248201527f746865206d73672073656e646572206d75737420626520676f7665726e616e6360448201527f6520636f6e7472616374000000000000000000000000000000000000000000006064820152608401610a81565b60208114611d9f5783836040517fad23613c000000000000000000000000000000000000000000000000000000008152600401610a81929190613faf565b611e1384848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600e81527f72657175697265644d617267696e000000000000000000000000000000000000602082015291506139b19050565b15611ed357604080516020601f8401819004810282018101909252828152600091611e5691858580838501838280828437600092019190915250613a0a92505050565b90506002548111611ecb578484826002546001611e739190614094565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040517f808861f9000000000000000000000000000000000000000000000000000000008152600401610a81959493929190613ff5565b600155612272565b611f4784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600481527f6475657300000000000000000000000000000000000000000000000000000000602082015291506139b19050565b15611ff257604080516020601f8401819004810282018101909252828152600091611f8a91858580838501838280828437600092019190915250613a0a92505050565b9050801580611f9b57506001548110155b15611fea57848482600180600154611fb391906140cc565b6040517f808861f9000000000000000000000000000000000000000000000000000000008152600401610a81959493929190613ff5565b600255612272565b61206684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600e81527f76616c696461746f72436f756e74000000000000000000000000000000000000602082015291506139b19050565b1561210757604080516020601f84018190048102820181019092528281526000916120a991858580838501838280828437600092019190915250613a0a92505050565b90506005811115806120bc5750602a8110155b156120ff57848482600660296040517f808861f9000000000000000000000000000000000000000000000000000000008152600401610a81959493929190613ff5565b600455612272565b61217b84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601381527f6d6178436f6d6d697373696f6e4368616e676500000000000000000000000000602082015291506139b19050565b1561222a57604080516020601f84018190048102820181019092528281526000916121be91858580838501838280828437600092019190915250613a0a92505050565b9050806122225784848260017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040517f808861f9000000000000000000000000000000000000000000000000000000008152600401610a81959493929190613ff5565b600555612272565b60405162461bcd60e51b815260206004820152600d60248201527f756e6b6e6f776e20706172616d000000000000000000000000000000000000006044820152606401610a81565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040516122a79493929190613fc3565b60405180910390a150505050565b60005460ff166123075760405162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e697420796574000000000000006044820152606401610a81565b336000908152600760205260409020546123635760405162461bcd60e51b815260206004820152601860248201527f63616e64696461746520646f6573206e6f7420657869737400000000000000006044820152606401610a81565b336000908152600760205260408120549060066123816001846140cc565b8154811061239f57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600802019050600060028260050154179050611c938282613295565b600681815481106123d557600080fd5b6000918252602090912060089091020180546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b039687169850948616969390951694919390929088565b6001600160a01b038116600090815260076020526040812054806124505750600092915050565b6000600661245f6001846140cc565b8154811061247d57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600560089092020101546011811614949350505050565b60005460ff166124f05760405162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e697420796574000000000000006044820152606401610a81565b3360009081526007602052604090205461254c5760405162461bcd60e51b815260206004820152601860248201527f63616e64696461746520646f6573206e6f7420657869737400000000000000006044820152606401610a81565b63ffffffff81161580159061256857506103e88163ffffffff16105b6125da5760405162461bcd60e51b815260206004820152602f60248201527f636f6d6d697373696f6e54686f7573616e647468732073686f756c6420696e2060448201527f72616e67652028302c20313030302900000000000000000000000000000000006064820152608401610a81565b6001600160a01b0383166126555760405162461bcd60e51b8152602060048201526024808201527f636f6e73656e73757320616464726573732073686f756c64206e6f742062652060448201527f7a65726f000000000000000000000000000000000000000000000000000000006064820152608401610a81565b6001600160a01b0382166126ab5760405162461bcd60e51b815260206004820152601e60248201527f66656520616464726573732073686f756c64206e6f74206265207a65726f00006044820152606401610a81565b336000908152600760205260408120549060066126c96001846140cc565b815481106126e757634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201905060008160060154600a5414612710578160030154612716565b81600701545b9050806005548563ffffffff1661272d9190614094565b1015801561274e57508363ffffffff166005548261274b9190614094565b10155b6127c05760405162461bcd60e51b815260206004820152602d60248201527f636f6d6d697373696f6e54686f7573616e64746873206f7574206f662061646a60448201527f7573746d656e742072616e6765000000000000000000000000000000000000006064820152608401610a81565b8160060154600a54146127e057600a546006830155600382015460078301555b60018201546001600160a01b038781169116146128b5576001600160a01b0386166000908152600860205260409020541561285d5760405162461bcd60e51b815260206004820152601c60248201527f74686520636f6e73656e73757320616c726561647920657869737473000000006044820152606401610a81565b6001820180546001600160a01b0390811660009081526008602052604080822082905583547fffffffffffffffffffffffff000000000000000000000000000000000000000016928a16928317909355908152208390555b6002820180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0387811691821790925563ffffffff861660038501819055604051908152909188169033907f9b4c7bb5cf782797c33b6c6ca3bbd0ed9ae9e823611ebac8726889da7ef216d39060200160405180910390a4505050505050565b60005460ff166129905760405162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e697420796574000000000000006044820152606401610a81565b336000908152600760205260409020546129ec5760405162461bcd60e51b815260206004820152601860248201527f63616e64696461746520646f6573206e6f7420657869737400000000000000006044820152606401610a81565b33600090815260076020526040812054906006612a0a6001846140cc565b81548110612a2857634e487b7160e01b600052603260045260246000fd5b6000918252602082206008909102019150612a45600260ff6140cc565b8260050154169050611c938282613295565b60005460ff1615612aaa5760405162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e6974000000000000006044820152606401610a81565b69021e19e0c9bab240000060015568056bc75e2d631000006002556201518060038190556009600455600a600555612ae290426140ac565b600a55600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60005460ff16612b645760405162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e697420796574000000000000006044820152606401610a81565b33600090815260076020526040902054612bc05760405162461bcd60e51b815260206004820152601860248201527f63616e64696461746520646f6573206e6f7420657869737400000000000000006044820152606401610a81565b33600090815260076020526040812054906006612bde6001846140cc565b81548110612bfc57634e487b7160e01b600052603260045260246000fd5b600091825260209091206008909102016005810154909150600b811614612c655760405162461bcd60e51b815260206004820152601f60248201527f63616e64696461746520737461747573206973206e6f7420636c6561726564006044820152606401610a81565b6004810154612c738361367f565b600254811115612cd057600060025482612c8d91906140cc565b9050612c993382613a0f565b6002546040516110029180156108fc02916000818181858888f19350505050158015612cc9573d6000803e3d6000fd5b5050505050565b6040516110029082156108fc029083906000818181858888f19350505050158015610c7f573d6000803e3d6000fd5b60005460ff16612d515760405162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e697420796574000000000000006044820152606401610a81565b6006546103e81015612da55760405162461bcd60e51b815260206004820152601e60248201527f6d6178696d756d2063616e6469646174652073697a65207265616368656400006044820152606401610a81565b3360009081526007602052604090205415612e025760405162461bcd60e51b815260206004820152601860248201527f63616e64696461746520616c72656164792065786973747300000000000000006044820152606401610a81565b600154341015612e545760405162461bcd60e51b815260206004820152601560248201527f6465706f736974206973206e6f7420656e6f75676800000000000000000000006044820152606401610a81565b63ffffffff811615801590612e7057506103e88163ffffffff16105b612ee25760405162461bcd60e51b815260206004820152602c60248201527f636f6d6d697373696f6e54686f7573616e647468732073686f756c642062652060448201527f696e2028302c20313030302900000000000000000000000000000000000000006064820152608401610a81565b6001600160a01b03831660009081526008602052604090205415612f485760405162461bcd60e51b815260206004820152601860248201527f636f6e73656e73757320616c72656164792065786973747300000000000000006044820152606401610a81565b6001600160a01b038316612fc35760405162461bcd60e51b8152602060048201526024808201527f636f6e73656e73757320616464726573732073686f756c64206e6f742062652060448201527f7a65726f000000000000000000000000000000000000000000000000000000006064820152608401610a81565b6001600160a01b0382166130195760405162461bcd60e51b815260206004820152601e60248201527f66656520616464726573732073686f756c64206e6f74206265207a65726f00006044820152606401610a81565b600a5433600090815260096020526040902054106130795760405162461bcd60e51b815260206004820152600d60248201527f697420697320696e206a61696c000000000000000000000000000000000000006044820152606401610a81565b6000600190506006604051806101000160405280336001600160a01b03168152602001866001600160a01b03168152602001856001600160a01b031681526020018463ffffffff168152602001348152602001838152602001600a5481526020018463ffffffff16815250908060018154018082558091505060019003906000526020600020906008020160009091909190915060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701555050600060068054905090508060076000336001600160a01b03166001600160a01b03168152602001908152602001600020819055508060086000876001600160a01b03166001600160a01b0316815260200190815260200160002081905550836001600160a01b0316856001600160a01b0316336001600160a01b03167fe71c4590fcb5b3e76cd2b3e68071e231bb479c3461ddccafdbbf89de64d530de863460405161328692919063ffffffff929092168252602082015260400190565b60405180910390a45050505050565b6005820154818114611c935760058301829055825460408051838152602081018590526001600160a01b03909216917f4b35b40ad96adb69950ee8e04201a2258550524199e2fcf2b5d3830023ff99ce910160405180910390a2505050565b8251606090600080828510156133165761330f6001846140cc565b905061331a565b8294505b80821015613658578651829082906000908a908490811061334b57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600089848151811061337757634e487b7160e01b600052603260045260246000fd5b602002602001015190505b828410156135a2575b82841080156133c05750808a84815181106133b657634e487b7160e01b600052603260045260246000fd5b6020026020010151105b156133d7576133d06001846140cc565b925061338b565b8a83815181106133f757634e487b7160e01b600052603260045260246000fd5b60200260200101518b858151811061341f57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505089838151811061345f57634e487b7160e01b600052603260045260246000fd5b60200260200101518a858151811061348757634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b82841080156134ca5750808a85815181106134bf57634e487b7160e01b600052603260045260246000fd5b602002602001015110155b156134e1576134da846001614094565b9350613494565b8a848151811061350157634e487b7160e01b600052603260045260246000fd5b60200260200101518b848151811061352957634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505089848151811061356957634e487b7160e01b600052603260045260246000fd5b60200260200101518a848151811061359157634e487b7160e01b600052603260045260246000fd5b602002602001018181525050613382565b818b85815181106135c357634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050808a858151811061360457634e487b7160e01b600052603260045260246000fd5b6020908102919091010152838981101561362a57613623816001614094565b965061364e565b898111156136445761363d6001826140cc565b955061364e565b5050505050613658565b505050505061331a565b600061366486856140cc565b90508015613673578088510388525b50959695505050505050565b6000600661368e6001846140cc565b815481106136ac57634e487b7160e01b600052603260045260246000fd5b60009182526020822060016008909202019081015481546040519294506001600160a01b03918216939116917f17b07b19259c7122b0e5b0e3a4ca4ebf0b240e93e26cb44cff9addc7dbf9e99c9190a380546001600160a01b03908116600090815260076020908152604080832083905560018501549093168252600890529081205560065482146138fc5760068054613748906001906140cc565b8154811061376657634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600660018461378391906140cc565b815481106137a157634e487b7160e01b600052603260045260246000fd5b600091825260208220835460089092020180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03938416178255600180860154818401805484169186169190911790556002808701549084018054909316941693909317905560038085015490820155600480850154908201556005808501549082015560068085015481830155600794850154918501919091558593929161385590856140cc565b8154811061387357634e487b7160e01b600052603260045260246000fd5b60009182526020808320600892830201546001600160a01b031684528301939093526040909101812092909255839160066138af6001856140cc565b815481106138cd57634e487b7160e01b600052603260045260246000fd5b60009182526020808320600160089093020191909101546001600160a01b031683528201929092526040019020555b600680548061391b57634e487b7160e01b600052603160045260246000fd5b60008281526020812060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019283020180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168255600182018054821690556002820180549091169055600381018290556004810182905560058101829055600681018290556007015590555050565b6000816040516020016139c49190613e5d565b60405160208183030381529060405280519060200120836040516020016139eb9190613e5d565b6040516020818303038152906040528051906020012014905092915050565b015190565b80471015613a5f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a81565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613aac576040519150601f19603f3d011682016040523d82523d6000602084013e613ab1565b606091505b5050905080611c935760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a81565b60008083601f840112613b39578182fd5b50813567ffffffffffffffff811115613b50578182fd5b602083019150836020828501011115613b6857600080fd5b9250929050565b600060208284031215613b80578081fd5b8135613b8b81614148565b9392505050565b600080600060608486031215613ba6578182fd5b8335613bb181614148565b92506020840135613bc181614148565b9150604084013563ffffffff81168114613bd9578182fd5b809150509250925092565b600080600060608486031215613bf8578283fd5b8335613c0381614148565b95602085013595506040909401359392505050565b60006020808385031215613c2a578182fd5b825167ffffffffffffffff811115613c40578283fd5b8301601f81018513613c50578283fd5b8051613c63613c5e82614070565b61403f565b80828252848201915084840188868560051b8701011115613c82578687fd5b8694505b83851015613cad578051613c9981614148565b835260019490940193918501918501613c86565b50979650505050505050565b60006020808385031215613ccb578182fd5b825167ffffffffffffffff811115613ce1578283fd5b8301601f81018513613cf1578283fd5b8051613cff613c5e82614070565b80828252848201915084840188868560051b8701011115613d1e578687fd5b8694505b83851015613cad578051835260019490940193918501918501613d22565b60008060008060408587031215613d55578081fd5b843567ffffffffffffffff80821115613d6c578283fd5b613d7888838901613b28565b90965094506020870135915080821115613d90578283fd5b50613d9d87828801613b28565b95989497509550505050565b600060208284031215613dba578081fd5b5035919050565b6000815180845260208085019450808401835b83811015613df95781516001600160a01b031687529582019590820190600101613dd4565b509495945050505050565b6000815180845260208085019450808401835b83811015613df957815187529582019590820190600101613e17565b8183528181602085013750600080602083850101526020601f19601f840116840101905092915050565b60008251815b81811015613e7d5760208186018101518583015201613e63565b81811115613e8b5782828501525b509190910192915050565b6001600160a01b0383168152604060208201526000613eb86040830184613dc1565b949350505050565b602081526000613b8b6020830184613dc1565b608081526000613ee66080830187613dc1565b602083820381850152613ef98288613dc1565b84810360408601528651808252828801935090820190845b81811015613f365784516001600160a01b031683529383019391830191600101613f11565b50508481036060860152613f4a8187613e04565b9998505050505050505050565b606081526000613f6a6060830186613dc1565b8281036020840152613f7c8186613e04565b915050826040830152949350505050565b604081526000613fa06040830185613dc1565b90508260208301529392505050565b602081526000613eb8602083018486613e33565b604081526000613fd7604083018688613e33565b8281036020840152613fea818587613e33565b979650505050505050565b608081526000614009608083018789613e33565b602083019590955250604081019290925260609091015292915050565b828152604060208201526000613eb86040830184613dc1565b604051601f8201601f1916810167ffffffffffffffff8111828210171561406857614068614132565b604052919050565b600067ffffffffffffffff82111561408a5761408a614132565b5060051b60200190565b600082198211156140a7576140a761411c565b500190565b6000826140c757634e487b7160e01b81526012600452602481fd5b500490565b6000828210156140de576140de61411c565b500390565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141155761411561411c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461415d57600080fd5b5056fea26469706673582212207568d44dffef62073d4dac0780d27c957add1a59715edecdafabd14386f7ebce64736f6c63430008040033", + }, + { + ContractAddr: common.HexToAddress(PledgeCandidateContract), + CommitUrl: "https://github.com/coredao-org/core-genesis-contract/commit/f95ba12cc2baf8f4c13e2dd2c4278f33a0081aed", + Code: "6080604052600436106103815760003560e01c8063820356c5116101d1578063c35cc33411610102578063db03c9dd116100a0578063e8798c3f1161006f578063e8798c3f14610b09578063f474c8ce14610b1f578063f9a2bbc714610b81578063fc5b75a014610b9757600080fd5b8063db03c9dd14610a52578063dc927faf14610a72578063e1c7392a14610a88578063e3b899f314610a9d57600080fd5b8063c9ea28ee116100dc578063c9ea28ee146109c4578063cc79f97b146109e4578063ce737112146109fa578063d52d2a3314610a1a57600080fd5b8063c35cc3341461094b578063c62846a714610981578063c81b1662146109ae57600080fd5b8063a6d26d471161016f578063b117172411610149578063b11717241461085a578063b6fa172714610870578063baa4402b1461091b578063c35842541461092e57600080fd5b8063a6d26d47146107c9578063a78abc1614610810578063ac4317511461083a57600080fd5b806395b70888116101ab57806395b708881461078357806397687f941461079a5780639dc09262146107b3578063a204ce97146105d757600080fd5b8063820356c51461070157806383d443391461073657806392071f821461076357600080fd5b806347a15006116102b65780635eeb2cf0116102545780636d5c1ff3116102235780636d5c1ff31461069f57806375b10c71146106b5578063773b807e146106cb578063783028a9146106eb57600080fd5b80635eeb2cf0146106295780635fa5381e1461063f57806365057e771461066957806367b06a361461068957600080fd5b806351916fc01161029057806351916fc0146105d7578063584d509a146105f35780635afbc4a8146105d75780635ee99de61461061357600080fd5b806347a15006146105775780634db8a60b146105975780634fd6979e146105b757600080fd5b806325e2c700116103235780633f23503d116102fd5780633f23503d1461051d57806341c1a7061461053357806343756e5c14610548578063477d8f7f1461055e57600080fd5b806325e2c700146104dc57806325ee13e2146104f157806337d074501461050757600080fd5b80631003b5021161035f5780631003b502146103f357806314c1e1f7146104655780631c96b3191461047b57806323c9c5e2146104c457600080fd5b806304e9e3a4146103865780630a4aa4d3146103b95780630fcfd420146103dd575b600080fd5b34801561039257600080fd5b5061039c61100781565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103c557600080fd5b506103cf60025481565b6040519081526020016103b0565b3480156103e957600080fd5b506103cf614e2081565b3480156103ff57600080fd5b5061043d61040e366004616a14565b600660205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a0016103b0565b34801561047157600080fd5b5061039c61100481565b34801561048757600080fd5b5061043d61049636600461674f565b6003602081905260009182526040909120805491810154600482015460058301546006909301549192909185565b3480156104d057600080fd5b506103cf635341542b81565b6104ef6104ea36600461674f565b610bae565b005b3480156104fd57600080fd5b5061039c61100581565b34801561051357600080fd5b506103cf600f5481565b34801561052957600080fd5b506103cf600e5481565b34801561053f57600080fd5b506103cf600781565b34801561055457600080fd5b5061039c61100181565b34801561056a57600080fd5b506103cf64e8d4a5100081565b34801561058357600080fd5b506104ef61059236600461674f565b610ce3565b3480156105a357600080fd5b506104ef6105b236600461679b565b610cf1565b3480156105c357600080fd5b506104ef6105d23660046167d6565b610eaf565b3480156105e357600080fd5b506103cf670de0b6b3a764000081565b3480156105ff57600080fd5b506104ef61060e366004616a66565b6112cc565b34801561061f57600080fd5b506103cf6101f481565b34801561063557600080fd5b506103cf61c35081565b34801561064b57600080fd5b50610654600381565b60405163ffffffff90911681526020016103b0565b34801561067557600080fd5b506104ef610684366004616827565b611acd565b34801561069557600080fd5b506103cf60015481565b3480156106ab57600080fd5b506103cf600c5481565b3480156106c157600080fd5b506103cf60075481565b3480156106d757600080fd5b506104ef6106e636600461696a565b611b2e565b3480156106f757600080fd5b5061039c61100881565b34801561070d57600080fd5b5061072161071c366004616850565b611d51565b604080519283529015156020830152016103b0565b34801561074257600080fd5b506103cf61075136600461674f565b60046020526000908152604090205481565b34801561076f57600080fd5b506103cf61077e366004616850565b611ef9565b34801561078f57600080fd5b506103cf620f424081565b3480156107a657600080fd5b506103cf6402540be40081565b3480156107bf57600080fd5b5061039c61100681565b3480156107d557600080fd5b506103cf6107e4366004616a44565b6000828152600a602090815260408083206001600160a01b038516845260010190915290205492915050565b34801561081c57600080fd5b5060005461082a9060ff1681565b60405190151581526020016103b0565b34801561084657600080fd5b506104ef610855366004616b7c565b6120bf565b34801561086657600080fd5b5061039c61100981565b34801561087c57600080fd5b506108d761088b366004616a14565b60096020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160a01b0395861696948616959394929391929091169087565b604080516001600160a01b03988916815296881660208801528601949094526060850192909252608084015290921660a082015260c081019190915260e0016103b0565b6104ef610929366004616890565b6129b1565b34801561093a57600080fd5b50600d546106549063ffffffff1681565b34801561095757600080fd5b5061039c6109663660046169d4565b6005602052600090815260409020546001600160a01b031681565b34801561098d57600080fd5b506109a161099c3660046168f9565b612e6c565b6040516103b09190616dda565b3480156109ba57600080fd5b5061039c61100281565b3480156109d057600080fd5b506104ef6109df366004616a44565b61338f565b3480156109f057600080fd5b506103cf61045b81565b348015610a0657600080fd5b506104ef610a1536600461674f565b61384b565b348015610a2657600080fd5b506103cf610a35366004616a44565b600860209081526000928352604080842090915290825290205481565b348015610a5e57600080fd5b506104ef610a6d366004616769565b61399f565b348015610a7e57600080fd5b5061039c61100381565b348015610a9457600080fd5b506104ef6139af565b348015610aa957600080fd5b50610abd610ab8366004616769565b613a8e565b6040516103b09190600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b348015610b1557600080fd5b506103cf600b5481565b348015610b2b57600080fd5b50610b3f610b3a366004616827565b613b38565b6040516103b09190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b348015610b8d57600080fd5b5061039c61100081565b348015610ba357600080fd5b506103cf6201518081565b6040517fc666907b0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526110059063c666907b9060240160206040518083038186803b158015610c0857600080fd5b505afa158015610c1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4091906169b4565b610c86576040517f74e640ee0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024015b60405180910390fd5b6000610c958233346000613c4c565b604080513481526020810183905291925033916001600160a01b038516917f69e36aaf9558a3c30415c0a2bc6cb4c2d592c041a0718697bf69c2e7c7e0bdac91015b60405180910390a35050565b610cee816000611acd565b50565b6040517fc666907b0000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526110059063c666907b9060240160206040518083038186803b158015610d4b57600080fd5b505afa158015610d5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8391906169b4565b610dc4576040517f74e640ee0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610c7d565b816001600160a01b0316836001600160a01b03161415610e23576040517f15e8d3180000000000000000000000000000000000000000000000000000000081526001600160a01b03808516600483015283166024820152604401610c7d565b600080610e338533856001613db4565b915091506000610e4585338585613c4c565b9050336001600160a01b0316856001600160a01b0316876001600160a01b03167f037bbd0a1321bedfe51f505a5e6cede0b346e57521d957f9e76cb348b7758cb18685604051610e9f929190918252602082015260400190565b60405180910390a4505050505050565b3361100514610f265760405162461bcd60e51b815260206004820152602960248201527f746865206d73672073656e646572206d7573742062652063616e64696461746560448201527f20636f6e747261637400000000000000000000000000000000000000000000006064820152608401610c7d565b6001600160a01b0383166000908152600360205260409020600281015480610f4f575050505050565b600060028301610f606001846170de565b81548110610f7e57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600502019050806000015460001480610fa75750600754816004015414155b15610fb457505050505050565b600060066000600754815260200190815260200160002090506000826002015483600001546127108460020154670de0b6b3a764000086600401548760030154610ffe9190617022565b876001015461100d9190616f72565b6110179190617022565b6110219190617022565b61102b9190617002565b6110359190617022565b61103f9190617002565b905085600061104e8284617022565b9050600080856004015489600501546110679190617022565b90508660030154818a6004015461107e9190616f72565b11156110cd5760028701548654600389015460048c01546110a0908590616f72565b6110aa91906170de565b89546110b69190617022565b6110c09190617022565b6110ca9190617002565b91505b60018701546110dc8385616f72565b81101561112b5760405162461bcd60e51b815260206004820152601a60248201527f7468657265206973206e6f7420656e6f756768207265776172640000000000006044820152606401610c7d565b60005b858110156111b75786600460008f8f8581811061115b57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611170919061674f565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461119f9190616f72565b909155508190506111af81617184565b91505061112e565b50600388015461122a5760028a016111d060018b6170de565b815481106111ee57634e487b7160e01b600052603260045260246000fd5b6000918252602082206005909102018181556001810182905560028101829055600381018290556004015561122384826170de565b925061125f565b8315158061123757508215155b1561125f576112468385616f72565b88600101600082825461125991906170de565b90915550505b82156112bc576110026001600160a01b031663631cbe3c846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156112a257600080fd5b505af11580156112b6573d6000803e3d6000fd5b50505050505b505050505050505050505b505050565b80517f040000000000000000000000000000000000000000000000000000000000000090829060009061130f57634e487b7160e01b600052603260045260246000fd5b01602001517fff00000000000000000000000000000000000000000000000000000000000000161480156113ac575080517fb100000000000000000000000000000000000000000000000000000000000000908290600590811061138357634e487b7160e01b600052603260045260246000fd5b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b6113f85760405162461bcd60e51b815260206004820152601960248201527f6e6f7420612076616c69642072656465656d20736372697074000000000000006044820152606401610c7d565b600061143987878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061413592505050565b600d549091506110039063edade189908390889063ffffffff161561146657600d5463ffffffff16611469565b60035b88886040518663ffffffff1660e01b815260040161148b959493929190616e1e565b60206040518083038186803b1580156114a357600080fd5b505afa1580156114b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114db91906169b4565b6115275760405162461bcd60e51b815260206004820152601460248201527f627463207478206e6f7420636f6e6669726d65640000000000000000000000006044820152606401610c7d565b60008181526009602052604090206002810154156115875760405162461bcd60e51b815260206004820152601060248201527f62746320747820636f6e6669726d6564000000000000000000000000000000006044820152606401610c7d565b6000611592846141fb565b90506115a76201518063ffffffff8316617002565b6003830155600c54156115bc57600c546115bf565b60075b6007546115cc9190616f72565b82600301541161161e5760405162461bcd60e51b815260206004820152601760248201527f696e73756666696369656e74206c6f636b20726f756e640000000000000000006044820152606401610c7d565b600061165f8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061435192505050565b5092506000915081905061167962ffffff198416886144d2565b67ffffffffffffffff9092166002880155600e54909350909150156116a057600e546116a5565b620f42405b8560020154101561171e5760405162461bcd60e51b815260206004820152602660248201527f7374616b65642076616c756520646f6573206e6f74206d65657420726571756960448201527f72656d656e7400000000000000000000000000000000000000000000000000006064820152608401610c7d565b6000611729836147b3565b88546001600160a01b039283167fffffffffffffffffffffffff000000000000000000000000000000000000000091821681178b5560018b0180549590941694909116939093179091556040517f30b5468e00000000000000000000000000000000000000000000000000000000815260048101929092529150611005906330b5468e9060240160206040518083038186803b1580156117c857600080fd5b505afa1580156117dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180091906169b4565b6118445785546040517f74e640ee0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610c7d565b6040517f541d55480000000000000000000000000000000000000000000000000000000081523360048201526110049063541d55489060240160206040518083038186803b15801561189557600080fd5b505afa1580156118a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cd91906169b4565b806118e4575060018601546001600160a01b031633145b6119565760405162461bcd60e51b815260206004820152603860248201527f6f6e6c792064656c656761746f72206f722072656c617965722063616e20737560448201527f626d69742074686520425443207472616e73616374696f6e00000000000000006064820152608401610c7d565b600f541561196657600f5461196d565b64e8d4a510005b3a11156119bc5760405162461bcd60e51b815260206004820152601560248201527f67617320707269636520697320746f6f206869676800000000000000000000006044820152606401610c7d565b8560010160009054906101000a90046001600160a01b03166001600160a01b03168660000160009054906101000a90046001600160a01b03166001600160a01b0316887fd9bac531f4c140de07ef9de431f5233b0d6ead3f0aa7834fcffd828c882dfdd28b8f87604051611a3293929190616e8c565b60405180910390a48015611a7457600686018190556005860180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555b85546001600160a01b0316600090815260036020526040902060028101546004880155611aa087614998565b8660020154816006016000828254611ab89190616f72565b90915550505050505050505050505050505050565b6000611adc8333846000613db4565b509050611ae93382614a62565b60405181815233906001600160a01b038516907f888585afd9421c43b48dc50229aa045dd1048c03602b46c83ad2aa36be798d429060200160405180910390a3505050565b3361100514611ba55760405162461bcd60e51b815260206004820152602960248201527f746865206d73672073656e646572206d7573742062652063616e64696461746560448201527f20636f6e747261637400000000000000000000000000000000000000000000006064820152608401610c7d565b60008181526006602052604081209083905b81811015611d4757600060036000888885818110611be557634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611bfa919061674f565b6001600160a01b03166001600160a01b031681526020019081526020016000209050600084600401548260050154611c329190617022565b905060008560000154828460040154611c4b9190616f72565b611c559190617022565b612710876002015488600401548960030154611c719190617022565b8960010154611c809190616f72565b8660030154611c8f9190617022565b611c999190617022565b611ca39190617002565b611cad9190616f72565b9050826002016040518060a001604052806000815260200160008152602001838152602001848660040154611ce29190616f72565b815260209081018a90528254600181810185556000948552938290208351600590920201908155908201519281019290925560408101516002830155606081015160038301556080015160049091015550611d409150829050617184565b9050611bb7565b5050506007555050565b3360009081526004602052604081205481906101f49082908015611d8057336000908152600460205260408120555b8560005b81811015611ed6576000600360008b8b85818110611db257634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611dc7919061674f565b6001600160a01b0316815260208101919091526040016000206002810154909150611df25750611ec6565b3360009081526001808301602052604090912090810154158015611e1857506004810154155b15611e24575050611ec6565b60038101546002830154600091611e3a916170de565b9050611e4783838a614b7b565b9650611e53818961706a565b9750611e5f8787616f72565b955081600101546000148015611e7757506004820154155b15611eb157336000908152600180850160205260408220828155908101829055600281018290556003810182905560048101829055600501555b6000881215611ec257505050611ed6565b5050505b611ecf81617184565b9050611d84565b508115611ee757611ee73383614e53565b509350506000131590505b9250929050565b60006101f482825b8181108015611f0f57508215155b156120a5576000868683818110611f3657634e487b7160e01b600052603260045260246000fd5b9050602002013590506000600960008381526020019081526020016000209050806002015460001415611fab5760405162461bcd60e51b815260206004820152601060248201527f627463207478206e6f7420666f756e64000000000000000000000000000000006044820152606401610c7d565b60018101546001600160a01b031633811461202e5760405162461bcd60e51b815260206004820152602560248201527f6e6f74207468652064656c656761746f72206f6620746869732062746320726560448201527f63656970740000000000000000000000000000000000000000000000000000006064820152608401610c7d565b600061203a8488614ea0565b975090506120488189616f72565b975082600201546000141561208e576040516001600160a01b0383169085907ff8eb61142bc2f586caeaaef859e1f1486a659d7319ae668bf01c612009be527f90600090a35b50505050808061209d90617184565b915050611f01565b5082156120b6576120b63384614e53565b50505b92915050565b60005460ff166121115760405162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e697420796574000000000000006044820152606401610c7d565b33611006146121885760405162461bcd60e51b815260206004820152602a60248201527f746865206d73672073656e646572206d75737420626520676f7665726e616e6360448201527f6520636f6e7472616374000000000000000000000000000000000000000000006064820152608401610c7d565b602081146121c65783836040517fad23613c000000000000000000000000000000000000000000000000000000008152600401610c7d929190616eb7565b61223a84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601381527f7265717569726564436f696e4465706f73697400000000000000000000000000602082015291506151eb9050565b156122cb57604080516020601f840181900481028201810190925282815260009161227d9185858083850183828082843760009201919091525061524492505050565b9050806122c35784848260016000196040517f808861f9000000000000000000000000000000000000000000000000000000008152600401610c7d959493929190616efd565b60015561296e565b61233f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600b81527f706f776572466163746f72000000000000000000000000000000000000000000602082015291506151eb9050565b156123d057604080516020601f84018190048102820181019092528281526000916123829185858083850183828082843760009201919091525061524492505050565b9050806123c85784848260016000196040517f808861f9000000000000000000000000000000000000000000000000000000008152600401610c7d959493929190616efd565b60025561296e565b61244484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600981527f627463466163746f720000000000000000000000000000000000000000000000602082015291506151eb9050565b156124d557604080516020601f84018190048102820181019092528281526000916124879185858083850183828082843760009201919091525061524492505050565b9050806124cd5784848260016000196040517f808861f9000000000000000000000000000000000000000000000000000000008152600401610c7d959493929190616efd565b600b5561296e565b61254984848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600f81527f6d696e4274634c6f636b526f756e640000000000000000000000000000000000602082015291506151eb9050565b156125da57604080516020601f840181900481028201810190925282815260009161258c9185858083850183828082843760009201919091525061524492505050565b9050806125d25784848260016000196040517f808861f9000000000000000000000000000000000000000000000000000000008152600401610c7d959493929190616efd565b600c5561296e565b61264e84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600f81527f627463436f6e6669726d426c6f636b0000000000000000000000000000000000602082015291506151eb9050565b1561271157604080516020601f84018190048102820181019092528281526000916126919185858083850183828082843760009201919091525061524492505050565b9050806126d75784848260016000196040517f808861f9000000000000000000000000000000000000000000000000000000008152600401610c7d959493929190616efd565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff9290921691909117905561296e565b61278584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600b81527f6d696e42746356616c7565000000000000000000000000000000000000000000602082015291506151eb9050565b1561281757604080516020601f84018190048102820181019092528281526000916127c89185858083850183828082843760009201919091525061524492505050565b90508061280f578484826127106000196040517f808861f9000000000000000000000000000000000000000000000000000000008152600401610c7d959493929190616efd565b600e5561296e565b61288b84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601381527f64656c6567617465427463476173507269636500000000000000000000000000602082015291506151eb9050565b1561292657604080516020601f84018190048102820181019092528281526000916128ce9185858083850183828082843760009201919091525061524492505050565b9050633b9aca0081101561291e57848482633b9aca006000196040517f808861f9000000000000000000000000000000000000000000000000000000008152600401610c7d959493929190616efd565b600f5561296e565b60405162461bcd60e51b815260206004820152600d60248201527f756e6b6e6f776e20706172616d000000000000000000000000000000000000006044820152606401610c7d565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040516129a39493929190616ecb565b60405180910390a150505050565b3361100014612a285760405162461bcd60e51b815260206004820152602c60248201527f746865206d73672073656e646572206d7573742062652076616c696461746f7260448201527f53657420636f6e747261637400000000000000000000000000000000000000006064820152608401610c7d565b82818114612a9e5760405162461bcd60e51b815260206004820152603660248201527f746865206c656e677468206f66206167656e744c69737420616e64207265776160448201527f72644c6973742073686f756c6420626520657175616c000000000000000000006064820152608401610c7d565b6007546000908152600660209081526040808320815160a0810183528154815260018201549381019390935260028101549183019190915260038101546060830152600401546080820152905b82811015612e6357600060036000898985818110612b1957634e487b7160e01b600052603260045260246000fd5b9050602002016020810190612b2e919061674f565b6001600160a01b0316815260208101919091526040016000206002810154909150612b595750612e53565b60028101805460009190612b6f906001906170de565b81548110612b8d57634e487b7160e01b600052603260045260246000fd5b906000526020600020906005020190506000816002015490508060001415612c1357600283018054612bc1906001906170de565b81548110612bdf57634e487b7160e01b600052603260045260246000fd5b6000918252602082206005909102018181556001810182905560028101829055600381018290556004015550612e53915050565b878785818110612c3357634e487b7160e01b600052603260045260246000fd5b9050602002013560001415612c4a57505050612e53565b878785818110612c6a57634e487b7160e01b600052603260045260246000fd5b6020029190910135835550878785818110612c9557634e487b7160e01b600052603260045260246000fd5b60200291909101356001840155508451600484015460009183918b8b89818110612ccf57634e487b7160e01b600052603260045260246000fd5b90506020020135612ce09190617022565b612cea9190617022565b612cf49190617002565b90506000828760400151612710896020015188600301548e8e8c818110612d2b57634e487b7160e01b600052603260045260246000fd5b90506020020135612d3c9190617022565b612d469190617022565b612d509190617002565b612d5a9190617022565b612d649190617002565b90506000838860000151896080015188600501548e8e8c818110612d9857634e487b7160e01b600052603260045260246000fd5b90506020020135612da99190617022565b612db39190617022565b612dbd9190617022565b612dc79190617002565b90508c8c88818110612de957634e487b7160e01b600052603260045260246000fd5b9050602002016020810190612dfe919061674f565b60408051858152602081018590529081018390526001600160a01b0391909116907f879b6ff02d0773bf19afa98f16c7e20163137d54be04280545379659c80868f59060600160405180910390a25050505050505b612e5c81617184565b9050612aeb565b50505050505050565b60603361100514612ee55760405162461bcd60e51b815260206004820152602960248201527f746865206d73672073656e646572206d7573742062652063616e64696461746560448201527f20636f6e747261637400000000000000000000000000000000000000000000006064820152608401610c7d565b84838114612f5b5760405162461bcd60e51b815260206004820152603360248201527f746865206c656e677468206f662063616e6469646174657320616e6420706f7760448201527f6572732073686f756c6420626520657175616c000000000000000000000000006064820152608401610c7d565b60006007546001612f6c9190616f72565b90505b8381116130be576000818152600a6020526040902080545b80156130905780612f978161716d565b9150506000826000018281548110612fbf57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168083526001860182526040808420546003909352832060060180549194509192906130029084906170de565b9091555050825483908061302657634e487b7160e01b600052603160045260246000fd5b60008281526020808220830160001990810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690559092019092556001600160a01b0392909216815260018401825260408082208290556002850190925290812055612f87565b6000838152600a60205260408120906130a9828261661c565b50505050806130b790617184565b9050612f6f565b506001806000805b848110156131bf576000600360008d8d858181106130f457634e487b7160e01b600052603260045260246000fd5b9050602002016020810190613109919061674f565b6001600160a01b03166001600160a01b031681526020019081526020016000209050670de0b6b3a76400008a8a8481811061315457634e487b7160e01b600052603260045260246000fd5b905060200201356131659190617022565b6003820181905560068201546005830155815460048301556131879086616f72565b94508060040154846131999190616f72565b93508060050154836131ab9190616f72565b925050806131b890617184565b90506130c6565b5060006402540be400600b546000146131da57600b546131de565b61c3505b6131e89190617022565b6002549091508567ffffffffffffffff81111561321557634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561323e578160200160208202803683370190505b50965060005b86811015613354576000600360008f8f8581811061327257634e487b7160e01b600052603260045260246000fd5b9050602002016020810190613287919061674f565b6001600160a01b03166001600160a01b031681526020019081526020016000209050868482600501546132ba9190617022565b82600401546132c99190616f72565b6132d39190617022565b612710846132e18789617022565b6132eb908a616f72565b84600301546132fa9190617022565b6133049190617022565b61330e9190617002565b6133189190616f72565b89838151811061333857634e487b7160e01b600052603260045260246000fd5b60209081029190910101525061334d81617184565b9050613244565b506000978852600660205260409097209384556001840192909255600283019590955560038201949094556004019290925595945050505050565b600082815260096020526040902060028101546133ee5760405162461bcd60e51b815260206004820152601060248201527f627463207478206e6f7420666f756e64000000000000000000000000000000006044820152606401610c7d565b60018101546001600160a01b031633146134705760405162461bcd60e51b815260206004820152602560248201527f6e6f74207468652064656c656761746f72206f6620746869732062746320726560448201527f63656970740000000000000000000000000000000000000000000000000000006064820152608401610c7d565b80546001600160a01b039081169083168114156134f55760405162461bcd60e51b815260206004820152602660248201527f63616e206e6f74207472616e7366657220746f207468652073616d652076616c60448201527f696461746f7200000000000000000000000000000000000000000000000000006064820152608401610c7d565b600754613503906001616f72565b8260030154116135555760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74206c6f636b696e6720726f756e647300000000006044820152606401610c7d565b6040517fc666907b0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526110059063c666907b9060240160206040518083038186803b1580156135af57600080fd5b505afa1580156135c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135e791906169b4565b613628576040517f74e640ee0000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610c7d565b600061363885637fffffff614ea0565b506001600160a01b03831660009081526003602052604081206002860154600682018054949550919390929061366f9084906170de565b9091555050600284015460038501546000908152600a602090815260408083206001600160a01b0388168452600101909152812080549091906136b39084906170de565b9091555050600281018054600091906136ce906001906170de565b815481106136ec57634e487b7160e01b600052603260045260246000fd5b906000526020600020906005020190506007548160040154148015613718575060028201546004860154105b1561375a5760075460009081526006602052604090206004015460028601546137419190617022565b81600301600082825461375491906170de565b90915550505b6001600160a01b038616600081815260036020526040902086547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091178655600281015460048701556137ae86614998565b85600201548160060160008282546137c69190616f72565b909155505083156137db576137db3385614e53565b60028601546006820154604080516001600160a01b03808a1682528b16602082015233918101919091526060810192909252608082015288907f6c64601f7d803c3d59e77b53fc8bc002bbe820bfe708a82f10b4860d351c1bc99060a00160405180910390a25050505050505050565b33611000146138c25760405162461bcd60e51b815260206004820152602c60248201527f746865206d73672073656e646572206d7573742062652076616c696461746f7260448201527f53657420636f6e747261637400000000000000000000000000000000000000006064820152608401610c7d565b6001600160a01b0381166000908152600360205260409020600281015480156112c7576000600283016138f66001846170de565b8154811061391457634e487b7160e01b600052603260045260246000fd5b90600052602060002090600502019050600754816004015414801561393b57506003810154155b15613999576002830161394f6001846170de565b8154811061396d57634e487b7160e01b600052603260045260246000fd5b600091825260208220600590910201818155600181018290556002810182905560038101829055600401555b50505050565b6139ab82826000610cf1565b5050565b60005460ff1615613a025760405162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e6974000000000000006044820152606401610c7d565b670de0b6b3a7640000600155614e2060025561c350600b556007600c55600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000166003179055620f4240600e55613a5e6201518042617002565b600755600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b613ac76040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506001600160a01b03808316600090815260036020818152604080842094861684526001948501825292839020835160c0810185528154815294810154918501919091526002810154928401929092528101546060830152600481015460808301526005015460a082015292915050565b613b6a6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038316600090815260036020526040902060028101548310613bd55760405162461bcd60e51b815260206004820152600f60248201527f6f7574206f6620757020626f756e6400000000000000000000000000000000006044820152606401610c7d565b806002018381548110613bf857634e487b7160e01b600052603260045260246000fd5b90600052602060002090600502016040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505091505092915050565b6000600154831015613ca05760405162461bcd60e51b815260206004820152601460248201527f6465706f73697420697320746f6f20736d616c6c0000000000000000000000006044820152606401610c7d565b6001600160a01b0380861660009081526003602090815260408083209388168352600184019091528120600281015490919015613ce957613ce68383637fffffff614b7b565b90505b85836000016000828254613cfd9190616f72565b90915550506001820154158015613d1657506004820154155b15613d3b57600182018690556007546002808401919091558301546003830155613d73565b60075482600201541015613d59576001820154825560075460028301555b85826001016000828254613d6d9190616f72565b90915550505b8415613d935784826005016000828254613d8d9190616f72565b90915550505b8015613da357613da38782614e53565b50600101549150505b949350505050565b6001600160a01b038085166000908152600360209081526040808320938716835260018085019092528220908101549192839290919086613df3578096505b80613e405760405162461bcd60e51b815260206004820152601860248201527f64656c656761746f7220646f6573206e6f7420657869737400000000000000006044820152606401610c7d565b868114613ef657600154871015613e995760405162461bcd60e51b815260206004820152601e60248201527f756e64656c656761746520616d6f756e7420697320746f6f20736d616c6c00006044820152606401610c7d565b86600154613ea79190616f72565b811015613ef65760405162461bcd60e51b815260206004820152601d60248201527f72656d61696e696e6720616d6f756e7420697320746f6f20736d616c6c0000006044820152606401610c7d565b6000613f078484637fffffff614b7b565b905087846000016000828254613f1d91906170de565b925050819055506000600754846002015410613f3a578354613f3c565b825b9050613f4889846170de565b92506000808560050154851015613fb057848660050154613f6991906170de565b60058701869055915089613fa957600754600090815260086020908152604080832033845290915281208054849290613fa3908490616f72565b90915550505b5081613fe5565b828660050154613fc09190616f72565b851015613fe55784838760050154613fd89190616f72565b613fe291906170de565b90505b801561409c57613ff581846170de565b6002880154909350156140985760028701805460009190614018906001906170de565b8154811061403657634e487b7160e01b600052603260045260246000fd5b906000526020600020906005020190506007548160040154141561408d578a15614079578187600401600082825461406e9190616f72565b909155506140929050565b8181600301600082825461406e91906170de565b600091505b5061409c565b5060005b841580156140ac57506004860154155b156140f3576001600160a01b038c16600090815260018089016020526040822082815590810182905560028101829055600381018290556004810182905560050155614106565b8286556001860185905560075460028701555b8315614116576141168c85614e53565b8a6141218284616f72565b985098505050505050505094509492505050565b6000806002836040516141489190616c2f565b602060405180830381855afa158015614165573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906141889190616a2c565b905060006002826040516020016141a191815260200190565b60408051601f19818403018152908290526141bb91616c2f565b602060405180830381855afa1580156141d8573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613dac9190616a2c565b60218101516000906143448160008190506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b600882901c7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff161790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b601082901c7dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff161790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b602082901c7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1617905060408177ffffffffffffffff0000000000000000ffffffffffffffff16901b604082901c77ffffffffffffffff0000000000000000ffffffffffffffff16179050608081901b608082901c179050919050565b63ffffffff169392505050565b6000808080806143618682615249565b905061437e61437962ffffff1983166000600461526d565b6153ba565b9450600460006143b26143a383601886901c6bffffffffffffffffffffffff166170de565b62ffffff19851690600061543a565b905060006143bf82615478565b90506143d462ffffff19851684836006615560565b96506143e08184616f72565b925061441061440184601887901c6bffffffffffffffffffffffff166170de565b62ffffff19861690600061543a565b9150600061441d836155e4565b90506144368482600f5b62ffffff198916929190615560565b96506144428185616f72565b935061445961437962ffffff19871686600461526d565b9550601885901c6bffffffffffffffffffffffff16614479856004616f72565b146144c65760405162461bcd60e51b815260206004820152601960248201527f426974636f696e48656c7065723a20696e76616c6964207478000000000000006044820152606401610c7d565b50505050509193509193565b6000808084600f6144eb815b62ffffff198416906156b9565b5060008060008060006144ff8c60006157bb565b67ffffffffffffffff16905060005b818110156147a4576145208d82615902565b955061452b86615a3a565b945061453686615a8f565b935061454184615ada565b925062ffffff19808416141561478e576017601886901c6bffffffffffffffffffffffff16148015614585575061458162ffffff19861660006001615ce3565b60a9145b80156145a2575061459e62ffffff198616600180615ce3565b6014145b80156145c057506145bc62ffffff19861660166001615ce3565b6087145b80156146b45750600360028d6040516145d99190616c2f565b602060405180830381855afa1580156145f6573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146199190616a2c565b60405160200161462b91815260200190565b60408051601f198184030181529082905261464591616c2f565b602060405180830381855afa158015614662573d6000803e3d6000fd5b50506040515160601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690506146a062ffffff1987166002615d13565b60601b6bffffffffffffffffffffffff1916145b8061477557506022601886901c6bffffffffffffffffffffffff161480156146ec57506146ea62ffffff19861660006001615ce3565b155b8015614709575061470562ffffff198616600180615ce3565b6020145b8015614775575060028c6040516147209190616c2f565b602060405180830381855afa15801561473d573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906147609190616a2c565b61477362ffffff19871660026020615d21565b145b156147895761478386615ebe565b9a508098505b614792565b8299505b8061479c81617184565b91505061450e565b50505050505050509250925092565b600080806030601885901c6bffffffffffffffffffffffff16101561481a5760405162461bcd60e51b815260206004820152601b60248201527f7061796c6f6164206c656e67746820697320746f6f20736d616c6c00000000006044820152606401610c7d565b635341542b61483262ffffff19861660006004615ce3565b1461487f5760405162461bcd60e51b815260206004820152600b60248201527f77726f6e67206d616769630000000000000000000000000000000000000000006044820152606401610c7d565b61489262ffffff19851660046001615ce3565b6001146148e15760405162461bcd60e51b815260206004820152600d60248201527f77726f6e672076657273696f6e000000000000000000000000000000000000006044820152606401610c7d565b61045b6148f762ffffff19861660056002615ce3565b146149445760405162461bcd60e51b815260206004820152600e60248201527f77726f6e6720636861696e2069640000000000000000000000000000000000006044820152606401610c7d565b61495562ffffff1985166007615d13565b925061496862ffffff198516601b615d13565b9150670de0b6b3a764000061498662ffffff198616602f6001615ce3565b6149909190617022565b929491935050565b60038101546000908152600a6020908152604080832084546001600160a01b031684526002810190925290912054614a295781548154600181810184556000848152602080822090930180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0395861617905585549093168352600284019091526040909120555b600282015482546001600160a01b0316600090815260018301602052604081208054909190614a59908490616f72565b90915550505050565b80471015614ab25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c7d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114614aff576040519150601f19603f3d011682016040523d82523d6000602084013e614b04565b606091505b50509050806112c75760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610c7d565b60028201546007546000919080821015614b9757600060058601555b60028601546003860154818110614bb5576000945050505050614e4c565b81614bc08783616f72565b1015614bd357614bd08682616f72565b91505b81811015614e43576000886002018281548110614c0057634e487b7160e01b600052603260045260246000fd5b9060005260206000209060050201905060008160040154905084811415614c28575050614e43565b600189015481871415614db65760048a0154600083815260086020908152604080832033845290915290205480821115614c8757614c6681836170de565b60008581526008602090815260408083203384529091528120559150614cba565b600084815260086020908152604080832033845290915281208054849290614cb09084906170de565b9091555060009250505b8b600401548214614d96576000614ce086848f60040154614cdb91906170de565b615ee3565b9050856003015460001415614d3e578d6002018781548110614d1257634e487b7160e01b600052603260045260246000fd5b600091825260208220600590910201818155600181018290556002810182905560038101829055600401555b6110026001600160a01b031663631cbe3c826040518263ffffffff1660e01b81526004016000604051808303818588803b158015614d7b57600080fd5b505af1158015614d8f573d6000803e3d6000fd5b5050505050505b8b54614da3908390616f72565b60018d01548d55600060048e0155925050505b8015614e2e57614dc68382615ee3565b614dd09089616f72565b9750826003015460001415614e2e578a6002018481548110614e0257634e487b7160e01b600052603260045260246000fd5b600091825260208220600590910201818155600181018290556002810182905560038101829055600401555b83614e3881617184565b945050505050614bd3565b60038701555050505b9392505050565b614e5d8282614a62565b604080518281526001602082015233916001600160a01b038516917fe33256fedbe96d2ddbd7462c2b1fc3b39e587b388060ce34d1ace27287dad8d39101610cd7565b600754600083815260096020908152604080832080546001600160a01b03168452600390925282206004820154600282015493948594909392859290915b8082108015614eec57508815155b15615004576000836002018381548110614f1657634e487b7160e01b600052603260045260246000fd5b9060005260206000209060050201905060008160040154905087811480614f41575080876003015411155b15614f4d575050615004565b6000818152600660205260408120600401546002890154614f6e9190617022565b9050614f7a8382615ee3565b614f849088616f72565b9650826003015460001415614fe257856002018581548110614fb657634e487b7160e01b600052603260045260246000fd5b600091825260208220600590910201818155600181018290556002810182905560038101829055600401555b614fed600186616f72565b9450614ffa60018d61706a565b9b50505050614ede565b60068501546000811561511d5785821161501f575080615022565b50845b801561511d578087600601600082825461503c91906170de565b909155505060058701546040516000916001600160a01b03169083156108fc0290849084818181858888f19350505050905080156150d05761507e82886170de565b6005890154604080516001600160a01b039092168252602082018590529198508e917ff8117d40f26539bfef76146b0b21a24097bf38ad67a5bde1b34f4428c6cd9793910160405180910390a261511b565b6005880154604080516001600160a01b039092168252602082018490528e917fcf0ff1f9dab0b610323a92006ed5666b075ab010de2b59a3c36f7ad22b5be010910160405180910390a25b505b82841461515e5784600201848154811061514757634e487b7160e01b600052603260045260246000fd5b906000526020600020906005020160040154615160565b875b8760030154116151d35760008c815260096020526040812080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168255600182018054821690556002820183905560038201839055600482018390556005820180549091169055600601556151db565b600487018490555b50939a9899505050505050505050565b6000816040516020016151fe9190616c2f565b60405160208183030381529060405280519060200120836040516020016152259190616c2f565b6040516020818303038152906040528051906020012014905092915050565b015190565b81516000906020840161526464ffffffffff85168284616027565b95945050505050565b6000613dac61527d858585615d21565b60008190506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b600882901c7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff161790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b601082901c7dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff161790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b602082901c7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1617905060408177ffffffffffffffff0000000000000000ffffffffffffffff16901b604082901c77ffffffffffffffff0000000000000000ffffffffffffffff16179050608081901b608082901c179050919050565b600063ffffffff8211156154365760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f32206269747300000000000000000000000000000000000000000000000000006064820152608401610c7d565b5090565b6000613dac84846154598760181c6bffffffffffffffffffffffff1690565b6bffffffffffffffffffffffff1661547191906170de565b8585615560565b6000601882901c6bffffffffffffffffffffffff1661549957506000919050565b60006154a68360006157bb565b9050601883901c6bffffffffffffffffffffffff1667ffffffffffffffff82166154d4575060009392505050565b60006154df8361606b565b60ff16905060005b8367ffffffffffffffff168110156155575782821061550c5750600095945050505050565b600061552c61551b84866170de565b60055b62ffffff198a16919061543a565b9050615537816160cc565b6155419084616f72565b925050808061554f90617184565b9150506154e7565b50949350505050565b60008061557b8660781c6bffffffffffffffffffffffff1690565b6bffffffffffffffffffffffff16905061559486616121565b8461559f8784616f72565b6155a99190616f72565b11156155bc5762ffffff19915050613dac565b6155c68582616f72565b90506155da8364ffffffffff168286616027565b9695505050505050565b6000601882901c6bffffffffffffffffffffffff1661560557506000919050565b60006156128360006157bb565b9050601883901c6bffffffffffffffffffffffff1667ffffffffffffffff8216615640575060009392505050565b600061564b8361606b565b60ff16905060005b8367ffffffffffffffff16811015615557578282106156785750600095945050505050565b600061568e61568784866170de565b600e61551e565b905061569981616171565b6156a39084616f72565b92505080806156b190617184565b915050615653565b60006156c583836161bb565b6157b45760006156e46156d88560d81c90565b64ffffffffff166161de565b91505060006156f98464ffffffffff166161de565b6040517f5479706520617373657274696f6e206661696c65642e20476f7420307800000060208201527fffffffffffffffffffff0000000000000000000000000000000000000000000060b086811b8216603d8401527f2e20457870656374656420307800000000000000000000000000000000000000604784015283901b16605482015290925060009150605e015b60405160208183030381529060405290508060405162461bcd60e51b8152600401610c7d9190616f2e565b5090919050565b6000806157d062ffffff198516846001615ce3565b905060fc81116157eb576157e38161628a565b9150506120b9565b8060fd141561585157615819615814615805856001616f72565b62ffffff19871690600261526d565b61628a565b91506158248261606b565b60ff1660031461584c5761584a61584562ffffff1986168560036000615560565b61630a565b505b6158fb565b8060fe14156158a65761587a61581461586b856001616f72565b62ffffff19871690600461526d565b91506158858261606b565b60ff1660051461584c5761584a61584562ffffff1986168560056000615560565b8060ff14156158fb576158cf6158146158c0856001616f72565b62ffffff19871690600861526d565b91506158da8261606b565b60ff166009146158fb576120b661584562ffffff1986168560096000615560565b5092915050565b600082600f615910816144de565b50600061591e8660006157bb565b67ffffffffffffffff169050601886901c6bffffffffffffffffffffffff1681861061598c5760405162461bcd60e51b815260206004820152601160248201527f566f75742072656164206f76657272756e0000000000000000000000000000006044820152606401610c7d565b60006159978361606b565b60ff1690506000805b888110156159ed576159c46159b584866170de565b62ffffff198c1690600e61543a565b91506159cf82616171565b6159d99084616f72565b92506159e6600182616f72565b90506159a0565b50615a0a6159fb83856170de565b62ffffff198b1690600e61543a565b90506000615a1782616171565b9050615a2c62ffffff198b168483600d615560565b9a9950505050505050505050565b600081600d615a48816144de565b506000615a568560086157bb565b9050615a84615a648261606b565b615a6f906008616fb6565b60ff1667ffffffffffffffff83166007614427565b9350505b5050919050565b600081600d615a9d816144de565b506000615aab8560086157bb565b9050615a84600882615abc8461606b565b60ff16615ac99190616f8a565b67ffffffffffffffff166007614427565b6000816007615ae8816144de565b506000615af68560006157bb565b9050615b0a62ffffff198616600180615ce3565b606a1415615cd957615b2562ffffff19861660026001615ce3565b604c1415615c0d576000615b4561581462ffffff19881660036001615ce3565b9050615b526003836170f5565b67ffffffffffffffff168167ffffffffffffffff16148015615b7f575060538267ffffffffffffffff1611155b8015615b965750604f8267ffffffffffffffff1610155b615be25760405162461bcd60e51b815260206004820152601f60248201527f426974636f696e48656c7065723a20696e76616c6964206f7072657475726e006044820152606401610c7d565b615c04600467ffffffffffffffff8316600c5b62ffffff198a16929190615560565b94505050615a88565b6000615c2561581462ffffff19881660026001615ce3565b9050615c326002836170f5565b67ffffffffffffffff168167ffffffffffffffff16148015615c5f5750604d8267ffffffffffffffff1611155b8015615c76575060048267ffffffffffffffff1610155b615cc25760405162461bcd60e51b815260206004820152601f60248201527f426974636f696e48656c7065723a20696e76616c6964206f7072657475726e006044820152606401610c7d565b615c04600367ffffffffffffffff8316600c615bf5565b62ffffff19615a84565b6000615cf082602061711e565b615cfb906008617041565b60ff16615d09858585615d21565b901c949350505050565b6000614e4c83836014615ce3565b600060ff8216615d3357506000614e4c565b615d4b8460181c6bffffffffffffffffffffffff1690565b6bffffffffffffffffffffffff16615d6660ff841685616f72565b1115615dde57615dc5615d878560781c6bffffffffffffffffffffffff1690565b6bffffffffffffffffffffffff16615dad8660181c6bffffffffffffffffffffffff1690565b6bffffffffffffffffffffffff16858560ff166163a7565b60405162461bcd60e51b8152600401610c7d9190616f2e565b60208260ff161115615e585760405162461bcd60e51b815260206004820152603a60248201527f54797065644d656d566965772f696e646578202d20417474656d70746564207460448201527f6f20696e646578206d6f7265207468616e2033322062797465730000000000006064820152608401610c7d565b600882026000615e768660781c6bffffffffffffffffffffffff1690565b6bffffffffffffffffffffffff16905060007f800000000000000000000000000000000000000000000000000000000000000060001984011d91909501511695945050505050565b600081600d615ecc816144de565b50613dac61581462ffffff1986166000600861526d565b60008183600301541015615f395760405162461bcd60e51b815260206004820152601460248201527f726577617264206973206e6f7420656e6f7567680000000000000000000000006044820152606401610c7d565b60008284600301541415615f595750600183015460006003850155614e4c565b6004840154600090815260066020526040902054600285015485548290615f81908790617022565b615f8b9190617022565b615f959190617002565b91508185600101541015615feb5760405162461bcd60e51b815260206004820152601a60248201527f7468657265206973206e6f7420656e6f756768207265776172640000000000006044820152606401610c7d565b83856003016000828254615fff91906170de565b925050819055508185600101600082825461601a91906170de565b9091555050509392505050565b6000806160348385616f72565b9050604051811115616044575060005b806160565762ffffff19915050614e4c565b5050606092831b9190911790911b1760181b90565b600060fc8267ffffffffffffffff161161608757506001919050565b61ffff8267ffffffffffffffff16116160a257506003919050565b63ffffffff8267ffffffffffffffff16116160bf57506005919050565b506009919050565b919050565b60008160056160da816144de565b5060006160e88560246157bb565b90508067ffffffffffffffff166160fe8261606b565b60ff1661610b9190616f72565b616116906024616f72565b615a84906004616f72565b600061613b8260181c6bffffffffffffffffffffffff1690565b6161538360781c6bffffffffffffffffffffffff1690565b61615d9190616fdb565b6bffffffffffffffffffffffff1692915050565b600081600e61617f816144de565b50600061618d8560086157bb565b90508067ffffffffffffffff166161a38261606b565b60ff166161b09190616f72565b615a84906008616f72565b60008164ffffffffff166161cf8460d81c90565b64ffffffffff16149392505050565b600080601f5b600f8160ff16111561623c5760006161fd826008617041565b60ff1685901c905061620e81616415565b61ffff16841793508160ff1660101461622957601084901b93505b5061623560018261711e565b90506161e4565b50600f5b60ff8160ff1610156162845760ff600882021684901c61625f81616415565b61ffff16831792508160ff1660001461627a57601083901b92505b5060001901616240565b50915091565b600067ffffffffffffffff8211156154365760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201527f34206269747300000000000000000000000000000000000000000000000000006064820152608401610c7d565b6060600061634361633e82616330601887901c6bffffffffffffffffffffffff16616447565b62ffffff1987169190615ce3565b6161de565b6040517f4e6f6e2d6d696e696d616c2076617220696e742e20476f74203078000000000060208201527fffffffffffffffffffffffffffffffffffff0000000000000000000000000000607083901b16603b82015290925060009150604d01615789565b606060006163b4866161de565b91505060006163c2866161de565b91505060006163d0866161de565b91505060006163de866161de565b915050838383836040516020016163f89493929190616c4b565b604051602081830303815290604052945050505050949350505050565b600061642760048360ff16901c6164c0565b60ff1661ffff919091161760081b61643e826164c0565b60ff1617919050565b600060ff8211156154365760405162461bcd60e51b815260206004820152602560248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203860448201527f20626974730000000000000000000000000000000000000000000000000000006064820152608401610c7d565b600060f08083179060ff821614156164db5750603092915050565b8060ff1660f114156164f05750603192915050565b8060ff1660f214156165055750603292915050565b8060ff1660f3141561651a5750603392915050565b8060ff1660f4141561652f5750603492915050565b8060ff1660f514156165445750603592915050565b8060ff1660f614156165595750603692915050565b8060ff1660f7141561656e5750603792915050565b8060ff1660f814156165835750603892915050565b8060ff1660f914156165985750603992915050565b8060ff1660fa14156165ad5750606192915050565b8060ff1660fb14156165c25750606292915050565b8060ff1660fc14156165d75750606392915050565b8060ff1660fd14156165ec5750606492915050565b8060ff1660fe14156166015750606592915050565b8060ff1660ff14156166165750606692915050565b50919050565b5080546000825590600052602060002090810190610cee91905b808211156154365760008155600101616636565b80356001600160a01b03811681146160c757600080fd5b60008083601f840112616672578182fd5b50813567ffffffffffffffff811115616689578182fd5b6020830191508360208260051b8501011115611ef257600080fd5b60008083601f8401126166b5578182fd5b50813567ffffffffffffffff8111156166cc578182fd5b602083019150836020828501011115611ef257600080fd5b600082601f8301126166f4578081fd5b813567ffffffffffffffff81111561670e5761670e6171b5565b6167216020601f19601f84011601616f41565b818152846020838601011115616735578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215616760578081fd5b614e4c8261664a565b6000806040838503121561677b578081fd5b6167848361664a565b91506167926020840161664a565b90509250929050565b6000806000606084860312156167af578081fd5b6167b88461664a565b92506167c66020850161664a565b9150604084013590509250925092565b6000806000604084860312156167ea578283fd5b6167f38461664a565b9250602084013567ffffffffffffffff81111561680e578283fd5b61681a86828701616661565b9497909650939450505050565b60008060408385031215616839578182fd5b6168428361664a565b946020939093013593505050565b60008060208385031215616862578182fd5b823567ffffffffffffffff811115616878578283fd5b61688485828601616661565b90969095509350505050565b600080600080604085870312156168a5578081fd5b843567ffffffffffffffff808211156168bc578283fd5b6168c888838901616661565b909650945060208701359150808211156168e0578283fd5b506168ed87828801616661565b95989497509550505050565b600080600080600060608688031215616910578081fd5b853567ffffffffffffffff80821115616927578283fd5b61693389838a01616661565b9097509550602088013591508082111561694b578283fd5b5061695888828901616661565b96999598509660400135949350505050565b60008060006040848603121561697e578081fd5b833567ffffffffffffffff811115616994578182fd5b6169a086828701616661565b909790965060209590950135949350505050565b6000602082840312156169c5578081fd5b81518015158114614e4c578182fd5b6000602082840312156169e5578081fd5b81357fffffffffffffffffffffffffffffffffffffffff00000000000000000000000081168114614e4c578182fd5b600060208284031215616a25578081fd5b5035919050565b600060208284031215616a3d578081fd5b5051919050565b60008060408385031215616a56578182fd5b823591506167926020840161664a565b60008060008060008060a08789031215616a7e578384fd5b863567ffffffffffffffff80821115616a95578586fd5b616aa18a838b016166a4565b9098509650602091508882013563ffffffff81168114616abf578687fd5b9550604089013581811115616ad2578384fd5b8901601f81018b13616ae2578384fd5b803582811115616af457616af46171b5565b8060051b616b03858201616f41565b8083825286820191508685018f88858801011115616b1f578889fd5b8895505b84861015616b41578035835260019590950194918701918701616b23565b50985050505060608a01359450506080890135915080821115616b62578283fd5b50616b6f89828a016166e4565b9150509295509295509295565b60008060008060408587031215616b91578182fd5b843567ffffffffffffffff80821115616ba8578384fd5b616bb4888389016166a4565b90965094506020870135915080821115616bcc578384fd5b506168ed878288016166a4565b8183528181602085013750600080602083850101526020601f19601f840116840101905092915050565b60008151808452616c1b816020860160208601617141565b601f01601f19169290920160200192915050565b60008251616c41818460208701617141565b9190910192915050565b7f54797065644d656d566965772f696e646578202d204f76657272616e2074686581527f20766965772e20536c6963652069732061742030780000000000000000000000602082015260007fffffffffffff0000000000000000000000000000000000000000000000000000808760d01b1660358401527f2077697468206c656e677468203078000000000000000000000000000000000080603b850152818760d01b16604a8501527f2e20417474656d7074656420746f20696e646578206174206f6666736574203060508501527f78000000000000000000000000000000000000000000000000000000000000006070850152616d71607185018760d01b7fffffffffffff0000000000000000000000000000000000000000000000000000169052565b607784015250616da8608683018460d01b7fffffffffffff0000000000000000000000000000000000000000000000000000169052565b507f2e00000000000000000000000000000000000000000000000000000000000000608c820152608d01949350505050565b6020808252825182820181905260009190848201906040850190845b81811015616e1257835183529284019291840191600101616df6565b50909695505050505050565b600060a08201878352602063ffffffff8089168286015280881660408601525060a0606085015281865180845260c0860191508288019350845b81811015616e7457845183529383019391830191600101616e58565b50508093505050508260808301529695505050505050565b606081526000616e9f6060830186616c03565b63ffffffff9490941660208301525060400152919050565b602081526000613dac602083018486616bd9565b604081526000616edf604083018688616bd9565b8281036020840152616ef2818587616bd9565b979650505050505050565b608081526000616f11608083018789616bd9565b602083019590955250604081019290925260609091015292915050565b602081526000614e4c6020830184616c03565b604051601f8201601f1916810167ffffffffffffffff81118282101715616f6a57616f6a6171b5565b604052919050565b60008219821115616f8557616f8561719f565b500190565b600067ffffffffffffffff808316818516808303821115616fad57616fad61719f565b01949350505050565b600060ff821660ff84168060ff03821115616fd357616fd361719f565b019392505050565b60006bffffffffffffffffffffffff808316818516808303821115616fad57616fad61719f565b60008261701d57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561703c5761703c61719f565b500290565b600060ff821660ff84168160ff04811182151516156170625761706261719f565b029392505050565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156170a4576170a461719f565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156170d8576170d861719f565b50500390565b6000828210156170f0576170f061719f565b500390565b600067ffffffffffffffff838116908316818110156171165761711661719f565b039392505050565b600060ff821660ff8416808210156171385761713861719f565b90039392505050565b60005b8381101561715c578181015183820152602001617144565b838111156139995750506000910152565b60008161717c5761717c61719f565b506000190190565b60006000198214156171985761719861719f565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212204be677e82f3b1c03df71cb77b5fcfcc7f7ea3c1b9ea63c021f7803fe60cb13ce64736f6c63430008040033", + }, + }, + } } func UpgradeBuildInSystemContract(config *params.ChainConfig, blockNumber *big.Int, statedb *state.StateDB) { @@ -217,6 +244,9 @@ func UpgradeBuildInSystemContract(config *params.ChainConfig, blockNumber *big.I if config.IsOnHera(blockNumber) { applySystemContractUpgrade(heraUpgrade[network], blockNumber, statedb, logger) } + if config.IsPoseidon(blockNumber) { + applySystemContractUpgrade(poseidonUpgrade[network], blockNumber, statedb, logger) + } } func applySystemContractUpgrade(upgrade *Upgrade, blockNumber *big.Int, statedb *state.StateDB, logger log.Logger) { diff --git a/core/systemcontracts/upgrade_test.go b/core/systemcontracts/upgrade_test.go new file mode 100644 index 000000000..1e68c6de4 --- /dev/null +++ b/core/systemcontracts/upgrade_test.go @@ -0,0 +1,86 @@ +package systemcontracts + +import ( + "encoding/json" + "fmt" + "io" + "net/http" + "testing" +) + +type Config struct { + ChainId int + HomesteadBlock int + Eip150Block int + Eip150Hash string + Eip155Block int + Eip158Block int + ByzantiumBlock int + ConstantinopleBlock int + PetersburgBlock int + IstanbulBlock int + MuirGlacierBlock int + HashPowerBlock int + Satoshi struct { + Period int + Epoch int + Round int + } +} + +type Alloc struct { + Balance string + Code string +} + +type Genesis struct { + Config Config + Nonce string + Timestamp string + ExtraData string + GasLimit string + Difficulty string + MixHash string + Coinbase string + Alloc map[string]Alloc + Number string + GasUsed string + ParentHash string +} + +func checkUpgradeConfig(url string, upgrade *Upgrade) error { + resp, err := http.Get(url) + if err != nil { + return fmt.Errorf("Error fetching file: %v", err) + } + defer resp.Body.Close() + + body, err := io.ReadAll(resp.Body) + if err != nil { + return fmt.Errorf("Error reading response: %v", err) + } + + var genesis Genesis + err = json.Unmarshal(body, &genesis) + if err != nil { + return fmt.Errorf("Error parsing JSON: %v", err) + } + + for _, config := range upgrade.Configs { + addr := config.ContractAddr + genesisCode := genesis.Alloc[addr.String()].Code + upgradeCode := config.Code + if genesisCode != "0x"+upgradeCode { + return fmt.Errorf("Upgrade code mismatch for contract %s: expected %s, got %s", addr.String(), upgradeCode, genesisCode) + } + } + + return nil +} + +func TestUpgrade(t *testing.T) { + err := checkUpgradeConfig("https://raw.githubusercontent.com/coredao-org/core-genesis-contract/branch_testnet/genesis.json", poseidonUpgrade[buffaloNet]) + if err != nil { + t.Error(err) + } +}