ETH Price: $2,964.28 (-4.22%)
Gas: 1 Gwei

Token

DankestAI | dankest.ai (DANK)
 

Overview

Max Total Supply

1,000,000,000 DANK

Holders

68

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
512,963.476086140214142991 DANK

Value
$0.00
0x210f87636fc8ad5cf48a5bfc78a443f0fa3a690e
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:
Dankest

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
 * DankestAI : Created by YungPunks, Powered by Stable Diffusion. 
 *      ____              __             __  ___    ____
 *     / __ \____ _____  / /_____  _____/ /_/   |  /  _/
 *    / / / / __ `/ __ \/ //_/ _ \/ ___/ __/ /| |  / /  
 *   / /_/ / /_/ / / / / ,< /  __(__  ) /_/ ___ |_/ /   
 *  /_____/\__,_/_/ /_/_/|_|\___/____/\__/_/  |_/___/   
 *                                                   
 * Homepage: https://dankest.ai
 * Telegram: https://t.me/DankestAI
 * Twitter: twitter.com/dankestai
 * Twitter: twitter.com/yngpnks
 * Discord: https://discord.gg/ngJqMdammh
 *
 * Total Supply: 1 Billion Tokens
 * 
 * Tax: 1% to LP, 3% to Operations.
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.16;

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function allPairsLength() external view returns (uint256);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    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,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 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,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

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

/**
 * @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 decimals places of the token.
     */
    function decimals() external view returns (uint8);

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

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

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

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

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

    /**
     * @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() external view virtual override returns (uint256) {
        return _totalSupply;
    }

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

    /**
     * @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)
        external
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @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)
        external
        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
    ) external virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        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)
        external
        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 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)
        external
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

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

        _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);
    }

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

        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);
    }

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

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

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

    function _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");

        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);
    }
}

/**
 * @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 Dankest is ERC20, Ownable {
    // TOKENOMICS START ==========================================================>
    // Tokenomics - 40% LP - 30% Staking - 12.5% Community Rewards - 12.5% Marketing - 5% Team Vested
    string private _name = "DankestAI | dankest.ai";
    string private _symbol = "DANK";
    uint8 private _decimals = 18;
    uint256 private _supply = 1000000000;
    uint256 public taxForLiquidity = 1; 
    uint256 public taxForOperations = 3; 
    uint256 public maxTxAmount = 10000001 * 10**_decimals;
    uint256 public maxWalletAmount = 10000001 * 10**_decimals;
    address public marketingWallet = 0xFa0FD34a34f1952c9Dbf0cA93a39B72c6F967f73; //multi-sig
    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    uint256 public _marketingReserves = 0;
    mapping(address => bool) public _isExcludedFromFee;
    uint256 public numTokensSellToAddToLiquidity = 200000 * 10**_decimals;
    uint256 public numTokensSellToAddToETH = 100000 * 10**_decimals;

    // TOKENOMICS END ============================================================>

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwapAndLiquify;

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    /**
     * @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() ERC20(_name, _symbol) {
        _mint(msg.sender, (_supply * 10**_decimals));

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //eth mainnet
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[address(uniswapV2Router)] = true;
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[marketingWallet] = true;
    }

    // function updatePair(address _pair) external onlyOwner {
    //     require(_pair != DEAD, "LP Pair cannot be the Dead wallet, or 0!");
    //     require(_pair != address(0), "LP Pair cannot be the Dead wallet, or 0!");
    //     uniswapV2Pair = _pair;
    //     emit PairUpdated(_pair);
    // }

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

        if ((from == uniswapV2Pair || to == uniswapV2Pair) && !inSwapAndLiquify) {
            if (from != uniswapV2Pair) {
                uint256 contractLiquidityBalance = balanceOf(address(this)) - _marketingReserves;
                if (contractLiquidityBalance >= numTokensSellToAddToLiquidity) {
                    _swapAndLiquify(numTokensSellToAddToLiquidity);
                }
                if ((_marketingReserves) >= numTokensSellToAddToETH) {
                    _swapTokensForEth(numTokensSellToAddToETH);
                    _marketingReserves -= numTokensSellToAddToETH;
                    bool sent = payable(marketingWallet).send(address(this).balance);
                    require(sent, "Failed to send ETH");
                }
            }

            uint256 transferAmount;
            if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
                transferAmount = amount;
            } 
            else {
                require(amount <= maxTxAmount, "ERC20: transfer amount exceeds the max transaction amount");
                if(from == uniswapV2Pair){
                    require((amount + balanceOf(to)) <= maxWalletAmount, "ERC20: balance amount exceeded max wallet amount limit");
                }

                uint256 marketingShare = ((amount * taxForOperations) / 100);
                uint256 liquidityShare = ((amount * taxForLiquidity) / 100);
                transferAmount = amount - (marketingShare + liquidityShare);
                _marketingReserves += marketingShare;

                super._transfer(from, address(this), (marketingShare + liquidityShare));
            }
            super._transfer(from, to, transferAmount);
        } 
        else {
            super._transfer(from, to, amount);
        }
    }

    function excludeFromFee(address _address, bool _status) external onlyOwner {
        _isExcludedFromFee[_address] = _status;
        // emit ExcludedFromFeeUpdated(_address, _status);
    }

    function _swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 half = (contractTokenBalance / 2);
        uint256 otherHalf = (contractTokenBalance - half);

        uint256 initialBalance = address(this).balance;

        _swapTokensForEth(half);

        uint256 newBalance = (address(this).balance - initialBalance);

        _addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function _swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount)
        private
        lockTheSwap
    {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            marketingWallet,
            block.timestamp
        );
    }

    function changeMarketingWallet(address newWallet)
        public
        onlyOwner
        returns (bool)
    {
        require(newWallet != DEAD, "LP Pair cannot be the Dead wallet, or 0!");
        require(newWallet != address(0), "LP Pair cannot be the Dead wallet, or 0!");
        marketingWallet = newWallet;
        return true;
    }

    function changeTaxForLiquidityAndMarketing(uint256 _taxForLiquidity, uint256 _taxForOperations)
        public
        onlyOwner
        returns (bool)
    {
        require((_taxForLiquidity+_taxForOperations) <= 10, "ERC20: total tax must not be greater than 10%");
        taxForLiquidity = _taxForLiquidity;
        taxForOperations = _taxForOperations;

        return true;
    }

    function changeSwapThresholds(uint256 _numTokensSellToAddToLiquidity, uint256 _numTokensSellToAddToETH)
        public
        onlyOwner
        returns (bool)
    {
        require(_numTokensSellToAddToLiquidity < _supply / 98, "Cannot liquidate more than 2% of the supply at once!");
        require(_numTokensSellToAddToETH < _supply / 98, "Cannot liquidate more than 2% of the supply at once!");
        numTokensSellToAddToLiquidity = _numTokensSellToAddToLiquidity * 10**_decimals;
        numTokensSellToAddToETH = _numTokensSellToAddToETH * 10**_decimals;

        return true;
    }

    function changeMaxTxAmount(uint256 _maxTxAmount)
        public
        onlyOwner
        returns (bool)
    {
        maxTxAmount = _maxTxAmount;

        return true;
    }

    function changeMaxWalletAmount(uint256 _maxWalletAmount)
        public
        onlyOwner
        returns (bool)
    {
        maxWalletAmount = _maxWalletAmount;

        return true;
    }

    receive() external payable {}
}

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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","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":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"changeMaxTxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"changeMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensSellToAddToLiquidity","type":"uint256"},{"internalType":"uint256","name":"_numTokensSellToAddToETH","type":"uint256"}],"name":"changeSwapThresholds","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxForLiquidity","type":"uint256"},{"internalType":"uint256","name":"_taxForOperations","type":"uint256"}],"name":"changeTaxForLiquidityAndMarketing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"excludeFromFee","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":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"}]

60a06040526040518060400160405280601681526020017f44616e6b6573744149207c2064616e6b6573742e616900000000000000000000815250600690816200004a919062000b8b565b506040518060400160405280600481526020017f44414e4b000000000000000000000000000000000000000000000000000000008152506007908162000091919062000b8b565b506012600860006101000a81548160ff021916908360ff160217905550633b9aca006009556001600a556003600b55600860009054906101000a900460ff16600a620000de919062000e02565b62989681620000ee919062000e53565b600c55600860009054906101000a900460ff16600a6200010f919062000e02565b629896816200011f919062000e53565b600d5573fa0fd34a34f1952c9dbf0ca93a39b72c6f967f73600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601055600860009054906101000a900460ff16600a620001dd919062000e02565b62030d40620001ed919062000e53565b601255600860009054906101000a900460ff16600a6200020e919062000e02565b620186a06200021e919062000e53565b6013553480156200022e57600080fd5b50600680546200023e906200097a565b80601f01602080910402602001604051908101604052809291908181526020018280546200026c906200097a565b8015620002bd5780601f106200029157610100808354040283529160200191620002bd565b820191906000526020600020905b8154815290600101906020018083116200029f57829003601f168201915b505050505060078054620002d1906200097a565b80601f0160208091040260200160405190810160405280929190818152602001828054620002ff906200097a565b8015620003505780601f10620003245761010080835404028352916020019162000350565b820191906000526020600020905b8154815290600101906020018083116200033257829003601f168201915b5050505050816003908162000366919062000b8b565b50806004908162000378919062000b8b565b5050506200039b6200038f620006fe60201b60201c565b6200070660201b60201c565b620003d933600860009054906101000a900460ff16600a620003be919062000e02565b600954620003cd919062000e53565b620007cc60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200043e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000464919062000f1e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004f2919062000f1e565b6040518363ffffffff1660e01b81526004016200051192919062000f61565b6020604051808303816000875af115801562000531573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000557919062000f1e565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060016011600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160116000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506200107a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200083e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008359062000fef565b60405180910390fd5b806002600082825462000852919062001011565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200090591906200105d565b60405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200099357607f821691505b602082108103620009a957620009a86200094b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009d4565b62000a1f8683620009d4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a6c62000a6662000a608462000a37565b62000a41565b62000a37565b9050919050565b6000819050919050565b62000a888362000a4b565b62000aa062000a978262000a73565b848454620009e1565b825550505050565b600090565b62000ab762000aa8565b62000ac481848462000a7d565b505050565b5b8181101562000aec5762000ae060008262000aad565b60018101905062000aca565b5050565b601f82111562000b3b5762000b0581620009af565b62000b1084620009c4565b8101602085101562000b20578190505b62000b3862000b2f85620009c4565b83018262000ac9565b50505b505050565b600082821c905092915050565b600062000b606000198460080262000b40565b1980831691505092915050565b600062000b7b838362000b4d565b9150826002028217905092915050565b62000b968262000911565b67ffffffffffffffff81111562000bb25762000bb16200091c565b5b62000bbe82546200097a565b62000bcb82828562000af0565b600060209050601f83116001811462000c03576000841562000bee578287015190505b62000bfa858262000b6d565b86555062000c6a565b601f19841662000c1386620009af565b60005b8281101562000c3d5784890151825560018201915060208501945060208101905062000c16565b8683101562000c5d578489015162000c59601f89168262000b4d565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000d005780860481111562000cd85762000cd762000c72565b5b600185161562000ce85780820291505b808102905062000cf88562000ca1565b945062000cb8565b94509492505050565b60008262000d1b576001905062000dee565b8162000d2b576000905062000dee565b816001811462000d44576002811462000d4f5762000d85565b600191505062000dee565b60ff84111562000d645762000d6362000c72565b5b8360020a91508482111562000d7e5762000d7d62000c72565b5b5062000dee565b5060208310610133831016604e8410600b841016171562000dbf5782820a90508381111562000db95762000db862000c72565b5b62000dee565b62000dce848484600162000cae565b9250905081840481111562000de85762000de762000c72565b5b81810290505b9392505050565b600060ff82169050919050565b600062000e0f8262000a37565b915062000e1c8362000df5565b925062000e4b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d09565b905092915050565b600062000e608262000a37565b915062000e6d8362000a37565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000ea95762000ea862000c72565b5b828202905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ee68262000eb9565b9050919050565b62000ef88162000ed9565b811462000f0457600080fd5b50565b60008151905062000f188162000eed565b92915050565b60006020828403121562000f375762000f3662000eb4565b5b600062000f478482850162000f07565b91505092915050565b62000f5b8162000ed9565b82525050565b600060408201905062000f78600083018562000f50565b62000f87602083018462000f50565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fd7601f8362000f8e565b915062000fe48262000f9f565b602082019050919050565b600060208201905081810360008301526200100a8162000fc8565b9050919050565b60006200101e8262000a37565b91506200102b8362000a37565b925082820190508082111562001046576200104562000c72565b5b92915050565b620010578162000a37565b82525050565b60006020820190506200107460008301846200104c565b92915050565b60805161331a620010b96000396000818161090201528181611aff01528181611be001528181611c0701528181611f370152611f5e015261331a6000f3fe6080604052600436106101e75760003560e01c806381bfdcca11610102578063af8af69011610095578063dd62ed3e11610064578063dd62ed3e1461076b578063df8408fe146107a8578063f2fde38b146107d1578063f345bd85146107fa576101ee565b8063af8af6901461069b578063bb85c6d1146106d8578063c0fdea5714610715578063d12a768814610740576101ee565b8063a457c2d7116100d1578063a457c2d7146105cb578063a9059cbb14610608578063aa4bde2814610645578063ad16a0cf14610670576101ee565b806381bfdcca1461050d5780638c0b5e221461054a5780638da5cb5b1461057557806395d89b41146105a0576101ee565b8063395093511161017a57806370a082311161014957806370a0823114610451578063715018a61461048e57806375f0a874146104a5578063768dc710146104d0576101ee565b8063395093511461038157806349bd5a5e146103be57806354a32fd4146103e9578063677daa5714610414576101ee565b806318160ddd116101b657806318160ddd146102b157806323b872dd146102dc57806330b63d8014610319578063313ce56714610356576101ee565b806303fd2a45146101f357806306fdde031461021e578063095ea7b3146102495780631694505e14610286576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b50610208610825565b6040516102159190612088565b60405180910390f35b34801561022a57600080fd5b5061023361084b565b6040516102409190612133565b60405180910390f35b34801561025557600080fd5b50610270600480360381019061026b91906121bc565b6108dd565b60405161027d9190612217565b60405180910390f35b34801561029257600080fd5b5061029b610900565b6040516102a89190612291565b60405180910390f35b3480156102bd57600080fd5b506102c6610924565b6040516102d391906122bb565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe91906122d6565b61092e565b6040516103109190612217565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b9190612329565b61095d565b60405161034d9190612217565b60405180910390f35b34801561036257600080fd5b5061036b610a6b565b6040516103789190612385565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a391906121bc565b610a74565b6040516103b59190612217565b60405180910390f35b3480156103ca57600080fd5b506103d3610aab565b6040516103e09190612088565b60405180910390f35b3480156103f557600080fd5b506103fe610ad1565b60405161040b91906122bb565b60405180910390f35b34801561042057600080fd5b5061043b600480360381019061043691906123a0565b610ad7565b6040516104489190612217565b60405180910390f35b34801561045d57600080fd5b50610478600480360381019061047391906123cd565b610af1565b60405161048591906122bb565b60405180910390f35b34801561049a57600080fd5b506104a3610b39565b005b3480156104b157600080fd5b506104ba610b4d565b6040516104c79190612088565b60405180910390f35b3480156104dc57600080fd5b506104f760048036038101906104f291906123cd565b610b73565b6040516105049190612217565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f91906123a0565b610b93565b6040516105419190612217565b60405180910390f35b34801561055657600080fd5b5061055f610bad565b60405161056c91906122bb565b60405180910390f35b34801561058157600080fd5b5061058a610bb3565b6040516105979190612088565b60405180910390f35b3480156105ac57600080fd5b506105b5610bdd565b6040516105c29190612133565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed91906121bc565b610c6f565b6040516105ff9190612217565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a91906121bc565b610ce6565b60405161063c9190612217565b60405180910390f35b34801561065157600080fd5b5061065a610d09565b60405161066791906122bb565b60405180910390f35b34801561067c57600080fd5b50610685610d0f565b60405161069291906122bb565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd9190612329565b610d15565b6040516106cf9190612217565b60405180910390f35b3480156106e457600080fd5b506106ff60048036038101906106fa91906123cd565b610d86565b60405161070c9190612217565b60405180910390f35b34801561072157600080fd5b5061072a610ed9565b60405161073791906122bb565b60405180910390f35b34801561074c57600080fd5b50610755610edf565b60405161076291906122bb565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d91906123fa565b610ee5565b60405161079f91906122bb565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca9190612466565b610f6c565b005b3480156107dd57600080fd5b506107f860048036038101906107f391906123cd565b610fcf565b005b34801561080657600080fd5b5061080f611052565b60405161081c91906122bb565b60405180910390f35b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606003805461085a906124d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610886906124d5565b80156108d35780601f106108a8576101008083540402835291602001916108d3565b820191906000526020600020905b8154815290600101906020018083116108b657829003601f168201915b5050505050905090565b6000806108e8611058565b90506108f5818585611060565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600080610939611058565b9050610946858285611229565b6109518585856112b5565b60019150509392505050565b6000610967611843565b60626009546109769190612564565b83106109b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ae90612607565b60405180910390fd5b60626009546109c69190612564565b8210610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe90612607565b60405180910390fd5b600860009054906101000a900460ff16600a610a23919061275a565b83610a2e91906127a5565b601281905550600860009054906101000a900460ff16600a610a50919061275a565b82610a5b91906127a5565b6013819055506001905092915050565b60006012905090565b600080610a7f611058565b9050610aa0818585610a918589610ee5565b610a9b91906127ff565b611060565b600191505092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6000610ae1611843565b81600c8190555060019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b41611843565b610b4b60006118c1565b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60116020528060005260406000206000915054906101000a900460ff1681565b6000610b9d611843565b81600d8190555060019050919050565b600c5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610bec906124d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610c18906124d5565b8015610c655780601f10610c3a57610100808354040283529160200191610c65565b820191906000526020600020905b815481529060010190602001808311610c4857829003601f168201915b5050505050905090565b600080610c7a611058565b90506000610c888286610ee5565b905083811015610ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc4906128a5565b60405180910390fd5b610cda8286868403611060565b60019250505092915050565b600080610cf1611058565b9050610cfe8185856112b5565b600191505092915050565b600d5481565b60135481565b6000610d1f611843565b600a8284610d2d91906127ff565b1115610d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6590612937565b60405180910390fd5b82600a8190555081600b819055506001905092915050565b6000610d90611843565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e17906129c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e86906129c9565b60405180910390fd5b81600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60105481565b60125481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f74611843565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610fd7611843565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90612a5b565b60405180910390fd5b61104f816118c1565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c690612aed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361113e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113590612b7f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161121c91906122bb565b60405180910390a3505050565b60006112358484610ee5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112af57818110156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129890612beb565b60405180910390fd5b6112ae8484848403611060565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131b90612c7d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a90612d0f565b60405180910390fd5b8061139d84610af1565b10156113de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d590612da1565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806114875750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b801561149e575060148054906101000a900460ff16155b1561183257601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146115f757600060105461150630610af1565b6115109190612dc1565b9050601254811061152757611526601254611987565b5b601354601054106115f55761153d601354611a46565b601354601060008282546115519190612dc1565b925050819055506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050509050806115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea90612e41565b60405180910390fd5b505b505b6000601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061169a5750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156116a757819050611821565b600c548211156116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390612ed3565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361179a57600d5461174d84610af1565b8361175891906127ff565b1115611799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179090612f65565b60405180910390fd5b5b60006064600b54846117ac91906127a5565b6117b69190612564565b905060006064600a54856117ca91906127a5565b6117d49190612564565b905080826117e291906127ff565b846117ed9190612dc1565b9250816010600082825461180191906127ff565b9250508190555061181e8630838561181991906127ff565b611cb7565b50505b61182c848483611cb7565b5061183e565b61183d838383611cb7565b5b505050565b61184b611058565b73ffffffffffffffffffffffffffffffffffffffff16611869610bb3565b73ffffffffffffffffffffffffffffffffffffffff16146118bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b690612fd1565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60016014806101000a81548160ff02191690831515021790555060006002826119b09190612564565b9050600081836119c09190612dc1565b905060004790506119d083611a46565b600081476119de9190612dc1565b90506119ea8382611f17565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051611a1d93929190612ff1565b60405180910390a15050505060006014806101000a81548160ff02191690831515021790555050565b60016014806101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611a7d57611a7c613028565b5b604051908082528060200260200182016040528015611aab5781602001602082028036833780820191505090505b5090503081600081518110611ac357611ac2613057565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8c919061309b565b81600181518110611ba057611b9f613057565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611c05307f000000000000000000000000000000000000000000000000000000000000000084611060565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611c679594939291906131c1565b600060405180830381600087803b158015611c8157600080fd5b505af1158015611c95573d6000803e3d6000fd5b505050505060006014806101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1d90612c7d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8c90612d0f565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1290612da1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f0991906122bb565b60405180910390a350505050565b60016014806101000a81548160ff021916908315150217905550611f5c307f000000000000000000000000000000000000000000000000000000000000000084611060565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611fe39695949392919061321b565b60606040518083038185885af1158015612001573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120269190613291565b50505060006014806101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061207282612047565b9050919050565b61208281612067565b82525050565b600060208201905061209d6000830184612079565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156120dd5780820151818401526020810190506120c2565b60008484015250505050565b6000601f19601f8301169050919050565b6000612105826120a3565b61210f81856120ae565b935061211f8185602086016120bf565b612128816120e9565b840191505092915050565b6000602082019050818103600083015261214d81846120fa565b905092915050565b600080fd5b61216381612067565b811461216e57600080fd5b50565b6000813590506121808161215a565b92915050565b6000819050919050565b61219981612186565b81146121a457600080fd5b50565b6000813590506121b681612190565b92915050565b600080604083850312156121d3576121d2612155565b5b60006121e185828601612171565b92505060206121f2858286016121a7565b9150509250929050565b60008115159050919050565b612211816121fc565b82525050565b600060208201905061222c6000830184612208565b92915050565b6000819050919050565b600061225761225261224d84612047565b612232565b612047565b9050919050565b60006122698261223c565b9050919050565b600061227b8261225e565b9050919050565b61228b81612270565b82525050565b60006020820190506122a66000830184612282565b92915050565b6122b581612186565b82525050565b60006020820190506122d060008301846122ac565b92915050565b6000806000606084860312156122ef576122ee612155565b5b60006122fd86828701612171565b935050602061230e86828701612171565b925050604061231f868287016121a7565b9150509250925092565b600080604083850312156123405761233f612155565b5b600061234e858286016121a7565b925050602061235f858286016121a7565b9150509250929050565b600060ff82169050919050565b61237f81612369565b82525050565b600060208201905061239a6000830184612376565b92915050565b6000602082840312156123b6576123b5612155565b5b60006123c4848285016121a7565b91505092915050565b6000602082840312156123e3576123e2612155565b5b60006123f184828501612171565b91505092915050565b6000806040838503121561241157612410612155565b5b600061241f85828601612171565b925050602061243085828601612171565b9150509250929050565b612443816121fc565b811461244e57600080fd5b50565b6000813590506124608161243a565b92915050565b6000806040838503121561247d5761247c612155565b5b600061248b85828601612171565b925050602061249c85828601612451565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124ed57607f821691505b602082108103612500576124ff6124a6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061256f82612186565b915061257a83612186565b92508261258a57612589612506565b5b828204905092915050565b7f43616e6e6f74206c6971756964617465206d6f7265207468616e203225206f6660008201527f2074686520737570706c79206174206f6e636521000000000000000000000000602082015250565b60006125f16034836120ae565b91506125fc82612595565b604082019050919050565b60006020820190508181036000830152612620816125e4565b9050919050565b60008160011c9050919050565b6000808291508390505b600185111561267e5780860481111561265a57612659612535565b5b60018516156126695780820291505b808102905061267785612627565b945061263e565b94509492505050565b6000826126975760019050612753565b816126a55760009050612753565b81600181146126bb57600281146126c5576126f4565b6001915050612753565b60ff8411156126d7576126d6612535565b5b8360020a9150848211156126ee576126ed612535565b5b50612753565b5060208310610133831016604e8410600b84101617156127295782820a90508381111561272457612723612535565b5b612753565b6127368484846001612634565b9250905081840481111561274d5761274c612535565b5b81810290505b9392505050565b600061276582612186565b915061277083612369565b925061279d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612687565b905092915050565b60006127b082612186565b91506127bb83612186565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156127f4576127f3612535565b5b828202905092915050565b600061280a82612186565b915061281583612186565b925082820190508082111561282d5761282c612535565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061288f6025836120ae565b915061289a82612833565b604082019050919050565b600060208201905081810360008301526128be81612882565b9050919050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2031302500000000000000000000000000000000000000602082015250565b6000612921602d836120ae565b915061292c826128c5565b604082019050919050565b6000602082019050818103600083015261295081612914565b9050919050565b7f4c5020506169722063616e6e6f742062652074686520446561642077616c6c6560008201527f742c206f72203021000000000000000000000000000000000000000000000000602082015250565b60006129b36028836120ae565b91506129be82612957565b604082019050919050565b600060208201905081810360008301526129e2816129a6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612a456026836120ae565b9150612a50826129e9565b604082019050919050565b60006020820190508181036000830152612a7481612a38565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612ad76024836120ae565b9150612ae282612a7b565b604082019050919050565b60006020820190508181036000830152612b0681612aca565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612b696022836120ae565b9150612b7482612b0d565b604082019050919050565b60006020820190508181036000830152612b9881612b5c565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612bd5601d836120ae565b9150612be082612b9f565b602082019050919050565b60006020820190508181036000830152612c0481612bc8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612c676025836120ae565b9150612c7282612c0b565b604082019050919050565b60006020820190508181036000830152612c9681612c5a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612cf96023836120ae565b9150612d0482612c9d565b604082019050919050565b60006020820190508181036000830152612d2881612cec565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612d8b6026836120ae565b9150612d9682612d2f565b604082019050919050565b60006020820190508181036000830152612dba81612d7e565b9050919050565b6000612dcc82612186565b9150612dd783612186565b9250828203905081811115612def57612dee612535565b5b92915050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b6000612e2b6012836120ae565b9150612e3682612df5565b602082019050919050565b60006020820190508181036000830152612e5a81612e1e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b6000612ebd6039836120ae565b9150612ec882612e61565b604082019050919050565b60006020820190508181036000830152612eec81612eb0565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b6000612f4f6036836120ae565b9150612f5a82612ef3565b604082019050919050565b60006020820190508181036000830152612f7e81612f42565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612fbb6020836120ae565b9150612fc682612f85565b602082019050919050565b60006020820190508181036000830152612fea81612fae565b9050919050565b600060608201905061300660008301866122ac565b61301360208301856122ac565b61302060408301846122ac565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506130958161215a565b92915050565b6000602082840312156130b1576130b0612155565b5b60006130bf84828501613086565b91505092915050565b6000819050919050565b60006130ed6130e86130e3846130c8565b612232565b612186565b9050919050565b6130fd816130d2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61313881612067565b82525050565b600061314a838361312f565b60208301905092915050565b6000602082019050919050565b600061316e82613103565b613178818561310e565b93506131838361311f565b8060005b838110156131b457815161319b888261313e565b97506131a683613156565b925050600181019050613187565b5085935050505092915050565b600060a0820190506131d660008301886122ac565b6131e360208301876130f4565b81810360408301526131f58186613163565b90506132046060830185612079565b61321160808301846122ac565b9695505050505050565b600060c0820190506132306000830189612079565b61323d60208301886122ac565b61324a60408301876130f4565b61325760608301866130f4565b6132646080830185612079565b61327160a08301846122ac565b979650505050505050565b60008151905061328b81612190565b92915050565b6000806000606084860312156132aa576132a9612155565b5b60006132b88682870161327c565b93505060206132c98682870161327c565b92505060406132da8682870161327c565b915050925092509256fea26469706673582212200f2e1e4e2bc6b2057e3103604b71269be24848b1730b0dac2b0989be665f2f2964736f6c63430008100033

Deployed Bytecode

0x6080604052600436106101e75760003560e01c806381bfdcca11610102578063af8af69011610095578063dd62ed3e11610064578063dd62ed3e1461076b578063df8408fe146107a8578063f2fde38b146107d1578063f345bd85146107fa576101ee565b8063af8af6901461069b578063bb85c6d1146106d8578063c0fdea5714610715578063d12a768814610740576101ee565b8063a457c2d7116100d1578063a457c2d7146105cb578063a9059cbb14610608578063aa4bde2814610645578063ad16a0cf14610670576101ee565b806381bfdcca1461050d5780638c0b5e221461054a5780638da5cb5b1461057557806395d89b41146105a0576101ee565b8063395093511161017a57806370a082311161014957806370a0823114610451578063715018a61461048e57806375f0a874146104a5578063768dc710146104d0576101ee565b8063395093511461038157806349bd5a5e146103be57806354a32fd4146103e9578063677daa5714610414576101ee565b806318160ddd116101b657806318160ddd146102b157806323b872dd146102dc57806330b63d8014610319578063313ce56714610356576101ee565b806303fd2a45146101f357806306fdde031461021e578063095ea7b3146102495780631694505e14610286576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b50610208610825565b6040516102159190612088565b60405180910390f35b34801561022a57600080fd5b5061023361084b565b6040516102409190612133565b60405180910390f35b34801561025557600080fd5b50610270600480360381019061026b91906121bc565b6108dd565b60405161027d9190612217565b60405180910390f35b34801561029257600080fd5b5061029b610900565b6040516102a89190612291565b60405180910390f35b3480156102bd57600080fd5b506102c6610924565b6040516102d391906122bb565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe91906122d6565b61092e565b6040516103109190612217565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b9190612329565b61095d565b60405161034d9190612217565b60405180910390f35b34801561036257600080fd5b5061036b610a6b565b6040516103789190612385565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a391906121bc565b610a74565b6040516103b59190612217565b60405180910390f35b3480156103ca57600080fd5b506103d3610aab565b6040516103e09190612088565b60405180910390f35b3480156103f557600080fd5b506103fe610ad1565b60405161040b91906122bb565b60405180910390f35b34801561042057600080fd5b5061043b600480360381019061043691906123a0565b610ad7565b6040516104489190612217565b60405180910390f35b34801561045d57600080fd5b50610478600480360381019061047391906123cd565b610af1565b60405161048591906122bb565b60405180910390f35b34801561049a57600080fd5b506104a3610b39565b005b3480156104b157600080fd5b506104ba610b4d565b6040516104c79190612088565b60405180910390f35b3480156104dc57600080fd5b506104f760048036038101906104f291906123cd565b610b73565b6040516105049190612217565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f91906123a0565b610b93565b6040516105419190612217565b60405180910390f35b34801561055657600080fd5b5061055f610bad565b60405161056c91906122bb565b60405180910390f35b34801561058157600080fd5b5061058a610bb3565b6040516105979190612088565b60405180910390f35b3480156105ac57600080fd5b506105b5610bdd565b6040516105c29190612133565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed91906121bc565b610c6f565b6040516105ff9190612217565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a91906121bc565b610ce6565b60405161063c9190612217565b60405180910390f35b34801561065157600080fd5b5061065a610d09565b60405161066791906122bb565b60405180910390f35b34801561067c57600080fd5b50610685610d0f565b60405161069291906122bb565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd9190612329565b610d15565b6040516106cf9190612217565b60405180910390f35b3480156106e457600080fd5b506106ff60048036038101906106fa91906123cd565b610d86565b60405161070c9190612217565b60405180910390f35b34801561072157600080fd5b5061072a610ed9565b60405161073791906122bb565b60405180910390f35b34801561074c57600080fd5b50610755610edf565b60405161076291906122bb565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d91906123fa565b610ee5565b60405161079f91906122bb565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca9190612466565b610f6c565b005b3480156107dd57600080fd5b506107f860048036038101906107f391906123cd565b610fcf565b005b34801561080657600080fd5b5061080f611052565b60405161081c91906122bb565b60405180910390f35b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606003805461085a906124d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610886906124d5565b80156108d35780601f106108a8576101008083540402835291602001916108d3565b820191906000526020600020905b8154815290600101906020018083116108b657829003601f168201915b5050505050905090565b6000806108e8611058565b90506108f5818585611060565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600080610939611058565b9050610946858285611229565b6109518585856112b5565b60019150509392505050565b6000610967611843565b60626009546109769190612564565b83106109b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ae90612607565b60405180910390fd5b60626009546109c69190612564565b8210610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe90612607565b60405180910390fd5b600860009054906101000a900460ff16600a610a23919061275a565b83610a2e91906127a5565b601281905550600860009054906101000a900460ff16600a610a50919061275a565b82610a5b91906127a5565b6013819055506001905092915050565b60006012905090565b600080610a7f611058565b9050610aa0818585610a918589610ee5565b610a9b91906127ff565b611060565b600191505092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6000610ae1611843565b81600c8190555060019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b41611843565b610b4b60006118c1565b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60116020528060005260406000206000915054906101000a900460ff1681565b6000610b9d611843565b81600d8190555060019050919050565b600c5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610bec906124d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610c18906124d5565b8015610c655780601f10610c3a57610100808354040283529160200191610c65565b820191906000526020600020905b815481529060010190602001808311610c4857829003601f168201915b5050505050905090565b600080610c7a611058565b90506000610c888286610ee5565b905083811015610ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc4906128a5565b60405180910390fd5b610cda8286868403611060565b60019250505092915050565b600080610cf1611058565b9050610cfe8185856112b5565b600191505092915050565b600d5481565b60135481565b6000610d1f611843565b600a8284610d2d91906127ff565b1115610d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6590612937565b60405180910390fd5b82600a8190555081600b819055506001905092915050565b6000610d90611843565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e17906129c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e86906129c9565b60405180910390fd5b81600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60105481565b60125481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f74611843565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610fd7611843565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90612a5b565b60405180910390fd5b61104f816118c1565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c690612aed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361113e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113590612b7f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161121c91906122bb565b60405180910390a3505050565b60006112358484610ee5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112af57818110156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129890612beb565b60405180910390fd5b6112ae8484848403611060565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131b90612c7d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a90612d0f565b60405180910390fd5b8061139d84610af1565b10156113de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d590612da1565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806114875750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b801561149e575060148054906101000a900460ff16155b1561183257601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146115f757600060105461150630610af1565b6115109190612dc1565b9050601254811061152757611526601254611987565b5b601354601054106115f55761153d601354611a46565b601354601060008282546115519190612dc1565b925050819055506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050509050806115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea90612e41565b60405180910390fd5b505b505b6000601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061169a5750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156116a757819050611821565b600c548211156116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390612ed3565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361179a57600d5461174d84610af1565b8361175891906127ff565b1115611799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179090612f65565b60405180910390fd5b5b60006064600b54846117ac91906127a5565b6117b69190612564565b905060006064600a54856117ca91906127a5565b6117d49190612564565b905080826117e291906127ff565b846117ed9190612dc1565b9250816010600082825461180191906127ff565b9250508190555061181e8630838561181991906127ff565b611cb7565b50505b61182c848483611cb7565b5061183e565b61183d838383611cb7565b5b505050565b61184b611058565b73ffffffffffffffffffffffffffffffffffffffff16611869610bb3565b73ffffffffffffffffffffffffffffffffffffffff16146118bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b690612fd1565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60016014806101000a81548160ff02191690831515021790555060006002826119b09190612564565b9050600081836119c09190612dc1565b905060004790506119d083611a46565b600081476119de9190612dc1565b90506119ea8382611f17565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051611a1d93929190612ff1565b60405180910390a15050505060006014806101000a81548160ff02191690831515021790555050565b60016014806101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611a7d57611a7c613028565b5b604051908082528060200260200182016040528015611aab5781602001602082028036833780820191505090505b5090503081600081518110611ac357611ac2613057565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8c919061309b565b81600181518110611ba057611b9f613057565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611c05307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611060565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611c679594939291906131c1565b600060405180830381600087803b158015611c8157600080fd5b505af1158015611c95573d6000803e3d6000fd5b505050505060006014806101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1d90612c7d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8c90612d0f565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1290612da1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f0991906122bb565b60405180910390a350505050565b60016014806101000a81548160ff021916908315150217905550611f5c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611060565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611fe39695949392919061321b565b60606040518083038185885af1158015612001573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120269190613291565b50505060006014806101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061207282612047565b9050919050565b61208281612067565b82525050565b600060208201905061209d6000830184612079565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156120dd5780820151818401526020810190506120c2565b60008484015250505050565b6000601f19601f8301169050919050565b6000612105826120a3565b61210f81856120ae565b935061211f8185602086016120bf565b612128816120e9565b840191505092915050565b6000602082019050818103600083015261214d81846120fa565b905092915050565b600080fd5b61216381612067565b811461216e57600080fd5b50565b6000813590506121808161215a565b92915050565b6000819050919050565b61219981612186565b81146121a457600080fd5b50565b6000813590506121b681612190565b92915050565b600080604083850312156121d3576121d2612155565b5b60006121e185828601612171565b92505060206121f2858286016121a7565b9150509250929050565b60008115159050919050565b612211816121fc565b82525050565b600060208201905061222c6000830184612208565b92915050565b6000819050919050565b600061225761225261224d84612047565b612232565b612047565b9050919050565b60006122698261223c565b9050919050565b600061227b8261225e565b9050919050565b61228b81612270565b82525050565b60006020820190506122a66000830184612282565b92915050565b6122b581612186565b82525050565b60006020820190506122d060008301846122ac565b92915050565b6000806000606084860312156122ef576122ee612155565b5b60006122fd86828701612171565b935050602061230e86828701612171565b925050604061231f868287016121a7565b9150509250925092565b600080604083850312156123405761233f612155565b5b600061234e858286016121a7565b925050602061235f858286016121a7565b9150509250929050565b600060ff82169050919050565b61237f81612369565b82525050565b600060208201905061239a6000830184612376565b92915050565b6000602082840312156123b6576123b5612155565b5b60006123c4848285016121a7565b91505092915050565b6000602082840312156123e3576123e2612155565b5b60006123f184828501612171565b91505092915050565b6000806040838503121561241157612410612155565b5b600061241f85828601612171565b925050602061243085828601612171565b9150509250929050565b612443816121fc565b811461244e57600080fd5b50565b6000813590506124608161243a565b92915050565b6000806040838503121561247d5761247c612155565b5b600061248b85828601612171565b925050602061249c85828601612451565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124ed57607f821691505b602082108103612500576124ff6124a6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061256f82612186565b915061257a83612186565b92508261258a57612589612506565b5b828204905092915050565b7f43616e6e6f74206c6971756964617465206d6f7265207468616e203225206f6660008201527f2074686520737570706c79206174206f6e636521000000000000000000000000602082015250565b60006125f16034836120ae565b91506125fc82612595565b604082019050919050565b60006020820190508181036000830152612620816125e4565b9050919050565b60008160011c9050919050565b6000808291508390505b600185111561267e5780860481111561265a57612659612535565b5b60018516156126695780820291505b808102905061267785612627565b945061263e565b94509492505050565b6000826126975760019050612753565b816126a55760009050612753565b81600181146126bb57600281146126c5576126f4565b6001915050612753565b60ff8411156126d7576126d6612535565b5b8360020a9150848211156126ee576126ed612535565b5b50612753565b5060208310610133831016604e8410600b84101617156127295782820a90508381111561272457612723612535565b5b612753565b6127368484846001612634565b9250905081840481111561274d5761274c612535565b5b81810290505b9392505050565b600061276582612186565b915061277083612369565b925061279d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612687565b905092915050565b60006127b082612186565b91506127bb83612186565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156127f4576127f3612535565b5b828202905092915050565b600061280a82612186565b915061281583612186565b925082820190508082111561282d5761282c612535565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061288f6025836120ae565b915061289a82612833565b604082019050919050565b600060208201905081810360008301526128be81612882565b9050919050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2031302500000000000000000000000000000000000000602082015250565b6000612921602d836120ae565b915061292c826128c5565b604082019050919050565b6000602082019050818103600083015261295081612914565b9050919050565b7f4c5020506169722063616e6e6f742062652074686520446561642077616c6c6560008201527f742c206f72203021000000000000000000000000000000000000000000000000602082015250565b60006129b36028836120ae565b91506129be82612957565b604082019050919050565b600060208201905081810360008301526129e2816129a6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612a456026836120ae565b9150612a50826129e9565b604082019050919050565b60006020820190508181036000830152612a7481612a38565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612ad76024836120ae565b9150612ae282612a7b565b604082019050919050565b60006020820190508181036000830152612b0681612aca565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612b696022836120ae565b9150612b7482612b0d565b604082019050919050565b60006020820190508181036000830152612b9881612b5c565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612bd5601d836120ae565b9150612be082612b9f565b602082019050919050565b60006020820190508181036000830152612c0481612bc8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612c676025836120ae565b9150612c7282612c0b565b604082019050919050565b60006020820190508181036000830152612c9681612c5a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612cf96023836120ae565b9150612d0482612c9d565b604082019050919050565b60006020820190508181036000830152612d2881612cec565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612d8b6026836120ae565b9150612d9682612d2f565b604082019050919050565b60006020820190508181036000830152612dba81612d7e565b9050919050565b6000612dcc82612186565b9150612dd783612186565b9250828203905081811115612def57612dee612535565b5b92915050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b6000612e2b6012836120ae565b9150612e3682612df5565b602082019050919050565b60006020820190508181036000830152612e5a81612e1e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b6000612ebd6039836120ae565b9150612ec882612e61565b604082019050919050565b60006020820190508181036000830152612eec81612eb0565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b6000612f4f6036836120ae565b9150612f5a82612ef3565b604082019050919050565b60006020820190508181036000830152612f7e81612f42565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612fbb6020836120ae565b9150612fc682612f85565b602082019050919050565b60006020820190508181036000830152612fea81612fae565b9050919050565b600060608201905061300660008301866122ac565b61301360208301856122ac565b61302060408301846122ac565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506130958161215a565b92915050565b6000602082840312156130b1576130b0612155565b5b60006130bf84828501613086565b91505092915050565b6000819050919050565b60006130ed6130e86130e3846130c8565b612232565b612186565b9050919050565b6130fd816130d2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61313881612067565b82525050565b600061314a838361312f565b60208301905092915050565b6000602082019050919050565b600061316e82613103565b613178818561310e565b93506131838361311f565b8060005b838110156131b457815161319b888261313e565b97506131a683613156565b925050600181019050613187565b5085935050505092915050565b600060a0820190506131d660008301886122ac565b6131e360208301876130f4565b81810360408301526131f58186613163565b90506132046060830185612079565b61321160808301846122ac565b9695505050505050565b600060c0820190506132306000830189612079565b61323d60208301886122ac565b61324a60408301876130f4565b61325760608301866130f4565b6132646080830185612079565b61327160a08301846122ac565b979650505050505050565b60008151905061328b81612190565b92915050565b6000806000606084860312156132aa576132a9612155565b5b60006132b88682870161327c565b93505060206132c98682870161327c565b92505060406132da8682870161327c565b915050925092509256fea26469706673582212200f2e1e4e2bc6b2057e3103604b71269be24848b1730b0dac2b0989be665f2f2964736f6c63430008100033

Deployed Bytecode Sourcemap

28831:8703:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29534:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18548:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20823:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29941:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19687:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21647:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36496:602;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19529:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23363:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29999:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29273:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37106:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18713:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15807:103;;;;;;;;;;;;;:::i;:::-;;29440:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29649:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37296:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29316:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15159:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18372:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22447:507;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20267:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29376:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29782:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36093:395;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35735:350;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29605:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29706:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19860:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34143:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16065:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29231:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29534:64;;;;;;;;;;;;;:::o;18548:102::-;18604:13;18637:5;18630:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18548:102;:::o;20823:244::-;20944:4;20966:13;20982:12;:10;:12::i;:::-;20966:28;;21005:32;21014:5;21021:7;21030:6;21005:8;:32::i;:::-;21055:4;21048:11;;;20823:244;;;;:::o;29941:51::-;;;:::o;19687:110::-;19750:7;19777:12;;19770:19;;19687:110;:::o;21647:297::-;21780:4;21797:15;21815:12;:10;:12::i;:::-;21797:30;;21838:38;21854:4;21860:7;21869:6;21838:15;:38::i;:::-;21887:27;21897:4;21903:2;21907:6;21887:9;:27::i;:::-;21932:4;21925:11;;;21647:297;;;;;:::o;36496:602::-;36653:4;15045:13;:11;:13::i;:::-;36726:2:::1;36716:7;;:12;;;;:::i;:::-;36683:30;:45;36675:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;36841:2;36831:7;;:12;;;;:::i;:::-;36804:24;:39;36796:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;36980:9;;;;;;;;;;;36976:2;:13;;;;:::i;:::-;36943:30;:46;;;;:::i;:::-;36911:29;:78;;;;37057:9;;;;;;;;;;;37053:2;:13;;;;:::i;:::-;37026:24;:40;;;;:::i;:::-;37000:23;:66;;;;37086:4;37079:11;;36496:602:::0;;;;:::o;19529:93::-;19587:5;19612:2;19605:9;;19529:93;:::o;23363:272::-;23480:4;23502:13;23518:12;:10;:12::i;:::-;23502:28;;23541:64;23550:5;23557:7;23594:10;23566:25;23576:5;23583:7;23566:9;:25::i;:::-;:38;;;;:::i;:::-;23541:8;:64::i;:::-;23623:4;23616:11;;;23363:272;;;;:::o;29999:28::-;;;;;;;;;;;;;:::o;29273:35::-;;;;:::o;37106:182::-;37208:4;15045:13;:11;:13::i;:::-;37244:12:::1;37230:11;:26;;;;37276:4;37269:11;;37106:182:::0;;;:::o;18713:177::-;18832:7;18864:9;:18;18874:7;18864:18;;;;;;;;;;;;;;;;18857:25;;18713:177;;;:::o;15807:103::-;15045:13;:11;:13::i;:::-;15872:30:::1;15899:1;15872:18;:30::i;:::-;15807:103::o:0;29440:75::-;;;;;;;;;;;;;:::o;29649:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;37296:198::-;37406:4;15045:13;:11;:13::i;:::-;37446:16:::1;37428:15;:34;;;;37482:4;37475:11;;37296:198:::0;;;:::o;29316:53::-;;;;:::o;15159:87::-;15205:7;15232:6;;;;;;;;;;;15225:13;;15159:87;:::o;18372:106::-;18430:13;18463:7;18456:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18372:106;:::o;22447:507::-;22569:4;22591:13;22607:12;:10;:12::i;:::-;22591:28;;22630:24;22657:25;22667:5;22674:7;22657:9;:25::i;:::-;22630:52;;22735:15;22715:16;:35;;22693:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;22851:60;22860:5;22867:7;22895:15;22876:16;:34;22851:8;:60::i;:::-;22942:4;22935:11;;;;22447:507;;;;:::o;20267:236::-;20384:4;20406:13;20422:12;:10;:12::i;:::-;20406:28;;20445;20455:5;20462:2;20466:6;20445:9;:28::i;:::-;20491:4;20484:11;;;20267:236;;;;:::o;29376:57::-;;;;:::o;29782:63::-;;;;:::o;36093:395::-;36242:4;15045:13;:11;:13::i;:::-;36312:2:::1;36290:17;36273:16;:34;;;;:::i;:::-;36272:42;;36264:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;36393:16;36375:15;:34;;;;36439:17;36420:16;:36;;;;36476:4;36469:11;;36093:395:::0;;;;:::o;35735:350::-;35838:4;15045:13;:11;:13::i;:::-;35881:4:::1;;;;;;;;;;;35868:17;;:9;:17;;::::0;35860:70:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35970:1;35949:23;;:9;:23;;::::0;35941:76:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36046:9;36028:15;;:27;;;;;;;;;;;;;;;;;;36073:4;36066:11;;35735:350:::0;;;:::o;29605:37::-;;;;:::o;29706:69::-;;;;:::o;19860:201::-;19994:7;20026:11;:18;20038:5;20026:18;;;;;;;;;;;;;;;:27;20045:7;20026:27;;;;;;;;;;;;;;;;20019:34;;19860:201;;;;:::o;34143:192::-;15045:13;:11;:13::i;:::-;34260:7:::1;34229:18;:28;34248:8;34229:28;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;34143:192:::0;;:::o;16065:238::-;15045:13;:11;:13::i;:::-;16188:1:::1;16168:22;;:8;:22;;::::0;16146:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16267:28;16286:8;16267:18;:28::i;:::-;16065:238:::0;:::o;29231:34::-;;;;:::o;13952:98::-;14005:7;14032:10;14025:17;;13952:98;:::o;25670:380::-;25823:1;25806:19;;:5;:19;;;25798:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25904:1;25885:21;;:7;:21;;;25877:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25988:6;25958:11;:18;25970:5;25958:18;;;;;;;;;;;;;;;:27;25977:7;25958:27;;;;;;;;;;;;;;;:36;;;;26026:7;26010:32;;26019:5;26010:32;;;26035:6;26010:32;;;;;;:::i;:::-;;;;;;;;25670:380;;;:::o;26341:502::-;26476:24;26503:25;26513:5;26520:7;26503:9;:25::i;:::-;26476:52;;26563:17;26543:16;:37;26539:297;;26643:6;26623:16;:26;;26597:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;26758:51;26767:5;26774:7;26802:6;26783:16;:25;26758:8;:51::i;:::-;26539:297;26465:378;26341:502;;;:::o;31990:2145::-;32104:1;32088:18;;:4;:18;;;32080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32181:1;32167:16;;:2;:16;;;32159:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32261:6;32242:15;32252:4;32242:9;:15::i;:::-;:25;;32234:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;32336:13;;;;;;;;;;;32328:21;;:4;:21;;;:44;;;;32359:13;;;;;;;;;;;32353:19;;:2;:19;;;32328:44;32327:67;;;;;32378:16;;;;;;;;;;32377:17;32327:67;32323:1805;;;32423:13;;;;;;;;;;;32415:21;;:4;:21;;;32411:681;;32457:32;32519:18;;32492:24;32510:4;32492:9;:24::i;:::-;:45;;;;:::i;:::-;32457:80;;32588:29;;32560:24;:57;32556:152;;32642:46;32658:29;;32642:15;:46::i;:::-;32556:152;32754:23;;32731:18;;32730:47;32726:351;;32802:42;32820:23;;32802:17;:42::i;:::-;32889:23;;32867:18;;:45;;;;;;;:::i;:::-;;;;;;;;32935:9;32955:15;;;;;;;;;;;32947:29;;:52;32977:21;32947:52;;;;;;;;;;;;;;;;;;;;;;;32935:64;;33030:4;33022:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;32779:298;32726:351;32438:654;32411:681;33108:22;33149:18;:24;33168:4;33149:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;33177:18;:22;33196:2;33177:22;;;;;;;;;;;;;;;;;;;;;;;;;33149:50;33145:840;;;33237:6;33220:23;;33145:840;;;33316:11;;33306:6;:21;;33298:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;33419:13;;;;;;;;;;;33411:21;;:4;:21;;;33408:178;;33492:15;;33474:13;33484:2;33474:9;:13::i;:::-;33465:6;:22;;;;:::i;:::-;33464:43;;33456:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;33408:178;33606:22;33662:3;33642:16;;33633:6;:25;;;;:::i;:::-;33632:33;;;;:::i;:::-;33606:60;;33685:22;33740:3;33721:15;;33712:6;:24;;;;:::i;:::-;33711:32;;;;:::i;:::-;33685:59;;33807:14;33790;:31;;;;:::i;:::-;33780:6;:42;;;;:::i;:::-;33763:59;;33863:14;33841:18;;:36;;;;;;;:::i;:::-;;;;;;;;33898:71;33914:4;33928;33953:14;33936;:31;;;;:::i;:::-;33898:15;:71::i;:::-;33279:706;;33145:840;33999:41;34015:4;34021:2;34025:14;33999:15;:41::i;:::-;32396:1656;32323:1805;;;34083:33;34099:4;34105:2;34109:6;34083:15;:33::i;:::-;32323:1805;31990:2145;;;:::o;15324:132::-;15399:12;:10;:12::i;:::-;15388:23;;:7;:5;:7::i;:::-;:23;;;15380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15324:132::o;16463:191::-;16537:16;16556:6;;;;;;;;;;;16537:25;;16582:8;16573:6;;:17;;;;;;;;;;;;;;;;;;16637:8;16606:40;;16627:8;16606:40;;;;;;;;;;;;16526:128;16463:191;:::o;34343:474::-;30258:4;30239:16;;:23;;;;;;;;;;;;;;;;;;34429:12:::1;34468:1;34445:20;:24;;;;:::i;:::-;34429:41;;34481:17;34525:4;34502:20;:27;;;;:::i;:::-;34481:49;;34543:22;34568:21;34543:46;;34602:23;34620:4;34602:17;:23::i;:::-;34638:18;34684:14;34660:21;:38;;;;:::i;:::-;34638:61;;34712:36;34726:9;34737:10;34712:13;:36::i;:::-;34766:43;34781:4;34787:10;34799:9;34766:43;;;;;;;;:::i;:::-;;;;;;;;34418:399;;;;30304:5:::0;30285:16;;:24;;;;;;;;;;;;;;;;;;34343:474;:::o;34825:488::-;30258:4;30239:16;;:23;;;;;;;;;;;;;;;;;;34904:21:::1;34942:1;34928:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34904:40;;34973:4;34955;34960:1;34955:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;34999:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34989:4;34994:1;34989:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;35034:62;35051:4;35066:15;35084:11;35034:8;:62::i;:::-;35109:15;:66;;;35190:11;35216:1;35232:4;35259;35279:15;35109:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34893:420;30304:5:::0;30285:16;;:24;;;;;;;;;;;;;;;;;;34825:488;:::o;26851:776::-;26998:1;26982:18;;:4;:18;;;26974:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27075:1;27061:16;;:2;:16;;;27053:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27130:19;27152:9;:15;27162:4;27152:15;;;;;;;;;;;;;;;;27130:37;;27215:6;27200:11;:21;;27178:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;27355:6;27341:11;:20;27323:9;:15;27333:4;27323:15;;;;;;;;;;;;;;;:38;;;;27558:6;27541:9;:13;27551:2;27541:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;27608:2;27593:26;;27602:4;27593:26;;;27612:6;27593:26;;;;;;:::i;:::-;;;;;;;;26963:664;26851:776;;;:::o;35321:406::-;30258:4;30239:16;;:23;;;;;;;;;;;;;;;;;;35438:62:::1;35455:4;35470:15;35488:11;35438:8;:62::i;:::-;35513:15;:31;;;35552:9;35585:4;35605:11;35631:1;35647::::0;35663:15:::1;;;;;;;;;;;35693;35513:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30304:5:::0;30285:16;;:24;;;;;;;;;;;;;;;;;;35321:406;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:246::-;954:1;964:113;978:6;975:1;972:13;964:113;;;1063:1;1058:3;1054:11;1048:18;1044:1;1039:3;1035:11;1028:39;1000:2;997:1;993:10;988:15;;964:113;;;1111:1;1102:6;1097:3;1093:16;1086:27;935:184;873:246;;;:::o;1125:102::-;1166:6;1217:2;1213:7;1208:2;1201:5;1197:14;1193:28;1183:38;;1125:102;;;:::o;1233:377::-;1321:3;1349:39;1382:5;1349:39;:::i;:::-;1404:71;1468:6;1463:3;1404:71;:::i;:::-;1397:78;;1484:65;1542:6;1537:3;1530:4;1523:5;1519:16;1484:65;:::i;:::-;1574:29;1596:6;1574:29;:::i;:::-;1569:3;1565:39;1558:46;;1325:285;1233:377;;;;:::o;1616:313::-;1729:4;1767:2;1756:9;1752:18;1744:26;;1816:9;1810:4;1806:20;1802:1;1791:9;1787:17;1780:47;1844:78;1917:4;1908:6;1844:78;:::i;:::-;1836:86;;1616:313;;;;:::o;2016:117::-;2125:1;2122;2115:12;2262:122;2335:24;2353:5;2335:24;:::i;:::-;2328:5;2325:35;2315:63;;2374:1;2371;2364:12;2315:63;2262:122;:::o;2390:139::-;2436:5;2474:6;2461:20;2452:29;;2490:33;2517:5;2490:33;:::i;:::-;2390:139;;;;:::o;2535:77::-;2572:7;2601:5;2590:16;;2535:77;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:152::-;4220:9;4253:37;4284:5;4253:37;:::i;:::-;4240:50;;4144:152;;;:::o;4302:183::-;4415:63;4472:5;4415:63;:::i;:::-;4410:3;4403:76;4302:183;;:::o;4491:274::-;4610:4;4648:2;4637:9;4633:18;4625:26;;4661:97;4755:1;4744:9;4740:17;4731:6;4661:97;:::i;:::-;4491:274;;;;:::o;4771:118::-;4858:24;4876:5;4858:24;:::i;:::-;4853:3;4846:37;4771:118;;:::o;4895:222::-;4988:4;5026:2;5015:9;5011:18;5003:26;;5039:71;5107:1;5096:9;5092:17;5083:6;5039:71;:::i;:::-;4895:222;;;;:::o;5123:619::-;5200:6;5208;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5646:2;5672:53;5717:7;5708:6;5697:9;5693:22;5672:53;:::i;:::-;5662:63;;5617:118;5123:619;;;;;:::o;5748:474::-;5816:6;5824;5873:2;5861:9;5852:7;5848:23;5844:32;5841:119;;;5879:79;;:::i;:::-;5841:119;5999:1;6024:53;6069:7;6060:6;6049:9;6045:22;6024:53;:::i;:::-;6014:63;;5970:117;6126:2;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6097:118;5748:474;;;;;:::o;6228:86::-;6263:7;6303:4;6296:5;6292:16;6281:27;;6228:86;;;:::o;6320:112::-;6403:22;6419:5;6403:22;:::i;:::-;6398:3;6391:35;6320:112;;:::o;6438:214::-;6527:4;6565:2;6554:9;6550:18;6542:26;;6578:67;6642:1;6631:9;6627:17;6618:6;6578:67;:::i;:::-;6438:214;;;;:::o;6658:329::-;6717:6;6766:2;6754:9;6745:7;6741:23;6737:32;6734:119;;;6772:79;;:::i;:::-;6734:119;6892:1;6917:53;6962:7;6953:6;6942:9;6938:22;6917:53;:::i;:::-;6907:63;;6863:117;6658:329;;;;:::o;6993:::-;7052:6;7101:2;7089:9;7080:7;7076:23;7072:32;7069:119;;;7107:79;;:::i;:::-;7069:119;7227:1;7252:53;7297:7;7288:6;7277:9;7273:22;7252:53;:::i;:::-;7242:63;;7198:117;6993:329;;;;:::o;7328:474::-;7396:6;7404;7453:2;7441:9;7432:7;7428:23;7424:32;7421:119;;;7459:79;;:::i;:::-;7421:119;7579:1;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7550:117;7706:2;7732:53;7777:7;7768:6;7757:9;7753:22;7732:53;:::i;:::-;7722:63;;7677:118;7328:474;;;;;:::o;7808:116::-;7878:21;7893:5;7878:21;:::i;:::-;7871:5;7868:32;7858:60;;7914:1;7911;7904:12;7858:60;7808:116;:::o;7930:133::-;7973:5;8011:6;7998:20;7989:29;;8027:30;8051:5;8027:30;:::i;:::-;7930:133;;;;:::o;8069:468::-;8134:6;8142;8191:2;8179:9;8170:7;8166:23;8162:32;8159:119;;;8197:79;;:::i;:::-;8159:119;8317:1;8342:53;8387:7;8378:6;8367:9;8363:22;8342:53;:::i;:::-;8332:63;;8288:117;8444:2;8470:50;8512:7;8503:6;8492:9;8488:22;8470:50;:::i;:::-;8460:60;;8415:115;8069:468;;;;;:::o;8543:180::-;8591:77;8588:1;8581:88;8688:4;8685:1;8678:15;8712:4;8709:1;8702:15;8729:320;8773:6;8810:1;8804:4;8800:12;8790:22;;8857:1;8851:4;8847:12;8878:18;8868:81;;8934:4;8926:6;8922:17;8912:27;;8868:81;8996:2;8988:6;8985:14;8965:18;8962:38;8959:84;;9015:18;;:::i;:::-;8959:84;8780:269;8729:320;;;:::o;9055:180::-;9103:77;9100:1;9093:88;9200:4;9197:1;9190:15;9224:4;9221:1;9214:15;9241:180;9289:77;9286:1;9279:88;9386:4;9383:1;9376:15;9410:4;9407:1;9400:15;9427:185;9467:1;9484:20;9502:1;9484:20;:::i;:::-;9479:25;;9518:20;9536:1;9518:20;:::i;:::-;9513:25;;9557:1;9547:35;;9562:18;;:::i;:::-;9547:35;9604:1;9601;9597:9;9592:14;;9427:185;;;;:::o;9618:239::-;9758:34;9754:1;9746:6;9742:14;9735:58;9827:22;9822:2;9814:6;9810:15;9803:47;9618:239;:::o;9863:366::-;10005:3;10026:67;10090:2;10085:3;10026:67;:::i;:::-;10019:74;;10102:93;10191:3;10102:93;:::i;:::-;10220:2;10215:3;10211:12;10204:19;;9863:366;;;:::o;10235:419::-;10401:4;10439:2;10428:9;10424:18;10416:26;;10488:9;10482:4;10478:20;10474:1;10463:9;10459:17;10452:47;10516:131;10642:4;10516:131;:::i;:::-;10508:139;;10235:419;;;:::o;10660:102::-;10702:8;10749:5;10746:1;10742:13;10721:34;;10660:102;;;:::o;10768:848::-;10829:5;10836:4;10860:6;10851:15;;10884:5;10875:14;;10898:712;10919:1;10909:8;10906:15;10898:712;;;11014:4;11009:3;11005:14;10999:4;10996:24;10993:50;;;11023:18;;:::i;:::-;10993:50;11073:1;11063:8;11059:16;11056:451;;;11488:4;11481:5;11477:16;11468:25;;11056:451;11538:4;11532;11528:15;11520:23;;11568:32;11591:8;11568:32;:::i;:::-;11556:44;;10898:712;;;10768:848;;;;;;;:::o;11622:1073::-;11676:5;11867:8;11857:40;;11888:1;11879:10;;11890:5;;11857:40;11916:4;11906:36;;11933:1;11924:10;;11935:5;;11906:36;12002:4;12050:1;12045:27;;;;12086:1;12081:191;;;;11995:277;;12045:27;12063:1;12054:10;;12065:5;;;12081:191;12126:3;12116:8;12113:17;12110:43;;;12133:18;;:::i;:::-;12110:43;12182:8;12179:1;12175:16;12166:25;;12217:3;12210:5;12207:14;12204:40;;;12224:18;;:::i;:::-;12204:40;12257:5;;;11995:277;;12381:2;12371:8;12368:16;12362:3;12356:4;12353:13;12349:36;12331:2;12321:8;12318:16;12313:2;12307:4;12304:12;12300:35;12284:111;12281:246;;;12437:8;12431:4;12427:19;12418:28;;12472:3;12465:5;12462:14;12459:40;;;12479:18;;:::i;:::-;12459:40;12512:5;;12281:246;12552:42;12590:3;12580:8;12574:4;12571:1;12552:42;:::i;:::-;12537:57;;;;12626:4;12621:3;12617:14;12610:5;12607:25;12604:51;;;12635:18;;:::i;:::-;12604:51;12684:4;12677:5;12673:16;12664:25;;11622:1073;;;;;;:::o;12701:281::-;12759:5;12783:23;12801:4;12783:23;:::i;:::-;12775:31;;12827:25;12843:8;12827:25;:::i;:::-;12815:37;;12871:104;12908:66;12898:8;12892:4;12871:104;:::i;:::-;12862:113;;12701:281;;;;:::o;12988:348::-;13028:7;13051:20;13069:1;13051:20;:::i;:::-;13046:25;;13085:20;13103:1;13085:20;:::i;:::-;13080:25;;13273:1;13205:66;13201:74;13198:1;13195:81;13190:1;13183:9;13176:17;13172:105;13169:131;;;13280:18;;:::i;:::-;13169:131;13328:1;13325;13321:9;13310:20;;12988:348;;;;:::o;13342:191::-;13382:3;13401:20;13419:1;13401:20;:::i;:::-;13396:25;;13435:20;13453:1;13435:20;:::i;:::-;13430:25;;13478:1;13475;13471:9;13464:16;;13499:3;13496:1;13493:10;13490:36;;;13506:18;;:::i;:::-;13490:36;13342:191;;;;:::o;13539:224::-;13679:34;13675:1;13667:6;13663:14;13656:58;13748:7;13743:2;13735:6;13731:15;13724:32;13539:224;:::o;13769:366::-;13911:3;13932:67;13996:2;13991:3;13932:67;:::i;:::-;13925:74;;14008:93;14097:3;14008:93;:::i;:::-;14126:2;14121:3;14117:12;14110:19;;13769:366;;;:::o;14141:419::-;14307:4;14345:2;14334:9;14330:18;14322:26;;14394:9;14388:4;14384:20;14380:1;14369:9;14365:17;14358:47;14422:131;14548:4;14422:131;:::i;:::-;14414:139;;14141:419;;;:::o;14566:232::-;14706:34;14702:1;14694:6;14690:14;14683:58;14775:15;14770:2;14762:6;14758:15;14751:40;14566:232;:::o;14804:366::-;14946:3;14967:67;15031:2;15026:3;14967:67;:::i;:::-;14960:74;;15043:93;15132:3;15043:93;:::i;:::-;15161:2;15156:3;15152:12;15145:19;;14804:366;;;:::o;15176:419::-;15342:4;15380:2;15369:9;15365:18;15357:26;;15429:9;15423:4;15419:20;15415:1;15404:9;15400:17;15393:47;15457:131;15583:4;15457:131;:::i;:::-;15449:139;;15176:419;;;:::o;15601:227::-;15741:34;15737:1;15729:6;15725:14;15718:58;15810:10;15805:2;15797:6;15793:15;15786:35;15601:227;:::o;15834:366::-;15976:3;15997:67;16061:2;16056:3;15997:67;:::i;:::-;15990:74;;16073:93;16162:3;16073:93;:::i;:::-;16191:2;16186:3;16182:12;16175:19;;15834:366;;;:::o;16206:419::-;16372:4;16410:2;16399:9;16395:18;16387:26;;16459:9;16453:4;16449:20;16445:1;16434:9;16430:17;16423:47;16487:131;16613:4;16487:131;:::i;:::-;16479:139;;16206:419;;;:::o;16631:225::-;16771:34;16767:1;16759:6;16755:14;16748:58;16840:8;16835:2;16827:6;16823:15;16816:33;16631:225;:::o;16862:366::-;17004:3;17025:67;17089:2;17084:3;17025:67;:::i;:::-;17018:74;;17101:93;17190:3;17101:93;:::i;:::-;17219:2;17214:3;17210:12;17203:19;;16862:366;;;:::o;17234:419::-;17400:4;17438:2;17427:9;17423:18;17415:26;;17487:9;17481:4;17477:20;17473:1;17462:9;17458:17;17451:47;17515:131;17641:4;17515:131;:::i;:::-;17507:139;;17234:419;;;:::o;17659:223::-;17799:34;17795:1;17787:6;17783:14;17776:58;17868:6;17863:2;17855:6;17851:15;17844:31;17659:223;:::o;17888:366::-;18030:3;18051:67;18115:2;18110:3;18051:67;:::i;:::-;18044:74;;18127:93;18216:3;18127:93;:::i;:::-;18245:2;18240:3;18236:12;18229:19;;17888:366;;;:::o;18260:419::-;18426:4;18464:2;18453:9;18449:18;18441:26;;18513:9;18507:4;18503:20;18499:1;18488:9;18484:17;18477:47;18541:131;18667:4;18541:131;:::i;:::-;18533:139;;18260:419;;;:::o;18685:221::-;18825:34;18821:1;18813:6;18809:14;18802:58;18894:4;18889:2;18881:6;18877:15;18870:29;18685:221;:::o;18912:366::-;19054:3;19075:67;19139:2;19134:3;19075:67;:::i;:::-;19068:74;;19151:93;19240:3;19151:93;:::i;:::-;19269:2;19264:3;19260:12;19253:19;;18912:366;;;:::o;19284:419::-;19450:4;19488:2;19477:9;19473:18;19465:26;;19537:9;19531:4;19527:20;19523:1;19512:9;19508:17;19501:47;19565:131;19691:4;19565:131;:::i;:::-;19557:139;;19284:419;;;:::o;19709:179::-;19849:31;19845:1;19837:6;19833:14;19826:55;19709:179;:::o;19894:366::-;20036:3;20057:67;20121:2;20116:3;20057:67;:::i;:::-;20050:74;;20133:93;20222:3;20133:93;:::i;:::-;20251:2;20246:3;20242:12;20235:19;;19894:366;;;:::o;20266:419::-;20432:4;20470:2;20459:9;20455:18;20447:26;;20519:9;20513:4;20509:20;20505:1;20494:9;20490:17;20483:47;20547:131;20673:4;20547:131;:::i;:::-;20539:139;;20266:419;;;:::o;20691:224::-;20831:34;20827:1;20819:6;20815:14;20808:58;20900:7;20895:2;20887:6;20883:15;20876:32;20691:224;:::o;20921:366::-;21063:3;21084:67;21148:2;21143:3;21084:67;:::i;:::-;21077:74;;21160:93;21249:3;21160:93;:::i;:::-;21278:2;21273:3;21269:12;21262:19;;20921:366;;;:::o;21293:419::-;21459:4;21497:2;21486:9;21482:18;21474:26;;21546:9;21540:4;21536:20;21532:1;21521:9;21517:17;21510:47;21574:131;21700:4;21574:131;:::i;:::-;21566:139;;21293:419;;;:::o;21718:222::-;21858:34;21854:1;21846:6;21842:14;21835:58;21927:5;21922:2;21914:6;21910:15;21903:30;21718:222;:::o;21946:366::-;22088:3;22109:67;22173:2;22168:3;22109:67;:::i;:::-;22102:74;;22185:93;22274:3;22185:93;:::i;:::-;22303:2;22298:3;22294:12;22287:19;;21946:366;;;:::o;22318:419::-;22484:4;22522:2;22511:9;22507:18;22499:26;;22571:9;22565:4;22561:20;22557:1;22546:9;22542:17;22535:47;22599:131;22725:4;22599:131;:::i;:::-;22591:139;;22318:419;;;:::o;22743:225::-;22883:34;22879:1;22871:6;22867:14;22860:58;22952:8;22947:2;22939:6;22935:15;22928:33;22743:225;:::o;22974:366::-;23116:3;23137:67;23201:2;23196:3;23137:67;:::i;:::-;23130:74;;23213:93;23302:3;23213:93;:::i;:::-;23331:2;23326:3;23322:12;23315:19;;22974:366;;;:::o;23346:419::-;23512:4;23550:2;23539:9;23535:18;23527:26;;23599:9;23593:4;23589:20;23585:1;23574:9;23570:17;23563:47;23627:131;23753:4;23627:131;:::i;:::-;23619:139;;23346:419;;;:::o;23771:194::-;23811:4;23831:20;23849:1;23831:20;:::i;:::-;23826:25;;23865:20;23883:1;23865:20;:::i;:::-;23860:25;;23909:1;23906;23902:9;23894:17;;23933:1;23927:4;23924:11;23921:37;;;23938:18;;:::i;:::-;23921:37;23771:194;;;;:::o;23971:168::-;24111:20;24107:1;24099:6;24095:14;24088:44;23971:168;:::o;24145:366::-;24287:3;24308:67;24372:2;24367:3;24308:67;:::i;:::-;24301:74;;24384:93;24473:3;24384:93;:::i;:::-;24502:2;24497:3;24493:12;24486:19;;24145:366;;;:::o;24517:419::-;24683:4;24721:2;24710:9;24706:18;24698:26;;24770:9;24764:4;24760:20;24756:1;24745:9;24741:17;24734:47;24798:131;24924:4;24798:131;:::i;:::-;24790:139;;24517:419;;;:::o;24942:244::-;25082:34;25078:1;25070:6;25066:14;25059:58;25151:27;25146:2;25138:6;25134:15;25127:52;24942:244;:::o;25192:366::-;25334:3;25355:67;25419:2;25414:3;25355:67;:::i;:::-;25348:74;;25431:93;25520:3;25431:93;:::i;:::-;25549:2;25544:3;25540:12;25533:19;;25192:366;;;:::o;25564:419::-;25730:4;25768:2;25757:9;25753:18;25745:26;;25817:9;25811:4;25807:20;25803:1;25792:9;25788:17;25781:47;25845:131;25971:4;25845:131;:::i;:::-;25837:139;;25564:419;;;:::o;25989:241::-;26129:34;26125:1;26117:6;26113:14;26106:58;26198:24;26193:2;26185:6;26181:15;26174:49;25989:241;:::o;26236:366::-;26378:3;26399:67;26463:2;26458:3;26399:67;:::i;:::-;26392:74;;26475:93;26564:3;26475:93;:::i;:::-;26593:2;26588:3;26584:12;26577:19;;26236:366;;;:::o;26608:419::-;26774:4;26812:2;26801:9;26797:18;26789:26;;26861:9;26855:4;26851:20;26847:1;26836:9;26832:17;26825:47;26889:131;27015:4;26889:131;:::i;:::-;26881:139;;26608:419;;;:::o;27033:182::-;27173:34;27169:1;27161:6;27157:14;27150:58;27033:182;:::o;27221:366::-;27363:3;27384:67;27448:2;27443:3;27384:67;:::i;:::-;27377:74;;27460:93;27549:3;27460:93;:::i;:::-;27578:2;27573:3;27569:12;27562:19;;27221:366;;;:::o;27593:419::-;27759:4;27797:2;27786:9;27782:18;27774:26;;27846:9;27840:4;27836:20;27832:1;27821:9;27817:17;27810:47;27874:131;28000:4;27874:131;:::i;:::-;27866:139;;27593:419;;;:::o;28018:442::-;28167:4;28205:2;28194:9;28190:18;28182:26;;28218:71;28286:1;28275:9;28271:17;28262:6;28218:71;:::i;:::-;28299:72;28367:2;28356:9;28352:18;28343:6;28299:72;:::i;:::-;28381;28449:2;28438:9;28434:18;28425:6;28381:72;:::i;:::-;28018:442;;;;;;:::o;28466:180::-;28514:77;28511:1;28504:88;28611:4;28608:1;28601:15;28635:4;28632:1;28625:15;28652:180;28700:77;28697:1;28690:88;28797:4;28794:1;28787:15;28821:4;28818:1;28811:15;28838:143;28895:5;28926:6;28920:13;28911:22;;28942:33;28969:5;28942:33;:::i;:::-;28838:143;;;;:::o;28987:351::-;29057:6;29106:2;29094:9;29085:7;29081:23;29077:32;29074:119;;;29112:79;;:::i;:::-;29074:119;29232:1;29257:64;29313:7;29304:6;29293:9;29289:22;29257:64;:::i;:::-;29247:74;;29203:128;28987:351;;;;:::o;29344:85::-;29389:7;29418:5;29407:16;;29344:85;;;:::o;29435:158::-;29493:9;29526:61;29544:42;29553:32;29579:5;29553:32;:::i;:::-;29544:42;:::i;:::-;29526:61;:::i;:::-;29513:74;;29435:158;;;:::o;29599:147::-;29694:45;29733:5;29694:45;:::i;:::-;29689:3;29682:58;29599:147;;:::o;29752:114::-;29819:6;29853:5;29847:12;29837:22;;29752:114;;;:::o;29872:184::-;29971:11;30005:6;30000:3;29993:19;30045:4;30040:3;30036:14;30021:29;;29872:184;;;;:::o;30062:132::-;30129:4;30152:3;30144:11;;30182:4;30177:3;30173:14;30165:22;;30062:132;;;:::o;30200:108::-;30277:24;30295:5;30277:24;:::i;:::-;30272:3;30265:37;30200:108;;:::o;30314:179::-;30383:10;30404:46;30446:3;30438:6;30404:46;:::i;:::-;30482:4;30477:3;30473:14;30459:28;;30314:179;;;;:::o;30499:113::-;30569:4;30601;30596:3;30592:14;30584:22;;30499:113;;;:::o;30648:732::-;30767:3;30796:54;30844:5;30796:54;:::i;:::-;30866:86;30945:6;30940:3;30866:86;:::i;:::-;30859:93;;30976:56;31026:5;30976:56;:::i;:::-;31055:7;31086:1;31071:284;31096:6;31093:1;31090:13;31071:284;;;31172:6;31166:13;31199:63;31258:3;31243:13;31199:63;:::i;:::-;31192:70;;31285:60;31338:6;31285:60;:::i;:::-;31275:70;;31131:224;31118:1;31115;31111:9;31106:14;;31071:284;;;31075:14;31371:3;31364:10;;30772:608;;;30648:732;;;;:::o;31386:831::-;31649:4;31687:3;31676:9;31672:19;31664:27;;31701:71;31769:1;31758:9;31754:17;31745:6;31701:71;:::i;:::-;31782:80;31858:2;31847:9;31843:18;31834:6;31782:80;:::i;:::-;31909:9;31903:4;31899:20;31894:2;31883:9;31879:18;31872:48;31937:108;32040:4;32031:6;31937:108;:::i;:::-;31929:116;;32055:72;32123:2;32112:9;32108:18;32099:6;32055:72;:::i;:::-;32137:73;32205:3;32194:9;32190:19;32181:6;32137:73;:::i;:::-;31386:831;;;;;;;;:::o;32223:807::-;32472:4;32510:3;32499:9;32495:19;32487:27;;32524:71;32592:1;32581:9;32577:17;32568:6;32524:71;:::i;:::-;32605:72;32673:2;32662:9;32658:18;32649:6;32605:72;:::i;:::-;32687:80;32763:2;32752:9;32748:18;32739:6;32687:80;:::i;:::-;32777;32853:2;32842:9;32838:18;32829:6;32777:80;:::i;:::-;32867:73;32935:3;32924:9;32920:19;32911:6;32867:73;:::i;:::-;32950;33018:3;33007:9;33003:19;32994:6;32950:73;:::i;:::-;32223:807;;;;;;;;;:::o;33036:143::-;33093:5;33124:6;33118:13;33109:22;;33140:33;33167:5;33140:33;:::i;:::-;33036:143;;;;:::o;33185:663::-;33273:6;33281;33289;33338:2;33326:9;33317:7;33313:23;33309:32;33306:119;;;33344:79;;:::i;:::-;33306:119;33464:1;33489:64;33545:7;33536:6;33525:9;33521:22;33489:64;:::i;:::-;33479:74;;33435:128;33602:2;33628:64;33684:7;33675:6;33664:9;33660:22;33628:64;:::i;:::-;33618:74;;33573:129;33741:2;33767:64;33823:7;33814:6;33803:9;33799:22;33767:64;:::i;:::-;33757:74;;33712:129;33185:663;;;;;:::o

Swarm Source

ipfs://0f2e1e4e2bc6b2057e3103604b71269be24848b1730b0dac2b0989be665f2f29
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.