ETH Price: $3,283.99 (+1.66%)
 

Overview

Max Total Supply

100,000,000 MORON

Holders

37

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
MORON

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-10
*/

// 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/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.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 anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing 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);
    }
}

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


// OpenZeppelin Contracts (last updated v4.6.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/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.8.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].
 *
 * 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}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * 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 value {ERC20} uses, unless this function is
     * 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: contracts/moron.sol


pragma solidity ^0.8.9;


 
contract MORON is ERC20, Ownable {
    IUniswapV2Router02 public uniswapV2Router;
    uint256 maxTx = 2;
    uint256 maxWallet = 2;
    uint256 marketingTax = 3;
    uint256 public numTokensToExchangeForMarketing = 400000 * 10 ** 18;
    address public uniswapV2Pair;
    address public marketingWallet = 0x2C2B67DA089ff278Cd8aAEBd7C6F5DeFAD2A153c;
    bool inSwapAndSend;
    bool public SwapAndSendEnabled = true;
 
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedFromMaxTxLimit;
    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
 
    modifier lockTheSwap() {
        inSwapAndSend = true;
        _;
        inSwapAndSend = false;
    }
 
    receive() external payable {}
 
    constructor() ERC20("MORON", "MORON") {
        _mint(msg.sender, 100000000 * 10 ** decimals());
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
 
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
 
        _isExcludedFromMaxWalletLimit[msg.sender] = true;
        _isExcludedFromMaxWalletLimit[uniswapV2Pair] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[marketingWallet] = true;
 
        _isExcludedFromMaxTxLimit[msg.sender] = true;
        _isExcludedFromMaxTxLimit[address(this)] = true;
        _isExcludedFromMaxTxLimit[marketingWallet] = true;
        _isExcludedFromMaxTxLimit[uniswapV2Pair] = true;
 
        _isExcludedFromFees[msg.sender] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[marketingWallet] = true;
        _isExcludedFromFees[uniswapV2Pair] = true;
    }
 
    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");
 
        uint256 maxTxAmount = (totalSupply() * maxTx) / 100;
        uint256 maxWalletAmount = (totalSupply() * maxWallet) / 100;
        uint256 taxAmount;
 
        if (from == uniswapV2Pair) {
            //Buy
            if (!_isExcludedFromMaxTxLimit[to]) {
                require(amount <= maxTxAmount, "Amount over max tx");
            }
            if (!_isExcludedFromMaxWalletLimit[to]) {
                require(
                    balanceOf(to) + amount <= maxWalletAmount,
                    "Max wallet in effect"
                );
            }
            if (!_isExcludedFromFees[to])
                taxAmount = (amount * marketingTax) / 100;
        }
 
        if (to == uniswapV2Pair) {
            //Sell
            if (!_isExcludedFromMaxTxLimit[from]) {
                require(amount <= maxTxAmount, "Amount over max tx");
            }
            if (!_isExcludedFromFees[from])
                taxAmount = (amount * marketingTax) / 100;
        }
 
        if (to != uniswapV2Pair && from != uniswapV2Pair) {
            if (!_isExcludedFromFees[to] || !_isExcludedFromFees[from]) {
                require(
                    balanceOf(to) + amount <= maxWalletAmount,
                    "Max wallet in effect"
                );
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinTokenBalance = contractTokenBalance >=
            numTokensToExchangeForMarketing;
 
        if (contractTokenBalance >= numTokensToExchangeForMarketing) {
            contractTokenBalance = numTokensToExchangeForMarketing;
        }
 
        if (
            overMinTokenBalance &&
            !inSwapAndSend &&
            from != uniswapV2Pair &&
            SwapAndSendEnabled
        ) {
            SwapAndSend(contractTokenBalance);
        }
 
        // 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 SwapAndSend(uint256 contractTokenBalance) private 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), contractTokenBalance);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            contractTokenBalance,
            0, // accept any amount of ETH
            path,
            marketingWallet,
            block.timestamp
        );
    }
 
    // Setters
    function excludeFromFees(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromFees[account] = excluded;
    }
 
    function setExcludedFromMaxTransactionLimit(
        address account,
        bool exclude
    ) external onlyOwner {
        require(
            _isExcludedFromMaxTxLimit[account] != exclude,
            "Account is already set to that state"
        );
        _isExcludedFromMaxTxLimit[account] = exclude;
    }
 
    function setMaxTx(uint256 _newFee) external onlyOwner {
        maxTx = _newFee;
    }
 
    function setMaxWallet(uint256 _newMaxWallet) external onlyOwner {
        maxWallet = _newMaxWallet;
    }
 
    function setMarketingTax(uint256 _newTax) external onlyOwner {
        marketingTax = _newTax;
    }
 
    function setSwapAndSendEnabled(bool activate) external onlyOwner {
        SwapAndSendEnabled = activate;
    }
 
    function setNumTokensToExchangeForMarketing(
        uint256 _newAmount
    ) external onlyOwner {
        numTokensToExchangeForMarketing = _newAmount;
    }
}
 
