diff --git a/abi/bscvalidatorset.abi b/abi/bscvalidatorset.abi index 84e79610..ae803162 100644 --- a/abi/bscvalidatorset.abi +++ b/abi/bscvalidatorset.abi @@ -605,6 +605,21 @@ "stateMutability": "view", "type": "function" }, + { + "constant": true, + "inputs": [], + "name": "TOKEN_MANAGER_ADDR", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { "constant": true, "inputs": [], diff --git a/abi/crosschain.abi b/abi/crosschain.abi index bcbca156..e888806f 100644 --- a/abi/crosschain.abi +++ b/abi/crosschain.abi @@ -197,6 +197,21 @@ "stateMutability": "view", "type": "function" }, + { + "constant": true, + "inputs": [], + "name": "CROSS_CHAIN_KEY_PREFIX", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { "constant": true, "inputs": [], @@ -422,6 +437,21 @@ "stateMutability": "view", "type": "function" }, + { + "constant": true, + "inputs": [], + "name": "TOKEN_MANAGER_ADDR", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { "constant": true, "inputs": [], @@ -677,9 +707,9 @@ "name": "oracleSequence", "outputs": [ { - "internalType": "uint64", + "internalType": "int64", "name": "", - "type": "uint64" + "type": "int64" } ], "payable": false, @@ -688,14 +718,8 @@ }, { "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "packageCounterForEachHeight", + "inputs": [], + "name": "previousTxHeight", "outputs": [ { "internalType": "uint256", @@ -759,6 +783,21 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "constant": true, + "inputs": [], + "name": "txCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { "constant": false, "inputs": [ diff --git a/abi/govhub.abi b/abi/govhub.abi index c49b5103..9b84c26f 100644 --- a/abi/govhub.abi +++ b/abi/govhub.abi @@ -299,6 +299,21 @@ "stateMutability": "view", "type": "function" }, + { + "constant": true, + "inputs": [], + "name": "TOKEN_MANAGER_ADDR", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { "constant": true, "inputs": [], diff --git a/abi/relayerhub.abi b/abi/relayerhub.abi index ef51d28d..2aac34d3 100644 --- a/abi/relayerhub.abi +++ b/abi/relayerhub.abi @@ -284,6 +284,21 @@ "stateMutability": "view", "type": "function" }, + { + "constant": true, + "inputs": [], + "name": "TOKEN_MANAGER_ADDR", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { "constant": true, "inputs": [], diff --git a/abi/relayerincentivize.abi b/abi/relayerincentivize.abi index 47731b74..37df07d9 100644 --- a/abi/relayerincentivize.abi +++ b/abi/relayerincentivize.abi @@ -348,6 +348,21 @@ "stateMutability": "view", "type": "function" }, + { + "constant": true, + "inputs": [], + "name": "TOKEN_MANAGER_ADDR", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { "constant": true, "inputs": [], diff --git a/abi/slashindicator.abi b/abi/slashindicator.abi index 38598552..a569816f 100644 --- a/abi/slashindicator.abi +++ b/abi/slashindicator.abi @@ -324,6 +324,21 @@ "stateMutability": "view", "type": "function" }, + { + "constant": true, + "inputs": [], + "name": "TOKEN_MANAGER_ADDR", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { "constant": true, "inputs": [], diff --git a/abi/systemreward.abi b/abi/systemreward.abi index c12e2bb7..193d831a 100644 --- a/abi/systemreward.abi +++ b/abi/systemreward.abi @@ -1,30 +1,4 @@ [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "DeleteOperator", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "NewOperator", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -41,13 +15,13 @@ "type": "uint256" } ], - "name": "ReceiveDeposit", + "name": "receiveDeposit", "type": "event" }, { "anonymous": false, "inputs": [], - "name": "RewardEmpty", + "name": "rewardEmpty", "type": "event" }, { @@ -66,7 +40,7 @@ "type": "uint256" } ], - "name": "RewardTo", + "name": "rewardTo", "type": "event" }, { @@ -299,6 +273,21 @@ "stateMutability": "view", "type": "function" }, + { + "constant": true, + "inputs": [], + "name": "TOKEN_MANAGER_ADDR", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { "constant": true, "inputs": [], diff --git a/abi/tendermintlightclient.abi b/abi/tendermintlightclient.abi index 42e253a1..ad52b903 100644 --- a/abi/tendermintlightclient.abi +++ b/abi/tendermintlightclient.abi @@ -314,6 +314,21 @@ "stateMutability": "view", "type": "function" }, + { + "constant": true, + "inputs": [], + "name": "TOKEN_MANAGER_ADDR", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { "constant": true, "inputs": [], diff --git a/abi/tokenhub.abi b/abi/tokenhub.abi index 72ae7d22..2ba9d2ca 100644 --- a/abi/tokenhub.abi +++ b/abi/tokenhub.abi @@ -483,21 +483,6 @@ "stateMutability": "view", "type": "function" }, - { - "constant": true, - "inputs": [], - "name": "SYSTEM_ADDRESS", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, { "constant": true, "inputs": [], @@ -750,6 +735,31 @@ "stateMutability": "view", "type": "function" }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes32", + "name": "bep2Symbol", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "contractAddr", + "type": "address" + }, + { + "internalType": "uint256", + "name": "decimals", + "type": "uint256" + } + ], + "name": "bindToken", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, { "constant": true, "inputs": [], @@ -792,7 +802,7 @@ "type": "function" }, { - "constant": false, + "constant": true, "inputs": [ { "internalType": "address", @@ -809,7 +819,7 @@ } ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function" }, { @@ -855,7 +865,7 @@ "type": "function" }, { - "constant": false, + "constant": true, "inputs": [ { "internalType": "bytes32", @@ -872,11 +882,11 @@ } ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function" }, { - "constant": false, + "constant": true, "inputs": [], "name": "getRelayFee", "outputs": [ @@ -887,7 +897,7 @@ } ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function" }, { @@ -980,46 +990,6 @@ "stateMutability": "view", "type": "function" }, - { - "constant": false, - "inputs": [ - { - "internalType": "bytes32", - "name": "bep2Symbol", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "contractAddr", - "type": "address" - } - ], - "name": "setBindMapping", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "contractAddr", - "type": "address" - }, - { - "internalType": "uint256", - "name": "decimals", - "type": "uint256" - } - ], - "name": "setContractAddrDecimals", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, { "constant": false, "inputs": [ @@ -1070,67 +1040,7 @@ "type": "address" } ], - "name": "unsetBindMapping", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "valAddr", - "type": "address" - }, - { - "internalType": "address", - "name": "slashAddr", - "type": "address" - }, - { - "internalType": "address", - "name": "rewardAddr", - "type": "address" - }, - { - "internalType": "address", - "name": "lightAddr", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenHubAddr", - "type": "address" - }, - { - "internalType": "address", - "name": "incentivizeAddr", - "type": "address" - }, - { - "internalType": "address", - "name": "relayerHubAddr", - "type": "address" - }, - { - "internalType": "address", - "name": "govHub", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenManagerAddr", - "type": "address" - }, - { - "internalType": "address", - "name": "crossChain", - "type": "address" - } - ], - "name": "updateContractAddr", + "name": "unbindToken", "outputs": [], "payable": false, "stateMutability": "nonpayable", diff --git a/abi/tokenmanager.abi b/abi/tokenmanager.abi index 965084a5..9c23f544 100644 --- a/abi/tokenmanager.abi +++ b/abi/tokenmanager.abi @@ -57,7 +57,22 @@ { "constant": true, "inputs": [], - "name": "BIND_STATUS_INCORRECT_PARAMETERS", + "name": "BIND_STATUS_ALREADY_BOUND_TOKEN", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "BIND_STATUS_DECIMALS_MISMATCH", "outputs": [ { "internalType": "uint8", @@ -99,6 +114,21 @@ "stateMutability": "view", "type": "function" }, + { + "constant": true, + "inputs": [], + "name": "BIND_STATUS_SYMBOL_MISMATCH", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { "constant": true, "inputs": [], @@ -114,6 +144,21 @@ "stateMutability": "view", "type": "function" }, + { + "constant": true, + "inputs": [], + "name": "BIND_STATUS_TOTAL_SUPPLY_MISMATCH", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { "constant": true, "inputs": [], @@ -309,21 +354,6 @@ "stateMutability": "view", "type": "function" }, - { - "constant": true, - "inputs": [], - "name": "SYSTEM_ADDRESS", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, { "constant": true, "inputs": [], @@ -602,7 +632,7 @@ "inputs": [ { "internalType": "uint8", - "name": "channelId", + "name": "", "type": "uint8" }, { @@ -648,65 +678,5 @@ "payable": true, "stateMutability": "payable", "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "valAddr", - "type": "address" - }, - { - "internalType": "address", - "name": "slashAddr", - "type": "address" - }, - { - "internalType": "address", - "name": "rewardAddr", - "type": "address" - }, - { - "internalType": "address", - "name": "lightAddr", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenHubAddr", - "type": "address" - }, - { - "internalType": "address", - "name": "incentivizeAddr", - "type": "address" - }, - { - "internalType": "address", - "name": "relayerHubAddr", - "type": "address" - }, - { - "internalType": "address", - "name": "govHub", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenManagerAddr", - "type": "address" - }, - { - "internalType": "address", - "name": "crossChain", - "type": "address" - } - ], - "name": "updateContractAddr", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" } ] \ No newline at end of file diff --git a/contracts/TokenHub.sol b/contracts/TokenHub.sol index e8be2486..7f341111 100644 --- a/contracts/TokenHub.sol +++ b/contracts/TokenHub.sol @@ -111,7 +111,7 @@ contract TokenHub is ITokenHub, System, IParamSubscriber, IApplication, ISystemR return actualAmount; } - function getRelayFee() external override returns(uint256) { + function getRelayFee() external view override returns(uint256) { return relayFee; } @@ -462,11 +462,11 @@ contract TokenHub is ITokenHub, System, IParamSubscriber, IApplication, ISystemR emit paramChange(key, value); } - function getContractAddrByBEP2Symbol(bytes32 bep2Symbol) external override returns(address) { + function getContractAddrByBEP2Symbol(bytes32 bep2Symbol) external view override returns(address) { return bep2SymbolToContractAddr[bep2Symbol]; } - function getBep2SymbolByContractAddr(address contractAddr) external override returns(bytes32) { + function getBep2SymbolByContractAddr(address contractAddr) external view override returns(bytes32) { return contractAddrToBEP2Symbol[contractAddr]; } diff --git a/contracts/TokenHub.template b/contracts/TokenHub.template index 4f0e6a70..011a5476 100644 --- a/contracts/TokenHub.template +++ b/contracts/TokenHub.template @@ -111,7 +111,7 @@ contract TokenHub is ITokenHub, System, IParamSubscriber, IApplication, ISystemR return actualAmount; } - function getRelayFee() external override returns(uint256) { + function getRelayFee() external view override returns(uint256) { return relayFee; } @@ -462,11 +462,11 @@ contract TokenHub is ITokenHub, System, IParamSubscriber, IApplication, ISystemR emit paramChange(key, value); } - function getContractAddrByBEP2Symbol(bytes32 bep2Symbol) external override returns(address) { + function getContractAddrByBEP2Symbol(bytes32 bep2Symbol) external view override returns(address) { return bep2SymbolToContractAddr[bep2Symbol]; } - function getBep2SymbolByContractAddr(address contractAddr) external override returns(bytes32) { + function getBep2SymbolByContractAddr(address contractAddr) external view override returns(bytes32) { return contractAddrToBEP2Symbol[contractAddr]; } diff --git a/contracts/TokenManager.sol b/contracts/TokenManager.sol index 68a426a2..f1af1718 100644 --- a/contracts/TokenManager.sol +++ b/contracts/TokenManager.sol @@ -42,8 +42,11 @@ contract TokenManager is System, IApplication { // bind status uint8 constant public BIND_STATUS_SUCCESS = 0; uint8 constant public BIND_STATUS_TIMEOUT = 1; - uint8 constant public BIND_STATUS_INCORRECT_PARAMETERS = 2; - uint8 constant public BIND_STATUS_REJECTED = 3; + uint8 constant public BIND_STATUS_SYMBOL_MISMATCH = 2; + uint8 constant public BIND_STATUS_TOTAL_SUPPLY_MISMATCH = 3; + uint8 constant public BIND_STATUS_DECIMALS_MISMATCH = 4; + uint8 constant public BIND_STATUS_ALREADY_BOUND_TOKEN = 5; + uint8 constant public BIND_STATUS_REJECTED = 6; uint8 constant public MINIMUM_BEP2E_SYMBOL_LEN = 3; uint8 constant public MAXIMUM_BEP2E_SYMBOL_LEN = 8; @@ -133,16 +136,11 @@ contract TokenManager is System, IApplication { return false; } - uint256 decimals = IBEP2E(contractAddr).decimals(); - string memory bep2eSymbol = IBEP2E(contractAddr).symbol(); - if (!checkSymbol(bep2eSymbol, bep2TokenSymbol) || - ITokenHub(TOKEN_HUB_ADDR).getContractAddrByBEP2Symbol(bindSynPkg.bep2TokenSymbol)!=address(0x00)|| - ITokenHub(TOKEN_HUB_ADDR).getBep2SymbolByContractAddr(bindSynPkg.contractAddr)!=bytes32(0x00)|| - IBEP2E(bindSynPkg.contractAddr).totalSupply()!=bindSynPkg.totalSupply|| - decimals!=bindSynPkg.bep2eDecimals) { + uint32 verifyCode = verifyBindParameters(bindSynPkg, contractAddr); + if (verifyCode != BIND_STATUS_SUCCESS) { delete bindPackageRecord[bep2TokenSymbol]; ApproveBindSynPackage memory approveBindSynPackage = ApproveBindSynPackage({ - status: BIND_STATUS_INCORRECT_PARAMETERS, + status: verifyCode, bep2TokenSymbol: bep2TokenSymbol }); address(uint160(TOKEN_HUB_ADDR)).transfer(relayFee); @@ -205,6 +203,26 @@ contract TokenManager is System, IApplication { return result; } + function verifyBindParameters(BindSynPackage memory bindSynPkg, address contractAddr) internal view returns(uint32) { + uint256 decimals = IBEP2E(contractAddr).decimals(); + string memory bep2eSymbol = IBEP2E(contractAddr).symbol(); + + if (!checkSymbol(bep2eSymbol, bindSynPkg.bep2TokenSymbol)) { + return BIND_STATUS_SYMBOL_MISMATCH; + } + if (IBEP2E(bindSynPkg.contractAddr).totalSupply()!=bindSynPkg.totalSupply) { + return BIND_STATUS_TOTAL_SUPPLY_MISMATCH; + } + if (decimals!=bindSynPkg.bep2eDecimals) { + return BIND_STATUS_DECIMALS_MISMATCH; + } + if (ITokenHub(TOKEN_HUB_ADDR).getContractAddrByBEP2Symbol(bindSynPkg.bep2TokenSymbol)!=address(0x00)|| + ITokenHub(TOKEN_HUB_ADDR).getBep2SymbolByContractAddr(bindSynPkg.contractAddr)!=bytes32(0x00)) { + return BIND_STATUS_ALREADY_BOUND_TOKEN; + } + return BIND_STATUS_SUCCESS; + } + function checkSymbol(string memory bep2eSymbol, bytes32 bep2TokenSymbol) internal pure returns(bool) { bytes memory bep2eSymbolBytes = bytes(bep2eSymbol); if (bep2eSymbolBytes.length > MAXIMUM_BEP2E_SYMBOL_LEN || bep2eSymbolBytes.length < MINIMUM_BEP2E_SYMBOL_LEN) { diff --git a/contracts/interface/ITokenHub.sol b/contracts/interface/ITokenHub.sol index 24e02913..3eecde1f 100644 --- a/contracts/interface/ITokenHub.sol +++ b/contracts/interface/ITokenHub.sol @@ -2,11 +2,11 @@ pragma solidity 0.6.4; interface ITokenHub { - function getRelayFee() external returns(uint256); + function getRelayFee() external view returns(uint256); - function getContractAddrByBEP2Symbol(bytes32 bep2Symbol) external returns(address); + function getContractAddrByBEP2Symbol(bytes32 bep2Symbol) external view returns(address); - function getBep2SymbolByContractAddr(address contractAddr) external returns(bytes32); + function getBep2SymbolByContractAddr(address contractAddr) external view returns(bytes32); function bindToken(bytes32 bep2Symbol, address contractAddr, uint256 decimals) external; diff --git a/contracts/mock/MockTokenHub.sol b/contracts/mock/MockTokenHub.sol index 0069aa50..a2a8d96b 100644 --- a/contracts/mock/MockTokenHub.sol +++ b/contracts/mock/MockTokenHub.sol @@ -6,15 +6,15 @@ contract MockTokenHub is ITokenHub { bool panicBatchTransferOut; - function getRelayFee() external override(ITokenHub) returns (uint256) { + function getRelayFee() external view override(ITokenHub) returns (uint256) { return (1e16); } - function getContractAddrByBEP2Symbol(bytes32 bep2Symbol) external override(ITokenHub) returns(address){ + function getContractAddrByBEP2Symbol(bytes32 bep2Symbol) external view override(ITokenHub) returns(address){ return address(0x0); } - function getBep2SymbolByContractAddr(address contractAddr) external override(ITokenHub) returns(bytes32){ + function getBep2SymbolByContractAddr(address contractAddr) external view override(ITokenHub) returns(bytes32){ return bytes32(0x0); } diff --git a/genesis.json b/genesis.json index 841d0c3b..7c6f9203 100644 --- a/genesis.json +++ b/genesis.json @@ -29,7 +29,7 @@ }, "0x0000000000000000000000000000000000001000": { "balance": "0x0", - "code": "0x6080604052600436106102675760003560e01c806396713da911610144578063c81b1662116100b6578063eb57e2021161007a578063eb57e20214610900578063eda5868c14610933578063f340fa0114610948578063f9a2bbc71461096e578063fc3e590814610983578063fd6a68791461099857610267565b8063c81b1662146108ac578063c8509d81146105f3578063d86222d5146108c1578063dc927faf146108d6578063e1c7392a146108eb57610267565b8063aaf5eb6811610108578063aaf5eb681461071f578063ab51bb9614610734578063ac43175114610749578063ad3c9da614610814578063b7ab4db514610847578063bf9f49951461040557610267565b806396713da9146106a25780639dc09262146106b7578063a1a11bf5146106cc578063a5422d5c146106e1578063a78abc16146106f657610267565b80635667515a116101dd57806375d47a0a116101a157806375d47a0a146105b45780637942fd05146105c957806381650b62146105de578063831d65d1146105f3578063853230aa14610678578063862498821461068d57610267565b80635667515a146104ea5780635d77156c146104ff5780636969a25c146105145780636e47b4821461058a57806370fd5bad1461059f57610267565b80633dffc3871161022f5780633dffc3871461040557806343756e5c14610430578063493279b1146104615780634bf6c8821461048d57806351e80672146104a2578063565c56b3146104b757610267565b80630bee7a671461026c5780631182b8751461029a5780631ff1806914610394578063219f22d5146103bb57806335409f7f146103d0575b600080fd5b34801561027857600080fd5b506102816109ad565b6040805163ffffffff9092168252519081900360200190f35b3480156102a657600080fd5b5061031f600480360360408110156102bd57600080fd5b60ff8235169190810190604081016020820135600160201b8111156102e157600080fd5b8201836020820111156102f357600080fd5b803590602001918460018302840111600160201b8311171561031457600080fd5b5090925090506109b2565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610359578181015183820152602001610341565b50505050905090810190601f1680156103865780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103a057600080fd5b506103a9610b26565b60408051918252519081900360200190f35b3480156103c757600080fd5b50610281610b2c565b3480156103dc57600080fd5b50610403600480360360208110156103f357600080fd5b50356001600160a01b0316610b31565b005b34801561041157600080fd5b5061041a610e45565b6040805160ff9092168252519081900360200190f35b34801561043c57600080fd5b50610445610e4a565b604080516001600160a01b039092168252519081900360200190f35b34801561046d57600080fd5b50610476610e50565b6040805161ffff9092168252519081900360200190f35b34801561049957600080fd5b5061041a610e55565b3480156104ae57600080fd5b50610445610e5a565b3480156104c357600080fd5b506103a9600480360360208110156104da57600080fd5b50356001600160a01b0316610e60565b3480156104f657600080fd5b5061041a610eb2565b34801561050b57600080fd5b50610281610eb7565b34801561052057600080fd5b5061053e6004803603602081101561053757600080fd5b5035610ebc565b604080516001600160a01b039788168152958716602087015293909516848401526001600160401b0390911660608401521515608083015260a082019290925290519081900360c00190f35b34801561059657600080fd5b50610445610f20565b3480156105ab57600080fd5b5061041a610f26565b3480156105c057600080fd5b50610445610f2b565b3480156105d557600080fd5b5061041a610f31565b3480156105ea57600080fd5b50610281610f36565b3480156105ff57600080fd5b506104036004803603604081101561061657600080fd5b60ff8235169190810190604081016020820135600160201b81111561063a57600080fd5b82018360208201111561064c57600080fd5b803590602001918460018302840111600160201b8311171561066d57600080fd5b509092509050610f3b565b34801561068457600080fd5b506103a9610fee565b34801561069957600080fd5b506103a9610ff4565b3480156106ae57600080fd5b5061041a610ffa565b3480156106c357600080fd5b50610445610fff565b3480156106d857600080fd5b50610445611005565b3480156106ed57600080fd5b5061031f61100b565b34801561070257600080fd5b5061070b611027565b604080519115158252519081900360200190f35b34801561072b57600080fd5b506103a9611030565b34801561074057600080fd5b50610281610eb2565b34801561075557600080fd5b506104036004803603604081101561076c57600080fd5b810190602081018135600160201b81111561078657600080fd5b82018360208201111561079857600080fd5b803590602001918460018302840111600160201b831117156107b957600080fd5b919390929091602081019035600160201b8111156107d657600080fd5b8201836020820111156107e857600080fd5b803590602001918460018302840111600160201b8311171561080957600080fd5b509092509050611039565b34801561082057600080fd5b506103a96004803603602081101561083757600080fd5b50356001600160a01b03166112e0565b34801561085357600080fd5b5061085c6112f2565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610898578181015183820152602001610880565b505050509050019250505060405180910390f35b3480156108b857600080fd5b50610445611418565b3480156108cd57600080fd5b506103a961141e565b3480156108e257600080fd5b5061044561142a565b3480156108f757600080fd5b50610403611430565b34801561090c57600080fd5b506104036004803603602081101561092357600080fd5b50356001600160a01b0316611630565b34801561093f57600080fd5b506102816117ff565b6104036004803603602081101561095e57600080fd5b50356001600160a01b0316611804565b34801561097a57600080fd5b50610445611a1a565b34801561098f57600080fd5b5061041a611a20565b3480156109a457600080fd5b50610445611a25565b606481565b60005460609060ff16610a08576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b3361200014610a485760405162461bcd60e51b815260040180806020018281038252602f815260200180613dff602f913960400191505060405180910390fd5b610a50613c23565b6000610a9185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a2b92505050565b9150915080610aad57610aa46064611b84565b92505050610b1f565b815160009060ff16610acd57610ac68360200151611be5565b9050610aeb565b825160ff1660011415610ae757610ac683602001516129e8565b5060655b63ffffffff8116610b105750506040805160008152602081019091529150610b1f9050565b610b1981611b84565b93505050505b9392505050565b60035481565b606881565b3361100114610b715760405162461bcd60e51b8152600401808060200182810382526029815260200180613e5b6029913960400191505060405180910390fd5b6001600160a01b03811660009081526004602052604090205480610b955750610e42565b600181039050600060018281548110610baa57fe5b60009182526020909120600360049092020101546001549091506000190180610bf957600060018481548110610bdc57fe5b906000526020600020906004020160030181905550505050610e42565b6040805183815290516001600160a01b038616917f3b6f9ef90462b512a1293ecec018670bf7b7f1876fb727590a8a6d7643130a70919081900360200190a26001600160a01b038416600090815260046020526040812055600154600019018314610d7b57600180546000198101908110610c7057fe5b906000526020600020906004020160018481548110610c8b57fe5b6000918252602082208354600492830290910180546001600160a01b03199081166001600160a01b0393841617825560018087015481840180548416918616919091179055600280880180549185018054909416919095161780835584546001600160401b03600160a01b91829004160267ffffffffffffffff60a01b1990911617808355935460ff600160e01b918290041615150260ff60e01b199094169390931790556003948501549401939093558254868401939192919087908110610d5057fe5b600091825260208083206004909202909101546001600160a01b031683528201929092526040019020555b6001805480610d8657fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b03191690556003018190559155818381610dd957fe5b0490508015610e3d5760015460005b81811015610e3a578260018281548110610dfe57fe5b9060005260206000209060040201600301540160018281548110610e1e57fe5b6000918252602090912060036004909202010155600101610de8565b50505b505050505b50565b600181565b61100181565b606081565b600881565b61200081565b6001600160a01b03811660009081526004602052604081205480610e88576000915050610ead565b600180820381548110610e9757fe5b9060005260206000209060040201600301549150505b919050565b600081565b606781565b60018181548110610ec957fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509082169291821691600160a01b81046001600160401b031691600160e01b90910460ff169086565b61100581565b600281565b61100881565b600b81565b606681565b3361200014610f7b5760405162461bcd60e51b815260040180806020018281038252602f815260200180613dff602f913960400191505060405180910390fd5b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b6103e881565b60025481565b600981565b61100781565b61100681565b604051806080016040528060478152602001613d976047913981565b60005460ff1681565b6402540be40081565b60005460ff1661108c576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b33611007146110cc5760405162461bcd60e51b815260040180806020018281038252602e815260200180613d22602e913960400191505060405180910390fd5b61113684848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526013815272065787069726554696d655365636f6e6447617606c1b60208201529150612c269050565b15611211576020811461117a5760405162461bcd60e51b8152600401808060200182810382526026815260200180613d716026913960400191505060405180910390fd5b604080516020601f84018190048102820181019092528281526000916111b891858580838501838280828437600092019190915250612d0e92505050565b9050606481101580156111ce5750620186a08111155b6112095760405162461bcd60e51b8152600401808060200182810382526027815260200180613cd66027913960400191505060405180910390fd5b60025561124e565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b60046020526000908152604090205481565b6001546060906000805b82811015611343576001818154811061131157fe5b9060005260206000209060040201600201601c9054906101000a900460ff1661133b576001909101905b6001016112fc565b50606081604051908082528060200260200182016040528015611370578160200160208202803683370190505b50600092509050815b83811015611410576001818154811061138e57fe5b9060005260206000209060040201600201601c9054906101000a900460ff1661140857600181815481106113be57fe5b600091825260209091206004909102015482516001600160a01b03909116908390859081106113e957fe5b6001600160a01b03909216602092830291909101909101526001909201915b600101611379565b509250505090565b61100281565b67016345785d8a000081565b61100381565b60005460ff1615611488576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b611490613c23565b60006114b3604051806080016040528060478152602001613d9760479139611a2b565b91509150806114f35760405162461bcd60e51b8152600401808060200182810382526021815260200180613dde6021913960400191505060405180910390fd5b60005b8260200151518110156116185760018360200151828151811061151557fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782558587015182850180549185169183169190911790556040860151600283018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590981692909516919091179290921694909417161790915560a0909301516003909301929092559186015180519185019391859081106115eb57fe5b602090810291909101810151516001600160a01b03168252810191909152604001600020556001016114f6565b50506103e8600255506000805460ff19166001179055565b33611001146116705760405162461bcd60e51b8152600401808060200182810382526029815260200180613e5b6029913960400191505060405180910390fd5b6001600160a01b038116600090815260046020526040902054806116945750610e42565b6001810390506000600182815481106116a957fe5b90600052602060002090600402016003015490506000600183815481106116cc57fe5b906000526020600020906004020160030181905550600060018080549050039050836001600160a01b03167f8cd4e147d8af98a9e3b6724021b8bf6aed2e5dac71c38f2dce8161b82585b25d836040518082815260200191505060405180910390a28061173b57505050610e42565b600081838161174657fe5b0490508015610e3d5760005b848110156117a457816001828154811061176857fe5b906000526020600020906004020160030154016001828154811061178857fe5b6000918252602090912060036004909202010155600101611752565b50600180549085015b81811015610e3a5782600182815481106117c357fe5b90600052602060002090600402016003015401600182815481106117e357fe5b60009182526020909120600360049092020101556001016117ad565b606581565b3341146118425760405162461bcd60e51b815260040180806020018281038252602d815260200180613e2e602d913960400191505060405180910390fd5b60005460ff16611895576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b600034116118e2576040805162461bcd60e51b81526020600482015260156024820152746465706f7369742076616c7565206973207a65726f60581b604482015290519081900360640190fd5b6001600160a01b038116600090815260046020526040902054349080156119d557600060018083038154811061191457fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff161561197f576040805184815290516001600160a01b038616917ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b4919081900360200190a26119cf565b600380548401815581018054840190556040805184815290516001600160a01b038616917f93a090ecc682c002995fad3c85b30c5651d7fd29b0be5da9d784a3302aedc055919081900360200190a25b50611a15565b6040805183815290516001600160a01b038516917ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b4919081900360200190a25b505050565b61100081565b600381565b61100481565b611a33613c23565b6000611a3d613c23565b611a45613c3b565b611a56611a5186612d13565b612d38565b90506000805b611a6583612d82565b15611b765780611a8a57611a80611a7b84612da3565b612df1565b60ff168452611b6e565b8060011415611b69576060611aa6611aa185612da3565b612e51565b90508051604051908082528060200260200182016040528015611ae357816020015b611ad0613c5b565b815260200190600190039081611ac85790505b50602086015260005b8151811015611b5e57611afd613c5b565b6000611b1b848481518110611b0e57fe5b6020026020010151612f22565b9150915080611b3857876000995099505050505050505050611b7f565b8188602001518481518110611b4957fe5b60209081029190910101525050600101611aec565b506001925050611b6e565b611b76565b600101611a5c565b50919350909150505b915091565b604080516001808252818301909252606091829190816020015b6060815260200190600190039081611b9e579050509050611bc48363ffffffff16612fff565b81600081518110611bd157fe5b6020026020010181905250610b1f81613012565b6000806060611bf38461309c565b9150915081611ca0577f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb2816040518080602001828103825283818151815260200191508051906020019080838360005b83811015611c5b578181015183820152602001611c43565b50505050905090810190601f168015611c885780820380516001836020036101000a031916815260200191505b509250505060405180910390a1606692505050610ead565b600080805b600154811015611d1d5767016345785d8a000060018281548110611cc557fe5b90600052602060002090600402016003015410611ce757600190920191611d15565b600060018281548110611cf657fe5b9060005260206000209060040201600301541115611d15576001909101905b600101611ca5565b50606082604051908082528060200260200182016040528015611d4a578160200160208202803683370190505b509050606083604051908082528060200260200182016040528015611d79578160200160208202803683370190505b509050606084604051908082528060200260200182016040528015611da8578160200160208202803683370190505b509050606085604051908082528060200260200182016040528015611dd7578160200160208202803683370190505b5090506000606086604051908082528060200260200182016040528015611e08578160200160208202803683370190505b509050606087604051908082528060200260200182016040528015611e37578160200160208202803683370190505b509050600098506000975060608d905060006110046001600160a01b0316635170639c6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611e8657600080fd5b505af1158015611e9a573d6000803e3d6000fd5b505050506040513d6020811015611eb057600080fd5b5051905067016345785d8a0000811115611f25577f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb2604051808060200182810382526021815260200180613d506021913960400191505060405180910390a160689d5050505050505050505050505050610ead565b60005b6001548110156121985767016345785d8a000060018281548110611f4857fe5b906000526020600020906004020160030154106120ce5760018181548110611f6c57fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b03168a8d81518110611f9d57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060006402540be40060018381548110611fd257fe5b90600052602060002090600402016003015481611feb57fe5b0660018381548110611ff957fe5b906000526020600020906004020160030154039050612021838261314f90919063ffffffff16565b8a8e8151811061202d57fe5b6020026020010181815250506001828154811061204657fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b0316888e8151811061207757fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081898e815181106120a457fe5b60209081029190910101526120bf878263ffffffff61319116565b6001909d019c96506121909050565b6000600182815481106120dd57fe5b9060005260206000209060040201600301541115612190576001818154811061210257fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316858c8151811061213357fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506001818154811061216057fe5b906000526020600020906004020160030154848c8151811061217e57fe5b60209081029190910101526001909a01995b600101611f28565b50600085156125d6576110046001600160a01b0316636e056520878c8c8b60025442016040518663ffffffff1660e01b815260040180806020018060200180602001856001600160401b03166001600160401b03168152602001848103845288818151815260200191508051906020019060200280838360005b8381101561222a578181015183820152602001612212565b50505050905001848103835287818151815260200191508051906020019060200280838360005b83811015612269578181015183820152602001612251565b50505050905001848103825286818151815260200191508051906020019060200280838360005b838110156122a8578181015183820152602001612290565b505050509050019750505050505050506020604051808303818588803b1580156122d157600080fd5b505af1935050505080156122f757506040513d60208110156122f257600080fd5b505160015b612532576040516000815260443d1015612313575060006123ae565b60046000803e60005160e01c6308c379a081146123345760009150506123ae565b60043d036004833e81513d60248201116001600160401b038211171561235f576000925050506123ae565b80830180516001600160401b038111156123805760009450505050506123ae565b8060208301013d860181111561239e576000955050505050506123ae565b601f01601f191660405250925050505b806123b9575061245d565b60019150867fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280826040518080602001828103825283818151815260200191508051906020019080838360005b8381101561241d578181015183820152602001612405565b50505050905090810190601f16801561244a5780820380516001836020036101000a031916815260200191505b509250505060405180910390a25061252d565b3d808015612487576040519150601f19603f3d011682016040523d82523d6000602084013e61248c565b606091505b5060019150867fbfa884552dd8921b6ce90bfe906952ae5b3b29be0cc1a951d4f62697635a3a45826040518080602001828103825283818151815260200191508051906020019080838360005b838110156124f15781810151838201526020016124d9565b50505050905090810190601f16801561251e5780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505b6125d6565b8015612570576040805188815290517fa217d08e65f80c73121cd9db834d81652d544bfbf452f6d04922b16c90a37b709181900360200190a16125d4565b604080516020808252601b908201527f6261746368207472616e736665722072657475726e2066616c7365000000000081830152905188917fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280919081900360600190a25b505b801561278c5760005b885181101561278a5760008982815181106125f657fe5b6020026020010151905060006001828154811061260f57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116916108fc918590811061264057fe5b9060005260206000209060040201600301549081150290604051600060405180830381858888f19350505050905080156126fc576001828154811061268157fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d91859081106126d057fe5b9060005260206000209060040201600301546040518082815260200191505060405180910390a2612780565b6001828154811061270957fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d918590811061275857fe5b9060005260206000209060040201600301546040518082815260200191505060405180910390a25b50506001016125df565b505b8451156128d65760005b85518110156128d45760008682815181106127ad57fe5b60200260200101516001600160a01b03166108fc8784815181106127cd57fe5b60200260200101519081150290604051600060405180830381858888f19350505050905080156128635786828151811061280357fe5b60200260200101516001600160a01b03167f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d87848151811061284157fe5b60200260200101516040518082815260200191505060405180910390a26128cb565b86828151811061286f57fe5b60200260200101516001600160a01b03167f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d8784815181106128ad57fe5b60200260200101516040518082815260200191505060405180910390a25b50600101612796565b505b471561293f576040805147815290517f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d9181900360200190a1604051611002904780156108fc02916000818181858888f1935050505015801561293d573d6000803e3d6000fd5b505b600060035582511561295457612954836131eb565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561299157600080fd5b505af11580156129a5573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a15060009f9e505050505050505050505050505050565b60008151600114612a46577f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb2604051808060200182810382526025815260200180613cfd6025913960400191505060405180910390a1506067610ead565b612a4e613c5b565b82600081518110612a5b57fe5b60209081029190910181015180516001600160a01b03166000908152600490925260409091205490915080612acc5781516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a2600092505050610ead565b600154600090815b81811015612b5e5760018181548110612ae957fe5b9060005260206000209060040201600201601c9054906101000a900460ff16158015612b48575084600001516001600160a01b031660018281548110612b2b57fe5b60009182526020909120600490910201546001600160a01b031614155b15612b565760019250612b5e565b600101612ad4565b5081612ba85783516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a26000945050505050610ead565b6001806001850381548110612bb957fe5b6000918252602082206002600490920201018054921515600160e01b0260ff60e01b199093169290921790915584516040516001600160a01b03909116917ff226e7d8f547ff903d9d419cf5f54e0d7d07efa9584135a53a057c5f1f27f49a91a250600095945050505050565b6000816040516020018082805190602001908083835b60208310612c5b5780518252601f199092019160209182019101612c3c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310612cc95780518252601f199092019160209182019101612caa565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001201490505b92915050565b015190565b612d1b613c90565b506040805180820190915281518152602082810190820152919050565b612d40613c3b565b612d49826136b2565b612d5257600080fd5b6000612d6183602001516136ec565b60208085015160408051808201909152868152920190820152915050919050565b6000612d8c613c90565b505080518051602091820151919092015191011190565b612dab613c90565b612db482612d82565b612dbd57600080fd5b60208201516000612dcd8261374f565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590612e0657508151602110155b612e0f57600080fd5b6000612e1e83602001516136ec565b83516020808601518301805193945091849003929190831015612e4857826020036101000a820491505b50949350505050565b6060612e5c826136b2565b612e6557600080fd5b6000612e70836137e8565b9050606081604051908082528060200260200182016040528015612eae57816020015b612e9b613c90565b815260200190600190039081612e935790505b5090506000612ec085602001516136ec565b60208601510190506000805b84811015612f1757612edd8361374f565b9150604051806040016040528083815260200184815250848281518110612f0057fe5b602090810291909101015291810191600101612ecc565b509195945050505050565b612f2a613c5b565b6000612f34613c5b565b612f3c613c3b565b612f4585612d38565b90506000805b612f5483612d82565b15611b765780612f7f57612f6f612f6a84612da3565b613844565b6001600160a01b03168452612ff7565b8060011415612fa757612f94612f6a84612da3565b6001600160a01b03166020850152612ff7565b8060021415612fcf57612fbc612f6a84612da3565b6001600160a01b03166040850152612ff7565b8060031415611b6957612fe4611a7b84612da3565b6001600160401b03166060850152600191505b600101612f4b565b6060612d0861300d8361385e565b613944565b60608151600014156130335750604080516000815260208101909152610ead565b60608260008151811061304257fe5b602002602001015190506000600190505b8351811015613083576130798285838151811061306c57fe5b6020026020010151613996565b9150600101613053565b50610b1f613096825160c060ff16613a13565b82613996565b60006060815b83518110156131355760005b8181101561312c578481815181106130c257fe5b6020026020010151600001516001600160a01b03168583815181106130e357fe5b6020026020010151600001516001600160a01b031614156131245760006040518060600160405280602b8152602001613cab602b9139935093505050611b7f565b6001016130ae565b506001016130a2565b505060408051602081019091526000815260019150915091565b6000610b1f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613b0b565b600082820183811015610b1f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600154815160005b82811015613308576001613205613c5b565b6001838154811061321257fe5b600091825260208083206040805160c08101825260049490940290910180546001600160a01b0390811685526001820154811693850193909352600281015492831691840191909152600160a01b82046001600160401b03166060840152600160e01b90910460ff16151560808301526003015460a082015291505b848110156132dc578681815181106132a257fe5b6020026020010151600001516001600160a01b031682600001516001600160a01b031614156132d457600092506132dc565b60010161328e565b5081156132fe5780516001600160a01b03166000908152600460205260408120555b50506001016131f3565b508082111561337d57805b8281101561337b57600180548061332657fe5b60008281526020812060046000199093019283020180546001600160a01b03199081168255600182810180549092169091556002820180546001600160e81b0319169055600390910191909155915501613313565b505b600081831061338c578161338e565b825b905060005b81811015613588576134408582815181106133aa57fe5b6020026020010151600183815481106133bf57fe5b60009182526020918290206040805160c08101825260049390930290910180546001600160a01b0390811684526001820154811694840194909452600281015493841691830191909152600160a01b83046001600160401b03166060830152600160e01b90920460ff161515608082015260039091015460a0820152613ba2565b61355b57806001016004600087848151811061345857fe5b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000208190555084818151811061349457fe5b6020026020010151600182815481106134a957fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a090910151600390910155613580565b60006001828154811061356a57fe5b9060005260206000209060040201600301819055505b600101613393565b50828211156136ac57825b82811015610e3d5760018582815181106135a957fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782559585015181840180549184169188169190911790556040850151600282018054606088015160808901511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590971692909a169190911792909216939093171695909517905560a0909201516003909301929092558751908401929088908590811061367f57fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101613593565b50505050565b80516000906136c357506000610ead565b6020820151805160001a9060c08210156136e257600092505050610ead565b5060019392505050565b8051600090811a6080811015613706576000915050610ead565b60b8811080613721575060c08110801590613721575060f881105b15613730576001915050610ead565b60c08110156137445760b519019050610ead565b60f519019050610ead565b80516000908190811a608081101561376a57600191506137e1565b60b881101561377f57607e19810191506137e1565b60c08110156137ac5760b78103600185019450806020036101000a855104600182018101935050506137e1565b60f88110156137c15760be19810191506137e1565b60f78103600185019450806020036101000a855104600182018101935050505b5092915050565b80516000906137f957506000610ead565b6000809050600061380d84602001516136ec565b602085015185519181019250015b8082101561383b5761382c8261374f565b6001909301929091019061381b565b50909392505050565b805160009060151461385557600080fd5b612d0882612df1565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166138a2575060186138c6565b6fffffffffffffffffffffffffffffffff1984166138c2575060106138c6565b5060005b60208110156138fc578181815181106138db57fe5b01602001516001600160f81b031916156138f4576138fc565b6001016138c6565b60008160200390506060816040519080825280601f01601f191660200182016040528015613931576020820181803683370190505b5080830196909652508452509192915050565b6060815160011480156139765750607f60f81b8260008151811061396457fe5b01602001516001600160f81b03191611155b15613982575080610ead565b612d086139948351608060ff16613a13565b835b6060806040519050835180825260208201818101602087015b818310156139c75780518352602092830192016139af565b50855184518101855292509050808201602086015b818310156139f45780518352602092830192016139dc565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310613a63576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b60408051600180825281830190925260609160208201818036833701905050905060378411613abd5782840160f81b81600081518110613a9f57fe5b60200101906001600160f81b031916908160001a9053509050612d08565b6060613ac88561385e565b90508381510160370160f81b82600081518110613ae157fe5b60200101906001600160f81b031916908160001a905350613b028282613996565b95945050505050565b60008184841115613b9a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613b5f578181015183820152602001613b47565b50505050905090810190601f168015613b8c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b805182516000916001600160a01b039182169116148015613bdc575081602001516001600160a01b031683602001516001600160a01b0316145b8015613c01575081604001516001600160a01b031683604001516001600160a01b0316145b8015610b1f5750506060908101519101516001600160401b0390811691161490565b60408051808201909152600081526060602082015290565b6040518060400160405280613c4e613c90565b8152602001600081525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b60405180604001604052806000815260200160008152509056fe6475706c696361746520636f6e73656e7375732061646472657373206f662076616c696461746f725365747468652065787069726554696d655365636f6e64476170206973206f7574206f662072616e67656c656e677468206f66206a61696c2076616c696461746f7273206d757374206265206f6e65746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374666565206973206c6172676572207468616e2044555354595f494e434f4d494e476c656e677468206f662065787069726554696d655365636f6e64476170206d69736d61746368f84580f842f840949fb29aac15b9a4b7f17c3385939b007540f4d791949fb29aac15b9a4b7f17c3385939b007540f4d791949fb29aac15b9a4b7f17c3385939b007540f4d791646661696c656420746f20706172736520696e69742076616c696461746f72536574746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374746865206d6573736167652073656e646572206d7573742062652074686520626c6f636b2070726f6475636572746865206d6573736167652073656e646572206d75737420626520736c61736820636f6e7472616374a26469706673582212208c630f13f108003e81700fa3735ee9e0fe7367392094e5653d9448f747591ba264736f6c63430006040033" + "code": "0x6080604052600436106102675760003560e01c806396713da911610144578063c81b1662116100b6578063eb57e2021161007a578063eb57e20214610900578063eda5868c14610933578063f340fa0114610948578063f9a2bbc71461096e578063fc3e590814610983578063fd6a68791461099857610267565b8063c81b1662146108ac578063c8509d81146105f3578063d86222d5146108c1578063dc927faf146108d6578063e1c7392a146108eb57610267565b8063aaf5eb6811610108578063aaf5eb681461071f578063ab51bb9614610734578063ac43175114610749578063ad3c9da614610814578063b7ab4db514610847578063bf9f49951461040557610267565b806396713da9146106a25780639dc09262146106b7578063a1a11bf5146106cc578063a5422d5c146106e1578063a78abc16146106f657610267565b80635667515a116101dd57806375d47a0a116101a157806375d47a0a146105b45780637942fd05146105c957806381650b62146105de578063831d65d1146105f3578063853230aa14610678578063862498821461068d57610267565b80635667515a146104ea5780635d77156c146104ff5780636969a25c146105145780636e47b4821461058a57806370fd5bad1461059f57610267565b80633dffc3871161022f5780633dffc3871461040557806343756e5c14610430578063493279b1146104615780634bf6c8821461048d57806351e80672146104a2578063565c56b3146104b757610267565b80630bee7a671461026c5780631182b8751461029a5780631ff1806914610394578063219f22d5146103bb57806335409f7f146103d0575b600080fd5b34801561027857600080fd5b506102816109ad565b6040805163ffffffff9092168252519081900360200190f35b3480156102a657600080fd5b5061031f600480360360408110156102bd57600080fd5b60ff8235169190810190604081016020820135600160201b8111156102e157600080fd5b8201836020820111156102f357600080fd5b803590602001918460018302840111600160201b8311171561031457600080fd5b5090925090506109b2565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610359578181015183820152602001610341565b50505050905090810190601f1680156103865780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103a057600080fd5b506103a9610b26565b60408051918252519081900360200190f35b3480156103c757600080fd5b50610281610b2c565b3480156103dc57600080fd5b50610403600480360360208110156103f357600080fd5b50356001600160a01b0316610b31565b005b34801561041157600080fd5b5061041a610e45565b6040805160ff9092168252519081900360200190f35b34801561043c57600080fd5b50610445610e4a565b604080516001600160a01b039092168252519081900360200190f35b34801561046d57600080fd5b50610476610e50565b6040805161ffff9092168252519081900360200190f35b34801561049957600080fd5b5061041a610e55565b3480156104ae57600080fd5b50610445610e5a565b3480156104c357600080fd5b506103a9600480360360208110156104da57600080fd5b50356001600160a01b0316610e60565b3480156104f657600080fd5b5061041a610eb2565b34801561050b57600080fd5b50610281610eb7565b34801561052057600080fd5b5061053e6004803603602081101561053757600080fd5b5035610ebc565b604080516001600160a01b039788168152958716602087015293909516848401526001600160401b0390911660608401521515608083015260a082019290925290519081900360c00190f35b34801561059657600080fd5b50610445610f20565b3480156105ab57600080fd5b5061041a610f26565b3480156105c057600080fd5b50610445610f2b565b3480156105d557600080fd5b5061041a610f31565b3480156105ea57600080fd5b50610281610f36565b3480156105ff57600080fd5b506104036004803603604081101561061657600080fd5b60ff8235169190810190604081016020820135600160201b81111561063a57600080fd5b82018360208201111561064c57600080fd5b803590602001918460018302840111600160201b8311171561066d57600080fd5b509092509050610f3b565b34801561068457600080fd5b506103a9610fee565b34801561069957600080fd5b506103a9610ff4565b3480156106ae57600080fd5b5061041a610ffa565b3480156106c357600080fd5b50610445610fff565b3480156106d857600080fd5b50610445611005565b3480156106ed57600080fd5b5061031f61100b565b34801561070257600080fd5b5061070b611027565b604080519115158252519081900360200190f35b34801561072b57600080fd5b506103a9611030565b34801561074057600080fd5b50610281610eb2565b34801561075557600080fd5b506104036004803603604081101561076c57600080fd5b810190602081018135600160201b81111561078657600080fd5b82018360208201111561079857600080fd5b803590602001918460018302840111600160201b831117156107b957600080fd5b919390929091602081019035600160201b8111156107d657600080fd5b8201836020820111156107e857600080fd5b803590602001918460018302840111600160201b8311171561080957600080fd5b509092509050611039565b34801561082057600080fd5b506103a96004803603602081101561083757600080fd5b50356001600160a01b03166112e0565b34801561085357600080fd5b5061085c6112f2565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610898578181015183820152602001610880565b505050509050019250505060405180910390f35b3480156108b857600080fd5b50610445611418565b3480156108cd57600080fd5b506103a961141e565b3480156108e257600080fd5b5061044561142a565b3480156108f757600080fd5b50610403611430565b34801561090c57600080fd5b506104036004803603602081101561092357600080fd5b50356001600160a01b0316611630565b34801561093f57600080fd5b506102816117ff565b6104036004803603602081101561095e57600080fd5b50356001600160a01b0316611804565b34801561097a57600080fd5b50610445611a1a565b34801561098f57600080fd5b5061041a611a20565b3480156109a457600080fd5b50610445611a25565b606481565b60005460609060ff16610a08576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b3361200014610a485760405162461bcd60e51b815260040180806020018281038252602f815260200180613dfd602f913960400191505060405180910390fd5b610a50613c21565b6000610a9185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a2b92505050565b9150915080610aad57610aa46064611b84565b92505050610b1f565b815160009060ff16610acd57610ac68360200151611be5565b9050610aeb565b825160ff1660011415610ae757610ac683602001516129e6565b5060655b63ffffffff8116610b105750506040805160008152602081019091529150610b1f9050565b610b1981611b84565b93505050505b9392505050565b60035481565b606881565b3361100114610b715760405162461bcd60e51b8152600401808060200182810382526029815260200180613e596029913960400191505060405180910390fd5b6001600160a01b03811660009081526004602052604090205480610b955750610e42565b600181039050600060018281548110610baa57fe5b60009182526020909120600360049092020101546001549091506000190180610bf957600060018481548110610bdc57fe5b906000526020600020906004020160030181905550505050610e42565b6040805183815290516001600160a01b038616917f3b6f9ef90462b512a1293ecec018670bf7b7f1876fb727590a8a6d7643130a70919081900360200190a26001600160a01b038416600090815260046020526040812055600154600019018314610d7b57600180546000198101908110610c7057fe5b906000526020600020906004020160018481548110610c8b57fe5b6000918252602082208354600492830290910180546001600160a01b03199081166001600160a01b0393841617825560018087015481840180548416918616919091179055600280880180549185018054909416919095161780835584546001600160401b03600160a01b91829004160267ffffffffffffffff60a01b1990911617808355935460ff600160e01b918290041615150260ff60e01b199094169390931790556003948501549401939093558254868401939192919087908110610d5057fe5b600091825260208083206004909202909101546001600160a01b031683528201929092526040019020555b6001805480610d8657fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b03191690556003018190559155818381610dd957fe5b0490508015610e3d5760015460005b81811015610e3a578260018281548110610dfe57fe5b9060005260206000209060040201600301540160018281548110610e1e57fe5b6000918252602090912060036004909202010155600101610de8565b50505b505050505b50565b600181565b61100181565b606081565b600881565b61200081565b6001600160a01b03811660009081526004602052604081205480610e88576000915050610ead565b600180820381548110610e9757fe5b9060005260206000209060040201600301549150505b919050565b600081565b606781565b60018181548110610ec957fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509082169291821691600160a01b81046001600160401b031691600160e01b90910460ff169086565b61100581565b600281565b61100881565b600b81565b606681565b3361200014610f7b5760405162461bcd60e51b815260040180806020018281038252602f815260200180613dfd602f913960400191505060405180910390fd5b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b6103e881565b60025481565b600981565b61100781565b61100681565b604051806080016040528060478152602001613d956047913981565b60005460ff1681565b6402540be40081565b60005460ff1661108c576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b33611007146110cc5760405162461bcd60e51b815260040180806020018281038252602e815260200180613d20602e913960400191505060405180910390fd5b61113684848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526013815272065787069726554696d655365636f6e6447617606c1b60208201529150612c249050565b15611211576020811461117a5760405162461bcd60e51b8152600401808060200182810382526026815260200180613d6f6026913960400191505060405180910390fd5b604080516020601f84018190048102820181019092528281526000916111b891858580838501838280828437600092019190915250612d0c92505050565b9050606481101580156111ce5750620186a08111155b6112095760405162461bcd60e51b8152600401808060200182810382526027815260200180613cd46027913960400191505060405180910390fd5b60025561124e565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b60046020526000908152604090205481565b6001546060906000805b82811015611343576001818154811061131157fe5b9060005260206000209060040201600201601c9054906101000a900460ff1661133b576001909101905b6001016112fc565b50606081604051908082528060200260200182016040528015611370578160200160208202803683370190505b50600092509050815b83811015611410576001818154811061138e57fe5b9060005260206000209060040201600201601c9054906101000a900460ff1661140857600181815481106113be57fe5b600091825260209091206004909102015482516001600160a01b03909116908390859081106113e957fe5b6001600160a01b03909216602092830291909101909101526001909201915b600101611379565b509250505090565b61100281565b67016345785d8a000081565b61100381565b60005460ff1615611488576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b611490613c21565b60006114b3604051806080016040528060478152602001613d9560479139611a2b565b91509150806114f35760405162461bcd60e51b8152600401808060200182810382526021815260200180613ddc6021913960400191505060405180910390fd5b60005b8260200151518110156116185760018360200151828151811061151557fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782558587015182850180549185169183169190911790556040860151600283018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590981692909516919091179290921694909417161790915560a0909301516003909301929092559186015180519185019391859081106115eb57fe5b602090810291909101810151516001600160a01b03168252810191909152604001600020556001016114f6565b50506103e8600255506000805460ff19166001179055565b33611001146116705760405162461bcd60e51b8152600401808060200182810382526029815260200180613e596029913960400191505060405180910390fd5b6001600160a01b038116600090815260046020526040902054806116945750610e42565b6001810390506000600182815481106116a957fe5b90600052602060002090600402016003015490506000600183815481106116cc57fe5b906000526020600020906004020160030181905550600060018080549050039050836001600160a01b03167f8cd4e147d8af98a9e3b6724021b8bf6aed2e5dac71c38f2dce8161b82585b25d836040518082815260200191505060405180910390a28061173b57505050610e42565b600081838161174657fe5b0490508015610e3d5760005b848110156117a457816001828154811061176857fe5b906000526020600020906004020160030154016001828154811061178857fe5b6000918252602090912060036004909202010155600101611752565b50600180549085015b81811015610e3a5782600182815481106117c357fe5b90600052602060002090600402016003015401600182815481106117e357fe5b60009182526020909120600360049092020101556001016117ad565b606581565b3341146118425760405162461bcd60e51b815260040180806020018281038252602d815260200180613e2c602d913960400191505060405180910390fd5b60005460ff16611895576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b600034116118e2576040805162461bcd60e51b81526020600482015260156024820152746465706f7369742076616c7565206973207a65726f60581b604482015290519081900360640190fd5b6001600160a01b038116600090815260046020526040902054349080156119d557600060018083038154811061191457fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff161561197f576040805184815290516001600160a01b038616917ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b4919081900360200190a26119cf565b600380548401815581018054840190556040805184815290516001600160a01b038616917f93a090ecc682c002995fad3c85b30c5651d7fd29b0be5da9d784a3302aedc055919081900360200190a25b50611a15565b6040805183815290516001600160a01b038516917ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b4919081900360200190a25b505050565b61100081565b600381565b61100481565b611a33613c21565b6000611a3d613c21565b611a45613c39565b611a56611a5186612d11565b612d36565b90506000805b611a6583612d80565b15611b765780611a8a57611a80611a7b84612da1565b612def565b60ff168452611b6e565b8060011415611b69576060611aa6611aa185612da1565b612e4f565b90508051604051908082528060200260200182016040528015611ae357816020015b611ad0613c59565b815260200190600190039081611ac85790505b50602086015260005b8151811015611b5e57611afd613c59565b6000611b1b848481518110611b0e57fe5b6020026020010151612f20565b9150915080611b3857876000995099505050505050505050611b7f565b8188602001518481518110611b4957fe5b60209081029190910101525050600101611aec565b506001925050611b6e565b611b76565b600101611a5c565b50919350909150505b915091565b604080516001808252818301909252606091829190816020015b6060815260200190600190039081611b9e579050509050611bc48363ffffffff16612ffd565b81600081518110611bd157fe5b6020026020010181905250610b1f81613010565b6000806060611bf38461309a565b9150915081611ca0577f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb2816040518080602001828103825283818151815260200191508051906020019080838360005b83811015611c5b578181015183820152602001611c43565b50505050905090810190601f168015611c885780820380516001836020036101000a031916815260200191505b509250505060405180910390a1606692505050610ead565b600080805b600154811015611d1d5767016345785d8a000060018281548110611cc557fe5b90600052602060002090600402016003015410611ce757600190920191611d15565b600060018281548110611cf657fe5b9060005260206000209060040201600301541115611d15576001909101905b600101611ca5565b50606082604051908082528060200260200182016040528015611d4a578160200160208202803683370190505b509050606083604051908082528060200260200182016040528015611d79578160200160208202803683370190505b509050606084604051908082528060200260200182016040528015611da8578160200160208202803683370190505b509050606085604051908082528060200260200182016040528015611dd7578160200160208202803683370190505b5090506000606086604051908082528060200260200182016040528015611e08578160200160208202803683370190505b509050606087604051908082528060200260200182016040528015611e37578160200160208202803683370190505b509050600098506000975060608d905060006110046001600160a01b0316635170639c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e8457600080fd5b505afa158015611e98573d6000803e3d6000fd5b505050506040513d6020811015611eae57600080fd5b5051905067016345785d8a0000811115611f23577f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb2604051808060200182810382526021815260200180613d4e6021913960400191505060405180910390a160689d5050505050505050505050505050610ead565b60005b6001548110156121965767016345785d8a000060018281548110611f4657fe5b906000526020600020906004020160030154106120cc5760018181548110611f6a57fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b03168a8d81518110611f9b57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060006402540be40060018381548110611fd057fe5b90600052602060002090600402016003015481611fe957fe5b0660018381548110611ff757fe5b90600052602060002090600402016003015403905061201f838261314d90919063ffffffff16565b8a8e8151811061202b57fe5b6020026020010181815250506001828154811061204457fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b0316888e8151811061207557fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081898e815181106120a257fe5b60209081029190910101526120bd878263ffffffff61318f16565b6001909d019c965061218e9050565b6000600182815481106120db57fe5b906000526020600020906004020160030154111561218e576001818154811061210057fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316858c8151811061213157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506001818154811061215e57fe5b906000526020600020906004020160030154848c8151811061217c57fe5b60209081029190910101526001909a01995b600101611f26565b50600085156125d4576110046001600160a01b0316636e056520878c8c8b60025442016040518663ffffffff1660e01b815260040180806020018060200180602001856001600160401b03166001600160401b03168152602001848103845288818151815260200191508051906020019060200280838360005b83811015612228578181015183820152602001612210565b50505050905001848103835287818151815260200191508051906020019060200280838360005b8381101561226757818101518382015260200161224f565b50505050905001848103825286818151815260200191508051906020019060200280838360005b838110156122a657818101518382015260200161228e565b505050509050019750505050505050506020604051808303818588803b1580156122cf57600080fd5b505af1935050505080156122f557506040513d60208110156122f057600080fd5b505160015b612530576040516000815260443d1015612311575060006123ac565b60046000803e60005160e01c6308c379a081146123325760009150506123ac565b60043d036004833e81513d60248201116001600160401b038211171561235d576000925050506123ac565b80830180516001600160401b0381111561237e5760009450505050506123ac565b8060208301013d860181111561239c576000955050505050506123ac565b601f01601f191660405250925050505b806123b7575061245b565b60019150867fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280826040518080602001828103825283818151815260200191508051906020019080838360005b8381101561241b578181015183820152602001612403565b50505050905090810190601f1680156124485780820380516001836020036101000a031916815260200191505b509250505060405180910390a25061252b565b3d808015612485576040519150601f19603f3d011682016040523d82523d6000602084013e61248a565b606091505b5060019150867fbfa884552dd8921b6ce90bfe906952ae5b3b29be0cc1a951d4f62697635a3a45826040518080602001828103825283818151815260200191508051906020019080838360005b838110156124ef5781810151838201526020016124d7565b50505050905090810190601f16801561251c5780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505b6125d4565b801561256e576040805188815290517fa217d08e65f80c73121cd9db834d81652d544bfbf452f6d04922b16c90a37b709181900360200190a16125d2565b604080516020808252601b908201527f6261746368207472616e736665722072657475726e2066616c7365000000000081830152905188917fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280919081900360600190a25b505b801561278a5760005b88518110156127885760008982815181106125f457fe5b6020026020010151905060006001828154811061260d57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116916108fc918590811061263e57fe5b9060005260206000209060040201600301549081150290604051600060405180830381858888f19350505050905080156126fa576001828154811061267f57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d91859081106126ce57fe5b9060005260206000209060040201600301546040518082815260200191505060405180910390a261277e565b6001828154811061270757fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d918590811061275657fe5b9060005260206000209060040201600301546040518082815260200191505060405180910390a25b50506001016125dd565b505b8451156128d45760005b85518110156128d25760008682815181106127ab57fe5b60200260200101516001600160a01b03166108fc8784815181106127cb57fe5b60200260200101519081150290604051600060405180830381858888f19350505050905080156128615786828151811061280157fe5b60200260200101516001600160a01b03167f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d87848151811061283f57fe5b60200260200101516040518082815260200191505060405180910390a26128c9565b86828151811061286d57fe5b60200260200101516001600160a01b03167f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d8784815181106128ab57fe5b60200260200101516040518082815260200191505060405180910390a25b50600101612794565b505b471561293d576040805147815290517f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d9181900360200190a1604051611002904780156108fc02916000818181858888f1935050505015801561293b573d6000803e3d6000fd5b505b600060035582511561295257612952836131e9565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561298f57600080fd5b505af11580156129a3573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a15060009f9e505050505050505050505050505050565b60008151600114612a44577f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb2604051808060200182810382526025815260200180613cfb6025913960400191505060405180910390a1506067610ead565b612a4c613c59565b82600081518110612a5957fe5b60209081029190910181015180516001600160a01b03166000908152600490925260409091205490915080612aca5781516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a2600092505050610ead565b600154600090815b81811015612b5c5760018181548110612ae757fe5b9060005260206000209060040201600201601c9054906101000a900460ff16158015612b46575084600001516001600160a01b031660018281548110612b2957fe5b60009182526020909120600490910201546001600160a01b031614155b15612b545760019250612b5c565b600101612ad2565b5081612ba65783516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a26000945050505050610ead565b6001806001850381548110612bb757fe5b6000918252602082206002600490920201018054921515600160e01b0260ff60e01b199093169290921790915584516040516001600160a01b03909116917ff226e7d8f547ff903d9d419cf5f54e0d7d07efa9584135a53a057c5f1f27f49a91a250600095945050505050565b6000816040516020018082805190602001908083835b60208310612c595780518252601f199092019160209182019101612c3a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310612cc75780518252601f199092019160209182019101612ca8565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001201490505b92915050565b015190565b612d19613c8e565b506040805180820190915281518152602082810190820152919050565b612d3e613c39565b612d47826136b0565b612d5057600080fd5b6000612d5f83602001516136ea565b60208085015160408051808201909152868152920190820152915050919050565b6000612d8a613c8e565b505080518051602091820151919092015191011190565b612da9613c8e565b612db282612d80565b612dbb57600080fd5b60208201516000612dcb8261374d565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590612e0457508151602110155b612e0d57600080fd5b6000612e1c83602001516136ea565b83516020808601518301805193945091849003929190831015612e4657826020036101000a820491505b50949350505050565b6060612e5a826136b0565b612e6357600080fd5b6000612e6e836137e6565b9050606081604051908082528060200260200182016040528015612eac57816020015b612e99613c8e565b815260200190600190039081612e915790505b5090506000612ebe85602001516136ea565b60208601510190506000805b84811015612f1557612edb8361374d565b9150604051806040016040528083815260200184815250848281518110612efe57fe5b602090810291909101015291810191600101612eca565b509195945050505050565b612f28613c59565b6000612f32613c59565b612f3a613c39565b612f4385612d36565b90506000805b612f5283612d80565b15611b765780612f7d57612f6d612f6884612da1565b613842565b6001600160a01b03168452612ff5565b8060011415612fa557612f92612f6884612da1565b6001600160a01b03166020850152612ff5565b8060021415612fcd57612fba612f6884612da1565b6001600160a01b03166040850152612ff5565b8060031415611b6957612fe2611a7b84612da1565b6001600160401b03166060850152600191505b600101612f49565b6060612d0661300b8361385c565b613942565b60608151600014156130315750604080516000815260208101909152610ead565b60608260008151811061304057fe5b602002602001015190506000600190505b8351811015613081576130778285838151811061306a57fe5b6020026020010151613994565b9150600101613051565b50610b1f613094825160c060ff16613a11565b82613994565b60006060815b83518110156131335760005b8181101561312a578481815181106130c057fe5b6020026020010151600001516001600160a01b03168583815181106130e157fe5b6020026020010151600001516001600160a01b031614156131225760006040518060600160405280602b8152602001613ca9602b9139935093505050611b7f565b6001016130ac565b506001016130a0565b505060408051602081019091526000815260019150915091565b6000610b1f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613b09565b600082820183811015610b1f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600154815160005b82811015613306576001613203613c59565b6001838154811061321057fe5b600091825260208083206040805160c08101825260049490940290910180546001600160a01b0390811685526001820154811693850193909352600281015492831691840191909152600160a01b82046001600160401b03166060840152600160e01b90910460ff16151560808301526003015460a082015291505b848110156132da578681815181106132a057fe5b6020026020010151600001516001600160a01b031682600001516001600160a01b031614156132d257600092506132da565b60010161328c565b5081156132fc5780516001600160a01b03166000908152600460205260408120555b50506001016131f1565b508082111561337b57805b8281101561337957600180548061332457fe5b60008281526020812060046000199093019283020180546001600160a01b03199081168255600182810180549092169091556002820180546001600160e81b0319169055600390910191909155915501613311565b505b600081831061338a578161338c565b825b905060005b818110156135865761343e8582815181106133a857fe5b6020026020010151600183815481106133bd57fe5b60009182526020918290206040805160c08101825260049390930290910180546001600160a01b0390811684526001820154811694840194909452600281015493841691830191909152600160a01b83046001600160401b03166060830152600160e01b90920460ff161515608082015260039091015460a0820152613ba0565b61355957806001016004600087848151811061345657fe5b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000208190555084818151811061349257fe5b6020026020010151600182815481106134a757fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a09091015160039091015561357e565b60006001828154811061356857fe5b9060005260206000209060040201600301819055505b600101613391565b50828211156136aa57825b82811015610e3d5760018582815181106135a757fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782559585015181840180549184169188169190911790556040850151600282018054606088015160808901511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590971692909a169190911792909216939093171695909517905560a0909201516003909301929092558751908401929088908590811061367d57fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101613591565b50505050565b80516000906136c157506000610ead565b6020820151805160001a9060c08210156136e057600092505050610ead565b5060019392505050565b8051600090811a6080811015613704576000915050610ead565b60b881108061371f575060c0811080159061371f575060f881105b1561372e576001915050610ead565b60c08110156137425760b519019050610ead565b60f519019050610ead565b80516000908190811a608081101561376857600191506137df565b60b881101561377d57607e19810191506137df565b60c08110156137aa5760b78103600185019450806020036101000a855104600182018101935050506137df565b60f88110156137bf5760be19810191506137df565b60f78103600185019450806020036101000a855104600182018101935050505b5092915050565b80516000906137f757506000610ead565b6000809050600061380b84602001516136ea565b602085015185519181019250015b808210156138395761382a8261374d565b60019093019290910190613819565b50909392505050565b805160009060151461385357600080fd5b612d0682612def565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166138a0575060186138c4565b6fffffffffffffffffffffffffffffffff1984166138c0575060106138c4565b5060005b60208110156138fa578181815181106138d957fe5b01602001516001600160f81b031916156138f2576138fa565b6001016138c4565b60008160200390506060816040519080825280601f01601f19166020018201604052801561392f576020820181803683370190505b5080830196909652508452509192915050565b6060815160011480156139745750607f60f81b8260008151811061396257fe5b01602001516001600160f81b03191611155b15613980575080610ead565b612d066139928351608060ff16613a11565b835b6060806040519050835180825260208201818101602087015b818310156139c55780518352602092830192016139ad565b50855184518101855292509050808201602086015b818310156139f25780518352602092830192016139da565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310613a61576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b60408051600180825281830190925260609160208201818036833701905050905060378411613abb5782840160f81b81600081518110613a9d57fe5b60200101906001600160f81b031916908160001a9053509050612d06565b6060613ac68561385c565b90508381510160370160f81b82600081518110613adf57fe5b60200101906001600160f81b031916908160001a905350613b008282613994565b95945050505050565b60008184841115613b985760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613b5d578181015183820152602001613b45565b50505050905090810190601f168015613b8a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b805182516000916001600160a01b039182169116148015613bda575081602001516001600160a01b031683602001516001600160a01b0316145b8015613bff575081604001516001600160a01b031683604001516001600160a01b0316145b8015610b1f5750506060908101519101516001600160401b0390811691161490565b60408051808201909152600081526060602082015290565b6040518060400160405280613c4c613c8e565b8152602001600081525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b60405180604001604052806000815260200160008152509056fe6475706c696361746520636f6e73656e7375732061646472657373206f662076616c696461746f725365747468652065787069726554696d655365636f6e64476170206973206f7574206f662072616e67656c656e677468206f66206a61696c2076616c696461746f7273206d757374206265206f6e65746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374666565206973206c6172676572207468616e2044555354595f494e434f4d494e476c656e677468206f662065787069726554696d655365636f6e64476170206d69736d61746368f84580f842f840949fb29aac15b9a4b7f17c3385939b007540f4d791949fb29aac15b9a4b7f17c3385939b007540f4d791949fb29aac15b9a4b7f17c3385939b007540f4d791646661696c656420746f20706172736520696e69742076616c696461746f72536574746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374746865206d6573736167652073656e646572206d7573742062652074686520626c6f636b2070726f6475636572746865206d6573736167652073656e646572206d75737420626520736c61736820636f6e7472616374a2646970667358221220b62dbee0a34a5c80de3b9987936d48e0a14d9f1068d723f32ad2d3e7ddc317dc64736f6c63430006040033" }, "0x0000000000000000000000000000000000001001": { "balance": "0x0", @@ -45,7 +45,7 @@ }, "0x0000000000000000000000000000000000001004": { "balance": "180000000000000000000000000", - "code": "0x6080604052600436106102cd5760003560e01c80639dc0926211610175578063bd466461116100dc578063ebf71d5311610095578063fc1a598f1161006f578063fc1a598f14610c23578063fc3e59081461094e578063fd6a687914610c56578063ff9c00271461074c57610315565b8063ebf71d5314610be4578063f014847214610bf9578063f9a2bbc714610c0e57610315565b8063bd46646114610aed578063c81b166214610b20578063c8509d8114610b35578063dc6f5e901461094e578063dc927faf14610bba578063e1c7392a14610bcf57610315565b8063aa7415f51161012e578063aa7415f514610963578063ab51bb96146109aa578063ac431751146109bf578063b770186114610a8a578063b99328c514610a9f578063b9fd21e314610ad857610315565b80639dc09262146108c7578063a1a11bf5146108dc578063a496fba2146108f1578063a5cd588b14610906578063a78abc1614610939578063a7c9f02d1461094e57610315565b806361368475116102345780637942fd05116101ed5780638eff336c116101c75780638eff336c1461082557806396713da9146108645780639a854bbd146108795780639a99b4f01461088e57610315565b80637942fd051461078b578063831d65d1146107a05780638b87b21f1461053a57610315565b8063613684751461031a5780636e0565201461060b5780636e47b4821461073757806370fd5bad1461074c57806371d308631461076157806375d47a0a1461077657610315565b8063493279b111610286578063493279b1146105645780634bf6c8821461031a57806350432d32146105905780635170639c146105b757806351e80672146105cc57806359b92789146105e157610315565b8063077b8f351461031a5780630bee7a67146103455780631182b875146103735780633d7132231461046d5780633dffc3871461053a57806343756e5c1461054f57610315565b36610315573415610313576040805133815234602082015281517f6c98249d85d88c3753a04a22230f595e4dc8d3dc86c34af35deeeedc861b89db929181900390910190a15b005b600080fd5b34801561032657600080fd5b5061032f610c6b565b6040805160ff9092168252519081900360200190f35b34801561035157600080fd5b5061035a610c70565b6040805163ffffffff9092168252519081900360200190f35b34801561037f57600080fd5b506103f86004803603604081101561039657600080fd5b60ff8235169190810190604081016020820135600160201b8111156103ba57600080fd5b8201836020820111156103cc57600080fd5b803590602001918460018302840111600160201b831117156103ed57600080fd5b509092509050610c75565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561043257818101518382015260200161041a565b50505050905090810190601f16801561045f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561047957600080fd5b5061051e6004803603602081101561049057600080fd5b810190602081018135600160201b8111156104aa57600080fd5b8201836020820111156104bc57600080fd5b803590602001918460018302840111600160201b831117156104dd57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610da3945050505050565b604080516001600160a01b039092168252519081900360200190f35b34801561054657600080fd5b5061032f610dc7565b34801561055b57600080fd5b5061051e610dcc565b34801561057057600080fd5b50610579610dd2565b6040805161ffff9092168252519081900360200190f35b34801561059c57600080fd5b506105a5610dd7565b60408051918252519081900360200190f35b3480156105c357600080fd5b506105a5610de2565b3480156105d857600080fd5b5061051e610de8565b3480156105ed57600080fd5b5061051e6004803603602081101561060457600080fd5b5035610dee565b6107236004803603608081101561062157600080fd5b810190602081018135600160201b81111561063b57600080fd5b82018360208201111561064d57600080fd5b803590602001918460208302840111600160201b8311171561066e57600080fd5b919390929091602081019035600160201b81111561068b57600080fd5b82018360208201111561069d57600080fd5b803590602001918460208302840111600160201b831117156106be57600080fd5b919390929091602081019035600160201b8111156106db57600080fd5b8201836020820111156106ed57600080fd5b803590602001918460208302840111600160201b8311171561070e57600080fd5b91935091503567ffffffffffffffff16610e09565b604080519115158252519081900360200190f35b34801561074357600080fd5b5061051e6112d8565b34801561075857600080fd5b5061032f6112de565b34801561076d57600080fd5b506105a56112e3565b34801561078257600080fd5b5061051e6112e9565b34801561079757600080fd5b5061032f6112ef565b3480156107ac57600080fd5b50610313600480360360408110156107c357600080fd5b60ff8235169190810190604081016020820135600160201b8111156107e757600080fd5b8201836020820111156107f957600080fd5b803590602001918460018302840111600160201b8311171561081a57600080fd5b5090925090506112f4565b34801561083157600080fd5b506103136004803603606081101561084857600080fd5b508035906001600160a01b03602082013516906040013561143d565b34801561087057600080fd5b5061032f6114c3565b34801561088557600080fd5b506105a56114c8565b34801561089a57600080fd5b506105a5600480360360408110156108b157600080fd5b506001600160a01b0381351690602001356114d4565b3480156108d357600080fd5b5061051e6115f8565b3480156108e857600080fd5b5061051e6115fe565b3480156108fd57600080fd5b5061032f611604565b34801561091257600080fd5b506105a56004803603602081101561092957600080fd5b50356001600160a01b0316611609565b34801561094557600080fd5b5061072361161b565b34801561095a57600080fd5b5061032f611624565b6107236004803603608081101561097957600080fd5b5080356001600160a01b03908116916020810135909116906040810135906060013567ffffffffffffffff16611629565b3480156109b657600080fd5b5061035a611604565b3480156109cb57600080fd5b50610313600480360360408110156109e257600080fd5b810190602081018135600160201b8111156109fc57600080fd5b820183602082011115610a0e57600080fd5b803590602001918460018302840111600160201b83111715610a2f57600080fd5b919390929091602081019035600160201b811115610a4c57600080fd5b820183602082011115610a5e57600080fd5b803590602001918460018302840111600160201b83111715610a7f57600080fd5b509092509050611c9c565b348015610a9657600080fd5b506105a5611f0b565b348015610aab57600080fd5b5061031360048036036040811015610ac257600080fd5b50803590602001356001600160a01b0316611f11565b348015610ae457600080fd5b506105a5611f87565b348015610af957600080fd5b506105a560048036036020811015610b1057600080fd5b50356001600160a01b0316611f91565b348015610b2c57600080fd5b5061051e611fac565b348015610b4157600080fd5b5061031360048036036040811015610b5857600080fd5b60ff8235169190810190604081016020820135600160201b811115610b7c57600080fd5b820183602082011115610b8e57600080fd5b803590602001918460018302840111600160201b83111715610baf57600080fd5b509092509050611fb2565b348015610bc657600080fd5b5061051e612082565b348015610bdb57600080fd5b50610313612088565b348015610bf057600080fd5b5061032f6120fc565b348015610c0557600080fd5b5061032f612101565b348015610c1a57600080fd5b5061051e612106565b348015610c2f57600080fd5b506103f860048036036020811015610c4657600080fd5b50356001600160a01b031661210c565b348015610c6257600080fd5b5061051e612233565b600881565b606481565b60005460609060ff16610cbd576040805162461bcd60e51b8152602060048201526019602482015260008051602061445e833981519152604482015290519081900360640190fd5b3361200014610cfd5760405162461bcd60e51b815260040180806020018281038252602f8152602001806143df602f913960400191505060405180910390fd5b60ff841660021415610d4f57610d4883838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061223992505050565b9050610d9c565b6040805162461bcd60e51b815260206004820152601860248201527f756e7265636f676e697a65642073796e207061636b6167650000000000000000604482015290519081900360640190fd5b9392505050565b6020818101516000908152600490915260409020546001600160a01b03165b919050565b600181565b61100181565b606081565b662386f26fc1000081565b60015490565b61200081565b6000908152600460205260409020546001600160a01b031690565b6000805460ff16610e4f576040805162461bcd60e51b8152602060048201526019602482015260008051602061445e833981519152604482015290519081900360640190fd5b868514610e8d5760405162461bcd60e51b815260040180806020018281038252603b8152602001806143a4603b913960400191505060405180910390fd5b868314610ecb5760405162461bcd60e51b815260040180806020018281038252603f8152602001806142b6603f913960400191505060405180910390fd5b426078018267ffffffffffffffff161015610f175760405162461bcd60e51b81526004018080602001828103825260248152602001806141bb6024913960400191505060405180910390fd5b846000805b82811015610f5357610f49898983818110610f3357fe5b905060200201358361235d90919063ffffffff16565b9150600101610f1c565b50606082604051908082528060200260200182016040528015610f80578160200160208202803683370190505b50905060005b838160ff161015611056576402540be4008a8a8360ff16818110610fa657fe5b9050602002013581610fb457fe5b0615611007576040805162461bcd60e51b815260206004820152601760248201527f696e76616c6964207472616e7366657220616d6f756e74000000000000000000604482015290519081900360640190fd5b6110346402540be4008b8b8460ff1681811061101f57fe5b905060200201356123b790919063ffffffff16565b828260ff168151811061104357fe5b6020908102919091010152600101610f86565b5060015461107b9061106e908563ffffffff6123f916565b839063ffffffff61235d16565b34146110b85760405162461bcd60e51b815260040180806020018281038252604c815260200180614245604c913960600191505060405180910390fd5b6110c0614014565b6040518060c001604052806221272160e91b60001b815260200160006001600160a01b031681526020018381526020018d8d808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208b810282810182019093528b82529283019290918c918c91829185019084908082843760009201919091525050509082525067ffffffffffffffff8816602090910152905061200063f7a251d7600361118484612452565b6111ae6402540be4006111a28a6001546123f990919063ffffffff16565b9063ffffffff6123b716565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561120c5781810151838201526020016111f4565b50505050905090810190601f1680156112395780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561125a57600080fd5b505af115801561126e573d6000803e3d6000fd5b505050506040513d602081101561128457600080fd5b5050604080516000815233602082015280820185905290517fe9750a449d7c7d8f872b7ee10d75b95a948bc425b3c2d52052587665742c81ec9181900360600190a15060019b9a5050505050505050505050565b61100581565b600281565b60015481565b61100881565b600b81565b60005460ff16611339576040805162461bcd60e51b8152602060048201526019602482015260008051602061445e833981519152604482015290519081900360640190fd5b33612000146113795760405162461bcd60e51b815260040180806020018281038252602f8152602001806143df602f913960400191505060405180910390fd5b60ff8316600314156113c9576113c482828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061270d92505050565b611438565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a15b505050565b336110081461147d5760405162461bcd60e51b815260040180806020018281038252602381526020018061440e6023913960400191505060405180910390fd5b600083815260046020908152604080832080546001600160a01b039096166001600160a01b03199096168617905593825260038152838220949094556002909352912055565b600981565b677ce66c50e284000081565b6000805460ff1661151a576040805162461bcd60e51b8152602060048201526019602482015260008051602061445e833981519152604482015290519081900360640190fd5b336110051461155a5760405162461bcd60e51b815260040180806020018281038252602f81526020018061412e602f913960400191505060405180910390fd5b6000478310611569574761156b565b825b905080156115ef576040516001600160a01b0385169082156108fc029083906000818181858888f193505050501580156115a9573d6000803e3d6000fd5b50604080516001600160a01b03861681526020810183905281517ff8b71c64315fc33b2ead2adfa487955065152a8ac33d9d5193aafd7f45dc15a0929181900390910190a15b90505b92915050565b61100781565b61100681565b600081565b60026020526000908152604090205481565b60005460ff1681565b600381565b6000805460ff1661166f576040805162461bcd60e51b8152602060048201526019602482015260008051602061445e833981519152604482015290519081900360640190fd5b426078018267ffffffffffffffff1610156116bb5760405162461bcd60e51b81526004018080602001828103825260248152602001806141bb6024913960400191505060405180910390fd5b6000806001600160a01b038716611786576402540be4008506156117105760405162461bcd60e51b815260040180806020018281038252603c8152602001806142f5603c913960400191505060405180910390fd5b60015461172490869063ffffffff61235d16565b34146117615760405162461bcd60e51b815260040180806020018281038252604c815260200180614245604c913960600191505060405180910390fd5b611776856402540be40063ffffffff6123b716565b6221272160e91b92509050611a25565b6001600160a01b0387166000908152600360205260409020549150816117dd5760405162461bcd60e51b81526004018080602001828103825260318152602001806142146031913960400191505060405180910390fd5b600154341461181d5760405162461bcd60e51b815260040180806020018281038252602d815260200180614431602d913960400191505060405180910390fd5b6001600160a01b03871660009081526002602052604090205460088111158061186557506008811180156118655750611863866007198301600a0a63ffffffff61276916565b155b6118a05760405162461bcd60e51b815260040180806020018281038252603c8152602001806142f5603c913960400191505060405180910390fd5b6118aa86826127ab565b91506118b5836127eb565b156118fd576305f5e1008210156118fd5760405162461bcd60e51b815260040180806020018281038252603a81526020018061415d603a913960400191505060405180910390fd5b600881101580611917575060088110801561191757508582115b6119525760405162461bcd60e51b81526004018080602001828103825260258152602001806142916025913960400191505060405180910390fd5b677ce66c50e28400008211156119995760405162461bcd60e51b81526004018080602001828103825260358152602001806141df6035913960400191505060405180910390fd5b604080516323b872dd60e01b81523360048201523060248201526044810188905290516001600160a01b038a16916323b872dd9160648083019260209291908290030181600087803b1580156119ee57600080fd5b505af1158015611a02573d6000803e3d6000fd5b505050506040513d6020811015611a1857600080fd5b5051611a2357600080fd5b505b611a2d614014565b6040805160c0810182528481526001600160a01b038a166020820152815160018082528184018452919283019181602001602082028036833750505081526040805160018082528183019092526020928301929091908083019080368337505050815260408051600180825281830190925260209283019290919080830190803683370190505081526020018667ffffffffffffffff168152509050818160400151600081518110611adb57fe5b602002602001018181525050868160600151600081518110611af957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050338160800151600081518110611b2b57fe5b6001600160a01b039092166020928302919091019091015261200063f7a251d76003611b5684612452565b600154611b6e906402540be40063ffffffff6123b716565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611bcc578181015183820152602001611bb4565b50505050905090810190601f168015611bf95780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015611c1a57600080fd5b505af1158015611c2e573d6000803e3d6000fd5b505050506040513d6020811015611c4457600080fd5b5050604080516001600160a01b038a16815233602082015280820188905290517fe9750a449d7c7d8f872b7ee10d75b95a948bc425b3c2d52052587665742c81ec9181900360600190a1506001979650505050505050565b3361100714611cdc5760405162461bcd60e51b815260040180806020018281038252602e815260200180614352602e913960400191505060405180910390fd5b60208114611d31576040805162461bcd60e51b815260206004820152601b60248201527f65787065637465642076616c7565206c656e6774682069732033320000000000604482015290519081900360640190fd5b606084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8801819004810282018101909252868152939450606093925086915085908190840183828082843760009201919091525050505060208301519091506772656c617946656560c01b811415611e39576020820151670de0b6b3a76400008111158015611de057506402540be4008106155b611e31576040805162461bcd60e51b815260206004820152601960248201527f7468652072656c6179466565206f7574206f662072616e676500000000000000604482015290519081900360640190fd5b600155611e76565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a878787876040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050505050565b61c35081565b3361100814611f515760405162461bcd60e51b815260040180806020018281038252602381526020018061440e6023913960400191505060405180910390fd5b600091825260046020908152604080842080546001600160a01b03191690556001600160a01b0392909216835260039052812055565b6221272160e91b81565b6001600160a01b031660009081526003602052604090205490565b61100281565b60005460ff16611ff7576040805162461bcd60e51b8152602060048201526019602482015260008051602061445e833981519152604482015290519081900360640190fd5b33612000146120375760405162461bcd60e51b815260040180806020018281038252602f8152602001806143df602f913960400191505060405180910390fd5b60ff8316600314156113c9576113c482828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506128f192505050565b61100381565b60005460ff16156120e0576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b662386f26fc1000060019081556000805460ff19169091179055565b600481565b600581565b61100081565b6001600160a01b03811660009081526003602090815260409182902054825182815280840190935260609290918391906020820181803683375050506020810183905290506000805b60208160ff16101561219c57828160ff168151811061217057fe5b01602001516001600160f81b0319161561218f57600190910190612194565b61219c565b600101612155565b5060608160ff166040519080825280601f01601f1916602001820160405280156121cd576020820181803683370190505b50905060005b8260ff168160ff16101561222957838160ff16815181106121f057fe5b602001015160f81c60f81b828260ff168151811061220a57fe5b60200101906001600160f81b031916908160001a9053506001016121d3565b5095945050505050565b61100481565b6060612243614060565b600061224e846129ef565b91509150806122a4576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b60006122af83612b2e565b905063ffffffff811615612343576040808401516020808601516001600160a01b031660009081526002909152918220546122ea91906127ab565b90506122f4614095565b60405180608001604052808660000151815260200183815260200186608001516001600160a01b031681526020018463ffffffff16815250905061233781612e46565b95505050505050610dc2565b50506040805160008152602081019091529150610dc29050565b6000828201838110156115ef576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006115ef83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f22565b600082612408575060006115f2565b8282028284828161241557fe5b04146115ef5760405162461bcd60e51b81526004018080602001828103825260218152602001806143316021913960400191505060405180910390fd5b60408051600680825260e08201909252606091829190816020015b606081526020019060019003908161246d575050835190915061248f90612fc4565b8160008151811061249c57fe5b60200260200101819052506124bd83602001516001600160a01b0316612fd7565b816001815181106124ca57fe5b60200260200101819052506000836040015151905060608160405190808252806020026020018201604052801561251557816020015b60608152602001906001900390816125005790505b50905060005b82811015612562576125438660400151828151811061253657fe5b6020026020010151612fc4565b82828151811061254f57fe5b602090810291909101015260010161251b565b5061256c81612ffa565b8360028151811061257957fe5b60200260200101819052506060826040519080825280602002602001820160405280156125ba57816020015b60608152602001906001900390816125a55790505b50905060005b83811015612610576125f1876060015182815181106125db57fe5b60200260200101516001600160a01b0316612fd7565b8282815181106125fd57fe5b60209081029190910101526001016125c0565b5061261a81612ffa565b8460038151811061262757fe5b602002602001018190525060608360405190808252806020026020018201604052801561266857816020015b60608152602001906001900390816126535790505b50905060005b848110156126a857612689886080015182815181106125db57fe5b82828151811061269557fe5b602090810291909101015260010161266e565b506126b281612ffa565b856004815181106126bf57fe5b60200260200101819052506126e18760a0015167ffffffffffffffff16612fc4565b856005815181106126ee57fe5b602002602001018190525061270285612ffa565b979650505050505050565b6127156140bc565b600061272083613084565b91509150806127605760405162461bcd60e51b81526004018080602001828103825260248152602001806143806024913960400191505060405180910390fd5b6114388261324f565b60006115ef83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506136a0565b600060088211156127d4576127cd836007198401600a0a63ffffffff6123b716565b90506115f2565b6115ef836008849003600a0a63ffffffff6123f916565b604080516020808252818301909252600091606091906020820181803683375050506020810184905290506000805b60208160ff16101561286157828160ff168151811061283557fe5b01602001516001600160f81b0319161561285457600190910190612859565b612861565b60010161281a565b50600860ff8216101561287957600092505050610dc2565b816005820360ff168151811061288b57fe5b6020910101516001600160f81b031916602d60f81b146128b057600092505050610dc2565b816001820360ff16815181106128c257fe5b6020910101516001600160f81b031916604d60f81b146128e757600092505050610dc2565b5060019392505050565b6128f9614014565b600061290483613702565b91509150806129445760405162461bcd60e51b81526004018080602001828103825260248152602001806141976024913960400191505060405180910390fd5b61294c6140bc565b602080840180516001600160a01b0390811684526040808701518585015291511660009081526002909252812054905b8460400151518110156129cd576129aa8560400151828151811061299c57fe5b60200260200101518361397d565b856040015182815181106129ba57fe5b602090810291909101015260010161297c565b5060808401516040830152600560608301526129e88261324f565b5050505050565b6129f7614060565b6000612a01614060565b612a096140f3565b612a1a612a15866139b6565b6139db565b90506000805b612a2983613a25565b15612b215780612a4b57612a44612a3f84613a46565b613a94565b8452612b19565b8060011415612a7857612a65612a6084613a46565b613af4565b6001600160a01b03166020850152612b19565b8060021415612a9757612a8d612a3f84613a46565b6040850152612b19565b8060031415612abf57612aac612a6084613a46565b6001600160a01b03166060850152612b19565b8060041415612ae757612ad4612a6084613a46565b6001600160a01b03166080850152612b19565b8060051415612b1457612afc612a3f84613a46565b67ffffffffffffffff1660a085015260019150612b19565b612b21565b600101612a20565b5091935090915050915091565b60208101516000906001600160a01b0316612c30578160a0015167ffffffffffffffff16421115612b6157506001610dc2565b8160400151471015612b7557506003610dc2565b81606001516001600160a01b03166108fc83604001519081150290604051600060405180830381858888f19350505050612bb157506004610dc2565b7f471eb9cc1ffe55ffadf15b32595415eb9d80f22e761d24bd6dffc607e1284d5982602001518360600151846040015160405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a1506000610dc2565b8160a0015167ffffffffffffffff16421115612c4e57506001610dc2565b81516020808401516001600160a01b031660009081526003909152604090205414612c7b57506002610dc2565b602080830151604080516370a0823160e01b815230600482015290516000936001600160a01b03909316926370a082319261c3509260248083019392829003018187803b158015612ccb57600080fd5b5086fa158015612cdf573d6000803e3d6000fd5b50505050506040513d6020811015612cf657600080fd5b50516040840151909150811015612d11575060039050610dc2565b600083602001516001600160a01b031663a9059cbb61c350866060015187604001516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b158015612d8257600080fd5b5087f1158015612d96573d6000803e3d6000fd5b50505050506040513d6020811015612dad57600080fd5b505190508015612e3a577f471eb9cc1ffe55ffadf15b32595415eb9d80f22e761d24bd6dffc607e1284d5984602001518560600151866040015160405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a15060009150610dc29050565b5060059150610dc29050565b60408051600480825260a08201909252606091829190816020015b6060815260200190600190039081612e615750508351909150612e8390612fc4565b81600081518110612e9057fe5b6020026020010181905250612ea88360200151612fc4565b81600181518110612eb557fe5b6020026020010181905250612ed683604001516001600160a01b0316612fd7565b81600281518110612ee357fe5b6020026020010181905250612f01836060015163ffffffff16612fc4565b81600381518110612f0e57fe5b6020026020010181905250610d9c81612ffa565b60008183612fae5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f73578181015183820152602001612f5b565b50505050905090810190601f168015612fa05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612fba57fe5b0495945050505050565b60606115f2612fd283613b0e565b613bf4565b60408051600560a21b8318601482015260348101909152606090610d9c81613bf4565b606081516000141561301b5750604080516000815260208101909152610dc2565b60608260008151811061302a57fe5b602002602001015190506000600190505b835181101561306b576130618285838151811061305457fe5b6020026020010151613c46565b915060010161303b565b50610d9c61307e825160c060ff16613cc3565b82613c46565b61308c6140bc565b60006130966140bc565b61309e6140f3565b6130aa612a15866139b6565b90506000805b6130b983613a25565b15612b2157806130df576130cf612a6084613a46565b6001600160a01b03168452613247565b80600114156131805760606130fb6130f685613a46565b613dbb565b90508051604051908082528060200260200182016040528015613128578160200160208202803683370190505b50602086015260005b81518110156131795761315682828151811061314957fe5b6020026020010151613a94565b8660200151828151811061316657fe5b6020908102919091010152600101613131565b5050613247565b80600214156132225760606131976130f685613a46565b905080516040519080825280602002602001820160405280156131c4578160200160208202803683370190505b50604086015260005b8151811015613179576131f28282815181106131e557fe5b6020026020010151613af4565b8660400151828151811061320257fe5b6001600160a01b03909216602092830291909101909101526001016131cd565b8060031415612b1457613237612a3f84613a46565b63ffffffff166060850152600191505b6001016130b0565b80516001600160a01b03166134465760005b816020015151811015613440578160400151818151811061327e57fe5b60200260200101516001600160a01b03166108fc836020015183815181106132a257fe5b60200260200101519081150290604051600060405180830381858888f19350505050613382577f203f9f67a785f4f81be4d48b109aa0c498d1bc8097ecc2627063f480cc5fe73e8260000151836040015183815181106132fe57fe5b60200260200101518460200151848151811061331657fe5b6020026020010151856060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a1613438565b7fd468d4fa5e8fb4adc119b29a983fd0785e04af5cb8b7a3a69a47270c54b6901a8260000151836040015183815181106133b857fe5b6020026020010151846020015184815181106133d057fe5b6020026020010151856060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a15b600101613261565b5061369d565b60005b81602001515181101561369b57600082600001516001600160a01b031663a9059cbb61c3508560400151858151811061347e57fe5b60200260200101518660200151868151811061349657fe5b60200260200101516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b1580156134ed57600080fd5b5087f1158015613501573d6000803e3d6000fd5b50505050506040513d602081101561351857600080fd5b5051905080156135dc577fd468d4fa5e8fb4adc119b29a983fd0785e04af5cb8b7a3a69a47270c54b6901a83600001518460400151848151811061355857fe5b60200260200101518560200151858151811061357057fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a1613692565b7f203f9f67a785f4f81be4d48b109aa0c498d1bc8097ecc2627063f480cc5fe73e83600001518460400151848151811061361257fe5b60200260200101518560200151858151811061362a57fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a15b50600101613449565b505b50565b600081836136ef5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612f73578181015183820152602001612f5b565b508284816136f957fe5b06949350505050565b61370a614014565b6000613714614014565b61371c6140f3565b613728612a15866139b6565b90506000805b61373783613a25565b1561396f57806137545761374d612a3f84613a46565b8452613967565b806001141561377c57613769612a6084613a46565b6001600160a01b03166020850152613967565b806002141561380b5760606137936130f685613a46565b905080516040519080825280602002602001820160405280156137c0578160200160208202803683370190505b50604086015260005b8151811015613804576137e182828151811061314957fe5b866040015182815181106137f157fe5b60209081029190910101526001016137c9565b5050613967565b80600314156138a05760606138226130f685613a46565b9050805160405190808252806020026020018201604052801561384f578160200160208202803683370190505b50606086015260005b8151811015613804576138708282815181106131e557fe5b8660600151828151811061388057fe5b6001600160a01b0390921660209283029190910190910152600101613858565b80600414156139355760606138b76130f685613a46565b905080516040519080825280602002602001820160405280156138e4578160200160208202803683370190505b50608086015260005b8151811015613804576139058282815181106131e557fe5b8660800151828151811061391557fe5b6001600160a01b03909216602092830291909101909101526001016138ed565b80600514156139625761394a612a3f84613a46565b67ffffffffffffffff1660a085015260019150613967565b61396f565b60010161372e565b509195600195509350505050565b6000600882111561399f576127cd836007198401600a0a63ffffffff6123f916565b6115ef836008849003600a0a63ffffffff6123b716565b6139be614113565b506040805180820190915281518152602082810190820152919050565b6139e36140f3565b6139ec82613e8c565b6139f557600080fd5b6000613a048360200151613ebc565b60208085015160408051808201909152868152920190820152915050919050565b6000613a2f614113565b505080518051602091820151919092015191011190565b613a4e614113565b613a5782613a25565b613a6057600080fd5b60208201516000613a7082613f1f565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590613aa957508151602110155b613ab257600080fd5b6000613ac18360200151613ebc565b83516020808601518301805193945091849003929190831015613aeb57826020036101000a820491505b50949350505050565b8051600090601514613b0557600080fd5b6115f282613a94565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416613b5257506018613b76565b6fffffffffffffffffffffffffffffffff198416613b7257506010613b76565b5060005b6020811015613bac57818181518110613b8b57fe5b01602001516001600160f81b03191615613ba457613bac565b600101613b76565b60008160200390506060816040519080825280601f01601f191660200182016040528015613be1576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015613c265750607f60f81b82600081518110613c1457fe5b01602001516001600160f81b03191611155b15613c32575080610dc2565b6115f2613c448351608060ff16613cc3565b835b6060806040519050835180825260208201818101602087015b81831015613c77578051835260209283019201613c5f565b50855184518101855292509050808201602086015b81831015613ca4578051835260209283019201613c8c565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310613d13576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b60408051600180825281830190925260609160208201818036833701905050905060378411613d6d5782840160f81b81600081518110613d4f57fe5b60200101906001600160f81b031916908160001a90535090506115f2565b6060613d7885613b0e565b90508381510160370160f81b82600081518110613d9157fe5b60200101906001600160f81b031916908160001a905350613db28282613c46565b95945050505050565b6060613dc682613e8c565b613dcf57600080fd5b6000613dda83613fb8565b9050606081604051908082528060200260200182016040528015613e1857816020015b613e05614113565b815260200190600190039081613dfd5790505b5090506000613e2a8560200151613ebc565b60208601510190506000805b84811015613e8157613e4783613f1f565b9150604051806040016040528083815260200184815250848281518110613e6a57fe5b602090810291909101015291810191600101613e36565b509195945050505050565b8051600090613e9d57506000610dc2565b6020820151805160001a9060c08210156128e757600092505050610dc2565b8051600090811a6080811015613ed6576000915050610dc2565b60b8811080613ef1575060c08110801590613ef1575060f881105b15613f00576001915050610dc2565b60c0811015613f145760b519019050610dc2565b60f519019050610dc2565b80516000908190811a6080811015613f3a5760019150613fb1565b60b8811015613f4f57607e1981019150613fb1565b60c0811015613f7c5760b78103600185019450806020036101000a85510460018201810193505050613fb1565b60f8811015613f915760be1981019150613fb1565b60f78103600185019450806020036101000a855104600182018101935050505b5092915050565b8051600090613fc957506000610dc2565b60008090506000613fdd8460200151613ebc565b602085015185519181019250015b8082101561400b57613ffc82613f1f565b60019093019290910190613feb565b50909392505050565b6040518060c001604052806000801916815260200160006001600160a01b03168152602001606081526020016060815260200160608152602001600067ffffffffffffffff1681525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b604051806080016040528060006001600160a01b031681526020016060815260200160608152602001600063ffffffff1681525090565b6040518060400160405280614106614113565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe746865206d6573736167652073656e646572206d75737420626520696e63656e746976697a6520636f6e7472616374466f72206d696e69546f6b656e2c20746865207472616e7366657220616d6f756e74206d757374206e6f74206265206c657373207468616e2031756e7265636f676e697a6564207472616e736665724f75742073796e207061636b61676565787069726554696d65206d7573742062652074776f206d696e75746573206c61746572616d6f756e7420697320746f6f206c617267652c20657863656564206d6178696d756d206265703220746f6b656e20616d6f756e7474686520636f6e747261637420686173206e6f74206265656e20626f756e6420746f20616e79206265703220746f6b656e726563656976656420424e4220616d6f756e7420646f65736e277420657175616c20746f207468652073756d206f66207472616e7366657220616d6f756e7420616e642072656c6179466565616d6f756e7420697320746f6f206c617267652c2075696e74323536206f766572666c6f774c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620726566756e644164647273696e76616c6964207472616e7366657220616d6f756e743a20707265636973696f6e206c6f737320696e20616d6f756e7420636f6e76657273696f6e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374756e7265636f676e697a6564207472616e736665724f75742061636b207061636b6167654c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620616d6f756e7473746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374746865206d73672073656e646572206d75737420626520746f6b656e4d616e61676572726563656976656420424e4220616d6f756e7420646f65736e277420657175616c20746f2072656c617946656574686520636f6e7472616374206e6f7420696e69742079657400000000000000a2646970667358221220434a714081c045cd9ed2ce98357b4e71106119387236fd35d74f825915a9d9ec64736f6c63430006040033" + "code": "0x6080604052600436106102cd5760003560e01c80639dc0926211610175578063bd466461116100dc578063ebf71d5311610095578063fc1a598f1161006f578063fc1a598f14610c23578063fc3e59081461094e578063fd6a687914610c56578063ff9c00271461074c57610315565b8063ebf71d5314610be4578063f014847214610bf9578063f9a2bbc714610c0e57610315565b8063bd46646114610aed578063c81b166214610b20578063c8509d8114610b35578063dc6f5e901461094e578063dc927faf14610bba578063e1c7392a14610bcf57610315565b8063aa7415f51161012e578063aa7415f514610963578063ab51bb96146109aa578063ac431751146109bf578063b770186114610a8a578063b99328c514610a9f578063b9fd21e314610ad857610315565b80639dc09262146108c7578063a1a11bf5146108dc578063a496fba2146108f1578063a5cd588b14610906578063a78abc1614610939578063a7c9f02d1461094e57610315565b806361368475116102345780637942fd05116101ed5780638eff336c116101c75780638eff336c1461082557806396713da9146108645780639a854bbd146108795780639a99b4f01461088e57610315565b80637942fd051461078b578063831d65d1146107a05780638b87b21f1461053a57610315565b8063613684751461031a5780636e0565201461060b5780636e47b4821461073757806370fd5bad1461074c57806371d308631461076157806375d47a0a1461077657610315565b8063493279b111610286578063493279b1146105645780634bf6c8821461031a57806350432d32146105905780635170639c146105b757806351e80672146105cc57806359b92789146105e157610315565b8063077b8f351461031a5780630bee7a67146103455780631182b875146103735780633d7132231461046d5780633dffc3871461053a57806343756e5c1461054f57610315565b36610315573415610313576040805133815234602082015281517f6c98249d85d88c3753a04a22230f595e4dc8d3dc86c34af35deeeedc861b89db929181900390910190a15b005b600080fd5b34801561032657600080fd5b5061032f610c6b565b6040805160ff9092168252519081900360200190f35b34801561035157600080fd5b5061035a610c70565b6040805163ffffffff9092168252519081900360200190f35b34801561037f57600080fd5b506103f86004803603604081101561039657600080fd5b60ff8235169190810190604081016020820135600160201b8111156103ba57600080fd5b8201836020820111156103cc57600080fd5b803590602001918460018302840111600160201b831117156103ed57600080fd5b509092509050610c75565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561043257818101518382015260200161041a565b50505050905090810190601f16801561045f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561047957600080fd5b5061051e6004803603602081101561049057600080fd5b810190602081018135600160201b8111156104aa57600080fd5b8201836020820111156104bc57600080fd5b803590602001918460018302840111600160201b831117156104dd57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610da3945050505050565b604080516001600160a01b039092168252519081900360200190f35b34801561054657600080fd5b5061032f610dc7565b34801561055b57600080fd5b5061051e610dcc565b34801561057057600080fd5b50610579610dd2565b6040805161ffff9092168252519081900360200190f35b34801561059c57600080fd5b506105a5610dd7565b60408051918252519081900360200190f35b3480156105c357600080fd5b506105a5610de2565b3480156105d857600080fd5b5061051e610de8565b3480156105ed57600080fd5b5061051e6004803603602081101561060457600080fd5b5035610dee565b6107236004803603608081101561062157600080fd5b810190602081018135600160201b81111561063b57600080fd5b82018360208201111561064d57600080fd5b803590602001918460208302840111600160201b8311171561066e57600080fd5b919390929091602081019035600160201b81111561068b57600080fd5b82018360208201111561069d57600080fd5b803590602001918460208302840111600160201b831117156106be57600080fd5b919390929091602081019035600160201b8111156106db57600080fd5b8201836020820111156106ed57600080fd5b803590602001918460208302840111600160201b8311171561070e57600080fd5b91935091503567ffffffffffffffff16610e09565b604080519115158252519081900360200190f35b34801561074357600080fd5b5061051e6112d8565b34801561075857600080fd5b5061032f6112de565b34801561076d57600080fd5b506105a56112e3565b34801561078257600080fd5b5061051e6112e9565b34801561079757600080fd5b5061032f6112ef565b3480156107ac57600080fd5b50610313600480360360408110156107c357600080fd5b60ff8235169190810190604081016020820135600160201b8111156107e757600080fd5b8201836020820111156107f957600080fd5b803590602001918460018302840111600160201b8311171561081a57600080fd5b5090925090506112f4565b34801561083157600080fd5b506103136004803603606081101561084857600080fd5b508035906001600160a01b03602082013516906040013561143d565b34801561087057600080fd5b5061032f6114c3565b34801561088557600080fd5b506105a56114c8565b34801561089a57600080fd5b506105a5600480360360408110156108b157600080fd5b506001600160a01b0381351690602001356114d4565b3480156108d357600080fd5b5061051e6115f8565b3480156108e857600080fd5b5061051e6115fe565b3480156108fd57600080fd5b5061032f611604565b34801561091257600080fd5b506105a56004803603602081101561092957600080fd5b50356001600160a01b0316611609565b34801561094557600080fd5b5061072361161b565b34801561095a57600080fd5b5061032f611624565b6107236004803603608081101561097957600080fd5b5080356001600160a01b03908116916020810135909116906040810135906060013567ffffffffffffffff16611629565b3480156109b657600080fd5b5061035a611604565b3480156109cb57600080fd5b50610313600480360360408110156109e257600080fd5b810190602081018135600160201b8111156109fc57600080fd5b820183602082011115610a0e57600080fd5b803590602001918460018302840111600160201b83111715610a2f57600080fd5b919390929091602081019035600160201b811115610a4c57600080fd5b820183602082011115610a5e57600080fd5b803590602001918460018302840111600160201b83111715610a7f57600080fd5b509092509050611c9c565b348015610a9657600080fd5b506105a5611f0b565b348015610aab57600080fd5b5061031360048036036040811015610ac257600080fd5b50803590602001356001600160a01b0316611f11565b348015610ae457600080fd5b506105a5611f87565b348015610af957600080fd5b506105a560048036036020811015610b1057600080fd5b50356001600160a01b0316611f91565b348015610b2c57600080fd5b5061051e611fac565b348015610b4157600080fd5b5061031360048036036040811015610b5857600080fd5b60ff8235169190810190604081016020820135600160201b811115610b7c57600080fd5b820183602082011115610b8e57600080fd5b803590602001918460018302840111600160201b83111715610baf57600080fd5b509092509050611fb2565b348015610bc657600080fd5b5061051e612082565b348015610bdb57600080fd5b50610313612088565b348015610bf057600080fd5b5061032f6120fc565b348015610c0557600080fd5b5061032f612101565b348015610c1a57600080fd5b5061051e612106565b348015610c2f57600080fd5b506103f860048036036020811015610c4657600080fd5b50356001600160a01b031661210c565b348015610c6257600080fd5b5061051e612233565b600881565b606481565b60005460609060ff16610cbd576040805162461bcd60e51b8152602060048201526019602482015260008051602061445e833981519152604482015290519081900360640190fd5b3361200014610cfd5760405162461bcd60e51b815260040180806020018281038252602f8152602001806143df602f913960400191505060405180910390fd5b60ff841660021415610d4f57610d4883838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061223992505050565b9050610d9c565b6040805162461bcd60e51b815260206004820152601860248201527f756e7265636f676e697a65642073796e207061636b6167650000000000000000604482015290519081900360640190fd5b9392505050565b6020818101516000908152600490915260409020546001600160a01b03165b919050565b600181565b61100181565b606081565b662386f26fc1000081565b60015490565b61200081565b6000908152600460205260409020546001600160a01b031690565b6000805460ff16610e4f576040805162461bcd60e51b8152602060048201526019602482015260008051602061445e833981519152604482015290519081900360640190fd5b868514610e8d5760405162461bcd60e51b815260040180806020018281038252603b8152602001806143a4603b913960400191505060405180910390fd5b868314610ecb5760405162461bcd60e51b815260040180806020018281038252603f8152602001806142b6603f913960400191505060405180910390fd5b426078018267ffffffffffffffff161015610f175760405162461bcd60e51b81526004018080602001828103825260248152602001806141bb6024913960400191505060405180910390fd5b846000805b82811015610f5357610f49898983818110610f3357fe5b905060200201358361235d90919063ffffffff16565b9150600101610f1c565b50606082604051908082528060200260200182016040528015610f80578160200160208202803683370190505b50905060005b838160ff161015611056576402540be4008a8a8360ff16818110610fa657fe5b9050602002013581610fb457fe5b0615611007576040805162461bcd60e51b815260206004820152601760248201527f696e76616c6964207472616e7366657220616d6f756e74000000000000000000604482015290519081900360640190fd5b6110346402540be4008b8b8460ff1681811061101f57fe5b905060200201356123b790919063ffffffff16565b828260ff168151811061104357fe5b6020908102919091010152600101610f86565b5060015461107b9061106e908563ffffffff6123f916565b839063ffffffff61235d16565b34146110b85760405162461bcd60e51b815260040180806020018281038252604c815260200180614245604c913960600191505060405180910390fd5b6110c0614014565b6040518060c001604052806221272160e91b60001b815260200160006001600160a01b031681526020018381526020018d8d808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208b810282810182019093528b82529283019290918c918c91829185019084908082843760009201919091525050509082525067ffffffffffffffff8816602090910152905061200063f7a251d7600361118484612452565b6111ae6402540be4006111a28a6001546123f990919063ffffffff16565b9063ffffffff6123b716565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561120c5781810151838201526020016111f4565b50505050905090810190601f1680156112395780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561125a57600080fd5b505af115801561126e573d6000803e3d6000fd5b505050506040513d602081101561128457600080fd5b5050604080516000815233602082015280820185905290517fe9750a449d7c7d8f872b7ee10d75b95a948bc425b3c2d52052587665742c81ec9181900360600190a15060019b9a5050505050505050505050565b61100581565b600281565b60015481565b61100881565b600b81565b60005460ff16611339576040805162461bcd60e51b8152602060048201526019602482015260008051602061445e833981519152604482015290519081900360640190fd5b33612000146113795760405162461bcd60e51b815260040180806020018281038252602f8152602001806143df602f913960400191505060405180910390fd5b60ff8316600314156113c9576113c482828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061270d92505050565b611438565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a15b505050565b336110081461147d5760405162461bcd60e51b815260040180806020018281038252602381526020018061440e6023913960400191505060405180910390fd5b600083815260046020908152604080832080546001600160a01b039096166001600160a01b03199096168617905593825260038152838220949094556002909352912055565b600981565b677ce66c50e284000081565b6000805460ff1661151a576040805162461bcd60e51b8152602060048201526019602482015260008051602061445e833981519152604482015290519081900360640190fd5b336110051461155a5760405162461bcd60e51b815260040180806020018281038252602f81526020018061412e602f913960400191505060405180910390fd5b6000478310611569574761156b565b825b905080156115ef576040516001600160a01b0385169082156108fc029083906000818181858888f193505050501580156115a9573d6000803e3d6000fd5b50604080516001600160a01b03861681526020810183905281517ff8b71c64315fc33b2ead2adfa487955065152a8ac33d9d5193aafd7f45dc15a0929181900390910190a15b90505b92915050565b61100781565b61100681565b600081565b60026020526000908152604090205481565b60005460ff1681565b600381565b6000805460ff1661166f576040805162461bcd60e51b8152602060048201526019602482015260008051602061445e833981519152604482015290519081900360640190fd5b426078018267ffffffffffffffff1610156116bb5760405162461bcd60e51b81526004018080602001828103825260248152602001806141bb6024913960400191505060405180910390fd5b6000806001600160a01b038716611786576402540be4008506156117105760405162461bcd60e51b815260040180806020018281038252603c8152602001806142f5603c913960400191505060405180910390fd5b60015461172490869063ffffffff61235d16565b34146117615760405162461bcd60e51b815260040180806020018281038252604c815260200180614245604c913960600191505060405180910390fd5b611776856402540be40063ffffffff6123b716565b6221272160e91b92509050611a25565b6001600160a01b0387166000908152600360205260409020549150816117dd5760405162461bcd60e51b81526004018080602001828103825260318152602001806142146031913960400191505060405180910390fd5b600154341461181d5760405162461bcd60e51b815260040180806020018281038252602d815260200180614431602d913960400191505060405180910390fd5b6001600160a01b03871660009081526002602052604090205460088111158061186557506008811180156118655750611863866007198301600a0a63ffffffff61276916565b155b6118a05760405162461bcd60e51b815260040180806020018281038252603c8152602001806142f5603c913960400191505060405180910390fd5b6118aa86826127ab565b91506118b5836127eb565b156118fd576305f5e1008210156118fd5760405162461bcd60e51b815260040180806020018281038252603a81526020018061415d603a913960400191505060405180910390fd5b600881101580611917575060088110801561191757508582115b6119525760405162461bcd60e51b81526004018080602001828103825260258152602001806142916025913960400191505060405180910390fd5b677ce66c50e28400008211156119995760405162461bcd60e51b81526004018080602001828103825260358152602001806141df6035913960400191505060405180910390fd5b604080516323b872dd60e01b81523360048201523060248201526044810188905290516001600160a01b038a16916323b872dd9160648083019260209291908290030181600087803b1580156119ee57600080fd5b505af1158015611a02573d6000803e3d6000fd5b505050506040513d6020811015611a1857600080fd5b5051611a2357600080fd5b505b611a2d614014565b6040805160c0810182528481526001600160a01b038a166020820152815160018082528184018452919283019181602001602082028036833750505081526040805160018082528183019092526020928301929091908083019080368337505050815260408051600180825281830190925260209283019290919080830190803683370190505081526020018667ffffffffffffffff168152509050818160400151600081518110611adb57fe5b602002602001018181525050868160600151600081518110611af957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050338160800151600081518110611b2b57fe5b6001600160a01b039092166020928302919091019091015261200063f7a251d76003611b5684612452565b600154611b6e906402540be40063ffffffff6123b716565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611bcc578181015183820152602001611bb4565b50505050905090810190601f168015611bf95780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015611c1a57600080fd5b505af1158015611c2e573d6000803e3d6000fd5b505050506040513d6020811015611c4457600080fd5b5050604080516001600160a01b038a16815233602082015280820188905290517fe9750a449d7c7d8f872b7ee10d75b95a948bc425b3c2d52052587665742c81ec9181900360600190a1506001979650505050505050565b3361100714611cdc5760405162461bcd60e51b815260040180806020018281038252602e815260200180614352602e913960400191505060405180910390fd5b60208114611d31576040805162461bcd60e51b815260206004820152601b60248201527f65787065637465642076616c7565206c656e6774682069732033320000000000604482015290519081900360640190fd5b606084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8801819004810282018101909252868152939450606093925086915085908190840183828082843760009201919091525050505060208301519091506772656c617946656560c01b811415611e39576020820151670de0b6b3a76400008111158015611de057506402540be4008106155b611e31576040805162461bcd60e51b815260206004820152601960248201527f7468652072656c6179466565206f7574206f662072616e676500000000000000604482015290519081900360640190fd5b600155611e76565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a878787876040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050505050565b61c35081565b3361100814611f515760405162461bcd60e51b815260040180806020018281038252602381526020018061440e6023913960400191505060405180910390fd5b600091825260046020908152604080842080546001600160a01b03191690556001600160a01b0392909216835260039052812055565b6221272160e91b81565b6001600160a01b031660009081526003602052604090205490565b61100281565b60005460ff16611ff7576040805162461bcd60e51b8152602060048201526019602482015260008051602061445e833981519152604482015290519081900360640190fd5b33612000146120375760405162461bcd60e51b815260040180806020018281038252602f8152602001806143df602f913960400191505060405180910390fd5b60ff8316600314156113c9576113c482828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506128f192505050565b61100381565b60005460ff16156120e0576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b662386f26fc1000060019081556000805460ff19169091179055565b600481565b600581565b61100081565b6001600160a01b03811660009081526003602090815260409182902054825182815280840190935260609290918391906020820181803683375050506020810183905290506000805b60208160ff16101561219c57828160ff168151811061217057fe5b01602001516001600160f81b0319161561218f57600190910190612194565b61219c565b600101612155565b5060608160ff166040519080825280601f01601f1916602001820160405280156121cd576020820181803683370190505b50905060005b8260ff168160ff16101561222957838160ff16815181106121f057fe5b602001015160f81c60f81b828260ff168151811061220a57fe5b60200101906001600160f81b031916908160001a9053506001016121d3565b5095945050505050565b61100481565b6060612243614060565b600061224e846129ef565b91509150806122a4576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b60006122af83612b2e565b905063ffffffff811615612343576040808401516020808601516001600160a01b031660009081526002909152918220546122ea91906127ab565b90506122f4614095565b60405180608001604052808660000151815260200183815260200186608001516001600160a01b031681526020018463ffffffff16815250905061233781612e46565b95505050505050610dc2565b50506040805160008152602081019091529150610dc29050565b6000828201838110156115ef576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006115ef83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f22565b600082612408575060006115f2565b8282028284828161241557fe5b04146115ef5760405162461bcd60e51b81526004018080602001828103825260218152602001806143316021913960400191505060405180910390fd5b60408051600680825260e08201909252606091829190816020015b606081526020019060019003908161246d575050835190915061248f90612fc4565b8160008151811061249c57fe5b60200260200101819052506124bd83602001516001600160a01b0316612fd7565b816001815181106124ca57fe5b60200260200101819052506000836040015151905060608160405190808252806020026020018201604052801561251557816020015b60608152602001906001900390816125005790505b50905060005b82811015612562576125438660400151828151811061253657fe5b6020026020010151612fc4565b82828151811061254f57fe5b602090810291909101015260010161251b565b5061256c81612ffa565b8360028151811061257957fe5b60200260200101819052506060826040519080825280602002602001820160405280156125ba57816020015b60608152602001906001900390816125a55790505b50905060005b83811015612610576125f1876060015182815181106125db57fe5b60200260200101516001600160a01b0316612fd7565b8282815181106125fd57fe5b60209081029190910101526001016125c0565b5061261a81612ffa565b8460038151811061262757fe5b602002602001018190525060608360405190808252806020026020018201604052801561266857816020015b60608152602001906001900390816126535790505b50905060005b848110156126a857612689886080015182815181106125db57fe5b82828151811061269557fe5b602090810291909101015260010161266e565b506126b281612ffa565b856004815181106126bf57fe5b60200260200101819052506126e18760a0015167ffffffffffffffff16612fc4565b856005815181106126ee57fe5b602002602001018190525061270285612ffa565b979650505050505050565b6127156140bc565b600061272083613084565b91509150806127605760405162461bcd60e51b81526004018080602001828103825260248152602001806143806024913960400191505060405180910390fd5b6114388261324f565b60006115ef83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506136a0565b600060088211156127d4576127cd836007198401600a0a63ffffffff6123b716565b90506115f2565b6115ef836008849003600a0a63ffffffff6123f916565b604080516020808252818301909252600091606091906020820181803683375050506020810184905290506000805b60208160ff16101561286157828160ff168151811061283557fe5b01602001516001600160f81b0319161561285457600190910190612859565b612861565b60010161281a565b50600860ff8216101561287957600092505050610dc2565b816005820360ff168151811061288b57fe5b6020910101516001600160f81b031916602d60f81b146128b057600092505050610dc2565b816001820360ff16815181106128c257fe5b6020910101516001600160f81b031916604d60f81b146128e757600092505050610dc2565b5060019392505050565b6128f9614014565b600061290483613702565b91509150806129445760405162461bcd60e51b81526004018080602001828103825260248152602001806141976024913960400191505060405180910390fd5b61294c6140bc565b602080840180516001600160a01b0390811684526040808701518585015291511660009081526002909252812054905b8460400151518110156129cd576129aa8560400151828151811061299c57fe5b60200260200101518361397d565b856040015182815181106129ba57fe5b602090810291909101015260010161297c565b5060808401516040830152600560608301526129e88261324f565b5050505050565b6129f7614060565b6000612a01614060565b612a096140f3565b612a1a612a15866139b6565b6139db565b90506000805b612a2983613a25565b15612b215780612a4b57612a44612a3f84613a46565b613a94565b8452612b19565b8060011415612a7857612a65612a6084613a46565b613af4565b6001600160a01b03166020850152612b19565b8060021415612a9757612a8d612a3f84613a46565b6040850152612b19565b8060031415612abf57612aac612a6084613a46565b6001600160a01b03166060850152612b19565b8060041415612ae757612ad4612a6084613a46565b6001600160a01b03166080850152612b19565b8060051415612b1457612afc612a3f84613a46565b67ffffffffffffffff1660a085015260019150612b19565b612b21565b600101612a20565b5091935090915050915091565b60208101516000906001600160a01b0316612c30578160a0015167ffffffffffffffff16421115612b6157506001610dc2565b8160400151471015612b7557506003610dc2565b81606001516001600160a01b03166108fc83604001519081150290604051600060405180830381858888f19350505050612bb157506004610dc2565b7f471eb9cc1ffe55ffadf15b32595415eb9d80f22e761d24bd6dffc607e1284d5982602001518360600151846040015160405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a1506000610dc2565b8160a0015167ffffffffffffffff16421115612c4e57506001610dc2565b81516020808401516001600160a01b031660009081526003909152604090205414612c7b57506002610dc2565b602080830151604080516370a0823160e01b815230600482015290516000936001600160a01b03909316926370a082319261c3509260248083019392829003018187803b158015612ccb57600080fd5b5086fa158015612cdf573d6000803e3d6000fd5b50505050506040513d6020811015612cf657600080fd5b50516040840151909150811015612d11575060039050610dc2565b600083602001516001600160a01b031663a9059cbb61c350866060015187604001516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b158015612d8257600080fd5b5087f1158015612d96573d6000803e3d6000fd5b50505050506040513d6020811015612dad57600080fd5b505190508015612e3a577f471eb9cc1ffe55ffadf15b32595415eb9d80f22e761d24bd6dffc607e1284d5984602001518560600151866040015160405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a15060009150610dc29050565b5060059150610dc29050565b60408051600480825260a08201909252606091829190816020015b6060815260200190600190039081612e615750508351909150612e8390612fc4565b81600081518110612e9057fe5b6020026020010181905250612ea88360200151612fc4565b81600181518110612eb557fe5b6020026020010181905250612ed683604001516001600160a01b0316612fd7565b81600281518110612ee357fe5b6020026020010181905250612f01836060015163ffffffff16612fc4565b81600381518110612f0e57fe5b6020026020010181905250610d9c81612ffa565b60008183612fae5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f73578181015183820152602001612f5b565b50505050905090810190601f168015612fa05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612fba57fe5b0495945050505050565b60606115f2612fd283613b0e565b613bf4565b60408051600560a21b8318601482015260348101909152606090610d9c81613bf4565b606081516000141561301b5750604080516000815260208101909152610dc2565b60608260008151811061302a57fe5b602002602001015190506000600190505b835181101561306b576130618285838151811061305457fe5b6020026020010151613c46565b915060010161303b565b50610d9c61307e825160c060ff16613cc3565b82613c46565b61308c6140bc565b60006130966140bc565b61309e6140f3565b6130aa612a15866139b6565b90506000805b6130b983613a25565b15612b2157806130df576130cf612a6084613a46565b6001600160a01b03168452613247565b80600114156131805760606130fb6130f685613a46565b613dbb565b90508051604051908082528060200260200182016040528015613128578160200160208202803683370190505b50602086015260005b81518110156131795761315682828151811061314957fe5b6020026020010151613a94565b8660200151828151811061316657fe5b6020908102919091010152600101613131565b5050613247565b80600214156132225760606131976130f685613a46565b905080516040519080825280602002602001820160405280156131c4578160200160208202803683370190505b50604086015260005b8151811015613179576131f28282815181106131e557fe5b6020026020010151613af4565b8660400151828151811061320257fe5b6001600160a01b03909216602092830291909101909101526001016131cd565b8060031415612b1457613237612a3f84613a46565b63ffffffff166060850152600191505b6001016130b0565b80516001600160a01b03166134465760005b816020015151811015613440578160400151818151811061327e57fe5b60200260200101516001600160a01b03166108fc836020015183815181106132a257fe5b60200260200101519081150290604051600060405180830381858888f19350505050613382577f203f9f67a785f4f81be4d48b109aa0c498d1bc8097ecc2627063f480cc5fe73e8260000151836040015183815181106132fe57fe5b60200260200101518460200151848151811061331657fe5b6020026020010151856060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a1613438565b7fd468d4fa5e8fb4adc119b29a983fd0785e04af5cb8b7a3a69a47270c54b6901a8260000151836040015183815181106133b857fe5b6020026020010151846020015184815181106133d057fe5b6020026020010151856060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a15b600101613261565b5061369d565b60005b81602001515181101561369b57600082600001516001600160a01b031663a9059cbb61c3508560400151858151811061347e57fe5b60200260200101518660200151868151811061349657fe5b60200260200101516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b1580156134ed57600080fd5b5087f1158015613501573d6000803e3d6000fd5b50505050506040513d602081101561351857600080fd5b5051905080156135dc577fd468d4fa5e8fb4adc119b29a983fd0785e04af5cb8b7a3a69a47270c54b6901a83600001518460400151848151811061355857fe5b60200260200101518560200151858151811061357057fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a1613692565b7f203f9f67a785f4f81be4d48b109aa0c498d1bc8097ecc2627063f480cc5fe73e83600001518460400151848151811061361257fe5b60200260200101518560200151858151811061362a57fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a15b50600101613449565b505b50565b600081836136ef5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612f73578181015183820152602001612f5b565b508284816136f957fe5b06949350505050565b61370a614014565b6000613714614014565b61371c6140f3565b613728612a15866139b6565b90506000805b61373783613a25565b1561396f57806137545761374d612a3f84613a46565b8452613967565b806001141561377c57613769612a6084613a46565b6001600160a01b03166020850152613967565b806002141561380b5760606137936130f685613a46565b905080516040519080825280602002602001820160405280156137c0578160200160208202803683370190505b50604086015260005b8151811015613804576137e182828151811061314957fe5b866040015182815181106137f157fe5b60209081029190910101526001016137c9565b5050613967565b80600314156138a05760606138226130f685613a46565b9050805160405190808252806020026020018201604052801561384f578160200160208202803683370190505b50606086015260005b8151811015613804576138708282815181106131e557fe5b8660600151828151811061388057fe5b6001600160a01b0390921660209283029190910190910152600101613858565b80600414156139355760606138b76130f685613a46565b905080516040519080825280602002602001820160405280156138e4578160200160208202803683370190505b50608086015260005b8151811015613804576139058282815181106131e557fe5b8660800151828151811061391557fe5b6001600160a01b03909216602092830291909101909101526001016138ed565b80600514156139625761394a612a3f84613a46565b67ffffffffffffffff1660a085015260019150613967565b61396f565b60010161372e565b509195600195509350505050565b6000600882111561399f576127cd836007198401600a0a63ffffffff6123f916565b6115ef836008849003600a0a63ffffffff6123b716565b6139be614113565b506040805180820190915281518152602082810190820152919050565b6139e36140f3565b6139ec82613e8c565b6139f557600080fd5b6000613a048360200151613ebc565b60208085015160408051808201909152868152920190820152915050919050565b6000613a2f614113565b505080518051602091820151919092015191011190565b613a4e614113565b613a5782613a25565b613a6057600080fd5b60208201516000613a7082613f1f565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590613aa957508151602110155b613ab257600080fd5b6000613ac18360200151613ebc565b83516020808601518301805193945091849003929190831015613aeb57826020036101000a820491505b50949350505050565b8051600090601514613b0557600080fd5b6115f282613a94565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416613b5257506018613b76565b6fffffffffffffffffffffffffffffffff198416613b7257506010613b76565b5060005b6020811015613bac57818181518110613b8b57fe5b01602001516001600160f81b03191615613ba457613bac565b600101613b76565b60008160200390506060816040519080825280601f01601f191660200182016040528015613be1576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015613c265750607f60f81b82600081518110613c1457fe5b01602001516001600160f81b03191611155b15613c32575080610dc2565b6115f2613c448351608060ff16613cc3565b835b6060806040519050835180825260208201818101602087015b81831015613c77578051835260209283019201613c5f565b50855184518101855292509050808201602086015b81831015613ca4578051835260209283019201613c8c565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310613d13576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b60408051600180825281830190925260609160208201818036833701905050905060378411613d6d5782840160f81b81600081518110613d4f57fe5b60200101906001600160f81b031916908160001a90535090506115f2565b6060613d7885613b0e565b90508381510160370160f81b82600081518110613d9157fe5b60200101906001600160f81b031916908160001a905350613db28282613c46565b95945050505050565b6060613dc682613e8c565b613dcf57600080fd5b6000613dda83613fb8565b9050606081604051908082528060200260200182016040528015613e1857816020015b613e05614113565b815260200190600190039081613dfd5790505b5090506000613e2a8560200151613ebc565b60208601510190506000805b84811015613e8157613e4783613f1f565b9150604051806040016040528083815260200184815250848281518110613e6a57fe5b602090810291909101015291810191600101613e36565b509195945050505050565b8051600090613e9d57506000610dc2565b6020820151805160001a9060c08210156128e757600092505050610dc2565b8051600090811a6080811015613ed6576000915050610dc2565b60b8811080613ef1575060c08110801590613ef1575060f881105b15613f00576001915050610dc2565b60c0811015613f145760b519019050610dc2565b60f519019050610dc2565b80516000908190811a6080811015613f3a5760019150613fb1565b60b8811015613f4f57607e1981019150613fb1565b60c0811015613f7c5760b78103600185019450806020036101000a85510460018201810193505050613fb1565b60f8811015613f915760be1981019150613fb1565b60f78103600185019450806020036101000a855104600182018101935050505b5092915050565b8051600090613fc957506000610dc2565b60008090506000613fdd8460200151613ebc565b602085015185519181019250015b8082101561400b57613ffc82613f1f565b60019093019290910190613feb565b50909392505050565b6040518060c001604052806000801916815260200160006001600160a01b03168152602001606081526020016060815260200160608152602001600067ffffffffffffffff1681525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b604051806080016040528060006001600160a01b031681526020016060815260200160608152602001600063ffffffff1681525090565b6040518060400160405280614106614113565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe746865206d6573736167652073656e646572206d75737420626520696e63656e746976697a6520636f6e7472616374466f72206d696e69546f6b656e2c20746865207472616e7366657220616d6f756e74206d757374206e6f74206265206c657373207468616e2031756e7265636f676e697a6564207472616e736665724f75742073796e207061636b61676565787069726554696d65206d7573742062652074776f206d696e75746573206c61746572616d6f756e7420697320746f6f206c617267652c20657863656564206d6178696d756d206265703220746f6b656e20616d6f756e7474686520636f6e747261637420686173206e6f74206265656e20626f756e6420746f20616e79206265703220746f6b656e726563656976656420424e4220616d6f756e7420646f65736e277420657175616c20746f207468652073756d206f66207472616e7366657220616d6f756e7420616e642072656c6179466565616d6f756e7420697320746f6f206c617267652c2075696e74323536206f766572666c6f774c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620726566756e644164647273696e76616c6964207472616e7366657220616d6f756e743a20707265636973696f6e206c6f737320696e20616d6f756e7420636f6e76657273696f6e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374756e7265636f676e697a6564207472616e736665724f75742061636b207061636b6167654c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620616d6f756e7473746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374746865206d73672073656e646572206d75737420626520746f6b656e4d616e61676572726563656976656420424e4220616d6f756e7420646f65736e277420657175616c20746f2072656c617946656574686520636f6e7472616374206e6f7420696e69742079657400000000000000a264697066735822122075571e468092a56c19ac338a89d5ee4f6f594d1cf86a34278db226d80b1d43ce64736f6c63430006040033" }, "0x0000000000000000000000000000000000001005": { "balance": "0x0", @@ -61,7 +61,7 @@ }, "0x0000000000000000000000000000000000001008": { "balance": "0x0", - "code": "0x6080604052600436106102045760003560e01c80637d078e1311610118578063c8509d81116100a0578063ece9d81e1161006f578063ece9d81e146104d5578063f9a2bbc71461081c578063fc3e5908146106f3578063fd6a687914610831578063fe3a2af5146103ce57610204565b8063c8509d811461066c578063d117a11014610786578063dc6f5e90146106f3578063dc927faf1461080757610204565b80639dc09262116100e75780639dc092621461071d578063a1a11bf514610732578063a78abc1614610747578063ab51bb961461075c578063c81b16621461077157610204565b80637d078e131461035c578063831d65d11461066c57806395b9ad26146106f357806396713da91461070857610204565b80634bf6c8821161019b57806370fd5bad1161016a57806370fd5bad146104d557806372c4e086146104ea57806375d47a0a1461058e57806377d9dae8146105a35780637942fd051461065757610204565b80634bf6c8821461020957806351e80672146103e35780636b3f1307146103f85780636e47b482146104c057610204565b80633dffc387116101d75780633dffc3871461035c57806343756e5c14610371578063493279b1146103a25780634a688818146103ce57610204565b8063077b8f35146102095780630bee7a67146102345780631182b8751461026257806323996b531461035c575b600080fd5b34801561021557600080fd5b5061021e610846565b6040805160ff9092168252519081900360200190f35b34801561024057600080fd5b5061024961084b565b6040805163ffffffff9092168252519081900360200190f35b34801561026e57600080fd5b506102e76004803603604081101561028557600080fd5b60ff8235169190810190604081016020820135600160201b8111156102a957600080fd5b8201836020820111156102bb57600080fd5b803590602001918460018302840111600160201b831117156102dc57600080fd5b509092509050610850565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610321578181015183820152602001610309565b50505050905090810190601f16801561034e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036857600080fd5b5061021e6108d9565b34801561037d57600080fd5b506103866108de565b604080516001600160a01b039092168252519081900360200190f35b3480156103ae57600080fd5b506103b76108e4565b6040805161ffff9092168252519081900360200190f35b3480156103da57600080fd5b5061021e6108e9565b3480156103ef57600080fd5b506103866108ee565b6104ac6004803603604081101561040e57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561043857600080fd5b82018360208201111561044a57600080fd5b803590602001918460018302840111600160201b8311171561046b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506108f4945050505050565b604080519115158252519081900360200190f35b3480156104cc57600080fd5b506103866115cd565b3480156104e157600080fd5b5061021e6115d3565b6104ac6004803603602081101561050057600080fd5b810190602081018135600160201b81111561051a57600080fd5b82018360208201111561052c57600080fd5b803590602001918460018302840111600160201b8311171561054d57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506115d8945050505050565b34801561059a57600080fd5b5061038661196d565b6104ac600480360360408110156105b957600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156105e357600080fd5b8201836020820111156105f557600080fd5b803590602001918460018302840111600160201b8311171561061657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611973945050505050565b34801561066357600080fd5b5061021e611dc3565b34801561067857600080fd5b506106f16004803603604081101561068f57600080fd5b60ff8235169190810190604081016020820135600160201b8111156106b357600080fd5b8201836020820111156106c557600080fd5b803590602001918460018302840111600160201b831117156106e657600080fd5b509092509050611dc8565b005b3480156106ff57600080fd5b5061021e611e7b565b34801561071457600080fd5b5061021e611e80565b34801561072957600080fd5b50610386611e85565b34801561073e57600080fd5b50610386611e8b565b34801561075357600080fd5b506104ac611e91565b34801561076857600080fd5b506102496108e9565b34801561077d57600080fd5b50610386611e9a565b34801561079257600080fd5b506107b0600480360360208110156107a957600080fd5b5035611ea0565b6040805160ff988916815260208101979097526001600160a01b03909516868601526060860193909352608085019190915290931660a083015267ffffffffffffffff90921660c082015290519081900360e00190f35b34801561081357600080fd5b50610386611ef8565b34801561082857600080fd5b50610386611efe565b34801561083d57600080fd5b50610386611f04565b600881565b606481565b606033612000146108925760405162461bcd60e51b815260040180806020018281038252602f815260200180612d1f602f913960400191505060405180910390fd5b6108d183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f0a92505050565b949350505050565b600181565b61100181565b606081565b600081565b61200081565b6000806109008361219d565b905061090a612bc5565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a084015261010090910467ffffffffffffffff1660c08301526109d0576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b60006109ed826080015183606001516121a490919063ffffffff16565b905081604001516001600160a01b0316866001600160a01b031614610a435760405162461bcd60e51b8152600401808060200182810382526045815260200180612c766045913960600191505060405180910390fd5b336001600160a01b0316866001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b158015610a8657600080fd5b505afa158015610a9a573d6000803e3d6000fd5b505050506040513d6020811015610ab057600080fd5b50516001600160a01b031614610af75760405162461bcd60e51b815260040180806020018281038252602e815260200180612cbb602e913960400191505060405180910390fd5b60408051636eb1769f60e11b8152336004820152306024820152905182916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b158015610b4657600080fd5b505afa158015610b5a573d6000803e3d6000fd5b505050506040513d6020811015610b7057600080fd5b505114610bae5760405162461bcd60e51b8152600401808060200182810382526036815260200180612ce96036913960400191505060405180910390fd5b60006110046001600160a01b0316635170639c6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bed57600080fd5b505af1158015610c01573d6000803e3d6000fd5b505050506040513d6020811015610c1757600080fd5b50519050348114610c595760405162461bcd60e51b8152600401808060200182810382526023815260200180612c536023913960400191505060405180910390fd5b428360c0015167ffffffffffffffff161015610e1c5760008481526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff19169055610cc9612c01565b50604080518082018252600181526020810186905290516110049083156108fc029084906000818181858888f19350505050158015610d0c573d6000803e3d6000fd5b5061200063f7a251d76001610d20846121ed565b610d35866402540be40063ffffffff61227716565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015610d93578181015183820152602001610d7b565b50505050905090810190601f168015610dc05780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015610de157600080fd5b505af1158015610df5573d6000803e3d6000fd5b505050506040513d6020811015610e0b57600080fd5b50600096506115c795505050505050565b6000876001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610e5757600080fd5b505afa158015610e6b573d6000803e3d6000fd5b505050506040513d6020811015610e8157600080fd5b5051604080516395d89b4160e01b815290519192506060916001600160a01b038b16916395d89b41916004808301926000929190829003018186803b158015610ec957600080fd5b505afa158015610edd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610f0657600080fd5b8101908080516040519392919084600160201b821115610f2557600080fd5b908301906020820185811115610f3a57600080fd5b8251600160201b811182820188101715610f5357600080fd5b82525081516020918201929091019080838360005b83811015610f80578181015183820152602001610f68565b50505050905090810190601f168015610fad5780820380516001836020036101000a031916815260200191505b506040525050509050610fc081876122b9565b15806110455750602080860151604080516359b9278960e01b8152600481019290925251600092611004926359b92789926024808301939282900301818787803b15801561100d57600080fd5b505af1158015611021573d6000803e3d6000fd5b505050506040513d602081101561103757600080fd5b50516001600160a01b031614155b806110dc57506000801b6110046001600160a01b031663bd46646187604001516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156110ad57600080fd5b505af11580156110c1573d6000803e3d6000fd5b505050506040513d60208110156110d757600080fd5b505114155b806111535750846060015185604001516001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561112457600080fd5b505afa158015611138573d6000803e3d6000fd5b505050506040513d602081101561114e57600080fd5b505114155b8061116557508460a0015160ff168214155b156113195760008681526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff191690556111c4612c01565b50604080518082018252600281526020810188905290516110049085156108fc029086906000818181858888f19350505050158015611207573d6000803e3d6000fd5b5061200063f7a251d7600161121b846121ed565b611230886402540be40063ffffffff61227716565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561128e578181015183820152602001611276565b50505050905090810190601f1680156112bb5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b1580156112dc57600080fd5b505af11580156112f0573d6000803e3d6000fd5b505050506040513d602081101561130657600080fd5b50600098506115c7975050505050505050565b604080516323b872dd60e01b815233600482015261100460248201526044810186905290516001600160a01b038b16916323b872dd9160648083019260209291908290030181600087803b15801561137057600080fd5b505af1158015611384573d6000803e3d6000fd5b505050506040513d602081101561139a57600080fd5b5050602085015160408087015160a088015182516323bfccdb60e21b815260048101949094526001600160a01b03909116602484015260ff1660448301525161100491638eff336c91606480830192600092919082900301818387803b15801561140357600080fd5b505af1158015611417573d6000803e3d6000fd5b50505060008781526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff1916905550611475612c01565b50604080518082018252600080825260208201899052915190916110049186156108fc0291879190818181858888f193505050501580156114ba573d6000803e3d6000fd5b5061200063f7a251d760016114ce846121ed565b6114e3886402540be40063ffffffff61227716565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611541578181015183820152602001611529565b50505050905090810190601f16801561156e5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561158f57600080fd5b505af11580156115a3573d6000803e3d6000fd5b505050506040513d60208110156115b957600080fd5b506001985050505050505050505b92915050565b61100581565b600281565b6000806115e48361219d565b90506115ee612bc5565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a084015261010090910467ffffffffffffffff1660c08301526116b4576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b428160c0015167ffffffffffffffff1610611716576040805162461bcd60e51b815260206004820152601b60248201527f62696e642072657175657374206973206e6f7420657870697265640000000000604482015290519081900360640190fd5b60006110046001600160a01b0316635170639c6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561175557600080fd5b505af1158015611769573d6000803e3d6000fd5b505050506040513d602081101561177f57600080fd5b505190503481146117c15760405162461bcd60e51b8152600401808060200182810382526023815260200180612c536023913960400191505060405180910390fd5b60008381526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff1916905561181b612c01565b50604080518082018252600181526020810185905290516110049083156108fc029084906000818181858888f1935050505015801561185e573d6000803e3d6000fd5b5061200063f7a251d76001611872846121ed565b611887866402540be40063ffffffff61227716565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156118e55781810151838201526020016118cd565b50505050905090810190601f1680156119125780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561193357600080fd5b505af1158015611947573d6000803e3d6000fd5b505050506040513d602081101561195d57600080fd5b506001955050505050505b919050565b61100881565b60008061197f8361219d565b9050611989612bc5565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a084015261010090910467ffffffffffffffff1660c0830152611a4f576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b80604001516001600160a01b0316856001600160a01b031614611aa35760405162461bcd60e51b8152600401808060200182810382526045815260200180612c766045913960600191505060405180910390fd5b336001600160a01b0316856001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b158015611ae657600080fd5b505afa158015611afa573d6000803e3d6000fd5b505050506040513d6020811015611b1057600080fd5b50516001600160a01b031614611b6d576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c79206265703265206f776e65722063616e2072656a6563740000000000604482015290519081900360640190fd5b60006110046001600160a01b0316635170639c6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611bac57600080fd5b505af1158015611bc0573d6000803e3d6000fd5b505050506040513d6020811015611bd657600080fd5b50519050348114611c185760405162461bcd60e51b8152600401808060200182810382526023815260200180612c536023913960400191505060405180910390fd5b60008381526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff19169055611c72612c01565b50604080518082018252600381526020810185905290516110049083156108fc029084906000818181858888f19350505050158015611cb5573d6000803e3d6000fd5b5061200063f7a251d76001611cc9846121ed565b611cde866402540be40063ffffffff61227716565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611d3c578181015183820152602001611d24565b50505050905090810190601f168015611d695780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015611d8a57600080fd5b505af1158015611d9e573d6000803e3d6000fd5b505050506040513d6020811015611db457600080fd5b50600198975050505050505050565b600b81565b3361200014611e085760405162461bcd60e51b815260040180806020018281038252602f815260200180612d1f602f913960400191505060405180910390fd5b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b600381565b600981565b61100781565b61100681565b60005460ff1681565b61100281565b600160208190526000918252604090912080549181015460028201546003830154600484015460059094015460ff9586169593946001600160a01b0390931693919291811690610100900467ffffffffffffffff1687565b61100381565b61100081565b61100481565b6060611f14612bc5565b6000611f1f846123a1565b9150915080611f75576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b815160ff16612029576020828101805160009081526001928390526040908190208551815460ff1990811660ff928316178355935194820194909455908501516002820180546001600160a01b0319166001600160a01b03909216919091179055606085015160038201556080850151600482015560a08501516005909101805460c08701519316919093161768ffffffffffffffff00191661010067ffffffffffffffff90921691909102179055612182565b815160ff16600114156121355760006110046001600160a01b03166359b9278984602001516040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561208457600080fd5b505af1158015612098573d6000803e3d6000fd5b505050506040513d60208110156120ae57600080fd5b505190506001600160a01b0381161561212f5760208301516040805163b99328c560e01b815260048101929092526001600160a01b0383166024830152516110049163b99328c591604480830192600092919082900301818387803b15801561211657600080fd5b505af115801561212a573d6000803e3d6000fd5b505050505b50612182565b6040805162461bcd60e51b815260206004820152601960248201527f756e7265636f676e697a65642062696e64207061636b61676500000000000000604482015290519081900360640190fd5b60408051600080825260208201909252905b50949350505050565b6020015190565b60006121e683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124f3565b9392505050565b6040805160028082526060828101909352829190816020015b6060815260200190600190039081612206575050835190915061222e9063ffffffff1661258a565b8160008151811061223b57fe5b6020026020010181905250612256836020015160001c61258a565b8160018151811061226357fe5b60200260200101819052506121e68161259d565b60006121e683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612627565b81516000908390600810806122cf575080516003115b156122de5760009150506115c7565b6040805160208082528183019092526060916020820181803683370190505090508360208201528082518151811061231257fe5b6020910101516001600160f81b031916602d60f81b14612337576000925050506115c7565b600160005b83518110156123975782818151811061235157fe5b602001015160f81c60f81b6001600160f81b03191684828151811061237257fe5b01602001516001600160f81b0319161461238f5760009150612397565b60010161233c565b5095945050505050565b6123a9612bc5565b60006123b3612bc5565b6123bb612c18565b6123cc6123c78661268c565b6126b1565b90506000805b6123db836126fb565b156124e65780612400576123f66123f18461271c565b61276a565b60ff1684526124de565b806001141561241f576124156123f18461271c565b60208501526124de565b806002141561244c576124396124348461271c565b6127c8565b6001600160a01b031660408501526124de565b806003141561246b576124616123f18461271c565b60608501526124de565b806004141561248a576124806123f18461271c565b60808501526124de565b80600514156124ac5761249f6123f18461271c565b60ff1660a08501526124de565b80600614156124d9576124c16123f18461271c565b67ffffffffffffffff1660c0850152600191506124de565b6124e6565b6001016123d2565b5091935090915050915091565b600081848411156125825760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561254757818101518382015260200161252f565b50505050905090810190601f1680156125745780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60606115c7612598836127e2565b6128c8565b60608151600014156125be5750604080516000815260208101909152611968565b6060826000815181106125cd57fe5b602002602001015190506000600190505b835181101561260e57612604828583815181106125f757fe5b602002602001015161291a565b91506001016125de565b506121e6612621825160c060ff16612997565b8261291a565b600081836126765760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561254757818101518382015260200161252f565b50600083858161268257fe5b0495945050505050565b612694612c38565b506040805180820190915281518152602082810190820152919050565b6126b9612c18565b6126c282612a8f565b6126cb57600080fd5b60006126da8360200151612ac9565b60208085015160408051808201909152868152920190820152915050919050565b6000612705612c38565b505080518051602091820151919092015191011190565b612724612c38565b61272d826126fb565b61273657600080fd5b6020820151600061274682612b2c565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061277f57508151602110155b61278857600080fd5b60006127978360200151612ac9565b8351602080860151830180519394509184900392919083101561219457506020919091036101000a90049392505050565b80516000906015146127d957600080fd5b6115c78261276a565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166128265750601861284a565b6fffffffffffffffffffffffffffffffff1984166128465750601061284a565b5060005b60208110156128805781818151811061285f57fe5b01602001516001600160f81b0319161561287857612880565b60010161284a565b60008160200390506060816040519080825280601f01601f1916602001820160405280156128b5576020820181803683370190505b5080830196909652508452509192915050565b6060815160011480156128fa5750607f60f81b826000815181106128e857fe5b01602001516001600160f81b03191611155b15612906575080611968565b6115c76129188351608060ff16612997565b835b6060806040519050835180825260208201818101602087015b8183101561294b578051835260209283019201612933565b50855184518101855292509050808201602086015b81831015612978578051835260209283019201612960565b508651929092011591909101601f01601f191660405250905092915050565b60606801000000000000000083106129e7576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b60408051600180825281830190925260609160208201818036833701905050905060378411612a415782840160f81b81600081518110612a2357fe5b60200101906001600160f81b031916908160001a90535090506115c7565b6060612a4c856127e2565b90508381510160370160f81b82600081518110612a6557fe5b60200101906001600160f81b031916908160001a905350612a86828261291a565b95945050505050565b8051600090612aa057506000611968565b6020820151805160001a9060c0821015612abf57600092505050611968565b5060019392505050565b8051600090811a6080811015612ae3576000915050611968565b60b8811080612afe575060c08110801590612afe575060f881105b15612b0d576001915050611968565b60c0811015612b215760b519019050611968565b60f519019050611968565b80516000908190811a6080811015612b475760019150612bbe565b60b8811015612b5c57607e1981019150612bbe565b60c0811015612b895760b78103600185019450806020036101000a85510460018201810193505050612bbe565b60f8811015612b9e5760be1981019150612bbe565b60f78103600185019450806020036101000a855104600182018101935050505b5092915050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b604080518082019091526000808252602082015290565b6040518060400160405280612c2b612c38565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe6d73672e76616c756520646f65736e277420657175616c20746f2072656c6179466565636f6e74616374206164647265737320646f65736e277420657175616c20746f2074686520636f6e7472616374206164647265737320696e2062696e6420726571756573746f6e6c79206265703265206f776e65722063616e20617070726f766520746869732062696e642072657175657374616c6c6f77616e636520646f65736e277420657175616c20746f2028746f74616c537570706c79202d207065676779416d6f756e7429746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374a2646970667358221220cdf56f7e89d798810bddda96bfaff19e46193883b360d4b847a1438fe9cdb09764736f6c63430006040033" + "code": "0x6080604052600436106102255760003560e01c806377d9dae811610123578063ab51bb96116100ab578063dc927faf1161006f578063dc927faf14610867578063f9a2bbc71461087c578063fc3e590814610392578063fd6a687914610891578063fe3a2af51461041957610225565b8063ab51bb96146107bc578063c81b1662146107d1578063c8509d81146106cc578063d117a110146107e6578063dc6f5e901461039257610225565b806395b9ad26116100f257806395b9ad261461075357806396713da9146107685780639dc092621461077d578063a1a11bf514610792578063a78abc16146107a757610225565b806377d9dae8146106035780637942fd05146106b75780637d078e13146103a7578063831d65d1146106cc57610225565b80634a688818116101b15780636b3f1307116101755780636b3f13071461046d5780636e47b4821461053557806370fd5bad1461045857806372c4e0861461054a57806375d47a0a146105ee57610225565b80634a688818146104195780634bc81c001461042e5780634bf6c8821461022a57806351e80672146104435780635f558f861461045857610225565b80631f91600b116101f85780631f91600b1461039257806323996b53146103a75780633dffc387146103a757806343756e5c146103bc578063493279b1146103ed57610225565b8063077b8f351461022a5780630bee7a67146102555780630f212b1b146102835780631182b87514610298575b600080fd5b34801561023657600080fd5b5061023f6108a6565b6040805160ff9092168252519081900360200190f35b34801561026157600080fd5b5061026a6108ab565b6040805163ffffffff9092168252519081900360200190f35b34801561028f57600080fd5b5061023f6108b0565b3480156102a457600080fd5b5061031d600480360360408110156102bb57600080fd5b60ff8235169190810190604081016020820135600160201b8111156102df57600080fd5b8201836020820111156102f157600080fd5b803590602001918460018302840111600160201b8311171561031257600080fd5b5090925090506108b5565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561035757818101518382015260200161033f565b50505050905090810190601f1680156103845780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561039e57600080fd5b5061023f61093e565b3480156103b357600080fd5b5061023f610943565b3480156103c857600080fd5b506103d1610948565b604080516001600160a01b039092168252519081900360200190f35b3480156103f957600080fd5b5061040261094e565b6040805161ffff9092168252519081900360200190f35b34801561042557600080fd5b5061023f610953565b34801561043a57600080fd5b5061023f610958565b34801561044f57600080fd5b506103d161095d565b34801561046457600080fd5b5061023f610963565b6105216004803603604081101561048357600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156104ad57600080fd5b8201836020820111156104bf57600080fd5b803590602001918460018302840111600160201b831117156104e057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610968945050505050565b604080519115158252519081900360200190f35b34801561054157600080fd5b506103d161130e565b6105216004803603602081101561056057600080fd5b810190602081018135600160201b81111561057a57600080fd5b82018360208201111561058c57600080fd5b803590602001918460018302840111600160201b831117156105ad57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611314945050505050565b3480156105fa57600080fd5b506103d16116a7565b6105216004803603604081101561061957600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561064357600080fd5b82018360208201111561065557600080fd5b803590602001918460018302840111600160201b8311171561067657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506116ad945050505050565b3480156106c357600080fd5b5061023f611afb565b3480156106d857600080fd5b50610751600480360360408110156106ef57600080fd5b60ff8235169190810190604081016020820135600160201b81111561071357600080fd5b82018360208201111561072557600080fd5b803590602001918460018302840111600160201b8311171561074657600080fd5b509092509050611b00565b005b34801561075f57600080fd5b5061023f611bb3565b34801561077457600080fd5b5061023f611bb8565b34801561078957600080fd5b506103d1611bbd565b34801561079e57600080fd5b506103d1611bc3565b3480156107b357600080fd5b50610521611bc9565b3480156107c857600080fd5b5061026a610953565b3480156107dd57600080fd5b506103d1611bd2565b3480156107f257600080fd5b506108106004803603602081101561080957600080fd5b5035611bd8565b6040805160ff988916815260208101979097526001600160a01b03909516868601526060860193909352608085019190915290931660a083015267ffffffffffffffff90921660c082015290519081900360e00190f35b34801561087357600080fd5b506103d1611c30565b34801561088857600080fd5b506103d1611c36565b34801561089d57600080fd5b506103d1611c3c565b600881565b606481565b600581565b606033612000146108f75760405162461bcd60e51b815260040180806020018281038252602f815260200180612dd4602f913960400191505060405180910390fd5b61093683838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4292505050565b949350505050565b600381565b600181565b61100181565b606081565b600081565b600481565b61200081565b600281565b60008061097483611ed3565b905061097e612c7a565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a084015261010090910467ffffffffffffffff1660c0830152610a44576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b6000610a6182608001518360600151611eda90919063ffffffff16565b905081604001516001600160a01b0316866001600160a01b031614610ab75760405162461bcd60e51b8152600401808060200182810382526045815260200180612d2b6045913960600191505060405180910390fd5b336001600160a01b0316866001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b158015610afa57600080fd5b505afa158015610b0e573d6000803e3d6000fd5b505050506040513d6020811015610b2457600080fd5b50516001600160a01b031614610b6b5760405162461bcd60e51b815260040180806020018281038252602e815260200180612d70602e913960400191505060405180910390fd5b60408051636eb1769f60e11b8152336004820152306024820152905182916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b158015610bba57600080fd5b505afa158015610bce573d6000803e3d6000fd5b505050506040513d6020811015610be457600080fd5b505114610c225760405162461bcd60e51b8152600401808060200182810382526036815260200180612d9e6036913960400191505060405180910390fd5b60006110046001600160a01b0316635170639c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c5f57600080fd5b505afa158015610c73573d6000803e3d6000fd5b505050506040513d6020811015610c8957600080fd5b50519050348114610ccb5760405162461bcd60e51b8152600401808060200182810382526023815260200180612d086023913960400191505060405180910390fd5b428360c0015167ffffffffffffffff161015610e8e5760008481526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff19169055610d3b612cb6565b50604080518082018252600181526020810186905290516110049083156108fc029084906000818181858888f19350505050158015610d7e573d6000803e3d6000fd5b5061200063f7a251d76001610d9284611f23565b610da7866402540be40063ffffffff611fad16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015610e05578181015183820152602001610ded565b50505050905090810190601f168015610e325780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015610e5357600080fd5b505af1158015610e67573d6000803e3d6000fd5b505050506040513d6020811015610e7d57600080fd5b506000965061130895505050505050565b6000610e9a8489611fef565b905063ffffffff81161561105b5760008581526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff19169055610f02612cb6565b5060408051808201825263ffffffff831681526020810187905290516110049084156108fc029085906000818181858888f19350505050158015610f4a573d6000803e3d6000fd5b5061200063f7a251d76001610f5e84611f23565b610f73876402540be40063ffffffff611fad16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015610fd1578181015183820152602001610fb9565b50505050905090810190601f168015610ffe5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561101f57600080fd5b505af1158015611033573d6000803e3d6000fd5b505050506040513d602081101561104957600080fd5b50600097506113089650505050505050565b604080516323b872dd60e01b815233600482015261100460248201526044810185905290516001600160a01b038a16916323b872dd9160648083019260209291908290030181600087803b1580156110b257600080fd5b505af11580156110c6573d6000803e3d6000fd5b505050506040513d60208110156110dc57600080fd5b5050602084015160408086015160a087015182516323bfccdb60e21b815260048101949094526001600160a01b03909116602484015260ff1660448301525161100491638eff336c91606480830192600092919082900301818387803b15801561114557600080fd5b505af1158015611159573d6000803e3d6000fd5b50505060008681526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff19169055506111b7612cb6565b50604080518082018252600080825260208201889052915190916110049185156108fc0291869190818181858888f193505050501580156111fc573d6000803e3d6000fd5b5061200063f7a251d7600161121084611f23565b611225876402540be40063ffffffff611fad16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561128357818101518382015260200161126b565b50505050905090810190601f1680156112b05780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b1580156112d157600080fd5b505af11580156112e5573d6000803e3d6000fd5b505050506040513d60208110156112fb57600080fd5b5060019750505050505050505b92915050565b61100581565b60008061132083611ed3565b905061132a612c7a565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a084015261010090910467ffffffffffffffff1660c08301526113f0576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b428160c0015167ffffffffffffffff1610611452576040805162461bcd60e51b815260206004820152601b60248201527f62696e642072657175657374206973206e6f7420657870697265640000000000604482015290519081900360640190fd5b60006110046001600160a01b0316635170639c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561148f57600080fd5b505afa1580156114a3573d6000803e3d6000fd5b505050506040513d60208110156114b957600080fd5b505190503481146114fb5760405162461bcd60e51b8152600401808060200182810382526023815260200180612d086023913960400191505060405180910390fd5b60008381526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff19169055611555612cb6565b50604080518082018252600181526020810185905290516110049083156108fc029084906000818181858888f19350505050158015611598573d6000803e3d6000fd5b5061200063f7a251d760016115ac84611f23565b6115c1866402540be40063ffffffff611fad16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561161f578181015183820152602001611607565b50505050905090810190601f16801561164c5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561166d57600080fd5b505af1158015611681573d6000803e3d6000fd5b505050506040513d602081101561169757600080fd5b506001955050505050505b919050565b61100881565b6000806116b983611ed3565b90506116c3612c7a565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a084015261010090910467ffffffffffffffff1660c0830152611789576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b80604001516001600160a01b0316856001600160a01b0316146117dd5760405162461bcd60e51b8152600401808060200182810382526045815260200180612d2b6045913960600191505060405180910390fd5b336001600160a01b0316856001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561182057600080fd5b505afa158015611834573d6000803e3d6000fd5b505050506040513d602081101561184a57600080fd5b50516001600160a01b0316146118a7576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c79206265703265206f776e65722063616e2072656a6563740000000000604482015290519081900360640190fd5b60006110046001600160a01b0316635170639c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118e457600080fd5b505afa1580156118f8573d6000803e3d6000fd5b505050506040513d602081101561190e57600080fd5b505190503481146119505760405162461bcd60e51b8152600401808060200182810382526023815260200180612d086023913960400191505060405180910390fd5b60008381526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff191690556119aa612cb6565b50604080518082018252600681526020810185905290516110049083156108fc029084906000818181858888f193505050501580156119ed573d6000803e3d6000fd5b5061200063f7a251d76001611a0184611f23565b611a16866402540be40063ffffffff611fad16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611a74578181015183820152602001611a5c565b50505050905090810190601f168015611aa15780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015611ac257600080fd5b505af1158015611ad6573d6000803e3d6000fd5b505050506040513d6020811015611aec57600080fd5b50600198975050505050505050565b600b81565b3361200014611b405760405162461bcd60e51b815260040180806020018281038252602f815260200180612dd4602f913960400191505060405180910390fd5b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b600681565b600981565b61100781565b61100681565b60005460ff1681565b61100281565b600160208190526000918252604090912080549181015460028201546003830154600484015460059094015460ff9586169593946001600160a01b0390931693919291811690610100900467ffffffffffffffff1687565b61100381565b61100081565b61100481565b6060611c4c612c7a565b6000611c578461236e565b9150915080611cad576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b815160ff16611d61576020828101805160009081526001928390526040908190208551815460ff1990811660ff928316178355935194820194909455908501516002820180546001600160a01b0319166001600160a01b03909216919091179055606085015160038201556080850151600482015560a08501516005909101805460c08701519316919093161768ffffffffffffffff00191661010067ffffffffffffffff90921691909102179055611eb8565b815160ff1660011415611e6b5760006110046001600160a01b03166359b9278984602001516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611dba57600080fd5b505afa158015611dce573d6000803e3d6000fd5b505050506040513d6020811015611de457600080fd5b505190506001600160a01b03811615611e655760208301516040805163b99328c560e01b815260048101929092526001600160a01b0383166024830152516110049163b99328c591604480830192600092919082900301818387803b158015611e4c57600080fd5b505af1158015611e60573d6000803e3d6000fd5b505050505b50611eb8565b6040805162461bcd60e51b815260206004820152601960248201527f756e7265636f676e697a65642062696e64207061636b61676500000000000000604482015290519081900360640190fd5b60408051600080825260208201909252905b50949350505050565b6020015190565b6000611f1c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124c0565b9392505050565b6040805160028082526060828101909352829190816020015b6060815260200190600190039081611f3c5750508351909150611f649063ffffffff16612557565b81600081518110611f7157fe5b6020026020010181905250611f8c836020015160001c612557565b81600181518110611f9957fe5b6020026020010181905250611f1c8161256a565b6000611f1c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506125f4565b600080826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561202b57600080fd5b505afa15801561203f573d6000803e3d6000fd5b505050506040513d602081101561205557600080fd5b5051604080516395d89b4160e01b815290519192506060916001600160a01b038616916395d89b41916004808301926000929190829003018186803b15801561209d57600080fd5b505afa1580156120b1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156120da57600080fd5b8101908080516040519392919084600160201b8211156120f957600080fd5b90830190602082018581111561210e57600080fd5b8251600160201b81118282018810171561212757600080fd5b82525081516020918201929091019080838360005b8381101561215457818101518382015260200161213c565b50505050905090810190601f1680156121815780820380516001836020036101000a031916815260200191505b506040525050509050612198818660200151612659565b6121a85750600291506113089050565b846060015185604001516001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156121ea57600080fd5b505afa1580156121fe573d6000803e3d6000fd5b505050506040513d602081101561221457600080fd5b5051146122275750600391506113089050565b8460a0015160ff1682146122415750600491506113089050565b602080860151604080516359b9278960e01b8152600481019290925251600092611004926359b927899260248083019392829003018186803b15801561228657600080fd5b505afa15801561229a573d6000803e3d6000fd5b505050506040513d60208110156122b057600080fd5b50516001600160a01b031614158061235257506000801b6110046001600160a01b031663bd46646187604001516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561232357600080fd5b505afa158015612337573d6000803e3d6000fd5b505050506040513d602081101561234d57600080fd5b505114155b156123635750600591506113089050565b506000949350505050565b612376612c7a565b6000612380612c7a565b612388612ccd565b61239961239486612741565b612766565b90506000805b6123a8836127b0565b156124b357806123cd576123c36123be846127d1565b61281f565b60ff1684526124ab565b80600114156123ec576123e26123be846127d1565b60208501526124ab565b806002141561241957612406612401846127d1565b61287d565b6001600160a01b031660408501526124ab565b80600314156124385761242e6123be846127d1565b60608501526124ab565b80600414156124575761244d6123be846127d1565b60808501526124ab565b80600514156124795761246c6123be846127d1565b60ff1660a08501526124ab565b80600614156124a65761248e6123be846127d1565b67ffffffffffffffff1660c0850152600191506124ab565b6124b3565b60010161239f565b5091935090915050915091565b6000818484111561254f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156125145781810151838201526020016124fc565b50505050905090810190601f1680156125415780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b606061130861256583612897565b61297d565b606081516000141561258b57506040805160008152602081019091526116a2565b60608260008151811061259a57fe5b602002602001015190506000600190505b83518110156125db576125d1828583815181106125c457fe5b60200260200101516129cf565b91506001016125ab565b50611f1c6125ee825160c060ff16612a4c565b826129cf565b600081836126435760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156125145781810151838201526020016124fc565b50600083858161264f57fe5b0495945050505050565b815160009083906008108061266f575080516003115b1561267e576000915050611308565b604080516020808252818301909252606091602082018180368337019050509050836020820152808251815181106126b257fe5b6020910101516001600160f81b031916602d60f81b146126d757600092505050611308565b600160005b8351811015612737578281815181106126f157fe5b602001015160f81c60f81b6001600160f81b03191684828151811061271257fe5b01602001516001600160f81b0319161461272f5760009150612737565b6001016126dc565b5095945050505050565b612749612ced565b506040805180820190915281518152602082810190820152919050565b61276e612ccd565b61277782612b44565b61278057600080fd5b600061278f8360200151612b7e565b60208085015160408051808201909152868152920190820152915050919050565b60006127ba612ced565b505080518051602091820151919092015191011190565b6127d9612ced565b6127e2826127b0565b6127eb57600080fd5b602082015160006127fb82612be1565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061283457508151602110155b61283d57600080fd5b600061284c8360200151612b7e565b83516020808601518301805193945091849003929190831015611eca57506020919091036101000a90049392505050565b805160009060151461288e57600080fd5b6113088261281f565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166128db575060186128ff565b6fffffffffffffffffffffffffffffffff1984166128fb575060106128ff565b5060005b60208110156129355781818151811061291457fe5b01602001516001600160f81b0319161561292d57612935565b6001016128ff565b60008160200390506060816040519080825280601f01601f19166020018201604052801561296a576020820181803683370190505b5080830196909652508452509192915050565b6060815160011480156129af5750607f60f81b8260008151811061299d57fe5b01602001516001600160f81b03191611155b156129bb5750806116a2565b6113086129cd8351608060ff16612a4c565b835b6060806040519050835180825260208201818101602087015b81831015612a005780518352602092830192016129e8565b50855184518101855292509050808201602086015b81831015612a2d578051835260209283019201612a15565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310612a9c576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b60408051600180825281830190925260609160208201818036833701905050905060378411612af65782840160f81b81600081518110612ad857fe5b60200101906001600160f81b031916908160001a9053509050611308565b6060612b0185612897565b90508381510160370160f81b82600081518110612b1a57fe5b60200101906001600160f81b031916908160001a905350612b3b82826129cf565b95945050505050565b8051600090612b55575060006116a2565b6020820151805160001a9060c0821015612b74576000925050506116a2565b5060019392505050565b8051600090811a6080811015612b985760009150506116a2565b60b8811080612bb3575060c08110801590612bb3575060f881105b15612bc25760019150506116a2565b60c0811015612bd65760b5190190506116a2565b60f5190190506116a2565b80516000908190811a6080811015612bfc5760019150612c73565b60b8811015612c1157607e1981019150612c73565b60c0811015612c3e5760b78103600185019450806020036101000a85510460018201810193505050612c73565b60f8811015612c535760be1981019150612c73565b60f78103600185019450806020036101000a855104600182018101935050505b5092915050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b604080518082019091526000808252602082015290565b6040518060400160405280612ce0612ced565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe6d73672e76616c756520646f65736e277420657175616c20746f2072656c6179466565636f6e74616374206164647265737320646f65736e277420657175616c20746f2074686520636f6e7472616374206164647265737320696e2062696e6420726571756573746f6e6c79206265703265206f776e65722063616e20617070726f766520746869732062696e642072657175657374616c6c6f77616e636520646f65736e277420657175616c20746f2028746f74616c537570706c79202d207065676779416d6f756e7429746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374a2646970667358221220f5773c2a3c3bddd2e242cc98b118992ba3cc5fe14d1ec67a1cc3651491c6a1ff64736f6c63430006040033" }, "0x0000000000000000000000000000000000002000": { "balance": "0x0", diff --git a/test/TestTokenHub.js b/test/TestTokenHub.js index 229ff879..4f31b417 100644 --- a/test/TestTokenHub.js +++ b/test/TestTokenHub.js @@ -223,7 +223,7 @@ contract('TokenHub', (accounts) => { let nestedEventValues = (await truffleAssert.createTransactionResult(crossChain, tx.tx)).logs[0].args; decoded = verifyPrefixAndExtractSyncPackage(nestedEventValues.payload, 1e6); - assert.equal(web3.utils.bytesToHex(decoded[0]), "0x03", "bind status should be rejected"); + assert.equal(web3.utils.bytesToHex(decoded[0]), "0x06", "bind status should be rejected"); assert.equal(web3.utils.bytesToHex(decoded[1]), toBytes32Bep2Symbol("ABC-9C7"), "wrong bep2TokenSymbol"); const bindRequenst = await tokenManager.bindPackageRecord.call(toBytes32Bep2Symbol("ABC-9C7")); // symbol: ABC-9C7 @@ -278,7 +278,7 @@ contract('TokenHub', (accounts) => { let nestedEventValues = (await truffleAssert.createTransactionResult(crossChain, tx.tx)).logs[0].args; decoded = verifyPrefixAndExtractSyncPackage(nestedEventValues.payload, 1e6); - assert.equal(web3.utils.bytesToHex(decoded[0]), "0x02", "bind status should be incorrect parameters"); + assert.equal(web3.utils.bytesToHex(decoded[0]), "0x02", "bind status should be symbol mismatch"); assert.equal(web3.utils.bytesToHex(decoded[1]), toBytes32Bep2Symbol("DEF-9C7"), "wrong bep2TokenSymbol"); bindRequenst = await tokenManager.bindPackageRecord.call(toBytes32Bep2Symbol("DEF-9C7")); // symbol: ABC-9C7