diff --git a/consensus/parlia/abi.go b/consensus/parlia/abi.go index 7b08edaa0d..4eed88bc33 100644 --- a/consensus/parlia/abi.go +++ b/consensus/parlia/abi.go @@ -4042,1817 +4042,2037 @@ const slashABI = ` ] ` -const stakeABI = ` -[ - { - "type": "receive", - "stateMutability": "payable" - }, - { - "type": "function", - "name": "BC_FUSION_CHANNELID", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint8", - "internalType": "uint8" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "BREATHE_BLOCK_INTERVAL", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "DEAD_ADDRESS", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "LOCK_AMOUNT", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "REDELEGATE_FEE_RATE_BASE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "STAKING_CHANNELID", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint8", - "internalType": "uint8" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "addToBlackList", - "inputs": [ - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "blackList", - "inputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "claim", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "requestNumber", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "claimBatch", - "inputs": [ - { - "name": "operatorAddresses", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "requestNumbers", - "type": "uint256[]", - "internalType": "uint256[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "consensusExpiration", - "inputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "consensusToOperator", - "inputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "createValidator", - "inputs": [ - { - "name": "consensusAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "voteAddress", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "blsProof", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "commission", - "type": "tuple", - "internalType": "struct StakeHub.Commission", - "components": [ - { - "name": "rate", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "maxRate", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "maxChangeRate", - "type": "uint64", - "internalType": "uint64" - } - ] - }, - { - "name": "description", - "type": "tuple", - "internalType": "struct StakeHub.Description", - "components": [ - { - "name": "moniker", - "type": "string", - "internalType": "string" - }, - { - "name": "identity", - "type": "string", - "internalType": "string" - }, - { - "name": "website", - "type": "string", - "internalType": "string" - }, - { - "name": "details", - "type": "string", - "internalType": "string" - } - ] - } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "delegate", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "delegateVotePower", - "type": "bool", - "internalType": "bool" - } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "distributeReward", - "inputs": [ - { - "name": "consensusAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "doubleSignSlash", - "inputs": [ - { - "name": "consensusAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "downtimeJailTime", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "downtimeSlash", - "inputs": [ - { - "name": "consensusAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "downtimeSlashAmount", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "editCommissionRate", - "inputs": [ - { - "name": "commissionRate", - "type": "uint64", - "internalType": "uint64" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "editConsensusAddress", - "inputs": [ - { - "name": "newConsensusAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "editDescription", - "inputs": [ - { - "name": "description", - "type": "tuple", - "internalType": "struct StakeHub.Description", - "components": [ - { - "name": "moniker", - "type": "string", - "internalType": "string" - }, - { - "name": "identity", - "type": "string", - "internalType": "string" - }, - { - "name": "website", - "type": "string", - "internalType": "string" - }, - { - "name": "details", - "type": "string", - "internalType": "string" - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "editVoteAddress", - "inputs": [ - { - "name": "newVoteAddress", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "blsProof", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "felonyJailTime", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "felonySlashAmount", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getValidatorBasicInfo", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "createdTime", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "jailed", - "type": "bool", - "internalType": "bool" - }, - { - "name": "jailUntil", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getValidatorCommission", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct StakeHub.Commission", - "components": [ - { - "name": "rate", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "maxRate", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "maxChangeRate", - "type": "uint64", - "internalType": "uint64" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getValidatorConsensusAddress", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "consensusAddress", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getValidatorCreditContract", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "creditContract", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getValidatorDescription", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct StakeHub.Description", - "components": [ - { - "name": "moniker", - "type": "string", - "internalType": "string" - }, - { - "name": "identity", - "type": "string", - "internalType": "string" - }, - { - "name": "website", - "type": "string", - "internalType": "string" - }, - { - "name": "details", - "type": "string", - "internalType": "string" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getValidatorElectionInfo", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "limit", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "consensusAddrs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "votingPowers", - "type": "uint256[]", - "internalType": "uint256[]" - }, - { - "name": "voteAddrs", - "type": "bytes[]", - "internalType": "bytes[]" - }, - { - "name": "totalLength", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getValidatorRewardRecord", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "index", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getValidatorTotalPooledBNBRecord", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "index", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getValidatorVoteAddress", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "voteAddress", - "type": "bytes", - "internalType": "bytes" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getValidators", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "limit", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "operatorAddrs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "creditAddrs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "totalLength", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "handleAckPackage", - "inputs": [ - { - "name": "channelId", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "msgBytes", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "handleFailAckPackage", - "inputs": [ - { - "name": "channelId", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "msgBytes", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "handleSynPackage", - "inputs": [ - { - "name": "", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "msgBytes", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes", - "internalType": "bytes" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "initialize", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "isPaused", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "maliciousVoteSlash", - "inputs": [ - { - "name": "voteAddress", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "maxElectedValidators", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "maxFelonyBetweenBreatheBlock", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "minDelegationBNBChange", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "minSelfDelegationBNB", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "numOfJailed", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "pause", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "redelegate", - "inputs": [ - { - "name": "srcValidator", - "type": "address", - "internalType": "address" - }, - { - "name": "dstValidator", - "type": "address", - "internalType": "address" - }, - { - "name": "shares", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "delegateVotePower", - "type": "bool", - "internalType": "bool" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "redelegateFeeRate", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "removeFromBlackList", - "inputs": [ - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "resume", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "syncGovToken", - "inputs": [ - { - "name": "operatorAddresses", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferGasLimit", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "unbondPeriod", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "undelegate", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "shares", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "unjail", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "updateParam", - "inputs": [ - { - "name": "key", - "type": "string", - "internalType": "string" - }, - { - "name": "value", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "voteExpiration", - "inputs": [ - { - "name": "", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "voteToOperator", - "inputs": [ - { - "name": "", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "event", - "name": "BlackListed", - "inputs": [ - { - "name": "target", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Claimed", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "delegator", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "bnbAmount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "CommissionRateEdited", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newCommissionRate", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ConsensusAddressEdited", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newConsensusAddress", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Delegated", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "delegator", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "shares", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "bnbAmount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DescriptionEdited", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Initialized", - "inputs": [ - { - "name": "version", - "type": "uint8", - "indexed": false, - "internalType": "uint8" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "MigrateFailed", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "delegator", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "bnbAmount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "respCode", - "type": "uint8", - "indexed": false, - "internalType": "enum StakeHub.StakeMigrationRespCode" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "MigrateSuccess", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "delegator", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "shares", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "bnbAmount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ParamChange", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "value", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Paused", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "ProtectorChanged", - "inputs": [ - { - "name": "oldProtector", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newProtector", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Redelegated", - "inputs": [ - { - "name": "srcValidator", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "dstValidator", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "delegator", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "oldShares", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "newShares", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "bnbAmount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Resumed", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "RewardDistributeFailed", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "failReason", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RewardDistributed", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "reward", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "StakeCreditInitialized", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "creditContract", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "UnBlackListed", - "inputs": [ - { - "name": "target", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Undelegated", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "delegator", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "shares", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "bnbAmount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "UnexpectedPackage", - "inputs": [ - { - "name": "channelId", - "type": "uint8", - "indexed": false, - "internalType": "uint8" - }, - { - "name": "msgBytes", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ValidatorCreated", - "inputs": [ - { - "name": "consensusAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "operatorAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "creditContract", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "voteAddress", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ValidatorEmptyJailed", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ValidatorJailed", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ValidatorSlashed", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "jailUntil", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "slashAmount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "slashType", - "type": "uint8", - "indexed": false, - "internalType": "enum StakeHub.SlashType" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ValidatorUnjailed", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "VoteAddressEdited", - "inputs": [ - { - "name": "operatorAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newVoteAddress", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "AlreadyPaused", - "inputs": [] - }, - { - "type": "error", - "name": "AlreadySlashed", - "inputs": [] - }, - { - "type": "error", - "name": "ConsensusAddressExpired", - "inputs": [] - }, - { - "type": "error", - "name": "DelegationAmountTooSmall", - "inputs": [] - }, - { - "type": "error", - "name": "DuplicateConsensusAddress", - "inputs": [] - }, - { - "type": "error", - "name": "DuplicateMoniker", - "inputs": [] - }, - { - "type": "error", - "name": "DuplicateVoteAddress", - "inputs": [] - }, - { - "type": "error", - "name": "InBlackList", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidCommission", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidConsensusAddress", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidMoniker", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidRequest", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidSynPackage", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidValue", - "inputs": [ - { - "name": "key", - "type": "string", - "internalType": "string" - }, - { - "name": "value", - "type": "bytes", - "internalType": "bytes" - } - ] - }, - { - "type": "error", - "name": "InvalidVoteAddress", - "inputs": [] - }, - { - "type": "error", - "name": "JailTimeNotExpired", - "inputs": [] - }, - { - "type": "error", - "name": "NoMoreFelonyAllowed", - "inputs": [] - }, - { - "type": "error", - "name": "NotPaused", - "inputs": [] - }, - { - "type": "error", - "name": "OnlyCoinbase", - "inputs": [] - }, - { - "type": "error", - "name": "OnlyProtector", - "inputs": [] - }, - { - "type": "error", - "name": "OnlySelfDelegation", - "inputs": [] - }, - { - "type": "error", - "name": "OnlySystemContract", - "inputs": [ - { - "name": "systemContract", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "OnlyZeroGasPrice", - "inputs": [] - }, - { - "type": "error", - "name": "SameValidator", - "inputs": [] - }, - { - "type": "error", - "name": "SelfDelegationNotEnough", - "inputs": [] - }, - { - "type": "error", - "name": "TransferFailed", - "inputs": [] - }, - { - "type": "error", - "name": "UnknownParam", - "inputs": [ - { - "name": "key", - "type": "string", - "internalType": "string" - }, - { - "name": "value", - "type": "bytes", - "internalType": "bytes" - } - ] - }, - { - "type": "error", - "name": "UpdateTooFrequently", - "inputs": [] - }, - { - "type": "error", - "name": "ValidatorExisted", - "inputs": [] - }, - { - "type": "error", - "name": "ValidatorNotExisted", - "inputs": [] - }, - { - "type": "error", - "name": "ValidatorNotJailed", - "inputs": [] - }, - { - "type": "error", - "name": "VoteAddressExpired", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroShares", - "inputs": [] - } +const stakeABI = `[ + { + "type": "receive", + "stateMutability": "payable" + }, + { + "type": "function", + "name": "BREATHE_BLOCK_INTERVAL", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "DEAD_ADDRESS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "INIT_MAX_NUMBER_NODE_ID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "LOCK_AMOUNT", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "REDELEGATE_FEE_RATE_BASE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "addNodeIDs", + "inputs": [ + { + "name": "nodeIDs", + "type": "bytes32[]", + "internalType": "bytes32[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "addToBlackList", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "agentToOperator", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "blackList", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "claim", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "requestNumber", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimBatch", + "inputs": [ + { + "name": "operatorAddresses", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "requestNumbers", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "consensusExpiration", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "consensusToOperator", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "createValidator", + "inputs": [ + { + "name": "consensusAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "voteAddress", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "blsProof", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "commission", + "type": "tuple", + "internalType": "struct StakeHub.Commission", + "components": [ + { + "name": "rate", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "maxRate", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "maxChangeRate", + "type": "uint64", + "internalType": "uint64" + } + ] + }, + { + "name": "description", + "type": "tuple", + "internalType": "struct StakeHub.Description", + "components": [ + { + "name": "moniker", + "type": "string", + "internalType": "string" + }, + { + "name": "identity", + "type": "string", + "internalType": "string" + }, + { + "name": "website", + "type": "string", + "internalType": "string" + }, + { + "name": "details", + "type": "string", + "internalType": "string" + } + ] + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "delegate", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "delegateVotePower", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "distributeReward", + "inputs": [ + { + "name": "consensusAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "doubleSignSlash", + "inputs": [ + { + "name": "consensusAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "downtimeJailTime", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "downtimeSlash", + "inputs": [ + { + "name": "consensusAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "downtimeSlashAmount", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "editCommissionRate", + "inputs": [ + { + "name": "commissionRate", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "editConsensusAddress", + "inputs": [ + { + "name": "newConsensusAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "editDescription", + "inputs": [ + { + "name": "description", + "type": "tuple", + "internalType": "struct StakeHub.Description", + "components": [ + { + "name": "moniker", + "type": "string", + "internalType": "string" + }, + { + "name": "identity", + "type": "string", + "internalType": "string" + }, + { + "name": "website", + "type": "string", + "internalType": "string" + }, + { + "name": "details", + "type": "string", + "internalType": "string" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "editVoteAddress", + "inputs": [ + { + "name": "newVoteAddress", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "blsProof", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "felonyJailTime", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "felonySlashAmount", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getProtector", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorAgent", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorBasicInfo", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "createdTime", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "jailed", + "type": "bool", + "internalType": "bool" + }, + { + "name": "jailUntil", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorCommission", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct StakeHub.Commission", + "components": [ + { + "name": "rate", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "maxRate", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "maxChangeRate", + "type": "uint64", + "internalType": "uint64" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorConsensusAddress", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "consensusAddress", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorCreditContract", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "creditContract", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorDescription", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct StakeHub.Description", + "components": [ + { + "name": "moniker", + "type": "string", + "internalType": "string" + }, + { + "name": "identity", + "type": "string", + "internalType": "string" + }, + { + "name": "website", + "type": "string", + "internalType": "string" + }, + { + "name": "details", + "type": "string", + "internalType": "string" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorElectionInfo", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "limit", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "consensusAddrs", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "votingPowers", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "voteAddrs", + "type": "bytes[]", + "internalType": "bytes[]" + }, + { + "name": "totalLength", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorRewardRecord", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "index", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorTotalPooledBNBRecord", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "index", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorUpdateTime", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorVoteAddress", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "voteAddress", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidators", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "limit", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "operatorAddrs", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "creditAddrs", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "totalLength", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "handleAckPackage", + "inputs": [ + { + "name": "channelId", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "msgBytes", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "handleFailAckPackage", + "inputs": [ + { + "name": "channelId", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "msgBytes", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "handleSynPackage", + "inputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "msgBytes", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "initialize", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isPaused", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getNodeIDs", + "inputs": [ + { + "name": "validatorsToQuery", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [ + { + "name": "consensusAddresses", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "nodeIDsList", + "type": "bytes32[][]", + "internalType": "bytes32[][]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "maliciousVoteSlash", + "inputs": [ + { + "name": "voteAddress", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "maxElectedValidators", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "maxFelonyBetweenBreatheBlock", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "maxNodeIDs", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "minDelegationBNBChange", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "minSelfDelegationBNB", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "numOfJailed", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pause", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "redelegate", + "inputs": [ + { + "name": "srcValidator", + "type": "address", + "internalType": "address" + }, + { + "name": "dstValidator", + "type": "address", + "internalType": "address" + }, + { + "name": "shares", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "delegateVotePower", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "redelegateFeeRate", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "removeFromBlackList", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "removeNodeIDs", + "inputs": [ + { + "name": "targetNodeIDs", + "type": "bytes32[]", + "internalType": "bytes32[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "resume", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "syncGovToken", + "inputs": [ + { + "name": "operatorAddresses", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferGasLimit", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "unbondPeriod", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "undelegate", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "shares", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "unjail", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateAgent", + "inputs": [ + { + "name": "newAgent", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateParam", + "inputs": [ + { + "name": "key", + "type": "string", + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "voteExpiration", + "inputs": [ + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "voteToOperator", + "inputs": [ + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "AgentChanged", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "oldAgent", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newAgent", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BlackListed", + "inputs": [ + { + "name": "target", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Claimed", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "bnbAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "CommissionRateEdited", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newCommissionRate", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ConsensusAddressEdited", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newConsensusAddress", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Delegated", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "shares", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "bnbAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DescriptionEdited", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MigrateFailed", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "bnbAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "respCode", + "type": "uint8", + "indexed": false, + "internalType": "enum StakeHub.StakeMigrationRespCode" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MigrateSuccess", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "shares", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "bnbAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NodeIDAdded", + "inputs": [ + { + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "nodeID", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NodeIDRemoved", + "inputs": [ + { + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "nodeID", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ParamChange", + "inputs": [ + { + "name": "key", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Paused", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "ProtectorChanged", + "inputs": [ + { + "name": "oldProtector", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newProtector", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Redelegated", + "inputs": [ + { + "name": "srcValidator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "dstValidator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "oldShares", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newShares", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "bnbAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Resumed", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "RewardDistributeFailed", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "failReason", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardDistributed", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "reward", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "StakeCreditInitialized", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "creditContract", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "UnBlackListed", + "inputs": [ + { + "name": "target", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Undelegated", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "shares", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "bnbAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "UnexpectedPackage", + "inputs": [ + { + "name": "channelId", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + }, + { + "name": "msgBytes", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ValidatorCreated", + "inputs": [ + { + "name": "consensusAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "creditContract", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "voteAddress", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ValidatorEmptyJailed", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ValidatorJailed", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ValidatorSlashed", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "jailUntil", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "slashAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "slashType", + "type": "uint8", + "indexed": false, + "internalType": "enum StakeHub.SlashType" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ValidatorUnjailed", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "VoteAddressEdited", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newVoteAddress", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AlreadyPaused", + "inputs": [] + }, + { + "type": "error", + "name": "AlreadySlashed", + "inputs": [] + }, + { + "type": "error", + "name": "ConsensusAddressExpired", + "inputs": [] + }, + { + "type": "error", + "name": "DelegationAmountTooSmall", + "inputs": [] + }, + { + "type": "error", + "name": "DuplicateConsensusAddress", + "inputs": [] + }, + { + "type": "error", + "name": "DuplicateMoniker", + "inputs": [] + }, + { + "type": "error", + "name": "DuplicateNodeID", + "inputs": [] + }, + { + "type": "error", + "name": "DuplicateVoteAddress", + "inputs": [] + }, + { + "type": "error", + "name": "ExceedsMaxNodeIDs", + "inputs": [] + }, + { + "type": "error", + "name": "InBlackList", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidAgent", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidCommission", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidConsensusAddress", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidMoniker", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidNodeID", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidRequest", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidSynPackage", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidValidator", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidValue", + "inputs": [ + { + "name": "key", + "type": "string", + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "error", + "name": "InvalidVoteAddress", + "inputs": [] + }, + { + "type": "error", + "name": "JailTimeNotExpired", + "inputs": [] + }, + { + "type": "error", + "name": "NoMoreFelonyAllowed", + "inputs": [] + }, + { + "type": "error", + "name": "NotPaused", + "inputs": [] + }, + { + "type": "error", + "name": "OnlyCoinbase", + "inputs": [] + }, + { + "type": "error", + "name": "OnlyProtector", + "inputs": [] + }, + { + "type": "error", + "name": "OnlySelfDelegation", + "inputs": [] + }, + { + "type": "error", + "name": "OnlySystemContract", + "inputs": [ + { + "name": "systemContract", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OnlyZeroGasPrice", + "inputs": [] + }, + { + "type": "error", + "name": "SameValidator", + "inputs": [] + }, + { + "type": "error", + "name": "SelfDelegationNotEnough", + "inputs": [] + }, + { + "type": "error", + "name": "TransferFailed", + "inputs": [] + }, + { + "type": "error", + "name": "UnknownParam", + "inputs": [ + { + "name": "key", + "type": "string", + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "error", + "name": "UpdateTooFrequently", + "inputs": [] + }, + { + "type": "error", + "name": "ValidatorExisted", + "inputs": [] + }, + { + "type": "error", + "name": "ValidatorNotExisted", + "inputs": [] + }, + { + "type": "error", + "name": "ValidatorNotJailed", + "inputs": [] + }, + { + "type": "error", + "name": "VoteAddressExpired", + "inputs": [] + }, + { + "type": "error", + "name": "ZeroShares", + "inputs": [] + } ] ` diff --git a/consensus/parlia/stakehub.go b/consensus/parlia/stakehub.go new file mode 100644 index 0000000000..8b9694d61f --- /dev/null +++ b/consensus/parlia/stakehub.go @@ -0,0 +1,224 @@ +package parlia + +import ( + "context" + "fmt" + "math" + "math/big" + + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/systemcontracts" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/internal/ethapi" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/rpc" +) + +// GetValidators retrieves validators from the StakeHubContract +// It returns operator addresses, credit addresses, and total length of validators +func (p *Parlia) GetValidators(blockNumber uint64, offset, limit *big.Int) ([]common.Address, []common.Address, *big.Int, error) { + log.Debug("Getting validators", "block", blockNumber, "offset", offset, "limit", limit) + + // Create the call data for getValidators + data, err := p.stakeHubABI.Pack("getValidators", offset, limit) + if err != nil { + log.Error("Failed to pack getValidators", "error", err) + return nil, nil, nil, fmt.Errorf("failed to pack getValidators: %v", err) + } + + // Make the call + blockNr := rpc.BlockNumberOrHashWithNumber(rpc.BlockNumber(blockNumber)) + msgData := (hexutil.Bytes)(data) + toAddress := common.HexToAddress(systemcontracts.StakeHubContract) + gas := (hexutil.Uint64)(uint64(math.MaxUint64 / 2)) + + log.Debug("Calling getValidators", "block", blockNumber, "to", toAddress) + result, err := p.ethAPI.Call(context.Background(), ethapi.TransactionArgs{ + Gas: &gas, + To: &toAddress, + Data: &msgData, + }, &blockNr, nil, nil) + if err != nil { + log.Error("Failed to call getValidators", "error", err) + return nil, nil, nil, fmt.Errorf("failed to call getValidators: %v", err) + } + + // Unpack the result + var operatorAddrs []common.Address + var creditAddrs []common.Address + var totalLength *big.Int + if err := p.stakeHubABI.UnpackIntoInterface(&[]interface{}{&operatorAddrs, &creditAddrs, &totalLength}, "getValidators", result); err != nil { + log.Error("Failed to unpack getValidators result", "error", err) + return nil, nil, nil, fmt.Errorf("failed to unpack getValidators result: %v", err) + } + + log.Debug("Successfully retrieved validators", "operators", len(operatorAddrs), "credits", len(creditAddrs), "total", totalLength) + return operatorAddrs, creditAddrs, totalLength, nil +} + +// getNodeIDsForValidators retrieves node IDs for the given validators +// It returns a map of consensus addresses to their node IDs +func (p *Parlia) getNodeIDsForValidators(blockNumber uint64, validatorsToQuery []common.Address) (map[common.Address][]enode.ID, error) { + log.Debug("Listing node IDs for validators", "block", blockNumber, "validators", len(validatorsToQuery)) + + // Create the call data for getNodeIDs + data, err := p.stakeHubABI.Pack("getNodeIDs", validatorsToQuery) + if err != nil { + log.Error("Failed to pack getNodeIDs", "error", err) + return nil, fmt.Errorf("failed to pack getNodeIDs: %v", err) + } + + // Make the call + blockNr := rpc.BlockNumberOrHashWithNumber(rpc.BlockNumber(blockNumber)) + msgData := (hexutil.Bytes)(data) + toAddress := common.HexToAddress(systemcontracts.StakeHubContract) + gas := (hexutil.Uint64)(uint64(math.MaxUint64 / 2)) + + log.Debug("Calling getNodeIDs", "block", blockNumber, "to", toAddress) + result, err := p.ethAPI.Call(context.Background(), ethapi.TransactionArgs{ + Gas: &gas, + To: &toAddress, + Data: &msgData, + }, &blockNr, nil, nil) + if err != nil { + log.Error("Failed to call getNodeIDs", "error", err) + return nil, fmt.Errorf("failed to call getNodeIDs: %v", err) + } + + // Unpack the result + var consensusAddresses []common.Address + var nodeIDsList [][]enode.ID + if err := p.stakeHubABI.UnpackIntoInterface(&[]interface{}{&consensusAddresses, &nodeIDsList}, "getNodeIDs", result); err != nil { + log.Error("Failed to unpack getNodeIDs result", "error", err) + return nil, fmt.Errorf("failed to unpack getNodeIDs result: %v", err) + } + + // Create a map of addresses to node IDs + addressToNodeIDs := make(map[common.Address][]enode.ID) + for i, addr := range consensusAddresses { + if i < len(nodeIDsList) { + addressToNodeIDs[addr] = nodeIDsList[i] + } + } + + log.Debug("Successfully retrieved node IDs", "addresses", len(addressToNodeIDs)) + return addressToNodeIDs, nil +} + +// GetNodeIDs returns a flattened array of all node IDs for current validators +func (p *Parlia) GetNodeIDs() ([]enode.ID, error) { + // Get latest block number + block := p.ethAPI.BlockNumber() + log.Debug("Getting all node IDs", "block", block) + + // Call GetValidators with latest block number + operatorAddrs, _, _, err := p.GetValidators(uint64(block), big.NewInt(0), big.NewInt(1000)) + if err != nil { + log.Error("Failed to get validators", "error", err) + return nil, fmt.Errorf("failed to get validators: %v", err) + } + log.Debug("Retrieved validators", "count", len(operatorAddrs)) + + // Get node IDs for validators + nodeIDs, err := p.getNodeIDsForValidators(uint64(block), operatorAddrs) + if err != nil { + log.Error("Failed to get node IDs", "error", err) + return nil, fmt.Errorf("failed to get node IDs: %v", err) + } + log.Debug("Retrieved node IDs map", "addresses", len(nodeIDs)) + + // Flatten the array of arrays into a single array + flatNodeIDs := make([]enode.ID, 0) + for addr, nodeIDArray := range nodeIDs { + flatNodeIDs = append(flatNodeIDs, nodeIDArray...) + log.Debug("Processing node IDs", "address", addr, "count", len(nodeIDArray)) + } + + log.Debug("Successfully flattened node IDs", "total", len(flatNodeIDs)) + return flatNodeIDs, nil +} + +// AddNodeIDs creates a signed transaction to add node IDs to the StakeHub contract +func (p *Parlia) AddNodeIDs(nodeIDs []enode.ID, nonce uint64) (*types.Transaction, error) { + log.Debug("Adding node IDs", "count", len(nodeIDs), "nonce", nonce) + + p.lock.RLock() + signTxFn := p.signTxFn + val := p.val + p.lock.RUnlock() + + if signTxFn == nil { + log.Error("Signing function not set") + return nil, fmt.Errorf("signing function not set, call Authorize first") + } + + // Create the call data for addNodeIDs + data, err := p.stakeHubABI.Pack("addNodeIDs", nodeIDs) + if err != nil { + log.Error("Failed to pack addNodeIDs", "error", err) + return nil, fmt.Errorf("failed to pack addNodeIDs: %v", err) + } + + to := common.HexToAddress(systemcontracts.StakeHubContract) + hexData := hexutil.Bytes(data) + hexNonce := hexutil.Uint64(nonce) + gas, err := p.ethAPI.EstimateGas(context.Background(), ethapi.TransactionArgs{ + From: &val, + To: &to, + Nonce: &hexNonce, + Data: &hexData, + }, nil, nil, nil) + if err != nil { + log.Error("Failed to estimate gas", "error", err) + return nil, fmt.Errorf("failed to estimate gas: %v", err) + } + + // Create the transaction + tx := types.NewTransaction( + nonce, + common.HexToAddress(systemcontracts.StakeHubContract), + common.Big0, + uint64(gas), + big.NewInt(1000000000), + data, + ) + + // Sign the transaction with the node's private key + log.Debug("Signing transaction", "validator", val) + signedTx, err := signTxFn(accounts.Account{Address: val}, tx, p.chainConfig.ChainID) + if err != nil { + log.Error("Failed to sign transaction", "error", err) + return nil, fmt.Errorf("failed to sign transaction: %v", err) + } + + log.Debug("Successfully created signed transaction", "hash", signedTx.Hash()) + return signedTx, nil +} + +// GetNodeIDsMap returns a map of consensus addresses to their node IDs for all current validators +func (p *Parlia) GetNodeIDsMap() (map[common.Address][]enode.ID, error) { + // Get latest block number + block := p.ethAPI.BlockNumber() + log.Debug("Getting node IDs map", "block", block) + + // Call GetValidators with latest block number + operatorAddrs, _, _, err := p.GetValidators(uint64(block), big.NewInt(0), big.NewInt(1000)) + if err != nil { + log.Error("Failed to get validators", "error", err) + return nil, fmt.Errorf("failed to get validators: %v", err) + } + log.Debug("Retrieved validators", "count", len(operatorAddrs)) + + // Get node IDs for validators + nodeIDsMap, err := p.getNodeIDsForValidators(uint64(block), operatorAddrs) + if err != nil { + log.Error("Failed to get node IDs", "error", err) + return nil, fmt.Errorf("failed to get node IDs: %v", err) + } + log.Debug("Retrieved node IDs map", "addresses", len(nodeIDsMap)) + + return nodeIDsMap, nil +} diff --git a/core/systemcontracts/maxwell/chapel/StakeHubContract b/core/systemcontracts/maxwell/chapel/StakeHubContract new file mode 100644 index 0000000000..219e5cb476 --- /dev/null +++ b/core/systemcontracts/maxwell/chapel/StakeHubContract @@ -0,0 +1 @@ +6080604052600436106200043b5760003560e01c806386d545061162000233578063ca47908f116200012f578063dd42a1dd11620000b9578063f1f74d841162000084578063f1f74d841462000d75578063f80a34021462000d8d578063fb50b31f1462000db2578063fc0c5ff11462000dd7578063ff69ab611462000def57600080fd5b8063dd42a1dd1462000ce2578063e8f67c3b1462000d09578063e992aaf51462000d21578063efdbf0e11462000d3957600080fd5b8063d7c2dfc811620000fa578063d7c2dfc81462000c68578063d8ca511f1462000c8d578063daacdb661462000ca5578063dbda7fb31462000cbd57600080fd5b8063ca47908f1462000bd1578063cbb04d9d1462000be9578063d115a2061462000c2a578063d6ca429d1462000c4357600080fd5b8063b187bd2611620001bd578063bfff04751162000188578063bfff04751462000b58578063c166f58a1462000b7d578063c38fbec81462000b94578063c473318f1462000bb9578063c8509d81146200095157600080fd5b8063b187bd261462000ac5578063baa7199e1462000ae5578063bdceadf31462000b0a578063bff02e201462000b2257600080fd5b8063a1832e6411620001fe578063a1832e641462000a22578063a43569b31462000a47578063aad3ec961462000a7b578063ac4317511462000aa057600080fd5b806386d54506146200098e5780638a4d3fa814620009c85780638cd22b2214620009e6578063982ef0a71462000a0b57600080fd5b80634838d165116200034357806364028fbd11620002cd57806375cc7d89116200029857806375cc7d8914620008fc57806376e7d6d614620009215780638129fc1c1462000939578063831d65d114620009515780638456cb59146200097657600080fd5b806364028fbd1462000837578063663706d3146200084e5780636ec01b27146200087f5780636f8e2fa414620008d757600080fd5b80634e6fd6c4116200030e5780634e6fd6c4146200079e5780635949187114620007b65780635e7cc1c914620007db57806363a036b5146200080057600080fd5b80634838d16514620006ea57806349f41a42146200072f5780634a49ac4c14620007545780634d99dd16146200077957600080fd5b80631fab701511620003c5578063384099881162000390578063384099881462000663578063417c73a7146200067b578063449ecfe614620006a057806345211bfd14620006c557600080fd5b80631fab701514620005aa5780632b727c8614620005cf5780632e8e8c7114620005f4578063367dad49146200062e57600080fd5b80630e9fbf5111620004065780630e9fbf5114620004f35780631182b875146200051857806317b4f353146200054c5780631fa8882b146200059157600080fd5b8063046f7da2146200045b578063059ddd2214620004735780630661806e14620004b5578063092193ab14620004dc57600080fd5b36620004565760345460ff166001146200045457600080fd5b005b600080fd5b3480156200046857600080fd5b506200045462000e07565b3480156200048057600080fd5b506200049862000492366004620096f0565b62000e99565b6040516001600160a01b0390911681526020015b60405180910390f35b348015620004c257600080fd5b50620004cd60365481565b604051908152602001620004ac565b62000454620004ed366004620096f0565b620012c1565b3480156200050057600080fd5b50620004546200051236600462009752565b62001912565b3480156200052557600080fd5b506200053d6200053736600462009797565b62001c3e565b604051620004ac91906200984a565b3480156200055957600080fd5b50620004986200056b3660046200991c565b80516020818301810180516045825292820191909301209152546001600160a01b031681565b3480156200059e57600080fd5b50620004cd6201518081565b348015620005b757600080fd5b5062000454620005c9366004620099b8565b62001cd6565b348015620005dc57600080fd5b5062000498620005ee366004620096f0565b6200202d565b3480156200060157600080fd5b506200049862000613366004620096f0565b604d602052600090815260409020546001600160a01b031681565b3480156200063b57600080fd5b50620006536200064d366004620099b8565b62002082565b604051620004ac92919062009a37565b3480156200067057600080fd5b50620004cd60375481565b3480156200068857600080fd5b50620004546200069a366004620096f0565b62002651565b348015620006ad57600080fd5b5062000454620006bf366004620096f0565b620026d3565b348015620006d257600080fd5b5062000454620006e4366004620096f0565b620028b8565b348015620006f757600080fd5b506200071e62000709366004620096f0565b60016020526000908152604090205460ff1681565b6040519015158152602001620004ac565b3480156200073c57600080fd5b50620004546200074e366004620096f0565b62002a91565b3480156200076157600080fd5b506200045462000773366004620096f0565b62002cad565b3480156200078657600080fd5b50620004546200079836600462009ad6565b62002d29565b348015620007ab57600080fd5b506200049861dead81565b348015620007c357600080fd5b5062000454620007d536600462009b14565b62003359565b348015620007e857600080fd5b5062000454620007fa36600462009b7e565b62004152565b3480156200080d57600080fd5b50620008256200081f36600462009ba5565b6200437c565b604051620004ac949392919062009bc8565b620004546200084836600462009c84565b62004a21565b3480156200085b57600080fd5b50620004cd6200086d366004620096f0565b60446020526000908152604090205481565b3480156200088c57600080fd5b50620008a46200089e366004620096f0565b62005070565b6040805182516001600160401b0390811682526020808501518216908301529282015190921690820152606001620004ac565b348015620008e457600080fd5b506200053d620008f6366004620096f0565b62005115565b3480156200090957600080fd5b50620004546200091b366004620096f0565b62005541565b3480156200092e57600080fd5b50620004cd603d5481565b3480156200094657600080fd5b506200045462005713565b3480156200095e57600080fd5b50620004546200097036600462009797565b620058de565b3480156200098357600080fd5b50620004546200593c565b3480156200099b57600080fd5b5062000498620009ad366004620096f0565b6043602052600090815260409020546001600160a01b031681565b348015620009d557600080fd5b50620004cd670de0b6b3a764000081565b348015620009f357600080fd5b50620004cd62000a0536600462009ad6565b620059d4565b6200045462000a1c36600462009d5a565b62005a8d565b34801562000a2f57600080fd5b506200045462000a41366004620099b8565b6200613b565b34801562000a5457600080fd5b5062000a6c62000a66366004620096f0565b62006441565b604051620004ac919062009d92565b34801562000a8857600080fd5b506200045462000a9a36600462009ad6565b6200672e565b34801562000aad57600080fd5b506200045462000abf36600462009e0f565b6200679b565b34801562000ad257600080fd5b5060005462010000900460ff166200071e565b34801562000af257600080fd5b506200045462000b0436600462009e81565b6200774d565b34801562000b1757600080fd5b50620004cd603c5481565b34801562000b2f57600080fd5b5062000b4762000b4136600462009ba5565b6200791a565b604051620004ac9392919062009eda565b34801562000b6557600080fd5b50620004cd62000b77366004620096f0565b62007af6565b34801562000b8a57600080fd5b50620004cd600581565b34801562000ba157600080fd5b506200045462000bb3366004620096f0565b62007b44565b34801562000bc657600080fd5b50620004cd60385481565b34801562000bde57600080fd5b50620004cd604e5481565b34801562000bf657600080fd5b5062000c0e62000c08366004620096f0565b62007e06565b60408051938452911515602084015290820152606001620004ac565b34801562000c3757600080fd5b50620004cd620186a081565b34801562000c5057600080fd5b506200045462000c6236600462009f37565b62008249565b34801562000c7557600080fd5b506200045462000c873660046200a020565b6200846f565b34801562000c9a57600080fd5b50620004cd603b5481565b34801562000cb257600080fd5b50620004cd60495481565b34801562000cca57600080fd5b506200049862000cdc366004620096f0565b62008565565b34801562000cef57600080fd5b50600054630100000090046001600160a01b031662000498565b34801562000d1657600080fd5b50620004cd60355481565b34801562000d2e57600080fd5b50620004cd603a5481565b34801562000d4657600080fd5b50620004cd62000d583660046200991c565b805160208183018101805160468252928201919093012091525481565b34801562000d8257600080fd5b50620004cd603e5481565b34801562000d9a57600080fd5b50620004cd62000dac36600462009ad6565b6200898f565b34801562000dbf57600080fd5b506200045462000dd136600462009e0f565b62008a00565b34801562000de457600080fd5b50620004cd60395481565b34801562000dfc57600080fd5b50620004cd604a5481565b600054630100000090046001600160a01b0316331462000e3a576040516306fbb1e360e01b815260040160405180910390fd5b60005462010000900460ff1662000e6457604051636cd6020160e01b815260040160405180910390fd5b6000805462ff0000191681556040517f62451d457bc659158be6e6247f56ec1df424a5c7597f71c20c2bc44e0965c8f99190a1565b6001600160a01b038082166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054929384939091608084019162000f04906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462000f32906200a086565b801562000f835780601f1062000f575761010080835404028352916020019162000f83565b820191906000526020600020905b81548152906001019060200180831162000f6557829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462000fae906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462000fdc906200a086565b80156200102d5780601f1062001001576101008083540402835291602001916200102d565b820191906000526020600020905b8154815290600101906020018083116200100f57829003601f168201915b5050505050815260200160018201805462001048906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462001076906200a086565b8015620010c75780601f106200109b57610100808354040283529160200191620010c7565b820191906000526020600020905b815481529060010190602001808311620010a957829003601f168201915b50505050508152602001600282018054620010e2906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462001110906200a086565b8015620011615780601f10620011355761010080835404028352916020019162001161565b820191906000526020600020905b8154815290600101906020018083116200114357829003601f168201915b505050505081526020016003820180546200117c906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620011aa906200a086565b8015620011fb5780601f10620011cf57610100808354040283529160200191620011fb565b820191906000526020600020905b815481529060010190602001808311620011dd57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b8154815260200190600101908083116200129a575050509190925250509051949350505050565b3361100014620012ed57604051630f22c43960e41b815261100060048201526024015b60405180910390fd5b6001600160a01b0380821660009081526043602090815260408083205484168084526041835281842082516101808101845281548716815260018201548716948101949094526002810154909516918301919091526003840154606083015260048401805491949160808401919062001366906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462001394906200a086565b8015620013e55780601f10620013b957610100808354040283529160200191620013e5565b820191906000526020600020905b815481529060010190602001808311620013c757829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462001410906200a086565b80601f01602080910402602001604051908101604052809291908181526020018280546200143e906200a086565b80156200148f5780601f1062001463576101008083540402835291602001916200148f565b820191906000526020600020905b8154815290600101906020018083116200147157829003601f168201915b50505050508152602001600182018054620014aa906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620014d8906200a086565b8015620015295780601f10620014fd5761010080835404028352916020019162001529565b820191906000526020600020905b8154815290600101906020018083116200150b57829003601f168201915b5050505050815260200160028201805462001544906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462001572906200a086565b8015620015c35780601f106200159757610100808354040283529160200191620015c3565b820191906000526020600020905b815481529060010190602001808311620015a557829003601f168201915b50505050508152602001600382018054620015de906200a086565b80601f01602080910402602001604051908101604052809291908181526020018280546200160c906200a086565b80156200165d5780601f1062001631576101008083540402835291602001916200165d565b820191906000526020600020905b8154815290600101906020018083116200163f57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620016fc575050509190925250505060408101519091506001600160a01b031615806200173957508060e001515b15620017f657604051611002903490600081818185875af1925050503d806000811462001783576040519150601f19603f3d011682016040523d82523d6000602084013e62001788565b606091505b505050816001600160a01b03167ffc8bff675087dd2da069cc3fb517b9ed001e19750c0865241a5542dba1ba170d604051620017e99060208082526011908201527024a72b20a624a22fab20a624a220aa27a960791b604082015260600190565b60405180910390a2505050565b60408181015160c0830151519151632f303ebb60e11b81526001600160401b0390921660048301526001600160a01b031690635e607d769034906024016000604051808303818588803b1580156200184d57600080fd5b505af115801562001862573d6000803e3d6000fd5b5050505050816001600160a01b03167fe34918ff1c7084970068b53fd71ad6d8b04e9f15d3886cbf006443e6cdc52ea634604051620018a391815260200190565b60405180910390a26040808201519051633041949b60e01b815261200591633041949b91620018d8919086906004016200a0bc565b600060405180830381600087803b158015620018f357600080fd5b505af115801562001908573d6000803e3d6000fd5b5050505050505b50565b33611001146200193a57604051630f22c43960e41b81526110016004820152602401620012e4565b60005462010000900460ff16156200196557604051631785c68160e01b815260040160405180910390fd5b6000604583836040516200197b9291906200a0d6565b908152604051908190036020019020546001600160a01b03169050620019a3603f8262008c39565b620019c15760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038116600090815260416020526040812090620019e962015180426200a0fc565b604a546000828152604b60205260409020549192501162001a1d5760405163bd52fcdb60e01b815260040160405180910390fd5b6000818152604b6020526040812080546001929062001a3e9084906200a11f565b909155505060405160469062001a5890879087906200a0d6565b90815260200160405180910390205460001415801562001aa9575042620151806046878760405162001a8c9291906200a0d6565b90815260200160405180910390205462001aa791906200a11f565b105b1562001ac857604051631898eb6b60e01b815260040160405180910390fd5b60008062001ad885600262008c5c565b915091508162001afb57604051631b919bb160e11b815260040160405180910390fd5b6002840154603c5460405163045bc4d160e41b815260048101919091526000916001600160a01b0316906345bc4d10906024016020604051808303816000875af115801562001b4e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b7491906200a135565b905062001b82858362008ce4565b856001600160a01b03167f6e9a2ee7aee95665e3a774a212eb11441b217e3e4656ab9563793094689aabb28383600260405162001bc2939291906200a14f565b60405180910390a26002850154604051633041949b60e01b815261200591633041949b9162001c00916001600160a01b0316908a906004016200a0bc565b600060405180830381600087803b15801562001c1b57600080fd5b505af115801562001c30573d6000803e3d6000fd5b505050505050505050505050565b6060336120001462001c6857604051630f22c43960e41b81526120006004820152602401620012e4565b60005462010000900460ff161562001c9357604051631785c68160e01b815260040160405180910390fd5b6034805460ff1916600117905560405162461bcd60e51b815260206004820152600a60248201526919195c1c9958d85d195960b21b6044820152606401620012e4565b60005462010000900460ff161562001d0157604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562001d335760405163b1d02c3d60e01b815260040160405180910390fd5b62001d3d62008dd8565b62001d4a603f8262008c39565b62001d685760405163056e881160e01b815260040160405180910390fd5b62001d7262008e23565b600082900362001d9557604051636490ffd360e01b815260040160405180910390fd5b600062001da162008dd8565b6001600160a01b0381166000908152604f602052604090208054604e54929350909162001dcf86836200a11f565b111562001def5760405163091af98560e21b815260040160405180910390fd5b60005b8581101562001ed557600087878381811062001e125762001e126200a18a565b905060200201350362001e3857604051636490ffd360e01b815260040160405180910390fd5b600062001e478260016200a11f565b90505b8681101562001ebf5787878281811062001e685762001e686200a18a565b9050602002013588888481811062001e845762001e846200a18a565b905060200201350362001eaa57604051632205e3c760e11b815260040160405180910390fd5b8062001eb6816200a1a0565b91505062001e4a565b508062001ecc816200a1a0565b91505062001df2565b5060005b8581101562001f745760005b8281101562001f5e5783818154811062001f035762001f036200a18a565b906000526020600020015488888481811062001f235762001f236200a18a565b905060200201350362001f4957604051632205e3c760e11b815260040160405180910390fd5b8062001f55816200a1a0565b91505062001ee5565b508062001f6b816200a1a0565b91505062001ed9565b5060005b8581101562001908578287878381811062001f975762001f976200a18a565b835460018101855560009485526020948590209190940292909201359190920155506001600160a01b0384167f7c4ff4c9a343a2daef608f3b5a91016e994a15fc0ef8611109e4f45823249f2988888481811062001ff95762001ff96200a18a565b905060200201356040516200201091815260200190565b60405180910390a28062002024816200a1a0565b91505062001f78565b6000816200203d603f8262008c39565b6200205b5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038084166000908152604160205260409020600d01541691505b50919050565b60608082806001600160401b03811115620020a157620020a16200985f565b604051908082528060200260200182016040528015620020cb578160200160208202803683370190505b509250806001600160401b03811115620020e957620020e96200985f565b6040519080825280602002602001820160405280156200211e57816020015b6060815260200190600190039081620021085790505b50915060005b81811015620026475760008686838181106200214457620021446200a18a565b90506020020160208101906200215b9190620096f0565b6001600160a01b03808216600090815260416020908152604080832081516101808101835281548616815260018201548616938101939093526002810154909416908201526003830154606082015260048301805494955091939092916080840191620021c8906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620021f6906200a086565b8015620022475780601f106200221b5761010080835404028352916020019162002247565b820191906000526020600020905b8154815290600101906020018083116200222957829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462002272906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620022a0906200a086565b8015620022f15780601f10620022c557610100808354040283529160200191620022f1565b820191906000526020600020905b815481529060010190602001808311620022d357829003601f168201915b505050505081526020016001820180546200230c906200a086565b80601f01602080910402602001604051908101604052809291908181526020018280546200233a906200a086565b80156200238b5780601f106200235f576101008083540402835291602001916200238b565b820191906000526020600020905b8154815290600101906020018083116200236d57829003601f168201915b50505050508152602001600282018054620023a6906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620023d4906200a086565b8015620024255780601f10620023f95761010080835404028352916020019162002425565b820191906000526020600020905b8154815290600101906020018083116200240757829003601f168201915b5050505050815260200160038201805462002440906200a086565b80601f01602080910402602001604051908101604052809291908181526020018280546200246e906200a086565b8015620024bf5780601f106200249357610100808354040283529160200191620024bf565b820191906000526020600020905b815481529060010190602001808311620024a157829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b8154815260200190600101908083116200255e57505050505081525050905080600001518684815181106200259757620025976200a18a565b6001600160a01b039283166020918202929092018101919091529083166000908152604f8252604090819020805482518185028101850190935280835291929091908301828280156200260a57602002820191906000526020600020905b815481526020019060010190808311620025f5575b50505050508584815181106200262457620026246200a18a565b6020026020010181905250505080806200263e906200a1a0565b91505062002124565b50505b9250929050565b600054630100000090046001600160a01b0316331462002684576040516306fbb1e360e01b815260040160405180910390fd5b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f7fd26be6fc92aff63f1f4409b2b2ddeb272a888031d7f55ec830485ec61941869190a250565b60005462010000900460ff1615620026fe57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620027305760405163b1d02c3d60e01b815260040160405180910390fd5b806200273e603f8262008c39565b6200275c5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0382166000908152604160205260409020600a81015460ff166200279a57604051634b6b857d60e01b815260040160405180910390fd5b6036546002820154604051630913db4760e01b81526001600160a01b03868116600483015290911690630913db4790602401602060405180830381865afa158015620027ea573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200281091906200a135565b101562002830576040516317b204bf60e11b815260040160405180910390fd5b4281600b01541115620028565760405163170cb76760e21b815260040160405180910390fd5b600a8101805460ff1916905560498054600191906000906200287a9084906200a1bc565b90915550506040516001600160a01b038416907f9390b453426557da5ebdc31f19a37753ca04addf656d32f35232211bb2af3f1990600090a2505050565b60005462010000900460ff1615620028e357604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620029155760405163b1d02c3d60e01b815260040160405180910390fd5b6200291f62008e36565b6200292c603f8262008c39565b6200294a5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0382166200297257604051636520611b60e11b815260040160405180910390fd5b6001600160a01b038281166000908152604360205260409020541615620029ac57604051631e6f587560e11b815260040160405180910390fd5b6000620029b862008e36565b6001600160a01b0381166000908152604160205260409020600c810154919250904290620029eb9062015180906200a11f565b111562002a0b57604051631f92cdbd60e11b815260040160405180910390fd5b80546001600160a01b039081166000908152604460209081526040808320429081905585548986166001600160a01b031991821681178855600c88019290925581855260439093528184208054958816959093168517909255519092917f6e4e747ca35203f16401c69805c7dd52fff67ef60b0ebc5c7fe16890530f223591a350505050565b3362002a9f603f8262008c39565b62002abd5760405163056e881160e01b815260040160405180910390fd5b60005462010000900460ff161562002ae857604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562002b1a5760405163b1d02c3d60e01b815260040160405180910390fd5b6001600160a01b038281166000908152604d6020526040902054161562002b545760405163bebdc75760e01b815260040160405180910390fd5b62002b61603f8362008c39565b1562002b805760405163bebdc75760e01b815260040160405180910390fd5b336000818152604160205260409020600d01546001600160a01b03908116908416810362002bc15760405163bebdc75760e01b815260040160405180910390fd5b6001600160a01b0381161562002bf8576001600160a01b0381166000908152604d6020526040902080546001600160a01b03191690555b6001600160a01b038281166000908152604160205260409020600d0180546001600160a01b03191691861691821790551562002c5d576001600160a01b038481166000908152604d6020526040902080546001600160a01b0319169184169190911790555b836001600160a01b0316816001600160a01b0316836001600160a01b03167fcbb728765de145e99c00e8ae32a325231e850359b7b8a6da3b84d672ab3f1d0a60405160405180910390a450505050565b600054630100000090046001600160a01b0316331462002ce0576040516306fbb1e360e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020526040808220805460ff19169055517fe0db3499b7fdc3da4cddff5f45d694549c19835e7f719fb5606d3ad1a5de40119190a250565b60005462010000900460ff161562002d5457604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562002d865760405163b1d02c3d60e01b815260040160405180910390fd5b8162002d94603f8262008c39565b62002db25760405163056e881160e01b815260040160405180910390fd5b8160000362002dd457604051639811e0c760e01b815260040160405180910390fd5b6001600160a01b038084166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054339491608084019162002e3c906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462002e6a906200a086565b801562002ebb5780601f1062002e8f5761010080835404028352916020019162002ebb565b820191906000526020600020905b81548152906001019060200180831162002e9d57829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462002ee6906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462002f14906200a086565b801562002f655780601f1062002f395761010080835404028352916020019162002f65565b820191906000526020600020905b81548152906001019060200180831162002f4757829003601f168201915b5050505050815260200160018201805462002f80906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462002fae906200a086565b801562002fff5780601f1062002fd35761010080835404028352916020019162002fff565b820191906000526020600020905b81548152906001019060200180831162002fe157829003601f168201915b505050505081526020016002820180546200301a906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462003048906200a086565b8015620030995780601f106200306d5761010080835404028352916020019162003099565b820191906000526020600020905b8154815290600101906020018083116200307b57829003601f168201915b50505050508152602001600382018054620030b4906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620030e2906200a086565b8015620031335780601f10620031075761010080835404028352916020019162003133565b820191906000526020600020905b8154815290600101906020018083116200311557829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620031d2575050509190925250505060408082015190516326ccee8b60e11b81526001600160a01b0385811660048301526024820188905292935060009290911690634d99dd16906044016020604051808303816000875af11580156200324c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200327291906200a135565b9050826001600160a01b0316866001600160a01b03167f3aace7340547de7b9156593a7652dc07ee900cea3fd8f82cb6c9d38b408298028784604051620032c3929190918252602082015260400190565b60405180910390a3856001600160a01b0316836001600160a01b031603620032f057620032f08662008e77565b6040808301519051633041949b60e01b815261200591633041949b916200331d919087906004016200a0bc565b600060405180830381600087803b1580156200333857600080fd5b505af11580156200334d573d6000803e3d6000fd5b50505050505050505050565b60005462010000900460ff16156200338457604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620033b65760405163b1d02c3d60e01b815260040160405180910390fd5b83620033c4603f8262008c39565b620033e25760405163056e881160e01b815260040160405180910390fd5b83620033f0603f8262008c39565b6200340e5760405163056e881160e01b815260040160405180910390fd5b6034805460ff1916600117905560008490036200343e57604051639811e0c760e01b815260040160405180910390fd5b846001600160a01b0316866001600160a01b031603620034715760405163f0e3e62960e01b815260040160405180910390fd5b6001600160a01b0380871660009081526041602090815260408083208151610180810183528154861681526001820154861693810193909352600281015490941690820152600383015460608201526004830180543394916080840191620034d9906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462003507906200a086565b8015620035585780601f106200352c5761010080835404028352916020019162003558565b820191906000526020600020905b8154815290600101906020018083116200353a57829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462003583906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620035b1906200a086565b8015620036025780601f10620035d65761010080835404028352916020019162003602565b820191906000526020600020905b815481529060010190602001808311620035e457829003601f168201915b505050505081526020016001820180546200361d906200a086565b80601f01602080910402602001604051908101604052809291908181526020018280546200364b906200a086565b80156200369c5780601f1062003670576101008083540402835291602001916200369c565b820191906000526020600020905b8154815290600101906020018083116200367e57829003601f168201915b50505050508152602001600282018054620036b7906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620036e5906200a086565b8015620037365780601f106200370a5761010080835404028352916020019162003736565b820191906000526020600020905b8154815290600101906020018083116200371857829003601f168201915b5050505050815260200160038201805462003751906200a086565b80601f01602080910402602001604051908101604052809291908181526020018280546200377f906200a086565b8015620037d05780601f10620037a457610100808354040283529160200191620037d0565b820191906000526020600020905b815481529060010190602001808311620037b257829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b8154815260200190600101908083116200386f57505050919092525050506001600160a01b03808916600090815260416020908152604080832081516101808101835281548616815260018201548616938101939093526002810154909416908201526003830154606082015260048301805494955091939092916080840191620038fa906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462003928906200a086565b8015620039795780601f106200394d5761010080835404028352916020019162003979565b820191906000526020600020905b8154815290600101906020018083116200395b57829003601f168201915b5050505050815260200160058201604051806080016040529081600082018054620039a4906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620039d2906200a086565b801562003a235780601f10620039f75761010080835404028352916020019162003a23565b820191906000526020600020905b81548152906001019060200180831162003a0557829003601f168201915b5050505050815260200160018201805462003a3e906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462003a6c906200a086565b801562003abd5780601f1062003a915761010080835404028352916020019162003abd565b820191906000526020600020905b81548152906001019060200180831162003a9f57829003601f168201915b5050505050815260200160028201805462003ad8906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462003b06906200a086565b801562003b575780601f1062003b2b5761010080835404028352916020019162003b57565b820191906000526020600020905b81548152906001019060200180831162003b3957829003601f168201915b5050505050815260200160038201805462003b72906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462003ba0906200a086565b801562003bf15780601f1062003bc55761010080835404028352916020019162003bf1565b820191906000526020600020905b81548152906001019060200180831162003bd357829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b81548152602001906001019080831162003c905750505050508152505090508060e00151801562003cd35750876001600160a01b0316836001600160a01b031614155b1562003cf257604051636468920360e01b815260040160405180910390fd5b60408083015190516352e82ce560e11b81526001600160a01b038581166004830152602482018a9052600092169063a5d059ca906044016020604051808303816000875af115801562003d49573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003d6f91906200a135565b905060375481101562003d955760405163dc6f0bdd60e01b815260040160405180910390fd5b896001600160a01b0316846001600160a01b031614801562003e2a57506036546040808501519051630913db4760e01b81526001600160a01b038d8116600483015290911690630913db4790602401602060405180830381865afa15801562003e02573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003e2891906200a135565b105b1562003e49576040516317b204bf60e11b815260040160405180910390fd5b6000620186a0603a548362003e5f91906200a1d2565b62003e6b91906200a0fc565b9050600083604001516001600160a01b03168260405160006040518083038185875af1925050503d806000811462003ec0576040519150601f19603f3d011682016040523d82523d6000602084013e62003ec5565b606091505b505090508062003ee8576040516312171d8360e31b815260040160405180910390fd5b62003ef482846200a1bc565b60408086015190516317066a5760e21b81526001600160a01b03898116600483015292955060009290911690635c19a95c90869060240160206040518083038185885af115801562003f4a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062003f7191906200a135565b9050866001600160a01b03168c6001600160a01b03168e6001600160a01b03167ffdac6e81913996d95abcc289e90f2d8bd235487ce6fe6f821e7d21002a1915b48e858960405162003fd6939291909283526020830191909152604082015260600190565b60405180910390a46040805160028082526060820183526000926020830190803683370190505090508660400151816000815181106200401a576200401a6200a18a565b60200260200101906001600160a01b031690816001600160a01b0316815250508560400151816001815181106200405557620040556200a18a565b6001600160a01b0390921660209283029190910190910152604051634484077560e01b815261200590634484077590620040969084908c906004016200a1ec565b600060405180830381600087803b158015620040b157600080fd5b505af1158015620040c6573d6000803e3d6000fd5b505050508a1562004138576120056001600160a01b031663e5ed5b1e898f6040518363ffffffff1660e01b8152600401620041039291906200a0bc565b600060405180830381600087803b1580156200411e57600080fd5b505af115801562004133573d6000803e3d6000fd5b505050505b50506034805460ff19169055505050505050505050505050565b60005462010000900460ff16156200417d57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620041af5760405163b1d02c3d60e01b815260040160405180910390fd5b620041b962008e36565b620041c6603f8262008c39565b620041e45760405163056e881160e01b815260040160405180910390fd5b6000620041f062008e36565b6001600160a01b0381166000908152604160205260409020600c810154919250904290620042239062015180906200a11f565b11156200424357604051631f92cdbd60e11b815260040160405180910390fd5b60098101546001600160401b03600160401b909104811690851611156200427d5760405163dc81db8560e01b815260040160405180910390fd5b60098101546000906001600160401b039081169086161015620042bb576009820154620042b59086906001600160401b03166200a218565b620042d5565b6009820154620042d5906001600160401b0316866200a218565b60098301546001600160401b039182169250600160801b900416811115620043105760405163dc81db8560e01b815260040160405180910390fd5b60098201805467ffffffffffffffff19166001600160401b03871690811790915542600c8401556040519081526001600160a01b038416907f78cdd96edf59e09cfd4d26ef6ef6c92d166effe6a40970c54821206d541932cb9060200160405180910390a25050505050565b606080606060006200438f603f62008f95565b90508086101562004a18578415620043a85784620043aa565b805b9450600085620043bb88846200a1bc565b11620043d357620043cd87836200a1bc565b620043d5565b855b9050806001600160401b03811115620043f257620043f26200985f565b6040519080825280602002602001820160405280156200441c578160200160208202803683370190505b509450806001600160401b038111156200443a576200443a6200985f565b60405190808252806020026020018201604052801562004464578160200160208202803683370190505b509350806001600160401b038111156200448257620044826200985f565b604051908082528060200260200182016040528015620044b757816020015b6060815260200190600190039081620044a15790505b50925060005b8181101562004a15576000620044e1620044d8838b6200a11f565b603f9062008fa0565b6001600160a01b038082166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054949550919390929160808401916200454e906200a086565b80601f01602080910402602001604051908101604052809291908181526020018280546200457c906200a086565b8015620045cd5780601f10620045a157610100808354040283529160200191620045cd565b820191906000526020600020905b815481529060010190602001808311620045af57829003601f168201915b5050505050815260200160058201604051806080016040529081600082018054620045f8906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462004626906200a086565b8015620046775780601f106200464b5761010080835404028352916020019162004677565b820191906000526020600020905b8154815290600101906020018083116200465957829003601f168201915b5050505050815260200160018201805462004692906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620046c0906200a086565b8015620047115780601f10620046e55761010080835404028352916020019162004711565b820191906000526020600020905b815481529060010190602001808311620046f357829003601f168201915b505050505081526020016002820180546200472c906200a086565b80601f01602080910402602001604051908101604052809291908181526020018280546200475a906200a086565b8015620047ab5780601f106200477f57610100808354040283529160200191620047ab565b820191906000526020600020905b8154815290600101906020018083116200478d57829003601f168201915b50505050508152602001600382018054620047c6906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620047f4906200a086565b8015620048455780601f10620048195761010080835404028352916020019162004845565b820191906000526020600020905b8154815290600101906020018083116200482757829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620048e457505050505081525050905080600001518884815181106200491d576200491d6200a18a565b60200260200101906001600160a01b031690816001600160a01b0316815250508060e00151620049b65780604001516001600160a01b03166315d1f8986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200498a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620049b091906200a135565b620049b9565b60005b878481518110620049ce57620049ce6200a18a565b6020026020010181815250508060800151868481518110620049f457620049f46200a18a565b602002602001018190525050508062004a0d906200a1a0565b9050620044bd565b50505b92959194509250565b60005462010000900460ff161562004a4c57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562004a7e5760405163b1d02c3d60e01b815260040160405180910390fd5b3362004a8c603f8262008c39565b1562004aab57604051635f28f62b60e01b815260040160405180910390fd5b6001600160a01b038181166000908152604d6020526040902054161562004ae557604051631a0a9b9f60e21b815260040160405180910390fd5b6001600160a01b03888116600090815260436020526040902054161562004b1f57604051631e6f587560e11b815260040160405180910390fd5b60006001600160a01b03166045888860405162004b3e9291906200a0d6565b908152604051908190036020019020546001600160a01b03161462004b76576040516311fdb94760e01b815260040160405180910390fd5b600062004b8483806200a242565b60405160200162004b979291906200a0d6565b60408051601f1981840301815291815281516020928301206000818152604290935291205490915060ff161562004be15760405163c0bf414360e01b815260040160405180910390fd5b600062004bf7670de0b6b3a7640000346200a1bc565b905060365481101562004c1d576040516317b204bf60e11b815260040160405180910390fd5b6001600160a01b038a1662004c4557604051636520611b60e11b815260040160405180910390fd5b61138862004c5a604087016020880162009b7e565b6001600160401b0316118062004ca0575062004c7d604086016020870162009b7e565b6001600160401b031662004c95602087018762009b7e565b6001600160401b0316115b8062004cdf575062004cb9604086016020870162009b7e565b6001600160401b031662004cd4606087016040880162009b7e565b6001600160401b0316115b1562004cfe5760405163dc81db8560e01b815260040160405180910390fd5b62004d4962004d0e85806200a242565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062008fae92505050565b62004d6757604051635dba5ad760e01b815260040160405180910390fd5b62004d76838a8a8a8a62009150565b62004d9457604051631647e3cb60e11b815260040160405180910390fd5b600062004de28462004da787806200a242565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200928092505050565b905062004df1603f8562009381565b506000838152604260209081526040808320805460ff191660019081179091556001600160a01b0380891680865260419094529190932080548f83166001600160a01b03199182161782559381018054851690931790925560028201805491851691909316179091554260038201556004810162004e718b8d836200a2ea565b50856005820162004e8382826200a3b2565b508790506009820162004e9782826200a4eb565b505042600c8201556001600160a01b038c81166000908152604360205260409081902080546001600160a01b0319169288169290921790915551859060459062004ee5908e908e906200a0d6565b908152602001604051809103902060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316856001600160a01b03168d6001600160a01b03167faecd9fb95e79c75a3a1de93362c6be5fe6ab65770d8614be583884161cd8228d8e8e60405162004f689291906200a5bb565b60405180910390a460408051848152602081018590526001600160a01b0387169182917f24d7bda8602b916d64417f0dbfe2e2e88ec9b1157bd9f596dfdb91ba26624e04910160405180910390a360408051670de0b6b3a7640000808252602082015261dead916001600160a01b038816917f24d7bda8602b916d64417f0dbfe2e2e88ec9b1157bd9f596dfdb91ba26624e04910160405180910390a3604051633041949b60e01b815261200590633041949b906200502e90859089906004016200a0bc565b600060405180830381600087803b1580156200504957600080fd5b505af11580156200505e573d6000803e3d6000fd5b50505050505050505050505050505050565b6040805160608101825260008082526020820181905291810191909152816200509b603f8262008c39565b620050b95760405163056e881160e01b815260040160405180910390fd5b50506001600160a01b031660009081526041602090815260409182902082516060810184526009909101546001600160401b038082168352600160401b8204811693830193909352600160801b90049091169181019190915290565b6001600160a01b0380821660009081526041602090815260408083208151610180810183528154861681526001820154861693810193909352600281015490941690820152600383015460608281019190915260048401805491949160808401919062005182906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620051b0906200a086565b8015620052015780601f10620051d55761010080835404028352916020019162005201565b820191906000526020600020905b815481529060010190602001808311620051e357829003601f168201915b50505050508152602001600582016040518060800160405290816000820180546200522c906200a086565b80601f01602080910402602001604051908101604052809291908181526020018280546200525a906200a086565b8015620052ab5780601f106200527f57610100808354040283529160200191620052ab565b820191906000526020600020905b8154815290600101906020018083116200528d57829003601f168201915b50505050508152602001600182018054620052c6906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620052f4906200a086565b8015620053455780601f10620053195761010080835404028352916020019162005345565b820191906000526020600020905b8154815290600101906020018083116200532757829003601f168201915b5050505050815260200160028201805462005360906200a086565b80601f01602080910402602001604051908101604052809291908181526020018280546200538e906200a086565b8015620053df5780601f10620053b357610100808354040283529160200191620053df565b820191906000526020600020905b815481529060010190602001808311620053c157829003601f168201915b50505050508152602001600382018054620053fa906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462005428906200a086565b8015620054795780601f106200544d5761010080835404028352916020019162005479565b820191906000526020600020905b8154815290600101906020018083116200545b57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620055185750505091909252505050608001519392505050565b33611001146200556957604051630f22c43960e41b81526110016004820152602401620012e4565b6001600160a01b038082166000908152604360205260409020541662005591603f8262008c39565b620055af5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038181166000908152604160205260408082206002810154603b54925163045bc4d160e41b81526004810193909352909316906345bc4d10906024016020604051808303816000875af115801562005612573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200563891906200a135565b90506000603d54426200564c91906200a11f565b90506200565a838262008ce4565b836001600160a01b03167f6e9a2ee7aee95665e3a774a212eb11441b217e3e4656ab9563793094689aabb2828460016040516200569a939291906200a14f565b60405180910390a26002830154604051633041949b60e01b815261200591633041949b91620056d8916001600160a01b03169088906004016200a0bc565b600060405180830381600087803b158015620056f357600080fd5b505af115801562005708573d6000803e3d6000fd5b505050505050505050565b600054610100900460ff1615808015620057345750600054600160ff909116105b80620057505750303b15801562005750575060005460ff166001145b620057b55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620012e4565b6000805460ff191660011790558015620057d9576000805461ff0019166101001790555b334114620057fa5760405163022d8c9560e31b815260040160405180910390fd5b3a156200581a576040516383f1b1d360e01b815260040160405180910390fd5b611388603555686c6b935b8bbd400000603655670de0b6b3a7640000603755600960385562093a806039556002603a819055678ac7230489e80000603b55680ad78ebc5ac6200000603c556202a300603d5562069780603e55604a55620058957330151da466ec8ab345bef3d6983023e050fb067362009398565b80156200190f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b33612000146200590657604051630f22c43960e41b81526120006004820152602401620012e4565b60405162461bcd60e51b815260206004820152600a60248201526919195c1c9958d85d195960b21b6044820152606401620012e4565b600054630100000090046001600160a01b031633146200596f576040516306fbb1e360e01b815260040160405180910390fd5b60005462010000900460ff16156200599a57604051631785c68160e01b815260040160405180910390fd5b6000805462ff00001916620100001781556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e7529190a1565b6000620059e3603f8462008c39565b62005a015760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0383811660009081526041602052604090819020600201549051636bbf224960e01b815260048101859052911690636bbf2249906024015b602060405180830381865afa15801562005a5e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005a8491906200a135565b90505b92915050565b60005462010000900460ff161562005ab857604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562005aea5760405163b1d02c3d60e01b815260040160405180910390fd5b8162005af8603f8262008c39565b62005b165760405163056e881160e01b815260040160405180910390fd5b603754349081101562005b3c5760405163dc6f0bdd60e01b815260040160405180910390fd5b6001600160a01b038085166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054339491608084019162005ba4906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462005bd2906200a086565b801562005c235780601f1062005bf75761010080835404028352916020019162005c23565b820191906000526020600020905b81548152906001019060200180831162005c0557829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462005c4e906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462005c7c906200a086565b801562005ccd5780601f1062005ca15761010080835404028352916020019162005ccd565b820191906000526020600020905b81548152906001019060200180831162005caf57829003601f168201915b5050505050815260200160018201805462005ce8906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462005d16906200a086565b801562005d675780601f1062005d3b5761010080835404028352916020019162005d67565b820191906000526020600020905b81548152906001019060200180831162005d4957829003601f168201915b5050505050815260200160028201805462005d82906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462005db0906200a086565b801562005e015780601f1062005dd55761010080835404028352916020019162005e01565b820191906000526020600020905b81548152906001019060200180831162005de357829003601f168201915b5050505050815260200160038201805462005e1c906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462005e4a906200a086565b801562005e9b5780601f1062005e6f5761010080835404028352916020019162005e9b565b820191906000526020600020905b81548152906001019060200180831162005e7d57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b81548152602001906001019080831162005f3a5750505050508152505090508060e00151801562005f7d5750856001600160a01b0316826001600160a01b031614155b1562005f9c57604051636468920360e01b815260040160405180910390fd5b60408082015190516317066a5760e21b81526001600160a01b0384811660048301526000921690635c19a95c90869060240160206040518083038185885af115801562005fed573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906200601491906200a135565b9050826001600160a01b0316876001600160a01b03167f24d7bda8602b916d64417f0dbfe2e2e88ec9b1157bd9f596dfdb91ba26624e04838760405162006065929190918252602082015260400190565b60405180910390a36040808301519051633041949b60e01b815261200591633041949b916200609a919087906004016200a0bc565b600060405180830381600087803b158015620060b557600080fd5b505af1158015620060ca573d6000803e3d6000fd5b50505050851562001908576040516372f6ad8f60e11b81526120059063e5ed5b1e90620060fe9086908b906004016200a0bc565b600060405180830381600087803b1580156200611957600080fd5b505af11580156200612e573d6000803e3d6000fd5b5050505050505050505050565b60005462010000900460ff16156200616657604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620061985760405163b1d02c3d60e01b815260040160405180910390fd5b620061a262008dd8565b620061af603f8262008c39565b620061cd5760405163056e881160e01b815260040160405180910390fd5b6000620061d962008dd8565b6001600160a01b0381166000908152604f6020526040812080549293509190859003620062b05760005b818110156200628457836001600160a01b03167f08e60c1b84aab23d99a7262015e647d5ffd6c6e08f78205e1df6774c48e1427a8483815481106200624c576200624c6200a18a565b90600052602060002001546040516200626791815260200190565b60405180910390a2806200627b816200a1a0565b91505062006203565b506001600160a01b0383166000908152604f60205260408120620062a8916200968a565b505050505050565b60005b858110156200640e576000878783818110620062d357620062d36200a18a565b90506020020135905060005b83811015620063f65781858281548110620062fe57620062fe6200a18a565b906000526020600020015403620063e157846200631d6001866200a1bc565b815481106200633057620063306200a18a565b90600052602060002001548582815481106200635057620063506200a18a565b9060005260206000200181905550848054806200637157620063716200a5d1565b60019003818190600052602060002001600090559055838062006394906200a5e7565b945050856001600160a01b03167f08e60c1b84aab23d99a7262015e647d5ffd6c6e08f78205e1df6774c48e1427a83604051620063d391815260200190565b60405180910390a2620063f6565b80620063ed816200a1a0565b915050620062df565b5050808062006405906200a1a0565b915050620062b3565b508154600003620062a8576001600160a01b0383166000908152604f60205260408120620062a8916200968a565b505050565b6200646d6040518060800160405280606081526020016060815260200160608152602001606081525090565b816200647b603f8262008c39565b620064995760405163056e881160e01b815260040160405180910390fd5b6001600160a01b03831660009081526041602052604090819020815160808101909252600501805482908290620064d0906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620064fe906200a086565b80156200654f5780601f1062006523576101008083540402835291602001916200654f565b820191906000526020600020905b8154815290600101906020018083116200653157829003601f168201915b505050505081526020016001820180546200656a906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462006598906200a086565b8015620065e95780601f10620065bd57610100808354040283529160200191620065e9565b820191906000526020600020905b815481529060010190602001808311620065cb57829003601f168201915b5050505050815260200160028201805462006604906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462006632906200a086565b8015620066835780601f10620066575761010080835404028352916020019162006683565b820191906000526020600020905b8154815290600101906020018083116200666557829003601f168201915b505050505081526020016003820180546200669e906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620066cc906200a086565b80156200671d5780601f10620066f1576101008083540402835291602001916200671d565b820191906000526020600020905b815481529060010190602001808311620066ff57829003601f168201915b505050505081525050915050919050565b60005462010000900460ff16156200675957604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff16156200678b5760405163b1d02c3d60e01b815260040160405180910390fd5b62006797828262009431565b5050565b3361100714620067c357604051630f22c43960e41b81526110076004820152602401620012e4565b620068306040518060400160405280601081526020016f1d1c985b9cd9995c91d85cd31a5b5a5d60821b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b15620068eb5760208114620068625783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f8401819004810282018101909252828152600091620068a59185858083850183828082843760009201919091525092939250506200959a9050565b90506108fc811080620068b9575061271081115b15620068e25784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b60355562007708565b6200695c6040518060400160405280601481526020017336b4b729b2b6332232b632b3b0ba34b7b721272160611b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b1562006a2657602081146200698e5783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f8401819004810282018101909252828152600091620069d19185858083850183828082843760009201919091525092939250506200959a9050565b9050683635c9adc5dea00000811080620069f4575069152d02c7e14af680000081115b1562006a1d5784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b60365562007708565b62006a99604051806040016040528060168152602001756d696e44656c65676174696f6e424e424368616e676560501b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b1562006b60576020811462006acb5783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f840181900481028201810190925282815260009162006b0e9185858083850183828082843760009201919091525092939250506200959a9050565b905067016345785d8a000081108062006b2e5750678ac7230489e8000081115b1562006b575784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b60375562007708565b62006bd1604051806040016040528060148152602001736d6178456c656374656456616c696461746f727360601b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b1562006c89576020811462006c035783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f840181900481028201810190925282815260009162006c469185858083850183828082843760009201919091525092939250506200959a9050565b905080158062006c5757506101f481115b1562006c805784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b60385562007708565b62006cf26040518060400160405280600c81526020016b1d5b989bdb9914195c9a5bd960a21b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b1562006daf576020811462006d245783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f840181900481028201810190925282815260009162006d679185858083850183828082843760009201919091525092939250506200959a9050565b90506203f48081108062006d7d575062278d0081115b1562006da65784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b60395562007708565b62006e1d60405180604001604052806011815260200170726564656c65676174654665655261746560781b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b1562006eca576020811462006e4f5783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f840181900481028201810190925282815260009162006e929185858083850183828082843760009201919091525092939250506200959a9050565b9050606481111562006ec15784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b603a5562007708565b62006f3a60405180604001604052806013815260200172191bdddb9d1a5b5954db185cda105b5bdd5b9d606a1b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b1562006ffb576020811462006f6c5783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f840181900481028201810190925282815260009162006faf9185858083850183828082843760009201919091525092939250506200959a9050565b9050674563918244f4000081108062006fc95750603c5481115b1562006ff25784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b603b5562007708565b620070696040518060400160405280601181526020017019995b1bdb9e54db185cda105b5bdd5b9d607a1b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b156200712c57602081146200709b5783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f8401819004810282018101909252828152600091620070de9185858083850183828082843760009201919091525092939250506200959a9050565b905068056bc75e2d63100000811080620070fa5750603b548111155b15620071235784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b603c5562007708565b620071996040518060400160405280601081526020016f646f776e74696d654a61696c54696d6560801b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b15620072565760208114620071cb5783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f84018190048102820181019092528281526000916200720e9185858083850183828082843760009201919091525092939250506200959a9050565b90506202a300811080620072245750603e548110155b156200724d5784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b603d5562007708565b620072c16040518060400160405280600e81526020016d66656c6f6e794a61696c54696d6560901b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b156200737e5760208114620072f35783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f8401819004810282018101909252828152600091620073369185858083850183828082843760009201919091525092939250506200959a9050565b9050620d2f008110806200734c5750603d548111155b15620073755784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b603e5562007708565b620073f86040518060400160405280601c81526020017f6d617846656c6f6e794265747765656e42726561746865426c6f636b0000000081525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b15620074a457602081146200742a5783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f84018190048102820181019092528281526000916200746d9185858083850183828082843760009201919091525092939250506200959a9050565b9050806000036200749b5784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b604a5562007708565b620075126040518060400160405280601181526020017039ba30b5b2a43ab1283937ba32b1ba37b960791b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b15620075d25760148114620075445783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b60006200758c601484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200959a9050565b90506001600160a01b038116620075c05784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b620075cb816200959f565b5062007708565b620076396040518060400160405280600a8152602001696d61784e6f646549447360b01b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b15620076e557602081146200766b5783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f8401819004810282018101909252828152600091620076ae9185858083850183828082843760009201919091525092939250506200959a9050565b905080600003620076dc5784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b604e5562007708565b838383836040516325ee20d560e21b8152600401620012e494939291906200a601565b7ff1ce9b2cbf50eeb05769a29e2543fd350cab46894a7dd9978a12d534bb20e633848484846040516200773f94939291906200a601565b60405180910390a150505050565b60005462010000900460ff16156200777857604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620077aa5760405163b1d02c3d60e01b815260040160405180910390fd5b816000816001600160401b03811115620077c857620077c86200985f565b604051908082528060200260200182016040528015620077f2578160200160208202803683370190505b5090506000805b83811015620078f0576200783b8787838181106200781b576200781b6200a18a565b9050602002016020810190620078329190620096f0565b603f9062008c39565b620078595760405163056e881160e01b815260040160405180910390fd5b604160008888848181106200787257620078726200a18a565b9050602002016020810190620078899190620096f0565b6001600160a01b0390811682526020820192909252604001600020600201548451911692508290849083908110620078c557620078c56200a18a565b6001600160a01b0390921660209283029190910190910152620078e8816200a1a0565b9050620077f9565b50604051634484077560e01b8152612005906344840775906200331d90859088906004016200a1ec565b60608060006200792b603f62008f95565b90508085101562007aef57831562007944578362007946565b805b93506000846200795787846200a1bc565b116200796f576200796986836200a1bc565b62007971565b845b9050806001600160401b038111156200798e576200798e6200985f565b604051908082528060200260200182016040528015620079b8578160200160208202803683370190505b509350806001600160401b03811115620079d657620079d66200985f565b60405190808252806020026020018201604052801562007a00578160200160208202803683370190505b50925060005b8181101562007aec5762007a1f620044d882896200a11f565b85828151811062007a345762007a346200a18a565b60200260200101906001600160a01b031690816001600160a01b0316815250506041600086838151811062007a6d5762007a6d6200a18a565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060020160009054906101000a90046001600160a01b031684828151811062007ac15762007ac16200a18a565b6001600160a01b039092166020928302919091019091015262007ae4816200a1a0565b905062007a06565b50505b9250925092565b60008162007b06603f8262008c39565b62007b245760405163056e881160e01b815260040160405180910390fd5b50506001600160a01b03166000908152604160205260409020600c015490565b336110011462007b6c57604051630f22c43960e41b81526110016004820152602401620012e4565b60005462010000900460ff161562007b9757604051631785c68160e01b815260040160405180910390fd5b6001600160a01b038082166000908152604360205260409020541662007bbf603f8262008c39565b62007bdd5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b03811660009081526041602052604081209062007c0562015180426200a0fc565b604a546000828152604b60205260409020549192501162007c395760405163bd52fcdb60e01b815260040160405180910390fd5b6000818152604b6020526040812080546001929062007c5a9084906200a11f565b90915550506001600160a01b0384166000908152604460205260409020541580159062007caf57506001600160a01b038416600090815260446020526040902054429062007cad9062015180906200a11f565b105b1562007cce576040516330abb81d60e21b815260040160405180910390fd5b60008062007cde85600062008c5c565b915091508162007d0157604051631b919bb160e11b815260040160405180910390fd5b6002840154603c5460405163045bc4d160e41b815260048101919091526000916001600160a01b0316906345bc4d10906024016020604051808303816000875af115801562007d54573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007d7a91906200a135565b905062007d88858362008ce4565b856001600160a01b03167f6e9a2ee7aee95665e3a774a212eb11441b217e3e4656ab9563793094689aabb28383600060405162007dc8939291906200a14f565b60405180910390a26002850154604051633041949b60e01b815261200591633041949b91620060fe916001600160a01b0316908a906004016200a0bc565b6001600160a01b038082166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054929384938493849390929160808401919062007e77906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462007ea5906200a086565b801562007ef65780601f1062007eca5761010080835404028352916020019162007ef6565b820191906000526020600020905b81548152906001019060200180831162007ed857829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462007f21906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462007f4f906200a086565b801562007fa05780601f1062007f745761010080835404028352916020019162007fa0565b820191906000526020600020905b81548152906001019060200180831162007f8257829003601f168201915b5050505050815260200160018201805462007fbb906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462007fe9906200a086565b80156200803a5780601f106200800e576101008083540402835291602001916200803a565b820191906000526020600020905b8154815290600101906020018083116200801c57829003601f168201915b5050505050815260200160028201805462008055906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462008083906200a086565b8015620080d45780601f10620080a857610100808354040283529160200191620080d4565b820191906000526020600020905b815481529060010190602001808311620080b657829003601f168201915b50505050508152602001600382018054620080ef906200a086565b80601f01602080910402602001604051908101604052809291908181526020018280546200811d906200a086565b80156200816e5780601f1062008142576101008083540402835291602001916200816e565b820191906000526020600020905b8154815290600101906020018083116200815057829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b8154815260200190600101908083116200820d5750505091909252505050606081015160e0820151610100909201519097919650945092505050565b60005462010000900460ff16156200827457604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620082a65760405163b1d02c3d60e01b815260040160405180910390fd5b620082b062008e36565b620082bd603f8262008c39565b620082db5760405163056e881160e01b815260040160405180910390fd5b6000620082e762008e36565b6001600160a01b0381166000908152604160205260409020600c8101549192509042906200831a9062015180906200a11f565b11156200833a57604051631f92cdbd60e11b815260040160405180910390fd5b6005810180546200834b906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462008379906200a086565b8015620083ca5780601f106200839e57610100808354040283529160200191620083ca565b820191906000526020600020905b815481529060010190602001808311620083ac57829003601f168201915b5050508287525085916005840191508190620083e790826200a637565b5060208201516001820190620083fe90826200a637565b50604082015160028201906200841590826200a637565b50606082015160038201906200842c90826200a637565b505042600c830155506040516001600160a01b038316907f85d6366b336ade7f106987ec7a8eac1e8799e508aeab045a39d2f63e0dc969d990600090a250505050565b60005462010000900460ff16156200849a57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620084cc5760405163b1d02c3d60e01b815260040160405180910390fd5b828114620084ed576040516341abc80160e01b815260040160405180910390fd5b60005b838110156200855e576200854b8585838181106200851257620085126200a18a565b9050602002016020810190620085299190620096f0565b8484848181106200853e576200853e6200a18a565b9050602002013562009431565b62008556816200a1a0565b9050620084f0565b5050505050565b6001600160a01b0380821660009081526041602090815260408083208151610180810183528154861681526001820154861693810193909352600281015490941690820152600383015460608201526004830180549293849390916080840191620085d0906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620085fe906200a086565b80156200864f5780601f1062008623576101008083540402835291602001916200864f565b820191906000526020600020905b8154815290600101906020018083116200863157829003601f168201915b50505050508152602001600582016040518060800160405290816000820180546200867a906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620086a8906200a086565b8015620086f95780601f10620086cd57610100808354040283529160200191620086f9565b820191906000526020600020905b815481529060010190602001808311620086db57829003601f168201915b5050505050815260200160018201805462008714906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462008742906200a086565b8015620087935780601f10620087675761010080835404028352916020019162008793565b820191906000526020600020905b8154815290600101906020018083116200877557829003601f168201915b50505050508152602001600282018054620087ae906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620087dc906200a086565b80156200882d5780601f1062008801576101008083540402835291602001916200882d565b820191906000526020600020905b8154815290600101906020018083116200880f57829003601f168201915b5050505050815260200160038201805462008848906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462008876906200a086565b8015620088c75780601f106200889b57610100808354040283529160200191620088c7565b820191906000526020600020905b815481529060010190602001808311620088a957829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620089665750505091909252505050604001519392505050565b60006200899e603f8462008c39565b620089bc5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038381166000908152604160205260409081902060020154905163aa1966cd60e01b81526004810185905291169063aa1966cd9060240162005a40565b60005462010000900460ff161562008a2b57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562008a5d5760405163b1d02c3d60e01b815260040160405180910390fd5b62008a6762008e36565b62008a74603f8262008c39565b62008a925760405163056e881160e01b815260040160405180910390fd5b600062008a9e62008e36565b905062008aaf818787878762009150565b62008acd57604051631647e3cb60e11b815260040160405180910390fd5b60006001600160a01b03166045878760405162008aec9291906200a0d6565b908152604051908190036020019020546001600160a01b03161462008b24576040516311fdb94760e01b815260040160405180910390fd5b6001600160a01b0381166000908152604160205260409020600c810154429062008b539062015180906200a11f565b111562008b7357604051631f92cdbd60e11b815260040160405180910390fd5b4260468260040160405162008b8991906200a6ff565b908152604051908190036020019020556004810162008baa8789836200a2ea565b5042600c820155604051829060459062008bc8908a908a906200a0d6565b90815260405190819003602001812080546001600160a01b039384166001600160a01b0319909116179055908316907f783156582145bd0ff7924fae6953ba054cf1233eb60739a200ddb10de068ff0d9062008c28908a908a906200a5bb565b60405180910390a250505050505050565b6001600160a01b0381166000908152600183016020526040812054151562005a84565b6000806000848460405160200162008c769291906200a77d565b60408051601f1981840301815291815281516020928301206000818152604c9093529120549091504281111562008cb6576000809350935050506200264a565b603e5462008cc590426200a11f565b6000928352604c60205260409092208290555060019590945092505050565b6000600162008cf4603f62008f95565b62008d0091906200a1bc565b604954108015915062008d4c5760018301546040516001600160a01b03909116907f2afdc18061ac21cff7d9f11527ab9c8dec6fabd4edf6f894ed634bebd6a20d4590600090a2505050565b82600b015482111562008d6157600b83018290555b600a83015460ff166200643c57600a8301805460ff191660019081179091556049805460009062008d949084906200a11f565b909155505060018301546040516001600160a01b03909116907f4905ac32602da3fb8b4b7b00c285e5fc4c6c2308cc908b4a1e4e9625a29c90a390600090a2505050565b336000908152604360205260408120546001600160a01b03161562008e145750336000908152604360205260409020546001600160a01b031690565b62008e1e62008e36565b905090565b604e5460000362008e34576005604e555b565b336000908152604d60205260408120546001600160a01b03161562008e725750336000908152604d60205260409020546001600160a01b031690565b503390565b6001600160a01b0381166000908152604160205260409020600a81015460ff161562008ea1575050565b6036546002820154604051630913db4760e01b81526001600160a01b03858116600483015290911690630913db4790602401602060405180830381865afa15801562008ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008f1791906200a135565b1015620067975762008f3981603d544262008f3391906200a11f565b62008ce4565b80546040516335409f7f60e01b81526001600160a01b039091166004820152611000906335409f7f90602401600060405180830381600087803b15801562008f8057600080fd5b505af1158015620062a8573d6000803e3d6000fd5b600062005a87825490565b600062005a8483836200960b565b60008082905060038151108062008fc6575060098151115b1562008fd55750600092915050565b60418160008151811062008fed5762008fed6200a18a565b016020015160f81c10806200901f5750605a816000815181106200901557620090156200a18a565b016020015160f81c115b156200902e5750600092915050565b60015b8151811015620091465760308282815181106200905257620090526200a18a565b016020015160f81c108062009083575060398282815181106200907957620090796200a18a565b016020015160f81c115b8015620090d357506041828281518110620090a257620090a26200a18a565b016020015160f81c1080620090d35750605a828281518110620090c957620090c96200a18a565b016020015160f81c115b80156200912357506061828281518110620090f257620090f26200a18a565b016020015160f81c1080620091235750607a8282815181106200911957620091196200a18a565b016020015160f81c115b1562009133575060009392505050565b6200913e816200a1a0565b905062009031565b5060019392505050565b600060308414158062009164575060608214155b15620091735750600062009277565b6000868686466040516020016200918e94939291906200a7c7565b60408051808303601f1901815282825280516020918201208184528383019092529092506000919060208201818036833701905050905081602082015260008186868a8a604051602001620091e89594939291906200a7f4565b60408051808303601f190181526001808452838301909252925060009190602082018180368337019050509050815160016020830182602086016066600019fa6200923257600080fd5b506000816000815181106200924b576200924b6200a18a565b016020015160f81c9050600181146200926d5760009550505050505062009277565b6001955050505050505b95945050505050565b60008061200361dead6040516200929790620096aa565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f080158015620092da573d6000803e3d6000fd5b509050806001600160a01b031663f399e22e3486866040518463ffffffff1660e01b81526004016200930e9291906200a82c565b6000604051808303818588803b1580156200932857600080fd5b505af11580156200933d573d6000803e3d6000fd5b50506040516001600160a01b038086169450881692507fd481492e4e93bb36b4c12a5af93f03be3bf04b454dfbc35dd2663fa26f44d5b09150600090a39392505050565b600062005a84836001600160a01b03841662009638565b600054610100900460ff16620094055760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620012e4565b600080546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b816200943f603f8262008c39565b6200945d5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b03838116600090815260416020526040808220600201549051635569f64b60e11b8152336004820152602481018690529192169063aad3ec96906044016020604051808303816000875af1158015620094c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620094e791906200a135565b9050336001600160a01b0316846001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683836040516200952f91815260200190565b60405180910390a350505050565b6000816040516020016200955291906200a852565b60405160208183030381529060405280519060200120836040516020016200957b91906200a852565b6040516020818303038152906040528051906020012014905092915050565b015190565b600080546040516001600160a01b0380851693630100000090930416917f44fc1b38a4abaa91ebd1b628a5b259a698f86238c8217d68f516e87769c60c0b91a3600080546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b60008260000182815481106200962557620096256200a18a565b9060005260206000200154905092915050565b6000818152600183016020526040812054620096815750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562005a87565b50600062005a87565b50805460008255906000526020600020908101906200190f9190620096b8565b610e96806200a87183390190565b5b80821115620096cf5760008155600101620096b9565b5090565b80356001600160a01b0381168114620096eb57600080fd5b919050565b6000602082840312156200970357600080fd5b62005a8482620096d3565b60008083601f8401126200972157600080fd5b5081356001600160401b038111156200973957600080fd5b6020830191508360208285010111156200264a57600080fd5b600080602083850312156200976657600080fd5b82356001600160401b038111156200977d57600080fd5b6200978b858286016200970e565b90969095509350505050565b600080600060408486031215620097ad57600080fd5b833560ff81168114620097bf57600080fd5b925060208401356001600160401b03811115620097db57600080fd5b620097e9868287016200970e565b9497909650939450505050565b60005b8381101562009813578181015183820152602001620097f9565b50506000910152565b6000815180845262009836816020860160208601620097f6565b601f01601f19169290920160200192915050565b60208152600062005a8460208301846200981c565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200989a576200989a6200985f565b60405290565b60006001600160401b0380841115620098bd57620098bd6200985f565b604051601f8501601f19908116603f01168101908282118183101715620098e857620098e86200985f565b816040528093508581528686860111156200990257600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156200992f57600080fd5b81356001600160401b038111156200994657600080fd5b8201601f810184136200995857600080fd5b6200996984823560208401620098a0565b949350505050565b60008083601f8401126200998457600080fd5b5081356001600160401b038111156200999c57600080fd5b6020830191508360208260051b85010111156200264a57600080fd5b60008060208385031215620099cc57600080fd5b82356001600160401b03811115620099e357600080fd5b6200978b8582860162009971565b600081518084526020808501945080840160005b8381101562009a2c5781516001600160a01b03168752958201959082019060010162009a05565b509495945050505050565b60408152600062009a4c6040830185620099f1565b6020838203818501528185518084528284019150828160051b8501018388016000805b8481101562009ac657878403601f19018652825180518086529088019088860190845b8181101562009ab05783518352928a0192918a019160010162009a92565b5050968801969450509186019160010162009a6f565b50919a9950505050505050505050565b6000806040838503121562009aea57600080fd5b62009af583620096d3565b946020939093013593505050565b80358015158114620096eb57600080fd5b6000806000806080858703121562009b2b57600080fd5b62009b3685620096d3565b935062009b4660208601620096d3565b92506040850135915062009b5d6060860162009b03565b905092959194509250565b6001600160401b03811681146200190f57600080fd5b60006020828403121562009b9157600080fd5b813562009b9e8162009b68565b9392505050565b6000806040838503121562009bb957600080fd5b50508035926020909101359150565b60808152600062009bdd6080830187620099f1565b82810360208481019190915286518083528782019282019060005b8181101562009c165784518352938301939183019160010162009bf8565b5050848103604086015286518082528282019350600581901b8201830183890160005b8381101562009c6b57601f1985840301875262009c588383516200981c565b9686019692509085019060010162009c39565b5050809550505050505082606083015295945050505050565b600080600080600080600087890360e081121562009ca157600080fd5b62009cac89620096d3565b975060208901356001600160401b038082111562009cc957600080fd5b62009cd78c838d016200970e565b909950975060408b013591508082111562009cf157600080fd5b62009cff8c838d016200970e565b90975095508591506060605f198401121562009d1a57600080fd5b60608b01945060c08b013592508083111562009d3557600080fd5b505088016080818b03121562009d4a57600080fd5b8091505092959891949750929550565b6000806040838503121562009d6e57600080fd5b62009d7983620096d3565b915062009d896020840162009b03565b90509250929050565b60208152600082516080602084015262009db060a08401826200981c565b90506020840151601f198085840301604086015262009dd083836200981c565b9250604086015191508085840301606086015262009def83836200981c565b92506060860151915080858403016080860152506200927782826200981c565b6000806000806040858703121562009e2657600080fd5b84356001600160401b038082111562009e3e57600080fd5b62009e4c888389016200970e565b9096509450602087013591508082111562009e6657600080fd5b5062009e75878288016200970e565b95989497509550505050565b60008060006040848603121562009e9757600080fd5b83356001600160401b0381111562009eae57600080fd5b62009ebc8682870162009971565b909450925062009ed1905060208501620096d3565b90509250925092565b60608152600062009eef6060830186620099f1565b828103602084015262009f038186620099f1565b915050826040830152949350505050565b600082601f83011262009f2657600080fd5b62005a8483833560208501620098a0565b60006020828403121562009f4a57600080fd5b81356001600160401b038082111562009f6257600080fd5b908301906080828603121562009f7757600080fd5b62009f8162009875565b82358281111562009f9157600080fd5b62009f9f8782860162009f14565b82525060208301358281111562009fb557600080fd5b62009fc38782860162009f14565b60208301525060408301358281111562009fdc57600080fd5b62009fea8782860162009f14565b6040830152506060830135828111156200a00357600080fd5b6200a0118782860162009f14565b60608301525095945050505050565b600080600080604085870312156200a03757600080fd5b84356001600160401b03808211156200a04f57600080fd5b6200a05d8883890162009971565b909650945060208701359150808211156200a07757600080fd5b5062009e758782880162009971565b600181811c908216806200a09b57607f821691505b6020821081036200207c57634e487b7160e01b600052602260045260246000fd5b6001600160a01b0392831681529116602082015260400190565b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b6000826200a11a57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562005a875762005a876200a0e6565b6000602082840312156200a14857600080fd5b5051919050565b8381526020810183905260608101600383106200a17c57634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b634e487b7160e01b600052603260045260246000fd5b6000600182016200a1b5576200a1b56200a0e6565b5060010190565b8181038181111562005a875762005a876200a0e6565b808202811582820484141762005a875762005a876200a0e6565b6040815260006200a2016040830185620099f1565b905060018060a01b03831660208301529392505050565b6001600160401b038281168282160390808211156200a23b576200a23b6200a0e6565b5092915050565b6000808335601e198436030181126200a25a57600080fd5b8301803591506001600160401b038211156200a27557600080fd5b6020019150368190038213156200264a57600080fd5b601f8211156200643c57600081815260208120601f850160051c810160208610156200a2b45750805b601f850160051c820191505b81811015620062a8578281556001016200a2c0565b600019600383901b1c191660019190911b1790565b6001600160401b038311156200a304576200a3046200985f565b6200a31c836200a31583546200a086565b836200a28b565b6000601f8411600181146200a34f57600085156200a33a5750838201355b6200a34686826200a2d5565b8455506200855e565b600083815260209020601f19861690835b828110156200a38257868501358255602094850194600190920191016200a360565b50868210156200a3a05760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6200a3be82836200a242565b6001600160401b038111156200a3d8576200a3d86200985f565b6200a3f0816200a3e985546200a086565b856200a28b565b6000601f8211600181146200a42357600083156200a40e5750838201355b6200a41a84826200a2d5565b8655506200a480565b600085815260209020601f19841690835b828110156200a45657868501358255602094850194600190920191016200a434565b50848210156200a4745760001960f88660031b161c19848701351681555b505060018360011b0185555b505050506200a49360208301836200a242565b6200a4a38183600186016200a2ea565b50506200a4b460408301836200a242565b6200a4c48183600286016200a2ea565b50506200a4d560608301836200a242565b6200a4e58183600386016200a2ea565b50505050565b81356200a4f88162009b68565b6001600160401b03811690508154816001600160401b0319821617835560208401356200a5258162009b68565b6fffffffffffffffff0000000000000000604091821b166fffffffffffffffffffffffffffffffff198316841781178555908501356200a5658162009b68565b6001600160c01b0319929092169092179190911760809190911b67ffffffffffffffff60801b1617905550565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000620099696020830184866200a592565b634e487b7160e01b600052603160045260246000fd5b6000816200a5f9576200a5f96200a0e6565b506000190190565b6040815260006200a6176040830186886200a592565b82810360208401526200a62c8185876200a592565b979650505050505050565b81516001600160401b038111156200a653576200a6536200985f565b6200a66b816200a66484546200a086565b846200a28b565b602080601f8311600181146200a69f57600084156200a68a5750858301515b6200a69685826200a2d5565b865550620062a8565b600085815260208120601f198616915b828110156200a6d0578886015182559484019460019091019084016200a6af565b50858210156200a6ef5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008083546200a70f816200a086565b600182811680156200a72a57600181146200a740576200a771565b60ff19841687528215158302870194506200a771565b8760005260208060002060005b858110156200a7685781548a8201529084019082016200a74d565b50505082870194505b50929695505050505050565b6bffffffffffffffffffffffff198360601b1681526000600383106200a7b357634e487b7160e01b600052602160045260246000fd5b5060f89190911b6014820152601501919050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b600086516200a808818460208b01620097f6565b82018587823760009086019081528385823760009301928352509095945050505050565b6001600160a01b038316815260406020820181905260009062009969908301846200981c565b600082516200a866818460208701620097f6565b919091019291505056fe608060405260405162000e9638038062000e96833981016040819052620000269162000497565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ca565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b620001691760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000e6f60279139620002f8565b9392505050565b60006200018060008051602062000e4f83398151915260001b6200037760201b620001951760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e4f83398151915260001b6200037760201b620001951760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a816200037a60201b620001981760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200037760201b620001951760201c565b6060600080856001600160a01b03168560405162000317919062000577565b600060405180830381855af49150503d806000811462000354576040519150601f19603f3d011682016040523d82523d6000602084013e62000359565b606091505b5090925090506200036d8683838762000389565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620003fd578251600003620003f5576001600160a01b0385163b620003f55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001f1565b508162000409565b62000409838362000411565b949350505050565b815115620004225781518083602001fd5b8060405162461bcd60e51b8152600401620001f1919062000595565b80516001600160a01b03811681146200045657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200048e57818101518382015260200162000474565b50506000910152565b600080600060608486031215620004ad57600080fd5b620004b8846200043e565b9250620004c8602085016200043e565b60408501519092506001600160401b0380821115620004e657600080fd5b818601915086601f830112620004fb57600080fd5b8151818111156200051057620005106200045b565b604051601f8201601f19908116603f011681019083821181831017156200053b576200053b6200045b565b816040528281528960208487010111156200055557600080fd5b6200056883602083016020880162000471565b80955050505050509250925092565b600082516200058b81846020870162000471565b9190910192915050565b6020815260008251806020840152620005b681604085016020870162000471565b601f01601f19169190910160400192915050565b61087580620005da6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f6101a7565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a576100536101da565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a57610053610231565b63070d7c6960e41b6001600160e01b031982160161009a57610053610277565b621eb96f60e61b6001600160e01b03198216016100b9576100536102a8565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102e8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102fc565b565b606061018e83836040518060600160405280602781526020016108426027913961030c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101e4610384565b60006101f33660048184610695565b81019061020091906106db565b905061021d8160405180602001604052806000815250600061038f565b505060408051602081019091526000815290565b60606000806102433660048184610695565b810190610250919061070c565b915091506102608282600161038f565b604051806020016040528060008152509250505090565b6060610281610384565b60006102903660048184610695565b81019061029d91906106db565b905061021d816103bb565b60606102b2610384565b60006102bc6101a7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102f2610384565b60006102bc610412565b610167610307610412565b610421565b6060600080856001600160a01b03168560405161032991906107f2565b600060405180830381855af49150503d8060008114610364576040519150601f19603f3d011682016040523d82523d6000602084013e610369565b606091505b509150915061037a86838387610445565b9695505050505050565b341561016757600080fd5b610398836104c6565b6000825111806103a55750805b156103b6576103b48383610169565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103e46101a7565b604080516001600160a01b03928316815291841660208301520160405180910390a161040f81610506565b50565b600061041c6105af565b905090565b3660008037600080366000845af43d6000803e808015610440573d6000f35b3d6000fd5b606083156104b45782516000036104ad576001600160a01b0385163b6104ad5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b50816104be565b6104be83836105d7565b949350505050565b6104cf81610601565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661056b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101cb565b8151156105e75781518083602001fd5b8060405162461bcd60e51b815260040161014e919061080e565b6001600160a01b0381163b61066e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61058e565b600080858511156106a557600080fd5b838611156106b257600080fd5b5050820193919092039150565b80356001600160a01b03811681146106d657600080fd5b919050565b6000602082840312156106ed57600080fd5b61018e826106bf565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561071f57600080fd5b610728836106bf565b9150602083013567ffffffffffffffff8082111561074557600080fd5b818501915085601f83011261075957600080fd5b81358181111561076b5761076b6106f6565b604051601f8201601f19908116603f01168101908382118183101715610793576107936106f6565b816040528281528860208487010111156107ac57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107e95781810151838201526020016107d1565b50506000910152565b600082516108048184602087016107ce565b9190910192915050565b602081526000825180602084015261082d8160408501602087016107ce565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000811000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000811000a \ No newline at end of file diff --git a/core/systemcontracts/maxwell/mainnet/StakeHubContract b/core/systemcontracts/maxwell/mainnet/StakeHubContract new file mode 100644 index 0000000000..1b8f19e435 --- /dev/null +++ b/core/systemcontracts/maxwell/mainnet/StakeHubContract @@ -0,0 +1 @@ +6080604052600436106200043b5760003560e01c806386d545061162000233578063ca47908f116200012f578063dd42a1dd11620000b9578063f1f74d841162000084578063f1f74d841462000d75578063f80a34021462000d8d578063fb50b31f1462000db2578063fc0c5ff11462000dd7578063ff69ab611462000def57600080fd5b8063dd42a1dd1462000ce2578063e8f67c3b1462000d09578063e992aaf51462000d21578063efdbf0e11462000d3957600080fd5b8063d7c2dfc811620000fa578063d7c2dfc81462000c68578063d8ca511f1462000c8d578063daacdb661462000ca5578063dbda7fb31462000cbd57600080fd5b8063ca47908f1462000bd1578063cbb04d9d1462000be9578063d115a2061462000c2a578063d6ca429d1462000c4357600080fd5b8063b187bd2611620001bd578063bfff04751162000188578063bfff04751462000b58578063c166f58a1462000b7d578063c38fbec81462000b94578063c473318f1462000bb9578063c8509d81146200095157600080fd5b8063b187bd261462000ac5578063baa7199e1462000ae5578063bdceadf31462000b0a578063bff02e201462000b2257600080fd5b8063a1832e6411620001fe578063a1832e641462000a22578063a43569b31462000a47578063aad3ec961462000a7b578063ac4317511462000aa057600080fd5b806386d54506146200098e5780638a4d3fa814620009c85780638cd22b2214620009e6578063982ef0a71462000a0b57600080fd5b80634838d165116200034357806364028fbd11620002cd57806375cc7d89116200029857806375cc7d8914620008fc57806376e7d6d614620009215780638129fc1c1462000939578063831d65d114620009515780638456cb59146200097657600080fd5b806364028fbd1462000837578063663706d3146200084e5780636ec01b27146200087f5780636f8e2fa414620008d757600080fd5b80634e6fd6c4116200030e5780634e6fd6c4146200079e5780635949187114620007b65780635e7cc1c914620007db57806363a036b5146200080057600080fd5b80634838d16514620006ea57806349f41a42146200072f5780634a49ac4c14620007545780634d99dd16146200077957600080fd5b80631fab701511620003c5578063384099881162000390578063384099881462000663578063417c73a7146200067b578063449ecfe614620006a057806345211bfd14620006c557600080fd5b80631fab701514620005aa5780632b727c8614620005cf5780632e8e8c7114620005f4578063367dad49146200062e57600080fd5b80630e9fbf5111620004065780630e9fbf5114620004f35780631182b875146200051857806317b4f353146200054c5780631fa8882b146200059157600080fd5b8063046f7da2146200045b578063059ddd2214620004735780630661806e14620004b5578063092193ab14620004dc57600080fd5b36620004565760345460ff166001146200045457600080fd5b005b600080fd5b3480156200046857600080fd5b506200045462000e07565b3480156200048057600080fd5b506200049862000492366004620096f0565b62000e99565b6040516001600160a01b0390911681526020015b60405180910390f35b348015620004c257600080fd5b50620004cd60365481565b604051908152602001620004ac565b62000454620004ed366004620096f0565b620012c1565b3480156200050057600080fd5b50620004546200051236600462009752565b62001912565b3480156200052557600080fd5b506200053d6200053736600462009797565b62001c3e565b604051620004ac91906200984a565b3480156200055957600080fd5b50620004986200056b3660046200991c565b80516020818301810180516045825292820191909301209152546001600160a01b031681565b3480156200059e57600080fd5b50620004cd6201518081565b348015620005b757600080fd5b5062000454620005c9366004620099b8565b62001cd6565b348015620005dc57600080fd5b5062000498620005ee366004620096f0565b6200202d565b3480156200060157600080fd5b506200049862000613366004620096f0565b604d602052600090815260409020546001600160a01b031681565b3480156200063b57600080fd5b50620006536200064d366004620099b8565b62002082565b604051620004ac92919062009a37565b3480156200067057600080fd5b50620004cd60375481565b3480156200068857600080fd5b50620004546200069a366004620096f0565b62002651565b348015620006ad57600080fd5b5062000454620006bf366004620096f0565b620026d3565b348015620006d257600080fd5b5062000454620006e4366004620096f0565b620028b8565b348015620006f757600080fd5b506200071e62000709366004620096f0565b60016020526000908152604090205460ff1681565b6040519015158152602001620004ac565b3480156200073c57600080fd5b50620004546200074e366004620096f0565b62002a91565b3480156200076157600080fd5b506200045462000773366004620096f0565b62002cad565b3480156200078657600080fd5b50620004546200079836600462009ad6565b62002d29565b348015620007ab57600080fd5b506200049861dead81565b348015620007c357600080fd5b5062000454620007d536600462009b14565b62003359565b348015620007e857600080fd5b5062000454620007fa36600462009b7e565b62004152565b3480156200080d57600080fd5b50620008256200081f36600462009ba5565b6200437c565b604051620004ac949392919062009bc8565b620004546200084836600462009c84565b62004a21565b3480156200085b57600080fd5b50620004cd6200086d366004620096f0565b60446020526000908152604090205481565b3480156200088c57600080fd5b50620008a46200089e366004620096f0565b62005070565b6040805182516001600160401b0390811682526020808501518216908301529282015190921690820152606001620004ac565b348015620008e457600080fd5b506200053d620008f6366004620096f0565b62005115565b3480156200090957600080fd5b50620004546200091b366004620096f0565b62005541565b3480156200092e57600080fd5b50620004cd603d5481565b3480156200094657600080fd5b506200045462005713565b3480156200095e57600080fd5b50620004546200097036600462009797565b620058de565b3480156200098357600080fd5b50620004546200593c565b3480156200099b57600080fd5b5062000498620009ad366004620096f0565b6043602052600090815260409020546001600160a01b031681565b348015620009d557600080fd5b50620004cd670de0b6b3a764000081565b348015620009f357600080fd5b50620004cd62000a0536600462009ad6565b620059d4565b6200045462000a1c36600462009d5a565b62005a8d565b34801562000a2f57600080fd5b506200045462000a41366004620099b8565b6200613b565b34801562000a5457600080fd5b5062000a6c62000a66366004620096f0565b62006441565b604051620004ac919062009d92565b34801562000a8857600080fd5b506200045462000a9a36600462009ad6565b6200672e565b34801562000aad57600080fd5b506200045462000abf36600462009e0f565b6200679b565b34801562000ad257600080fd5b5060005462010000900460ff166200071e565b34801562000af257600080fd5b506200045462000b0436600462009e81565b6200774d565b34801562000b1757600080fd5b50620004cd603c5481565b34801562000b2f57600080fd5b5062000b4762000b4136600462009ba5565b6200791a565b604051620004ac9392919062009eda565b34801562000b6557600080fd5b50620004cd62000b77366004620096f0565b62007af6565b34801562000b8a57600080fd5b50620004cd600581565b34801562000ba157600080fd5b506200045462000bb3366004620096f0565b62007b44565b34801562000bc657600080fd5b50620004cd60385481565b34801562000bde57600080fd5b50620004cd604e5481565b34801562000bf657600080fd5b5062000c0e62000c08366004620096f0565b62007e06565b60408051938452911515602084015290820152606001620004ac565b34801562000c3757600080fd5b50620004cd620186a081565b34801562000c5057600080fd5b506200045462000c6236600462009f37565b62008249565b34801562000c7557600080fd5b506200045462000c873660046200a020565b6200846f565b34801562000c9a57600080fd5b50620004cd603b5481565b34801562000cb257600080fd5b50620004cd60495481565b34801562000cca57600080fd5b506200049862000cdc366004620096f0565b62008565565b34801562000cef57600080fd5b50600054630100000090046001600160a01b031662000498565b34801562000d1657600080fd5b50620004cd60355481565b34801562000d2e57600080fd5b50620004cd603a5481565b34801562000d4657600080fd5b50620004cd62000d583660046200991c565b805160208183018101805160468252928201919093012091525481565b34801562000d8257600080fd5b50620004cd603e5481565b34801562000d9a57600080fd5b50620004cd62000dac36600462009ad6565b6200898f565b34801562000dbf57600080fd5b506200045462000dd136600462009e0f565b62008a00565b34801562000de457600080fd5b50620004cd60395481565b34801562000dfc57600080fd5b50620004cd604a5481565b600054630100000090046001600160a01b0316331462000e3a576040516306fbb1e360e01b815260040160405180910390fd5b60005462010000900460ff1662000e6457604051636cd6020160e01b815260040160405180910390fd5b6000805462ff0000191681556040517f62451d457bc659158be6e6247f56ec1df424a5c7597f71c20c2bc44e0965c8f99190a1565b6001600160a01b038082166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054929384939091608084019162000f04906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462000f32906200a086565b801562000f835780601f1062000f575761010080835404028352916020019162000f83565b820191906000526020600020905b81548152906001019060200180831162000f6557829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462000fae906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462000fdc906200a086565b80156200102d5780601f1062001001576101008083540402835291602001916200102d565b820191906000526020600020905b8154815290600101906020018083116200100f57829003601f168201915b5050505050815260200160018201805462001048906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462001076906200a086565b8015620010c75780601f106200109b57610100808354040283529160200191620010c7565b820191906000526020600020905b815481529060010190602001808311620010a957829003601f168201915b50505050508152602001600282018054620010e2906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462001110906200a086565b8015620011615780601f10620011355761010080835404028352916020019162001161565b820191906000526020600020905b8154815290600101906020018083116200114357829003601f168201915b505050505081526020016003820180546200117c906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620011aa906200a086565b8015620011fb5780601f10620011cf57610100808354040283529160200191620011fb565b820191906000526020600020905b815481529060010190602001808311620011dd57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b8154815260200190600101908083116200129a575050509190925250509051949350505050565b3361100014620012ed57604051630f22c43960e41b815261100060048201526024015b60405180910390fd5b6001600160a01b0380821660009081526043602090815260408083205484168084526041835281842082516101808101845281548716815260018201548716948101949094526002810154909516918301919091526003840154606083015260048401805491949160808401919062001366906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462001394906200a086565b8015620013e55780601f10620013b957610100808354040283529160200191620013e5565b820191906000526020600020905b815481529060010190602001808311620013c757829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462001410906200a086565b80601f01602080910402602001604051908101604052809291908181526020018280546200143e906200a086565b80156200148f5780601f1062001463576101008083540402835291602001916200148f565b820191906000526020600020905b8154815290600101906020018083116200147157829003601f168201915b50505050508152602001600182018054620014aa906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620014d8906200a086565b8015620015295780601f10620014fd5761010080835404028352916020019162001529565b820191906000526020600020905b8154815290600101906020018083116200150b57829003601f168201915b5050505050815260200160028201805462001544906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462001572906200a086565b8015620015c35780601f106200159757610100808354040283529160200191620015c3565b820191906000526020600020905b815481529060010190602001808311620015a557829003601f168201915b50505050508152602001600382018054620015de906200a086565b80601f01602080910402602001604051908101604052809291908181526020018280546200160c906200a086565b80156200165d5780601f1062001631576101008083540402835291602001916200165d565b820191906000526020600020905b8154815290600101906020018083116200163f57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620016fc575050509190925250505060408101519091506001600160a01b031615806200173957508060e001515b15620017f657604051611002903490600081818185875af1925050503d806000811462001783576040519150601f19603f3d011682016040523d82523d6000602084013e62001788565b606091505b505050816001600160a01b03167ffc8bff675087dd2da069cc3fb517b9ed001e19750c0865241a5542dba1ba170d604051620017e99060208082526011908201527024a72b20a624a22fab20a624a220aa27a960791b604082015260600190565b60405180910390a2505050565b60408181015160c0830151519151632f303ebb60e11b81526001600160401b0390921660048301526001600160a01b031690635e607d769034906024016000604051808303818588803b1580156200184d57600080fd5b505af115801562001862573d6000803e3d6000fd5b5050505050816001600160a01b03167fe34918ff1c7084970068b53fd71ad6d8b04e9f15d3886cbf006443e6cdc52ea634604051620018a391815260200190565b60405180910390a26040808201519051633041949b60e01b815261200591633041949b91620018d8919086906004016200a0bc565b600060405180830381600087803b158015620018f357600080fd5b505af115801562001908573d6000803e3d6000fd5b5050505050505b50565b33611001146200193a57604051630f22c43960e41b81526110016004820152602401620012e4565b60005462010000900460ff16156200196557604051631785c68160e01b815260040160405180910390fd5b6000604583836040516200197b9291906200a0d6565b908152604051908190036020019020546001600160a01b03169050620019a3603f8262008c39565b620019c15760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038116600090815260416020526040812090620019e962015180426200a0fc565b604a546000828152604b60205260409020549192501162001a1d5760405163bd52fcdb60e01b815260040160405180910390fd5b6000818152604b6020526040812080546001929062001a3e9084906200a11f565b909155505060405160469062001a5890879087906200a0d6565b90815260200160405180910390205460001415801562001aa9575042620151806046878760405162001a8c9291906200a0d6565b90815260200160405180910390205462001aa791906200a11f565b105b1562001ac857604051631898eb6b60e01b815260040160405180910390fd5b60008062001ad885600262008c5c565b915091508162001afb57604051631b919bb160e11b815260040160405180910390fd5b6002840154603c5460405163045bc4d160e41b815260048101919091526000916001600160a01b0316906345bc4d10906024016020604051808303816000875af115801562001b4e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b7491906200a135565b905062001b82858362008ce4565b856001600160a01b03167f6e9a2ee7aee95665e3a774a212eb11441b217e3e4656ab9563793094689aabb28383600260405162001bc2939291906200a14f565b60405180910390a26002850154604051633041949b60e01b815261200591633041949b9162001c00916001600160a01b0316908a906004016200a0bc565b600060405180830381600087803b15801562001c1b57600080fd5b505af115801562001c30573d6000803e3d6000fd5b505050505050505050505050565b6060336120001462001c6857604051630f22c43960e41b81526120006004820152602401620012e4565b60005462010000900460ff161562001c9357604051631785c68160e01b815260040160405180910390fd5b6034805460ff1916600117905560405162461bcd60e51b815260206004820152600a60248201526919195c1c9958d85d195960b21b6044820152606401620012e4565b60005462010000900460ff161562001d0157604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562001d335760405163b1d02c3d60e01b815260040160405180910390fd5b62001d3d62008dd8565b62001d4a603f8262008c39565b62001d685760405163056e881160e01b815260040160405180910390fd5b62001d7262008e23565b600082900362001d9557604051636490ffd360e01b815260040160405180910390fd5b600062001da162008dd8565b6001600160a01b0381166000908152604f602052604090208054604e54929350909162001dcf86836200a11f565b111562001def5760405163091af98560e21b815260040160405180910390fd5b60005b8581101562001ed557600087878381811062001e125762001e126200a18a565b905060200201350362001e3857604051636490ffd360e01b815260040160405180910390fd5b600062001e478260016200a11f565b90505b8681101562001ebf5787878281811062001e685762001e686200a18a565b9050602002013588888481811062001e845762001e846200a18a565b905060200201350362001eaa57604051632205e3c760e11b815260040160405180910390fd5b8062001eb6816200a1a0565b91505062001e4a565b508062001ecc816200a1a0565b91505062001df2565b5060005b8581101562001f745760005b8281101562001f5e5783818154811062001f035762001f036200a18a565b906000526020600020015488888481811062001f235762001f236200a18a565b905060200201350362001f4957604051632205e3c760e11b815260040160405180910390fd5b8062001f55816200a1a0565b91505062001ee5565b508062001f6b816200a1a0565b91505062001ed9565b5060005b8581101562001908578287878381811062001f975762001f976200a18a565b835460018101855560009485526020948590209190940292909201359190920155506001600160a01b0384167f7c4ff4c9a343a2daef608f3b5a91016e994a15fc0ef8611109e4f45823249f2988888481811062001ff95762001ff96200a18a565b905060200201356040516200201091815260200190565b60405180910390a28062002024816200a1a0565b91505062001f78565b6000816200203d603f8262008c39565b6200205b5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038084166000908152604160205260409020600d01541691505b50919050565b60608082806001600160401b03811115620020a157620020a16200985f565b604051908082528060200260200182016040528015620020cb578160200160208202803683370190505b509250806001600160401b03811115620020e957620020e96200985f565b6040519080825280602002602001820160405280156200211e57816020015b6060815260200190600190039081620021085790505b50915060005b81811015620026475760008686838181106200214457620021446200a18a565b90506020020160208101906200215b9190620096f0565b6001600160a01b03808216600090815260416020908152604080832081516101808101835281548616815260018201548616938101939093526002810154909416908201526003830154606082015260048301805494955091939092916080840191620021c8906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620021f6906200a086565b8015620022475780601f106200221b5761010080835404028352916020019162002247565b820191906000526020600020905b8154815290600101906020018083116200222957829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462002272906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620022a0906200a086565b8015620022f15780601f10620022c557610100808354040283529160200191620022f1565b820191906000526020600020905b815481529060010190602001808311620022d357829003601f168201915b505050505081526020016001820180546200230c906200a086565b80601f01602080910402602001604051908101604052809291908181526020018280546200233a906200a086565b80156200238b5780601f106200235f576101008083540402835291602001916200238b565b820191906000526020600020905b8154815290600101906020018083116200236d57829003601f168201915b50505050508152602001600282018054620023a6906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620023d4906200a086565b8015620024255780601f10620023f95761010080835404028352916020019162002425565b820191906000526020600020905b8154815290600101906020018083116200240757829003601f168201915b5050505050815260200160038201805462002440906200a086565b80601f01602080910402602001604051908101604052809291908181526020018280546200246e906200a086565b8015620024bf5780601f106200249357610100808354040283529160200191620024bf565b820191906000526020600020905b815481529060010190602001808311620024a157829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b8154815260200190600101908083116200255e57505050505081525050905080600001518684815181106200259757620025976200a18a565b6001600160a01b039283166020918202929092018101919091529083166000908152604f8252604090819020805482518185028101850190935280835291929091908301828280156200260a57602002820191906000526020600020905b815481526020019060010190808311620025f5575b50505050508584815181106200262457620026246200a18a565b6020026020010181905250505080806200263e906200a1a0565b91505062002124565b50505b9250929050565b600054630100000090046001600160a01b0316331462002684576040516306fbb1e360e01b815260040160405180910390fd5b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f7fd26be6fc92aff63f1f4409b2b2ddeb272a888031d7f55ec830485ec61941869190a250565b60005462010000900460ff1615620026fe57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620027305760405163b1d02c3d60e01b815260040160405180910390fd5b806200273e603f8262008c39565b6200275c5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0382166000908152604160205260409020600a81015460ff166200279a57604051634b6b857d60e01b815260040160405180910390fd5b6036546002820154604051630913db4760e01b81526001600160a01b03868116600483015290911690630913db4790602401602060405180830381865afa158015620027ea573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200281091906200a135565b101562002830576040516317b204bf60e11b815260040160405180910390fd5b4281600b01541115620028565760405163170cb76760e21b815260040160405180910390fd5b600a8101805460ff1916905560498054600191906000906200287a9084906200a1bc565b90915550506040516001600160a01b038416907f9390b453426557da5ebdc31f19a37753ca04addf656d32f35232211bb2af3f1990600090a2505050565b60005462010000900460ff1615620028e357604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620029155760405163b1d02c3d60e01b815260040160405180910390fd5b6200291f62008e36565b6200292c603f8262008c39565b6200294a5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0382166200297257604051636520611b60e11b815260040160405180910390fd5b6001600160a01b038281166000908152604360205260409020541615620029ac57604051631e6f587560e11b815260040160405180910390fd5b6000620029b862008e36565b6001600160a01b0381166000908152604160205260409020600c810154919250904290620029eb9062015180906200a11f565b111562002a0b57604051631f92cdbd60e11b815260040160405180910390fd5b80546001600160a01b039081166000908152604460209081526040808320429081905585548986166001600160a01b031991821681178855600c88019290925581855260439093528184208054958816959093168517909255519092917f6e4e747ca35203f16401c69805c7dd52fff67ef60b0ebc5c7fe16890530f223591a350505050565b3362002a9f603f8262008c39565b62002abd5760405163056e881160e01b815260040160405180910390fd5b60005462010000900460ff161562002ae857604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562002b1a5760405163b1d02c3d60e01b815260040160405180910390fd5b6001600160a01b038281166000908152604d6020526040902054161562002b545760405163bebdc75760e01b815260040160405180910390fd5b62002b61603f8362008c39565b1562002b805760405163bebdc75760e01b815260040160405180910390fd5b336000818152604160205260409020600d01546001600160a01b03908116908416810362002bc15760405163bebdc75760e01b815260040160405180910390fd5b6001600160a01b0381161562002bf8576001600160a01b0381166000908152604d6020526040902080546001600160a01b03191690555b6001600160a01b038281166000908152604160205260409020600d0180546001600160a01b03191691861691821790551562002c5d576001600160a01b038481166000908152604d6020526040902080546001600160a01b0319169184169190911790555b836001600160a01b0316816001600160a01b0316836001600160a01b03167fcbb728765de145e99c00e8ae32a325231e850359b7b8a6da3b84d672ab3f1d0a60405160405180910390a450505050565b600054630100000090046001600160a01b0316331462002ce0576040516306fbb1e360e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020526040808220805460ff19169055517fe0db3499b7fdc3da4cddff5f45d694549c19835e7f719fb5606d3ad1a5de40119190a250565b60005462010000900460ff161562002d5457604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562002d865760405163b1d02c3d60e01b815260040160405180910390fd5b8162002d94603f8262008c39565b62002db25760405163056e881160e01b815260040160405180910390fd5b8160000362002dd457604051639811e0c760e01b815260040160405180910390fd5b6001600160a01b038084166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054339491608084019162002e3c906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462002e6a906200a086565b801562002ebb5780601f1062002e8f5761010080835404028352916020019162002ebb565b820191906000526020600020905b81548152906001019060200180831162002e9d57829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462002ee6906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462002f14906200a086565b801562002f655780601f1062002f395761010080835404028352916020019162002f65565b820191906000526020600020905b81548152906001019060200180831162002f4757829003601f168201915b5050505050815260200160018201805462002f80906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462002fae906200a086565b801562002fff5780601f1062002fd35761010080835404028352916020019162002fff565b820191906000526020600020905b81548152906001019060200180831162002fe157829003601f168201915b505050505081526020016002820180546200301a906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462003048906200a086565b8015620030995780601f106200306d5761010080835404028352916020019162003099565b820191906000526020600020905b8154815290600101906020018083116200307b57829003601f168201915b50505050508152602001600382018054620030b4906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620030e2906200a086565b8015620031335780601f10620031075761010080835404028352916020019162003133565b820191906000526020600020905b8154815290600101906020018083116200311557829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620031d2575050509190925250505060408082015190516326ccee8b60e11b81526001600160a01b0385811660048301526024820188905292935060009290911690634d99dd16906044016020604051808303816000875af11580156200324c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200327291906200a135565b9050826001600160a01b0316866001600160a01b03167f3aace7340547de7b9156593a7652dc07ee900cea3fd8f82cb6c9d38b408298028784604051620032c3929190918252602082015260400190565b60405180910390a3856001600160a01b0316836001600160a01b031603620032f057620032f08662008e77565b6040808301519051633041949b60e01b815261200591633041949b916200331d919087906004016200a0bc565b600060405180830381600087803b1580156200333857600080fd5b505af11580156200334d573d6000803e3d6000fd5b50505050505050505050565b60005462010000900460ff16156200338457604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620033b65760405163b1d02c3d60e01b815260040160405180910390fd5b83620033c4603f8262008c39565b620033e25760405163056e881160e01b815260040160405180910390fd5b83620033f0603f8262008c39565b6200340e5760405163056e881160e01b815260040160405180910390fd5b6034805460ff1916600117905560008490036200343e57604051639811e0c760e01b815260040160405180910390fd5b846001600160a01b0316866001600160a01b031603620034715760405163f0e3e62960e01b815260040160405180910390fd5b6001600160a01b0380871660009081526041602090815260408083208151610180810183528154861681526001820154861693810193909352600281015490941690820152600383015460608201526004830180543394916080840191620034d9906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462003507906200a086565b8015620035585780601f106200352c5761010080835404028352916020019162003558565b820191906000526020600020905b8154815290600101906020018083116200353a57829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462003583906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620035b1906200a086565b8015620036025780601f10620035d65761010080835404028352916020019162003602565b820191906000526020600020905b815481529060010190602001808311620035e457829003601f168201915b505050505081526020016001820180546200361d906200a086565b80601f01602080910402602001604051908101604052809291908181526020018280546200364b906200a086565b80156200369c5780601f1062003670576101008083540402835291602001916200369c565b820191906000526020600020905b8154815290600101906020018083116200367e57829003601f168201915b50505050508152602001600282018054620036b7906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620036e5906200a086565b8015620037365780601f106200370a5761010080835404028352916020019162003736565b820191906000526020600020905b8154815290600101906020018083116200371857829003601f168201915b5050505050815260200160038201805462003751906200a086565b80601f01602080910402602001604051908101604052809291908181526020018280546200377f906200a086565b8015620037d05780601f10620037a457610100808354040283529160200191620037d0565b820191906000526020600020905b815481529060010190602001808311620037b257829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b8154815260200190600101908083116200386f57505050919092525050506001600160a01b03808916600090815260416020908152604080832081516101808101835281548616815260018201548616938101939093526002810154909416908201526003830154606082015260048301805494955091939092916080840191620038fa906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462003928906200a086565b8015620039795780601f106200394d5761010080835404028352916020019162003979565b820191906000526020600020905b8154815290600101906020018083116200395b57829003601f168201915b5050505050815260200160058201604051806080016040529081600082018054620039a4906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620039d2906200a086565b801562003a235780601f10620039f75761010080835404028352916020019162003a23565b820191906000526020600020905b81548152906001019060200180831162003a0557829003601f168201915b5050505050815260200160018201805462003a3e906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462003a6c906200a086565b801562003abd5780601f1062003a915761010080835404028352916020019162003abd565b820191906000526020600020905b81548152906001019060200180831162003a9f57829003601f168201915b5050505050815260200160028201805462003ad8906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462003b06906200a086565b801562003b575780601f1062003b2b5761010080835404028352916020019162003b57565b820191906000526020600020905b81548152906001019060200180831162003b3957829003601f168201915b5050505050815260200160038201805462003b72906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462003ba0906200a086565b801562003bf15780601f1062003bc55761010080835404028352916020019162003bf1565b820191906000526020600020905b81548152906001019060200180831162003bd357829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b81548152602001906001019080831162003c905750505050508152505090508060e00151801562003cd35750876001600160a01b0316836001600160a01b031614155b1562003cf257604051636468920360e01b815260040160405180910390fd5b60408083015190516352e82ce560e11b81526001600160a01b038581166004830152602482018a9052600092169063a5d059ca906044016020604051808303816000875af115801562003d49573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003d6f91906200a135565b905060375481101562003d955760405163dc6f0bdd60e01b815260040160405180910390fd5b896001600160a01b0316846001600160a01b031614801562003e2a57506036546040808501519051630913db4760e01b81526001600160a01b038d8116600483015290911690630913db4790602401602060405180830381865afa15801562003e02573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003e2891906200a135565b105b1562003e49576040516317b204bf60e11b815260040160405180910390fd5b6000620186a0603a548362003e5f91906200a1d2565b62003e6b91906200a0fc565b9050600083604001516001600160a01b03168260405160006040518083038185875af1925050503d806000811462003ec0576040519150601f19603f3d011682016040523d82523d6000602084013e62003ec5565b606091505b505090508062003ee8576040516312171d8360e31b815260040160405180910390fd5b62003ef482846200a1bc565b60408086015190516317066a5760e21b81526001600160a01b03898116600483015292955060009290911690635c19a95c90869060240160206040518083038185885af115801562003f4a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062003f7191906200a135565b9050866001600160a01b03168c6001600160a01b03168e6001600160a01b03167ffdac6e81913996d95abcc289e90f2d8bd235487ce6fe6f821e7d21002a1915b48e858960405162003fd6939291909283526020830191909152604082015260600190565b60405180910390a46040805160028082526060820183526000926020830190803683370190505090508660400151816000815181106200401a576200401a6200a18a565b60200260200101906001600160a01b031690816001600160a01b0316815250508560400151816001815181106200405557620040556200a18a565b6001600160a01b0390921660209283029190910190910152604051634484077560e01b815261200590634484077590620040969084908c906004016200a1ec565b600060405180830381600087803b158015620040b157600080fd5b505af1158015620040c6573d6000803e3d6000fd5b505050508a1562004138576120056001600160a01b031663e5ed5b1e898f6040518363ffffffff1660e01b8152600401620041039291906200a0bc565b600060405180830381600087803b1580156200411e57600080fd5b505af115801562004133573d6000803e3d6000fd5b505050505b50506034805460ff19169055505050505050505050505050565b60005462010000900460ff16156200417d57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620041af5760405163b1d02c3d60e01b815260040160405180910390fd5b620041b962008e36565b620041c6603f8262008c39565b620041e45760405163056e881160e01b815260040160405180910390fd5b6000620041f062008e36565b6001600160a01b0381166000908152604160205260409020600c810154919250904290620042239062015180906200a11f565b11156200424357604051631f92cdbd60e11b815260040160405180910390fd5b60098101546001600160401b03600160401b909104811690851611156200427d5760405163dc81db8560e01b815260040160405180910390fd5b60098101546000906001600160401b039081169086161015620042bb576009820154620042b59086906001600160401b03166200a218565b620042d5565b6009820154620042d5906001600160401b0316866200a218565b60098301546001600160401b039182169250600160801b900416811115620043105760405163dc81db8560e01b815260040160405180910390fd5b60098201805467ffffffffffffffff19166001600160401b03871690811790915542600c8401556040519081526001600160a01b038416907f78cdd96edf59e09cfd4d26ef6ef6c92d166effe6a40970c54821206d541932cb9060200160405180910390a25050505050565b606080606060006200438f603f62008f95565b90508086101562004a18578415620043a85784620043aa565b805b9450600085620043bb88846200a1bc565b11620043d357620043cd87836200a1bc565b620043d5565b855b9050806001600160401b03811115620043f257620043f26200985f565b6040519080825280602002602001820160405280156200441c578160200160208202803683370190505b509450806001600160401b038111156200443a576200443a6200985f565b60405190808252806020026020018201604052801562004464578160200160208202803683370190505b509350806001600160401b038111156200448257620044826200985f565b604051908082528060200260200182016040528015620044b757816020015b6060815260200190600190039081620044a15790505b50925060005b8181101562004a15576000620044e1620044d8838b6200a11f565b603f9062008fa0565b6001600160a01b038082166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054949550919390929160808401916200454e906200a086565b80601f01602080910402602001604051908101604052809291908181526020018280546200457c906200a086565b8015620045cd5780601f10620045a157610100808354040283529160200191620045cd565b820191906000526020600020905b815481529060010190602001808311620045af57829003601f168201915b5050505050815260200160058201604051806080016040529081600082018054620045f8906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462004626906200a086565b8015620046775780601f106200464b5761010080835404028352916020019162004677565b820191906000526020600020905b8154815290600101906020018083116200465957829003601f168201915b5050505050815260200160018201805462004692906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620046c0906200a086565b8015620047115780601f10620046e55761010080835404028352916020019162004711565b820191906000526020600020905b815481529060010190602001808311620046f357829003601f168201915b505050505081526020016002820180546200472c906200a086565b80601f01602080910402602001604051908101604052809291908181526020018280546200475a906200a086565b8015620047ab5780601f106200477f57610100808354040283529160200191620047ab565b820191906000526020600020905b8154815290600101906020018083116200478d57829003601f168201915b50505050508152602001600382018054620047c6906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620047f4906200a086565b8015620048455780601f10620048195761010080835404028352916020019162004845565b820191906000526020600020905b8154815290600101906020018083116200482757829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620048e457505050505081525050905080600001518884815181106200491d576200491d6200a18a565b60200260200101906001600160a01b031690816001600160a01b0316815250508060e00151620049b65780604001516001600160a01b03166315d1f8986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200498a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620049b091906200a135565b620049b9565b60005b878481518110620049ce57620049ce6200a18a565b6020026020010181815250508060800151868481518110620049f457620049f46200a18a565b602002602001018190525050508062004a0d906200a1a0565b9050620044bd565b50505b92959194509250565b60005462010000900460ff161562004a4c57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562004a7e5760405163b1d02c3d60e01b815260040160405180910390fd5b3362004a8c603f8262008c39565b1562004aab57604051635f28f62b60e01b815260040160405180910390fd5b6001600160a01b038181166000908152604d6020526040902054161562004ae557604051631a0a9b9f60e21b815260040160405180910390fd5b6001600160a01b03888116600090815260436020526040902054161562004b1f57604051631e6f587560e11b815260040160405180910390fd5b60006001600160a01b03166045888860405162004b3e9291906200a0d6565b908152604051908190036020019020546001600160a01b03161462004b76576040516311fdb94760e01b815260040160405180910390fd5b600062004b8483806200a242565b60405160200162004b979291906200a0d6565b60408051601f1981840301815291815281516020928301206000818152604290935291205490915060ff161562004be15760405163c0bf414360e01b815260040160405180910390fd5b600062004bf7670de0b6b3a7640000346200a1bc565b905060365481101562004c1d576040516317b204bf60e11b815260040160405180910390fd5b6001600160a01b038a1662004c4557604051636520611b60e11b815260040160405180910390fd5b61138862004c5a604087016020880162009b7e565b6001600160401b0316118062004ca0575062004c7d604086016020870162009b7e565b6001600160401b031662004c95602087018762009b7e565b6001600160401b0316115b8062004cdf575062004cb9604086016020870162009b7e565b6001600160401b031662004cd4606087016040880162009b7e565b6001600160401b0316115b1562004cfe5760405163dc81db8560e01b815260040160405180910390fd5b62004d4962004d0e85806200a242565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062008fae92505050565b62004d6757604051635dba5ad760e01b815260040160405180910390fd5b62004d76838a8a8a8a62009150565b62004d9457604051631647e3cb60e11b815260040160405180910390fd5b600062004de28462004da787806200a242565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200928092505050565b905062004df1603f8562009381565b506000838152604260209081526040808320805460ff191660019081179091556001600160a01b0380891680865260419094529190932080548f83166001600160a01b03199182161782559381018054851690931790925560028201805491851691909316179091554260038201556004810162004e718b8d836200a2ea565b50856005820162004e8382826200a3b2565b508790506009820162004e9782826200a4eb565b505042600c8201556001600160a01b038c81166000908152604360205260409081902080546001600160a01b0319169288169290921790915551859060459062004ee5908e908e906200a0d6565b908152602001604051809103902060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316856001600160a01b03168d6001600160a01b03167faecd9fb95e79c75a3a1de93362c6be5fe6ab65770d8614be583884161cd8228d8e8e60405162004f689291906200a5bb565b60405180910390a460408051848152602081018590526001600160a01b0387169182917f24d7bda8602b916d64417f0dbfe2e2e88ec9b1157bd9f596dfdb91ba26624e04910160405180910390a360408051670de0b6b3a7640000808252602082015261dead916001600160a01b038816917f24d7bda8602b916d64417f0dbfe2e2e88ec9b1157bd9f596dfdb91ba26624e04910160405180910390a3604051633041949b60e01b815261200590633041949b906200502e90859089906004016200a0bc565b600060405180830381600087803b1580156200504957600080fd5b505af11580156200505e573d6000803e3d6000fd5b50505050505050505050505050505050565b6040805160608101825260008082526020820181905291810191909152816200509b603f8262008c39565b620050b95760405163056e881160e01b815260040160405180910390fd5b50506001600160a01b031660009081526041602090815260409182902082516060810184526009909101546001600160401b038082168352600160401b8204811693830193909352600160801b90049091169181019190915290565b6001600160a01b0380821660009081526041602090815260408083208151610180810183528154861681526001820154861693810193909352600281015490941690820152600383015460608281019190915260048401805491949160808401919062005182906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620051b0906200a086565b8015620052015780601f10620051d55761010080835404028352916020019162005201565b820191906000526020600020905b815481529060010190602001808311620051e357829003601f168201915b50505050508152602001600582016040518060800160405290816000820180546200522c906200a086565b80601f01602080910402602001604051908101604052809291908181526020018280546200525a906200a086565b8015620052ab5780601f106200527f57610100808354040283529160200191620052ab565b820191906000526020600020905b8154815290600101906020018083116200528d57829003601f168201915b50505050508152602001600182018054620052c6906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620052f4906200a086565b8015620053455780601f10620053195761010080835404028352916020019162005345565b820191906000526020600020905b8154815290600101906020018083116200532757829003601f168201915b5050505050815260200160028201805462005360906200a086565b80601f01602080910402602001604051908101604052809291908181526020018280546200538e906200a086565b8015620053df5780601f10620053b357610100808354040283529160200191620053df565b820191906000526020600020905b815481529060010190602001808311620053c157829003601f168201915b50505050508152602001600382018054620053fa906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462005428906200a086565b8015620054795780601f106200544d5761010080835404028352916020019162005479565b820191906000526020600020905b8154815290600101906020018083116200545b57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620055185750505091909252505050608001519392505050565b33611001146200556957604051630f22c43960e41b81526110016004820152602401620012e4565b6001600160a01b038082166000908152604360205260409020541662005591603f8262008c39565b620055af5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038181166000908152604160205260408082206002810154603b54925163045bc4d160e41b81526004810193909352909316906345bc4d10906024016020604051808303816000875af115801562005612573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200563891906200a135565b90506000603d54426200564c91906200a11f565b90506200565a838262008ce4565b836001600160a01b03167f6e9a2ee7aee95665e3a774a212eb11441b217e3e4656ab9563793094689aabb2828460016040516200569a939291906200a14f565b60405180910390a26002830154604051633041949b60e01b815261200591633041949b91620056d8916001600160a01b03169088906004016200a0bc565b600060405180830381600087803b158015620056f357600080fd5b505af115801562005708573d6000803e3d6000fd5b505050505050505050565b600054610100900460ff1615808015620057345750600054600160ff909116105b80620057505750303b15801562005750575060005460ff166001145b620057b55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620012e4565b6000805460ff191660011790558015620057d9576000805461ff0019166101001790555b334114620057fa5760405163022d8c9560e31b815260040160405180910390fd5b3a156200581a576040516383f1b1d360e01b815260040160405180910390fd5b611388603555686c6b935b8bbd400000603655670de0b6b3a7640000603755602d60385562093a806039556002603a819055678ac7230489e80000603b55680ad78ebc5ac6200000603c556202a300603d5562278d00603e55604a55620058957308e68ec70fa3b629784fdb28887e206ce8561e0862009398565b80156200190f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b33612000146200590657604051630f22c43960e41b81526120006004820152602401620012e4565b60405162461bcd60e51b815260206004820152600a60248201526919195c1c9958d85d195960b21b6044820152606401620012e4565b600054630100000090046001600160a01b031633146200596f576040516306fbb1e360e01b815260040160405180910390fd5b60005462010000900460ff16156200599a57604051631785c68160e01b815260040160405180910390fd5b6000805462ff00001916620100001781556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e7529190a1565b6000620059e3603f8462008c39565b62005a015760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0383811660009081526041602052604090819020600201549051636bbf224960e01b815260048101859052911690636bbf2249906024015b602060405180830381865afa15801562005a5e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005a8491906200a135565b90505b92915050565b60005462010000900460ff161562005ab857604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562005aea5760405163b1d02c3d60e01b815260040160405180910390fd5b8162005af8603f8262008c39565b62005b165760405163056e881160e01b815260040160405180910390fd5b603754349081101562005b3c5760405163dc6f0bdd60e01b815260040160405180910390fd5b6001600160a01b038085166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054339491608084019162005ba4906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462005bd2906200a086565b801562005c235780601f1062005bf75761010080835404028352916020019162005c23565b820191906000526020600020905b81548152906001019060200180831162005c0557829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462005c4e906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462005c7c906200a086565b801562005ccd5780601f1062005ca15761010080835404028352916020019162005ccd565b820191906000526020600020905b81548152906001019060200180831162005caf57829003601f168201915b5050505050815260200160018201805462005ce8906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462005d16906200a086565b801562005d675780601f1062005d3b5761010080835404028352916020019162005d67565b820191906000526020600020905b81548152906001019060200180831162005d4957829003601f168201915b5050505050815260200160028201805462005d82906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462005db0906200a086565b801562005e015780601f1062005dd55761010080835404028352916020019162005e01565b820191906000526020600020905b81548152906001019060200180831162005de357829003601f168201915b5050505050815260200160038201805462005e1c906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462005e4a906200a086565b801562005e9b5780601f1062005e6f5761010080835404028352916020019162005e9b565b820191906000526020600020905b81548152906001019060200180831162005e7d57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b81548152602001906001019080831162005f3a5750505050508152505090508060e00151801562005f7d5750856001600160a01b0316826001600160a01b031614155b1562005f9c57604051636468920360e01b815260040160405180910390fd5b60408082015190516317066a5760e21b81526001600160a01b0384811660048301526000921690635c19a95c90869060240160206040518083038185885af115801562005fed573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906200601491906200a135565b9050826001600160a01b0316876001600160a01b03167f24d7bda8602b916d64417f0dbfe2e2e88ec9b1157bd9f596dfdb91ba26624e04838760405162006065929190918252602082015260400190565b60405180910390a36040808301519051633041949b60e01b815261200591633041949b916200609a919087906004016200a0bc565b600060405180830381600087803b158015620060b557600080fd5b505af1158015620060ca573d6000803e3d6000fd5b50505050851562001908576040516372f6ad8f60e11b81526120059063e5ed5b1e90620060fe9086908b906004016200a0bc565b600060405180830381600087803b1580156200611957600080fd5b505af11580156200612e573d6000803e3d6000fd5b5050505050505050505050565b60005462010000900460ff16156200616657604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620061985760405163b1d02c3d60e01b815260040160405180910390fd5b620061a262008dd8565b620061af603f8262008c39565b620061cd5760405163056e881160e01b815260040160405180910390fd5b6000620061d962008dd8565b6001600160a01b0381166000908152604f6020526040812080549293509190859003620062b05760005b818110156200628457836001600160a01b03167f08e60c1b84aab23d99a7262015e647d5ffd6c6e08f78205e1df6774c48e1427a8483815481106200624c576200624c6200a18a565b90600052602060002001546040516200626791815260200190565b60405180910390a2806200627b816200a1a0565b91505062006203565b506001600160a01b0383166000908152604f60205260408120620062a8916200968a565b505050505050565b60005b858110156200640e576000878783818110620062d357620062d36200a18a565b90506020020135905060005b83811015620063f65781858281548110620062fe57620062fe6200a18a565b906000526020600020015403620063e157846200631d6001866200a1bc565b815481106200633057620063306200a18a565b90600052602060002001548582815481106200635057620063506200a18a565b9060005260206000200181905550848054806200637157620063716200a5d1565b60019003818190600052602060002001600090559055838062006394906200a5e7565b945050856001600160a01b03167f08e60c1b84aab23d99a7262015e647d5ffd6c6e08f78205e1df6774c48e1427a83604051620063d391815260200190565b60405180910390a2620063f6565b80620063ed816200a1a0565b915050620062df565b5050808062006405906200a1a0565b915050620062b3565b508154600003620062a8576001600160a01b0383166000908152604f60205260408120620062a8916200968a565b505050565b6200646d6040518060800160405280606081526020016060815260200160608152602001606081525090565b816200647b603f8262008c39565b620064995760405163056e881160e01b815260040160405180910390fd5b6001600160a01b03831660009081526041602052604090819020815160808101909252600501805482908290620064d0906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620064fe906200a086565b80156200654f5780601f1062006523576101008083540402835291602001916200654f565b820191906000526020600020905b8154815290600101906020018083116200653157829003601f168201915b505050505081526020016001820180546200656a906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462006598906200a086565b8015620065e95780601f10620065bd57610100808354040283529160200191620065e9565b820191906000526020600020905b815481529060010190602001808311620065cb57829003601f168201915b5050505050815260200160028201805462006604906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462006632906200a086565b8015620066835780601f10620066575761010080835404028352916020019162006683565b820191906000526020600020905b8154815290600101906020018083116200666557829003601f168201915b505050505081526020016003820180546200669e906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620066cc906200a086565b80156200671d5780601f10620066f1576101008083540402835291602001916200671d565b820191906000526020600020905b815481529060010190602001808311620066ff57829003601f168201915b505050505081525050915050919050565b60005462010000900460ff16156200675957604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff16156200678b5760405163b1d02c3d60e01b815260040160405180910390fd5b62006797828262009431565b5050565b3361100714620067c357604051630f22c43960e41b81526110076004820152602401620012e4565b620068306040518060400160405280601081526020016f1d1c985b9cd9995c91d85cd31a5b5a5d60821b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b15620068eb5760208114620068625783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f8401819004810282018101909252828152600091620068a59185858083850183828082843760009201919091525092939250506200959a9050565b90506108fc811080620068b9575061271081115b15620068e25784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b60355562007708565b6200695c6040518060400160405280601481526020017336b4b729b2b6332232b632b3b0ba34b7b721272160611b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b1562006a2657602081146200698e5783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f8401819004810282018101909252828152600091620069d19185858083850183828082843760009201919091525092939250506200959a9050565b9050683635c9adc5dea00000811080620069f4575069152d02c7e14af680000081115b1562006a1d5784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b60365562007708565b62006a99604051806040016040528060168152602001756d696e44656c65676174696f6e424e424368616e676560501b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b1562006b60576020811462006acb5783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f840181900481028201810190925282815260009162006b0e9185858083850183828082843760009201919091525092939250506200959a9050565b905067016345785d8a000081108062006b2e5750678ac7230489e8000081115b1562006b575784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b60375562007708565b62006bd1604051806040016040528060148152602001736d6178456c656374656456616c696461746f727360601b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b1562006c89576020811462006c035783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f840181900481028201810190925282815260009162006c469185858083850183828082843760009201919091525092939250506200959a9050565b905080158062006c5757506101f481115b1562006c805784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b60385562007708565b62006cf26040518060400160405280600c81526020016b1d5b989bdb9914195c9a5bd960a21b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b1562006daf576020811462006d245783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f840181900481028201810190925282815260009162006d679185858083850183828082843760009201919091525092939250506200959a9050565b90506203f48081108062006d7d575062278d0081115b1562006da65784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b60395562007708565b62006e1d60405180604001604052806011815260200170726564656c65676174654665655261746560781b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b1562006eca576020811462006e4f5783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f840181900481028201810190925282815260009162006e929185858083850183828082843760009201919091525092939250506200959a9050565b9050606481111562006ec15784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b603a5562007708565b62006f3a60405180604001604052806013815260200172191bdddb9d1a5b5954db185cda105b5bdd5b9d606a1b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b1562006ffb576020811462006f6c5783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f840181900481028201810190925282815260009162006faf9185858083850183828082843760009201919091525092939250506200959a9050565b9050674563918244f4000081108062006fc95750603c5481115b1562006ff25784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b603b5562007708565b620070696040518060400160405280601181526020017019995b1bdb9e54db185cda105b5bdd5b9d607a1b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b156200712c57602081146200709b5783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f8401819004810282018101909252828152600091620070de9185858083850183828082843760009201919091525092939250506200959a9050565b905068056bc75e2d63100000811080620070fa5750603b548111155b15620071235784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b603c5562007708565b620071996040518060400160405280601081526020016f646f776e74696d654a61696c54696d6560801b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b15620072565760208114620071cb5783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f84018190048102820181019092528281526000916200720e9185858083850183828082843760009201919091525092939250506200959a9050565b90506202a300811080620072245750603e548110155b156200724d5784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b603d5562007708565b620072c16040518060400160405280600e81526020016d66656c6f6e794a61696c54696d6560901b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b156200737e5760208114620072f35783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f8401819004810282018101909252828152600091620073369185858083850183828082843760009201919091525092939250506200959a9050565b9050620d2f008110806200734c5750603d548111155b15620073755784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b603e5562007708565b620073f86040518060400160405280601c81526020017f6d617846656c6f6e794265747765656e42726561746865426c6f636b0000000081525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b15620074a457602081146200742a5783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f84018190048102820181019092528281526000916200746d9185858083850183828082843760009201919091525092939250506200959a9050565b9050806000036200749b5784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b604a5562007708565b620075126040518060400160405280601181526020017039ba30b5b2a43ab1283937ba32b1ba37b960791b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b15620075d25760148114620075445783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b60006200758c601484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200959a9050565b90506001600160a01b038116620075c05784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b620075cb816200959f565b5062007708565b620076396040518060400160405280600a8152602001696d61784e6f646549447360b01b81525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200953d9050565b15620076e557602081146200766b5783838383604051630a5a604160e01b8152600401620012e494939291906200a601565b604080516020601f8401819004810282018101909252828152600091620076ae9185858083850183828082843760009201919091525092939250506200959a9050565b905080600003620076dc5784848484604051630a5a604160e01b8152600401620012e494939291906200a601565b604e5562007708565b838383836040516325ee20d560e21b8152600401620012e494939291906200a601565b7ff1ce9b2cbf50eeb05769a29e2543fd350cab46894a7dd9978a12d534bb20e633848484846040516200773f94939291906200a601565b60405180910390a150505050565b60005462010000900460ff16156200777857604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620077aa5760405163b1d02c3d60e01b815260040160405180910390fd5b816000816001600160401b03811115620077c857620077c86200985f565b604051908082528060200260200182016040528015620077f2578160200160208202803683370190505b5090506000805b83811015620078f0576200783b8787838181106200781b576200781b6200a18a565b9050602002016020810190620078329190620096f0565b603f9062008c39565b620078595760405163056e881160e01b815260040160405180910390fd5b604160008888848181106200787257620078726200a18a565b9050602002016020810190620078899190620096f0565b6001600160a01b0390811682526020820192909252604001600020600201548451911692508290849083908110620078c557620078c56200a18a565b6001600160a01b0390921660209283029190910190910152620078e8816200a1a0565b9050620077f9565b50604051634484077560e01b8152612005906344840775906200331d90859088906004016200a1ec565b60608060006200792b603f62008f95565b90508085101562007aef57831562007944578362007946565b805b93506000846200795787846200a1bc565b116200796f576200796986836200a1bc565b62007971565b845b9050806001600160401b038111156200798e576200798e6200985f565b604051908082528060200260200182016040528015620079b8578160200160208202803683370190505b509350806001600160401b03811115620079d657620079d66200985f565b60405190808252806020026020018201604052801562007a00578160200160208202803683370190505b50925060005b8181101562007aec5762007a1f620044d882896200a11f565b85828151811062007a345762007a346200a18a565b60200260200101906001600160a01b031690816001600160a01b0316815250506041600086838151811062007a6d5762007a6d6200a18a565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060020160009054906101000a90046001600160a01b031684828151811062007ac15762007ac16200a18a565b6001600160a01b039092166020928302919091019091015262007ae4816200a1a0565b905062007a06565b50505b9250925092565b60008162007b06603f8262008c39565b62007b245760405163056e881160e01b815260040160405180910390fd5b50506001600160a01b03166000908152604160205260409020600c015490565b336110011462007b6c57604051630f22c43960e41b81526110016004820152602401620012e4565b60005462010000900460ff161562007b9757604051631785c68160e01b815260040160405180910390fd5b6001600160a01b038082166000908152604360205260409020541662007bbf603f8262008c39565b62007bdd5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b03811660009081526041602052604081209062007c0562015180426200a0fc565b604a546000828152604b60205260409020549192501162007c395760405163bd52fcdb60e01b815260040160405180910390fd5b6000818152604b6020526040812080546001929062007c5a9084906200a11f565b90915550506001600160a01b0384166000908152604460205260409020541580159062007caf57506001600160a01b038416600090815260446020526040902054429062007cad9062015180906200a11f565b105b1562007cce576040516330abb81d60e21b815260040160405180910390fd5b60008062007cde85600062008c5c565b915091508162007d0157604051631b919bb160e11b815260040160405180910390fd5b6002840154603c5460405163045bc4d160e41b815260048101919091526000916001600160a01b0316906345bc4d10906024016020604051808303816000875af115801562007d54573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007d7a91906200a135565b905062007d88858362008ce4565b856001600160a01b03167f6e9a2ee7aee95665e3a774a212eb11441b217e3e4656ab9563793094689aabb28383600060405162007dc8939291906200a14f565b60405180910390a26002850154604051633041949b60e01b815261200591633041949b91620060fe916001600160a01b0316908a906004016200a0bc565b6001600160a01b038082166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054929384938493849390929160808401919062007e77906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462007ea5906200a086565b801562007ef65780601f1062007eca5761010080835404028352916020019162007ef6565b820191906000526020600020905b81548152906001019060200180831162007ed857829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462007f21906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462007f4f906200a086565b801562007fa05780601f1062007f745761010080835404028352916020019162007fa0565b820191906000526020600020905b81548152906001019060200180831162007f8257829003601f168201915b5050505050815260200160018201805462007fbb906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462007fe9906200a086565b80156200803a5780601f106200800e576101008083540402835291602001916200803a565b820191906000526020600020905b8154815290600101906020018083116200801c57829003601f168201915b5050505050815260200160028201805462008055906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462008083906200a086565b8015620080d45780601f10620080a857610100808354040283529160200191620080d4565b820191906000526020600020905b815481529060010190602001808311620080b657829003601f168201915b50505050508152602001600382018054620080ef906200a086565b80601f01602080910402602001604051908101604052809291908181526020018280546200811d906200a086565b80156200816e5780601f1062008142576101008083540402835291602001916200816e565b820191906000526020600020905b8154815290600101906020018083116200815057829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b8154815260200190600101908083116200820d5750505091909252505050606081015160e0820151610100909201519097919650945092505050565b60005462010000900460ff16156200827457604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620082a65760405163b1d02c3d60e01b815260040160405180910390fd5b620082b062008e36565b620082bd603f8262008c39565b620082db5760405163056e881160e01b815260040160405180910390fd5b6000620082e762008e36565b6001600160a01b0381166000908152604160205260409020600c8101549192509042906200831a9062015180906200a11f565b11156200833a57604051631f92cdbd60e11b815260040160405180910390fd5b6005810180546200834b906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462008379906200a086565b8015620083ca5780601f106200839e57610100808354040283529160200191620083ca565b820191906000526020600020905b815481529060010190602001808311620083ac57829003601f168201915b5050508287525085916005840191508190620083e790826200a637565b5060208201516001820190620083fe90826200a637565b50604082015160028201906200841590826200a637565b50606082015160038201906200842c90826200a637565b505042600c830155506040516001600160a01b038316907f85d6366b336ade7f106987ec7a8eac1e8799e508aeab045a39d2f63e0dc969d990600090a250505050565b60005462010000900460ff16156200849a57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620084cc5760405163b1d02c3d60e01b815260040160405180910390fd5b828114620084ed576040516341abc80160e01b815260040160405180910390fd5b60005b838110156200855e576200854b8585838181106200851257620085126200a18a565b9050602002016020810190620085299190620096f0565b8484848181106200853e576200853e6200a18a565b9050602002013562009431565b62008556816200a1a0565b9050620084f0565b5050505050565b6001600160a01b0380821660009081526041602090815260408083208151610180810183528154861681526001820154861693810193909352600281015490941690820152600383015460608201526004830180549293849390916080840191620085d0906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620085fe906200a086565b80156200864f5780601f1062008623576101008083540402835291602001916200864f565b820191906000526020600020905b8154815290600101906020018083116200863157829003601f168201915b50505050508152602001600582016040518060800160405290816000820180546200867a906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620086a8906200a086565b8015620086f95780601f10620086cd57610100808354040283529160200191620086f9565b820191906000526020600020905b815481529060010190602001808311620086db57829003601f168201915b5050505050815260200160018201805462008714906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462008742906200a086565b8015620087935780601f10620087675761010080835404028352916020019162008793565b820191906000526020600020905b8154815290600101906020018083116200877557829003601f168201915b50505050508152602001600282018054620087ae906200a086565b80601f0160208091040260200160405190810160405280929190818152602001828054620087dc906200a086565b80156200882d5780601f1062008801576101008083540402835291602001916200882d565b820191906000526020600020905b8154815290600101906020018083116200880f57829003601f168201915b5050505050815260200160038201805462008848906200a086565b80601f016020809104026020016040519081016040528092919081815260200182805462008876906200a086565b8015620088c75780601f106200889b57610100808354040283529160200191620088c7565b820191906000526020600020905b815481529060010190602001808311620088a957829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620089665750505091909252505050604001519392505050565b60006200899e603f8462008c39565b620089bc5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038381166000908152604160205260409081902060020154905163aa1966cd60e01b81526004810185905291169063aa1966cd9060240162005a40565b60005462010000900460ff161562008a2b57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562008a5d5760405163b1d02c3d60e01b815260040160405180910390fd5b62008a6762008e36565b62008a74603f8262008c39565b62008a925760405163056e881160e01b815260040160405180910390fd5b600062008a9e62008e36565b905062008aaf818787878762009150565b62008acd57604051631647e3cb60e11b815260040160405180910390fd5b60006001600160a01b03166045878760405162008aec9291906200a0d6565b908152604051908190036020019020546001600160a01b03161462008b24576040516311fdb94760e01b815260040160405180910390fd5b6001600160a01b0381166000908152604160205260409020600c810154429062008b539062015180906200a11f565b111562008b7357604051631f92cdbd60e11b815260040160405180910390fd5b4260468260040160405162008b8991906200a6ff565b908152604051908190036020019020556004810162008baa8789836200a2ea565b5042600c820155604051829060459062008bc8908a908a906200a0d6565b90815260405190819003602001812080546001600160a01b039384166001600160a01b0319909116179055908316907f783156582145bd0ff7924fae6953ba054cf1233eb60739a200ddb10de068ff0d9062008c28908a908a906200a5bb565b60405180910390a250505050505050565b6001600160a01b0381166000908152600183016020526040812054151562005a84565b6000806000848460405160200162008c769291906200a77d565b60408051601f1981840301815291815281516020928301206000818152604c9093529120549091504281111562008cb6576000809350935050506200264a565b603e5462008cc590426200a11f565b6000928352604c60205260409092208290555060019590945092505050565b6000600162008cf4603f62008f95565b62008d0091906200a1bc565b604954108015915062008d4c5760018301546040516001600160a01b03909116907f2afdc18061ac21cff7d9f11527ab9c8dec6fabd4edf6f894ed634bebd6a20d4590600090a2505050565b82600b015482111562008d6157600b83018290555b600a83015460ff166200643c57600a8301805460ff191660019081179091556049805460009062008d949084906200a11f565b909155505060018301546040516001600160a01b03909116907f4905ac32602da3fb8b4b7b00c285e5fc4c6c2308cc908b4a1e4e9625a29c90a390600090a2505050565b336000908152604360205260408120546001600160a01b03161562008e145750336000908152604360205260409020546001600160a01b031690565b62008e1e62008e36565b905090565b604e5460000362008e34576005604e555b565b336000908152604d60205260408120546001600160a01b03161562008e725750336000908152604d60205260409020546001600160a01b031690565b503390565b6001600160a01b0381166000908152604160205260409020600a81015460ff161562008ea1575050565b6036546002820154604051630913db4760e01b81526001600160a01b03858116600483015290911690630913db4790602401602060405180830381865afa15801562008ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008f1791906200a135565b1015620067975762008f3981603d544262008f3391906200a11f565b62008ce4565b80546040516335409f7f60e01b81526001600160a01b039091166004820152611000906335409f7f90602401600060405180830381600087803b15801562008f8057600080fd5b505af1158015620062a8573d6000803e3d6000fd5b600062005a87825490565b600062005a8483836200960b565b60008082905060038151108062008fc6575060098151115b1562008fd55750600092915050565b60418160008151811062008fed5762008fed6200a18a565b016020015160f81c10806200901f5750605a816000815181106200901557620090156200a18a565b016020015160f81c115b156200902e5750600092915050565b60015b8151811015620091465760308282815181106200905257620090526200a18a565b016020015160f81c108062009083575060398282815181106200907957620090796200a18a565b016020015160f81c115b8015620090d357506041828281518110620090a257620090a26200a18a565b016020015160f81c1080620090d35750605a828281518110620090c957620090c96200a18a565b016020015160f81c115b80156200912357506061828281518110620090f257620090f26200a18a565b016020015160f81c1080620091235750607a8282815181106200911957620091196200a18a565b016020015160f81c115b1562009133575060009392505050565b6200913e816200a1a0565b905062009031565b5060019392505050565b600060308414158062009164575060608214155b15620091735750600062009277565b6000868686466040516020016200918e94939291906200a7c7565b60408051808303601f1901815282825280516020918201208184528383019092529092506000919060208201818036833701905050905081602082015260008186868a8a604051602001620091e89594939291906200a7f4565b60408051808303601f190181526001808452838301909252925060009190602082018180368337019050509050815160016020830182602086016066600019fa6200923257600080fd5b506000816000815181106200924b576200924b6200a18a565b016020015160f81c9050600181146200926d5760009550505050505062009277565b6001955050505050505b95945050505050565b60008061200361dead6040516200929790620096aa565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f080158015620092da573d6000803e3d6000fd5b509050806001600160a01b031663f399e22e3486866040518463ffffffff1660e01b81526004016200930e9291906200a82c565b6000604051808303818588803b1580156200932857600080fd5b505af11580156200933d573d6000803e3d6000fd5b50506040516001600160a01b038086169450881692507fd481492e4e93bb36b4c12a5af93f03be3bf04b454dfbc35dd2663fa26f44d5b09150600090a39392505050565b600062005a84836001600160a01b03841662009638565b600054610100900460ff16620094055760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620012e4565b600080546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b816200943f603f8262008c39565b6200945d5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b03838116600090815260416020526040808220600201549051635569f64b60e11b8152336004820152602481018690529192169063aad3ec96906044016020604051808303816000875af1158015620094c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620094e791906200a135565b9050336001600160a01b0316846001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683836040516200952f91815260200190565b60405180910390a350505050565b6000816040516020016200955291906200a852565b60405160208183030381529060405280519060200120836040516020016200957b91906200a852565b6040516020818303038152906040528051906020012014905092915050565b015190565b600080546040516001600160a01b0380851693630100000090930416917f44fc1b38a4abaa91ebd1b628a5b259a698f86238c8217d68f516e87769c60c0b91a3600080546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b60008260000182815481106200962557620096256200a18a565b9060005260206000200154905092915050565b6000818152600183016020526040812054620096815750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562005a87565b50600062005a87565b50805460008255906000526020600020908101906200190f9190620096b8565b610e96806200a87183390190565b5b80821115620096cf5760008155600101620096b9565b5090565b80356001600160a01b0381168114620096eb57600080fd5b919050565b6000602082840312156200970357600080fd5b62005a8482620096d3565b60008083601f8401126200972157600080fd5b5081356001600160401b038111156200973957600080fd5b6020830191508360208285010111156200264a57600080fd5b600080602083850312156200976657600080fd5b82356001600160401b038111156200977d57600080fd5b6200978b858286016200970e565b90969095509350505050565b600080600060408486031215620097ad57600080fd5b833560ff81168114620097bf57600080fd5b925060208401356001600160401b03811115620097db57600080fd5b620097e9868287016200970e565b9497909650939450505050565b60005b8381101562009813578181015183820152602001620097f9565b50506000910152565b6000815180845262009836816020860160208601620097f6565b601f01601f19169290920160200192915050565b60208152600062005a8460208301846200981c565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200989a576200989a6200985f565b60405290565b60006001600160401b0380841115620098bd57620098bd6200985f565b604051601f8501601f19908116603f01168101908282118183101715620098e857620098e86200985f565b816040528093508581528686860111156200990257600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156200992f57600080fd5b81356001600160401b038111156200994657600080fd5b8201601f810184136200995857600080fd5b6200996984823560208401620098a0565b949350505050565b60008083601f8401126200998457600080fd5b5081356001600160401b038111156200999c57600080fd5b6020830191508360208260051b85010111156200264a57600080fd5b60008060208385031215620099cc57600080fd5b82356001600160401b03811115620099e357600080fd5b6200978b8582860162009971565b600081518084526020808501945080840160005b8381101562009a2c5781516001600160a01b03168752958201959082019060010162009a05565b509495945050505050565b60408152600062009a4c6040830185620099f1565b6020838203818501528185518084528284019150828160051b8501018388016000805b8481101562009ac657878403601f19018652825180518086529088019088860190845b8181101562009ab05783518352928a0192918a019160010162009a92565b5050968801969450509186019160010162009a6f565b50919a9950505050505050505050565b6000806040838503121562009aea57600080fd5b62009af583620096d3565b946020939093013593505050565b80358015158114620096eb57600080fd5b6000806000806080858703121562009b2b57600080fd5b62009b3685620096d3565b935062009b4660208601620096d3565b92506040850135915062009b5d6060860162009b03565b905092959194509250565b6001600160401b03811681146200190f57600080fd5b60006020828403121562009b9157600080fd5b813562009b9e8162009b68565b9392505050565b6000806040838503121562009bb957600080fd5b50508035926020909101359150565b60808152600062009bdd6080830187620099f1565b82810360208481019190915286518083528782019282019060005b8181101562009c165784518352938301939183019160010162009bf8565b5050848103604086015286518082528282019350600581901b8201830183890160005b8381101562009c6b57601f1985840301875262009c588383516200981c565b9686019692509085019060010162009c39565b5050809550505050505082606083015295945050505050565b600080600080600080600087890360e081121562009ca157600080fd5b62009cac89620096d3565b975060208901356001600160401b038082111562009cc957600080fd5b62009cd78c838d016200970e565b909950975060408b013591508082111562009cf157600080fd5b62009cff8c838d016200970e565b90975095508591506060605f198401121562009d1a57600080fd5b60608b01945060c08b013592508083111562009d3557600080fd5b505088016080818b03121562009d4a57600080fd5b8091505092959891949750929550565b6000806040838503121562009d6e57600080fd5b62009d7983620096d3565b915062009d896020840162009b03565b90509250929050565b60208152600082516080602084015262009db060a08401826200981c565b90506020840151601f198085840301604086015262009dd083836200981c565b9250604086015191508085840301606086015262009def83836200981c565b92506060860151915080858403016080860152506200927782826200981c565b6000806000806040858703121562009e2657600080fd5b84356001600160401b038082111562009e3e57600080fd5b62009e4c888389016200970e565b9096509450602087013591508082111562009e6657600080fd5b5062009e75878288016200970e565b95989497509550505050565b60008060006040848603121562009e9757600080fd5b83356001600160401b0381111562009eae57600080fd5b62009ebc8682870162009971565b909450925062009ed1905060208501620096d3565b90509250925092565b60608152600062009eef6060830186620099f1565b828103602084015262009f038186620099f1565b915050826040830152949350505050565b600082601f83011262009f2657600080fd5b62005a8483833560208501620098a0565b60006020828403121562009f4a57600080fd5b81356001600160401b038082111562009f6257600080fd5b908301906080828603121562009f7757600080fd5b62009f8162009875565b82358281111562009f9157600080fd5b62009f9f8782860162009f14565b82525060208301358281111562009fb557600080fd5b62009fc38782860162009f14565b60208301525060408301358281111562009fdc57600080fd5b62009fea8782860162009f14565b6040830152506060830135828111156200a00357600080fd5b6200a0118782860162009f14565b60608301525095945050505050565b600080600080604085870312156200a03757600080fd5b84356001600160401b03808211156200a04f57600080fd5b6200a05d8883890162009971565b909650945060208701359150808211156200a07757600080fd5b5062009e758782880162009971565b600181811c908216806200a09b57607f821691505b6020821081036200207c57634e487b7160e01b600052602260045260246000fd5b6001600160a01b0392831681529116602082015260400190565b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b6000826200a11a57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562005a875762005a876200a0e6565b6000602082840312156200a14857600080fd5b5051919050565b8381526020810183905260608101600383106200a17c57634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b634e487b7160e01b600052603260045260246000fd5b6000600182016200a1b5576200a1b56200a0e6565b5060010190565b8181038181111562005a875762005a876200a0e6565b808202811582820484141762005a875762005a876200a0e6565b6040815260006200a2016040830185620099f1565b905060018060a01b03831660208301529392505050565b6001600160401b038281168282160390808211156200a23b576200a23b6200a0e6565b5092915050565b6000808335601e198436030181126200a25a57600080fd5b8301803591506001600160401b038211156200a27557600080fd5b6020019150368190038213156200264a57600080fd5b601f8211156200643c57600081815260208120601f850160051c810160208610156200a2b45750805b601f850160051c820191505b81811015620062a8578281556001016200a2c0565b600019600383901b1c191660019190911b1790565b6001600160401b038311156200a304576200a3046200985f565b6200a31c836200a31583546200a086565b836200a28b565b6000601f8411600181146200a34f57600085156200a33a5750838201355b6200a34686826200a2d5565b8455506200855e565b600083815260209020601f19861690835b828110156200a38257868501358255602094850194600190920191016200a360565b50868210156200a3a05760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6200a3be82836200a242565b6001600160401b038111156200a3d8576200a3d86200985f565b6200a3f0816200a3e985546200a086565b856200a28b565b6000601f8211600181146200a42357600083156200a40e5750838201355b6200a41a84826200a2d5565b8655506200a480565b600085815260209020601f19841690835b828110156200a45657868501358255602094850194600190920191016200a434565b50848210156200a4745760001960f88660031b161c19848701351681555b505060018360011b0185555b505050506200a49360208301836200a242565b6200a4a38183600186016200a2ea565b50506200a4b460408301836200a242565b6200a4c48183600286016200a2ea565b50506200a4d560608301836200a242565b6200a4e58183600386016200a2ea565b50505050565b81356200a4f88162009b68565b6001600160401b03811690508154816001600160401b0319821617835560208401356200a5258162009b68565b6fffffffffffffffff0000000000000000604091821b166fffffffffffffffffffffffffffffffff198316841781178555908501356200a5658162009b68565b6001600160c01b0319929092169092179190911760809190911b67ffffffffffffffff60801b1617905550565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000620099696020830184866200a592565b634e487b7160e01b600052603160045260246000fd5b6000816200a5f9576200a5f96200a0e6565b506000190190565b6040815260006200a6176040830186886200a592565b82810360208401526200a62c8185876200a592565b979650505050505050565b81516001600160401b038111156200a653576200a6536200985f565b6200a66b816200a66484546200a086565b846200a28b565b602080601f8311600181146200a69f57600084156200a68a5750858301515b6200a69685826200a2d5565b865550620062a8565b600085815260208120601f198616915b828110156200a6d0578886015182559484019460019091019084016200a6af565b50858210156200a6ef5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008083546200a70f816200a086565b600182811680156200a72a57600181146200a740576200a771565b60ff19841687528215158302870194506200a771565b8760005260208060002060005b858110156200a7685781548a8201529084019082016200a74d565b50505082870194505b50929695505050505050565b6bffffffffffffffffffffffff198360601b1681526000600383106200a7b357634e487b7160e01b600052602160045260246000fd5b5060f89190911b6014820152601501919050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b600086516200a808818460208b01620097f6565b82018587823760009086019081528385823760009301928352509095945050505050565b6001600160a01b038316815260406020820181905260009062009969908301846200981c565b600082516200a866818460208701620097f6565b919091019291505056fe608060405260405162000e9638038062000e96833981016040819052620000269162000497565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ca565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b620001691760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000e6f60279139620002f8565b9392505050565b60006200018060008051602062000e4f83398151915260001b6200037760201b620001951760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e4f83398151915260001b6200037760201b620001951760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a816200037a60201b620001981760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200037760201b620001951760201c565b6060600080856001600160a01b03168560405162000317919062000577565b600060405180830381855af49150503d806000811462000354576040519150601f19603f3d011682016040523d82523d6000602084013e62000359565b606091505b5090925090506200036d8683838762000389565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620003fd578251600003620003f5576001600160a01b0385163b620003f55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001f1565b508162000409565b62000409838362000411565b949350505050565b815115620004225781518083602001fd5b8060405162461bcd60e51b8152600401620001f1919062000595565b80516001600160a01b03811681146200045657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200048e57818101518382015260200162000474565b50506000910152565b600080600060608486031215620004ad57600080fd5b620004b8846200043e565b9250620004c8602085016200043e565b60408501519092506001600160401b0380821115620004e657600080fd5b818601915086601f830112620004fb57600080fd5b8151818111156200051057620005106200045b565b604051601f8201601f19908116603f011681019083821181831017156200053b576200053b6200045b565b816040528281528960208487010111156200055557600080fd5b6200056883602083016020880162000471565b80955050505050509250925092565b600082516200058b81846020870162000471565b9190910192915050565b6020815260008251806020840152620005b681604085016020870162000471565b601f01601f19169190910160400192915050565b61087580620005da6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f6101a7565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a576100536101da565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a57610053610231565b63070d7c6960e41b6001600160e01b031982160161009a57610053610277565b621eb96f60e61b6001600160e01b03198216016100b9576100536102a8565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102e8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102fc565b565b606061018e83836040518060600160405280602781526020016108426027913961030c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101e4610384565b60006101f33660048184610695565b81019061020091906106db565b905061021d8160405180602001604052806000815250600061038f565b505060408051602081019091526000815290565b60606000806102433660048184610695565b810190610250919061070c565b915091506102608282600161038f565b604051806020016040528060008152509250505090565b6060610281610384565b60006102903660048184610695565b81019061029d91906106db565b905061021d816103bb565b60606102b2610384565b60006102bc6101a7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102f2610384565b60006102bc610412565b610167610307610412565b610421565b6060600080856001600160a01b03168560405161032991906107f2565b600060405180830381855af49150503d8060008114610364576040519150601f19603f3d011682016040523d82523d6000602084013e610369565b606091505b509150915061037a86838387610445565b9695505050505050565b341561016757600080fd5b610398836104c6565b6000825111806103a55750805b156103b6576103b48383610169565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103e46101a7565b604080516001600160a01b03928316815291841660208301520160405180910390a161040f81610506565b50565b600061041c6105af565b905090565b3660008037600080366000845af43d6000803e808015610440573d6000f35b3d6000fd5b606083156104b45782516000036104ad576001600160a01b0385163b6104ad5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b50816104be565b6104be83836105d7565b949350505050565b6104cf81610601565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661056b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101cb565b8151156105e75781518083602001fd5b8060405162461bcd60e51b815260040161014e919061080e565b6001600160a01b0381163b61066e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61058e565b600080858511156106a557600080fd5b838611156106b257600080fd5b5050820193919092039150565b80356001600160a01b03811681146106d657600080fd5b919050565b6000602082840312156106ed57600080fd5b61018e826106bf565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561071f57600080fd5b610728836106bf565b9150602083013567ffffffffffffffff8082111561074557600080fd5b818501915085601f83011261075957600080fd5b81358181111561076b5761076b6106f6565b604051601f8201601f19908116603f01168101908382118183101715610793576107936106f6565b816040528281528860208487010111156107ac57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107e95781810151838201526020016107d1565b50506000910152565b600082516108048184602087016107ce565b9190910192915050565b602081526000825180602084015261082d8160408501602087016107ce565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000811000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000811000a \ No newline at end of file diff --git a/core/systemcontracts/maxwell/rialto/StakeHubContract b/core/systemcontracts/maxwell/rialto/StakeHubContract new file mode 100644 index 0000000000..47f9e75338 --- /dev/null +++ b/core/systemcontracts/maxwell/rialto/StakeHubContract @@ -0,0 +1 @@ +6080604052600436106200043b5760003560e01c806386d545061162000233578063ca47908f116200012f578063dd42a1dd11620000b9578063f1f74d841162000084578063f1f74d841462000d74578063f80a34021462000d8c578063fb50b31f1462000db1578063fc0c5ff11462000dd6578063ff69ab611462000dee57600080fd5b8063dd42a1dd1462000ce1578063e8f67c3b1462000d08578063e992aaf51462000d20578063efdbf0e11462000d3857600080fd5b8063d7c2dfc811620000fa578063d7c2dfc81462000c67578063d8ca511f1462000c8c578063daacdb661462000ca4578063dbda7fb31462000cbc57600080fd5b8063ca47908f1462000bd0578063cbb04d9d1462000be8578063d115a2061462000c29578063d6ca429d1462000c4257600080fd5b8063b187bd2611620001bd578063bfff04751162000188578063bfff04751462000b57578063c166f58a1462000b7c578063c38fbec81462000b93578063c473318f1462000bb8578063c8509d81146200095057600080fd5b8063b187bd261462000ac4578063baa7199e1462000ae4578063bdceadf31462000b09578063bff02e201462000b2157600080fd5b8063a1832e6411620001fe578063a1832e641462000a21578063a43569b31462000a46578063aad3ec961462000a7a578063ac4317511462000a9f57600080fd5b806386d54506146200098d5780638a4d3fa814620009c75780638cd22b2214620009e5578063982ef0a71462000a0a57600080fd5b80634838d165116200034357806364028fbd11620002cd57806375cc7d89116200029857806375cc7d8914620008fb57806376e7d6d614620009205780638129fc1c1462000938578063831d65d114620009505780638456cb59146200097557600080fd5b806364028fbd1462000836578063663706d3146200084d5780636ec01b27146200087e5780636f8e2fa414620008d657600080fd5b80634e6fd6c4116200030e5780634e6fd6c4146200079d5780635949187114620007b55780635e7cc1c914620007da57806363a036b514620007ff57600080fd5b80634838d16514620006e957806349f41a42146200072e5780634a49ac4c14620007535780634d99dd16146200077857600080fd5b80631fab701511620003c5578063384099881162000390578063384099881462000662578063417c73a7146200067a578063449ecfe6146200069f57806345211bfd14620006c457600080fd5b80631fab701514620005a95780632b727c8614620005ce5780632e8e8c7114620005f3578063367dad49146200062d57600080fd5b80630e9fbf5111620004065780630e9fbf5114620004f35780631182b875146200051857806317b4f353146200054c5780631fa8882b146200059157600080fd5b8063046f7da2146200045b578063059ddd2214620004735780630661806e14620004b5578063092193ab14620004dc57600080fd5b36620004565760345460ff166001146200045457600080fd5b005b600080fd5b3480156200046857600080fd5b506200045462000e06565b3480156200048057600080fd5b506200049862000492366004620096e4565b62000e98565b6040516001600160a01b0390911681526020015b60405180910390f35b348015620004c257600080fd5b50620004cd60365481565b604051908152602001620004ac565b62000454620004ed366004620096e4565b620012c0565b3480156200050057600080fd5b50620004546200051236600462009746565b62001911565b3480156200052557600080fd5b506200053d620005373660046200978b565b62001c3b565b604051620004ac91906200983e565b3480156200055957600080fd5b50620004986200056b36600462009910565b80516020818301810180516045825292820191909301209152546001600160a01b031681565b3480156200059e57600080fd5b50620004cd61025881565b348015620005b657600080fd5b5062000454620005c8366004620099ac565b62001cd3565b348015620005db57600080fd5b5062000498620005ed366004620096e4565b6200202a565b3480156200060057600080fd5b506200049862000612366004620096e4565b604d602052600090815260409020546001600160a01b031681565b3480156200063a57600080fd5b50620006526200064c366004620099ac565b6200207f565b604051620004ac92919062009a2b565b3480156200066f57600080fd5b50620004cd60375481565b3480156200068757600080fd5b506200045462000699366004620096e4565b6200264e565b348015620006ac57600080fd5b5062000454620006be366004620096e4565b620026d0565b348015620006d157600080fd5b5062000454620006e3366004620096e4565b620028b5565b348015620006f657600080fd5b506200071d62000708366004620096e4565b60016020526000908152604090205460ff1681565b6040519015158152602001620004ac565b3480156200073b57600080fd5b50620004546200074d366004620096e4565b62002a8d565b3480156200076057600080fd5b506200045462000772366004620096e4565b62002ca9565b3480156200078557600080fd5b50620004546200079736600462009aca565b62002d25565b348015620007aa57600080fd5b506200049861dead81565b348015620007c257600080fd5b5062000454620007d436600462009b08565b62003355565b348015620007e757600080fd5b5062000454620007f936600462009b72565b6200414e565b3480156200080c57600080fd5b50620008246200081e36600462009b99565b62004377565b604051620004ac949392919062009bbc565b620004546200084736600462009c78565b62004a1c565b3480156200085a57600080fd5b50620004cd6200086c366004620096e4565b60446020526000908152604090205481565b3480156200088b57600080fd5b50620008a36200089d366004620096e4565b6200506b565b6040805182516001600160401b0390811682526020808501518216908301529282015190921690820152606001620004ac565b348015620008e357600080fd5b506200053d620008f5366004620096e4565b62005110565b3480156200090857600080fd5b50620004546200091a366004620096e4565b6200553c565b3480156200092d57600080fd5b50620004cd603d5481565b3480156200094557600080fd5b50620004546200570e565b3480156200095d57600080fd5b50620004546200096f3660046200978b565b620058d6565b3480156200098257600080fd5b506200045462005934565b3480156200099a57600080fd5b5062000498620009ac366004620096e4565b6043602052600090815260409020546001600160a01b031681565b348015620009d457600080fd5b50620004cd670de0b6b3a764000081565b348015620009f257600080fd5b50620004cd62000a0436600462009aca565b620059cc565b6200045462000a1b36600462009d4e565b62005a85565b34801562000a2e57600080fd5b506200045462000a40366004620099ac565b62006133565b34801562000a5357600080fd5b5062000a6b62000a65366004620096e4565b62006439565b604051620004ac919062009d86565b34801562000a8757600080fd5b506200045462000a9936600462009aca565b62006726565b34801562000aac57600080fd5b506200045462000abe36600462009e03565b62006793565b34801562000ad157600080fd5b5060005462010000900460ff166200071d565b34801562000af157600080fd5b506200045462000b0336600462009e75565b62007745565b34801562000b1657600080fd5b50620004cd603c5481565b34801562000b2e57600080fd5b5062000b4662000b4036600462009b99565b62007912565b604051620004ac9392919062009ece565b34801562000b6457600080fd5b50620004cd62000b76366004620096e4565b62007aee565b34801562000b8957600080fd5b50620004cd600581565b34801562000ba057600080fd5b506200045462000bb2366004620096e4565b62007b3c565b34801562000bc557600080fd5b50620004cd60385481565b34801562000bdd57600080fd5b50620004cd604e5481565b34801562000bf557600080fd5b5062000c0d62000c07366004620096e4565b62007dfc565b60408051938452911515602084015290820152606001620004ac565b34801562000c3657600080fd5b50620004cd620186a081565b34801562000c4f57600080fd5b506200045462000c6136600462009f2b565b6200823f565b34801562000c7457600080fd5b506200045462000c863660046200a014565b62008464565b34801562000c9957600080fd5b50620004cd603b5481565b34801562000cb157600080fd5b50620004cd60495481565b34801562000cc957600080fd5b506200049862000cdb366004620096e4565b6200855a565b34801562000cee57600080fd5b50600054630100000090046001600160a01b031662000498565b34801562000d1557600080fd5b50620004cd60355481565b34801562000d2d57600080fd5b50620004cd603a5481565b34801562000d4557600080fd5b50620004cd62000d5736600462009910565b805160208183018101805160468252928201919093012091525481565b34801562000d8157600080fd5b50620004cd603e5481565b34801562000d9957600080fd5b50620004cd62000dab36600462009aca565b62008984565b34801562000dbe57600080fd5b506200045462000dd036600462009e03565b620089f5565b34801562000de357600080fd5b50620004cd60395481565b34801562000dfb57600080fd5b50620004cd604a5481565b600054630100000090046001600160a01b0316331462000e39576040516306fbb1e360e01b815260040160405180910390fd5b60005462010000900460ff1662000e6357604051636cd6020160e01b815260040160405180910390fd5b6000805462ff0000191681556040517f62451d457bc659158be6e6247f56ec1df424a5c7597f71c20c2bc44e0965c8f99190a1565b6001600160a01b038082166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054929384939091608084019162000f03906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462000f31906200a07a565b801562000f825780601f1062000f565761010080835404028352916020019162000f82565b820191906000526020600020905b81548152906001019060200180831162000f6457829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462000fad906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462000fdb906200a07a565b80156200102c5780601f1062001000576101008083540402835291602001916200102c565b820191906000526020600020905b8154815290600101906020018083116200100e57829003601f168201915b5050505050815260200160018201805462001047906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462001075906200a07a565b8015620010c65780601f106200109a57610100808354040283529160200191620010c6565b820191906000526020600020905b815481529060010190602001808311620010a857829003601f168201915b50505050508152602001600282018054620010e1906200a07a565b80601f01602080910402602001604051908101604052809291908181526020018280546200110f906200a07a565b8015620011605780601f10620011345761010080835404028352916020019162001160565b820191906000526020600020905b8154815290600101906020018083116200114257829003601f168201915b505050505081526020016003820180546200117b906200a07a565b80601f0160208091040260200160405190810160405280929190818152602001828054620011a9906200a07a565b8015620011fa5780601f10620011ce57610100808354040283529160200191620011fa565b820191906000526020600020905b815481529060010190602001808311620011dc57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b81548152602001906001019080831162001299575050509190925250509051949350505050565b3361100014620012ec57604051630f22c43960e41b815261100060048201526024015b60405180910390fd5b6001600160a01b0380821660009081526043602090815260408083205484168084526041835281842082516101808101845281548716815260018201548716948101949094526002810154909516918301919091526003840154606083015260048401805491949160808401919062001365906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462001393906200a07a565b8015620013e45780601f10620013b857610100808354040283529160200191620013e4565b820191906000526020600020905b815481529060010190602001808311620013c657829003601f168201915b50505050508152602001600582016040518060800160405290816000820180546200140f906200a07a565b80601f01602080910402602001604051908101604052809291908181526020018280546200143d906200a07a565b80156200148e5780601f1062001462576101008083540402835291602001916200148e565b820191906000526020600020905b8154815290600101906020018083116200147057829003601f168201915b50505050508152602001600182018054620014a9906200a07a565b80601f0160208091040260200160405190810160405280929190818152602001828054620014d7906200a07a565b8015620015285780601f10620014fc5761010080835404028352916020019162001528565b820191906000526020600020905b8154815290600101906020018083116200150a57829003601f168201915b5050505050815260200160028201805462001543906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462001571906200a07a565b8015620015c25780601f106200159657610100808354040283529160200191620015c2565b820191906000526020600020905b815481529060010190602001808311620015a457829003601f168201915b50505050508152602001600382018054620015dd906200a07a565b80601f01602080910402602001604051908101604052809291908181526020018280546200160b906200a07a565b80156200165c5780601f1062001630576101008083540402835291602001916200165c565b820191906000526020600020905b8154815290600101906020018083116200163e57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620016fb575050509190925250505060408101519091506001600160a01b031615806200173857508060e001515b15620017f557604051611002903490600081818185875af1925050503d806000811462001782576040519150601f19603f3d011682016040523d82523d6000602084013e62001787565b606091505b505050816001600160a01b03167ffc8bff675087dd2da069cc3fb517b9ed001e19750c0865241a5542dba1ba170d604051620017e89060208082526011908201527024a72b20a624a22fab20a624a220aa27a960791b604082015260600190565b60405180910390a2505050565b60408181015160c0830151519151632f303ebb60e11b81526001600160401b0390921660048301526001600160a01b031690635e607d769034906024016000604051808303818588803b1580156200184c57600080fd5b505af115801562001861573d6000803e3d6000fd5b5050505050816001600160a01b03167fe34918ff1c7084970068b53fd71ad6d8b04e9f15d3886cbf006443e6cdc52ea634604051620018a291815260200190565b60405180910390a26040808201519051633041949b60e01b815261200591633041949b91620018d7919086906004016200a0b0565b600060405180830381600087803b158015620018f257600080fd5b505af115801562001907573d6000803e3d6000fd5b5050505050505b50565b33611001146200193957604051630f22c43960e41b81526110016004820152602401620012e3565b60005462010000900460ff16156200196457604051631785c68160e01b815260040160405180910390fd5b6000604583836040516200197a9291906200a0ca565b908152604051908190036020019020546001600160a01b03169050620019a2603f8262008c2d565b620019c05760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038116600090815260416020526040812090620019e7610258426200a0f0565b604a546000828152604b60205260409020549192501162001a1b5760405163bd52fcdb60e01b815260040160405180910390fd5b6000818152604b6020526040812080546001929062001a3c9084906200a113565b909155505060405160469062001a5690879087906200a0ca565b90815260200160405180910390205460001415801562001aa65750426102586046878760405162001a899291906200a0ca565b90815260200160405180910390205462001aa491906200a113565b105b1562001ac557604051631898eb6b60e01b815260040160405180910390fd5b60008062001ad585600262008c50565b915091508162001af857604051631b919bb160e11b815260040160405180910390fd5b6002840154603c5460405163045bc4d160e41b815260048101919091526000916001600160a01b0316906345bc4d10906024016020604051808303816000875af115801562001b4b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b7191906200a129565b905062001b7f858362008cd8565b856001600160a01b03167f6e9a2ee7aee95665e3a774a212eb11441b217e3e4656ab9563793094689aabb28383600260405162001bbf939291906200a143565b60405180910390a26002850154604051633041949b60e01b815261200591633041949b9162001bfd916001600160a01b0316908a906004016200a0b0565b600060405180830381600087803b15801562001c1857600080fd5b505af115801562001c2d573d6000803e3d6000fd5b505050505050505050505050565b6060336120001462001c6557604051630f22c43960e41b81526120006004820152602401620012e3565b60005462010000900460ff161562001c9057604051631785c68160e01b815260040160405180910390fd5b6034805460ff1916600117905560405162461bcd60e51b815260206004820152600a60248201526919195c1c9958d85d195960b21b6044820152606401620012e3565b60005462010000900460ff161562001cfe57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562001d305760405163b1d02c3d60e01b815260040160405180910390fd5b62001d3a62008dcc565b62001d47603f8262008c2d565b62001d655760405163056e881160e01b815260040160405180910390fd5b62001d6f62008e17565b600082900362001d9257604051636490ffd360e01b815260040160405180910390fd5b600062001d9e62008dcc565b6001600160a01b0381166000908152604f602052604090208054604e54929350909162001dcc86836200a113565b111562001dec5760405163091af98560e21b815260040160405180910390fd5b60005b8581101562001ed257600087878381811062001e0f5762001e0f6200a17e565b905060200201350362001e3557604051636490ffd360e01b815260040160405180910390fd5b600062001e448260016200a113565b90505b8681101562001ebc5787878281811062001e655762001e656200a17e565b9050602002013588888481811062001e815762001e816200a17e565b905060200201350362001ea757604051632205e3c760e11b815260040160405180910390fd5b8062001eb3816200a194565b91505062001e47565b508062001ec9816200a194565b91505062001def565b5060005b8581101562001f715760005b8281101562001f5b5783818154811062001f005762001f006200a17e565b906000526020600020015488888481811062001f205762001f206200a17e565b905060200201350362001f4657604051632205e3c760e11b815260040160405180910390fd5b8062001f52816200a194565b91505062001ee2565b508062001f68816200a194565b91505062001ed6565b5060005b8581101562001907578287878381811062001f945762001f946200a17e565b835460018101855560009485526020948590209190940292909201359190920155506001600160a01b0384167f7c4ff4c9a343a2daef608f3b5a91016e994a15fc0ef8611109e4f45823249f2988888481811062001ff65762001ff66200a17e565b905060200201356040516200200d91815260200190565b60405180910390a28062002021816200a194565b91505062001f75565b6000816200203a603f8262008c2d565b620020585760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038084166000908152604160205260409020600d01541691505b50919050565b60608082806001600160401b038111156200209e576200209e62009853565b604051908082528060200260200182016040528015620020c8578160200160208202803683370190505b509250806001600160401b03811115620020e657620020e662009853565b6040519080825280602002602001820160405280156200211b57816020015b6060815260200190600190039081620021055790505b50915060005b81811015620026445760008686838181106200214157620021416200a17e565b9050602002016020810190620021589190620096e4565b6001600160a01b03808216600090815260416020908152604080832081516101808101835281548616815260018201548616938101939093526002810154909416908201526003830154606082015260048301805494955091939092916080840191620021c5906200a07a565b80601f0160208091040260200160405190810160405280929190818152602001828054620021f3906200a07a565b8015620022445780601f10620022185761010080835404028352916020019162002244565b820191906000526020600020905b8154815290600101906020018083116200222657829003601f168201915b50505050508152602001600582016040518060800160405290816000820180546200226f906200a07a565b80601f01602080910402602001604051908101604052809291908181526020018280546200229d906200a07a565b8015620022ee5780601f10620022c257610100808354040283529160200191620022ee565b820191906000526020600020905b815481529060010190602001808311620022d057829003601f168201915b5050505050815260200160018201805462002309906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462002337906200a07a565b8015620023885780601f106200235c5761010080835404028352916020019162002388565b820191906000526020600020905b8154815290600101906020018083116200236a57829003601f168201915b50505050508152602001600282018054620023a3906200a07a565b80601f0160208091040260200160405190810160405280929190818152602001828054620023d1906200a07a565b8015620024225780601f10620023f65761010080835404028352916020019162002422565b820191906000526020600020905b8154815290600101906020018083116200240457829003601f168201915b505050505081526020016003820180546200243d906200a07a565b80601f01602080910402602001604051908101604052809291908181526020018280546200246b906200a07a565b8015620024bc5780601f106200249057610100808354040283529160200191620024bc565b820191906000526020600020905b8154815290600101906020018083116200249e57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b8154815260200190600101908083116200255b57505050505081525050905080600001518684815181106200259457620025946200a17e565b6001600160a01b039283166020918202929092018101919091529083166000908152604f8252604090819020805482518185028101850190935280835291929091908301828280156200260757602002820191906000526020600020905b815481526020019060010190808311620025f2575b50505050508584815181106200262157620026216200a17e565b6020026020010181905250505080806200263b906200a194565b91505062002121565b50505b9250929050565b600054630100000090046001600160a01b0316331462002681576040516306fbb1e360e01b815260040160405180910390fd5b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f7fd26be6fc92aff63f1f4409b2b2ddeb272a888031d7f55ec830485ec61941869190a250565b60005462010000900460ff1615620026fb57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff16156200272d5760405163b1d02c3d60e01b815260040160405180910390fd5b806200273b603f8262008c2d565b620027595760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0382166000908152604160205260409020600a81015460ff166200279757604051634b6b857d60e01b815260040160405180910390fd5b6036546002820154604051630913db4760e01b81526001600160a01b03868116600483015290911690630913db4790602401602060405180830381865afa158015620027e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200280d91906200a129565b10156200282d576040516317b204bf60e11b815260040160405180910390fd5b4281600b01541115620028535760405163170cb76760e21b815260040160405180910390fd5b600a8101805460ff191690556049805460019190600090620028779084906200a1b0565b90915550506040516001600160a01b038416907f9390b453426557da5ebdc31f19a37753ca04addf656d32f35232211bb2af3f1990600090a2505050565b60005462010000900460ff1615620028e057604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620029125760405163b1d02c3d60e01b815260040160405180910390fd5b6200291c62008e2a565b62002929603f8262008c2d565b620029475760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0382166200296f57604051636520611b60e11b815260040160405180910390fd5b6001600160a01b038281166000908152604360205260409020541615620029a957604051631e6f587560e11b815260040160405180910390fd5b6000620029b562008e2a565b6001600160a01b0381166000908152604160205260409020600c810154919250904290620029e790610258906200a113565b111562002a0757604051631f92cdbd60e11b815260040160405180910390fd5b80546001600160a01b039081166000908152604460209081526040808320429081905585548986166001600160a01b031991821681178855600c88019290925581855260439093528184208054958816959093168517909255519092917f6e4e747ca35203f16401c69805c7dd52fff67ef60b0ebc5c7fe16890530f223591a350505050565b3362002a9b603f8262008c2d565b62002ab95760405163056e881160e01b815260040160405180910390fd5b60005462010000900460ff161562002ae457604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562002b165760405163b1d02c3d60e01b815260040160405180910390fd5b6001600160a01b038281166000908152604d6020526040902054161562002b505760405163bebdc75760e01b815260040160405180910390fd5b62002b5d603f8362008c2d565b1562002b7c5760405163bebdc75760e01b815260040160405180910390fd5b336000818152604160205260409020600d01546001600160a01b03908116908416810362002bbd5760405163bebdc75760e01b815260040160405180910390fd5b6001600160a01b0381161562002bf4576001600160a01b0381166000908152604d6020526040902080546001600160a01b03191690555b6001600160a01b038281166000908152604160205260409020600d0180546001600160a01b03191691861691821790551562002c59576001600160a01b038481166000908152604d6020526040902080546001600160a01b0319169184169190911790555b836001600160a01b0316816001600160a01b0316836001600160a01b03167fcbb728765de145e99c00e8ae32a325231e850359b7b8a6da3b84d672ab3f1d0a60405160405180910390a450505050565b600054630100000090046001600160a01b0316331462002cdc576040516306fbb1e360e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020526040808220805460ff19169055517fe0db3499b7fdc3da4cddff5f45d694549c19835e7f719fb5606d3ad1a5de40119190a250565b60005462010000900460ff161562002d5057604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562002d825760405163b1d02c3d60e01b815260040160405180910390fd5b8162002d90603f8262008c2d565b62002dae5760405163056e881160e01b815260040160405180910390fd5b8160000362002dd057604051639811e0c760e01b815260040160405180910390fd5b6001600160a01b038084166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054339491608084019162002e38906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462002e66906200a07a565b801562002eb75780601f1062002e8b5761010080835404028352916020019162002eb7565b820191906000526020600020905b81548152906001019060200180831162002e9957829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462002ee2906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462002f10906200a07a565b801562002f615780601f1062002f355761010080835404028352916020019162002f61565b820191906000526020600020905b81548152906001019060200180831162002f4357829003601f168201915b5050505050815260200160018201805462002f7c906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462002faa906200a07a565b801562002ffb5780601f1062002fcf5761010080835404028352916020019162002ffb565b820191906000526020600020905b81548152906001019060200180831162002fdd57829003601f168201915b5050505050815260200160028201805462003016906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462003044906200a07a565b8015620030955780601f10620030695761010080835404028352916020019162003095565b820191906000526020600020905b8154815290600101906020018083116200307757829003601f168201915b50505050508152602001600382018054620030b0906200a07a565b80601f0160208091040260200160405190810160405280929190818152602001828054620030de906200a07a565b80156200312f5780601f1062003103576101008083540402835291602001916200312f565b820191906000526020600020905b8154815290600101906020018083116200311157829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620031ce575050509190925250505060408082015190516326ccee8b60e11b81526001600160a01b0385811660048301526024820188905292935060009290911690634d99dd16906044016020604051808303816000875af115801562003248573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200326e91906200a129565b9050826001600160a01b0316866001600160a01b03167f3aace7340547de7b9156593a7652dc07ee900cea3fd8f82cb6c9d38b408298028784604051620032bf929190918252602082015260400190565b60405180910390a3856001600160a01b0316836001600160a01b031603620032ec57620032ec8662008e6b565b6040808301519051633041949b60e01b815261200591633041949b9162003319919087906004016200a0b0565b600060405180830381600087803b1580156200333457600080fd5b505af115801562003349573d6000803e3d6000fd5b50505050505050505050565b60005462010000900460ff16156200338057604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620033b25760405163b1d02c3d60e01b815260040160405180910390fd5b83620033c0603f8262008c2d565b620033de5760405163056e881160e01b815260040160405180910390fd5b83620033ec603f8262008c2d565b6200340a5760405163056e881160e01b815260040160405180910390fd5b6034805460ff1916600117905560008490036200343a57604051639811e0c760e01b815260040160405180910390fd5b846001600160a01b0316866001600160a01b0316036200346d5760405163f0e3e62960e01b815260040160405180910390fd5b6001600160a01b0380871660009081526041602090815260408083208151610180810183528154861681526001820154861693810193909352600281015490941690820152600383015460608201526004830180543394916080840191620034d5906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462003503906200a07a565b8015620035545780601f10620035285761010080835404028352916020019162003554565b820191906000526020600020905b8154815290600101906020018083116200353657829003601f168201915b50505050508152602001600582016040518060800160405290816000820180546200357f906200a07a565b80601f0160208091040260200160405190810160405280929190818152602001828054620035ad906200a07a565b8015620035fe5780601f10620035d257610100808354040283529160200191620035fe565b820191906000526020600020905b815481529060010190602001808311620035e057829003601f168201915b5050505050815260200160018201805462003619906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462003647906200a07a565b8015620036985780601f106200366c5761010080835404028352916020019162003698565b820191906000526020600020905b8154815290600101906020018083116200367a57829003601f168201915b50505050508152602001600282018054620036b3906200a07a565b80601f0160208091040260200160405190810160405280929190818152602001828054620036e1906200a07a565b8015620037325780601f10620037065761010080835404028352916020019162003732565b820191906000526020600020905b8154815290600101906020018083116200371457829003601f168201915b505050505081526020016003820180546200374d906200a07a565b80601f01602080910402602001604051908101604052809291908181526020018280546200377b906200a07a565b8015620037cc5780601f10620037a057610100808354040283529160200191620037cc565b820191906000526020600020905b815481529060010190602001808311620037ae57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b8154815260200190600101908083116200386b57505050919092525050506001600160a01b03808916600090815260416020908152604080832081516101808101835281548616815260018201548616938101939093526002810154909416908201526003830154606082015260048301805494955091939092916080840191620038f6906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462003924906200a07a565b8015620039755780601f10620039495761010080835404028352916020019162003975565b820191906000526020600020905b8154815290600101906020018083116200395757829003601f168201915b5050505050815260200160058201604051806080016040529081600082018054620039a0906200a07a565b80601f0160208091040260200160405190810160405280929190818152602001828054620039ce906200a07a565b801562003a1f5780601f10620039f35761010080835404028352916020019162003a1f565b820191906000526020600020905b81548152906001019060200180831162003a0157829003601f168201915b5050505050815260200160018201805462003a3a906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462003a68906200a07a565b801562003ab95780601f1062003a8d5761010080835404028352916020019162003ab9565b820191906000526020600020905b81548152906001019060200180831162003a9b57829003601f168201915b5050505050815260200160028201805462003ad4906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462003b02906200a07a565b801562003b535780601f1062003b275761010080835404028352916020019162003b53565b820191906000526020600020905b81548152906001019060200180831162003b3557829003601f168201915b5050505050815260200160038201805462003b6e906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462003b9c906200a07a565b801562003bed5780601f1062003bc15761010080835404028352916020019162003bed565b820191906000526020600020905b81548152906001019060200180831162003bcf57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b81548152602001906001019080831162003c8c5750505050508152505090508060e00151801562003ccf5750876001600160a01b0316836001600160a01b031614155b1562003cee57604051636468920360e01b815260040160405180910390fd5b60408083015190516352e82ce560e11b81526001600160a01b038581166004830152602482018a9052600092169063a5d059ca906044016020604051808303816000875af115801562003d45573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003d6b91906200a129565b905060375481101562003d915760405163dc6f0bdd60e01b815260040160405180910390fd5b896001600160a01b0316846001600160a01b031614801562003e2657506036546040808501519051630913db4760e01b81526001600160a01b038d8116600483015290911690630913db4790602401602060405180830381865afa15801562003dfe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003e2491906200a129565b105b1562003e45576040516317b204bf60e11b815260040160405180910390fd5b6000620186a0603a548362003e5b91906200a1c6565b62003e6791906200a0f0565b9050600083604001516001600160a01b03168260405160006040518083038185875af1925050503d806000811462003ebc576040519150601f19603f3d011682016040523d82523d6000602084013e62003ec1565b606091505b505090508062003ee4576040516312171d8360e31b815260040160405180910390fd5b62003ef082846200a1b0565b60408086015190516317066a5760e21b81526001600160a01b03898116600483015292955060009290911690635c19a95c90869060240160206040518083038185885af115801562003f46573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062003f6d91906200a129565b9050866001600160a01b03168c6001600160a01b03168e6001600160a01b03167ffdac6e81913996d95abcc289e90f2d8bd235487ce6fe6f821e7d21002a1915b48e858960405162003fd2939291909283526020830191909152604082015260600190565b60405180910390a46040805160028082526060820183526000926020830190803683370190505090508660400151816000815181106200401657620040166200a17e565b60200260200101906001600160a01b031690816001600160a01b0316815250508560400151816001815181106200405157620040516200a17e565b6001600160a01b0390921660209283029190910190910152604051634484077560e01b815261200590634484077590620040929084908c906004016200a1e0565b600060405180830381600087803b158015620040ad57600080fd5b505af1158015620040c2573d6000803e3d6000fd5b505050508a1562004134576120056001600160a01b031663e5ed5b1e898f6040518363ffffffff1660e01b8152600401620040ff9291906200a0b0565b600060405180830381600087803b1580156200411a57600080fd5b505af11580156200412f573d6000803e3d6000fd5b505050505b50506034805460ff19169055505050505050505050505050565b60005462010000900460ff16156200417957604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620041ab5760405163b1d02c3d60e01b815260040160405180910390fd5b620041b562008e2a565b620041c2603f8262008c2d565b620041e05760405163056e881160e01b815260040160405180910390fd5b6000620041ec62008e2a565b6001600160a01b0381166000908152604160205260409020600c8101549192509042906200421e90610258906200a113565b11156200423e57604051631f92cdbd60e11b815260040160405180910390fd5b60098101546001600160401b03600160401b90910481169085161115620042785760405163dc81db8560e01b815260040160405180910390fd5b60098101546000906001600160401b039081169086161015620042b6576009820154620042b09086906001600160401b03166200a20c565b620042d0565b6009820154620042d0906001600160401b0316866200a20c565b60098301546001600160401b039182169250600160801b9004168111156200430b5760405163dc81db8560e01b815260040160405180910390fd5b60098201805467ffffffffffffffff19166001600160401b03871690811790915542600c8401556040519081526001600160a01b038416907f78cdd96edf59e09cfd4d26ef6ef6c92d166effe6a40970c54821206d541932cb9060200160405180910390a25050505050565b606080606060006200438a603f62008f89565b90508086101562004a13578415620043a35784620043a5565b805b9450600085620043b688846200a1b0565b11620043ce57620043c887836200a1b0565b620043d0565b855b9050806001600160401b03811115620043ed57620043ed62009853565b60405190808252806020026020018201604052801562004417578160200160208202803683370190505b509450806001600160401b0381111562004435576200443562009853565b6040519080825280602002602001820160405280156200445f578160200160208202803683370190505b509350806001600160401b038111156200447d576200447d62009853565b604051908082528060200260200182016040528015620044b257816020015b60608152602001906001900390816200449c5790505b50925060005b8181101562004a10576000620044dc620044d3838b6200a113565b603f9062008f94565b6001600160a01b0380821660009081526041602090815260408083208151610180810183528154861681526001820154861693810193909352600281015490941690820152600383015460608201526004830180549495509193909291608084019162004549906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462004577906200a07a565b8015620045c85780601f106200459c57610100808354040283529160200191620045c8565b820191906000526020600020905b815481529060010190602001808311620045aa57829003601f168201915b5050505050815260200160058201604051806080016040529081600082018054620045f3906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462004621906200a07a565b8015620046725780601f10620046465761010080835404028352916020019162004672565b820191906000526020600020905b8154815290600101906020018083116200465457829003601f168201915b505050505081526020016001820180546200468d906200a07a565b80601f0160208091040260200160405190810160405280929190818152602001828054620046bb906200a07a565b80156200470c5780601f10620046e0576101008083540402835291602001916200470c565b820191906000526020600020905b815481529060010190602001808311620046ee57829003601f168201915b5050505050815260200160028201805462004727906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462004755906200a07a565b8015620047a65780601f106200477a57610100808354040283529160200191620047a6565b820191906000526020600020905b8154815290600101906020018083116200478857829003601f168201915b50505050508152602001600382018054620047c1906200a07a565b80601f0160208091040260200160405190810160405280929190818152602001828054620047ef906200a07a565b8015620048405780601f10620048145761010080835404028352916020019162004840565b820191906000526020600020905b8154815290600101906020018083116200482257829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620048df57505050505081525050905080600001518884815181106200491857620049186200a17e565b60200260200101906001600160a01b031690816001600160a01b0316815250508060e00151620049b15780604001516001600160a01b03166315d1f8986040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004985573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620049ab91906200a129565b620049b4565b60005b878481518110620049c957620049c96200a17e565b6020026020010181815250508060800151868481518110620049ef57620049ef6200a17e565b602002602001018190525050508062004a08906200a194565b9050620044b8565b50505b92959194509250565b60005462010000900460ff161562004a4757604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562004a795760405163b1d02c3d60e01b815260040160405180910390fd5b3362004a87603f8262008c2d565b1562004aa657604051635f28f62b60e01b815260040160405180910390fd5b6001600160a01b038181166000908152604d6020526040902054161562004ae057604051631a0a9b9f60e21b815260040160405180910390fd5b6001600160a01b03888116600090815260436020526040902054161562004b1a57604051631e6f587560e11b815260040160405180910390fd5b60006001600160a01b03166045888860405162004b399291906200a0ca565b908152604051908190036020019020546001600160a01b03161462004b71576040516311fdb94760e01b815260040160405180910390fd5b600062004b7f83806200a236565b60405160200162004b929291906200a0ca565b60408051601f1981840301815291815281516020928301206000818152604290935291205490915060ff161562004bdc5760405163c0bf414360e01b815260040160405180910390fd5b600062004bf2670de0b6b3a7640000346200a1b0565b905060365481101562004c18576040516317b204bf60e11b815260040160405180910390fd5b6001600160a01b038a1662004c4057604051636520611b60e11b815260040160405180910390fd5b61138862004c55604087016020880162009b72565b6001600160401b0316118062004c9b575062004c78604086016020870162009b72565b6001600160401b031662004c90602087018762009b72565b6001600160401b0316115b8062004cda575062004cb4604086016020870162009b72565b6001600160401b031662004ccf606087016040880162009b72565b6001600160401b0316115b1562004cf95760405163dc81db8560e01b815260040160405180910390fd5b62004d4462004d0985806200a236565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062008fa292505050565b62004d6257604051635dba5ad760e01b815260040160405180910390fd5b62004d71838a8a8a8a62009144565b62004d8f57604051631647e3cb60e11b815260040160405180910390fd5b600062004ddd8462004da287806200a236565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200927492505050565b905062004dec603f8562009375565b506000838152604260209081526040808320805460ff191660019081179091556001600160a01b0380891680865260419094529190932080548f83166001600160a01b03199182161782559381018054851690931790925560028201805491851691909316179091554260038201556004810162004e6c8b8d836200a2de565b50856005820162004e7e82826200a3a6565b508790506009820162004e9282826200a4df565b505042600c8201556001600160a01b038c81166000908152604360205260409081902080546001600160a01b0319169288169290921790915551859060459062004ee0908e908e906200a0ca565b908152602001604051809103902060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316856001600160a01b03168d6001600160a01b03167faecd9fb95e79c75a3a1de93362c6be5fe6ab65770d8614be583884161cd8228d8e8e60405162004f639291906200a5af565b60405180910390a460408051848152602081018590526001600160a01b0387169182917f24d7bda8602b916d64417f0dbfe2e2e88ec9b1157bd9f596dfdb91ba26624e04910160405180910390a360408051670de0b6b3a7640000808252602082015261dead916001600160a01b038816917f24d7bda8602b916d64417f0dbfe2e2e88ec9b1157bd9f596dfdb91ba26624e04910160405180910390a3604051633041949b60e01b815261200590633041949b906200502990859089906004016200a0b0565b600060405180830381600087803b1580156200504457600080fd5b505af115801562005059573d6000803e3d6000fd5b50505050505050505050505050505050565b60408051606081018252600080825260208201819052918101919091528162005096603f8262008c2d565b620050b45760405163056e881160e01b815260040160405180910390fd5b50506001600160a01b031660009081526041602090815260409182902082516060810184526009909101546001600160401b038082168352600160401b8204811693830193909352600160801b90049091169181019190915290565b6001600160a01b038082166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060828101919091526004840180549194916080840191906200517d906200a07a565b80601f0160208091040260200160405190810160405280929190818152602001828054620051ab906200a07a565b8015620051fc5780601f10620051d057610100808354040283529160200191620051fc565b820191906000526020600020905b815481529060010190602001808311620051de57829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462005227906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462005255906200a07a565b8015620052a65780601f106200527a57610100808354040283529160200191620052a6565b820191906000526020600020905b8154815290600101906020018083116200528857829003601f168201915b50505050508152602001600182018054620052c1906200a07a565b80601f0160208091040260200160405190810160405280929190818152602001828054620052ef906200a07a565b8015620053405780601f10620053145761010080835404028352916020019162005340565b820191906000526020600020905b8154815290600101906020018083116200532257829003601f168201915b505050505081526020016002820180546200535b906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462005389906200a07a565b8015620053da5780601f10620053ae57610100808354040283529160200191620053da565b820191906000526020600020905b815481529060010190602001808311620053bc57829003601f168201915b50505050508152602001600382018054620053f5906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462005423906200a07a565b8015620054745780601f10620054485761010080835404028352916020019162005474565b820191906000526020600020905b8154815290600101906020018083116200545657829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620055135750505091909252505050608001519392505050565b33611001146200556457604051630f22c43960e41b81526110016004820152602401620012e3565b6001600160a01b03808216600090815260436020526040902054166200558c603f8262008c2d565b620055aa5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038181166000908152604160205260408082206002810154603b54925163045bc4d160e41b81526004810193909352909316906345bc4d10906024016020604051808303816000875af11580156200560d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200563391906200a129565b90506000603d54426200564791906200a113565b905062005655838262008cd8565b836001600160a01b03167f6e9a2ee7aee95665e3a774a212eb11441b217e3e4656ab9563793094689aabb28284600160405162005695939291906200a143565b60405180910390a26002830154604051633041949b60e01b815261200591633041949b91620056d3916001600160a01b03169088906004016200a0b0565b600060405180830381600087803b158015620056ee57600080fd5b505af115801562005703573d6000803e3d6000fd5b505050505050505050565b600054610100900460ff16158080156200572f5750600054600160ff909116105b806200574b5750303b1580156200574b575060005460ff166001145b620057b05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620012e3565b6000805460ff191660011790558015620057d4576000805461ff0019166101001790555b334114620057f55760405163022d8c9560e31b815260040160405180910390fd5b3a1562005815576040516383f1b1d360e01b815260040160405180910390fd5b611388603555686c6b935b8bbd400000603655670de0b6b3a7640000603755602d603855607860398190556002603a819055678ac7230489e80000603b55680ad78ebc5ac6200000603c55603d9190915560b4603e55604a556200588d7304d63abcd2b9b1baa327f2dda0f873f197ccd1866200938c565b80156200190e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b3361200014620058fe57604051630f22c43960e41b81526120006004820152602401620012e3565b60405162461bcd60e51b815260206004820152600a60248201526919195c1c9958d85d195960b21b6044820152606401620012e3565b600054630100000090046001600160a01b0316331462005967576040516306fbb1e360e01b815260040160405180910390fd5b60005462010000900460ff16156200599257604051631785c68160e01b815260040160405180910390fd5b6000805462ff00001916620100001781556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e7529190a1565b6000620059db603f8462008c2d565b620059f95760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0383811660009081526041602052604090819020600201549051636bbf224960e01b815260048101859052911690636bbf2249906024015b602060405180830381865afa15801562005a56573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005a7c91906200a129565b90505b92915050565b60005462010000900460ff161562005ab057604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562005ae25760405163b1d02c3d60e01b815260040160405180910390fd5b8162005af0603f8262008c2d565b62005b0e5760405163056e881160e01b815260040160405180910390fd5b603754349081101562005b345760405163dc6f0bdd60e01b815260040160405180910390fd5b6001600160a01b038085166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054339491608084019162005b9c906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462005bca906200a07a565b801562005c1b5780601f1062005bef5761010080835404028352916020019162005c1b565b820191906000526020600020905b81548152906001019060200180831162005bfd57829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462005c46906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462005c74906200a07a565b801562005cc55780601f1062005c995761010080835404028352916020019162005cc5565b820191906000526020600020905b81548152906001019060200180831162005ca757829003601f168201915b5050505050815260200160018201805462005ce0906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462005d0e906200a07a565b801562005d5f5780601f1062005d335761010080835404028352916020019162005d5f565b820191906000526020600020905b81548152906001019060200180831162005d4157829003601f168201915b5050505050815260200160028201805462005d7a906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462005da8906200a07a565b801562005df95780601f1062005dcd5761010080835404028352916020019162005df9565b820191906000526020600020905b81548152906001019060200180831162005ddb57829003601f168201915b5050505050815260200160038201805462005e14906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462005e42906200a07a565b801562005e935780601f1062005e675761010080835404028352916020019162005e93565b820191906000526020600020905b81548152906001019060200180831162005e7557829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b81548152602001906001019080831162005f325750505050508152505090508060e00151801562005f755750856001600160a01b0316826001600160a01b031614155b1562005f9457604051636468920360e01b815260040160405180910390fd5b60408082015190516317066a5760e21b81526001600160a01b0384811660048301526000921690635c19a95c90869060240160206040518083038185885af115801562005fe5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906200600c91906200a129565b9050826001600160a01b0316876001600160a01b03167f24d7bda8602b916d64417f0dbfe2e2e88ec9b1157bd9f596dfdb91ba26624e0483876040516200605d929190918252602082015260400190565b60405180910390a36040808301519051633041949b60e01b815261200591633041949b9162006092919087906004016200a0b0565b600060405180830381600087803b158015620060ad57600080fd5b505af1158015620060c2573d6000803e3d6000fd5b50505050851562001907576040516372f6ad8f60e11b81526120059063e5ed5b1e90620060f69086908b906004016200a0b0565b600060405180830381600087803b1580156200611157600080fd5b505af115801562006126573d6000803e3d6000fd5b5050505050505050505050565b60005462010000900460ff16156200615e57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620061905760405163b1d02c3d60e01b815260040160405180910390fd5b6200619a62008dcc565b620061a7603f8262008c2d565b620061c55760405163056e881160e01b815260040160405180910390fd5b6000620061d162008dcc565b6001600160a01b0381166000908152604f6020526040812080549293509190859003620062a85760005b818110156200627c57836001600160a01b03167f08e60c1b84aab23d99a7262015e647d5ffd6c6e08f78205e1df6774c48e1427a8483815481106200624457620062446200a17e565b90600052602060002001546040516200625f91815260200190565b60405180910390a28062006273816200a194565b915050620061fb565b506001600160a01b0383166000908152604f60205260408120620062a0916200967e565b505050505050565b60005b8581101562006406576000878783818110620062cb57620062cb6200a17e565b90506020020135905060005b83811015620063ee5781858281548110620062f657620062f66200a17e565b906000526020600020015403620063d95784620063156001866200a1b0565b815481106200632857620063286200a17e565b90600052602060002001548582815481106200634857620063486200a17e565b9060005260206000200181905550848054806200636957620063696200a5c5565b6001900381819060005260206000200160009055905583806200638c906200a5db565b945050856001600160a01b03167f08e60c1b84aab23d99a7262015e647d5ffd6c6e08f78205e1df6774c48e1427a83604051620063cb91815260200190565b60405180910390a2620063ee565b80620063e5816200a194565b915050620062d7565b50508080620063fd906200a194565b915050620062ab565b508154600003620062a0576001600160a01b0383166000908152604f60205260408120620062a0916200967e565b505050565b620064656040518060800160405280606081526020016060815260200160608152602001606081525090565b8162006473603f8262008c2d565b620064915760405163056e881160e01b815260040160405180910390fd5b6001600160a01b03831660009081526041602052604090819020815160808101909252600501805482908290620064c8906200a07a565b80601f0160208091040260200160405190810160405280929190818152602001828054620064f6906200a07a565b8015620065475780601f106200651b5761010080835404028352916020019162006547565b820191906000526020600020905b8154815290600101906020018083116200652957829003601f168201915b5050505050815260200160018201805462006562906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462006590906200a07a565b8015620065e15780601f10620065b557610100808354040283529160200191620065e1565b820191906000526020600020905b815481529060010190602001808311620065c357829003601f168201915b50505050508152602001600282018054620065fc906200a07a565b80601f01602080910402602001604051908101604052809291908181526020018280546200662a906200a07a565b80156200667b5780601f106200664f576101008083540402835291602001916200667b565b820191906000526020600020905b8154815290600101906020018083116200665d57829003601f168201915b5050505050815260200160038201805462006696906200a07a565b80601f0160208091040260200160405190810160405280929190818152602001828054620066c4906200a07a565b8015620067155780601f10620066e95761010080835404028352916020019162006715565b820191906000526020600020905b815481529060010190602001808311620066f757829003601f168201915b505050505081525050915050919050565b60005462010000900460ff16156200675157604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620067835760405163b1d02c3d60e01b815260040160405180910390fd5b6200678f828262009425565b5050565b3361100714620067bb57604051630f22c43960e41b81526110076004820152602401620012e3565b620068286040518060400160405280601081526020016f1d1c985b9cd9995c91d85cd31a5b5a5d60821b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620095319050565b15620068e357602081146200685a5783838383604051630a5a604160e01b8152600401620012e394939291906200a5f5565b604080516020601f84018190048102820181019092528281526000916200689d9185858083850183828082843760009201919091525092939250506200958e9050565b90506108fc811080620068b1575061271081115b15620068da5784848484604051630a5a604160e01b8152600401620012e394939291906200a5f5565b60355562007700565b620069546040518060400160405280601481526020017336b4b729b2b6332232b632b3b0ba34b7b721272160611b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620095319050565b1562006a1e5760208114620069865783838383604051630a5a604160e01b8152600401620012e394939291906200a5f5565b604080516020601f8401819004810282018101909252828152600091620069c99185858083850183828082843760009201919091525092939250506200958e9050565b9050683635c9adc5dea00000811080620069ec575069152d02c7e14af680000081115b1562006a155784848484604051630a5a604160e01b8152600401620012e394939291906200a5f5565b60365562007700565b62006a91604051806040016040528060168152602001756d696e44656c65676174696f6e424e424368616e676560501b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620095319050565b1562006b58576020811462006ac35783838383604051630a5a604160e01b8152600401620012e394939291906200a5f5565b604080516020601f840181900481028201810190925282815260009162006b069185858083850183828082843760009201919091525092939250506200958e9050565b905067016345785d8a000081108062006b265750678ac7230489e8000081115b1562006b4f5784848484604051630a5a604160e01b8152600401620012e394939291906200a5f5565b60375562007700565b62006bc9604051806040016040528060148152602001736d6178456c656374656456616c696461746f727360601b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620095319050565b1562006c81576020811462006bfb5783838383604051630a5a604160e01b8152600401620012e394939291906200a5f5565b604080516020601f840181900481028201810190925282815260009162006c3e9185858083850183828082843760009201919091525092939250506200958e9050565b905080158062006c4f57506101f481115b1562006c785784848484604051630a5a604160e01b8152600401620012e394939291906200a5f5565b60385562007700565b62006cea6040518060400160405280600c81526020016b1d5b989bdb9914195c9a5bd960a21b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620095319050565b1562006da7576020811462006d1c5783838383604051630a5a604160e01b8152600401620012e394939291906200a5f5565b604080516020601f840181900481028201810190925282815260009162006d5f9185858083850183828082843760009201919091525092939250506200958e9050565b90506203f48081108062006d75575062278d0081115b1562006d9e5784848484604051630a5a604160e01b8152600401620012e394939291906200a5f5565b60395562007700565b62006e1560405180604001604052806011815260200170726564656c65676174654665655261746560781b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620095319050565b1562006ec2576020811462006e475783838383604051630a5a604160e01b8152600401620012e394939291906200a5f5565b604080516020601f840181900481028201810190925282815260009162006e8a9185858083850183828082843760009201919091525092939250506200958e9050565b9050606481111562006eb95784848484604051630a5a604160e01b8152600401620012e394939291906200a5f5565b603a5562007700565b62006f3260405180604001604052806013815260200172191bdddb9d1a5b5954db185cda105b5bdd5b9d606a1b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620095319050565b1562006ff3576020811462006f645783838383604051630a5a604160e01b8152600401620012e394939291906200a5f5565b604080516020601f840181900481028201810190925282815260009162006fa79185858083850183828082843760009201919091525092939250506200958e9050565b9050674563918244f4000081108062006fc15750603c5481115b1562006fea5784848484604051630a5a604160e01b8152600401620012e394939291906200a5f5565b603b5562007700565b620070616040518060400160405280601181526020017019995b1bdb9e54db185cda105b5bdd5b9d607a1b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620095319050565b15620071245760208114620070935783838383604051630a5a604160e01b8152600401620012e394939291906200a5f5565b604080516020601f8401819004810282018101909252828152600091620070d69185858083850183828082843760009201919091525092939250506200958e9050565b905068056bc75e2d63100000811080620070f25750603b548111155b156200711b5784848484604051630a5a604160e01b8152600401620012e394939291906200a5f5565b603c5562007700565b620071916040518060400160405280601081526020016f646f776e74696d654a61696c54696d6560801b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620095319050565b156200724e5760208114620071c35783838383604051630a5a604160e01b8152600401620012e394939291906200a5f5565b604080516020601f8401819004810282018101909252828152600091620072069185858083850183828082843760009201919091525092939250506200958e9050565b90506202a3008110806200721c5750603e548110155b15620072455784848484604051630a5a604160e01b8152600401620012e394939291906200a5f5565b603d5562007700565b620072b96040518060400160405280600e81526020016d66656c6f6e794a61696c54696d6560901b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620095319050565b15620073765760208114620072eb5783838383604051630a5a604160e01b8152600401620012e394939291906200a5f5565b604080516020601f84018190048102820181019092528281526000916200732e9185858083850183828082843760009201919091525092939250506200958e9050565b9050620d2f00811080620073445750603d548111155b156200736d5784848484604051630a5a604160e01b8152600401620012e394939291906200a5f5565b603e5562007700565b620073f06040518060400160405280601c81526020017f6d617846656c6f6e794265747765656e42726561746865426c6f636b0000000081525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620095319050565b156200749c5760208114620074225783838383604051630a5a604160e01b8152600401620012e394939291906200a5f5565b604080516020601f8401819004810282018101909252828152600091620074659185858083850183828082843760009201919091525092939250506200958e9050565b905080600003620074935784848484604051630a5a604160e01b8152600401620012e394939291906200a5f5565b604a5562007700565b6200750a6040518060400160405280601181526020017039ba30b5b2a43ab1283937ba32b1ba37b960791b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620095319050565b15620075ca57601481146200753c5783838383604051630a5a604160e01b8152600401620012e394939291906200a5f5565b600062007584601484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506200958e9050565b90506001600160a01b038116620075b85784848484604051630a5a604160e01b8152600401620012e394939291906200a5f5565b620075c38162009593565b5062007700565b620076316040518060400160405280600a8152602001696d61784e6f646549447360b01b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620095319050565b15620076dd5760208114620076635783838383604051630a5a604160e01b8152600401620012e394939291906200a5f5565b604080516020601f8401819004810282018101909252828152600091620076a69185858083850183828082843760009201919091525092939250506200958e9050565b905080600003620076d45784848484604051630a5a604160e01b8152600401620012e394939291906200a5f5565b604e5562007700565b838383836040516325ee20d560e21b8152600401620012e394939291906200a5f5565b7ff1ce9b2cbf50eeb05769a29e2543fd350cab46894a7dd9978a12d534bb20e633848484846040516200773794939291906200a5f5565b60405180910390a150505050565b60005462010000900460ff16156200777057604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620077a25760405163b1d02c3d60e01b815260040160405180910390fd5b816000816001600160401b03811115620077c057620077c062009853565b604051908082528060200260200182016040528015620077ea578160200160208202803683370190505b5090506000805b83811015620078e857620078338787838181106200781357620078136200a17e565b90506020020160208101906200782a9190620096e4565b603f9062008c2d565b620078515760405163056e881160e01b815260040160405180910390fd5b604160008888848181106200786a576200786a6200a17e565b9050602002016020810190620078819190620096e4565b6001600160a01b0390811682526020820192909252604001600020600201548451911692508290849083908110620078bd57620078bd6200a17e565b6001600160a01b0390921660209283029190910190910152620078e0816200a194565b9050620077f1565b50604051634484077560e01b8152612005906344840775906200331990859088906004016200a1e0565b606080600062007923603f62008f89565b90508085101562007ae75783156200793c57836200793e565b805b93506000846200794f87846200a1b0565b1162007967576200796186836200a1b0565b62007969565b845b9050806001600160401b0381111562007986576200798662009853565b604051908082528060200260200182016040528015620079b0578160200160208202803683370190505b509350806001600160401b03811115620079ce57620079ce62009853565b604051908082528060200260200182016040528015620079f8578160200160208202803683370190505b50925060005b8181101562007ae45762007a17620044d382896200a113565b85828151811062007a2c5762007a2c6200a17e565b60200260200101906001600160a01b031690816001600160a01b0316815250506041600086838151811062007a655762007a656200a17e565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060020160009054906101000a90046001600160a01b031684828151811062007ab95762007ab96200a17e565b6001600160a01b039092166020928302919091019091015262007adc816200a194565b9050620079fe565b50505b9250925092565b60008162007afe603f8262008c2d565b62007b1c5760405163056e881160e01b815260040160405180910390fd5b50506001600160a01b03166000908152604160205260409020600c015490565b336110011462007b6457604051630f22c43960e41b81526110016004820152602401620012e3565b60005462010000900460ff161562007b8f57604051631785c68160e01b815260040160405180910390fd5b6001600160a01b038082166000908152604360205260409020541662007bb7603f8262008c2d565b62007bd55760405163056e881160e01b815260040160405180910390fd5b6001600160a01b03811660009081526041602052604081209062007bfc610258426200a0f0565b604a546000828152604b60205260409020549192501162007c305760405163bd52fcdb60e01b815260040160405180910390fd5b6000818152604b6020526040812080546001929062007c519084906200a113565b90915550506001600160a01b0384166000908152604460205260409020541580159062007ca557506001600160a01b038416600090815260446020526040902054429062007ca390610258906200a113565b105b1562007cc4576040516330abb81d60e21b815260040160405180910390fd5b60008062007cd485600062008c50565b915091508162007cf757604051631b919bb160e11b815260040160405180910390fd5b6002840154603c5460405163045bc4d160e41b815260048101919091526000916001600160a01b0316906345bc4d10906024016020604051808303816000875af115801562007d4a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007d7091906200a129565b905062007d7e858362008cd8565b856001600160a01b03167f6e9a2ee7aee95665e3a774a212eb11441b217e3e4656ab9563793094689aabb28383600060405162007dbe939291906200a143565b60405180910390a26002850154604051633041949b60e01b815261200591633041949b91620060f6916001600160a01b0316908a906004016200a0b0565b6001600160a01b038082166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054929384938493849390929160808401919062007e6d906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462007e9b906200a07a565b801562007eec5780601f1062007ec05761010080835404028352916020019162007eec565b820191906000526020600020905b81548152906001019060200180831162007ece57829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462007f17906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462007f45906200a07a565b801562007f965780601f1062007f6a5761010080835404028352916020019162007f96565b820191906000526020600020905b81548152906001019060200180831162007f7857829003601f168201915b5050505050815260200160018201805462007fb1906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462007fdf906200a07a565b8015620080305780601f10620080045761010080835404028352916020019162008030565b820191906000526020600020905b8154815290600101906020018083116200801257829003601f168201915b505050505081526020016002820180546200804b906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462008079906200a07a565b8015620080ca5780601f106200809e57610100808354040283529160200191620080ca565b820191906000526020600020905b815481529060010190602001808311620080ac57829003601f168201915b50505050508152602001600382018054620080e5906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462008113906200a07a565b8015620081645780601f10620081385761010080835404028352916020019162008164565b820191906000526020600020905b8154815290600101906020018083116200814657829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620082035750505091909252505050606081015160e0820151610100909201519097919650945092505050565b60005462010000900460ff16156200826a57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff16156200829c5760405163b1d02c3d60e01b815260040160405180910390fd5b620082a662008e2a565b620082b3603f8262008c2d565b620082d15760405163056e881160e01b815260040160405180910390fd5b6000620082dd62008e2a565b6001600160a01b0381166000908152604160205260409020600c8101549192509042906200830f90610258906200a113565b11156200832f57604051631f92cdbd60e11b815260040160405180910390fd5b60058101805462008340906200a07a565b80601f01602080910402602001604051908101604052809291908181526020018280546200836e906200a07a565b8015620083bf5780601f106200839357610100808354040283529160200191620083bf565b820191906000526020600020905b815481529060010190602001808311620083a157829003601f168201915b5050508287525085916005840191508190620083dc90826200a62b565b5060208201516001820190620083f390826200a62b565b50604082015160028201906200840a90826200a62b565b50606082015160038201906200842190826200a62b565b505042600c830155506040516001600160a01b038316907f85d6366b336ade7f106987ec7a8eac1e8799e508aeab045a39d2f63e0dc969d990600090a250505050565b60005462010000900460ff16156200848f57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620084c15760405163b1d02c3d60e01b815260040160405180910390fd5b828114620084e2576040516341abc80160e01b815260040160405180910390fd5b60005b838110156200855357620085408585838181106200850757620085076200a17e565b90506020020160208101906200851e9190620096e4565b8484848181106200853357620085336200a17e565b9050602002013562009425565b6200854b816200a194565b9050620084e5565b5050505050565b6001600160a01b0380821660009081526041602090815260408083208151610180810183528154861681526001820154861693810193909352600281015490941690820152600383015460608201526004830180549293849390916080840191620085c5906200a07a565b80601f0160208091040260200160405190810160405280929190818152602001828054620085f3906200a07a565b8015620086445780601f10620086185761010080835404028352916020019162008644565b820191906000526020600020905b8154815290600101906020018083116200862657829003601f168201915b50505050508152602001600582016040518060800160405290816000820180546200866f906200a07a565b80601f01602080910402602001604051908101604052809291908181526020018280546200869d906200a07a565b8015620086ee5780601f10620086c257610100808354040283529160200191620086ee565b820191906000526020600020905b815481529060010190602001808311620086d057829003601f168201915b5050505050815260200160018201805462008709906200a07a565b80601f016020809104026020016040519081016040528092919081815260200182805462008737906200a07a565b8015620087885780601f106200875c5761010080835404028352916020019162008788565b820191906000526020600020905b8154815290600101906020018083116200876a57829003601f168201915b50505050508152602001600282018054620087a3906200a07a565b80601f0160208091040260200160405190810160405280929190818152602001828054620087d1906200a07a565b8015620088225780601f10620087f65761010080835404028352916020019162008822565b820191906000526020600020905b8154815290600101906020018083116200880457829003601f168201915b505050505081526020016003820180546200883d906200a07a565b80601f01602080910402602001604051908101604052809291908181526020018280546200886b906200a07a565b8015620088bc5780601f106200889057610100808354040283529160200191620088bc565b820191906000526020600020905b8154815290600101906020018083116200889e57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b8154815260200190600101908083116200895b5750505091909252505050604001519392505050565b600062008993603f8462008c2d565b620089b15760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038381166000908152604160205260409081902060020154905163aa1966cd60e01b81526004810185905291169063aa1966cd9060240162005a38565b60005462010000900460ff161562008a2057604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562008a525760405163b1d02c3d60e01b815260040160405180910390fd5b62008a5c62008e2a565b62008a69603f8262008c2d565b62008a875760405163056e881160e01b815260040160405180910390fd5b600062008a9362008e2a565b905062008aa4818787878762009144565b62008ac257604051631647e3cb60e11b815260040160405180910390fd5b60006001600160a01b03166045878760405162008ae19291906200a0ca565b908152604051908190036020019020546001600160a01b03161462008b19576040516311fdb94760e01b815260040160405180910390fd5b6001600160a01b0381166000908152604160205260409020600c810154429062008b4790610258906200a113565b111562008b6757604051631f92cdbd60e11b815260040160405180910390fd5b4260468260040160405162008b7d91906200a6f3565b908152604051908190036020019020556004810162008b9e8789836200a2de565b5042600c820155604051829060459062008bbc908a908a906200a0ca565b90815260405190819003602001812080546001600160a01b039384166001600160a01b0319909116179055908316907f783156582145bd0ff7924fae6953ba054cf1233eb60739a200ddb10de068ff0d9062008c1c908a908a906200a5af565b60405180910390a250505050505050565b6001600160a01b0381166000908152600183016020526040812054151562005a7c565b6000806000848460405160200162008c6a9291906200a771565b60408051601f1981840301815291815281516020928301206000818152604c9093529120549091504281111562008caa5760008093509350505062002647565b603e5462008cb990426200a113565b6000928352604c60205260409092208290555060019590945092505050565b6000600162008ce8603f62008f89565b62008cf491906200a1b0565b604954108015915062008d405760018301546040516001600160a01b03909116907f2afdc18061ac21cff7d9f11527ab9c8dec6fabd4edf6f894ed634bebd6a20d4590600090a2505050565b82600b015482111562008d5557600b83018290555b600a83015460ff166200643457600a8301805460ff191660019081179091556049805460009062008d889084906200a113565b909155505060018301546040516001600160a01b03909116907f4905ac32602da3fb8b4b7b00c285e5fc4c6c2308cc908b4a1e4e9625a29c90a390600090a2505050565b336000908152604360205260408120546001600160a01b03161562008e085750336000908152604360205260409020546001600160a01b031690565b62008e1262008e2a565b905090565b604e5460000362008e28576005604e555b565b336000908152604d60205260408120546001600160a01b03161562008e665750336000908152604d60205260409020546001600160a01b031690565b503390565b6001600160a01b0381166000908152604160205260409020600a81015460ff161562008e95575050565b6036546002820154604051630913db4760e01b81526001600160a01b03858116600483015290911690630913db4790602401602060405180830381865afa15801562008ee5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008f0b91906200a129565b10156200678f5762008f2d81603d544262008f2791906200a113565b62008cd8565b80546040516335409f7f60e01b81526001600160a01b039091166004820152611000906335409f7f90602401600060405180830381600087803b15801562008f7457600080fd5b505af1158015620062a0573d6000803e3d6000fd5b600062005a7f825490565b600062005a7c8383620095ff565b60008082905060038151108062008fba575060098151115b1562008fc95750600092915050565b60418160008151811062008fe15762008fe16200a17e565b016020015160f81c1080620090135750605a816000815181106200900957620090096200a17e565b016020015160f81c115b15620090225750600092915050565b60015b81518110156200913a5760308282815181106200904657620090466200a17e565b016020015160f81c108062009077575060398282815181106200906d576200906d6200a17e565b016020015160f81c115b8015620090c7575060418282815181106200909657620090966200a17e565b016020015160f81c1080620090c75750605a828281518110620090bd57620090bd6200a17e565b016020015160f81c115b80156200911757506061828281518110620090e657620090e66200a17e565b016020015160f81c1080620091175750607a8282815181106200910d576200910d6200a17e565b016020015160f81c115b1562009127575060009392505050565b62009132816200a194565b905062009025565b5060019392505050565b600060308414158062009158575060608214155b1562009167575060006200926b565b6000868686466040516020016200918294939291906200a7bb565b60408051808303601f1901815282825280516020918201208184528383019092529092506000919060208201818036833701905050905081602082015260008186868a8a604051602001620091dc9594939291906200a7e8565b60408051808303601f190181526001808452838301909252925060009190602082018180368337019050509050815160016020830182602086016066600019fa6200922657600080fd5b506000816000815181106200923f576200923f6200a17e565b016020015160f81c90506001811462009261576000955050505050506200926b565b6001955050505050505b95945050505050565b60008061200361dead6040516200928b906200969e565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f080158015620092ce573d6000803e3d6000fd5b509050806001600160a01b031663f399e22e3486866040518463ffffffff1660e01b8152600401620093029291906200a820565b6000604051808303818588803b1580156200931c57600080fd5b505af115801562009331573d6000803e3d6000fd5b50506040516001600160a01b038086169450881692507fd481492e4e93bb36b4c12a5af93f03be3bf04b454dfbc35dd2663fa26f44d5b09150600090a39392505050565b600062005a7c836001600160a01b0384166200962c565b600054610100900460ff16620093f95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620012e3565b600080546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b8162009433603f8262008c2d565b620094515760405163056e881160e01b815260040160405180910390fd5b6001600160a01b03838116600090815260416020526040808220600201549051635569f64b60e11b8152336004820152602481018690529192169063aad3ec96906044016020604051808303816000875af1158015620094b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620094db91906200a129565b9050336001600160a01b0316846001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683836040516200952391815260200190565b60405180910390a350505050565b6000816040516020016200954691906200a846565b60405160208183030381529060405280519060200120836040516020016200956f91906200a846565b6040516020818303038152906040528051906020012014905092915050565b015190565b600080546040516001600160a01b0380851693630100000090930416917f44fc1b38a4abaa91ebd1b628a5b259a698f86238c8217d68f516e87769c60c0b91a3600080546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b60008260000182815481106200961957620096196200a17e565b9060005260206000200154905092915050565b6000818152600183016020526040812054620096755750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562005a7f565b50600062005a7f565b50805460008255906000526020600020908101906200190e9190620096ac565b610e96806200a86583390190565b5b80821115620096c35760008155600101620096ad565b5090565b80356001600160a01b0381168114620096df57600080fd5b919050565b600060208284031215620096f757600080fd5b62005a7c82620096c7565b60008083601f8401126200971557600080fd5b5081356001600160401b038111156200972d57600080fd5b6020830191508360208285010111156200264757600080fd5b600080602083850312156200975a57600080fd5b82356001600160401b038111156200977157600080fd5b6200977f8582860162009702565b90969095509350505050565b600080600060408486031215620097a157600080fd5b833560ff81168114620097b357600080fd5b925060208401356001600160401b03811115620097cf57600080fd5b620097dd8682870162009702565b9497909650939450505050565b60005b8381101562009807578181015183820152602001620097ed565b50506000910152565b600081518084526200982a816020860160208601620097ea565b601f01601f19169290920160200192915050565b60208152600062005a7c602083018462009810565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200988e576200988e62009853565b60405290565b60006001600160401b0380841115620098b157620098b162009853565b604051601f8501601f19908116603f01168101908282118183101715620098dc57620098dc62009853565b81604052809350858152868686011115620098f657600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156200992357600080fd5b81356001600160401b038111156200993a57600080fd5b8201601f810184136200994c57600080fd5b6200995d8482356020840162009894565b949350505050565b60008083601f8401126200997857600080fd5b5081356001600160401b038111156200999057600080fd5b6020830191508360208260051b85010111156200264757600080fd5b60008060208385031215620099c057600080fd5b82356001600160401b03811115620099d757600080fd5b6200977f8582860162009965565b600081518084526020808501945080840160005b8381101562009a205781516001600160a01b031687529582019590820190600101620099f9565b509495945050505050565b60408152600062009a406040830185620099e5565b6020838203818501528185518084528284019150828160051b8501018388016000805b8481101562009aba57878403601f19018652825180518086529088019088860190845b8181101562009aa45783518352928a0192918a019160010162009a86565b5050968801969450509186019160010162009a63565b50919a9950505050505050505050565b6000806040838503121562009ade57600080fd5b62009ae983620096c7565b946020939093013593505050565b80358015158114620096df57600080fd5b6000806000806080858703121562009b1f57600080fd5b62009b2a85620096c7565b935062009b3a60208601620096c7565b92506040850135915062009b516060860162009af7565b905092959194509250565b6001600160401b03811681146200190e57600080fd5b60006020828403121562009b8557600080fd5b813562009b928162009b5c565b9392505050565b6000806040838503121562009bad57600080fd5b50508035926020909101359150565b60808152600062009bd16080830187620099e5565b82810360208481019190915286518083528782019282019060005b8181101562009c0a5784518352938301939183019160010162009bec565b5050848103604086015286518082528282019350600581901b8201830183890160005b8381101562009c5f57601f1985840301875262009c4c83835162009810565b9686019692509085019060010162009c2d565b5050809550505050505082606083015295945050505050565b600080600080600080600087890360e081121562009c9557600080fd5b62009ca089620096c7565b975060208901356001600160401b038082111562009cbd57600080fd5b62009ccb8c838d0162009702565b909950975060408b013591508082111562009ce557600080fd5b62009cf38c838d0162009702565b90975095508591506060605f198401121562009d0e57600080fd5b60608b01945060c08b013592508083111562009d2957600080fd5b505088016080818b03121562009d3e57600080fd5b8091505092959891949750929550565b6000806040838503121562009d6257600080fd5b62009d6d83620096c7565b915062009d7d6020840162009af7565b90509250929050565b60208152600082516080602084015262009da460a084018262009810565b90506020840151601f198085840301604086015262009dc4838362009810565b9250604086015191508085840301606086015262009de3838362009810565b92506060860151915080858403016080860152506200926b828262009810565b6000806000806040858703121562009e1a57600080fd5b84356001600160401b038082111562009e3257600080fd5b62009e408883890162009702565b9096509450602087013591508082111562009e5a57600080fd5b5062009e698782880162009702565b95989497509550505050565b60008060006040848603121562009e8b57600080fd5b83356001600160401b0381111562009ea257600080fd5b62009eb08682870162009965565b909450925062009ec5905060208501620096c7565b90509250925092565b60608152600062009ee36060830186620099e5565b828103602084015262009ef78186620099e5565b915050826040830152949350505050565b600082601f83011262009f1a57600080fd5b62005a7c8383356020850162009894565b60006020828403121562009f3e57600080fd5b81356001600160401b038082111562009f5657600080fd5b908301906080828603121562009f6b57600080fd5b62009f7562009869565b82358281111562009f8557600080fd5b62009f938782860162009f08565b82525060208301358281111562009fa957600080fd5b62009fb78782860162009f08565b60208301525060408301358281111562009fd057600080fd5b62009fde8782860162009f08565b60408301525060608301358281111562009ff757600080fd5b6200a0058782860162009f08565b60608301525095945050505050565b600080600080604085870312156200a02b57600080fd5b84356001600160401b03808211156200a04357600080fd5b6200a0518883890162009965565b909650945060208701359150808211156200a06b57600080fd5b5062009e698782880162009965565b600181811c908216806200a08f57607f821691505b6020821081036200207957634e487b7160e01b600052602260045260246000fd5b6001600160a01b0392831681529116602082015260400190565b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b6000826200a10e57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562005a7f5762005a7f6200a0da565b6000602082840312156200a13c57600080fd5b5051919050565b8381526020810183905260608101600383106200a17057634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b634e487b7160e01b600052603260045260246000fd5b6000600182016200a1a9576200a1a96200a0da565b5060010190565b8181038181111562005a7f5762005a7f6200a0da565b808202811582820484141762005a7f5762005a7f6200a0da565b6040815260006200a1f56040830185620099e5565b905060018060a01b03831660208301529392505050565b6001600160401b038281168282160390808211156200a22f576200a22f6200a0da565b5092915050565b6000808335601e198436030181126200a24e57600080fd5b8301803591506001600160401b038211156200a26957600080fd5b6020019150368190038213156200264757600080fd5b601f8211156200643457600081815260208120601f850160051c810160208610156200a2a85750805b601f850160051c820191505b81811015620062a0578281556001016200a2b4565b600019600383901b1c191660019190911b1790565b6001600160401b038311156200a2f8576200a2f862009853565b6200a310836200a30983546200a07a565b836200a27f565b6000601f8411600181146200a34357600085156200a32e5750838201355b6200a33a86826200a2c9565b84555062008553565b600083815260209020601f19861690835b828110156200a37657868501358255602094850194600190920191016200a354565b50868210156200a3945760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6200a3b282836200a236565b6001600160401b038111156200a3cc576200a3cc62009853565b6200a3e4816200a3dd85546200a07a565b856200a27f565b6000601f8211600181146200a41757600083156200a4025750838201355b6200a40e84826200a2c9565b8655506200a474565b600085815260209020601f19841690835b828110156200a44a57868501358255602094850194600190920191016200a428565b50848210156200a4685760001960f88660031b161c19848701351681555b505060018360011b0185555b505050506200a48760208301836200a236565b6200a4978183600186016200a2de565b50506200a4a860408301836200a236565b6200a4b88183600286016200a2de565b50506200a4c960608301836200a236565b6200a4d98183600386016200a2de565b50505050565b81356200a4ec8162009b5c565b6001600160401b03811690508154816001600160401b0319821617835560208401356200a5198162009b5c565b6fffffffffffffffff0000000000000000604091821b166fffffffffffffffffffffffffffffffff198316841781178555908501356200a5598162009b5c565b6001600160c01b0319929092169092179190911760809190911b67ffffffffffffffff60801b1617905550565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006200995d6020830184866200a586565b634e487b7160e01b600052603160045260246000fd5b6000816200a5ed576200a5ed6200a0da565b506000190190565b6040815260006200a60b6040830186886200a586565b82810360208401526200a6208185876200a586565b979650505050505050565b81516001600160401b038111156200a647576200a64762009853565b6200a65f816200a65884546200a07a565b846200a27f565b602080601f8311600181146200a69357600084156200a67e5750858301515b6200a68a85826200a2c9565b865550620062a0565b600085815260208120601f198616915b828110156200a6c4578886015182559484019460019091019084016200a6a3565b50858210156200a6e35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008083546200a703816200a07a565b600182811680156200a71e57600181146200a734576200a765565b60ff19841687528215158302870194506200a765565b8760005260208060002060005b858110156200a75c5781548a8201529084019082016200a741565b50505082870194505b50929695505050505050565b6bffffffffffffffffffffffff198360601b1681526000600383106200a7a757634e487b7160e01b600052602160045260246000fd5b5060f89190911b6014820152601501919050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b600086516200a7fc818460208b01620097ea565b82018587823760009086019081528385823760009301928352509095945050505050565b6001600160a01b03831681526040602082018190526000906200995d9083018462009810565b600082516200a85a818460208701620097ea565b919091019291505056fe608060405260405162000e9638038062000e96833981016040819052620000269162000497565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ca565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b620001691760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000e6f60279139620002f8565b9392505050565b60006200018060008051602062000e4f83398151915260001b6200037760201b620001951760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e4f83398151915260001b6200037760201b620001951760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a816200037a60201b620001981760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200037760201b620001951760201c565b6060600080856001600160a01b03168560405162000317919062000577565b600060405180830381855af49150503d806000811462000354576040519150601f19603f3d011682016040523d82523d6000602084013e62000359565b606091505b5090925090506200036d8683838762000389565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620003fd578251600003620003f5576001600160a01b0385163b620003f55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001f1565b508162000409565b62000409838362000411565b949350505050565b815115620004225781518083602001fd5b8060405162461bcd60e51b8152600401620001f1919062000595565b80516001600160a01b03811681146200045657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200048e57818101518382015260200162000474565b50506000910152565b600080600060608486031215620004ad57600080fd5b620004b8846200043e565b9250620004c8602085016200043e565b60408501519092506001600160401b0380821115620004e657600080fd5b818601915086601f830112620004fb57600080fd5b8151818111156200051057620005106200045b565b604051601f8201601f19908116603f011681019083821181831017156200053b576200053b6200045b565b816040528281528960208487010111156200055557600080fd5b6200056883602083016020880162000471565b80955050505050509250925092565b600082516200058b81846020870162000471565b9190910192915050565b6020815260008251806020840152620005b681604085016020870162000471565b601f01601f19169190910160400192915050565b61087580620005da6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f6101a7565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a576100536101da565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a57610053610231565b63070d7c6960e41b6001600160e01b031982160161009a57610053610277565b621eb96f60e61b6001600160e01b03198216016100b9576100536102a8565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102e8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102fc565b565b606061018e83836040518060600160405280602781526020016108426027913961030c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101e4610384565b60006101f33660048184610695565b81019061020091906106db565b905061021d8160405180602001604052806000815250600061038f565b505060408051602081019091526000815290565b60606000806102433660048184610695565b810190610250919061070c565b915091506102608282600161038f565b604051806020016040528060008152509250505090565b6060610281610384565b60006102903660048184610695565b81019061029d91906106db565b905061021d816103bb565b60606102b2610384565b60006102bc6101a7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102f2610384565b60006102bc610412565b610167610307610412565b610421565b6060600080856001600160a01b03168560405161032991906107f2565b600060405180830381855af49150503d8060008114610364576040519150601f19603f3d011682016040523d82523d6000602084013e610369565b606091505b509150915061037a86838387610445565b9695505050505050565b341561016757600080fd5b610398836104c6565b6000825111806103a55750805b156103b6576103b48383610169565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103e46101a7565b604080516001600160a01b03928316815291841660208301520160405180910390a161040f81610506565b50565b600061041c6105af565b905090565b3660008037600080366000845af43d6000803e808015610440573d6000f35b3d6000fd5b606083156104b45782516000036104ad576001600160a01b0385163b6104ad5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b50816104be565b6104be83836105d7565b949350505050565b6104cf81610601565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661056b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101cb565b8151156105e75781518083602001fd5b8060405162461bcd60e51b815260040161014e919061080e565b6001600160a01b0381163b61066e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61058e565b600080858511156106a557600080fd5b838611156106b257600080fd5b5050820193919092039150565b80356001600160a01b03811681146106d657600080fd5b919050565b6000602082840312156106ed57600080fd5b61018e826106bf565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561071f57600080fd5b610728836106bf565b9150602083013567ffffffffffffffff8082111561074557600080fd5b818501915085601f83011261075957600080fd5b81358181111561076b5761076b6106f6565b604051601f8201601f19908116603f01168101908382118183101715610793576107936106f6565b816040528281528860208487010111156107ac57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107e95781810151838201526020016107d1565b50506000910152565b600082516108048184602087016107ce565b9190910192915050565b602081526000825180602084015261082d8160408501602087016107ce565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000811000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000811000a \ No newline at end of file diff --git a/core/systemcontracts/maxwell/types.go b/core/systemcontracts/maxwell/types.go new file mode 100644 index 0000000000..41e41a8de1 --- /dev/null +++ b/core/systemcontracts/maxwell/types.go @@ -0,0 +1,21 @@ +package maxwell + +import _ "embed" + +// contract codes for Mainnet upgrade +var ( + //go:embed mainnet/StakeHubContract + MainnetStakeHubContract string +) + +// contract codes for Chapel upgrade +var ( + //go:embed chapel/StakeHubContract + ChapelStakeHubContract string +) + +// contract codes for Rialto upgrade +var ( + //go:embed rialto/StakeHubContract + RialtoStakeHubContract string +) diff --git a/core/systemcontracts/upgrade.go b/core/systemcontracts/upgrade.go index 543978e053..27421175c0 100644 --- a/core/systemcontracts/upgrade.go +++ b/core/systemcontracts/upgrade.go @@ -18,6 +18,7 @@ import ( "github.com/ethereum/go-ethereum/core/systemcontracts/kepler" "github.com/ethereum/go-ethereum/core/systemcontracts/lorentz" "github.com/ethereum/go-ethereum/core/systemcontracts/luban" + "github.com/ethereum/go-ethereum/core/systemcontracts/maxwell" "github.com/ethereum/go-ethereum/core/systemcontracts/mirror" "github.com/ethereum/go-ethereum/core/systemcontracts/moran" "github.com/ethereum/go-ethereum/core/systemcontracts/niels" @@ -89,6 +90,8 @@ var ( pascalUpgrade = make(map[string]*Upgrade) lorentzUpgrade = make(map[string]*Upgrade) + + maxwellUpgrade = make(map[string]*Upgrade) ) func init() { @@ -994,6 +997,39 @@ func init() { }, }, } + + maxwellUpgrade[mainNet] = &Upgrade{ + UpgradeName: "maxwell", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(StakeHubContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/19bfe7200029b41d0820efcc6feed6df84a96340", + Code: maxwell.MainnetStakeHubContract, + }, + }, + } + + maxwellUpgrade[chapelNet] = &Upgrade{ + UpgradeName: "maxwell", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(StakeHubContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/19bfe7200029b41d0820efcc6feed6df84a96340", + Code: maxwell.ChapelStakeHubContract, + }, + }, + } + + maxwellUpgrade[rialtoNet] = &Upgrade{ + UpgradeName: "maxwell", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(StakeHubContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/19bfe7200029b41d0820efcc6feed6df84a96340", + Code: maxwell.RialtoStakeHubContract, + }, + }, + } } func TryUpdateBuildInSystemContract(config *params.ChainConfig, blockNumber *big.Int, lastBlockTime uint64, blockTime uint64, statedb vm.StateDB, atBlockBegin bool) { @@ -1105,6 +1141,10 @@ func upgradeBuildInSystemContract(config *params.ChainConfig, blockNumber *big.I applySystemContractUpgrade(lorentzUpgrade[network], blockNumber, statedb, logger) } + if config.IsOnMaxwell(blockNumber, lastBlockTime, blockTime) { + applySystemContractUpgrade(maxwellUpgrade[network], blockNumber, statedb, logger) + } + /* apply other upgrades */ diff --git a/eth/backend.go b/eth/backend.go index 9c84faeee9..249614d875 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -18,6 +18,7 @@ package eth import ( + "context" "encoding/json" "errors" "fmt" @@ -130,8 +131,8 @@ type Ethereum struct { shutdownTracker *shutdowncheck.ShutdownTracker // Tracks if and when the node has shutdown ungracefully - votePool *vote.VotePool - stopReportCh chan struct{} + votePool *vote.VotePool + stopCh chan struct{} } // New creates a new Ethereum object (including the initialisation of the common Ethereum object), @@ -252,7 +253,7 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { p2pServer: stack.Server(), discmix: enode.NewFairMix(0), shutdownTracker: shutdowncheck.NewShutdownTracker(chainDb), - stopReportCh: make(chan struct{}, 1), + stopCh: make(chan struct{}), } eth.APIBackend = &EthAPIBackend{stack.Config().ExtRPCEnabled(), stack.Config().AllowUnprotectedTxs, eth, nil} @@ -516,6 +517,87 @@ func (s *Ethereum) SetEtherbase(etherbase common.Address) { s.miner.SetEtherbase(etherbase) } +// waitForSyncAndMaxwell waits for the node to be fully synced and Maxwell fork to be active +func (s *Ethereum) waitForSyncAndMaxwell(parlia *parlia.Parlia) { + ticker := time.NewTicker(30 * time.Second) + defer ticker.Stop() + retryCount := 0 + for { + select { + case <-s.stopCh: + return + case <-ticker.C: + if !s.Synced() { + continue + } + // Check if Maxwell fork is active + header := s.blockchain.CurrentHeader() + if header == nil { + continue + } + chainConfig := s.blockchain.Config() + if !chainConfig.IsMaxwell(header.Number, header.Time) { + continue + } + log.Info("Node is synced and Maxwell fork is active, proceeding with node ID registration") + err := s.registerNodeID(parlia) + if err == nil { + return + } + retryCount++ + if retryCount > 3 { + log.Error("Failed to register node ID exceed max retry count", "retryCount", retryCount, "err", err) + return + } + } + } +} + +// registerNodeID registers the node ID with the StakeHub contract +func (s *Ethereum) registerNodeID(parlia *parlia.Parlia) error { + // Check if node ID is already registered + nodeIDs, err := parlia.GetNodeIDs() + if err != nil { + log.Error("Failed to get registered node IDs", "err", err) + return err + } + + // Check which node IDs need to be registered + nodeIDsToAdd := make([]enode.ID, 0) + for _, idToRegister := range s.config.ValidatorNodeIDsToAdd { + isRegistered := false + for _, id := range nodeIDs { + if id == idToRegister { + isRegistered = true + break + } + } + if !isRegistered { + nodeIDsToAdd = append(nodeIDsToAdd, idToRegister) + } + } + + if len(nodeIDsToAdd) > 0 { + // Get the current nonce for the validator address + nonce, err := s.APIBackend.GetPoolNonce(context.Background(), s.etherbase) + if err != nil { + return fmt.Errorf("failed to get nonce: %v", err) + } + + trx, err := parlia.AddNodeIDs(nodeIDsToAdd, nonce) + if err != nil { + return fmt.Errorf("failed to create node ID registration transaction: %v", err) + } + if err := s.txPool.Add([]*types.Transaction{trx}, false); err != nil { + return fmt.Errorf("failed to add node ID registration transaction to pool: %v", err) + } + log.Info("Submitted node ID registration transaction", "nodeIDs", nodeIDsToAdd) + } else { + log.Info("All node IDs already registered", "nodeIDs", s.config.ValidatorNodeIDsToAdd) + } + return nil +} + // StartMining starts the miner with the given number of CPU threads. If mining // is already running, this method adjust the number of threads allowed to use // and updates the minimum price required by the transaction pool. @@ -541,6 +623,11 @@ func (s *Ethereum) StartMining() error { return fmt.Errorf("signer missing: %v", err) } parlia.Authorize(eb, wallet.SignData, wallet.SignTx) + + // Start a goroutine to handle node ID registration after sync + go func() { + s.waitForSyncAndMaxwell(parlia) + }() } go s.miner.Start() @@ -692,7 +779,7 @@ func (s *Ethereum) Stop() error { s.eventMux.Stop() // stop report loop - s.stopReportCh <- struct{}{} + close(s.stopCh) return nil } @@ -763,7 +850,7 @@ func (s *Ethereum) reportRecentBlocksLoop() { if startMiningTime < blockMsTime { startMiningTimer.Update(time.Duration(blockMsTime - startMiningTime)) } - case <-s.stopReportCh: + case <-s.stopCh: return } } diff --git a/eth/ethconfig/config.go b/eth/ethconfig/config.go index de3fc353c1..e383da3f60 100644 --- a/eth/ethconfig/config.go +++ b/eth/ethconfig/config.go @@ -35,6 +35,7 @@ import ( "github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/miner/minerconfig" + "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/params" ) @@ -93,7 +94,7 @@ type Config struct { // transactions) or is continuously under high pressure (e.g., mempool is always full), then you can consider // to turn it on. DisablePeerTxBroadcast bool - + ValidatorNodeIDsToAdd []enode.ID // This can be set to list of enrtree:// URLs which will be queried for // nodes to connect to. EthDiscoveryURLs []string diff --git a/eth/ethconfig/gen_config.go b/eth/ethconfig/gen_config.go index b834241706..d8ec782a22 100644 --- a/eth/ethconfig/gen_config.go +++ b/eth/ethconfig/gen_config.go @@ -11,6 +11,7 @@ import ( "github.com/ethereum/go-ethereum/core/txpool/legacypool" "github.com/ethereum/go-ethereum/eth/gasprice" "github.com/ethereum/go-ethereum/miner/minerconfig" + "github.com/ethereum/go-ethereum/p2p/enode" ) // MarshalTOML marshals as TOML. @@ -20,6 +21,7 @@ func (c Config) MarshalTOML() (interface{}, error) { NetworkId uint64 SyncMode SyncMode DisablePeerTxBroadcast bool + ValidatorNodeIDsToAdd []enode.ID EthDiscoveryURLs []string SnapDiscoveryURLs []string TrustDiscoveryURLs []string @@ -74,6 +76,7 @@ func (c Config) MarshalTOML() (interface{}, error) { enc.NetworkId = c.NetworkId enc.SyncMode = c.SyncMode enc.DisablePeerTxBroadcast = c.DisablePeerTxBroadcast + enc.ValidatorNodeIDsToAdd = c.ValidatorNodeIDsToAdd enc.EthDiscoveryURLs = c.EthDiscoveryURLs enc.SnapDiscoveryURLs = c.SnapDiscoveryURLs enc.TrustDiscoveryURLs = c.TrustDiscoveryURLs @@ -132,6 +135,7 @@ func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error { NetworkId *uint64 SyncMode *SyncMode DisablePeerTxBroadcast *bool + ValidatorNodeIDsToAdd []enode.ID EthDiscoveryURLs []string SnapDiscoveryURLs []string TrustDiscoveryURLs []string @@ -197,6 +201,9 @@ func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error { if dec.DisablePeerTxBroadcast != nil { c.DisablePeerTxBroadcast = *dec.DisablePeerTxBroadcast } + if dec.ValidatorNodeIDsToAdd != nil { + c.ValidatorNodeIDsToAdd = dec.ValidatorNodeIDsToAdd + } if dec.EthDiscoveryURLs != nil { c.EthDiscoveryURLs = dec.EthDiscoveryURLs }