// 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":[],"name":"SwapAndSendEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"account","type":"address"},{"internalType":"bool","name":"excluded","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":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensToExchangeForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"setExcludedFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTax","type":"uint256"}],"name":"setMarketingTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxWallet","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setNumTokensToExchangeForMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"activate","type":"bool"}],"name":"setSwapAndSendEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526002600755600260085560036009556954b40b1f852bda000000600a55732c2b67da089ff278cd8aaebd7c6f5defad2a153c600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60156101000a81548160ff0219169083151502179055503480156200009e57600080fd5b506040518060400160405280600581526020017f4d4f524f4e0000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4d4f524f4e00000000000000000000000000000000000000000000000000000081525081600390816200011c919062000d51565b5080600490816200012e919062000d51565b50505062000151620001456200088960201b60201c565b6200089160201b60201c565b6200019133620001666200095760201b60201c565b600a62000174919062000fc8565b6305f5e10062000185919062001019565b6200096060201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021e9190620010ce565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000286573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ac9190620010ce565b6040518363ffffffff1660e01b8152600401620002cb92919062001111565b6020604051808303816000875af1158015620002eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003119190620010ce565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050506200122a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009c9906200119f565b60405180910390fd5b620009e66000838362000acd60201b60201c565b8060026000828254620009fa9190620011c1565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000aad91906200120d565b60405180910390a362000ac96000838362000ad260201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b5957607f821691505b60208210810362000b6f5762000b6e62000b11565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000bd97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b9a565b62000be5868362000b9a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c3262000c2c62000c268462000bfd565b62000c07565b62000bfd565b9050919050565b6000819050919050565b62000c4e8362000c11565b62000c6662000c5d8262000c39565b84845462000ba7565b825550505050565b600090565b62000c7d62000c6e565b62000c8a81848462000c43565b505050565b5b8181101562000cb25762000ca660008262000c73565b60018101905062000c90565b5050565b601f82111562000d015762000ccb8162000b75565b62000cd68462000b8a565b8101602085101562000ce6578190505b62000cfe62000cf58562000b8a565b83018262000c8f565b50505b505050565b600082821c905092915050565b600062000d266000198460080262000d06565b1980831691505092915050565b600062000d41838362000d13565b9150826002028217905092915050565b62000d5c8262000ad7565b67ffffffffffffffff81111562000d785762000d7762000ae2565b5b62000d84825462000b40565b62000d9182828562000cb6565b600060209050601f83116001811462000dc9576000841562000db4578287015190505b62000dc0858262000d33565b86555062000e30565b601f19841662000dd98662000b75565b60005b8281101562000e035784890151825560018201915060208501945060208101905062000ddc565b8683101562000e23578489015162000e1f601f89168262000d13565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000ec65780860481111562000e9e5762000e9d62000e38565b5b600185161562000eae5780820291505b808102905062000ebe8562000e67565b945062000e7e565b94509492505050565b60008262000ee1576001905062000fb4565b8162000ef1576000905062000fb4565b816001811462000f0a576002811462000f155762000f4b565b600191505062000fb4565b60ff84111562000f2a5762000f2962000e38565b5b8360020a91508482111562000f445762000f4362000e38565b5b5062000fb4565b5060208310610133831016604e8410600b841016171562000f855782820a90508381111562000f7f5762000f7e62000e38565b5b62000fb4565b62000f94848484600162000e74565b9250905081840481111562000fae5762000fad62000e38565b5b81810290505b9392505050565b600060ff82169050919050565b600062000fd58262000bfd565b915062000fe28362000fbb565b9250620010117fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ecf565b905092915050565b6000620010268262000bfd565b9150620010338362000bfd565b9250828202620010438162000bfd565b915082820484148315176200105d576200105c62000e38565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010968262001069565b9050919050565b620010a88162001089565b8114620010b457600080fd5b50565b600081519050620010c8816200109d565b92915050565b600060208284031215620010e757620010e662001064565b5b6000620010f784828501620010b7565b91505092915050565b6200110b8162001089565b82525050565b600060408201905062001128600083018562001100565b62001137602083018462001100565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001187601f836200113e565b915062001194826200114f565b602082019050919050565b60006020820190508181036000830152620011ba8162001178565b9050919050565b6000620011ce8262000bfd565b9150620011db8362000bfd565b9250828201905080821115620011f657620011f562000e38565b5b92915050565b620012078162000bfd565b82525050565b6000602082019050620012246000830184620011fc565b92915050565b612bf2806200123a6000396000f3fe6080604052600436106101855760003560e01c806370a08231116100d1578063a38644301161008a578063bc33718211610064578063bc33718214610591578063c0246668146105ba578063dd62ed3e146105e3578063f2fde38b146106205761018c565b8063a3864430146104ec578063a457c2d714610517578063a9059cbb146105545761018c565b806370a08231146103ec578063715018a61461042957806375f0a874146104405780638da5cb5b1461046b57806395d89b4114610496578063a062e3ba146104c15761018c565b80632663236f1161013e5780633dee3b7a116101185780633dee3b7a1461034657806349bd5a5e1461036f5780634a827cee1461039a5780635d0044ca146103c35761018c565b80632663236f146102b5578063313ce567146102de57806339509351146103095761018c565b806306fdde0314610191578063095ea7b3146101bc5780630ebaaa7e146101f95780631694505e1461022257806318160ddd1461024d57806323b872dd146102785761018c565b3661018c57005b600080fd5b34801561019d57600080fd5b506101a6610649565b6040516101b39190611da2565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190611e5d565b6106db565b6040516101f09190611eb8565b60405180910390f35b34801561020557600080fd5b50610220600480360381019061021b9190611eff565b6106fe565b005b34801561022e57600080fd5b506102376107f3565b6040516102449190611f9e565b60405180910390f35b34801561025957600080fd5b50610262610819565b60405161026f9190611fc8565b60405180910390f35b34801561028457600080fd5b5061029f600480360381019061029a9190611fe3565b610823565b6040516102ac9190611eb8565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d79190612036565b610852565b005b3480156102ea57600080fd5b506102f3610877565b604051610300919061207f565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b9190611e5d565b610880565b60405161033d9190611eb8565b60405180910390f35b34801561035257600080fd5b5061036d6004803603810190610368919061209a565b6108b7565b005b34801561037b57600080fd5b506103846108c9565b60405161039191906120d6565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc919061209a565b6108ef565b005b3480156103cf57600080fd5b506103ea60048036038101906103e5919061209a565b610901565b005b3480156103f857600080fd5b50610413600480360381019061040e91906120f1565b610913565b6040516104209190611fc8565b60405180910390f35b34801561043557600080fd5b5061043e61095b565b005b34801561044c57600080fd5b5061045561096f565b60405161046291906120d6565b60405180910390f35b34801561047757600080fd5b50610480610995565b60405161048d91906120d6565b60405180910390f35b3480156104a257600080fd5b506104ab6109bf565b6040516104b89190611da2565b60405180910390f35b3480156104cd57600080fd5b506104d6610a51565b6040516104e39190611eb8565b60405180910390f35b3480156104f857600080fd5b50610501610a64565b60405161050e9190611fc8565b60405180910390f35b34801561052357600080fd5b5061053e60048036038101906105399190611e5d565b610a6a565b60405161054b9190611eb8565b60405180910390f35b34801561056057600080fd5b5061057b60048036038101906105769190611e5d565b610ae1565b6040516105889190611eb8565b60405180910390f35b34801561059d57600080fd5b506105b860048036038101906105b3919061209a565b610b04565b005b3480156105c657600080fd5b506105e160048036038101906105dc9190611eff565b610b16565b005b3480156105ef57600080fd5b5061060a6004803603810190610605919061211e565b610c0b565b6040516106179190611fc8565b60405180910390f35b34801561062c57600080fd5b50610647600480360381019061064291906120f1565b610c92565b005b6060600380546106589061218d565b80601f01602080910402602001604051908101604052809291908181526020018280546106849061218d565b80156106d15780601f106106a6576101008083540402835291602001916106d1565b820191906000526020600020905b8154815290600101906020018083116106b457829003601f168201915b5050505050905090565b6000806106e6610d15565b90506106f3818585610d1d565b600191505092915050565b610706610ee6565b801515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f90612230565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60008061082e610d15565b905061083b858285610f64565b610846858585610ff0565b60019150509392505050565b61085a610ee6565b80600c60156101000a81548160ff02191690831515021790555050565b60006012905090565b60008061088b610d15565b90506108ac81858561089d8589610c0b565b6108a7919061227f565b610d1d565b600191505092915050565b6108bf610ee6565b80600a8190555050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108f7610ee6565b8060098190555050565b610909610ee6565b8060088190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610963610ee6565b61096d6000611731565b565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546109ce9061218d565b80601f01602080910402602001604051908101604052809291908181526020018280546109fa9061218d565b8015610a475780601f10610a1c57610100808354040283529160200191610a47565b820191906000526020600020905b815481529060010190602001808311610a2a57829003601f168201915b5050505050905090565b600c60159054906101000a900460ff1681565b600a5481565b600080610a75610d15565b90506000610a838286610c0b565b905083811015610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf90612325565b60405180910390fd5b610ad58286868403610d1d565b60019250505092915050565b600080610aec610d15565b9050610af9818585610ff0565b600191505092915050565b610b0c610ee6565b8060078190555050565b610b1e610ee6565b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba7906123b7565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610c9a610ee6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0090612449565b60405180910390fd5b610d1281611731565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d83906124db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df29061256d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610ed99190611fc8565b60405180910390a3505050565b610eee610d15565b73ffffffffffffffffffffffffffffffffffffffff16610f0c610995565b73ffffffffffffffffffffffffffffffffffffffff1614610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f59906125d9565b60405180910390fd5b565b6000610f708484610c0b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610fea5781811015610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd390612645565b60405180910390fd5b610fe98484848403610d1d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361105f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611056906126d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c590612769565b60405180910390fd5b600060646007546110dd610819565b6110e79190612789565b6110f191906127fa565b905060006064600854611102610819565b61110c9190612789565b61111691906127fa565b90506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361131b57600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112045782841115611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa90612877565b60405180910390fd5b5b600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112ac57818461126087610913565b61126a919061227f565b11156112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a2906128e3565b60405180910390fd5b5b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661131a5760646009548561130d9190612789565b61131791906127fa565b90505b5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361147457600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114055782841115611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb90612877565b60405180910390fd5b5b600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611473576064600954856114669190612789565b61147091906127fa565b90505b5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156115205750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b1561162557600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615806115c85750600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156116245781846115d887610913565b6115e2919061227f565b1115611623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161a906128e3565b60405180910390fd5b5b5b600061163030610913565b90506000600a548210159050600a54821061164b57600a5491505b8080156116655750600c60149054906101000a900460ff16155b80156116bf5750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b80156116d75750600c60159054906101000a900460ff165b156116e6576116e5826117f7565b5b600083111561171b57600083876116fd9190612903565b905061170a893086611a92565b611715898983611a92565b50611727565b611726888888611a92565b5b5050505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001600c60146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561182f5761182e612937565b5b60405190808252806020026020018201604052801561185d5781602001602082028036833780820191505090505b509050308160008151811061187557611874612966565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561191c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194091906129aa565b8160018151811061195457611953612966565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506119bb30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610d1d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611a41959493929190612ad0565b600060405180830381600087803b158015611a5b57600080fd5b505af1158015611a6f573d6000803e3d6000fd5b50505050506000600c60146101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af8906126d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6790612769565b60405180910390fd5b611b7b838383611d08565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf890612b9c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cef9190611fc8565b60405180910390a3611d02848484611d0d565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611d4c578082015181840152602081019050611d31565b60008484015250505050565b6000601f19601f8301169050919050565b6000611d7482611d12565b611d7e8185611d1d565b9350611d8e818560208601611d2e565b611d9781611d58565b840191505092915050565b60006020820190508181036000830152611dbc8184611d69565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611df482611dc9565b9050919050565b611e0481611de9565b8114611e0f57600080fd5b50565b600081359050611e2181611dfb565b92915050565b6000819050919050565b611e3a81611e27565b8114611e4557600080fd5b50565b600081359050611e5781611e31565b92915050565b60008060408385031215611e7457611e73611dc4565b5b6000611e8285828601611e12565b9250506020611e9385828601611e48565b9150509250929050565b60008115159050919050565b611eb281611e9d565b82525050565b6000602082019050611ecd6000830184611ea9565b92915050565b611edc81611e9d565b8114611ee757600080fd5b50565b600081359050611ef981611ed3565b92915050565b60008060408385031215611f1657611f15611dc4565b5b6000611f2485828601611e12565b9250506020611f3585828601611eea565b9150509250929050565b6000819050919050565b6000611f64611f5f611f5a84611dc9565b611f3f565b611dc9565b9050919050565b6000611f7682611f49565b9050919050565b6000611f8882611f6b565b9050919050565b611f9881611f7d565b82525050565b6000602082019050611fb36000830184611f8f565b92915050565b611fc281611e27565b82525050565b6000602082019050611fdd6000830184611fb9565b92915050565b600080600060608486031215611ffc57611ffb611dc4565b5b600061200a86828701611e12565b935050602061201b86828701611e12565b925050604061202c86828701611e48565b9150509250925092565b60006020828403121561204c5761204b611dc4565b5b600061205a84828501611eea565b91505092915050565b600060ff82169050919050565b61207981612063565b82525050565b60006020820190506120946000830184612070565b92915050565b6000602082840312156120b0576120af611dc4565b5b60006120be84828501611e48565b91505092915050565b6120d081611de9565b82525050565b60006020820190506120eb60008301846120c7565b92915050565b60006020828403121561210757612106611dc4565b5b600061211584828501611e12565b91505092915050565b6000806040838503121561213557612134611dc4565b5b600061214385828601611e12565b925050602061215485828601611e12565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806121a557607f821691505b6020821081036121b8576121b761215e565b5b50919050565b7f4163636f756e7420697320616c72656164792073657420746f2074686174207360008201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b600061221a602483611d1d565b9150612225826121be565b604082019050919050565b600060208201905081810360008301526122498161220d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061228a82611e27565b915061229583611e27565b92508282019050808211156122ad576122ac612250565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061230f602583611d1d565b915061231a826122b3565b604082019050919050565b6000602082019050818103600083015261233e81612302565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006123a1602a83611d1d565b91506123ac82612345565b604082019050919050565b600060208201905081810360008301526123d081612394565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612433602683611d1d565b915061243e826123d7565b604082019050919050565b6000602082019050818103600083015261246281612426565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006124c5602483611d1d565b91506124d082612469565b604082019050919050565b600060208201905081810360008301526124f4816124b8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612557602283611d1d565b9150612562826124fb565b604082019050919050565b600060208201905081810360008301526125868161254a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006125c3602083611d1d565b91506125ce8261258d565b602082019050919050565b600060208201905081810360008301526125f2816125b6565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061262f601d83611d1d565b915061263a826125f9565b602082019050919050565b6000602082019050818103600083015261265e81612622565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006126c1602583611d1d565b91506126cc82612665565b604082019050919050565b600060208201905081810360008301526126f0816126b4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612753602383611d1d565b915061275e826126f7565b604082019050919050565b6000602082019050818103600083015261278281612746565b9050919050565b600061279482611e27565b915061279f83611e27565b92508282026127ad81611e27565b915082820484148315176127c4576127c3612250565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061280582611e27565b915061281083611e27565b9250826128205761281f6127cb565b5b828204905092915050565b7f416d6f756e74206f766572206d61782074780000000000000000000000000000600082015250565b6000612861601283611d1d565b915061286c8261282b565b602082019050919050565b6000602082019050818103600083015261289081612854565b9050919050565b7f4d61782077616c6c657420696e20656666656374000000000000000000000000600082015250565b60006128cd601483611d1d565b91506128d882612897565b602082019050919050565b600060208201905081810360008301526128fc816128c0565b9050919050565b600061290e82611e27565b915061291983611e27565b925082820390508181111561293157612930612250565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506129a481611dfb565b92915050565b6000602082840312156129c0576129bf611dc4565b5b60006129ce84828501612995565b91505092915050565b6000819050919050565b60006129fc6129f76129f2846129d7565b611f3f565b611e27565b9050919050565b612a0c816129e1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612a4781611de9565b82525050565b6000612a598383612a3e565b60208301905092915050565b6000602082019050919050565b6000612a7d82612a12565b612a878185612a1d565b9350612a9283612a2e565b8060005b83811015612ac3578151612aaa8882612a4d565b9750612ab583612a65565b925050600181019050612a96565b5085935050505092915050565b600060a082019050612ae56000830188611fb9565b612af26020830187612a03565b8181036040830152612b048186612a72565b9050612b1360608301856120c7565b612b206080830184611fb9565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612b86602683611d1d565b9150612b9182612b2a565b604082019050919050565b60006020820190508181036000830152612bb581612b79565b905091905056fea264697066735822122010a7e82c021978cbf0c58d39d7c5d919fa5716580974381ad693278b7dc9add164736f6c63430008120033

