Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x723fb75a05d15ff9b3e1bd3c6e0c2fc2227dc2b8dc57ad119bede59e683f5174 | Claim | (pending) | 40 hrs ago | IN | 0 ETH | (Pending) | |||
Withdraw ETH | 19727339 | 283 days ago | IN | 0 ETH | 0.00042714 | ||||
Withdraw Amount ... | 19727331 | 283 days ago | IN | 0 ETH | 0.00081857 | ||||
Claim | 19525585 | 311 days ago | IN | 0 ETH | 0.00070887 | ||||
Set Pause | 19506708 | 313 days ago | IN | 0 ETH | 0.00050042 | ||||
Claim | 19500550 | 314 days ago | IN | 0 ETH | 0.00146753 | ||||
Claim | 19500002 | 314 days ago | IN | 0 ETH | 0.00160263 | ||||
Claim | 19499810 | 314 days ago | IN | 0 ETH | 0.00163389 | ||||
Claim | 19499289 | 315 days ago | IN | 0 ETH | 0.00173785 | ||||
Claim | 19499171 | 315 days ago | IN | 0 ETH | 0.00178996 | ||||
Claim | 19494812 | 315 days ago | IN | 0 ETH | 0.00133072 | ||||
Claim | 19493435 | 315 days ago | IN | 0 ETH | 0.0017209 | ||||
Claim | 19492724 | 315 days ago | IN | 0 ETH | 0.00198545 | ||||
Claim | 19490409 | 316 days ago | IN | 0 ETH | 0.00228105 | ||||
Claim | 19489037 | 316 days ago | IN | 0 ETH | 0.00194678 | ||||
Claim | 19487826 | 316 days ago | IN | 0 ETH | 0.00156724 | ||||
Claim | 19485789 | 316 days ago | IN | 0 ETH | 0.00184419 | ||||
Claim | 19485746 | 316 days ago | IN | 0 ETH | 0.00250002 | ||||
Claim | 19485475 | 316 days ago | IN | 0 ETH | 0.00254849 | ||||
Claim | 19484694 | 317 days ago | IN | 0 ETH | 0.00334998 | ||||
Claim | 19484263 | 317 days ago | IN | 0 ETH | 0.00282057 | ||||
Claim | 19484240 | 317 days ago | IN | 0 ETH | 0.00314417 | ||||
Claim | 19483744 | 317 days ago | IN | 0 ETH | 0.00299382 | ||||
Claim | 19483706 | 317 days ago | IN | 0 ETH | 0.00282068 | ||||
Claim | 19483687 | 317 days ago | IN | 0 ETH | 0.00256133 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
19727339 | 283 days ago | 0.00656 ETH | ||||
19396656 | 329 days ago | 0.9848 ETH | ||||
19373485 | 332 days ago | 0.024 ETH | ||||
19373485 | 332 days ago | 0.024 ETH | ||||
19373485 | 332 days ago | 0.024 ETH | ||||
19373485 | 332 days ago | 0.024 ETH | ||||
19373485 | 332 days ago | 0.024 ETH | ||||
19373485 | 332 days ago | 0.024 ETH | ||||
19373485 | 332 days ago | 0.024 ETH | ||||
19373485 | 332 days ago | 0.024 ETH | ||||
19373485 | 332 days ago | 0.024 ETH | ||||
19373485 | 332 days ago | 0.024 ETH | ||||
19373485 | 332 days ago | 0.024 ETH | ||||
19373485 | 332 days ago | 0.024 ETH | ||||
19373485 | 332 days ago | 0.024 ETH | ||||
19373485 | 332 days ago | 0.024 ETH | ||||
19373485 | 332 days ago | 0.024 ETH | ||||
19373485 | 332 days ago | 0.024 ETH | ||||
19373485 | 332 days ago | 0.024 ETH | ||||
19373485 | 332 days ago | 0.024 ETH | ||||
19373485 | 332 days ago | 0.024 ETH | ||||
19373485 | 332 days ago | 0.024 ETH | ||||
19373485 | 332 days ago | 0.024 ETH | ||||
19373485 | 332 days ago | 0.024 ETH | ||||
19373485 | 332 days ago | 0.024 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
TokenDistribution
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-03-05 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.20; /** * @dev These functions deal with verification of Merkle Tree proofs. * * The tree and the proofs can be generated using our * https://github.com/OpenZeppelin/merkle-tree[JavaScript library]. * You will find a quickstart guide in the readme. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the Merkle tree could be reinterpreted as a leaf value. * OpenZeppelin's JavaScript library generates Merkle trees that are safe * against this attack out of the box. */ library MerkleProof { /** *@dev The multiproof provided is not valid. */ error MerkleProofInvalidMultiproof(); /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Calldata version of {verify} */ function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) { return processProofCalldata(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Calldata version of {processProof} */ function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}. * * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details. */ function multiProofVerify( bytes32[] memory proof, bool[] memory proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProof(proof, proofFlags, leaves) == root; } /** * @dev Calldata version of {multiProofVerify} * * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details. */ function multiProofVerifyCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProofCalldata(proof, proofFlags, leaves) == root; } /** * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false * respectively. * * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer). */ function processMultiProof( bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the Merkle tree. uint256 leavesLen = leaves.length; uint256 proofLen = proof.length; uint256 totalHashes = proofFlags.length; // Check proof validity. if (leavesLen + proofLen != totalHashes + 1) { revert MerkleProofInvalidMultiproof(); } // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { if (proofPos != proofLen) { revert MerkleProofInvalidMultiproof(); } unchecked { return hashes[totalHashes - 1]; } } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } /** * @dev Calldata version of {processMultiProof}. * * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details. */ function processMultiProofCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the Merkle tree. uint256 leavesLen = leaves.length; uint256 proofLen = proof.length; uint256 totalHashes = proofFlags.length; // Check proof validity. if (leavesLen + proofLen != totalHashes + 1) { revert MerkleProofInvalidMultiproof(); } // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { if (proofPos != proofLen) { revert MerkleProofInvalidMultiproof(); } unchecked { return hashes[totalHashes - 1]; } } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } /** * @dev Sorts the pair (a, b) and hashes the result. */ function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) { return a < b ? _efficientHash(a, b) : _efficientHash(b, a); } /** * @dev Implementation of keccak256(abi.encode(a, b)) that doesn't allocate or expand memory. */ function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { /// @solidity memory-safe-assembly assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); } // File: @openzeppelin/contracts/interfaces/IERC20.sol // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol) pragma solidity ^0.8.20; // File: contracts/TokenDistribution.sol pragma solidity ^0.8.24; contract TokenDistribution is Ownable{ using SafeMath for uint256; mapping(address => mapping(uint256 => uint256)) private _claimedAmountsByUser; bool private _pause = true; bool private _whitelistStatus = false; address private _tokenAddress; uint8 decimals = 18; uint256 private _maxAllowancePerWallet; uint256 private _currentPhase = 0; uint256 private _price = 0 ether; bytes32 private root; IERC20 token; //constructor(address initialOwner) constructor() Ownable(msg.sender){} // ------------- GETTERS ------------- function getTokenAddress() public view returns (address){ return _tokenAddress; } function getClaimedAmountByUser(address user) public view returns (uint256){ return _claimedAmountsByUser[user][_currentPhase]; } function getDecimals() public view returns (uint8){ return decimals; } function getMaxAllowancePerWallet() public view returns (uint256){ return _maxAllowancePerWallet; } function getCurrentPhase() public view returns (uint256) { return _currentPhase; } function getPrice() public view returns (uint256){ return _price; } function getWhitelistStatus() public view returns (bool){ return _whitelistStatus; } function getPause() public view returns (bool){ return _pause; } function getPhaseInfo() public view returns (uint256 maxPerWallet, uint256 price, uint256 phaseNumber, bool whitelistStatus) { return (maxPerWallet = _maxAllowancePerWallet, price = _price, phaseNumber = _currentPhase, whitelistStatus = _whitelistStatus); } // ------------- SETTERS ------------- function setPhaseInfo(uint256 newPhase, uint256 newMaxPerWallet, uint256 newPrice, bool newWhitelistStatus) public onlyOwner { require(newPhase > _currentPhase , "The new phase need to be greater then current phase"); _currentPhase = newPhase; _maxAllowancePerWallet = newMaxPerWallet; _price = newPrice; _whitelistStatus = newWhitelistStatus; } function setPhase(uint256 newPhase) public onlyOwner{ require(newPhase > _currentPhase , "The new phase need to be greater then current phase"); _currentPhase = newPhase; } function setPause(bool newStatus) public onlyOwner{ _pause = newStatus; } function setWhitelistStatus(bool newStatus) public onlyOwner{ _whitelistStatus = newStatus; } function setToken(address newTokenAddress) public onlyOwner{ _tokenAddress = newTokenAddress; token = IERC20(_tokenAddress); } function setDecimals(uint8 newDecimals) public onlyOwner{ decimals = newDecimals; } function setMaxAllowancePerWallet(uint256 newMaxAllowancePerWallet) public onlyOwner{ _maxAllowancePerWallet = newMaxAllowancePerWallet; } function setPrice(uint256 newPrice) public onlyOwner{ _price = newPrice; } function setRoot(bytes32 _newRoot) external onlyOwner { root = _newRoot; } function isValid(bytes32[] calldata _merkleProof) internal view returns (bool){ bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(_merkleProof, root, leaf), "Address is not whitelisted!"); return true; } function depositTokens(uint256 amount) external onlyOwner { require(amount > 0, "Deposit amount must be greater than 0"); require(token.transferFrom( msg.sender,address(this), amount.mul(10**decimals)), "Transfer failed"); } function claim(uint256 amount, bytes32[] calldata proofs) public payable { require(_pause == false , "Claiming not allowed at the moment"); if(_whitelistStatus) { require(isValid(proofs), "You're not whitelisted"); } require(_claimedAmountsByUser[msg.sender][_currentPhase].add(amount) <= _maxAllowancePerWallet,"Claim amount exceeds maximum allowance per wallet"); require(msg.value == (amount * _price), "Incorrect value"); require(token.transfer(msg.sender, amount.mul(10**decimals)),"Claiming tokens failed"); _claimedAmountsByUser[msg.sender][_currentPhase] = _claimedAmountsByUser[msg.sender][_currentPhase].add(amount); } function withdrawTokens() external onlyOwner { uint256 remainingBalance = token.balanceOf(address(this)); require(remainingBalance > 0, "No remaining tokens to withdraw"); token.transfer(owner(), remainingBalance); } function withdrawAmountTokens(uint256 amount) external onlyOwner { require(amount > 0, "No remaining tokens to withdraw"); token.transfer(owner(), amount.mul(10**decimals)); } function withdrawETH(address _address) external onlyOwner { uint256 balance = address(this).balance; payable(_address).transfer(balance); } function airDropBatch(address[] memory recipients, uint256[] memory amounts) external onlyOwner { require(recipients.length == amounts.length,"Mismatched array lengths"); for (uint256 i = 0; i < recipients.length; i++) { token.transfer(recipients[i], amounts[i].mul(10**decimals)); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airDropBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"proofs","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getClaimedAmountByUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentPhase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxAllowancePerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPhaseInfo","outputs":[{"internalType":"uint256","name":"maxPerWallet","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"phaseNumber","type":"uint256"},{"internalType":"bool","name":"whitelistStatus","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWhitelistStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newDecimals","type":"uint8"}],"name":"setDecimals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxAllowancePerWallet","type":"uint256"}],"name":"setMaxAllowancePerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPhase","type":"uint256"}],"name":"setPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPhase","type":"uint256"},{"internalType":"uint256","name":"newMaxPerWallet","type":"uint256"},{"internalType":"uint256","name":"newPrice","type":"uint256"},{"internalType":"bool","name":"newWhitelistStatus","type":"bool"}],"name":"setPhaseInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_newRoot","type":"bytes32"}],"name":"setRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTokenAddress","type":"address"}],"name":"setToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"setWhitelistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawAmountTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526002805461ffff60ff60b01b0119167612000000000000000000000000000000000000000000011790555f6004819055600555348015610042575f80fd5b50338061006857604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61007181610077565b506100c6565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611560806100d35f395ff3fe608060405260043610610195575f3560e01c80638da5cb5b116100e7578063b4f78ef411610087578063dd49756e11610062578063dd49756e1461048b578063e113be78146104aa578063f0141d84146104c9578063f2fde38b146104f4575f80fd5b8063b4f78ef41461042e578063bedb86fb1461044d578063dab5f3401461046c575f80fd5b806398c1c33d116100c257806398c1c33d1461038357806398d5fdca146103c4578063a3a40ea5146103d8578063a6f8e722146103ec575f80fd5b80638da5cb5b146103295780638fede9991461034557806391b7f5ed14610364575f80fd5b8063456b47df11610152578063715018a61161012d578063715018a6146102c65780637a0767d0146102da5780637a1395aa146102f65780638d8f2adb14610315575f80fd5b8063456b47df146102695780634a99911814610288578063690d8320146102a7575f80fd5b806310fe9ae814610199578063144fa6d7146101d55780632ba6c30a146101f65780632cc82655146102145780632f52ebb7146102335780633e3ca9d314610246575b5f80fd5b3480156101a4575f80fd5b506002546201000090046001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101e0575f80fd5b506101f46101ef3660046110a9565b610513565b005b348015610201575f80fd5b506003545b6040519081526020016101cc565b34801561021f575f80fd5b506101f461022e3660046110c2565b610563565b6101f46102413660046110d9565b61059a565b348015610251575f80fd5b5060025460ff165b60405190151581526020016101cc565b348015610274575f80fd5b506101f46102833660046110c2565b610867565b348015610293575f80fd5b506101f46102a236600461115e565b610874565b3480156102b2575f80fd5b506101f46102c13660046110a9565b610896565b3480156102d1575f80fd5b506101f46108d8565b3480156102e5575f80fd5b50600254610100900460ff16610259565b348015610301575f80fd5b506101f4610310366004611179565b6108eb565b348015610320575f80fd5b506101f4610913565b348015610334575f80fd5b505f546001600160a01b03166101b8565b348015610350575f80fd5b506101f461035f36600461126d565b610a6b565b34801561036f575f80fd5b506101f461037e3660046110c2565b610bbc565b34801561038e575f80fd5b5061020661039d3660046110a9565b6001600160a01b03165f908152600160209081526040808320600454845290915290205490565b3480156103cf575f80fd5b50600554610206565b3480156103e3575f80fd5b50600454610206565b3480156103f7575f80fd5b50600354600554600454600254610100900460ff1660408051948552602085019390935291830152151560608201526080016101cc565b348015610439575f80fd5b506101f46104483660046110c2565b610bc9565b348015610458575f80fd5b506101f461046736600461115e565b610c96565b348015610477575f80fd5b506101f46104863660046110c2565b610cb1565b348015610496575f80fd5b506101f46104a53660046110c2565b610cbe565b3480156104b5575f80fd5b506101f46104c4366004611327565b610e15565b3480156104d4575f80fd5b50600254600160b01b900460ff1660405160ff90911681526020016101cc565b3480156104ff575f80fd5b506101f461050e3660046110a9565b610e67565b61051b610ea1565b6002805462010000600160b01b031916620100006001600160a01b039384168102919091179182905560078054919092049092166001600160a01b0319909216919091179055565b61056b610ea1565b60045481116105955760405162461bcd60e51b815260040161058c90611365565b60405180910390fd5b600455565b60025460ff16156105f85760405162461bcd60e51b815260206004820152602260248201527f436c61696d696e67206e6f7420616c6c6f77656420617420746865206d6f6d656044820152611b9d60f21b606482015260840161058c565b600254610100900460ff1615610657576106128282610ecd565b6106575760405162461bcd60e51b8152602060048201526016602482015275165bdd49dc99481b9bdd081dda1a5d195b1a5cdd195960521b604482015260640161058c565b600354335f90815260016020908152604080832060045484529091529020546106809085610f9f565b11156106e85760405162461bcd60e51b815260206004820152603160248201527f436c61696d20616d6f756e742065786365656473206d6178696d756d20616c6c6044820152701bddd85b98d9481c195c881dd85b1b195d607a1b606482015260840161058c565b6005546106f590846113cc565b34146107355760405162461bcd60e51b815260206004820152600f60248201526e496e636f72726563742076616c756560881b604482015260640161058c565b6007546002546001600160a01b039091169063a9059cbb90339061076f9061076890600160b01b900460ff16600a6114c3565b8790610fb1565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156107b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107db91906114d1565b6108205760405162461bcd60e51b815260206004820152601660248201527510db185a5b5a5b99c81d1bdad95b9cc819985a5b195960521b604482015260640161058c565b335f90815260016020908152604080832060045484529091529020546108469084610f9f565b335f9081526001602090815260408083206004548452909152902055505050565b61086f610ea1565b600355565b61087c610ea1565b600280549115156101000261ff0019909216919091179055565b61089e610ea1565b60405147906001600160a01b0383169082156108fc029083905f818181858888f193505050501580156108d3573d5f803e3d5ffd5b505050565b6108e0610ea1565b6108e95f610fbc565b565b6108f3610ea1565b6002805460ff909216600160b01b0260ff60b01b19909216919091179055565b61091b610ea1565b6007546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610961573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098591906114ec565b90505f81116109d65760405162461bcd60e51b815260206004820152601f60248201527f4e6f2072656d61696e696e6720746f6b656e7320746f20776974686472617700604482015260640161058c565b6007546001600160a01b031663a9059cbb6109f85f546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044015b6020604051808303815f875af1158015610a43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6791906114d1565b5050565b610a73610ea1565b8051825114610ac45760405162461bcd60e51b815260206004820152601860248201527f4d69736d617463686564206172726179206c656e677468730000000000000000604482015260640161058c565b5f5b82518110156108d35760075483516001600160a01b039091169063a9059cbb90859084908110610af857610af8611503565b6020026020010151610b47600260169054906101000a900460ff16600a610b1f91906114c3565b868681518110610b3157610b31611503565b6020026020010151610fb190919063ffffffff16565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610b8f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb391906114d1565b50600101610ac6565b610bc4610ea1565b600555565b610bd1610ea1565b5f8111610c205760405162461bcd60e51b815260206004820152601f60248201527f4e6f2072656d61696e696e6720746f6b656e7320746f20776974686472617700604482015260640161058c565b6007546001600160a01b031663a9059cbb610c425f546001600160a01b031690565b600254610c6590610c5e90600160b01b900460ff16600a6114c3565b8590610fb1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401610a27565b610c9e610ea1565b6002805460ff1916911515919091179055565b610cb9610ea1565b600655565b610cc6610ea1565b5f8111610d235760405162461bcd60e51b815260206004820152602560248201527f4465706f73697420616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b606482015260840161058c565b6007546002546001600160a01b03909116906323b872dd9033903090610d5f90610d5890600160b01b900460ff16600a6114c3565b8690610fb1565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303815f875af1158015610db0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd491906114d1565b610e125760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161058c565b50565b610e1d610ea1565b6004548411610e3e5760405162461bcd60e51b815260040161058c90611365565b600493909355600391909155600555600280549115156101000261ff0019909216919091179055565b610e6f610ea1565b6001600160a01b038116610e9857604051631e4fbdf760e01b81525f600482015260240161058c565b610e1281610fbc565b5f546001600160a01b031633146108e95760405163118cdaa760e01b815233600482015260240161058c565b6040516bffffffffffffffffffffffff193360601b1660208201525f908190603401604051602081830303815290604052805190602001209050610f478484808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050600654915084905061100b565b610f935760405162461bcd60e51b815260206004820152601b60248201527f41646472657373206973206e6f742077686974656c6973746564210000000000604482015260640161058c565b60019150505b92915050565b5f610faa8284611517565b9392505050565b5f610faa82846113cc565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f826110178584611020565b14949350505050565b5f81815b845181101561105a576110508286838151811061104357611043611503565b6020026020010151611062565b9150600101611024565b509392505050565b5f81831061107c575f828152602084905260409020610faa565b5f838152602083905260409020610faa565b80356001600160a01b03811681146110a4575f80fd5b919050565b5f602082840312156110b9575f80fd5b610faa8261108e565b5f602082840312156110d2575f80fd5b5035919050565b5f805f604084860312156110eb575f80fd5b83359250602084013567ffffffffffffffff80821115611109575f80fd5b818601915086601f83011261111c575f80fd5b81358181111561112a575f80fd5b8760208260051b850101111561113e575f80fd5b6020830194508093505050509250925092565b8015158114610e12575f80fd5b5f6020828403121561116e575f80fd5b8135610faa81611151565b5f60208284031215611189575f80fd5b813560ff81168114610faa575f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111d6576111d6611199565b604052919050565b5f67ffffffffffffffff8211156111f7576111f7611199565b5060051b60200190565b5f82601f830112611210575f80fd5b81356020611225611220836111de565b6111ad565b8083825260208201915060208460051b870101935086841115611246575f80fd5b602086015b84811015611262578035835291830191830161124b565b509695505050505050565b5f806040838503121561127e575f80fd5b823567ffffffffffffffff80821115611295575f80fd5b818501915085601f8301126112a8575f80fd5b813560206112b8611220836111de565b82815260059290921b840181019181810190898411156112d6575f80fd5b948201945b838610156112fb576112ec8661108e565b825294820194908201906112db565b96505086013592505080821115611310575f80fd5b5061131d85828601611201565b9150509250929050565b5f805f806080858703121561133a575f80fd5b843593506020850135925060408501359150606085013561135a81611151565b939692955090935050565b60208082526033908201527f546865206e6577207068617365206e65656420746f2062652067726561746572604082015272207468656e2063757272656e7420706861736560681b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610f9957610f996113b8565b600181815b8085111561141d57815f1904821115611403576114036113b8565b8085161561141057918102915b93841c93908002906113e8565b509250929050565b5f8261143357506001610f99565b8161143f57505f610f99565b8160018114611455576002811461145f5761147b565b6001915050610f99565b60ff841115611470576114706113b8565b50506001821b610f99565b5060208310610133831016604e8410600b841016171561149e575081810a610f99565b6114a883836113e3565b805f19048211156114bb576114bb6113b8565b029392505050565b5f610faa60ff841683611425565b5f602082840312156114e1575f80fd5b8151610faa81611151565b5f602082840312156114fc575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610f9957610f996113b856fea26469706673582212209996bfc162b759ae48843e8e146ceecb0267dfdbd361308049055bf3b923219964736f6c63430008180033
Deployed Bytecode
0x608060405260043610610195575f3560e01c80638da5cb5b116100e7578063b4f78ef411610087578063dd49756e11610062578063dd49756e1461048b578063e113be78146104aa578063f0141d84146104c9578063f2fde38b146104f4575f80fd5b8063b4f78ef41461042e578063bedb86fb1461044d578063dab5f3401461046c575f80fd5b806398c1c33d116100c257806398c1c33d1461038357806398d5fdca146103c4578063a3a40ea5146103d8578063a6f8e722146103ec575f80fd5b80638da5cb5b146103295780638fede9991461034557806391b7f5ed14610364575f80fd5b8063456b47df11610152578063715018a61161012d578063715018a6146102c65780637a0767d0146102da5780637a1395aa146102f65780638d8f2adb14610315575f80fd5b8063456b47df146102695780634a99911814610288578063690d8320146102a7575f80fd5b806310fe9ae814610199578063144fa6d7146101d55780632ba6c30a146101f65780632cc82655146102145780632f52ebb7146102335780633e3ca9d314610246575b5f80fd5b3480156101a4575f80fd5b506002546201000090046001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101e0575f80fd5b506101f46101ef3660046110a9565b610513565b005b348015610201575f80fd5b506003545b6040519081526020016101cc565b34801561021f575f80fd5b506101f461022e3660046110c2565b610563565b6101f46102413660046110d9565b61059a565b348015610251575f80fd5b5060025460ff165b60405190151581526020016101cc565b348015610274575f80fd5b506101f46102833660046110c2565b610867565b348015610293575f80fd5b506101f46102a236600461115e565b610874565b3480156102b2575f80fd5b506101f46102c13660046110a9565b610896565b3480156102d1575f80fd5b506101f46108d8565b3480156102e5575f80fd5b50600254610100900460ff16610259565b348015610301575f80fd5b506101f4610310366004611179565b6108eb565b348015610320575f80fd5b506101f4610913565b348015610334575f80fd5b505f546001600160a01b03166101b8565b348015610350575f80fd5b506101f461035f36600461126d565b610a6b565b34801561036f575f80fd5b506101f461037e3660046110c2565b610bbc565b34801561038e575f80fd5b5061020661039d3660046110a9565b6001600160a01b03165f908152600160209081526040808320600454845290915290205490565b3480156103cf575f80fd5b50600554610206565b3480156103e3575f80fd5b50600454610206565b3480156103f7575f80fd5b50600354600554600454600254610100900460ff1660408051948552602085019390935291830152151560608201526080016101cc565b348015610439575f80fd5b506101f46104483660046110c2565b610bc9565b348015610458575f80fd5b506101f461046736600461115e565b610c96565b348015610477575f80fd5b506101f46104863660046110c2565b610cb1565b348015610496575f80fd5b506101f46104a53660046110c2565b610cbe565b3480156104b5575f80fd5b506101f46104c4366004611327565b610e15565b3480156104d4575f80fd5b50600254600160b01b900460ff1660405160ff90911681526020016101cc565b3480156104ff575f80fd5b506101f461050e3660046110a9565b610e67565b61051b610ea1565b6002805462010000600160b01b031916620100006001600160a01b039384168102919091179182905560078054919092049092166001600160a01b0319909216919091179055565b61056b610ea1565b60045481116105955760405162461bcd60e51b815260040161058c90611365565b60405180910390fd5b600455565b60025460ff16156105f85760405162461bcd60e51b815260206004820152602260248201527f436c61696d696e67206e6f7420616c6c6f77656420617420746865206d6f6d656044820152611b9d60f21b606482015260840161058c565b600254610100900460ff1615610657576106128282610ecd565b6106575760405162461bcd60e51b8152602060048201526016602482015275165bdd49dc99481b9bdd081dda1a5d195b1a5cdd195960521b604482015260640161058c565b600354335f90815260016020908152604080832060045484529091529020546106809085610f9f565b11156106e85760405162461bcd60e51b815260206004820152603160248201527f436c61696d20616d6f756e742065786365656473206d6178696d756d20616c6c6044820152701bddd85b98d9481c195c881dd85b1b195d607a1b606482015260840161058c565b6005546106f590846113cc565b34146107355760405162461bcd60e51b815260206004820152600f60248201526e496e636f72726563742076616c756560881b604482015260640161058c565b6007546002546001600160a01b039091169063a9059cbb90339061076f9061076890600160b01b900460ff16600a6114c3565b8790610fb1565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156107b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107db91906114d1565b6108205760405162461bcd60e51b815260206004820152601660248201527510db185a5b5a5b99c81d1bdad95b9cc819985a5b195960521b604482015260640161058c565b335f90815260016020908152604080832060045484529091529020546108469084610f9f565b335f9081526001602090815260408083206004548452909152902055505050565b61086f610ea1565b600355565b61087c610ea1565b600280549115156101000261ff0019909216919091179055565b61089e610ea1565b60405147906001600160a01b0383169082156108fc029083905f818181858888f193505050501580156108d3573d5f803e3d5ffd5b505050565b6108e0610ea1565b6108e95f610fbc565b565b6108f3610ea1565b6002805460ff909216600160b01b0260ff60b01b19909216919091179055565b61091b610ea1565b6007546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610961573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098591906114ec565b90505f81116109d65760405162461bcd60e51b815260206004820152601f60248201527f4e6f2072656d61696e696e6720746f6b656e7320746f20776974686472617700604482015260640161058c565b6007546001600160a01b031663a9059cbb6109f85f546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044015b6020604051808303815f875af1158015610a43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6791906114d1565b5050565b610a73610ea1565b8051825114610ac45760405162461bcd60e51b815260206004820152601860248201527f4d69736d617463686564206172726179206c656e677468730000000000000000604482015260640161058c565b5f5b82518110156108d35760075483516001600160a01b039091169063a9059cbb90859084908110610af857610af8611503565b6020026020010151610b47600260169054906101000a900460ff16600a610b1f91906114c3565b868681518110610b3157610b31611503565b6020026020010151610fb190919063ffffffff16565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610b8f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb391906114d1565b50600101610ac6565b610bc4610ea1565b600555565b610bd1610ea1565b5f8111610c205760405162461bcd60e51b815260206004820152601f60248201527f4e6f2072656d61696e696e6720746f6b656e7320746f20776974686472617700604482015260640161058c565b6007546001600160a01b031663a9059cbb610c425f546001600160a01b031690565b600254610c6590610c5e90600160b01b900460ff16600a6114c3565b8590610fb1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401610a27565b610c9e610ea1565b6002805460ff1916911515919091179055565b610cb9610ea1565b600655565b610cc6610ea1565b5f8111610d235760405162461bcd60e51b815260206004820152602560248201527f4465706f73697420616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b606482015260840161058c565b6007546002546001600160a01b03909116906323b872dd9033903090610d5f90610d5890600160b01b900460ff16600a6114c3565b8690610fb1565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303815f875af1158015610db0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd491906114d1565b610e125760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161058c565b50565b610e1d610ea1565b6004548411610e3e5760405162461bcd60e51b815260040161058c90611365565b600493909355600391909155600555600280549115156101000261ff0019909216919091179055565b610e6f610ea1565b6001600160a01b038116610e9857604051631e4fbdf760e01b81525f600482015260240161058c565b610e1281610fbc565b5f546001600160a01b031633146108e95760405163118cdaa760e01b815233600482015260240161058c565b6040516bffffffffffffffffffffffff193360601b1660208201525f908190603401604051602081830303815290604052805190602001209050610f478484808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050600654915084905061100b565b610f935760405162461bcd60e51b815260206004820152601b60248201527f41646472657373206973206e6f742077686974656c6973746564210000000000604482015260640161058c565b60019150505b92915050565b5f610faa8284611517565b9392505050565b5f610faa82846113cc565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f826110178584611020565b14949350505050565b5f81815b845181101561105a576110508286838151811061104357611043611503565b6020026020010151611062565b9150600101611024565b509392505050565b5f81831061107c575f828152602084905260409020610faa565b5f838152602083905260409020610faa565b80356001600160a01b03811681146110a4575f80fd5b919050565b5f602082840312156110b9575f80fd5b610faa8261108e565b5f602082840312156110d2575f80fd5b5035919050565b5f805f604084860312156110eb575f80fd5b83359250602084013567ffffffffffffffff80821115611109575f80fd5b818601915086601f83011261111c575f80fd5b81358181111561112a575f80fd5b8760208260051b850101111561113e575f80fd5b6020830194508093505050509250925092565b8015158114610e12575f80fd5b5f6020828403121561116e575f80fd5b8135610faa81611151565b5f60208284031215611189575f80fd5b813560ff81168114610faa575f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111d6576111d6611199565b604052919050565b5f67ffffffffffffffff8211156111f7576111f7611199565b5060051b60200190565b5f82601f830112611210575f80fd5b81356020611225611220836111de565b6111ad565b8083825260208201915060208460051b870101935086841115611246575f80fd5b602086015b84811015611262578035835291830191830161124b565b509695505050505050565b5f806040838503121561127e575f80fd5b823567ffffffffffffffff80821115611295575f80fd5b818501915085601f8301126112a8575f80fd5b813560206112b8611220836111de565b82815260059290921b840181019181810190898411156112d6575f80fd5b948201945b838610156112fb576112ec8661108e565b825294820194908201906112db565b96505086013592505080821115611310575f80fd5b5061131d85828601611201565b9150509250929050565b5f805f806080858703121561133a575f80fd5b843593506020850135925060408501359150606085013561135a81611151565b939692955090935050565b60208082526033908201527f546865206e6577207068617365206e65656420746f2062652067726561746572604082015272207468656e2063757272656e7420706861736560681b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610f9957610f996113b8565b600181815b8085111561141d57815f1904821115611403576114036113b8565b8085161561141057918102915b93841c93908002906113e8565b509250929050565b5f8261143357506001610f99565b8161143f57505f610f99565b8160018114611455576002811461145f5761147b565b6001915050610f99565b60ff841115611470576114706113b8565b50506001821b610f99565b5060208310610133831016604e8410600b841016171561149e575081810a610f99565b6114a883836113e3565b805f19048211156114bb576114bb6113b8565b029392505050565b5f610faa60ff841683611425565b5f602082840312156114e1575f80fd5b8151610faa81611151565b5f602082840312156114fc575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610f9957610f996113b856fea26469706673582212209996bfc162b759ae48843e8e146ceecb0267dfdbd361308049055bf3b923219964736f6c63430008180033
Deployed Bytecode Sourcemap
24338:5487:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24952:95;;;;;;;;;;-1:-1:-1;25026:13:0;;;;;-1:-1:-1;;;;;25026:13:0;24952:95;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;24952:95:0;;;;;;;;26953:149;;;;;;;;;;-1:-1:-1;26953:149:0;;;;;:::i;:::-;;:::i;:::-;;25298:113;;;;;;;;;;-1:-1:-1;25381:22:0;;25298:113;;;737:25:1;;;725:2;710:18;25298:113:0;591:177:1;26540:195:0;;;;;;;;;;-1:-1:-1;26540:195:0;;;;;:::i;:::-;;:::i;28098:730::-;;;;;;:::i;:::-;;:::i;25718:78::-;;;;;;;;;;-1:-1:-1;25782:6:0;;;;25718:78;;;1811:14:1;;1804:22;1786:41;;1774:2;1759:18;25718:78:0;1646:187:1;27215:152:0;;;;;;;;;;-1:-1:-1;27215:152:0;;;;;:::i;:::-;;:::i;26838:107::-;;;;;;;;;;-1:-1:-1;26838:107:0;;;;;:::i;:::-;;:::i;29297:162::-;;;;;;;;;;-1:-1:-1;29297:162:0;;;;;:::i;:::-;;:::i;20367:103::-;;;;;;;;;;;;;:::i;25612:98::-;;;;;;;;;;-1:-1:-1;25686:16:0;;;;;;;25612:98;;27110:97;;;;;;;;;;-1:-1:-1;27110:97:0;;;;;:::i;:::-;;:::i;28835:248::-;;;;;;;;;;;;;:::i;19692:87::-;;;;;;;;;;-1:-1:-1;19738:7:0;19765:6;-1:-1:-1;;;;;19765:6:0;19692:87;;29467:355;;;;;;;;;;-1:-1:-1;29467:355:0;;;;;:::i;:::-;;:::i;27375:88::-;;;;;;;;;;-1:-1:-1;27375:88:0;;;;;:::i;:::-;;:::i;25055:143::-;;;;;;;;;;-1:-1:-1;25055:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;25148:27:0;25122:7;25148:27;;;:21;:27;;;;;;;;25176:13;;25148:42;;;;;;;;;25055:143;25523:81;;;;;;;;;;-1:-1:-1;25590:6:0;;25523:81;;25419:96;;;;;;;;;;-1:-1:-1;25494:13:0;;25419:96;;25804:271;;;;;;;;;;-1:-1:-1;25963:22:0;;25995:6;;26017:13;;26050:16;;;;;;;25804:271;;;5130:25:1;;;5186:2;5171:18;;5164:34;;;;5214:18;;;5207:34;5284:14;5277:22;5272:2;5257:18;;5250:50;5117:3;5102:19;25804:271:0;4905:401:1;29091:198:0;;;;;;;;;;-1:-1:-1;29091:198:0;;;;;:::i;:::-;;:::i;26743:87::-;;;;;;;;;;-1:-1:-1;26743:87:0;;;;;:::i;:::-;;:::i;27471:88::-;;;;;;;;;;-1:-1:-1;27471:88:0;;;;;:::i;:::-;;:::i;27843:247::-;;;;;;;;;;-1:-1:-1;27843:247:0;;;;;:::i;:::-;;:::i;26137:395::-;;;;;;;;;;-1:-1:-1;26137:395:0;;;;;:::i;:::-;;:::i;25206:84::-;;;;;;;;;;-1:-1:-1;25274:8:0;;-1:-1:-1;;;25274:8:0;;;;25206:84;;6119:4:1;6107:17;;;6089:36;;6077:2;6062:18;25206:84:0;5947:184:1;20625:220:0;;;;;;;;;;-1:-1:-1;20625:220:0;;;;;:::i;:::-;;:::i;26953:149::-;19578:13;:11;:13::i;:::-;27023::::1;:31:::0;;-1:-1:-1;;;;;;27023:31:0::1;::::0;-1:-1:-1;;;;;27023:31:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;27065:5:::1;:29:::0;;27080:13;;;::::1;::::0;;::::1;-1:-1:-1::0;;;;;;27065:29:0;;::::1;::::0;;;::::1;::::0;;26953:149::o;26540:195::-;19578:13;:11;:13::i;:::-;26622::::1;;26611:8;:24;26603:89;;;;-1:-1:-1::0;;;26603:89:0::1;;;;;;;:::i;:::-;;;;;;;;;26703:13;:24:::0;26540:195::o;28098:730::-;28190:6;;;;:15;28182:63;;;;-1:-1:-1;;;28182:63:0;;6758:2:1;28182:63:0;;;6740:21:1;6797:2;6777:18;;;6770:30;6836:34;6816:18;;;6809:62;-1:-1:-1;;;6887:18:1;;;6880:32;6929:19;;28182:63:0;6556:398:1;28182:63:0;28259:16;;;;;;;28256:119;;;28317:15;28325:6;;28317:7;:15::i;:::-;28309:50;;;;-1:-1:-1;;;28309:50:0;;7161:2:1;28309:50:0;;;7143:21:1;7200:2;7180:18;;;7173:30;-1:-1:-1;;;7219:18:1;;;7212:52;7281:18;;28309:50:0;6959:346:1;28309:50:0;28457:22;;28415:10;28393:33;;;;:21;:33;;;;;;;;28427:13;;28393:48;;;;;;;;:60;;28446:6;28393:52;:60::i;:::-;:86;;28385:147;;;;-1:-1:-1;;;28385:147:0;;7512:2:1;28385:147:0;;;7494:21:1;7551:2;7531:18;;;7524:30;7590:34;7570:18;;;7563:62;-1:-1:-1;;;7641:18:1;;;7634:47;7698:19;;28385:147:0;7310:413:1;28385:147:0;28574:6;;28565:15;;:6;:15;:::i;:::-;28551:9;:30;28543:58;;;;-1:-1:-1;;;28543:58:0;;8235:2:1;28543:58:0;;;8217:21:1;8274:2;8254:18;;;8247:30;-1:-1:-1;;;8293:18:1;;;8286:45;8348:18;;28543:58:0;8033:339:1;28543:58:0;28620:5;;28662:8;;-1:-1:-1;;;;;28620:5:0;;;;:14;;28635:10;;28647:24;;28658:12;;-1:-1:-1;;;28662:8:0;;;;28658:2;:12;:::i;:::-;28647:6;;:10;:24::i;:::-;28620:52;;-1:-1:-1;;;;;;28620:52:0;;;;;;;-1:-1:-1;;;;;9946:32:1;;;28620:52:0;;;9928:51:1;9995:18;;;9988:34;9901:18;;28620:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28612:86;;;;-1:-1:-1;;;28612:86:0;;10485:2:1;28612:86:0;;;10467:21:1;10524:2;10504:18;;;10497:30;-1:-1:-1;;;10543:18:1;;;10536:52;10605:18;;28612:86:0;10283:346:1;28612:86:0;28782:10;28760:33;;;;:21;:33;;;;;;;;28794:13;;28760:48;;;;;;;;:60;;28813:6;28760:52;:60::i;:::-;28731:10;28709:33;;;;:21;:33;;;;;;;;28743:13;;28709:48;;;;;;;:111;-1:-1:-1;;;28098:730:0:o;27215:152::-;19578:13;:11;:13::i;:::-;27310:22:::1;:49:::0;27215:152::o;26838:107::-;19578:13;:11;:13::i;:::-;26909:16:::1;:28:::0;;;::::1;;;;-1:-1:-1::0;;26909:28:0;;::::1;::::0;;;::::1;::::0;;26838:107::o;29297:162::-;19578:13;:11;:13::i;:::-;29416:35:::1;::::0;29384:21:::1;::::0;-1:-1:-1;;;;;29416:26:0;::::1;::::0;:35;::::1;;;::::0;29384:21;;29366:15:::1;29416:35:::0;29366:15;29416:35;29384:21;29416:26;:35;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;29355:104;29297:162:::0;:::o;20367:103::-;19578:13;:11;:13::i;:::-;20432:30:::1;20459:1;20432:18;:30::i;:::-;20367:103::o:0;27110:97::-;19578:13;:11;:13::i;:::-;27177:8:::1;:22:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;27177:22:0::1;-1:-1:-1::0;;;;27177:22:0;;::::1;::::0;;;::::1;::::0;;27110:97::o;28835:248::-;19578:13;:11;:13::i;:::-;28918:5:::1;::::0;:30:::1;::::0;-1:-1:-1;;;28918:30:0;;28942:4:::1;28918:30;::::0;::::1;160:51:1::0;28891:24:0::1;::::0;-1:-1:-1;;;;;28918:5:0::1;::::0;:15:::1;::::0;133:18:1;;28918:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28891:57;;28986:1;28967:16;:20;28959:64;;;::::0;-1:-1:-1;;;28959:64:0;;11025:2:1;28959:64:0::1;::::0;::::1;11007:21:1::0;11064:2;11044:18;;;11037:30;11103:33;11083:18;;;11076:61;11154:18;;28959:64:0::1;10823:355:1::0;28959:64:0::1;29034:5;::::0;-1:-1:-1;;;;;29034:5:0::1;:14;29049:7;19738::::0;19765:6;-1:-1:-1;;;;;19765:6:0;;19692:87;29049:7:::1;29034:41;::::0;-1:-1:-1;;;;;;29034:41:0::1;::::0;;;;;;-1:-1:-1;;;;;9946:32:1;;;29034:41:0::1;::::0;::::1;9928:51:1::0;9995:18;;;9988:34;;;9901:18;;29034:41:0::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28880:203;28835:248::o:0;29467:355::-;19578:13;:11;:13::i;:::-;29626:7:::1;:14;29605:10;:17;:35;29597:71;;;::::0;-1:-1:-1;;;29597:71:0;;11385:2:1;29597:71:0::1;::::0;::::1;11367:21:1::0;11424:2;11404:18;;;11397:30;11463:26;11443:18;;;11436:54;11507:18;;29597:71:0::1;11183:348:1::0;29597:71:0::1;29686:9;29681:134;29705:10;:17;29701:1;:21;29681:134;;;29744:5;::::0;29759:13;;-1:-1:-1;;;;;29744:5:0;;::::1;::::0;:14:::1;::::0;29759:10;;29770:1;;29759:13;::::1;;;;;:::i;:::-;;;;;;;29774:28;29793:8;;;;;;;;;;;29789:2;:12;;;;:::i;:::-;29774:7;29782:1;29774:10;;;;;;;;:::i;:::-;;;;;;;:14;;:28;;;;:::i;:::-;29744:59;::::0;-1:-1:-1;;;;;;29744:59:0::1;::::0;;;;;;-1:-1:-1;;;;;9946:32:1;;;29744:59:0::1;::::0;::::1;9928:51:1::0;9995:18;;;9988:34;9901:18;;29744:59:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;29724:3:0::1;;29681:134;;27375:88:::0;19578:13;:11;:13::i;:::-;27438:6:::1;:17:::0;27375:88::o;29091:198::-;19578:13;:11;:13::i;:::-;29184:1:::1;29175:6;:10;29167:54;;;::::0;-1:-1:-1;;;29167:54:0;;11025:2:1;29167:54:0::1;::::0;::::1;11007:21:1::0;11064:2;11044:18;;;11037:30;11103:33;11083:18;;;11076:61;11154:18;;29167:54:0::1;10823:355:1::0;29167:54:0::1;29232:5;::::0;-1:-1:-1;;;;;29232:5:0::1;:14;29247:7;19738::::0;19765:6;-1:-1:-1;;;;;19765:6:0;;19692:87;29247:7:::1;29271:8;::::0;29256:24:::1;::::0;29267:12:::1;::::0;-1:-1:-1;;;29271:8:0;::::1;;;29267:2;:12;:::i;:::-;29256:6:::0;;:10:::1;:24::i;:::-;29232:49;::::0;-1:-1:-1;;;;;;29232:49:0::1;::::0;;;;;;-1:-1:-1;;;;;9946:32:1;;;29232:49:0::1;::::0;::::1;9928:51:1::0;9995:18;;;9988:34;9901:18;;29232:49:0::1;9754:274:1::0;26743:87:0;19578:13;:11;:13::i;:::-;26804:6:::1;:18:::0;;-1:-1:-1;;26804:18:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26743:87::o;27471:88::-;19578:13;:11;:13::i;:::-;27536:4:::1;:15:::0;27471:88::o;27843:247::-;19578:13;:11;:13::i;:::-;27929:1:::1;27920:6;:10;27912:60;;;::::0;-1:-1:-1;;;27912:60:0;;11870:2:1;27912:60:0::1;::::0;::::1;11852:21:1::0;11909:2;11889:18;;;11882:30;11948:34;11928:18;;;11921:62;-1:-1:-1;;;11999:18:1;;;11992:35;12044:19;;27912:60:0::1;11668:401:1::0;27912:60:0::1;27991:5;::::0;28052:8:::1;::::0;-1:-1:-1;;;;;27991:5:0;;::::1;::::0;:18:::1;::::0;28011:10:::1;::::0;28030:4:::1;::::0;28037:24:::1;::::0;28048:12:::1;::::0;-1:-1:-1;;;28052:8:0;::::1;;;28048:2;:12;:::i;:::-;28037:6:::0;;:10:::1;:24::i;:::-;27991:71;::::0;-1:-1:-1;;;;;;27991:71:0::1;::::0;;;;;;-1:-1:-1;;;;;12332:15:1;;;27991:71:0::1;::::0;::::1;12314:34:1::0;12384:15;;;;12364:18;;;12357:43;12416:18;;;12409:34;12249:18;;27991:71:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27983:99;;;::::0;-1:-1:-1;;;27983:99:0;;12656:2:1;27983:99:0::1;::::0;::::1;12638:21:1::0;12695:2;12675:18;;;12668:30;-1:-1:-1;;;12714:18:1;;;12707:45;12769:18;;27983:99:0::1;12454:339:1::0;27983:99:0::1;27843:247:::0;:::o;26137:395::-;19578:13;:11;:13::i;:::-;26292::::1;;26281:8;:24;26273:89;;;;-1:-1:-1::0;;;26273:89:0::1;;;;;;;:::i;:::-;26373:13;:24:::0;;;;26408:22:::1;:40:::0;;;;26459:6:::1;:17:::0;26487:16:::1;:37:::0;;;::::1;;;;-1:-1:-1::0;;26487:37:0;;::::1;::::0;;;::::1;::::0;;26137:395::o;20625:220::-;19578:13;:11;:13::i;:::-;-1:-1:-1;;;;;20710:22:0;::::1;20706:93;;20756:31;::::0;-1:-1:-1;;;20756:31:0;;20784:1:::1;20756:31;::::0;::::1;160:51:1::0;133:18;;20756:31:0::1;14:203:1::0;20706:93:0::1;20809:28;20828:8;20809:18;:28::i;19857:166::-:0;19738:7;19765:6;-1:-1:-1;;;;;19765:6:0;17781:10;19917:23;19913:103;;19964:40;;-1:-1:-1;;;19964:40:0;;17781:10;19964:40;;;160:51:1;133:18;;19964:40:0;14:203:1;27567:268:0;27681:28;;-1:-1:-1;;27698:10:0;12947:2:1;12943:15;12939:53;27681:28:0;;;12927:66:1;27640:4:0;;;;13009:12:1;;27681:28:0;;;;;;;;;;;;27671:39;;;;;;27656:54;;27729:44;27748:12;;27729:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27762:4:0;;;-1:-1:-1;27768:4:0;;-1:-1:-1;27729:18:0;:44::i;:::-;27721:84;;;;-1:-1:-1;;;27721:84:0;;13234:2:1;27721:84:0;;;13216:21:1;13273:2;13253:18;;;13246:30;13312:29;13292:18;;;13285:57;13359:18;;27721:84:0;13032:351:1;27721:84:0;27823:4;27816:11;;;27567:268;;;;;:::o;12943:98::-;13001:7;13028:5;13032:1;13028;:5;:::i;:::-;13021:12;12943:98;-1:-1:-1;;;12943:98:0:o;13681:::-;13739:7;13766:5;13770:1;13766;:5;:::i;21005:191::-;21079:16;21098:6;;-1:-1:-1;;;;;21115:17:0;;;-1:-1:-1;;;;;;21115:17:0;;;;;;21148:40;;21098:6;;;;;;;21148:40;;21079:16;21148:40;21068:128;21005:191;:::o;1369:156::-;1460:4;1513;1484:25;1497:5;1504:4;1484:12;:25::i;:::-;:33;;1369:156;-1:-1:-1;;;;1369:156:0:o;2088:296::-;2171:7;2214:4;2171:7;2229:118;2253:5;:12;2249:1;:16;2229:118;;;2302:33;2312:12;2326:5;2332:1;2326:8;;;;;;;;:::i;:::-;;;;;;;2302:9;:33::i;:::-;2287:48;-1:-1:-1;2267:3:0;;2229:118;;;-1:-1:-1;2364:12:0;2088:296;-1:-1:-1;;;2088:296:0:o;9518:149::-;9581:7;9612:1;9608;:5;:51;;9860:13;9954:15;;;9990:4;9983:15;;;10037:4;10021:21;;9608:51;;;9860:13;9954:15;;;9990:4;9983:15;;;10037:4;10021:21;;9616:20;9792:268;222:173:1;290:20;;-1:-1:-1;;;;;339:31:1;;329:42;;319:70;;385:1;382;375:12;319:70;222:173;;;:::o;400:186::-;459:6;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;773:180::-;832:6;885:2;873:9;864:7;860:23;856:32;853:52;;;901:1;898;891:12;853:52;-1:-1:-1;924:23:1;;773:180;-1:-1:-1;773:180:1:o;958:683::-;1053:6;1061;1069;1122:2;1110:9;1101:7;1097:23;1093:32;1090:52;;;1138:1;1135;1128:12;1090:52;1174:9;1161:23;1151:33;;1235:2;1224:9;1220:18;1207:32;1258:18;1299:2;1291:6;1288:14;1285:34;;;1315:1;1312;1305:12;1285:34;1353:6;1342:9;1338:22;1328:32;;1398:7;1391:4;1387:2;1383:13;1379:27;1369:55;;1420:1;1417;1410:12;1369:55;1460:2;1447:16;1486:2;1478:6;1475:14;1472:34;;;1502:1;1499;1492:12;1472:34;1555:7;1550:2;1540:6;1537:1;1533:14;1529:2;1525:23;1521:32;1518:45;1515:65;;;1576:1;1573;1566:12;1515:65;1607:2;1603;1599:11;1589:21;;1629:6;1619:16;;;;;958:683;;;;;:::o;1838:118::-;1924:5;1917:13;1910:21;1903:5;1900:32;1890:60;;1946:1;1943;1936:12;1961:241;2017:6;2070:2;2058:9;2049:7;2045:23;2041:32;2038:52;;;2086:1;2083;2076:12;2038:52;2125:9;2112:23;2144:28;2166:5;2144:28;:::i;2207:269::-;2264:6;2317:2;2305:9;2296:7;2292:23;2288:32;2285:52;;;2333:1;2330;2323:12;2285:52;2372:9;2359:23;2422:4;2415:5;2411:16;2404:5;2401:27;2391:55;;2442:1;2439;2432:12;2481:127;2542:10;2537:3;2533:20;2530:1;2523:31;2573:4;2570:1;2563:15;2597:4;2594:1;2587:15;2613:275;2684:2;2678:9;2749:2;2730:13;;-1:-1:-1;;2726:27:1;2714:40;;2784:18;2769:34;;2805:22;;;2766:62;2763:88;;;2831:18;;:::i;:::-;2867:2;2860:22;2613:275;;-1:-1:-1;2613:275:1:o;2893:183::-;2953:4;2986:18;2978:6;2975:30;2972:56;;;3008:18;;:::i;:::-;-1:-1:-1;3053:1:1;3049:14;3065:4;3045:25;;2893:183::o;3081:668::-;3135:5;3188:3;3181:4;3173:6;3169:17;3165:27;3155:55;;3206:1;3203;3196:12;3155:55;3242:6;3229:20;3268:4;3292:60;3308:43;3348:2;3308:43;:::i;:::-;3292:60;:::i;:::-;3374:3;3398:2;3393:3;3386:15;3426:4;3421:3;3417:14;3410:21;;3483:4;3477:2;3474:1;3470:10;3462:6;3458:23;3454:34;3440:48;;3511:3;3503:6;3500:15;3497:35;;;3528:1;3525;3518:12;3497:35;3564:4;3556:6;3552:17;3578:142;3594:6;3589:3;3586:15;3578:142;;;3660:17;;3648:30;;3698:12;;;;3611;;3578:142;;;-1:-1:-1;3738:5:1;3081:668;-1:-1:-1;;;;;;3081:668:1:o;3754:1146::-;3872:6;3880;3933:2;3921:9;3912:7;3908:23;3904:32;3901:52;;;3949:1;3946;3939:12;3901:52;3989:9;3976:23;4018:18;4059:2;4051:6;4048:14;4045:34;;;4075:1;4072;4065:12;4045:34;4113:6;4102:9;4098:22;4088:32;;4158:7;4151:4;4147:2;4143:13;4139:27;4129:55;;4180:1;4177;4170:12;4129:55;4216:2;4203:16;4238:4;4262:60;4278:43;4318:2;4278:43;:::i;4262:60::-;4356:15;;;4438:1;4434:10;;;;4426:19;;4422:28;;;4387:12;;;;4462:19;;;4459:39;;;4494:1;4491;4484:12;4459:39;4518:11;;;;4538:148;4554:6;4549:3;4546:15;4538:148;;;4620:23;4639:3;4620:23;:::i;:::-;4608:36;;4571:12;;;;4664;;;;4538:148;;;4705:5;-1:-1:-1;;4748:18:1;;4735:32;;-1:-1:-1;;4779:16:1;;;4776:36;;;4808:1;4805;4798:12;4776:36;;4831:63;4886:7;4875:8;4864:9;4860:24;4831:63;:::i;:::-;4821:73;;;3754:1146;;;;;:::o;5496:446::-;5579:6;5587;5595;5603;5656:3;5644:9;5635:7;5631:23;5627:33;5624:53;;;5673:1;5670;5663:12;5624:53;5709:9;5696:23;5686:33;;5766:2;5755:9;5751:18;5738:32;5728:42;;5817:2;5806:9;5802:18;5789:32;5779:42;;5871:2;5860:9;5856:18;5843:32;5884:28;5906:5;5884:28;:::i;:::-;5496:446;;;;-1:-1:-1;5496:446:1;;-1:-1:-1;;5496:446:1:o;6136:415::-;6338:2;6320:21;;;6377:2;6357:18;;;6350:30;6416:34;6411:2;6396:18;;6389:62;-1:-1:-1;;;6482:2:1;6467:18;;6460:49;6541:3;6526:19;;6136:415::o;7728:127::-;7789:10;7784:3;7780:20;7777:1;7770:31;7820:4;7817:1;7810:15;7844:4;7841:1;7834:15;7860:168;7933:9;;;7964;;7981:15;;;7975:22;;7961:37;7951:71;;8002:18;;:::i;8377:416::-;8466:1;8503:5;8466:1;8517:270;8538:7;8528:8;8525:21;8517:270;;;8597:4;8593:1;8589:6;8585:17;8579:4;8576:27;8573:53;;;8606:18;;:::i;:::-;8656:7;8646:8;8642:22;8639:55;;;8676:16;;;;8639:55;8755:22;;;;8715:15;;;;8517:270;;;8521:3;8377:416;;;;;:::o;8798:806::-;8847:5;8877:8;8867:80;;-1:-1:-1;8918:1:1;8932:5;;8867:80;8966:4;8956:76;;-1:-1:-1;9003:1:1;9017:5;;8956:76;9048:4;9066:1;9061:59;;;;9134:1;9129:130;;;;9041:218;;9061:59;9091:1;9082:10;;9105:5;;;9129:130;9166:3;9156:8;9153:17;9150:43;;;9173:18;;:::i;:::-;-1:-1:-1;;9229:1:1;9215:16;;9244:5;;9041:218;;9343:2;9333:8;9330:16;9324:3;9318:4;9315:13;9311:36;9305:2;9295:8;9292:16;9287:2;9281:4;9278:12;9274:35;9271:77;9268:159;;;-1:-1:-1;9380:19:1;;;9412:5;;9268:159;9459:34;9484:8;9478:4;9459:34;:::i;:::-;9529:6;9525:1;9521:6;9517:19;9508:7;9505:32;9502:58;;;9540:18;;:::i;:::-;9578:20;;8798:806;-1:-1:-1;;;8798:806:1:o;9609:140::-;9667:5;9696:47;9737:4;9727:8;9723:19;9717:4;9696:47;:::i;10033:245::-;10100:6;10153:2;10141:9;10132:7;10128:23;10124:32;10121:52;;;10169:1;10166;10159:12;10121:52;10201:9;10195:16;10220:28;10242:5;10220:28;:::i;10634:184::-;10704:6;10757:2;10745:9;10736:7;10732:23;10728:32;10725:52;;;10773:1;10770;10763:12;10725:52;-1:-1:-1;10796:16:1;;10634:184;-1:-1:-1;10634:184:1:o;11536:127::-;11597:10;11592:3;11588:20;11585:1;11578:31;11628:4;11625:1;11618:15;11652:4;11649:1;11642:15;13388:125;13453:9;;;13474:10;;;13471:36;;;13487:18;;:::i
Swarm Source
ipfs://9996bfc162b759ae48843e8e146ceecb0267dfdbd361308049055bf3b9232199
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.