[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "components": [ { "internalType": "uint256", "name": "startTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "maxClaimableSupply", "type": "uint256" }, { "internalType": "uint256", "name": "supplyClaimed", "type": "uint256" }, { "internalType": "uint256", "name": "quantityLimitPerTransaction", "type": "uint256" }, { "internalType": "uint256", "name": "waitTimeInSecondsBetweenClaims", "type": "uint256" }, { "internalType": "bytes32", "name": "merkleRoot", "type": "bytes32" }, { "internalType": "uint256", "name": "pricePerToken", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" } ], "indexed": false, "internalType": "struct IDropClaimCondition.ClaimCondition[]", "name": "claimConditions", "type": "tuple[]" } ], "name": "ClaimConditionsUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "prevURI", "type": "string" }, { "indexed": false, "internalType": "string", "name": "newURI", "type": "string" } ], "name": "ContractURIUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "fromDelegate", "type": "address" }, { "indexed": true, "internalType": "address", "name": "toDelegate", "type": "address" } ], "name": "DelegateChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegate", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "previousBalance", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newBalance", "type": "uint256" } ], "name": "DelegateVotesChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "maxTotalSupply", "type": "uint256" } ], "name": "MaxTotalSupplyUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "count", "type": "uint256" } ], "name": "MaxWalletClaimCountUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "platformFeeRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "platformFeeBps", "type": "uint256" } ], "name": "PlatformFeeInfoUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" } ], "name": "PrimarySaleRecipientUpdated", "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": true, "internalType": "uint256", "name": "claimConditionIndex", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "claimer", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "quantityClaimed", "type": "uint256" } ], "name": "TokensClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "wallet", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "count", "type": "uint256" } ], "name": "WalletClaimCountUpdated", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burnFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint32", "name": "pos", "type": "uint32" } ], "name": "checkpoints", "outputs": [ { "components": [ { "internalType": "uint32", "name": "fromBlock", "type": "uint32" }, { "internalType": "uint224", "name": "votes", "type": "uint224" } ], "internalType": "struct ERC20VotesUpgradeable.Checkpoint", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_receiver", "type": "address" }, { "internalType": "uint256", "name": "_quantity", "type": "uint256" }, { "internalType": "address", "name": "_currency", "type": "address" }, { "internalType": "uint256", "name": "_pricePerToken", "type": "uint256" }, { "internalType": "bytes32[]", "name": "_proofs", "type": "bytes32[]" }, { "internalType": "uint256", "name": "_proofMaxQuantityPerTransaction", "type": "uint256" } ], "name": "claim", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "claimCondition", "outputs": [ { "internalType": "uint256", "name": "currentStartId", "type": "uint256" }, { "internalType": "uint256", "name": "count", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractType", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractVersion", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" } ], "name": "delegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "delegateBySig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "delegates", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getActiveClaimConditionId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_conditionId", "type": "uint256" } ], "name": "getClaimConditionById", "outputs": [ { "components": [ { "internalType": "uint256", "name": "startTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "maxClaimableSupply", "type": "uint256" }, { "internalType": "uint256", "name": "supplyClaimed", "type": "uint256" }, { "internalType": "uint256", "name": "quantityLimitPerTransaction", "type": "uint256" }, { "internalType": "uint256", "name": "waitTimeInSecondsBetweenClaims", "type": "uint256" }, { "internalType": "bytes32", "name": "merkleRoot", "type": "bytes32" }, { "internalType": "uint256", "name": "pricePerToken", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" } ], "internalType": "struct IDropClaimCondition.ClaimCondition", "name": "condition", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_conditionId", "type": "uint256" }, { "internalType": "address", "name": "_claimer", "type": "address" } ], "name": "getClaimTimestamp", "outputs": [ { "internalType": "uint256", "name": "lastClaimTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "nextValidClaimTimestamp", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "getPastTotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "getPastVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPlatformFeeInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "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": "uint256", "name": "index", "type": "uint256" } ], "name": "getRoleMember", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMemberCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_defaultAdmin", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "string", "name": "_contractURI", "type": "string" }, { "internalType": "address[]", "name": "_trustedForwarders", "type": "address[]" }, { "internalType": "address", "name": "_primarySaleRecipient", "type": "address" }, { "internalType": "address", "name": "_platformFeeRecipient", "type": "address" }, { "internalType": "uint256", "name": "_platformFeeBps", "type": "uint256" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "forwarder", "type": "address" } ], "name": "isTrustedForwarder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxWalletClaimCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "numCheckpoints", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "primarySaleRecipient", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "startTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "maxClaimableSupply", "type": "uint256" }, { "internalType": "uint256", "name": "supplyClaimed", "type": "uint256" }, { "internalType": "uint256", "name": "quantityLimitPerTransaction", "type": "uint256" }, { "internalType": "uint256", "name": "waitTimeInSecondsBetweenClaims", "type": "uint256" }, { "internalType": "bytes32", "name": "merkleRoot", "type": "bytes32" }, { "internalType": "uint256", "name": "pricePerToken", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" } ], "internalType": "struct IDropClaimCondition.ClaimCondition[]", "name": "_phases", "type": "tuple[]" }, { "internalType": "bool", "name": "_resetClaimEligibility", "type": "bool" } ], "name": "setClaimConditions", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_uri", "type": "string" } ], "name": "setContractURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_maxTotalSupply", "type": "uint256" } ], "name": "setMaxTotalSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_count", "type": "uint256" } ], "name": "setMaxWalletClaimCount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_platformFeeRecipient", "type": "address" }, { "internalType": "uint256", "name": "_platformFeeBps", "type": "uint256" } ], "name": "setPlatformFeeInfo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_saleRecipient", "type": "address" } ], "name": "setPrimarySaleRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_claimer", "type": "address" }, { "internalType": "uint256", "name": "_count", "type": "uint256" } ], "name": "setWalletClaimCount", "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": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_conditionId", "type": "uint256" }, { "internalType": "address", "name": "_claimer", "type": "address" }, { "internalType": "uint256", "name": "_quantity", "type": "uint256" }, { "internalType": "address", "name": "_currency", "type": "address" }, { "internalType": "uint256", "name": "_pricePerToken", "type": "uint256" }, { "internalType": "bool", "name": "verifyMaxQuantityPerTransaction", "type": "bool" } ], "name": "verifyClaim", "outputs": [], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_conditionId", "type": "uint256" }, { "internalType": "address", "name": "_claimer", "type": "address" }, { "internalType": "uint256", "name": "_quantity", "type": "uint256" }, { "internalType": "bytes32[]", "name": "_proofs", "type": "bytes32[]" }, { "internalType": "uint256", "name": "_proofMaxQuantityPerTransaction", "type": "uint256" } ], "name": "verifyClaimMerkleProof", "outputs": [ { "internalType": "bool", "name": "validMerkleProof", "type": "bool" }, { "internalType": "uint256", "name": "merkleProofIndex", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "walletClaimCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ]
60806040523480156200001157600080fd5b50600054610100900460ff166200002f5760005460ff161562000039565b62000039620000de565b620000a15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b600054610100900460ff16158015620000c4576000805461ffff19166101011790555b8015620000d7576000805461ff00191690555b506200010b565b6000620000f630620000fc60201b620026c81760201c565b15905090565b6001600160a01b03163b151590565b615524806200011b6000396000f3fe6080604052600436106103815760003560e01c80637a5a8e7e116101d1578063af3be89011610102578063d505accf116100a0578063dfad80a61161006f578063dfad80a614610ba7578063e23b816414610bc7578063e8a3d48514610be7578063f1127ed814610bfc57600080fd5b8063d505accf14610b03578063d547741f14610b23578063d637ed5914610b43578063dd62ed3e14610b6057600080fd5b8063c68907de116100dc578063c68907de14610a78578063ca15c87314610a8d578063cb2ef6f714610aad578063d45573f614610acc57600080fd5b8063af3be89014610a01578063afb8291614610a38578063c3cda52014610a5857600080fd5b806395d89b411161016f578063a217fddf11610149578063a217fddf1461097f578063a457c2d714610994578063a9059cbb146109b4578063ac9650d8146109d457600080fd5b806395d89b41146109365780639ab24eb01461094b578063a0a8e4601461096b57600080fd5b80638e539e8c116101ab5780638e539e8c146108905780639010d07c146108b057806391d14854146108d0578063938e3d7b1461091657600080fd5b80637a5a8e7e146108285780637ecebe001461083b57806386ee745d1461085b57600080fd5b806339509351116102b6578063572b6c05116102545780636f8934f4116102235780636f8934f4146107125780636fcfff451461079c57806370a08231146107d157806379cc67901461080857600080fd5b8063572b6c051461065f578063587cde1e146106985780635c19a95c146106d25780636f4f2837146106f257600080fd5b80633f3e4c11116102905780633f3e4c11146105d157806342966c68146105f15780634352ab4114610611578063508679571461063f57600080fd5b806339509351146105715780633a46b1a8146105915780633ea33f29146105b157600080fd5b806323b872dd116103235780632f2ff15d116102fd5780632f2ff15d146104fa578063313ce5671461051a5780633644e5151461053c57806336568abe1461055157600080fd5b806323b872dd14610493578063248a9ca3146104b35780632ab4d052146104e357600080fd5b8063079fe40e1161035f578063079fe40e14610402578063095ea7b31461043b57806318160ddd1461045b5780631e7ac4881461047157600080fd5b806301ffc9a71461038657806305981769146103bb57806306fdde03146103e0575b600080fd5b34801561039257600080fd5b506103a66103a13660046148a6565b610c46565b60405190151581526020015b60405180910390f35b3480156103c757600080fd5b506103d26102605481565b6040519081526020016103b2565b3480156103ec57600080fd5b506103f5610c57565b6040516103b29190614928565b34801561040e57600080fd5b5061025f54610423906001600160a01b031681565b6040516001600160a01b0390911681526020016103b2565b34801561044757600080fd5b506103a6610456366004614960565b610cea565b34801561046757600080fd5b50610161546103d2565b34801561047d57600080fd5b5061049161048c366004614960565b610d0c565b005b34801561049f57600080fd5b506103a66104ae36600461498c565b610de5565b3480156104bf57600080fd5b506103d26104ce3660046149cd565b600090815260fb602052604090206001015490565b3480156104ef57600080fd5b506103d26102615481565b34801561050657600080fd5b506104916105153660046149e6565b610e15565b34801561052657600080fd5b5060125b60405160ff90911681526020016103b2565b34801561054857600080fd5b506103d2610e42565b34801561055d57600080fd5b5061049161056c3660046149e6565b610e51565b34801561057d57600080fd5b506103a661058c366004614960565b610eed565b34801561059d57600080fd5b506103d26105ac366004614960565b610f3a565b3480156105bd57600080fd5b506104916105cc366004614960565b610fae565b3480156105dd57600080fd5b506104916105ec3660046149cd565b61100a565b3480156105fd57600080fd5b5061049161060c3660046149cd565b611056565b34801561061d57600080fd5b506103d261062c366004614a16565b6102676020526000908152604090205481565b34801561064b57600080fd5b5061049161065a3660046149cd565b61106a565b34801561066b57600080fd5b506103a661067a366004614a16565b6001600160a01b031660009081526065602052604090205460ff1690565b3480156106a457600080fd5b506104236106b3366004614a16565b6001600160a01b03908116600090815261022a60205260409020541690565b3480156106de57600080fd5b506104916106ed366004614a16565b6110ae565b3480156106fe57600080fd5b5061049161070d366004614a16565b6110bf565b34801561071e57600080fd5b5061073261072d3660046149cd565b611119565b6040516103b29190600061010082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c08301526001600160a01b0360e08401511660e083015292915050565b3480156107a857600080fd5b506107bc6107b7366004614a16565b6111e5565b60405163ffffffff90911681526020016103b2565b3480156107dd57600080fd5b506103d26107ec366004614a16565b6001600160a01b0316600090815261015f602052604090205490565b34801561081457600080fd5b50610491610823366004614960565b611208565b610491610836366004614a78565b611224565b34801561084757600080fd5b506103d2610856366004614a16565b6113f4565b34801561086757600080fd5b5061087b6108763660046149e6565b611413565b604080519283526020830191909152016103b2565b34801561089c57600080fd5b506103d26108ab3660046149cd565b611468565b3480156108bc57600080fd5b506104236108cb366004614afd565b6114c5565b3480156108dc57600080fd5b506103a66108eb3660046149e6565b600091825260fb602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561092257600080fd5b50610491610931366004614b1f565b6114de565b34801561094257600080fd5b506103f56115d0565b34801561095757600080fd5b506103d2610966366004614a16565b6115e0565b34801561097757600080fd5b50600261052a565b34801561098b57600080fd5b506103d2600081565b3480156109a057600080fd5b506103a66109af366004614960565b611669565b3480156109c057600080fd5b506103a66109cf366004614960565b611714565b3480156109e057600080fd5b506109f46109ef366004614b91565b61172c565b6040516103b29190614bd3565b348015610a0d57600080fd5b50610a21610a1c366004614c35565b611821565b6040805192151583526020830191909152016103b2565b348015610a4457600080fd5b50610491610a53366004614cb5565b611a36565b348015610a6457600080fd5b50610491610a73366004614d2d565b611d42565b348015610a8457600080fd5b506103d2611e78565b348015610a9957600080fd5b506103d2610aa83660046149cd565b611f31565b348015610ab957600080fd5b5068044726f7045524332360bc1b6103d2565b348015610ad857600080fd5b5061025e5461025d54604080516001600160a01b03909316835261ffff9091166020830152016103b2565b348015610b0f57600080fd5b50610491610b1e366004614d87565b611f49565b348015610b2f57600080fd5b50610491610b3e3660046149e6565b612084565b348015610b4f57600080fd5b50610262546102635461087b919082565b348015610b6c57600080fd5b506103d2610b7b366004614df5565b6001600160a01b0391821660009081526101606020908152604080832093909416825291909152205490565b348015610bb357600080fd5b50610491610bc2366004614f58565b6120ac565b348015610bd357600080fd5b50610491610be2366004615041565b612260565b348015610bf357600080fd5b506103f56125b4565b348015610c0857600080fd5b50610c1c610c173660046150c7565b612643565b60408051825163ffffffff1681526020928301516001600160e01b031692810192909252016103b2565b6000610c51826126d7565b92915050565b60606101628054610c67906150fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610c93906150fe565b8015610ce05780601f10610cb557610100808354040283529160200191610ce0565b820191906000526020600020905b815481529060010190602001808311610cc357829003601f168201915b5050505050905090565b600080610cf56126fc565b9050610d02818585612706565b5060019392505050565b6000610d1f81610d1a6126fc565b61282b565b612710821115610d665760405162461bcd60e51b815260206004820152600d60248201526c313839901e1e9018981818181760991b60448201526064015b60405180910390fd5b61025d80546fffffffffffffffffffffffffffffffff191667ffffffffffffffff841617905561025e80546001600160a01b0385166001600160a01b031990911681179091556040518381527fe2497bd806ec41a6e0dd992c29a72efc0ef8fec9092d1978fd4a1e00b2f18304906020015b60405180910390a2505050565b600080610df06126fc565b9050610dfd8582856128ab565b610e0885858561293e565b60019150505b9392505050565b600082815260fb6020526040902060010154610e3381610d1a6126fc565b610e3d8383612b1f565b505050565b6000610e4c612b42565b905090565b610e596126fc565b6001600160a01b0316816001600160a01b031614610edf5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610d5d565b610ee98282612bbf565b5050565b600080610ef86126fc565b6001600160a01b0380821660009081526101606020908152604080832093891683529290522054909150610d029082908690610f35908790615149565b612706565b6000438210610f8b5760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e6564006044820152606401610d5d565b6001600160a01b038316600090815261022b60205260409020610e0e9083612be2565b6000610fbc81610d1a6126fc565b6001600160a01b0383166000818152610267602052604090819020849055517f8973b95d42472e89416ea69404f8038c041db700af9ec294e7b4cd4e1ff2801c90610dd89085815260200190565b600061101881610d1a6126fc565b6102618290556040518281527ff2672935fc79f5237559e2e2999dbe743bf65430894ac2b37666890e7c69e1af906020015b60405180910390a15050565b6110676110616126fc565b82612c9f565b50565b600061107881610d1a6126fc565b6102608290556040518281527ff9d383c69b6255cbd431ca23734f43bdf15e694c7494956c917498469bcbce739060200161104a565b6110676110b96126fc565b82612ca9565b60006110cd81610d1a6126fc565b61025f80546001600160a01b0319166001600160a01b0384169081179091556040517f299d17e95023f496e0ffc4909cff1a61f74bb5eb18de6f900f4155bfa1b3b33390600090a25050565b61116d6040518061010001604052806000815260200160008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b031681525090565b5060009081526102646020908152604091829020825161010081018452815481526001820154928101929092526002810154928201929092526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007909101546001600160a01b031660e082015290565b6001600160a01b038116600090815261022b6020526040812054610c5190612d25565b61121a826112146126fc565b836128ab565b610ee98282612c9f565b600260015414156112775760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610d5d565b60026001553360009081526065602052604090205460ff16806112a957503261129e6126fc565b6001600160a01b0316145b6112db5760405162461bcd60e51b81526020600482015260036024820152621093d560ea1b6044820152606401610d5d565b60006112e5611e78565b90506000806112ff836112f66126fc565b8b898989611821565b9150915060008460001480611324575060008481526102646020526040902060050154155b905061133b846113326126fc565b8c8c8c86611a36565b8280156113485750600085115b1561137857600084815261026660209081526040808320600886901c845290915290208054600160ff85161b1790555b6113838a8a8a612d8e565b61138e8b858c612efe565b8a6001600160a01b03166113a06126fc565b6001600160a01b0316857f9c4945d842cc8c6704877a0defcd9ab09f6d77b24a369a95c2610506c6c38ee78d6040516113db91815260200190565b60405180910390a4505060018055505050505050505050565b6001600160a01b03811660009081526101f76020526040812054610c51565b6000828152610265602090815260408083206001600160a01b038516845290915281205490811561146157506000838152610264602052604090206004015481018181101561146157506000195b9250929050565b60004382106114b95760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e6564006044820152606401610d5d565b610c5161022c83612be2565b600082815261012d60205260408120610e0e9083612faf565b60006114ec81610d1a6126fc565b600061025c80546114fc906150fe565b80601f0160208091040260200160405190810160405280929190818152602001828054611528906150fe565b80156115755780601f1061154a57610100808354040283529160200191611575565b820191906000526020600020905b81548152906001019060200180831161155857829003601f168201915b50505050509050838361025c919061158e92919061479d565b507fc9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a168185856040516115c293929190615161565b60405180910390a150505050565b60606101638054610c67906150fe565b6001600160a01b038116600090815261022b60205260408120548015611656576001600160a01b038316600090815261022b602052604090206116246001836151a7565b81548110611634576116346151be565b60009182526020909120015464010000000090046001600160e01b0316611659565b60005b6001600160e01b03169392505050565b6000806116746126fc565b6001600160a01b0380821660009081526101606020908152604080832093891683529290522054909150838110156116fc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d5d565b6117098286868403612706565b506001949350505050565b60008061171f6126fc565b9050610d0281858561293e565b60608167ffffffffffffffff81111561174757611747614e23565b60405190808252806020026020018201604052801561177a57816020015b60608152602001906001900390816117655790505b50905060005b8281101561181a576117ea3085858481811061179e5761179e6151be565b90506020028101906117b091906151d4565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612fbb92505050565b8282815181106117fc576117fc6151be565b602002602001018190525080806118129061521b565b915050611780565b5092915050565b600086815261026460209081526040808320815161010081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a08301819052600682015460c08401526007909101546001600160a01b031660e083015282919015611a2a5761191a86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050505060a08301516040516bffffffffffffffffffffffff1960608d901b16602082015260348101889052605401604051602081830303815290604052805190602001206130af565b90935091508261196c5760405162461bcd60e51b815260206004820152601160248201527f6e6f7420696e2077686974656c6973742e0000000000000000000000000000006044820152606401610d5d565b600089815261026660209081526040808320600886901c8452909152902054600160ff84161b16156119d15760405162461bcd60e51b815260206004820152600e60248201526d383937b7b31031b630b4b6b2b21760911b6044820152606401610d5d565b8315806119de5750838711155b611a2a5760405162461bcd60e51b815260206004820152601760248201527f696e76616c6964207175616e746974792070726f6f662e0000000000000000006044820152606401610d5d565b50965096945050505050565b60008681526102646020908152604091829020825161010081018452815481526001820154928101929092526002810154928201929092526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007909101546001600160a01b0390811660e08301819052908516148015611ac157508060c0015183145b611b195760405162461bcd60e51b8152602060048201526024808201527f696e76616c69642063757272656e6379206f722070726963652073706563696660448201526334b2b21760e11b6064820152608401610d5d565b600085118015611b355750811580611b35575080606001518511155b611b815760405162461bcd60e51b815260206004820152601960248201527f696e76616c6964207175616e7469747920636c61696d65642e000000000000006044820152606401610d5d565b8060200151858260400151611b969190615149565b1115611be45760405162461bcd60e51b815260206004820152601760248201527f657863656564206d6178206d696e7420737570706c792e0000000000000000006044820152606401610d5d565b6102615461026054811580611c0d57508187611c006101615490565b611c0a9190615149565b11155b611c595760405162461bcd60e51b815260206004820152601860248201527f657863656564206d617820746f74616c20737570706c792e00000000000000006044820152606401610d5d565b801580611c8b57506001600160a01b038816600090815261026760205260409020548190611c88908990615149565b11155b611cd75760405162461bcd60e51b815260206004820152601d60248201527f65786365656420636c61696d206c696d697420666f722077616c6c65740000006044820152606401610d5d565b6000611ce38a8a611413565b91505080421015611d365760405162461bcd60e51b815260206004820152601160248201527f63616e6e6f7420636c61696d207965742e0000000000000000000000000000006044820152606401610d5d565b50505050505050505050565b83421115611d925760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610d5d565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090611e0c90611e049060a0016040516020818303038152906040528051906020012061317d565b8585856131cb565b9050611e17816131f3565b8614611e655760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401610d5d565b611e6f8188612ca9565b50505050505050565b61026354610262546000918291611e8f9190615149565b90505b61026254811115611ee8576102646000611ead6001846151a7565b8152602001908152602001600020600001544210611ed657611ed06001826151a7565b91505090565b80611ee081615236565b915050611e92565b5060405162461bcd60e51b815260206004820152601960248201527f6e6f20616374697665206d696e7420636f6e646974696f6e2e000000000000006044820152606401610d5d565b600081815261012d60205260408120610c519061321c565b83421115611f995760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610d5d565b60006101f854888888611fab8c6131f3565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006120068261317d565b90506000612016828787876131cb565b9050896001600160a01b0316816001600160a01b0316146120795760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610d5d565b611d368a8a8a612706565b600082815260fb60205260409020600101546120a281610d1a6126fc565b610e3d8383612bbf565b600054610100900460ff166120c75760005460ff16156120cb565b303b155b61212e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610d5d565b600054610100900460ff16158015612150576000805461ffff19166101011790555b61215985613226565b612162886132b5565b61216c8888613308565b85516121809061025c90602089019061481d565b5061025f80546001600160a01b038087166001600160a01b03199283161790925561025e80549286169290911691909117905561025d80546fffffffffffffffffffffffffffffffff84166fffffffffffffffffffffffffffffffff199091161790556121ee60008a613358565b6122187f8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c8a613358565b6122437f8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c6000613358565b8015612255576000805461ff00191690555b505050505050505050565b600061226e81610d1a6126fc565b610262546102635481841561228a576122878284615149565b90505b6102638690556102628190556000805b87811015612458578015806122ca57508888828181106122bc576122bc6151be565b905061010002016000013582105b6123295760405162461bcd60e51b815260206004820152602a60248201527f737461727454696d657374616d70206d75737420626520696e20617363656e6460448201526934b7339037b93232b91760b11b6064820152608401610d5d565b6000610264816123398487615149565b815260200190815260200160002060020154905089898381811061235f5761235f6151be565b90506101000201602001358111156123b95760405162461bcd60e51b815260206004820152601a60248201527f6d617820737570706c7920636c61696d656420616c72656164790000000000006044820152606401610d5d565b8989838181106123cb576123cb6151be565b6101000291909101905061026460006123e48588615149565b815260200190815260200160002081816123fe919061524d565b5081905061026460006124118588615149565b8152602081019190915260400160002060020155898983818110612437576124376151be565b905061010002016000013592505080806124509061521b565b91505061229a565b5085156124d857835b828110156124d257600081815261026460209081526040822082815560018101839055600281018390556003810183905560048101839055600581018390556006810192909255600790910180546001600160a01b03191690556102669052806124ca8161521b565b915050612461565b50612571565b8683111561257157865b8381101561256f5761026460006124f98386615149565b81526020810191909152604001600090812081815560018101829055600281018290556003810182905560048101829055600581018290556006810182905560070180546001600160a01b0319169055610266906125578386615149565b815260200152806125678161521b565b9150506124e2565b505b7f22ddd1bcb3816651679299dbffccb94973edec10c32e88dc2f4735c7699a02ca88886040516125a29291906152be565b60405180910390a15050505050505050565b61025c80546125c2906150fe565b80601f01602080910402602001604051908101604052809291908181526020018280546125ee906150fe565b801561263b5780601f106126105761010080835404028352916020019161263b565b820191906000526020600020905b81548152906001019060200180831161261e57829003601f168201915b505050505081565b60408051808201909152600080825260208201526001600160a01b038316600090815261022b60205260409020805463ffffffff8416908110612688576126886151be565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b6001600160a01b03163b151590565b60006001600160e01b03198216635a05180f60e01b1480610c515750610c5182613362565b6000610e4c613397565b6001600160a01b0383166127685760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d5d565b6001600160a01b0382166127c95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d5d565b6001600160a01b038381166000818152610160602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600082815260fb602090815260408083206001600160a01b038516845290915290205460ff16610ee957612869816001600160a01b031660146133c1565b6128748360206133c1565b604051602001612885929190615355565b60408051601f198184030181529082905262461bcd60e51b8252610d5d91600401614928565b6001600160a01b03838116600090815261016060209081526040808320938616835292905220546000198114612938578181101561292b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610d5d565b6129388484848403612706565b50505050565b6001600160a01b0383166129a25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d5d565b6001600160a01b038216612a045760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d5d565b612a0f83838361356a565b6001600160a01b038316600090815261015f602052604090205481811015612a885760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d5d565b6001600160a01b03808516600090815261015f6020526040808220858503905591851681529081208054849290612ac0908490615149565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b0c91815260200190565b60405180910390a36129388484846136ae565b612b2982826136b9565b600082815261012d60205260409020610e3d908261375c565b6000610e4c7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612b726101c35490565b6101c4546040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b612bc98282613771565b600082815261012d60205260409020610e3d9082613812565b8154600090815b81811015612c46576000612bfd8284613827565b905084868281548110612c1257612c126151be565b60009182526020909120015463ffffffff161115612c3257809250612c40565b612c3d816001615149565b91505b50612be9565b8115612c8a5784612c586001846151a7565b81548110612c6857612c686151be565b60009182526020909120015464010000000090046001600160e01b0316612c8d565b60005b6001600160e01b031695945050505050565b610ee98282613842565b6001600160a01b03828116600081815261022a60208181526040808420805461015f845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461293882848361385b565b600063ffffffff821115612d8a5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610d5d565b5090565b80612d9857505050565b6000670de0b6b3a7640000612dad83866153d6565b612db791906153f5565b905060008111612e095760405162461bcd60e51b815260206004820152601060248201527f7175616e7469747920746f6f206c6f77000000000000000000000000000000006044820152606401610d5d565b61025d5460009061271090612e30906fffffffffffffffffffffffffffffffff16846153d6565b612e3a91906153f5565b90506001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612eb057813414612eb05760405162461bcd60e51b815260206004820152601660248201527f6d7573742073656e6420746f74616c2070726963652e000000000000000000006044820152606401610d5d565b612ecf84612ebc6126fc565b61025e546001600160a01b03168461399a565b612ef784612edb6126fc565b61025f546001600160a01b0316612ef285876151a7565b61399a565b5050505050565b6000828152610264602052604081206002018054839290612f20908490615149565b90915550506000828152610265602052604081204291612f3e6126fc565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550806102676000612f706126fc565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254612f9f9190615149565b90915550610e3d905083826139e4565b6000610e0e83836139ee565b60606001600160a01b0383163b6130235760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610d5d565b600080846001600160a01b03168460405161303e9190615417565b600060405180830381855af49150503d8060008114613079576040519150601f19603f3d011682016040523d82523d6000602084013e61307e565b606091505b50915091506130a682826040518060600160405280602781526020016154c860279139613a18565b95945050505050565b6000808281805b8751811015613171576130ca6002836153d6565b915060008882815181106130e0576130e06151be565b6020026020010151905080841161312257604080516020810186905290810182905260600160405160208183030381529060405280519060200120935061315e565b604080516020810183905290810185905260600160405160208183030381529060405280519060200120935060018361315b9190615149565b92505b50806131698161521b565b9150506130b6565b50941495939450505050565b6000610c5161318a612b42565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006131dc87878787613a51565b915091506131e981613b3e565b5095945050505050565b6001600160a01b03811660009081526101f7602052604090208054600181018255905b50919050565b6000610c51825490565b600054610100900460ff1661324d5760405162461bcd60e51b8152600401610d5d90615433565b60005b8151811015610ee957600160656000848481518110613271576132716151be565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806132ad8161521b565b915050613250565b600054610100900460ff166132dc5760405162461bcd60e51b8152600401610d5d90615433565b6132ff81604051806040016040528060018152602001603160f81b815250613cf9565b61106781613d3c565b600054610100900460ff1661332f5760405162461bcd60e51b8152600401610d5d90615433565b81516133439061016290602085019061481d565b508051610e3d9061016390602084019061481d565b610ee98282612b1f565b60006001600160e01b03198216637965db0b60e01b1480610c5157506301ffc9a760e01b6001600160e01b0319831614610c51565b3360009081526065602052604081205460ff16156133bc575060131936013560601c90565b503390565b606060006133d08360026153d6565b6133db906002615149565b67ffffffffffffffff8111156133f3576133f3614e23565b6040519080825280601f01601f19166020018201604052801561341d576020820181803683370190505b509050600360fc1b81600081518110613438576134386151be565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613467576134676151be565b60200101906001600160f81b031916908160001a905350600061348b8460026153d6565b613496906001615149565b90505b600181111561351b577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106134d7576134d76151be565b1a60f81b8282815181106134ed576134ed6151be565b60200101906001600160f81b031916908160001a90535060049490941c9361351481615236565b9050613499565b508315610e0e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610d5d565b600080527fde23fa6c6392e300b5ced791de0faa0b28226983a4ab1c05a1ba79ef4d0a13126020527f70e64e82d0337f3fa9071fdb3266f859725ed1fc29697b2e6e986b76cffbfb085460ff161580156135cc57506001600160a01b03831615155b80156135e057506001600160a01b03821615155b15610e3d576001600160a01b03831660009081527fde23fa6c6392e300b5ced791de0faa0b28226983a4ab1c05a1ba79ef4d0a1312602052604090205460ff168061366257506001600160a01b03821660009081527fde23fa6c6392e300b5ced791de0faa0b28226983a4ab1c05a1ba79ef4d0a1312602052604090205460ff165b610e3d5760405162461bcd60e51b815260206004820152601560248201527f7472616e736665727320726573747269637465642e00000000000000000000006044820152606401610d5d565b610e3d838383613d8b565b600082815260fb602090815260408083206001600160a01b038516845290915290205460ff16610ee957600082815260fb602090815260408083206001600160a01b03851684529091529020805460ff191660011790556137186126fc565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e0e836001600160a01b038416613dbe565b600082815260fb602090815260408083206001600160a01b038516845290915290205460ff1615610ee957600082815260fb602090815260408083206001600160a01b03851684529091529020805460ff191690556137ce6126fc565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6000610e0e836001600160a01b038416613e0d565b600061383660028484186153f5565b610e0e90848416615149565b61384c8282613f00565b61293861022c61406483614070565b816001600160a01b0316836001600160a01b03161415801561387d5750600081115b15610e3d576001600160a01b0383161561390c576001600160a01b038316600090815261022b6020526040812081906138b99061406485614070565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051613901929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610e3d576001600160a01b038216600090815261022b602052604081208190613943906141e985614070565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161398b929190918252602082015260400190565b60405180910390a25050505050565b806139a457612938565b6001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156139d8576139d382826141f5565b612938565b61293884848484614298565b610ee982826142f1565b6000826000018281548110613a0557613a056151be565b9060005260206000200154905092915050565b60608315613a27575081610e0e565b825115613a375782518084602001fd5b8160405162461bcd60e51b8152600401610d5d9190614928565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613a885750600090506003613b35565b8460ff16601b14158015613aa057508460ff16601c14155b15613ab15750600090506004613b35565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613b05573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613b2e57600060019250925050613b35565b9150600090505b94509492505050565b6000816004811115613b5257613b5261547e565b1415613b5b5750565b6001816004811115613b6f57613b6f61547e565b1415613bbd5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610d5d565b6002816004811115613bd157613bd161547e565b1415613c1f5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610d5d565b6003816004811115613c3357613c3361547e565b1415613c8c5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610d5d565b6004816004811115613ca057613ca061547e565b14156110675760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610d5d565b600054610100900460ff16613d205760405162461bcd60e51b8152600401610d5d90615433565b8151602092830120815191909201206101c3919091556101c455565b600054610100900460ff16613d635760405162461bcd60e51b8152600401610d5d90615433565b507f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c96101f855565b6001600160a01b03838116600090815261022a6020526040808220548584168352912054610e3d9291821691168361385b565b6000818152600183016020526040812054613e0557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610c51565b506000610c51565b60008181526001830160205260408120548015613ef6576000613e316001836151a7565b8554909150600090613e45906001906151a7565b9050818114613eaa576000866000018281548110613e6557613e656151be565b9060005260206000200154905080876000018481548110613e8857613e886151be565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613ebb57613ebb615494565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610c51565b6000915050610c51565b6001600160a01b038216613f605760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610d5d565b613f6c8260008361356a565b6001600160a01b038216600090815261015f602052604090205481811015613fe15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610d5d565b6001600160a01b038316600090815261015f60205260408120838303905561016180548492906140129084906151a7565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610e3d836000846136ae565b6000610e0e82846151a7565b8254600090819080156140bb57856140896001836151a7565b81548110614099576140996151be565b60009182526020909120015464010000000090046001600160e01b03166140be565b60005b6001600160e01b031692506140d783858763ffffffff16565b9150600081118015614115575043866140f16001846151a7565b81548110614101576141016151be565b60009182526020909120015463ffffffff16145b15614175576141238261438a565b8661412f6001846151a7565b8154811061413f5761413f6151be565b9060005260206000200160000160046101000a8154816001600160e01b0302191690836001600160e01b031602179055506141e0565b85604051806040016040528061418a43612d25565b63ffffffff16815260200161419e8561438a565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b50935093915050565b6000610e0e8284615149565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114614242576040519150601f19603f3d011682016040523d82523d6000602084013e614247565b606091505b5050905080610e3d5760405162461bcd60e51b815260206004820152601c60248201527f6e617469766520746f6b656e207472616e73666572206661696c6564000000006044820152606401610d5d565b816001600160a01b0316836001600160a01b031614156142b757612938565b6001600160a01b0383163014156142dc576139d36001600160a01b03851683836143f3565b6129386001600160a01b038516848484614456565b6142fb828261448e565b610161546001600160e01b03101561437b5760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201527f766572666c6f77696e6720766f746573000000000000000000000000000000006064820152608401610d5d565b61293861022c6141e983614070565b60006001600160e01b03821115612d8a5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b6064820152608401610d5d565b6040516001600160a01b038316602482015260448101829052610e3d90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614583565b6040516001600160a01b03808516602483015283166044820152606481018290526129389085906323b872dd60e01b9060840161441f565b6001600160a01b0382166144e45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610d5d565b6144f06000838361356a565b8061016160008282546145039190615149565b90915550506001600160a01b038216600090815261015f602052604081208054839290614531908490615149565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610ee9600083836136ae565b60006145d8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166146559092919063ffffffff16565b805190915015610e3d57808060200190518101906145f691906154aa565b610e3d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610d5d565b6060614664848460008561466c565b949350505050565b6060824710156146cd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610d5d565b6001600160a01b0385163b6147245760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610d5d565b600080866001600160a01b031685876040516147409190615417565b60006040518083038185875af1925050503d806000811461477d576040519150601f19603f3d011682016040523d82523d6000602084013e614782565b606091505b5091509150614792828286613a18565b979650505050505050565b8280546147a9906150fe565b90600052602060002090601f0160209004810192826147cb5760008555614811565b82601f106147e45782800160ff19823516178555614811565b82800160010185558215614811579182015b828111156148115782358255916020019190600101906147f6565b50612d8a929150614891565b828054614829906150fe565b90600052602060002090601f01602090048101928261484b5760008555614811565b82601f1061486457805160ff1916838001178555614811565b82800160010185558215614811579182015b82811115614811578251825591602001919060010190614876565b5b80821115612d8a5760008155600101614892565b6000602082840312156148b857600080fd5b81356001600160e01b031981168114610e0e57600080fd5b60005b838110156148eb5781810151838201526020016148d3565b838111156129385750506000910152565b600081518084526149148160208601602086016148d0565b601f01601f19169290920160200192915050565b602081526000610e0e60208301846148fc565b6001600160a01b038116811461106757600080fd5b803561495b8161493b565b919050565b6000806040838503121561497357600080fd5b823561497e8161493b565b946020939093013593505050565b6000806000606084860312156149a157600080fd5b83356149ac8161493b565b925060208401356149bc8161493b565b929592945050506040919091013590565b6000602082840312156149df57600080fd5b5035919050565b600080604083850312156149f957600080fd5b823591506020830135614a0b8161493b565b809150509250929050565b600060208284031215614a2857600080fd5b8135610e0e8161493b565b60008083601f840112614a4557600080fd5b50813567ffffffffffffffff811115614a5d57600080fd5b6020830191508360208260051b850101111561146157600080fd5b600080600080600080600060c0888a031215614a9357600080fd5b8735614a9e8161493b565b9650602088013595506040880135614ab58161493b565b945060608801359350608088013567ffffffffffffffff811115614ad857600080fd5b614ae48a828b01614a33565b989b979a5095989497959660a090950135949350505050565b60008060408385031215614b1057600080fd5b50508035926020909101359150565b60008060208385031215614b3257600080fd5b823567ffffffffffffffff80821115614b4a57600080fd5b818501915085601f830112614b5e57600080fd5b813581811115614b6d57600080fd5b866020828501011115614b7f57600080fd5b60209290920196919550909350505050565b60008060208385031215614ba457600080fd5b823567ffffffffffffffff811115614bbb57600080fd5b614bc785828601614a33565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015614c2857603f19888603018452614c168583516148fc565b94509285019290850190600101614bfa565b5092979650505050505050565b60008060008060008060a08789031215614c4e57600080fd5b863595506020870135614c608161493b565b945060408701359350606087013567ffffffffffffffff811115614c8357600080fd5b614c8f89828a01614a33565b979a9699509497949695608090950135949350505050565b801515811461106757600080fd5b60008060008060008060c08789031215614cce57600080fd5b863595506020870135614ce08161493b565b9450604087013593506060870135614cf78161493b565b92506080870135915060a0870135614d0e81614ca7565b809150509295509295509295565b803560ff8116811461495b57600080fd5b60008060008060008060c08789031215614d4657600080fd5b8635614d518161493b565b95506020870135945060408701359350614d6d60608801614d1c565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215614da257600080fd5b8735614dad8161493b565b96506020880135614dbd8161493b565b95506040880135945060608801359350614dd960808901614d1c565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215614e0857600080fd5b8235614e138161493b565b91506020830135614a0b8161493b565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614e6257614e62614e23565b604052919050565b600082601f830112614e7b57600080fd5b813567ffffffffffffffff811115614e9557614e95614e23565b614ea8601f8201601f1916602001614e39565b818152846020838601011115614ebd57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112614eeb57600080fd5b8135602067ffffffffffffffff821115614f0757614f07614e23565b8160051b614f16828201614e39565b9283528481018201928281019087851115614f3057600080fd5b83870192505b84831015614792578235614f498161493b565b82529183019190830190614f36565b600080600080600080600080610100898b031215614f7557600080fd5b614f7e89614950565b9750602089013567ffffffffffffffff80821115614f9b57600080fd5b614fa78c838d01614e6a565b985060408b0135915080821115614fbd57600080fd5b614fc98c838d01614e6a565b975060608b0135915080821115614fdf57600080fd5b614feb8c838d01614e6a565b965060808b013591508082111561500157600080fd5b5061500e8b828c01614eda565b94505061501d60a08a01614950565b925061502b60c08a01614950565b915060e089013590509295985092959890939650565b60008060006040848603121561505657600080fd5b833567ffffffffffffffff8082111561506e57600080fd5b818601915086601f83011261508257600080fd5b81358181111561509157600080fd5b8760208260081b85010111156150a657600080fd5b602092830195509350508401356150bc81614ca7565b809150509250925092565b600080604083850312156150da57600080fd5b82356150e58161493b565b9150602083013563ffffffff81168114614a0b57600080fd5b600181811c9082168061511257607f821691505b6020821081141561321657634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561515c5761515c615133565b500190565b60408152600061517460408301866148fc565b8281036020840152838152838560208301376000602085830101526020601f19601f860116820101915050949350505050565b6000828210156151b9576151b9615133565b500390565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126151eb57600080fd5b83018035915067ffffffffffffffff82111561520657600080fd5b60200191503681900382131561146157600080fd5b600060001982141561522f5761522f615133565b5060010190565b60008161524557615245615133565b506000190190565b813581556020820135600182015560408201356002820155606082013560038201556080820135600482015560a0820135600582015560c082013560068201556007810160e083013561529f8161493b565b81546001600160a01b0319166001600160a01b03919091161790555050565b6020808252818101839052600090604080840186845b87811015615348578135835284820135858401528382013584840152606080830135908401526080808301359084015260a0808301359084015260c0808301359084015260e0808301356153278161493b565b6001600160a01b0316908401526101009283019291909101906001016152d4565b5090979650505050505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161538d8160178501602088016148d0565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516153ca8160288401602088016148d0565b01602801949350505050565b60008160001904831182151516156153f0576153f0615133565b500290565b60008261541257634e487b7160e01b600052601260045260246000fd5b500490565b600082516154298184602087016148d0565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000602082840312156154bc57600080fd5b8151610e0e81614ca756fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122059f4b21b571d693c832eceeb0d558a3e4f1372477d546dba3bb1a8b18da7192164736f6c634300080c0033