Deployed Bytecode

0x6080604052600436106101855760003560e01c806370a08231116100d1578063a38644301161008a578063bc33718211610064578063bc33718214610591578063c0246668146105ba578063dd62ed3e146105e3578063f2fde38b146106205761018c565b8063a3864430146104ec578063a457c2d714610517578063a9059cbb146105545761018c565b806370a08231146103ec578063715018a61461042957806375f0a874146104405780638da5cb5b1461046b57806395d89b4114610496578063a062e3ba146104c15761018c565b80632663236f1161013e5780633dee3b7a116101185780633dee3b7a1461034657806349bd5a5e1461036f5780634a827cee1461039a5780635d0044ca146103c35761018c565b80632663236f146102b5578063313ce567146102de57806339509351146103095761018c565b806306fdde0314610191578063095ea7b3146101bc5780630ebaaa7e146101f95780631694505e1461022257806318160ddd1461024d57806323b872dd146102785761018c565b3661018c57005b600080fd5b34801561019d57600080fd5b506101a6610649565b6040516101b39190611da2565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190611e5d565b6106db565b6040516101f09190611eb8565b60405180910390f35b34801561020557600080fd5b50610220600480360381019061021b9190611eff565b6106fe565b005b34801561022e57600080fd5b506102376107f3565b6040516102449190611f9e565b60405180910390f35b34801561025957600080fd5b50610262610819565b60405161026f9190611fc8565b60405180910390f35b34801561028457600080fd5b5061029f600480360381019061029a9190611fe3565b610823565b6040516102ac9190611eb8565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d79190612036565b610852565b005b3480156102ea57600080fd5b506102f3610877565b604051610300919061207f565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b9190611e5d565b610880565b60405161033d9190611eb8565b60405180910390f35b34801561035257600080fd5b5061036d6004803603810190610368919061209a565b6108b7565b005b34801561037b57600080fd5b506103846108c9565b60405161039191906120d6565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc919061209a565b6108ef565b005b3480156103cf57600080fd5b506103ea60048036038101906103e5919061209a565b610901565b005b3480156103f857600080fd5b50610413600480360381019061040e91906120f1565b610913565b6040516104209190611fc8565b60405180910390f35b34801561043557600080fd5b5061043e61095b565b005b34801561044c57600080fd5b5061045561096f565b60405161046291906120d6565b60405180910390f35b34801561047757600080fd5b50610480610995565b60405161048d91906120d6565b60405180910390f35b3480156104a257600080fd5b506104ab6109bf565b6040516104b89190611da2565b60405180910390f35b3480156104cd57600080fd5b506104d6610a51565b6040516104e39190611eb8565b60405180910390f35b3480156104f857600080fd5b50610501610a64565b60405161050e9190611fc8565b60405180910390f35b34801561052357600080fd5b5061053e60048036038101906105399190611e5d565b610a6a565b60405161054b9190611eb8565b60405180910390f35b34801561056057600080fd5b5061057b60048036038101906105769190611e5d565b610ae1565b6040516105889190611eb8565b60405180910390f35b34801561059d57600080fd5b506105b860048036038101906105b3919061209a565b610b04565b005b3480156105c657600080fd5b506105e160048036038101906105dc9190611eff565b610b16565b005b3480156105ef57600080fd5b5061060a6004803603810190610605919061211e565b610c0b565b6040516106179190611fc8565b60405180910390f35b34801561062c57600080fd5b50610647600480360381019061064291906120f1565b610c92565b005b6060600380546106589061218d565b80601f01602080910402602001604051908101604052809291908181526020018280546106849061218d565b80156106d15780601f106106a6576101008083540402835291602001916106d1565b820191906000526020600020905b8154815290600101906020018083116106b457829003601f168201915b5050505050905090565b6000806106e6610d15565b90506106f3818585610d1d565b600191505092915050565b610706610ee6565b801515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f90612230565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60008061082e610d15565b905061083b858285610f64565b610846858585610ff0565b60019150509392505050565b61085a610ee6565b80600c60156101000a81548160ff02191690831515021790555050565b60006012905090565b60008061088b610d15565b90506108ac81858561089d8589610c0b565b6108a7919061227f565b610d1d565b600191505092915050565b6108bf610ee6565b80600a8190555050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108f7610ee6565b8060098190555050565b610909610ee6565b8060088190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610963610ee6565b61096d6000611731565b565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546109ce9061218d565b80601f01602080910402602001604051908101604052809291908181526020018280546109fa9061218d565b8015610a475780601f10610a1c57610100808354040283529160200191610a47565b820191906000526020600020905b815481529060010190602001808311610a2a57829003601f168201915b5050505050905090565b600c60159054906101000a900460ff1681565b600a5481565b600080610a75610d15565b90506000610a838286610c0b565b905083811015610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf90612325565b60405180910390fd5b610ad58286868403610d1d565b60019250505092915050565b600080610aec610d15565b9050610af9818585610ff0565b600191505092915050565b610b0c610ee6565b8060078190555050565b610b1e610ee6565b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba7906123b7565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610c9a610ee6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0090612449565b60405180910390fd5b610d1281611731565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d83906124db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df29061256d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610ed99190611fc8565b60405180910390a3505050565b610eee610d15565b73ffffffffffffffffffffffffffffffffffffffff16610f0c610995565b73ffffffffffffffffffffffffffffffffffffffff1614610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f59906125d9565b60405180910390fd5b565b6000610f708484610c0b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610fea5781811015610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd390612645565b60405180910390fd5b610fe98484848403610d1d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361105f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611056906126d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c590612769565b60405180910390fd5b600060646007546110dd610819565b6110e79190612789565b6110f191906127fa565b905060006064600854611102610819565b61110c9190612789565b61111691906127fa565b90506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361131b57600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112045782841115611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa90612877565b60405180910390fd5b5b600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112ac57818461126087610913565b61126a919061227f565b11156112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a2906128e3565b60405180910390fd5b5b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661131a5760646009548561130d9190612789565b61131791906127fa565b90505b5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361147457600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114055782841115611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb90612877565b60405180910390fd5b5b600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611473576064600954856114669190612789565b61147091906127fa565b90505b5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156115205750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b1561162557600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615806115c85750600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156116245781846115d887610913565b6115e2919061227f565b1115611623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161a906128e3565b60405180910390fd5b5b5b600061163030610913565b90506000600a548210159050600a54821061164b57600a5491505b8080156116655750600c60149054906101000a900460ff16155b80156116bf5750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b80156116d75750600c60159054906101000a900460ff165b156116e6576116e5826117f7565b5b600083111561171b57600083876116fd9190612903565b905061170a893086611a92565b611715898983611a92565b50611727565b611726888888611a92565b5b5050505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001600c60146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561182f5761182e612937565b5b60405190808252806020026020018201604052801561185d5781602001602082028036833780820191505090505b509050308160008151811061187557611874612966565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561191c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194091906129aa565b8160018151811061195457611953612966565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506119bb30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610d1d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611a41959493929190612ad0565b600060405180830381600087803b158015611a5b57600080fd5b505af1158015611a6f573d6000803e3d6000fd5b50505050506000600c60146101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af8906126d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6790612769565b60405180910390fd5b611b7b838383611d08565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf890612b9c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cef9190611fc8565b60405180910390a3611d02848484611d0d565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611d4c578082015181840152602081019050611d31565b60008484015250505050565b6000601f19601f8301169050919050565b6000611d7482611d12565b611d7e8185611d1d565b9350611d8e818560208601611d2e565b611d9781611d58565b840191505092915050565b60006020820190508181036000830152611dbc8184611d69565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611df482611dc9565b9050919050565b611e0481611de9565b8114611e0f57600080fd5b50565b600081359050611e2181611dfb565b92915050565b6000819050919050565b611e3a81611e27565b8114611e4557600080fd5b50565b600081359050611e5781611e31565b92915050565b60008060408385031215611e7457611e73611dc4565b5b6000611e8285828601611e12565b9250506020611e9385828601611e48565b9150509250929050565b60008115159050919050565b611eb281611e9d565b82525050565b6000602082019050611ecd6000830184611ea9565b92915050565b611edc81611e9d565b8114611ee757600080fd5b50565b600081359050611ef981611ed3565b92915050565b60008060408385031215611f1657611f15611dc4565b5b6000611f2485828601611e12565b9250506020611f3585828601611eea565b9150509250929050565b6000819050919050565b6000611f64611f5f611f5a84611dc9565b611f3f565b611dc9565b9050919050565b6000611f7682611f49565b9050919050565b6000611f8882611f6b565b9050919050565b611f9881611f7d565b82525050565b6000602082019050611fb36000830184611f8f565b92915050565b611fc281611e27565b82525050565b6000602082019050611fdd6000830184611fb9565b92915050565b600080600060608486031215611ffc57611ffb611dc4565b5b600061200a86828701611e12565b935050602061201b86828701611e12565b925050604061202c86828701611e48565b9150509250925092565b60006020828403121561204c5761204b611dc4565b5b600061205a84828501611eea565b91505092915050565b600060ff82169050919050565b61207981612063565b82525050565b60006020820190506120946000830184612070565b92915050565b6000602082840312156120b0576120af611dc4565b5b60006120be84828501611e48565b91505092915050565b6120d081611de9565b82525050565b60006020820190506120eb60008301846120c7565b92915050565b60006020828403121561210757612106611dc4565b5b600061211584828501611e12565b91505092915050565b6000806040838503121561213557612134611dc4565b5b600061214385828601611e12565b925050602061215485828601611e12565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806121a557607f821691505b6020821081036121b8576121b761215e565b5b50919050565b7f4163636f756e7420697320616c72656164792073657420746f2074686174207360008201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b600061221a602483611d1d565b9150612225826121be565b604082019050919050565b600060208201905081810360008301526122498161220d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061228a82611e27565b915061229583611e27565b92508282019050808211156122ad576122ac612250565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061230f602583611d1d565b915061231a826122b3565b604082019050919050565b6000602082019050818103600083015261233e81612302565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006123a1602a83611d1d565b91506123ac82612345565b604082019050919050565b600060208201905081810360008301526123d081612394565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612433602683611d1d565b915061243e826123d7565b604082019050919050565b6000602082019050818103600083015261246281612426565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006124c5602483611d1d565b91506124d082612469565b604082019050919050565b600060208201905081810360008301526124f4816124b8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612557602283611d1d565b9150612562826124fb565b604082019050919050565b600060208201905081810360008301526125868161254a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006125c3602083611d1d565b91506125ce8261258d565b602082019050919050565b600060208201905081810360008301526125f2816125b6565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061262f601d83611d1d565b915061263a826125f9565b602082019050919050565b6000602082019050818103600083015261265e81612622565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006126c1602583611d1d565b91506126cc82612665565b604082019050919050565b600060208201905081810360008301526126f0816126b4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612753602383611d1d565b915061275e826126f7565b604082019050919050565b6000602082019050818103600083015261278281612746565b9050919050565b600061279482611e27565b915061279f83611e27565b92508282026127ad81611e27565b915082820484148315176127c4576127c3612250565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061280582611e27565b915061281083611e27565b9250826128205761281f6127cb565b5b828204905092915050565b7f416d6f756e74206f766572206d61782074780000000000000000000000000000600082015250565b6000612861601283611d1d565b915061286c8261282b565b602082019050919050565b6000602082019050818103600083015261289081612854565b9050919050565b7f4d61782077616c6c657420696e20656666656374000000000000000000000000600082015250565b60006128cd601483611d1d565b91506128d882612897565b602082019050919050565b600060208201905081810360008301526128fc816128c0565b9050919050565b600061290e82611e27565b915061291983611e27565b925082820390508181111561293157612930612250565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506129a481611dfb565b92915050565b6000602082840312156129c0576129bf611dc4565b5b60006129ce84828501612995565b91505092915050565b6000819050919050565b60006129fc6129f76129f2846129d7565b611f3f565b611e27565b9050919050565b612a0c816129e1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612a4781611de9565b82525050565b6000612a598383612a3e565b60208301905092915050565b6000602082019050919050565b6000612a7d82612a12565b612a878185612a1d565b9350612a9283612a2e565b8060005b83811015612ac3578151612aaa8882612a4d565b9750612ab583612a65565b925050600181019050612a96565b5085935050505092915050565b600060a082019050612ae56000830188611fb9565b612af26020830187612a03565b8181036040830152612b048186612a72565b9050612b1360608301856120c7565b612b206080830184611fb9565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612b86602683611d1d565b9150612b9182612b2a565b604082019050919050565b60006020820190508181036000830152612bb581612b79565b905091905056fea264697066735822122010a7e82c021978cbf0c58d39d7c5d919fa5716580974381ad693278b7dc9add164736f6c63430008120033

