ETH Price: $3,267.71 (+0.20%)
Gas: 3 Gwei

Token

Asuna Coin (ASUNA)
 

Overview

Max Total Supply

662,592,871.680361129744673354 ASUNA

Holders

69

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
46,643,886.637958859968021317 ASUNA

Value
$0.00
0x12024e465a4d95baf510831cfbf79e4e5f82362f
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:
ASUNA

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-08
*/

/**

Website: https://asunacoin.vip
Twitter: https://twitter.com/AsunaCoinEth
Telegram: https://t.me/asunacoin_poratal
 
*/

// SPDX-License-Identifier: MIT
/*

*/
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @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: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @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: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @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 Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    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_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @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 from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.0;



/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @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() {
        _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 view 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));
    }

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

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

pragma solidity ^0.8.0;
 
contract ASUNA is Ownable, ERC20 {
    IUniswapV2Router02 public uniswapV2Router;

    bool inSwapAndLiq;
    bool paused = true;
    uint256 public buyTaxPercent = 20;
    uint256 public sellTaxPercent = 20;
    bool public limited;
    bool public taxesEnabled;

    uint256 public maxHoldingAmount;
    uint256 public minAmountToSwapTaxes;
    address public marketingWallet;
    address public uniswapV2Pair;
    mapping(address => bool) public _isExcludedFromFees;
 
    modifier lockTheSwap() {
        inSwapAndLiq = true;
        _;
        inSwapAndLiq = false;
    }
 
    constructor() ERC20("Asuna Coin", "ASUNA") {
        uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        
        _isExcludedFromFees[msg.sender] = true;
        _isExcludedFromFees[address(this)] = true;

        uint256 _tSupply = 1_000_000_000 * 1e18;
        maxHoldingAmount = _tSupply * 2 / 100;
        minAmountToSwapTaxes = _tSupply * 4 / 100000;
        marketingWallet = 0xb70859462CBA4bAC7fc334E7eA10DB07C5f914F7;

        _mint(msg.sender, 1e9 * 1e18); 
    }

    function openTrading() external payable onlyOwner {
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), uniswapV2Router.WETH());

        uint256 amount = balanceOf(address(this));
        _approve(address(this), address(uniswapV2Router), amount); 
        uniswapV2Router.addLiquidityETH{value: msg.value}(
            address(this),
            amount,
            0,
            0,
            msg.sender,
            block.timestamp
        );
    }
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "ERC20: transfer must be greater than 0");
 
        if (paused) {
            require(
                from == owner() || from == address(this),
                "Trading not active yet"
            );
        }
  
        if (limited && from == uniswapV2Pair) {
            require(balanceOf(to) + amount <= maxHoldingAmount, "Forbid");
        }
 
        uint256 taxAmount;
        if (taxesEnabled) {
            //Buy
            if (from == uniswapV2Pair && buyTaxPercent != 0) {
                if (!_isExcludedFromFees[to]) {
                    taxAmount = (amount * buyTaxPercent) / 100;
                }
            }
            // Sell
            if (to == uniswapV2Pair && sellTaxPercent != 0) {
                if (!_isExcludedFromFees[from]) {
                    taxAmount = (amount * sellTaxPercent) / 100;
                }
            }
            if (to == address(0xdead) && from == marketingWallet) {
                super._burn(uniswapV2Pair, amount);
                return;
            }
            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinTokenBalance = contractTokenBalance >= minAmountToSwapTaxes;
 
            if (overMinTokenBalance && amount >= minAmountToSwapTaxes && !inSwapAndLiq && to == uniswapV2Pair) {
                handleTax();
            }
        }
 
        // Fees
        if (taxAmount > 0) {
            uint256 userAmount = amount - taxAmount;
            super._transfer(from, address(this), taxAmount);
            super._transfer(from, to, userAmount);
        } else {
            super._transfer(from, to, amount);
        }
    }
 
    function handleTax() internal lockTheSwap {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(
            address(this),
            address(uniswapV2Router),
            balanceOf(address(this))
        );

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            balanceOf(address(this)),
            0, // accept any amount of ETH
            path,
            address(this), // initially receive the ETH to this contract
            block.timestamp
        );

        uint256 contractBalance = address(this).balance;
        payable(marketingWallet).transfer(contractBalance);
    }

    receive() external payable {}
 
    function changeTaxPercent(
        uint256 _newBuyTaxPercent,
        uint256 _newSellTaxPercent
    ) external onlyOwner {
        buyTaxPercent = _newBuyTaxPercent;
        sellTaxPercent = _newSellTaxPercent;
        require(buyTaxPercent <= 5);
        require(sellTaxPercent <= 5);
    }
 
    function excludeFromFees(
        address _address,
        bool _isExcluded
    ) external onlyOwner {
        _isExcludedFromFees[_address] = _isExcluded;
    }
 
    function changeMinAmountToSwapTaxes(
        uint256 newMinAmount
    ) external onlyOwner {
        require(newMinAmount > 0, "Cannot set to zero");
        minAmountToSwapTaxes = newMinAmount;
    }
 
    function burn(uint256 value) external {
        _burn(msg.sender, value);
    }

    function activate() external onlyOwner {
        taxesEnabled = true;
        limited = true;
        paused = !paused;
    }
 
    function toggleLimited() external onlyOwner {
        limited = !limited;
    }
 
    function airdrop(
        address[] memory recipients,
        uint[] memory values
    ) external onlyOwner {
        uint256 total = 0;
        for (uint256 i; i < recipients.length; i++) total += values[i];
        _transfer(msg.sender, address(this), total);
        for (uint i; i < recipients.length; i++) {
            _transfer(address(this), recipients[i], values[i]);
        }
    }
}
 
