UNPKG

@ethersphere/bee-factory

Version:

Local Ethereum Swarm development stack

1,570 lines 71.3 kB
{ "contractName": "Redistribution", "abi": [ { "inputs": [ { "internalType": "address", "name": "staking", "type": "address" }, { "internalType": "address", "name": "postageContract", "type": "address" }, { "internalType": "address", "name": "oracleContract", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AlreadyClaimed", "type": "error" }, { "inputs": [], "name": "AlreadyCommitted", "type": "error" }, { "inputs": [], "name": "AlreadyRevealed", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "BatchDoesNotExist", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "BucketDiffers", "type": "error" }, { "inputs": [], "name": "CommitRoundNotStarted", "type": "error" }, { "inputs": [], "name": "CommitRoundOver", "type": "error" }, { "inputs": [], "name": "FirstRevealDone", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "", "type": "uint8" }, { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "InclusionProofFailed", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "IndexOutsideSet", "type": "error" }, { "inputs": [], "name": "InvalidSignatureLength", "type": "error" }, { "inputs": [], "name": "LastElementCheckFailed", "type": "error" }, { "inputs": [], "name": "MustStake2Rounds", "type": "error" }, { "inputs": [], "name": "NoCommitsReceived", "type": "error" }, { "inputs": [], "name": "NoMatchingCommit", "type": "error" }, { "inputs": [], "name": "NoReveals", "type": "error" }, { "inputs": [], "name": "NotAdmin", "type": "error" }, { "inputs": [], "name": "NotClaimPhase", "type": "error" }, { "inputs": [], "name": "NotCommitPhase", "type": "error" }, { "inputs": [], "name": "NotMatchingOwner", "type": "error" }, { "inputs": [], "name": "NotRevealPhase", "type": "error" }, { "inputs": [], "name": "NotStaked", "type": "error" }, { "inputs": [], "name": "OnlyPauser", "type": "error" }, { "inputs": [], "name": "OutOfDepth", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "name": "OutOfDepthClaim", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "OutOfDepthReveal", "type": "error" }, { "inputs": [], "name": "PhaseLastBlock", "type": "error" }, { "inputs": [], "name": "RandomElementCheckFailed", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "trALast", "type": "bytes32" } ], "name": "ReserveCheckFailed", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "SigRecoveryFailed", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "SocCalcNotMatching", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "SocVerificationFailed", "type": "error" }, { "inputs": [], "name": "WrongPhase", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "validChunkCount", "type": "uint256" } ], "name": "ChunkCount", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "roundNumber", "type": "uint256" }, { "indexed": false, "internalType": "bytes32", "name": "overlay", "type": "bytes32" }, { "indexed": false, "internalType": "uint8", "name": "height", "type": "uint8" } ], "name": "Committed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_count", "type": "uint256" } ], "name": "CountCommits", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_count", "type": "uint256" } ], "name": "CountReveals", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "roundNumber", "type": "uint256" }, { "indexed": false, "internalType": "bytes32", "name": "anchor", "type": "bytes32" } ], "name": "CurrentRevealAnchor", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "redundancyCount", "type": "uint16" } ], "name": "PriceAdjustmentSkipped", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "roundNumber", "type": "uint256" }, { "indexed": false, "internalType": "bytes32", "name": "overlay", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "stake", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "stakeDensity", "type": "uint256" }, { "indexed": false, "internalType": "bytes32", "name": "reserveCommitment", "type": "bytes32" }, { "indexed": false, "internalType": "uint8", "name": "depth", "type": "uint8" } ], "name": "Revealed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "hash", "type": "bytes32" }, { "indexed": false, "internalType": "uint8", "name": "depth", "type": "uint8" } ], "name": "TruthSelected", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "components": [ { "internalType": "bytes32", "name": "overlay", "type": "bytes32" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint8", "name": "depth", "type": "uint8" }, { "internalType": "uint256", "name": "stake", "type": "uint256" }, { "internalType": "uint256", "name": "stakeDensity", "type": "uint256" }, { "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "indexed": false, "internalType": "struct Redistribution.Reveal", "name": "winner", "type": "tuple" } ], "name": "WinnerSelected", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "owner", "type": "address" } ], "name": "WithdrawFailed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "indexInRC", "type": "uint256" }, { "indexed": false, "internalType": "bytes32", "name": "chunkAddress", "type": "bytes32" } ], "name": "transformedChunkAddressFromInclusionProof", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "OracleContract", "outputs": [ { "internalType": "contract IPriceOracle", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PostageContract", "outputs": [ { "internalType": "contract IPostageStamp", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "Stakes", "outputs": [ { "internalType": "contract IStakeRegistry", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes32[]", "name": "proofSegments", "type": "bytes32[]" }, { "internalType": "bytes32", "name": "proveSegment", "type": "bytes32" }, { "internalType": "bytes32[]", "name": "proofSegments2", "type": "bytes32[]" }, { "internalType": "bytes32", "name": "proveSegment2", "type": "bytes32" }, { "internalType": "uint64", "name": "chunkSpan", "type": "uint64" }, { "internalType": "bytes32[]", "name": "proofSegments3", "type": "bytes32[]" }, { "components": [ { "internalType": "bytes", "name": "signature", "type": "bytes" }, { "internalType": "bytes32", "name": "postageId", "type": "bytes32" }, { "internalType": "uint64", "name": "index", "type": "uint64" }, { "internalType": "uint64", "name": "timeStamp", "type": "uint64" } ], "internalType": "struct Redistribution.PostageProof", "name": "postageProof", "type": "tuple" }, { "components": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "bytes", "name": "signature", "type": "bytes" }, { "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, { "internalType": "bytes32", "name": "chunkAddr", "type": "bytes32" } ], "internalType": "struct Redistribution.SOCProof[]", "name": "socProof", "type": "tuple[]" } ], "internalType": "struct Redistribution.ChunkInclusionProof", "name": "entryProof1", "type": "tuple" }, { "components": [ { "internalType": "bytes32[]", "name": "proofSegments", "type": "bytes32[]" }, { "internalType": "bytes32", "name": "proveSegment", "type": "bytes32" }, { "internalType": "bytes32[]", "name": "proofSegments2", "type": "bytes32[]" }, { "internalType": "bytes32", "name": "proveSegment2", "type": "bytes32" }, { "internalType": "uint64", "name": "chunkSpan", "type": "uint64" }, { "internalType": "bytes32[]", "name": "proofSegments3", "type": "bytes32[]" }, { "components": [ { "internalType": "bytes", "name": "signature", "type": "bytes" }, { "internalType": "bytes32", "name": "postageId", "type": "bytes32" }, { "internalType": "uint64", "name": "index", "type": "uint64" }, { "internalType": "uint64", "name": "timeStamp", "type": "uint64" } ], "internalType": "struct Redistribution.PostageProof", "name": "postageProof", "type": "tuple" }, { "components": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "bytes", "name": "signature", "type": "bytes" }, { "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, { "internalType": "bytes32", "name": "chunkAddr", "type": "bytes32" } ], "internalType": "struct Redistribution.SOCProof[]", "name": "socProof", "type": "tuple[]" } ], "internalType": "struct Redistribution.ChunkInclusionProof", "name": "entryProof2", "type": "tuple" }, { "components": [ { "internalType": "bytes32[]", "name": "proofSegments", "type": "bytes32[]" }, { "internalType": "bytes32", "name": "proveSegment", "type": "bytes32" }, { "internalType": "bytes32[]", "name": "proofSegments2", "type": "bytes32[]" }, { "internalType": "bytes32", "name": "proveSegment2", "type": "bytes32" }, { "internalType": "uint64", "name": "chunkSpan", "type": "uint64" }, { "internalType": "bytes32[]", "name": "proofSegments3", "type": "bytes32[]" }, { "components": [ { "internalType": "bytes", "name": "signature", "type": "bytes" }, { "internalType": "bytes32", "name": "postageId", "type": "bytes32" }, { "internalType": "uint64", "name": "index", "type": "uint64" }, { "internalType": "uint64", "name": "timeStamp", "type": "uint64" } ], "internalType": "struct Redistribution.PostageProof", "name": "postageProof", "type": "tuple" }, { "components": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "bytes", "name": "signature", "type": "bytes" }, { "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, { "internalType": "bytes32", "name": "chunkAddr", "type": "bytes32" } ], "internalType": "struct Redistribution.SOCProof[]", "name": "socProof", "type": "tuple[]" } ], "internalType": "struct Redistribution.ChunkInclusionProof", "name": "entryProofLast", "type": "tuple" } ], "name": "claim", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_obfuscatedHash", "type": "bytes32" }, { "internalType": "uint64", "name": "_roundNumber", "type": "uint64" } ], "name": "commit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "currentClaimRound", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentCommitRound", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "currentCommits", "outputs": [ { "internalType": "bytes32", "name": "overlay", "type": "bytes32" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "bool", "name": "revealed", "type": "bool" }, { "internalType": "uint8", "name": "height", "type": "uint8" }, { "internalType": "uint256", "name": "stake", "type": "uint256" }, { "internalType": "bytes32", "name": "obfuscatedHash", "type": "bytes32" }, { "internalType": "uint256", "name": "revealIndex", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentMinimumDepth", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentPhaseClaim", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentPhaseCommit", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentPhaseReveal", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentRevealRound", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "currentReveals", "outputs": [ { "internalType": "bytes32", "name": "overlay", "type": "bytes32" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint8", "name": "depth", "type": "uint8" }, { "internalType": "uint256", "name": "stake", "type": "uint256" }, { "internalType": "uint256", "name": "stakeDensity", "type": "uint256" }, { "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentRound", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentRoundAnchor", "outputs": [ { "internalType": "bytes32", "name": "returnVal", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentRoundReveals", "outputs": [ { "components": [ { "internalType": "bytes32", "name": "overlay", "type": "bytes32" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint8", "name": "depth", "type": "uint8" }, { "internalType": "uint256", "name": "stake", "type": "uint256" }, { "internalType": "uint256", "name": "stakeDensity", "type": "uint256" }, { "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "internalType": "struct Redistribution.Reveal[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentSeed", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "A", "type": "bytes32" }, { "internalType": "bytes32", "name": "B", "type": "bytes32" }, { "internalType": "uint8", "name": "minimum", "type": "uint8" } ], "name": "inProximity", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "uint8", "name": "_depth", "type": "uint8" } ], "name": "isParticipatingInUpcomingRound", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_overlay", "type": "bytes32" } ], "name": "isWinner", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextSeed", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "_depth", "type": "uint8" }, { "internalType": "bytes32", "name": "_hash", "type": "bytes32" }, { "internalType": "bytes32", "name": "_revealNonce", "type": "bytes32" } ], "name": "reveal", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "_penaltyMultiplierDisagreement", "type": "uint8" }, { "internalType": "uint8", "name": "_penaltyMultiplierNonRevealed", "type": "uint8" }, { "internalType": "uint8", "name": "_penaltyRandomFactor", "type": "uint8" } ], "name": "setFreezingParams", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_sampleMaxValue", "type": "uint256" } ], "name": "setSampleMaxValue", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unPause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "winner", "outputs": [ { "internalType": "bytes32", "name": "overlay", "type": "bytes32" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint8", "name": "depth", "type": "uint8" }, { "internalType": "uint256", "name": "stake", "type": "uint256" }, { "internalType": "uint256", "name": "stakeDensity", "type": "uint256" }, { "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_overlay", "type": "bytes32" }, { "internalType": "uint8", "name": "_depth", "type": "uint8" }, { "internalType": "bytes32", "name": "_hash", "type": "bytes32" }, { "internalType": "bytes32", "name": "revealNonce", "type": "bytes32" } ], "name": "wrapCommit", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" } ], "bytecode": "0x60806040526008805462ffffff60c01b19166264020160c01b1790557dba1914b54e0348a1028d1a103a95ed55c4004b9d332400000000000000006009553480156200004a57600080fd5b506040516200470c3803806200470c8339810160408190526200006d916200019d565b60018054600380546001600160a01b03199081166001600160a01b03888116919091179092556001600160a81b0319909216610100868316021790925560028054909116918316919091179055620000c7600033620000d0565b505050620001e7565b620000dc8282620000e0565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620000dc576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556200013c3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b80516001600160a01b03811681146200019857600080fd5b919050565b600080600060608486031215620001b357600080fd5b620001be8462000180565b9250620001ce6020850162000180565b9150620001de6040850162000180565b90509250925092565b61451580620001f76000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c806377c75d1011610130578063b6cd5822116100b8578063dfbf53ae1161007c578063dfbf53ae14610524578063f4e6fcca14610554578063f69ee1d114610567578063f7b188a51461057a578063fb00f2f31461058257600080fd5b8063b6cd5822146104c9578063c46b4029146104dc578063ce987745146104f6578063d1e8b63d14610509578063d547741f1461051157600080fd5b80638456cb59116100ff5780638456cb59146104965780638a19c8bc1461049e5780638d8b6428146104a657806391d14854146104ae578063a217fddf146104c157600080fd5b806377c75d10146104115780637fe019c61461042457806382b39b1b1461043e578063832206261461048e57600080fd5b80635c975abb116101b357806364c34a851161018257806364c34a851461035957806369bfac011461036157806369da91141461038c5780636f94aaf21461039f57806372286cba146103b957600080fd5b80635c975abb146103205780635d4844ea1461032b57806362fd29ae1461033e57806363f5cf7c1461034657600080fd5b80632a4e6249116101fa5780632a4e6249146102c85780632f2ff15d146102dd5780632f3906da146102f257806336568abe146102fa5780635838d6731461030d57600080fd5b806301ffc9a71461022c5780631736d472146102545780631835009614610267578063248a9ca314610297575b600080fd5b61023f61023a366004613c67565b610595565b60405190151581526020015b60405180910390f35b61023f610262366004613cb5565b6105cc565b60015461027f9061010090046001600160a01b031681565b6040516001600160a01b03909116815260200161024b565b6102ba6102a5366004613cee565b60009081526020819052604090206001015490565b60405190815260200161024b565b6102d06107c0565b60405161024b9190613d4a565b6102f06102eb366004613d98565b6108cc565b005b61023f6108f6565b6102f0610308366004613d98565b610940565b6102f061031b366004613dd9565b6109c3565b60015460ff1661023f565b60035461027f906001600160a01b031681565b6102ba610ec2565b6102f0610354366004613e1e565b610f89565b6102ba611390565b600854610374906001600160401b031681565b6040516001600160401b03909116815260200161024b565b60025461027f906001600160a01b031681565b60085461037490600160801b90046001600160401b031681565b6103cc6103c7366004613cee565b611453565b604080519788526001600160a01b0390961660208801529315159486019490945260ff9091166060850152608084015260a083019190915260c082015260e00161024b565b61023f61041f366004613cee565b6114b1565b60085461037490600160401b90046001600160401b031681565b61045161044c366004613cee565b611756565b604080519687526001600160a01b03909516602087015260ff909316938501939093526060840152608083019190915260a082015260c00161024b565b6102ba6117ad565b6102f06117b8565b6103746117ea565b61023f6117f7565b61023f6104bc366004613d98565b611821565b6102ba600081565b6102f06104d7366004613ea5565b61184a565b6104e4611d07565b60405160ff909116815260200161024b565b6102ba610504366004613eda565b611d8a565b61023f611de1565b6102f061051f366004613d98565b611e06565b600a54600b54600c54600d54600e5461045194936001600160a01b03811693600160a01b90910460ff1692909186565b6102f0610562366004613f17565b611e2b565b6102f0610575366004613cee565b611e9b565b6102f0611ec8565b61023f610590366004613f62565b611ef8565b60006001600160e01b03198216637965db0b60e01b14806105c657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60035460405163d1052d1f60e01b81526001600160a01b038481166004830152600092839291169063d1052d1f90602401602060405180830381865afa15801561061a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063e9190613f90565b600354604051631d54805360e01b81526001600160a01b03878116600483015292935060009290911690631d54805390602401602060405180830381865afa15801561068e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b29190613fa9565b6106bc9085613fdc565b90506106c66108f6565b156106e4576040516338961af360e21b815260040160405180910390fd5b81600003610704576040516273e5c360e31b815260040160405180910390fd5b61071060986002613ff5565b61071a904361400c565b821061073957604051630a0744c560e01b815260040160405180910390fd5b6003546040516397adedb560e01b81526001600160a01b0387811660048301526107b79216906397adedb590602401602060405180830381865afa158015610785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a99190613f90565b6107b1611390565b83611ef8565b95945050505050565b60606107ca6117f7565b6107e757604051633788c6c160e11b815260040160405180910390fd5b60006107f16117ea565b6008549091506001600160401b03808316600160401b909204161461082957604051636fbabc7760e01b815260040160405180910390fd5b6005805480602002602001604051908101604052809291908181526020016000905b828210156108c25760008481526020908190206040805160c08101825260058602909201805483526001808201546001600160a01b03811685870152600160a01b900460ff169284019290925260028101546060840152600381015460808401526004015460a0830152908352909201910161084b565b5050505091505090565b6000828152602081905260409020600101546108e781611f35565b6108f18383611f42565b505050565b600080610904609843614035565b905061091260046098614049565b811015801561092b575061092860026098614049565b81105b1561093857600191505090565b600091505090565b6001600160a01b03811633146109b55760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6109bf8282611fc6565b5050565b6109cb61202b565b60006109d56117ea565b6003546040516397adedb560e01b81523360048201529192506000916001600160a01b03909116906397adedb590602401602060405180830381865afa158015610a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a479190613f90565b600354604051634185029f60e11b81523360048201529192506000916001600160a01b039091169063830a053e90602401602060405180830381865afa158015610a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab99190613f90565b60035460405163d1052d1f60e01b81523360048201529192506000916001600160a01b039091169063d1052d1f90602401602060405180830381865afa158015610b07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2b9190613f90565b600354604051631d54805360e01b81523360048201529192506000916001600160a01b0390911690631d54805390602401602060405180830381865afa158015610b79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9d9190613fa9565b905081600003610bbf576040516273e5c360e31b815260040160405180910390fd5b610bcb60986002613ff5565b610bd5904361400c565b8210610bf457604051630a0744c560e01b815260040160405180910390fd5b856001600160401b0316856001600160401b03161115610c265760405162143fdf60ea1b815260040160405180910390fd5b856001600160401b0316856001600160401b03161015610c5957604051633d0607eb60e11b815260040160405180910390fd5b610c61611de1565b610c7e5760405163dc816a8760e01b815260040160405180910390fd5b6001610c8c60046098614049565b610c96919061400c565b610ca1609843614035565b03610cbf57604051632dd77b5b60e11b815260040160405180910390fd5b6008546001600160401b03868116911614610cfd57610ce060046000613bab565b6008805467ffffffffffffffff19166001600160401b0387161790555b60045460005b81811015610d57578560048281548110610d1f57610d1f61405d565b90600052602060002090600502016000015403610d4f576040516317fd8aab60e31b815260040160405180910390fd5b600101610d03565b5060046040518060e00160405280878152602001336001600160a01b031681526020016000151581526020018460ff1681526020018681526020018a8152602001600081525090806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a81548160ff02191690831515021790555060608201518160010160156101000a81548160ff021916908360ff1602179055506080820151816002015560a0820151816003015560c0820151816004015550507faadc88121471799d39ee2bbe1dd30a4ab57510e2a33bd6e537de5fafd2daa886878684604051610eb0939291906001600160401b03939093168352602083019190915260ff16604082015260600190565b60405180910390a15050505050505050565b600080610ecd6117ea565b610ed8906001614073565b60075460085491925090610efd90600160401b90046001600160401b03166001614073565b6001600160401b0316826001600160401b031611156105c657600854600090600190610f3990600160401b90046001600160401b03168561409a565b610f43919061409a565b6001600160401b031690508181604051602001610f6a929190918252602082015260400190565b6040516020818303038152906040528051906020012091505092915050565b610f9161202b565b610f99612071565b6040805160c081018252600a548152600b546001600160a01b0381166020830152600160a01b900460ff1691810191909152600c546060820152600d546080820152600e5460a08201526006546007546000918291610ff9600f82614035565b9350611006600e82614035565b925083831061101d5782611019816140ba565b9350505b6110308660200135838760400151611ef8565b61105057604051633b5f43a360e01b8152600360048201526024016109ac565b61105b86601e61269c565b611064866129ae565b61106d86612c55565b6110808860200135838760400151611ef8565b6110a057604051633b5f43a360e01b8152600260048201526024016109ac565b6110b4886110af866002613ff5565b61269c565b6110bd886129ae565b6110c688612c55565b6110d98760200135838760400151611ef8565b6110f957604051633b5f43a360e01b8152600160048201526024016109ac565b611108876110af856002613ff5565b611111876129ae565b61111a87612c55565b61119084846111298b806140d3565b600081811061113a5761113a61405d565b6020029190910135905061114e8b806140d3565b600081811061115f5761115f61405d565b602002919091013590506111738b806140d3565b60008181106111845761118461405d565b90506020020135612eb7565b6111ba61119d87806140d3565b60008181106111ae576111ae61405d565b90506020020135612f44565b60015460208601516040516001600160a01b03918216602482015260009261010090049091169060440160408051601f198184030181529181526020820180516001600160e01b03166351cff8d960e01b179052516112199190614147565b6000604051808303816000865af19150503d8060008114611256576040519150601f19603f3d011682016040523d82523d6000602084013e61125b565b606091505b50509050806112a6576020808701516040516001600160a01b0390911681527f7ae187a0c04cf55b655ca83fa11d37854c882bf1fdcb588469b414731bb0e05a910160405180910390a15b7f788e77979e6e6a8a6a5d2c19c58b1ff9671298f54c85ac6f6aa30379aed5861a866040516112d59190614163565b60405180910390a17fbee3fc8a3523c1a65fa9308ce1f2b8fd90c24975b141b754603194597846e4dd60018054906101000a90046001600160a01b03166001600160a01b0316638a5e8e326040518163ffffffff1660e01b8152600401602060405180830381865afa15801561134f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113739190613f90565b6040519081526020015b60405180910390a1505050505050505050565b600061139a611de1565b806113d65750600854600160401b90046001600160401b03166113bb6117ea565b6001600160401b03161180156113d657506113d46117f7565b155b156113e8576113e36117ad565b905090565b6113f06117f7565b156113fd576113e3610ec2565b6114056108f6565b80156114325750600854600160401b90046001600160401b03166114276117ea565b6001600160401b0316145b15611450576040516336b7884b60e01b815260040160405180910390fd5b90565b6004818154811061146357600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401549294506001600160a01b0382169360ff600160a01b8404811694600160a81b909404169287565b60006114bb6117f7565b6114d857604051633788c6c160e11b815260040160405180910390fd5b60006114e26117ea565b6008549091506001600160401b03808316600160401b909204161461151a57604051636fbabc7760e01b815260040160405180910390fd5b6008546001600160401b03600160801b90910481169082161161155057604051630c8d9eab60e31b815260040160405180910390fd5b600080600080600080600080611564612f69565b90506000611570613006565b600454919650945060005b8181101561174257600481815481106115965761159661405d565b9060005260206000209060050201600401549450600481815481106115bd576115bd61405d565b906000526020600020906005020160010160149054906101000a900460ff16801561160b5750600585815481106115f6576115f661405d565b90600052602060002090600502016004015487145b80156116495750600585815481106116255761162561405d565b600091825260209091206001600590920201015460ff878116600160a01b90920416145b1561173a57600585815481106116615761166161405d565b9060005260206000209060050201600301548b61167e9190614171565b9a508383604051602001611693929190614184565b60408051601f19818403018152919052805160209091012098506001600160801b03808a1698506116c5906001614171565b600586815481106116d8576116d861405d565b9060005260206000209060050201600301546116f49190613ff5565b6116fe8c8a613ff5565b101561172c57600585815481106117175761171761405d565b90600052602060002090600502016000015499505b82611736816140ba565b9350505b60010161157b565b505050959099149998505050505050505050565b6005818154811061176657600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401549294506001600160a01b03821693600160a01b90920460ff169290919086565b600080610ed86117ea565b6117c3600033611821565b6117e057604051631d77d47760e21b815260040160405180910390fd5b6117e86131b6565b565b60006113e3609843614049565b600061180560026098614049565b611810609843614035565b1061181b5750600190565b50600090565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61185261202b565b600061185c6117ea565b6003546040516397adedb560e01b81523360048201529192506000916001600160a01b03909116906397adedb590602401602060405180830381865afa1580156118aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ce9190613f90565b6008549091506001600160401b038381169116146118ff576040516342154f0560e11b815260040160405180910390fd5b6119076108f6565b6119245760405163688446db60e11b815260040160405180910390fd5b61192c611d07565b60ff168560ff161015611952576040516383d9b7bd60e01b815260040160405180910390fd5b6008546001600160401b03838116600160401b9092041614611a2957611976611390565b60065561198560056000613bcc565b600880546fffffffffffffffff00000000000000001916600160401b6001600160401b038516908102919091179091556006546040805192835260208301919091527ff0ae472da9c8da86bda4991a549c03a3cb328b5f360ea11a5b8814f32bb85176910160405180910390a1611a29600754604080516020810192909252449082015260600160408051601f198184030181529190528051602090910120600755565b6000611a3782878787611d8a565b90506000611a45838361320a565b9050600060048281548110611a5c57611a5c61405d565b600091825260208083206040805160e08101825260059094029091018054845260018101546001600160a01b0381169385019390935260ff600160a01b84048116151592850192909252600160a81b909204166060830181905260028201546080840152600382015460a084015260049091015460c0830152909250611ae2908a613fdc565b9050611af5826000015160065483611ef8565b611b185760065460405163053aeef960e21b81526004016109ac91815260200190565b816040015115611b3b5760405163a89ac15160e01b815260040160405180910390fd5b600160048481548110611b5057611b5061405d565b906000526020600020906005020160010160146101000a81548160ff0