Deployed Bytecode Sourcemap

20605:6386:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9351:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11702:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26046:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20645:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10471:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12483:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26704:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10313:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13187:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26826:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20849:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26593:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26476:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10642:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2776:103;;;;;;;;;;;;;:::i;:::-;;20884:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2128:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9570:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20991:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20776:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13928:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10975:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26379:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25735:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11231:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3034:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9351:100;9405:13;9438:5;9431:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9351:100;:::o;11702:201::-;11785:4;11802:13;11818:12;:10;:12::i;:::-;11802:28;;11841:32;11850:5;11857:7;11866:6;11841:8;:32::i;:::-;11891:4;11884:11;;;11702:201;;;;:::o;26046:324::-;2014:13;:11;:13::i;:::-;26236:7:::1;26198:45;;:25;:34;26224:7;26198:34;;;;;;;;;;;;;;;;;;;;;;;;;:45;;::::0;26176:131:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26355:7;26318:25;:34;26344:7;26318:34;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;26046:324:::0;;:::o;20645:41::-;;;;;;;;;;;;;:::o;10471:108::-;10532:7;10559:12;;10552:19;;10471:108;:::o;12483:295::-;12614:4;12631:15;12649:12;:10;:12::i;:::-;12631:30;;12672:38;12688:4;12694:7;12703:6;12672:15;:38::i;:::-;12721:27;12731:4;12737:2;12741:6;12721:9;:27::i;:::-;12766:4;12759:11;;;12483:295;;;;;:::o;26704:113::-;2014:13;:11;:13::i;:::-;26801:8:::1;26780:18;;:29;;;;;;;;;;;;;;;;;;26704:113:::0;:::o;10313:93::-;10371:5;10396:2;10389:9;;10313:93;:::o;13187:238::-;13275:4;13292:13;13308:12;:10;:12::i;:::-;13292:28;;13331:64;13340:5;13347:7;13384:10;13356:25;13366:5;13373:7;13356:9;:25::i;:::-;:38;;;;:::i;:::-;13331:8;:64::i;:::-;13413:4;13406:11;;;13187:238;;;;:::o;26826:162::-;2014:13;:11;:13::i;:::-;26970:10:::1;26936:31;:44;;;;26826:162:::0;:::o;20849:28::-;;;;;;;;;;;;;:::o;26593:102::-;2014:13;:11;:13::i;:::-;26680:7:::1;26665:12;:22;;;;26593:102:::0;:::o;26476:108::-;2014:13;:11;:13::i;:::-;26563::::1;26551:9;:25;;;;26476:108:::0;:::o;10642:127::-;10716:7;10743:9;:18;10753:7;10743:18;;;;;;;;;;;;;;;;10736:25;;10642:127;;;:::o;2776:103::-;2014:13;:11;:13::i;:::-;2841:30:::1;2868:1;2841:18;:30::i;:::-;2776:103::o:0;20884:75::-;;;;;;;;;;;;;:::o;2128:87::-;2174:7;2201:6;;;;;;;;;;;2194:13;;2128:87;:::o;9570:104::-;9626:13;9659:7;9652:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9570:104;:::o;20991:37::-;;;;;;;;;;;;;:::o;20776:66::-;;;;:::o;13928:436::-;14021:4;14038:13;14054:12;:10;:12::i;:::-;14038:28;;14077:24;14104:25;14114:5;14121:7;14104:9;:25::i;:::-;14077:52;;14168:15;14148:16;:35;;14140:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14261:60;14270:5;14277:7;14305:15;14286:16;:34;14261:8;:60::i;:::-;14352:4;14345:11;;;;13928:436;;;;:::o;10975:193::-;11054:4;11071:13;11087:12;:10;:12::i;:::-;11071:28;;11110;11120:5;11127:2;11131:6;11110:9;:28::i;:::-;11156:4;11149:11;;;10975:193;;;;:::o;26379:88::-;2014:13;:11;:13::i;:::-;26452:7:::1;26444:5;:15;;;;26379:88:::0;:::o;25735:302::-;2014:13;:11;:13::i;:::-;25901:8:::1;25869:40;;:19;:28;25889:7;25869:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;25847:132:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26021:8;25990:19;:28;26010:7;25990:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25735:302:::0;;:::o;11231:151::-;11320:7;11347:11;:18;11359:5;11347:18;;;;;;;;;;;;;;;:27;11366:7;11347:27;;;;;;;;;;;;;;;;11340:34;;11231:151;;;;:::o;3034:201::-;2014:13;:11;:13::i;:::-;3143:1:::1;3123:22;;:8;:22;;::::0;3115:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3199:28;3218:8;3199:18;:28::i;:::-;3034:201:::0;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;17955:380::-;18108:1;18091:19;;:5;:19;;;18083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18189:1;18170:21;;:7;:21;;;18162:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18273:6;18243:11;:18;18255:5;18243:18;;;;;;;;;;;;;;;:27;18262:7;18243:27;;;;;;;;;;;;;;;:36;;;;18311:7;18295:32;;18304:5;18295:32;;;18320:6;18295:32;;;;;;:::i;:::-;;;;;;;;17955:380;;;:::o;2293:132::-;2368:12;:10;:12::i;:::-;2357:23;;:7;:5;:7::i;:::-;:23;;;2349:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2293:132::o;18626:453::-;18761:24;18788:25;18798:5;18805:7;18788:9;:25::i;:::-;18761:52;;18848:17;18828:16;:37;18824:248;;18910:6;18890:16;:26;;18882:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18994:51;19003:5;19010:7;19038:6;19019:16;:25;18994:8;:51::i;:::-;18824:248;18750:329;18626:453;;;:::o;22617:2457::-;22765:1;22749:18;;:4;:18;;;22741:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22842:1;22828:16;;:2;:16;;;22820:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22898:19;22946:3;22937:5;;22921:13;:11;:13::i;:::-;:21;;;;:::i;:::-;22920:29;;;;:::i;:::-;22898:51;;22960:23;23016:3;23003:9;;22987:13;:11;:13::i;:::-;:25;;;;:::i;:::-;22986:33;;;;:::i;:::-;22960:59;;23030:17;23073:13;;;;;;;;;;;23065:21;;:4;:21;;;23061:522;;23127:25;:29;23153:2;23127:29;;;;;;;;;;;;;;;;;;;;;;;;;23122:123;;23195:11;23185:6;:21;;23177:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;23122:123;23264:29;:33;23294:2;23264:33;;;;;;;;;;;;;;;;;;;;;;;;;23259:210;;23374:15;23364:6;23348:13;23358:2;23348:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;23318:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;23259:210;23488:19;:23;23508:2;23488:23;;;;;;;;;;;;;;;;;;;;;;;;;23483:88;;23568:3;23552:12;;23543:6;:21;;;;:::i;:::-;23542:29;;;;:::i;:::-;23530:41;;23483:88;23061:522;23606:13;;;;;;;;;;;23600:19;;:2;:19;;;23596:301;;23661:25;:31;23687:4;23661:31;;;;;;;;;;;;;;;;;;;;;;;;;23656:125;;23731:11;23721:6;:21;;23713:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;23656:125;23800:19;:25;23820:4;23800:25;;;;;;;;;;;;;;;;;;;;;;;;;23795:90;;23882:3;23866:12;;23857:6;:21;;;;:::i;:::-;23856:29;;;;:::i;:::-;23844:41;;23795:90;23596:301;23920:13;;;;;;;;;;;23914:19;;:2;:19;;;;:44;;;;;23945:13;;;;;;;;;;;23937:21;;:4;:21;;;;23914:44;23910:306;;;23980:19;:23;24000:2;23980:23;;;;;;;;;;;;;;;;;;;;;;;;;23979:24;:54;;;;24008:19;:25;24028:4;24008:25;;;;;;;;;;;;;;;;;;;;;;;;;24007:26;23979:54;23975:230;;;24110:15;24100:6;24084:13;24094:2;24084:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;24054:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;23975:230;23910:306;24229:28;24260:24;24278:4;24260:9;:24::i;:::-;24229:55;;24295:24;24359:31;;24322:20;:68;;24295:95;;24432:31;;24408:20;:55;24404:142;;24503:31;;24480:54;;24404:142;24577:19;:50;;;;;24614:13;;;;;;;;;;;24613:14;24577:50;:88;;;;;24652:13;;;;;;;;;;;24644:21;;:4;:21;;;;24577:88;:123;;;;;24682:18;;;;;;;;;;;24577:123;24559:213;;;24727:33;24739:20;24727:11;:33::i;:::-;24559:213;24818:1;24806:9;:13;24802:265;;;24836:18;24866:9;24857:6;:18;;;;:::i;:::-;24836:39;;24890:47;24906:4;24920;24927:9;24890:15;:47::i;:::-;24952:37;24968:4;24974:2;24978:10;24952:15;:37::i;:::-;24821:180;24802:265;;;25022:33;25038:4;25044:2;25048:6;25022:15;:33::i;:::-;24802:265;22730:2344;;;;;22617:2457;;;:::o;3395:191::-;3469:16;3488:6;;;;;;;;;;;3469:25;;3514:8;3505:6;;:17;;;;;;;;;;;;;;;;;;3569:8;3538:40;;3559:8;3538:40;;;;;;;;;;;;3458:128;3395:191;:::o;25083:627::-;21284:4;21268:13;;:20;;;;;;;;;;;;;;;;;;25225:21:::1;25263:1;25249:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25225:40;;25294:4;25276;25281:1;25276:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;25320:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25310:4;25315:1;25310:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;25356:71;25373:4;25388:15;;;;;;;;;;;25406:20;25356:8;:71::i;:::-;25467:15;;;;;;;;;;;:66;;;25548:20;25583:1;25627:4;25646:15;;;;;;;;;;;25676;25467:235;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25154:556;21327:5:::0;21311:13;;:21;;;;;;;;;;;;;;;;;;25083:627;:::o;14834:840::-;14981:1;14965:18;;:4;:18;;;14957:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15058:1;15044:16;;:2;:16;;;15036:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15113:38;15134:4;15140:2;15144:6;15113:20;:38::i;:::-;15164:19;15186:9;:15;15196:4;15186:15;;;;;;;;;;;;;;;;15164:37;;15235:6;15220:11;:21;;15212:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15352:6;15338:11;:20;15320:9;:15;15330:4;15320:15;;;;;;;;;;;;;;;:38;;;;15555:6;15538:9;:13;15548:2;15538:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15605:2;15590:26;;15599:4;15590:26;;;15609:6;15590:26;;;;;;:::i;:::-;;;;;;;;15629:37;15649:4;15655:2;15659:6;15629:19;:37::i;:::-;14946:728;14834:840;;;:::o;19679:125::-;;;;:::o;20408:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:116::-;3516:21;3531:5;3516:21;:::i;:::-;3509:5;3506:32;3496:60;;3552:1;3549;3542:12;3496:60;3446:116;:::o;3568:133::-;3611:5;3649:6;3636:20;3627:29;;3665:30;3689:5;3665:30;:::i;:::-;3568:133;;;;:::o;3707:468::-;3772:6;3780;3829:2;3817:9;3808:7;3804:23;3800:32;3797:119;;;3835:79;;:::i;:::-;3797:119;3955:1;3980:53;4025:7;4016:6;4005:9;4001:22;3980:53;:::i;:::-;3970:63;;3926:117;4082:2;4108:50;4150:7;4141:6;4130:9;4126:22;4108:50;:::i;:::-;4098:60;;4053:115;3707:468;;;;;:::o;4181:60::-;4209:3;4230:5;4223:12;;4181:60;;;:::o;4247:142::-;4297:9;4330:53;4348:34;4357:24;4375:5;4357:24;:::i;:::-;4348:34;:::i;:::-;4330:53;:::i;:::-;4317:66;;4247:142;;;:::o;4395:126::-;4445:9;4478:37;4509:5;4478:37;:::i;:::-;4465:50;;4395:126;;;:::o;4527:153::-;4604:9;4637:37;4668:5;4637:37;:::i;:::-;4624:50;;4527:153;;;:::o;4686:185::-;4800:64;4858:5;4800:64;:::i;:::-;4795:3;4788:77;4686:185;;:::o;4877:276::-;4997:4;5035:2;5024:9;5020:18;5012:26;;5048:98;5143:1;5132:9;5128:17;5119:6;5048:98;:::i;:::-;4877:276;;;;:::o;5159:118::-;5246:24;5264:5;5246:24;:::i;:::-;5241:3;5234:37;5159:118;;:::o;5283:222::-;5376:4;5414:2;5403:9;5399:18;5391:26;;5427:71;5495:1;5484:9;5480:17;5471:6;5427:71;:::i;:::-;5283:222;;;;:::o;5511:619::-;5588:6;5596;5604;5653:2;5641:9;5632:7;5628:23;5624:32;5621:119;;;5659:79;;:::i;:::-;5621:119;5779:1;5804:53;5849:7;5840:6;5829:9;5825:22;5804:53;:::i;:::-;5794:63;;5750:117;5906:2;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5877:118;6034:2;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6005:118;5511:619;;;;;:::o;6136:323::-;6192:6;6241:2;6229:9;6220:7;6216:23;6212:32;6209:119;;;6247:79;;:::i;:::-;6209:119;6367:1;6392:50;6434:7;6425:6;6414:9;6410:22;6392:50;:::i;:::-;6382:60;;6338:114;6136:323;;;;:::o;6465:86::-;6500:7;6540:4;6533:5;6529:16;6518:27;;6465:86;;;:::o;6557:112::-;6640:22;6656:5;6640:22;:::i;:::-;6635:3;6628:35;6557:112;;:::o;6675:214::-;6764:4;6802:2;6791:9;6787:18;6779:26;;6815:67;6879:1;6868:9;6864:17;6855:6;6815:67;:::i;:::-;6675:214;;;;:::o;6895:329::-;6954:6;7003:2;6991:9;6982:7;6978:23;6974:32;6971:119;;;7009:79;;:::i;:::-;6971:119;7129:1;7154:53;7199:7;7190:6;7179:9;7175:22;7154:53;:::i;:::-;7144:63;;7100:117;6895:329;;;;:::o;7230:118::-;7317:24;7335:5;7317:24;:::i;:::-;7312:3;7305:37;7230:118;;:::o;7354:222::-;7447:4;7485:2;7474:9;7470:18;7462:26;;7498:71;7566:1;7555:9;7551:17;7542:6;7498:71;:::i;:::-;7354:222;;;;:::o;7582:329::-;7641:6;7690:2;7678:9;7669:7;7665:23;7661:32;7658:119;;;7696:79;;:::i;:::-;7658:119;7816:1;7841:53;7886:7;7877:6;7866:9;7862:22;7841:53;:::i;:::-;7831:63;;7787:117;7582:329;;;;:::o;7917:474::-;7985:6;7993;8042:2;8030:9;8021:7;8017:23;8013:32;8010:119;;;8048:79;;:::i;:::-;8010:119;8168:1;8193:53;8238:7;8229:6;8218:9;8214:22;8193:53;:::i;:::-;8183:63;;8139:117;8295:2;8321:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8266:118;7917:474;;;;;:::o;8397:180::-;8445:77;8442:1;8435:88;8542:4;8539:1;8532:15;8566:4;8563:1;8556:15;8583:320;8627:6;8664:1;8658:4;8654:12;8644:22;;8711:1;8705:4;8701:12;8732:18;8722:81;;8788:4;8780:6;8776:17;8766:27;;8722:81;8850:2;8842:6;8839:14;8819:18;8816:38;8813:84;;8869:18;;:::i;:::-;8813:84;8634:269;8583:320;;;:::o;8909:223::-;9049:34;9045:1;9037:6;9033:14;9026:58;9118:6;9113:2;9105:6;9101:15;9094:31;8909:223;:::o;9138:366::-;9280:3;9301:67;9365:2;9360:3;9301:67;:::i;:::-;9294:74;;9377:93;9466:3;9377:93;:::i;:::-;9495:2;9490:3;9486:12;9479:19;;9138:366;;;:::o;9510:419::-;9676:4;9714:2;9703:9;9699:18;9691:26;;9763:9;9757:4;9753:20;9749:1;9738:9;9734:17;9727:47;9791:131;9917:4;9791:131;:::i;:::-;9783:139;;9510:419;;;:::o;9935:180::-;9983:77;9980:1;9973:88;10080:4;10077:1;10070:15;10104:4;10101:1;10094:15;10121:191;10161:3;10180:20;10198:1;10180:20;:::i;:::-;10175:25;;10214:20;10232:1;10214:20;:::i;:::-;10209:25;;10257:1;10254;10250:9;10243:16;;10278:3;10275:1;10272:10;10269:36;;;10285:18;;:::i;:::-;10269:36;10121:191;;;;:::o;10318:224::-;10458:34;10454:1;10446:6;10442:14;10435:58;10527:7;10522:2;10514:6;10510:15;10503:32;10318:224;:::o;10548:366::-;10690:3;10711:67;10775:2;10770:3;10711:67;:::i;:::-;10704:74;;10787:93;10876:3;10787:93;:::i;:::-;10905:2;10900:3;10896:12;10889:19;;10548:366;;;:::o;10920:419::-;11086:4;11124:2;11113:9;11109:18;11101:26;;11173:9;11167:4;11163:20;11159:1;11148:9;11144:17;11137:47;11201:131;11327:4;11201:131;:::i;:::-;11193:139;;10920:419;;;:::o;11345:229::-;11485:34;11481:1;11473:6;11469:14;11462:58;11554:12;11549:2;11541:6;11537:15;11530:37;11345:229;:::o;11580:366::-;11722:3;11743:67;11807:2;11802:3;11743:67;:::i;:::-;11736:74;;11819:93;11908:3;11819:93;:::i;:::-;11937:2;11932:3;11928:12;11921:19;;11580:366;;;:::o;11952:419::-;12118:4;12156:2;12145:9;12141:18;12133:26;;12205:9;12199:4;12195:20;12191:1;12180:9;12176:17;12169:47;12233:131;12359:4;12233:131;:::i;:::-;12225:139;;11952:419;;;:::o;12377:225::-;12517:34;12513:1;12505:6;12501:14;12494:58;12586:8;12581:2;12573:6;12569:15;12562:33;12377:225;:::o;12608:366::-;12750:3;12771:67;12835:2;12830:3;12771:67;:::i;:::-;12764:74;;12847:93;12936:3;12847:93;:::i;:::-;12965:2;12960:3;12956:12;12949:19;;12608:366;;;:::o;12980:419::-;13146:4;13184:2;13173:9;13169:18;13161:26;;13233:9;13227:4;13223:20;13219:1;13208:9;13204:17;13197:47;13261:131;13387:4;13261:131;:::i;:::-;13253:139;;12980:419;;;:::o;13405:223::-;13545:34;13541:1;13533:6;13529:14;13522:58;13614:6;13609:2;13601:6;13597:15;13590:31;13405:223;:::o;13634:366::-;13776:3;13797:67;13861:2;13856:3;13797:67;:::i;:::-;13790:74;;13873:93;13962:3;13873:93;:::i;:::-;13991:2;13986:3;13982:12;13975:19;;13634:366;;;:::o;14006:419::-;14172:4;14210:2;14199:9;14195:18;14187:26;;14259:9;14253:4;14249:20;14245:1;14234:9;14230:17;14223:47;14287:131;14413:4;14287:131;:::i;:::-;14279:139;;14006:419;;;:::o;14431:221::-;14571:34;14567:1;14559:6;14555:14;14548:58;14640:4;14635:2;14627:6;14623:15;14616:29;14431:221;:::o;14658:366::-;14800:3;14821:67;14885:2;14880:3;14821:67;:::i;:::-;14814:74;;14897:93;14986:3;14897:93;:::i;:::-;15015:2;15010:3;15006:12;14999:19;;14658:366;;;:::o;15030:419::-;15196:4;15234:2;15223:9;15219:18;15211:26;;15283:9;15277:4;15273:20;15269:1;15258:9;15254:17;15247:47;15311:131;15437:4;15311:131;:::i;:::-;15303:139;;15030:419;;;:::o;15455:182::-;15595:34;15591:1;15583:6;15579:14;15572:58;15455:182;:::o;15643:366::-;15785:3;15806:67;15870:2;15865:3;15806:67;:::i;:::-;15799:74;;15882:93;15971:3;15882:93;:::i;:::-;16000:2;15995:3;15991:12;15984:19;;15643:366;;;:::o;16015:419::-;16181:4;16219:2;16208:9;16204:18;16196:26;;16268:9;16262:4;16258:20;16254:1;16243:9;16239:17;16232:47;16296:131;16422:4;16296:131;:::i;:::-;16288:139;;16015:419;;;:::o;16440:179::-;16580:31;16576:1;16568:6;16564:14;16557:55;16440:179;:::o;16625:366::-;16767:3;16788:67;16852:2;16847:3;16788:67;:::i;:::-;16781:74;;16864:93;16953:3;16864:93;:::i;:::-;16982:2;16977:3;16973:12;16966:19;;16625:366;;;:::o;16997:419::-;17163:4;17201:2;17190:9;17186:18;17178:26;;17250:9;17244:4;17240:20;17236:1;17225:9;17221:17;17214:47;17278:131;17404:4;17278:131;:::i;:::-;17270:139;;16997:419;;;:::o;17422:224::-;17562:34;17558:1;17550:6;17546:14;17539:58;17631:7;17626:2;17618:6;17614:15;17607:32;17422:224;:::o;17652:366::-;17794:3;17815:67;17879:2;17874:3;17815:67;:::i;:::-;17808:74;;17891:93;17980:3;17891:93;:::i;:::-;18009:2;18004:3;18000:12;17993:19;;17652:366;;;:::o;18024:419::-;18190:4;18228:2;18217:9;18213:18;18205:26;;18277:9;18271:4;18267:20;18263:1;18252:9;18248:17;18241:47;18305:131;18431:4;18305:131;:::i;:::-;18297:139;;18024:419;;;:::o;18449:222::-;18589:34;18585:1;18577:6;18573:14;18566:58;18658:5;18653:2;18645:6;18641:15;18634:30;18449:222;:::o;18677:366::-;18819:3;18840:67;18904:2;18899:3;18840:67;:::i;:::-;18833:74;;18916:93;19005:3;18916:93;:::i;:::-;19034:2;19029:3;19025:12;19018:19;;18677:366;;;:::o;19049:419::-;19215:4;19253:2;19242:9;19238:18;19230:26;;19302:9;19296:4;19292:20;19288:1;19277:9;19273:17;19266:47;19330:131;19456:4;19330:131;:::i;:::-;19322:139;;19049:419;;;:::o;19474:410::-;19514:7;19537:20;19555:1;19537:20;:::i;:::-;19532:25;;19571:20;19589:1;19571:20;:::i;:::-;19566:25;;19626:1;19623;19619:9;19648:30;19666:11;19648:30;:::i;:::-;19637:41;;19827:1;19818:7;19814:15;19811:1;19808:22;19788:1;19781:9;19761:83;19738:139;;19857:18;;:::i;:::-;19738:139;19522:362;19474:410;;;;:::o;19890:180::-;19938:77;19935:1;19928:88;20035:4;20032:1;20025:15;20059:4;20056:1;20049:15;20076:185;20116:1;20133:20;20151:1;20133:20;:::i;:::-;20128:25;;20167:20;20185:1;20167:20;:::i;:::-;20162:25;;20206:1;20196:35;;20211:18;;:::i;:::-;20196:35;20253:1;20250;20246:9;20241:14;;20076:185;;;;:::o;20267:168::-;20407:20;20403:1;20395:6;20391:14;20384:44;20267:168;:::o;20441:366::-;20583:3;20604:67;20668:2;20663:3;20604:67;:::i;:::-;20597:74;;20680:93;20769:3;20680:93;:::i;:::-;20798:2;20793:3;20789:12;20782:19;;20441:366;;;:::o;20813:419::-;20979:4;21017:2;21006:9;21002:18;20994:26;;21066:9;21060:4;21056:20;21052:1;21041:9;21037:17;21030:47;21094:131;21220:4;21094:131;:::i;:::-;21086:139;;20813:419;;;:::o;21238:170::-;21378:22;21374:1;21366:6;21362:14;21355:46;21238:170;:::o;21414:366::-;21556:3;21577:67;21641:2;21636:3;21577:67;:::i;:::-;21570:74;;21653:93;21742:3;21653:93;:::i;:::-;21771:2;21766:3;21762:12;21755:19;;21414:366;;;:::o;21786:419::-;21952:4;21990:2;21979:9;21975:18;21967:26;;22039:9;22033:4;22029:20;22025:1;22014:9;22010:17;22003:47;22067:131;22193:4;22067:131;:::i;:::-;22059:139;;21786:419;;;:::o;22211:194::-;22251:4;22271:20;22289:1;22271:20;:::i;:::-;22266:25;;22305:20;22323:1;22305:20;:::i;:::-;22300:25;;22349:1;22346;22342:9;22334:17;;22373:1;22367:4;22364:11;22361:37;;;22378:18;;:::i;:::-;22361:37;22211:194;;;;:::o;22411:180::-;22459:77;22456:1;22449:88;22556:4;22553:1;22546:15;22580:4;22577:1;22570:15;22597:180;22645:77;22642:1;22635:88;22742:4;22739:1;22732:15;22766:4;22763:1;22756:15;22783:143;22840:5;22871:6;22865:13;22856:22;;22887:33;22914:5;22887:33;:::i;:::-;22783:143;;;;:::o;22932:351::-;23002:6;23051:2;23039:9;23030:7;23026:23;23022:32;23019:119;;;23057:79;;:::i;:::-;23019:119;23177:1;23202:64;23258:7;23249:6;23238:9;23234:22;23202:64;:::i;:::-;23192:74;;23148:128;22932:351;;;;:::o;23289:85::-;23334:7;23363:5;23352:16;;23289:85;;;:::o;23380:158::-;23438:9;23471:61;23489:42;23498:32;23524:5;23498:32;:::i;:::-;23489:42;:::i;:::-;23471:61;:::i;:::-;23458:74;;23380:158;;;:::o;23544:147::-;23639:45;23678:5;23639:45;:::i;:::-;23634:3;23627:58;23544:147;;:::o;23697:114::-;23764:6;23798:5;23792:12;23782:22;;23697:114;;;:::o;23817:184::-;23916:11;23950:6;23945:3;23938:19;23990:4;23985:3;23981:14;23966:29;;23817:184;;;;:::o;24007:132::-;24074:4;24097:3;24089:11;;24127:4;24122:3;24118:14;24110:22;;24007:132;;;:::o;24145:108::-;24222:24;24240:5;24222:24;:::i;:::-;24217:3;24210:37;24145:108;;:::o;24259:179::-;24328:10;24349:46;24391:3;24383:6;24349:46;:::i;:::-;24427:4;24422:3;24418:14;24404:28;;24259:179;;;;:::o;24444:113::-;24514:4;24546;24541:3;24537:14;24529:22;;24444:113;;;:::o;24593:732::-;24712:3;24741:54;24789:5;24741:54;:::i;:::-;24811:86;24890:6;24885:3;24811:86;:::i;:::-;24804:93;;24921:56;24971:5;24921:56;:::i;:::-;25000:7;25031:1;25016:284;25041:6;25038:1;25035:13;25016:284;;;25117:6;25111:13;25144:63;25203:3;25188:13;25144:63;:::i;:::-;25137:70;;25230:60;25283:6;25230:60;:::i;:::-;25220:70;;25076:224;25063:1;25060;25056:9;25051:14;;25016:284;;;25020:14;25316:3;25309:10;;24717:608;;;24593:732;;;;:::o;25331:831::-;25594:4;25632:3;25621:9;25617:19;25609:27;;25646:71;25714:1;25703:9;25699:17;25690:6;25646:71;:::i;:::-;25727:80;25803:2;25792:9;25788:18;25779:6;25727:80;:::i;:::-;25854:9;25848:4;25844:20;25839:2;25828:9;25824:18;25817:48;25882:108;25985:4;25976:6;25882:108;:::i;:::-;25874:116;;26000:72;26068:2;26057:9;26053:18;26044:6;26000:72;:::i;:::-;26082:73;26150:3;26139:9;26135:19;26126:6;26082:73;:::i;:::-;25331:831;;;;;;;;:::o;26168:225::-;26308:34;26304:1;26296:6;26292:14;26285:58;26377:8;26372:2;26364:6;26360:15;26353:33;26168:225;:::o;26399:366::-;26541:3;26562:67;26626:2;26621:3;26562:67;:::i;:::-;26555:74;;26638:93;26727:3;26638:93;:::i;:::-;26756:2;26751:3;26747:12;26740:19;;26399:366;;;:::o;26771:419::-;26937:4;26975:2;26964:9;26960:18;26952:26;;27024:9;27018:4;27014:20;27010:1;26999:9;26995:17;26988:47;27052:131;27178:4;27052:131;:::i;:::-;27044:139;;26771:419;;;:::o

Swarm Source

ipfs://10a7e82c021978cbf0c58d39d7c5d919fa5716580974381ad693278b7dc9add1
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.