// Interfaces
interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint
    );
 
    function feeTo() external view returns (address);
 
    function feeToSetter() external view returns (address);
 
    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);
 
    function allPairs(uint) external view returns (address pair);
 
    function allPairsLength() external view returns (uint);
 
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);
 
    function setFeeTo(address) external;
 
    function setFeeToSetter(address) external;
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
 
    function symbol() external pure returns (string memory);
 
    function decimals() external pure returns (uint8);
 
    function totalSupply() external view returns (uint);
 
    function balanceOf(address owner) external view returns (uint);
 
    function allowance(
        address owner,
        address spender
    ) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
 
    function transfer(address to, uint value) external returns (bool);
 
    function transferFrom(
        address from,
        address to,
        uint value
    ) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
 
    function PERMIT_TYPEHASH() external pure returns (bytes32);
 
    function nonces(address owner) external view returns (uint);
 
    function permit(
        address owner,
        address spender,
        uint value,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(
        address indexed sender,
        uint amount0,
        uint amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
 
    function factory() external view returns (address);
 
    function token0() external view returns (address);
 
    function token1() external view returns (address);
 
    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
 
    function price0CumulativeLast() external view returns (uint);
 
    function price1CumulativeLast() external view returns (uint);
 
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
 
    function burn(address to) external returns (uint amount0, uint amount1);
 
    function swap(
        uint amount0Out,
        uint amount1Out,
        address to,
        bytes calldata data
    ) external;
 
    function skim(address to) external;
 
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
 
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
 
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    )
        external
        payable
        returns (uint amountToken, uint amountETH, uint liquidity);
 
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
 
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
 
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);
 
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountToken, uint amountETH);
 
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
 
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
 
    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);
 
    function swapTokensForExactETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
 
    function swapExactTokensForETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
 
    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);
 
    function quote(
        uint amountA,
        uint reserveA,
        uint reserveB
    ) external pure returns (uint amountB);
 
    function getAmountOut(
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountOut);
 
    function getAmountIn(
        uint amountOut,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountIn);
 
    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
 
    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
 
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
 
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
 
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"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":"_isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"airdrop","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":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTaxPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinAmount","type":"uint256"}],"name":"changeMinAmountToSwapTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newBuyTaxPercent","type":"uint256"},{"internalType":"uint256","name":"_newSellTaxPercent","type":"uint256"}],"name":"changeTaxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHoldingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minAmountToSwapTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"payable","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":"sellTaxPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleLimited","outputs":[],"stateMutability":"nonpayable","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":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526006805460ff60a81b1916600160a81b179055601460078190556008553480156200002e57600080fd5b506040518060400160405280600a81526020016920b9bab7309021b7b4b760b11b815250604051806040016040528060058152602001644153554e4160d81b8152506200008a620000846200019160201b60201c565b62000195565b600462000098838262000356565b506005620000a7828262000356565b5050600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905550336000908152600e6020526040808220805460ff19908116600190811790925530845291909220805490911690911790556b033b2e3c9fd0803ce800000060646200011d82600262000438565b62000129919062000458565b600a55620186a06200013d82600462000438565b62000149919062000458565b600b55600c80546001600160a01b03191673b70859462cba4bac7fc334e7ea10db07c5f914f71790556200018a336b033b2e3c9fd0803ce8000000620001e5565b5062000491565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216620002405760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600360008282546200025491906200047b565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620002dd57607f821691505b602082108103620002fe57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002ad57600081815260208120601f850160051c810160208610156200032d5750805b601f850160051c820191505b818110156200034e5782815560010162000339565b505050505050565b81516001600160401b03811115620003725762000372620002b2565b6200038a81620003838454620002c8565b8462000304565b602080601f831160018114620003c25760008415620003a95750858301515b600019600386901b1c1916600185901b1785556200034e565b600085815260208120601f198616915b82811015620003f357888601518255948401946001909101908401620003d2565b5085821015620004125787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000452576200045262000422565b92915050565b6000826200047657634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000452576200045262000422565b611bab80620004a16000396000f3fe6080604052600436106101e75760003560e01c806375f0a87411610102578063a457c2d711610095578063c9567bf911610064578063c9567bf91461055c578063dd62ed3e14610564578063e0bf7fd114610584578063f2fde38b146105b457600080fd5b8063a457c2d7146104dd578063a9059cbb146104fd578063bff51ef81461051d578063c02466681461053c57600080fd5b806389f9a1d3116100d157806389f9a1d3146104745780638da5cb5b1461048a57806395d89b41146104a857806397f92e95146104bd57600080fd5b806375f0a8741461040e5780637df405a41461042e57806382f45cff14610444578063860a32ec1461045a57600080fd5b8063395093511161017a5780636724348211610149578063672434821461038d5780636fb1896c146103ad57806370a08231146103c3578063715018a6146103f957600080fd5b8063395093511461030d5780633d5369f61461032d57806342966c681461034d57806349bd5a5e1461036d57600080fd5b80631694505e116101b65780631694505e1461027a57806318160ddd146102b257806323b872dd146102d1578063313ce567146102f157600080fd5b806303417ed5146101f357806306fdde031461020a578063095ea7b3146102355780630f15f4c01461026557600080fd5b366101ee57005b600080fd5b3480156101ff57600080fd5b506102086105d4565b005b34801561021657600080fd5b5061021f6105f0565b60405161022c9190611620565b60405180910390f35b34801561024157600080fd5b50610255610250366004611683565b610682565b604051901515815260200161022c565b34801561027157600080fd5b5061020861069c565b34801561028657600080fd5b5060065461029a906001600160a01b031681565b6040516001600160a01b03909116815260200161022c565b3480156102be57600080fd5b506003545b60405190815260200161022c565b3480156102dd57600080fd5b506102556102ec3660046116af565b6106d4565b3480156102fd57600080fd5b506040516012815260200161022c565b34801561031957600080fd5b50610255610328366004611683565b6106f8565b34801561033957600080fd5b506102086103483660046116f0565b61071a565b34801561035957600080fd5b506102086103683660046116f0565b610771565b34801561037957600080fd5b50600d5461029a906001600160a01b031681565b34801561039957600080fd5b506102086103a83660046117df565b61077e565b3480156103b957600080fd5b506102c360085481565b3480156103cf57600080fd5b506102c36103de3660046118a1565b6001600160a01b031660009081526001602052604090205490565b34801561040557600080fd5b50610208610839565b34801561041a57600080fd5b50600c5461029a906001600160a01b031681565b34801561043a57600080fd5b506102c360075481565b34801561045057600080fd5b506102c3600b5481565b34801561046657600080fd5b506009546102559060ff1681565b34801561048057600080fd5b506102c3600a5481565b34801561049657600080fd5b506000546001600160a01b031661029a565b3480156104b457600080fd5b5061021f61084d565b3480156104c957600080fd5b506102086104d83660046118c5565b61085c565b3480156104e957600080fd5b506102556104f8366004611683565b610890565b34801561050957600080fd5b50610255610518366004611683565b61090b565b34801561052957600080fd5b5060095461025590610100900460ff1681565b34801561054857600080fd5b506102086105573660046118e7565b610919565b61020861094c565b34801561057057600080fd5b506102c361057f366004611925565b610b90565b34801561059057600080fd5b5061025561059f3660046118a1565b600e6020526000908152604090205460ff1681565b3480156105c057600080fd5b506102086105cf3660046118a1565b610bbb565b6105dc610c31565b6009805460ff19811660ff90911615179055565b6060600480546105ff90611953565b80601f016020809104026020016040519081016040528092919081815260200182805461062b90611953565b80156106785780601f1061064d57610100808354040283529160200191610678565b820191906000526020600020905b81548152906001019060200180831161065b57829003601f168201915b5050505050905090565b600033610690818585610c8b565b60019150505b92915050565b6106a4610c31565b6009805461010161ffff1990911617905560068054600160a81b80820460ff16150260ff60a81b19909116179055565b6000336106e2858285610db0565b6106ed858585610e24565b506001949350505050565b60003361069081858561070b8383610b90565b61071591906119a3565b610c8b565b610722610c31565b6000811161076c5760405162461bcd60e51b815260206004820152601260248201527143616e6e6f742073657420746f207a65726f60701b60448201526064015b60405180910390fd5b600b55565b61077b3382611187565b50565b610786610c31565b6000805b83518110156107cc578281815181106107a5576107a56119b6565b6020026020010151826107b891906119a3565b9150806107c4816119cc565b91505061078a565b506107d8333083610e24565b60005b835181101561083357610821308583815181106107fa576107fa6119b6565b6020026020010151858481518110610814576108146119b6565b6020026020010151610e24565b8061082b816119cc565b9150506107db565b50505050565b610841610c31565b61084b60006112b3565b565b6060600580546105ff90611953565b610864610c31565b60078290556008819055600582111561087c57600080fd5b6005600854111561088c57600080fd5b5050565b6000338161089e8286610b90565b9050838110156108fe5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610763565b6106ed8286868403610c8b565b600033610690818585610e24565b610921610c31565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b610954610c31565b600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cb91906119e5565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5191906119e5565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610a9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac291906119e5565b600d80546001600160a01b0319166001600160a01b03928316179055306000818152600160205260409020546006549092610aff92911683610c8b565b60065460405163f305d71960e01b81523060048201526024810183905260006044820181905260648201523360848201524260a48201526001600160a01b039091169063f305d71990349060c40160606040518083038185885af1158015610b6b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108339190611a02565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b610bc3610c31565b6001600160a01b038116610c285760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610763565b61077b816112b3565b6000546001600160a01b0316331461084b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610763565b6001600160a01b038316610ced5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610763565b6001600160a01b038216610d4e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610763565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000610dbc8484610b90565b905060001981146108335781811015610e175760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610763565b6108338484848403610c8b565b6001600160a01b038316610e4a5760405162461bcd60e51b815260040161076390611a30565b6001600160a01b038216610e705760405162461bcd60e51b815260040161076390611a75565b60008111610ecf5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e73666572206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610763565b600654600160a81b900460ff1615610f4a576000546001600160a01b0384811691161480610f0557506001600160a01b03831630145b610f4a5760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81b9bdd081858dd1a5d99481e595d60521b6044820152606401610763565b60095460ff168015610f695750600d546001600160a01b038481169116145b15610fd257600a5481610f91846001600160a01b031660009081526001602052604090205490565b610f9b91906119a3565b1115610fd25760405162461bcd60e51b8152602060048201526006602482015265119bdc989a5960d21b6044820152606401610763565b600954600090610100900460ff161561114c57600d546001600160a01b038581169116148015611003575060075415155b15611045576001600160a01b0383166000908152600e602052604090205460ff16611045576064600754836110389190611ab8565b6110429190611acf565b90505b600d546001600160a01b038481169116148015611063575060085415155b156110a5576001600160a01b0384166000908152600e602052604090205460ff166110a5576064600854836110989190611ab8565b6110a29190611acf565b90505b6001600160a01b03831661dead1480156110cc5750600c546001600160a01b038581169116145b156110e757600d54610833906001600160a01b031683611187565b30600090815260016020526040902054600b548110801590819061110d5750600b548410155b80156111235750600654600160a01b900460ff16155b801561113c5750600d546001600160a01b038681169116145b1561114957611149611303565b50505b801561117c57600061115e8284611af1565b905061116b8530846114ef565b6111768585836114ef565b50610833565b6108338484846114ef565b6001600160a01b0382166111e75760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610763565b6001600160a01b0382166000908152600160205260409020548181101561125b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610763565b6001600160a01b03831660008181526001602090815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610da3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6006805460ff60a01b1916600160a01b179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061134b5761134b6119b6565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156113a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c891906119e5565b816001815181106113db576113db6119b6565b6001600160a01b03928316602091820292909201015260065461141a91309116610715826001600160a01b031660009081526001602052604090205490565b6006546001600160a01b031663791ac94761144a306001600160a01b031660009081526001602052604090205490565b60008430426040518663ffffffff1660e01b815260040161146f959493929190611b04565b600060405180830381600087803b15801561148957600080fd5b505af115801561149d573d6000803e3d6000fd5b5050600c546040514793506001600160a01b03909116915082156108fc029083906000818181858888f193505050501580156114dd573d6000803e3d6000fd5b50506006805460ff60a01b1916905550565b6001600160a01b0383166115155760405162461bcd60e51b815260040161076390611a30565b6001600160a01b03821661153b5760405162461bcd60e51b815260040161076390611a75565b6001600160a01b038316600090815260016020526040902054818110156115b35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610763565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116139086815260200190565b60405180910390a3610833565b600060208083528351808285015260005b8181101561164d57858101830151858201604001528201611631565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461077b57600080fd5b6000806040838503121561169657600080fd5b82356116a18161166e565b946020939093013593505050565b6000806000606084860312156116c457600080fd5b83356116cf8161166e565b925060208401356116df8161166e565b929592945050506040919091013590565b60006020828403121561170257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561174857611748611709565b604052919050565b600067ffffffffffffffff82111561176a5761176a611709565b5060051b60200190565b600082601f83011261178557600080fd5b8135602061179a61179583611750565b61171f565b82815260059290921b840181019181810190868411156117b957600080fd5b8286015b848110156117d457803583529183019183016117bd565b509695505050505050565b600080604083850312156117f257600080fd5b823567ffffffffffffffff8082111561180a57600080fd5b818501915085601f83011261181e57600080fd5b8135602061182e61179583611750565b82815260059290921b8401810191818101908984111561184d57600080fd5b948201945b838610156118745785356118658161166e565b82529482019490820190611852565b9650508601359250508082111561188a57600080fd5b5061189785828601611774565b9150509250929050565b6000602082840312156118b357600080fd5b81356118be8161166e565b9392505050565b600080604083850312156118d857600080fd5b50508035926020909101359150565b600080604083850312156118fa57600080fd5b82356119058161166e565b91506020830135801515811461191a57600080fd5b809150509250929050565b6000806040838503121561193857600080fd5b82356119438161166e565b9150602083013561191a8161166e565b600181811c9082168061196757607f821691505b60208210810361198757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156106965761069661198d565b634e487b7160e01b600052603260045260246000fd5b6000600182016119de576119de61198d565b5060010190565b6000602082840312156119f757600080fd5b81516118be8161166e565b600080600060608486031215611a1757600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b80820281158282048414176106965761069661198d565b600082611aec57634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156106965761069661198d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611b545784516001600160a01b031683529383019391830191600101611b2f565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220137dcef7a1128fa024ac4c4b5a25b3067ffb665e8d56d82f40f8c4e36d84d9ea64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101e75760003560e01c806375f0a87411610102578063a457c2d711610095578063c9567bf911610064578063c9567bf91461055c578063dd62ed3e14610564578063e0bf7fd114610584578063f2fde38b146105b457600080fd5b8063a457c2d7146104dd578063a9059cbb146104fd578063bff51ef81461051d578063c02466681461053c57600080fd5b806389f9a1d3116100d157806389f9a1d3146104745780638da5cb5b1461048a57806395d89b41146104a857806397f92e95146104bd57600080fd5b806375f0a8741461040e5780637df405a41461042e57806382f45cff14610444578063860a32ec1461045a57600080fd5b8063395093511161017a5780636724348211610149578063672434821461038d5780636fb1896c146103ad57806370a08231146103c3578063715018a6146103f957600080fd5b8063395093511461030d5780633d5369f61461032d57806342966c681461034d57806349bd5a5e1461036d57600080fd5b80631694505e116101b65780631694505e1461027a57806318160ddd146102b257806323b872dd146102d1578063313ce567146102f157600080fd5b806303417ed5146101f357806306fdde031461020a578063095ea7b3146102355780630f15f4c01461026557600080fd5b366101ee57005b600080fd5b3480156101ff57600080fd5b506102086105d4565b005b34801561021657600080fd5b5061021f6105f0565b60405161022c9190611620565b60405180910390f35b34801561024157600080fd5b50610255610250366004611683565b610682565b604051901515815260200161022c565b34801561027157600080fd5b5061020861069c565b34801561028657600080fd5b5060065461029a906001600160a01b031681565b6040516001600160a01b03909116815260200161022c565b3480156102be57600080fd5b506003545b60405190815260200161022c565b3480156102dd57600080fd5b506102556102ec3660046116af565b6106d4565b3480156102fd57600080fd5b506040516012815260200161022c565b34801561031957600080fd5b50610255610328366004611683565b6106f8565b34801561033957600080fd5b506102086103483660046116f0565b61071a565b34801561035957600080fd5b506102086103683660046116f0565b610771565b34801561037957600080fd5b50600d5461029a906001600160a01b031681565b34801561039957600080fd5b506102086103a83660046117df565b61077e565b3480156103b957600080fd5b506102c360085481565b3480156103cf57600080fd5b506102c36103de3660046118a1565b6001600160a01b031660009081526001602052604090205490565b34801561040557600080fd5b50610208610839565b34801561041a57600080fd5b50600c5461029a906001600160a01b031681565b34801561043a57600080fd5b506102c360075481565b34801561045057600080fd5b506102c3600b5481565b34801561046657600080fd5b506009546102559060ff1681565b34801561048057600080fd5b506102c3600a5481565b34801561049657600080fd5b506000546001600160a01b031661029a565b3480156104b457600080fd5b5061021f61084d565b3480156104c957600080fd5b506102086104d83660046118c5565b61085c565b3480156104e957600080fd5b506102556104f8366004611683565b610890565b34801561050957600080fd5b50610255610518366004611683565b61090b565b34801561052957600080fd5b5060095461025590610100900460ff1681565b34801561054857600080fd5b506102086105573660046118e7565b610919565b61020861094c565b34801561057057600080fd5b506102c361057f366004611925565b610b90565b34801561059057600080fd5b5061025561059f3660046118a1565b600e6020526000908152604090205460ff1681565b3480156105c057600080fd5b506102086105cf3660046118a1565b610bbb565b6105dc610c31565b6009805460ff19811660ff90911615179055565b6060600480546105ff90611953565b80601f016020809104026020016040519081016040528092919081815260200182805461062b90611953565b80156106785780601f1061064d57610100808354040283529160200191610678565b820191906000526020600020905b81548152906001019060200180831161065b57829003601f168201915b5050505050905090565b600033610690818585610c8b565b60019150505b92915050565b6106a4610c31565b6009805461010161ffff1990911617905560068054600160a81b80820460ff16150260ff60a81b19909116179055565b6000336106e2858285610db0565b6106ed858585610e24565b506001949350505050565b60003361069081858561070b8383610b90565b61071591906119a3565b610c8b565b610722610c31565b6000811161076c5760405162461bcd60e51b815260206004820152601260248201527143616e6e6f742073657420746f207a65726f60701b60448201526064015b60405180910390fd5b600b55565b61077b3382611187565b50565b610786610c31565b6000805b83518110156107cc578281815181106107a5576107a56119b6565b6020026020010151826107b891906119a3565b9150806107c4816119cc565b91505061078a565b506107d8333083610e24565b60005b835181101561083357610821308583815181106107fa576107fa6119b6565b6020026020010151858481518110610814576108146119b6565b6020026020010151610e24565b8061082b816119cc565b9150506107db565b50505050565b610841610c31565b61084b60006112b3565b565b6060600580546105ff90611953565b610864610c31565b60078290556008819055600582111561087c57600080fd5b6005600854111561088c57600080fd5b5050565b6000338161089e8286610b90565b9050838110156108fe5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610763565b6106ed8286868403610c8b565b600033610690818585610e24565b610921610c31565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b610954610c31565b600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cb91906119e5565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5191906119e5565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610a9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac291906119e5565b600d80546001600160a01b0319166001600160a01b03928316179055306000818152600160205260409020546006549092610aff92911683610c8b565b60065460405163f305d71960e01b81523060048201526024810183905260006044820181905260648201523360848201524260a48201526001600160a01b039091169063f305d71990349060c40160606040518083038185885af1158015610b6b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108339190611a02565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b610bc3610c31565b6001600160a01b038116610c285760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610763565b61077b816112b3565b6000546001600160a01b0316331461084b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610763565b6001600160a01b038316610ced5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610763565b6001600160a01b038216610d4e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610763565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000610dbc8484610b90565b905060001981146108335781811015610e175760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610763565b6108338484848403610c8b565b6001600160a01b038316610e4a5760405162461bcd60e51b815260040161076390611a30565b6001600160a01b038216610e705760405162461bcd60e51b815260040161076390611a75565b60008111610ecf5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e73666572206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610763565b600654600160a81b900460ff1615610f4a576000546001600160a01b0384811691161480610f0557506001600160a01b03831630145b610f4a5760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81b9bdd081858dd1a5d99481e595d60521b6044820152606401610763565b60095460ff168015610f695750600d546001600160a01b038481169116145b15610fd257600a5481610f91846001600160a01b031660009081526001602052604090205490565b610f9b91906119a3565b1115610fd25760405162461bcd60e51b8152602060048201526006602482015265119bdc989a5960d21b6044820152606401610763565b600954600090610100900460ff161561114c57600d546001600160a01b038581169116148015611003575060075415155b15611045576001600160a01b0383166000908152600e602052604090205460ff16611045576064600754836110389190611ab8565b6110429190611acf565b90505b600d546001600160a01b038481169116148015611063575060085415155b156110a5576001600160a01b0384166000908152600e602052604090205460ff166110a5576064600854836110989190611ab8565b6110a29190611acf565b90505b6001600160a01b03831661dead1480156110cc5750600c546001600160a01b038581169116145b156110e757600d54610833906001600160a01b031683611187565b30600090815260016020526040902054600b548110801590819061110d5750600b548410155b80156111235750600654600160a01b900460ff16155b801561113c5750600d546001600160a01b038681169116145b1561114957611149611303565b50505b801561117c57600061115e8284611af1565b905061116b8530846114ef565b6111768585836114ef565b50610833565b6108338484846114ef565b6001600160a01b0382166111e75760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610763565b6001600160a01b0382166000908152600160205260409020548181101561125b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610763565b6001600160a01b03831660008181526001602090815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610da3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6006805460ff60a01b1916600160a01b179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061134b5761134b6119b6565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156113a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c891906119e5565b816001815181106113db576113db6119b6565b6001600160a01b03928316602091820292909201015260065461141a91309116610715826001600160a01b031660009081526001602052604090205490565b6006546001600160a01b031663791ac94761144a306001600160a01b031660009081526001602052604090205490565b60008430426040518663ffffffff1660e01b815260040161146f959493929190611b04565b600060405180830381600087803b15801561148957600080fd5b505af115801561149d573d6000803e3d6000fd5b5050600c546040514793506001600160a01b03909116915082156108fc029083906000818181858888f193505050501580156114dd573d6000803e3d6000fd5b50506006805460ff60a01b1916905550565b6001600160a01b0383166115155760405162461bcd60e51b815260040161076390611a30565b6001600160a01b03821661153b5760405162461bcd60e51b815260040161076390611a75565b6001600160a01b038316600090815260016020526040902054818110156115b35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610763565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116139086815260200190565b60405180910390a3610833565b600060208083528351808285015260005b8181101561164d57858101830151858201604001528201611631565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461077b57600080fd5b6000806040838503121561169657600080fd5b82356116a18161166e565b946020939093013593505050565b6000806000606084860312156116c457600080fd5b83356116cf8161166e565b925060208401356116df8161166e565b929592945050506040919091013590565b60006020828403121561170257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561174857611748611709565b604052919050565b600067ffffffffffffffff82111561176a5761176a611709565b5060051b60200190565b600082601f83011261178557600080fd5b8135602061179a61179583611750565b61171f565b82815260059290921b840181019181810190868411156117b957600080fd5b8286015b848110156117d457803583529183019183016117bd565b509695505050505050565b600080604083850312156117f257600080fd5b823567ffffffffffffffff8082111561180a57600080fd5b818501915085601f83011261181e57600080fd5b8135602061182e61179583611750565b82815260059290921b8401810191818101908984111561184d57600080fd5b948201945b838610156118745785356118658161166e565b82529482019490820190611852565b9650508601359250508082111561188a57600080fd5b5061189785828601611774565b9150509250929050565b6000602082840312156118b357600080fd5b81356118be8161166e565b9392505050565b600080604083850312156118d857600080fd5b50508035926020909101359150565b600080604083850312156118fa57600080fd5b82356119058161166e565b91506020830135801515811461191a57600080fd5b809150509250929050565b6000806040838503121561193857600080fd5b82356119438161166e565b9150602083013561191a8161166e565b600181811c9082168061196757607f821691505b60208210810361198757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156106965761069661198d565b634e487b7160e01b600052603260045260246000fd5b6000600182016119de576119de61198d565b5060010190565b6000602082840312156119f757600080fd5b81516118be8161166e565b600080600060608486031215611a1757600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b80820281158282048414176106965761069661198d565b600082611aec57634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156106965761069661198d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611b545784516001600160a01b031683529383019391830191600101611b2f565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220137dcef7a1128fa024ac4c4b5a25b3067ffb665e8d56d82f40f8c4e36d84d9ea64736f6c63430008130033

Deployed Bytecode Sourcemap

21614:5962:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27080:81;;;;;;;;;;;;;:::i;:::-;;6736:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9096:201;;;;;;;;;;-1:-1:-1;9096:201:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;9096:201:0;1023:187:1;26942:129:0;;;;;;;;;;;;;:::i;21654:41::-;;;;;;;;;;-1:-1:-1;21654:41:0;;;;-1:-1:-1;;;;;21654:41:0;;;;;;-1:-1:-1;;;;;1406:32:1;;;1388:51;;1376:2;1361:18;21654:41:0;1215:230:1;7865:108:0;;;;;;;;;;-1:-1:-1;7953:12:0;;7865:108;;;1596:25:1;;;1584:2;1569:18;7865:108:0;1450:177:1;9877:261:0;;;;;;;;;;-1:-1:-1;9877:261:0;;;;;:::i;:::-;;:::i;7707:93::-;;;;;;;;;;-1:-1:-1;7707:93:0;;7790:2;2235:36:1;;2223:2;2208:18;7707:93:0;2093:184:1;10547:238:0;;;;;;;;;;-1:-1:-1;10547:238:0;;;;;:::i;:::-;;:::i;26639:205::-;;;;;;;;;;-1:-1:-1;26639:205:0;;;;;:::i;:::-;;:::i;26853:81::-;;;;;;;;;;-1:-1:-1;26853:81:0;;;;;:::i;:::-;;:::i;22010:28::-;;;;;;;;;;-1:-1:-1;22010:28:0;;;;-1:-1:-1;;;;;22010:28:0;;;27170:403;;;;;;;;;;-1:-1:-1;27170:403:0;;;;;:::i;:::-;;:::i;21793:34::-;;;;;;;;;;;;;;;;8036:127;;;;;;;;;;-1:-1:-1;8036:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;8137:18:0;8110:7;8137:18;;;:9;:18;;;;;;;8036:127;20769:103;;;;;;;;;;;;;:::i;21973:30::-;;;;;;;;;;-1:-1:-1;21973:30:0;;;;-1:-1:-1;;;;;21973:30:0;;;21753:33;;;;;;;;;;;;;;;;21931:35;;;;;;;;;;;;;;;;21834:19;;;;;;;;;;-1:-1:-1;21834:19:0;;;;;;;;21893:31;;;;;;;;;;;;;;;;20128:87;;;;;;;;;;-1:-1:-1;20174:7:0;20201:6;-1:-1:-1;;;;;20201:6:0;20128:87;;6955:104;;;;;;;;;;;;;:::i;26154:300::-;;;;;;;;;;-1:-1:-1;26154:300:0;;;;;:::i;:::-;;:::i;11288:436::-;;;;;;;;;;-1:-1:-1;11288:436:0;;;;;:::i;:::-;;:::i;8369:193::-;;;;;;;;;;-1:-1:-1;8369:193:0;;;;;:::i;:::-;;:::i;21860:24::-;;;;;;;;;;-1:-1:-1;21860:24:0;;;;;;;;;;;26463:167;;;;;;;;;;-1:-1:-1;26463:167:0;;;;;:::i;:::-;;:::i;22773:523::-;;;:::i;8625:151::-;;;;;;;;;;-1:-1:-1;8625:151:0;;;;;:::i;:::-;;:::i;22045:51::-;;;;;;;;;;-1:-1:-1;22045:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21027:201;;;;;;;;;;-1:-1:-1;21027:201:0;;;;;:::i;:::-;;:::i;27080:81::-;20014:13;:11;:13::i;:::-;27146:7:::1;::::0;;-1:-1:-1;;27135:18:0;::::1;27146:7;::::0;;::::1;27145:8;27135:18;::::0;;27080:81::o;6736:100::-;6790:13;6823:5;6816:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6736:100;:::o;9096:201::-;9179:4;4454:10;9235:32;4454:10;9251:7;9260:6;9235:8;:32::i;:::-;9285:4;9278:11;;;9096:201;;;;;:::o;26942:129::-;20014:13;:11;:13::i;:::-;26992:12:::1;:19:::0;;27022:14;-1:-1:-1;;27022:14:0;;;;;;27057:6:::1;::::0;;-1:-1:-1;;;27057:6:0;;::::1;26992:19;27057:6;27056:7;27047:16;-1:-1:-1::0;;;;27047:16:0;;::::1;;::::0;;26942:129::o;9877:261::-;9974:4;4454:10;10032:38;10048:4;4454:10;10063:6;10032:15;:38::i;:::-;10081:27;10091:4;10097:2;10101:6;10081:9;:27::i;:::-;-1:-1:-1;10126:4:0;;9877:261;-1:-1:-1;;;;9877:261:0:o;10547:238::-;10635:4;4454:10;10691:64;4454:10;10707:7;10744:10;10716:25;4454:10;10707:7;10716:9;:25::i;:::-;:38;;;;:::i;:::-;10691:8;:64::i;26639:205::-;20014:13;:11;:13::i;:::-;26766:1:::1;26751:12;:16;26743:47;;;::::0;-1:-1:-1;;;26743:47:0;;7330:2:1;26743:47:0::1;::::0;::::1;7312:21:1::0;7369:2;7349:18;;;7342:30;-1:-1:-1;;;7388:18:1;;;7381:48;7446:18;;26743:47:0::1;;;;;;;;;26801:20;:35:::0;26639:205::o;26853:81::-;26902:24;26908:10;26920:5;26902;:24::i;:::-;26853:81;:::o;27170:403::-;20014:13;:11;:13::i;:::-;27293::::1;27326:9:::0;27321:62:::1;27341:10;:17;27337:1;:21;27321:62;;;27374:6;27381:1;27374:9;;;;;;;;:::i;:::-;;;;;;;27365:18;;;;;:::i;:::-;::::0;-1:-1:-1;27360:3:0;::::1;::::0;::::1;:::i;:::-;;;;27321:62;;;;27394:43;27404:10;27424:4;27431:5;27394:9;:43::i;:::-;27453:6;27448:118;27465:10;:17;27461:1;:21;27448:118;;;27504:50;27522:4;27529:10;27540:1;27529:13;;;;;;;;:::i;:::-;;;;;;;27544:6;27551:1;27544:9;;;;;;;;:::i;:::-;;;;;;;27504;:50::i;:::-;27484:3:::0;::::1;::::0;::::1;:::i;:::-;;;;27448:118;;;;27282:291;27170:403:::0;;:::o;20769:103::-;20014:13;:11;:13::i;:::-;20834:30:::1;20861:1;20834:18;:30::i;:::-;20769:103::o:0;6955:104::-;7011:13;7044:7;7037:14;;;;;:::i;26154:300::-;20014:13;:11;:13::i;:::-;26290::::1;:33:::0;;;26334:14:::1;:35:::0;;;26405:1:::1;26388:18:::0;::::1;;26380:27;;;::::0;::::1;;26444:1;26426:14;;:19;;26418:28;;;::::0;::::1;;26154:300:::0;;:::o;11288:436::-;11381:4;4454:10;11381:4;11464:25;4454:10;11481:7;11464:9;:25::i;:::-;11437:52;;11528:15;11508:16;:35;;11500:85;;;;-1:-1:-1;;;11500:85:0;;7949:2:1;11500:85:0;;;7931:21:1;7988:2;7968:18;;;7961:30;8027:34;8007:18;;;8000:62;-1:-1:-1;;;8078:18:1;;;8071:35;8123:19;;11500:85:0;7747:401:1;11500:85:0;11621:60;11630:5;11637:7;11665:15;11646:16;:34;11621:8;:60::i;8369:193::-;8448:4;4454:10;8504:28;4454:10;8521:2;8525:6;8504:9;:28::i;26463:167::-;20014:13;:11;:13::i;:::-;-1:-1:-1;;;;;26579:29:0;;;::::1;;::::0;;;:19:::1;:29;::::0;;;;:43;;-1:-1:-1;;26579:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26463:167::o;22773:523::-;20014:13;:11;:13::i;:::-;22868:15:::1;;;;;;;;;-1:-1:-1::0;;;;;22868:15:0::1;-1:-1:-1::0;;;;;22868:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22850:69:0::1;;22928:4;22935:15;;;;;;;;;-1:-1:-1::0;;;;;22935:15:0::1;-1:-1:-1::0;;;;;22935:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22850:108;::::0;-1:-1:-1;;;;;;22850:108:0::1;::::0;;;;;;-1:-1:-1;;;;;8639:15:1;;;22850:108:0::1;::::0;::::1;8621:34:1::0;8691:15;;8671:18;;;8664:43;8556:18;;22850:108:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22834:13;:124:::0;;-1:-1:-1;;;;;;22834:124:0::1;-1:-1:-1::0;;;;;22834:124:0;;::::1;;::::0;;23006:4:::1;-1:-1:-1::0;8137:18:0;;;-1:-1:-1;8137:18:0;;;;;;23055:15:::1;::::0;8137:18;;23023:57:::1;::::0;23006:4;23055:15:::1;8137:18:::0;23023:8:::1;:57::i;:::-;23092:15;::::0;:196:::1;::::0;-1:-1:-1;;;23092:196:0;;23164:4:::1;23092:196;::::0;::::1;9059:34:1::0;9109:18;;;9102:34;;;23092:15:0::1;9152:18:1::0;;;9145:34;;;9195:18;;;9188:34;23237:10:0::1;9238:19:1::0;;;9231:44;23262:15:0::1;9291:19:1::0;;;9284:35;-1:-1:-1;;;;;23092:15:0;;::::1;::::0;:31:::1;::::0;23131:9:::1;::::0;8993:19:1;;23092:196:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8625:151::-:0;-1:-1:-1;;;;;8741:18:0;;;8714:7;8741:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8625:151::o;21027:201::-;20014:13;:11;:13::i;:::-;-1:-1:-1;;;;;21116:22:0;::::1;21108:73;;;::::0;-1:-1:-1;;;21108:73:0;;9843:2:1;21108:73:0::1;::::0;::::1;9825:21:1::0;9882:2;9862:18;;;9855:30;9921:34;9901:18;;;9894:62;-1:-1:-1;;;9972:18:1;;;9965:36;10018:19;;21108:73:0::1;9641:402:1::0;21108:73:0::1;21192:28;21211:8;21192:18;:28::i;20293:132::-:0;20174:7;20201:6;-1:-1:-1;;;;;20201:6:0;4454:10;20357:23;20349:68;;;;-1:-1:-1;;;20349:68:0;;10250:2:1;20349:68:0;;;10232:21:1;;;10269:18;;;10262:30;10328:34;10308:18;;;10301:62;10380:18;;20349:68:0;10048:356:1;15281:346:0;-1:-1:-1;;;;;15383:19:0;;15375:68;;;;-1:-1:-1;;;15375:68:0;;10611:2:1;15375:68:0;;;10593:21:1;10650:2;10630:18;;;10623:30;10689:34;10669:18;;;10662:62;-1:-1:-1;;;10740:18:1;;;10733:34;10784:19;;15375:68:0;10409:400:1;15375:68:0;-1:-1:-1;;;;;15462:21:0;;15454:68;;;;-1:-1:-1;;;15454:68:0;;11016:2:1;15454:68:0;;;10998:21:1;11055:2;11035:18;;;11028:30;11094:34;11074:18;;;11067:62;-1:-1:-1;;;11145:18:1;;;11138:32;11187:19;;15454:68:0;10814:398:1;15454:68:0;-1:-1:-1;;;;;15535:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15587:32;;1596:25:1;;;15587:32:0;;1569:18:1;15587:32:0;;;;;;;;15281:346;;;:::o;15918:419::-;16019:24;16046:25;16056:5;16063:7;16046:9;:25::i;:::-;16019:52;;-1:-1:-1;;16086:16:0;:37;16082:248;;16168:6;16148:16;:26;;16140:68;;;;-1:-1:-1;;;16140:68:0;;11419:2:1;16140:68:0;;;11401:21:1;11458:2;11438:18;;;11431:30;11497:31;11477:18;;;11470:59;11546:18;;16140:68:0;11217:353:1;16140:68:0;16252:51;16261:5;16268:7;16296:6;16277:16;:25;16252:8;:51::i;23305:1975::-;-1:-1:-1;;;;;23437:18:0;;23429:68;;;;-1:-1:-1;;;23429:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23516:16:0;;23508:64;;;;-1:-1:-1;;;23508:64:0;;;;;;;:::i;:::-;23600:1;23591:6;:10;23583:61;;;;-1:-1:-1;;;23583:61:0;;12587:2:1;23583:61:0;;;12569:21:1;12626:2;12606:18;;;12599:30;12665:34;12645:18;;;12638:62;-1:-1:-1;;;12716:18:1;;;12709:36;12762:19;;23583:61:0;12385:402:1;23583:61:0;23662:6;;-1:-1:-1;;;23662:6:0;;;;23658:163;;;20174:7;20201:6;-1:-1:-1;;;;;23711:15:0;;;20201:6;;23711:15;;:40;;-1:-1:-1;;;;;;23730:21:0;;23746:4;23730:21;23711:40;23685:124;;;;-1:-1:-1;;;23685:124:0;;12994:2:1;23685:124:0;;;12976:21:1;13033:2;13013:18;;;13006:30;-1:-1:-1;;;13052:18:1;;;13045:52;13114:18;;23685:124:0;12792:346:1;23685:124:0;23839:7;;;;:32;;;;-1:-1:-1;23858:13:0;;-1:-1:-1;;;;;23850:21:0;;;23858:13;;23850:21;23839:32;23835:126;;;23922:16;;23912:6;23896:13;23906:2;-1:-1:-1;;;;;8137:18:0;8110:7;8137:18;;;:9;:18;;;;;;;8036:127;23896:13;:22;;;;:::i;:::-;:42;;23888:61;;;;-1:-1:-1;;;23888:61:0;;13345:2:1;23888:61:0;;;13327:21:1;13384:1;13364:18;;;13357:29;-1:-1:-1;;;13402:18:1;;;13395:36;13448:18;;23888:61:0;13143:329:1;23888:61:0;24006:12;;23974:17;;24006:12;;;;;24002:976;;;24066:13;;-1:-1:-1;;;;;24058:21:0;;;24066:13;;24058:21;:43;;;;-1:-1:-1;24083:13:0;;:18;;24058:43;24054:198;;;-1:-1:-1;;;;;24127:23:0;;;;;;:19;:23;;;;;;;;24122:115;;24214:3;24197:13;;24188:6;:22;;;;:::i;:::-;24187:30;;;;:::i;:::-;24175:42;;24122:115;24297:13;;-1:-1:-1;;;;;24291:19:0;;;24297:13;;24291:19;:42;;;;-1:-1:-1;24314:14:0;;:19;;24291:42;24287:200;;;-1:-1:-1;;;;;24359:25:0;;;;;;:19;:25;;;;;;;;24354:118;;24449:3;24431:14;;24422:6;:23;;;;:::i;:::-;24421:31;;;;:::i;:::-;24409:43;;24354:118;-1:-1:-1;;;;;24505:21:0;;24519:6;24505:21;:48;;;;-1:-1:-1;24538:15:0;;-1:-1:-1;;;;;24530:23:0;;;24538:15;;24530:23;24505:48;24501:148;;;24586:13;;24574:34;;-1:-1:-1;;;;;24586:13:0;24601:6;24574:11;:34::i;24501:148::-;24712:4;24663:28;8137:18;;;:9;:18;;;;;;24784:20;;24760:44;;;;;;;24826:53;;;24859:20;;24849:6;:30;;24826:53;:70;;;;-1:-1:-1;24884:12:0;;-1:-1:-1;;;24884:12:0;;;;24883:13;24826:70;:93;;;;-1:-1:-1;24906:13:0;;-1:-1:-1;;;;;24900:19:0;;;24906:13;;24900:19;24826:93;24822:145;;;24940:11;:9;:11::i;:::-;24020:958;;24002:976;25012:13;;25008:265;;25042:18;25063;25072:9;25063:6;:18;:::i;:::-;25042:39;;25096:47;25112:4;25126;25133:9;25096:15;:47::i;:::-;25158:37;25174:4;25180:2;25184:10;25158:15;:37::i;:::-;25027:180;25008:265;;;25228:33;25244:4;25250:2;25254:6;25228:15;:33::i;14168:675::-;-1:-1:-1;;;;;14252:21:0;;14244:67;;;;-1:-1:-1;;;14244:67:0;;14207:2:1;14244:67:0;;;14189:21:1;14246:2;14226:18;;;14219:30;14285:34;14265:18;;;14258:62;-1:-1:-1;;;14336:18:1;;;14329:31;14377:19;;14244:67:0;14005:397:1;14244:67:0;-1:-1:-1;;;;;14411:18:0;;14386:22;14411:18;;;:9;:18;;;;;;14448:24;;;;14440:71;;;;-1:-1:-1;;;14440:71:0;;14609:2:1;14440:71:0;;;14591:21:1;14648:2;14628:18;;;14621:30;14687:34;14667:18;;;14660:62;-1:-1:-1;;;14738:18:1;;;14731:32;14780:19;;14440:71:0;14407:398:1;14440:71:0;-1:-1:-1;;;;;14547:18:0;;;;;;:9;:18;;;;;;;;14568:23;;;14547:44;;14686:12;:22;;;;;;;14737:37;1596:25:1;;;14547:18:0;;;14737:37;;1569:18:1;14737:37:0;1450:177:1;21388:191:0;21462:16;21481:6;;-1:-1:-1;;;;;21498:17:0;;;-1:-1:-1;;;;;;21498:17:0;;;;;;21531:40;;21481:6;;;;;;;21531:40;;21462:16;21531:40;21451:128;21388:191;:::o;25289:819::-;22140:12;:19;;-1:-1:-1;;;;22140:19:0;-1:-1:-1;;;22140:19:0;;;25426:16:::1;::::0;;25440:1:::1;25426:16:::0;;;;;::::1;::::0;;-1:-1:-1;;25426:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;25426:16:0::1;25402:40;;25471:4;25453;25458:1;25453:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25453:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;25497:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;25497:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;25453:7;;25497:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25487:4;25492:1;25487:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25487:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;25591:15:::1;::::0;25532:125:::1;::::0;25563:4:::1;::::0;25591:15:::1;25622:24;25563:4:::0;-1:-1:-1;;;;;8137:18:0;8110:7;8137:18;;;:9;:18;;;;;;;8036:127;25532:125:::1;25696:15;::::0;-1:-1:-1;;;;;25696:15:0::1;:66;25777:24;25795:4;-1:-1:-1::0;;;;;8137:18:0;8110:7;8137:18;;;:9;:18;;;;;;;8036:127;25777:24:::1;25816:1;25860:4;25887;25953:15;25696:283;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;26058:15:0::1;::::0;26050:50:::1;::::0;26018:21:::1;::::0;-1:-1:-1;;;;;;26058:15:0;;::::1;::::0;-1:-1:-1;26050:50:0;::::1;;;::::0;26018:21;;25992:23:::1;26050:50:::0;25992:23;26050:50;26018:21;26058:15;26050:50;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;22182:12:0;:20;;-1:-1:-1;;;;22182:20:0;;;-1:-1:-1;25289:819:0:o;12194:806::-;-1:-1:-1;;;;;12291:18:0;;12283:68;;;;-1:-1:-1;;;12283:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12370:16:0;;12362:64;;;;-1:-1:-1;;;12362:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12512:15:0;;12490:19;12512:15;;;:9;:15;;;;;;12546:21;;;;12538:72;;;;-1:-1:-1;;;12538:72:0;;15997:2:1;12538:72:0;;;15979:21:1;16036:2;16016:18;;;16009:30;16075:34;16055:18;;;16048:62;-1:-1:-1;;;16126:18:1;;;16119:36;16172:19;;12538:72:0;15795:402:1;12538:72:0;-1:-1:-1;;;;;12646:15:0;;;;;;;:9;:15;;;;;;12664:20;;;12646:38;;12864:13;;;;;;;;;;:23;;;;;;12916:26;;;;;;12678:6;1596:25:1;;1584:2;1569:18;;1450:177;12916:26:0;;;;;;;;12955:37;14168:675;14:548:1;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1632:456::-;1709:6;1717;1725;1778:2;1766:9;1757:7;1753:23;1749:32;1746:52;;;1794:1;1791;1784:12;1746:52;1833:9;1820:23;1852:31;1877:5;1852:31;:::i;:::-;1902:5;-1:-1:-1;1959:2:1;1944:18;;1931:32;1972:33;1931:32;1972:33;:::i;:::-;1632:456;;2024:7;;-1:-1:-1;;;2078:2:1;2063:18;;;;2050:32;;1632:456::o;2282:180::-;2341:6;2394:2;2382:9;2373:7;2369:23;2365:32;2362:52;;;2410:1;2407;2400:12;2362:52;-1:-1:-1;2433:23:1;;2282:180;-1:-1:-1;2282:180:1:o;2675:127::-;2736:10;2731:3;2727:20;2724:1;2717:31;2767:4;2764:1;2757:15;2791:4;2788:1;2781:15;2807:275;2878:2;2872:9;2943:2;2924:13;;-1:-1:-1;;2920:27:1;2908:40;;2978:18;2963:34;;2999:22;;;2960:62;2957:88;;;3025:18;;:::i;:::-;3061:2;3054:22;2807:275;;-1:-1:-1;2807:275:1:o;3087:183::-;3147:4;3180:18;3172:6;3169:30;3166:56;;;3202:18;;:::i;:::-;-1:-1:-1;3247:1:1;3243:14;3259:4;3239:25;;3087:183::o;3275:662::-;3329:5;3382:3;3375:4;3367:6;3363:17;3359:27;3349:55;;3400:1;3397;3390:12;3349:55;3436:6;3423:20;3462:4;3486:60;3502:43;3542:2;3502:43;:::i;:::-;3486:60;:::i;:::-;3580:15;;;3666:1;3662:10;;;;3650:23;;3646:32;;;3611:12;;;;3690:15;;;3687:35;;;3718:1;3715;3708:12;3687:35;3754:2;3746:6;3742:15;3766:142;3782:6;3777:3;3774:15;3766:142;;;3848:17;;3836:30;;3886:12;;;;3799;;3766:142;;;-1:-1:-1;3926:5:1;3275:662;-1:-1:-1;;;;;;3275:662:1:o;3942:1215::-;4060:6;4068;4121:2;4109:9;4100:7;4096:23;4092:32;4089:52;;;4137:1;4134;4127:12;4089:52;4177:9;4164:23;4206:18;4247:2;4239:6;4236:14;4233:34;;;4263:1;4260;4253:12;4233:34;4301:6;4290:9;4286:22;4276:32;;4346:7;4339:4;4335:2;4331:13;4327:27;4317:55;;4368:1;4365;4358:12;4317:55;4404:2;4391:16;4426:4;4450:60;4466:43;4506:2;4466:43;:::i;4450:60::-;4544:15;;;4626:1;4622:10;;;;4614:19;;4610:28;;;4575:12;;;;4650:19;;;4647:39;;;4682:1;4679;4672:12;4647:39;4706:11;;;;4726:217;4742:6;4737:3;4734:15;4726:217;;;4822:3;4809:17;4839:31;4864:5;4839:31;:::i;:::-;4883:18;;4759:12;;;;4921;;;;4726:217;;;4962:5;-1:-1:-1;;5005:18:1;;4992:32;;-1:-1:-1;;5036:16:1;;;5033:36;;;5065:1;5062;5055:12;5033:36;;5088:63;5143:7;5132:8;5121:9;5117:24;5088:63;:::i;:::-;5078:73;;;3942:1215;;;;;:::o;5162:247::-;5221:6;5274:2;5262:9;5253:7;5249:23;5245:32;5242:52;;;5290:1;5287;5280:12;5242:52;5329:9;5316:23;5348:31;5373:5;5348:31;:::i;:::-;5398:5;5162:247;-1:-1:-1;;;5162:247:1:o;5414:248::-;5482:6;5490;5543:2;5531:9;5522:7;5518:23;5514:32;5511:52;;;5559:1;5556;5549:12;5511:52;-1:-1:-1;;5582:23:1;;;5652:2;5637:18;;;5624:32;;-1:-1:-1;5414:248:1:o;5667:416::-;5732:6;5740;5793:2;5781:9;5772:7;5768:23;5764:32;5761:52;;;5809:1;5806;5799:12;5761:52;5848:9;5835:23;5867:31;5892:5;5867:31;:::i;:::-;5917:5;-1:-1:-1;5974:2:1;5959:18;;5946:32;6016:15;;6009:23;5997:36;;5987:64;;6047:1;6044;6037:12;5987:64;6070:7;6060:17;;;5667:416;;;;;:::o;6088:388::-;6156:6;6164;6217:2;6205:9;6196:7;6192:23;6188:32;6185:52;;;6233:1;6230;6223:12;6185:52;6272:9;6259:23;6291:31;6316:5;6291:31;:::i;:::-;6341:5;-1:-1:-1;6398:2:1;6383:18;;6370:32;6411:33;6370:32;6411:33;:::i;6481:380::-;6560:1;6556:12;;;;6603;;;6624:61;;6678:4;6670:6;6666:17;6656:27;;6624:61;6731:2;6723:6;6720:14;6700:18;6697:38;6694:161;;6777:10;6772:3;6768:20;6765:1;6758:31;6812:4;6809:1;6802:15;6840:4;6837:1;6830:15;6694:161;;6481:380;;;:::o;6866:127::-;6927:10;6922:3;6918:20;6915:1;6908:31;6958:4;6955:1;6948:15;6982:4;6979:1;6972:15;6998:125;7063:9;;;7084:10;;;7081:36;;;7097:18;;:::i;7475:127::-;7536:10;7531:3;7527:20;7524:1;7517:31;7567:4;7564:1;7557:15;7591:4;7588:1;7581:15;7607:135;7646:3;7667:17;;;7664:43;;7687:18;;:::i;:::-;-1:-1:-1;7734:1:1;7723:13;;7607:135::o;8153:251::-;8223:6;8276:2;8264:9;8255:7;8251:23;8247:32;8244:52;;;8292:1;8289;8282:12;8244:52;8324:9;8318:16;8343:31;8368:5;8343:31;:::i;9330:306::-;9418:6;9426;9434;9487:2;9475:9;9466:7;9462:23;9458:32;9455:52;;;9503:1;9500;9493:12;9455:52;9532:9;9526:16;9516:26;;9582:2;9571:9;9567:18;9561:25;9551:35;;9626:2;9615:9;9611:18;9605:25;9595:35;;9330:306;;;;;:::o;11575:401::-;11777:2;11759:21;;;11816:2;11796:18;;;11789:30;11855:34;11850:2;11835:18;;11828:62;-1:-1:-1;;;11921:2:1;11906:18;;11899:35;11966:3;11951:19;;11575:401::o;11981:399::-;12183:2;12165:21;;;12222:2;12202:18;;;12195:30;12261:34;12256:2;12241:18;;12234:62;-1:-1:-1;;;12327:2:1;12312:18;;12305:33;12370:3;12355:19;;11981:399::o;13477:168::-;13550:9;;;13581;;13598:15;;;13592:22;;13578:37;13568:71;;13619:18;;:::i;13650:217::-;13690:1;13716;13706:132;;13760:10;13755:3;13751:20;13748:1;13741:31;13795:4;13792:1;13785:15;13823:4;13820:1;13813:15;13706:132;-1:-1:-1;13852:9:1;;13650:217::o;13872:128::-;13939:9;;;13960:11;;;13957:37;;;13974:18;;:::i;14810:980::-;15072:4;15120:3;15109:9;15105:19;15151:6;15140:9;15133:25;15177:2;15215:6;15210:2;15199:9;15195:18;15188:34;15258:3;15253:2;15242:9;15238:18;15231:31;15282:6;15317;15311:13;15348:6;15340;15333:22;15386:3;15375:9;15371:19;15364:26;;15425:2;15417:6;15413:15;15399:29;;15446:1;15456:195;15470:6;15467:1;15464:13;15456:195;;;15535:13;;-1:-1:-1;;;;;15531:39:1;15519:52;;15626:15;;;;15591:12;;;;15567:1;15485:9;15456:195;;;-1:-1:-1;;;;;;;15707:32:1;;;;15702:2;15687:18;;15680:60;-1:-1:-1;;;15771:3:1;15756:19;15749:35;15668:3;14810:980;-1:-1:-1;;;14810:980:1:o

Swarm Source

ipfs://137dcef7a1128fa024ac4c4b5a25b3067ffb665e8d56d82f40f8c4e36d84d9ea
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.