ETH Price: $3,391.17 (-1.31%)
Gas: 3 Gwei

Token

1000xSniper (XSNIPE)
 

Overview

Max Total Supply

1,000,000 XSNIPE

Holders

23

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
9,701.0298 XSNIPE

Value
$0.00
0x02df832f6f4af41c05c8b7e572a70491fe7dd9a0
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:
ThousandxSniper

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-02
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.15;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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


abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

/**
 * @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 this function
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

    /**
     * @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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), 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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - 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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, 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 _createSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        _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;
        }
        _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 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 {}
}

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SignedSafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SignedSafeMath {
    /**
     * @dev Returns the multiplication of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two signed integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        return a / b;
    }

    /**
     * @dev Returns the subtraction of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        return a - b;
    }

    /**
     * @dev Returns the addition of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        return a + b;
    }
}

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

/**
 * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow
 * checks.
 *
 * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
 * easily result in undesired exploitation or bugs, since developers usually
 * assume that overflows raise errors. `SafeCast` restores this intuition by
 * reverting the transaction when such an operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 *
 * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing
 * all math on `uint256` and `int256` and then downcasting.
 */
library SafeCast {
    /**
     * @dev Returns the downcasted uint224 from uint256, reverting on
     * overflow (when the input is greater than largest uint224).
     *
     * Counterpart to Solidity's `uint224` operator.
     *
     * Requirements:
     *
     * - input must fit into 224 bits
     */
    function toUint224(uint256 value) internal pure returns (uint224) {
        require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits");
        return uint224(value);
    }

    /**
     * @dev Returns the downcasted uint128 from uint256, reverting on
     * overflow (when the input is greater than largest uint128).
     *
     * Counterpart to Solidity's `uint128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     */
    function toUint128(uint256 value) internal pure returns (uint128) {
        require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits");
        return uint128(value);
    }

    /**
     * @dev Returns the downcasted uint96 from uint256, reverting on
     * overflow (when the input is greater than largest uint96).
     *
     * Counterpart to Solidity's `uint96` operator.
     *
     * Requirements:
     *
     * - input must fit into 96 bits
     */
    function toUint96(uint256 value) internal pure returns (uint96) {
        require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits");
        return uint96(value);
    }

    /**
     * @dev Returns the downcasted uint64 from uint256, reverting on
     * overflow (when the input is greater than largest uint64).
     *
     * Counterpart to Solidity's `uint64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     */
    function toUint64(uint256 value) internal pure returns (uint64) {
        require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits");
        return uint64(value);
    }

    /**
     * @dev Returns the downcasted uint32 from uint256, reverting on
     * overflow (when the input is greater than largest uint32).
     *
     * Counterpart to Solidity's `uint32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     */
    function toUint32(uint256 value) internal pure returns (uint32) {
        require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits");
        return uint32(value);
    }

    /**
     * @dev Returns the downcasted uint16 from uint256, reverting on
     * overflow (when the input is greater than largest uint16).
     *
     * Counterpart to Solidity's `uint16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     */
    function toUint16(uint256 value) internal pure returns (uint16) {
        require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits");
        return uint16(value);
    }

    /**
     * @dev Returns the downcasted uint8 from uint256, reverting on
     * overflow (when the input is greater than largest uint8).
     *
     * Counterpart to Solidity's `uint8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     */
    function toUint8(uint256 value) internal pure returns (uint8) {
        require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits");
        return uint8(value);
    }

    /**
     * @dev Converts a signed int256 into an unsigned uint256.
     *
     * Requirements:
     *
     * - input must be greater than or equal to 0.
     */
    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    /**
     * @dev Returns the downcasted int128 from int256, reverting on
     * overflow (when the input is less than smallest int128 or
     * greater than largest int128).
     *
     * Counterpart to Solidity's `int128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     *
     * _Available since v3.1._
     */
    function toInt128(int256 value) internal pure returns (int128) {
        require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits");
        return int128(value);
    }

    /**
     * @dev Returns the downcasted int64 from int256, reverting on
     * overflow (when the input is less than smallest int64 or
     * greater than largest int64).
     *
     * Counterpart to Solidity's `int64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     *
     * _Available since v3.1._
     */
    function toInt64(int256 value) internal pure returns (int64) {
        require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits");
        return int64(value);
    }

    /**
     * @dev Returns the downcasted int32 from int256, reverting on
     * overflow (when the input is less than smallest int32 or
     * greater than largest int32).
     *
     * Counterpart to Solidity's `int32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     *
     * _Available since v3.1._
     */
    function toInt32(int256 value) internal pure returns (int32) {
        require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits");
        return int32(value);
    }

    /**
     * @dev Returns the downcasted int16 from int256, reverting on
     * overflow (when the input is less than smallest int16 or
     * greater than largest int16).
     *
     * Counterpart to Solidity's `int16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     *
     * _Available since v3.1._
     */
    function toInt16(int256 value) internal pure returns (int16) {
        require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits");
        return int16(value);
    }

    /**
     * @dev Returns the downcasted int8 from int256, reverting on
     * overflow (when the input is less than smallest int8 or
     * greater than largest int8).
     *
     * Counterpart to Solidity's `int8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     *
     * _Available since v3.1._
     */
    function toInt8(int256 value) internal pure returns (int8) {
        require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits");
        return int8(value);
    }

    /**
     * @dev Converts an unsigned uint256 into a signed int256.
     *
     * Requirements:
     *
     * - input must be less than or equal to maxInt256.
     */
    function toInt256(uint256 value) internal pure returns (int256) {
        // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
        require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256");
        return int256(value);
    }
}

contract ThousandxSniper is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public maxWalletToken = 1000000 * (10**9);
    uint256 public maxBuyTxAmount = 1000000 * (10**9);
    uint256 public maxSellTxAmount = 1000000 * (10**9);
    uint256 public swapTokensAtAmount = 800 * (10**9);

    uint256 public liquidityFee = 1;
    uint256 public marketingFee = 1;

    address payable public marketingWallet = payable(0x0751D3E03f882Fdd8c4eC33dE41CF36F16f1A36A);
    
    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;

    // record blacklisted addresses
    mapping(address => bool) public _isBlacklisted;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensIntoLiqudity, uint256 ethReceived);

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

    constructor() ERC20("1000xSniper", "XSNIPE") {
    	IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D );
         // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(address(this), true);
        
        /*
            an internal function that is only called here,
            and CANNOT be called ever again
        */
        _createSupply(owner(), 1000000 * (10**9));
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_isBlacklisted[from] && !_isBlacklisted[to], 'Blacklisted address');

        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if(from == uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            require(amount <= maxBuyTxAmount, "amount must be less than or equal to maxBuyTxAmount");
        }

         if(to == uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            require(amount <= maxSellTxAmount, "amount must be less than or equal to maxSellTxAmount");
        }

        if(from==uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
            uint256 contractBalanceRecepient = balanceOf(to);
            require(contractBalanceRecepient + amount <= maxWalletToken, "Exceeds maximum wallet token amount.");
        }

    	uint256 contractTokenBalance = balanceOf(address(this));
        
        bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount;
       
        if(
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            to==uniswapV2Pair && 
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = swapTokensAtAmount;
            swapAndLiquify(contractTokenBalance);
        }

         // if any account belongs to _isExcludedFromFee account then remove the fee
        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 fees;
        
            if(from==uniswapV2Pair || to==uniswapV2Pair) {
                fees = amount.mul(liquidityFee.add(marketingFee)).div(100);
            }

        	amount = amount.sub(fees);

            if(fees > 0) {
                super._transfer(from, address(this), fees); 
            }
             
        }

        super._transfer(from, to, amount);

    }

     function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 tokensForLiquidity = contractTokenBalance.mul(liquidityFee).div(liquidityFee.add(marketingFee));
        // split the Liquidity token balance into halves
        uint256 half = tokensForLiquidity.div(2);
        uint256 otherHalf = tokensForLiquidity.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        // swap and Send to wallets
        swapTokensForEth(contractTokenBalance.sub(tokensForLiquidity));
        marketingWallet.transfer(address(this).balance);

        emit SwapAndLiquify(half, newBalance);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) {
          _approve(address(this), address(uniswapV2Router), ~uint256(0));
        }

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
        
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }
    
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
   
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function blacklistAddress(address account, bool value) external onlyOwner{
        _isBlacklisted[account] = value;
    }

    function setSwapTokensAtAmouunt(uint256 _newAmount) public onlyOwner {
        swapTokensAtAmount = _newAmount;
    }

    function setFees(uint256 _liquidityFee, uint256 _marketingFee) public onlyOwner {
        require(_liquidityFee.add(_marketingFee) <= 20, "tax too high");
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
    }

    function setMaxWalletToken(uint256 _maxToken) external onlyOwner {
        maxWalletToken = _maxToken;
        require(maxWalletToken >= totalSupply().div(200), "value too low");
  	}

    function setMarketingWallet(address payable _newAddress) external onlyOwner {
        marketingWallet = _newAddress;
  	}


      function setMaxBuyTransaction(uint256 _maxBuyTx) external onlyOwner {
        maxBuyTxAmount = _maxBuyTx;
        require(maxBuyTxAmount >= totalSupply().div(300), "value too low");
  	}

    function setMaxSellTransaction(uint256 _maxSellTx) external onlyOwner {
        maxSellTxAmount = _maxSellTx;
        require(maxSellTxAmount >= totalSupply().div(300), "value too low");
  	}

    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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyTx","type":"uint256"}],"name":"setMaxBuyTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSellTx","type":"uint256"}],"name":"setMaxSellTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxToken","type":"uint256"}],"name":"setMaxWalletToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setSwapTokensAtAmouunt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600660156101000a81548160ff02191690831515021790555066038d7ea4c6800060075566038d7ea4c6800060085566038d7ea4c6800060095564ba43b74000600a556001600b556001600c55730751d3e03f882fdd8c4ec33de41cf36f16f1a36a600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000b557600080fd5b506040518060400160405280600b81526020017f3130303078536e697065720000000000000000000000000000000000000000008152506040518060400160405280600681526020017f58534e4950450000000000000000000000000000000000000000000000000000815250816003908162000133919062000a27565b50806004908162000145919062000a27565b505050620001686200015c620003f960201b60201c565b6200040160201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f5919062000b78565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000283919062000b78565b6040518363ffffffff1660e01b8152600401620002a292919062000bbb565b6020604051808303816000875af1158015620002c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e8919062000b78565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506200038162000373620004c760201b60201c565b6001620004f160201b60201c565b620003b6600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620004f160201b60201c565b620003c9306001620004f160201b60201c565b620003f1620003dd620004c760201b60201c565b66038d7ea4c680006200062b60201b60201c565b505062000dd1565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000501620003f960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000527620004c760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000580576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005779062000c49565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200061f919062000c88565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200069d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006949062000cf5565b60405180910390fd5b620006b160008383620007a360201b60201c565b8060026000828254620006c5919062000d46565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200071c919062000d46565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000783919062000db4565b60405180910390a36200079f60008383620007a860201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200082f57607f821691505b602082108103620008455762000844620007e7565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008af7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000870565b620008bb868362000870565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200090862000902620008fc84620008d3565b620008dd565b620008d3565b9050919050565b6000819050919050565b6200092483620008e7565b6200093c62000933826200090f565b8484546200087d565b825550505050565b600090565b6200095362000944565b6200096081848462000919565b505050565b5b8181101562000988576200097c60008262000949565b60018101905062000966565b5050565b601f821115620009d757620009a1816200084b565b620009ac8462000860565b81016020851015620009bc578190505b620009d4620009cb8562000860565b83018262000965565b50505b505050565b600082821c905092915050565b6000620009fc60001984600802620009dc565b1980831691505092915050565b600062000a178383620009e9565b9150826002028217905092915050565b62000a3282620007ad565b67ffffffffffffffff81111562000a4e5762000a4d620007b8565b5b62000a5a825462000816565b62000a678282856200098c565b600060209050601f83116001811462000a9f576000841562000a8a578287015190505b62000a96858262000a09565b86555062000b06565b601f19841662000aaf866200084b565b60005b8281101562000ad95784890151825560018201915060208501945060208101905062000ab2565b8683101562000af9578489015162000af5601f891682620009e9565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b408262000b13565b9050919050565b62000b528162000b33565b811462000b5e57600080fd5b50565b60008151905062000b728162000b47565b92915050565b60006020828403121562000b915762000b9062000b0e565b5b600062000ba18482850162000b61565b91505092915050565b62000bb58162000b33565b82525050565b600060408201905062000bd2600083018562000baa565b62000be1602083018462000baa565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000c3160208362000be8565b915062000c3e8262000bf9565b602082019050919050565b6000602082019050818103600083015262000c648162000c22565b9050919050565b60008115159050919050565b62000c828162000c6b565b82525050565b600060208201905062000c9f600083018462000c77565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000cdd601f8362000be8565b915062000cea8262000ca5565b602082019050919050565b6000602082019050818103600083015262000d108162000cce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d5382620008d3565b915062000d6083620008d3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d985762000d9762000d17565b5b828201905092915050565b62000dae81620008d3565b82525050565b600060208201905062000dcb600083018462000da3565b92915050565b608051613c4a62000e1760003960008181610cd901528181611b7001528181611cb601528181611dfc01528181611f93015281816120ba015261210f0152613c4a6000f3fe6080604052600436106102085760003560e01c8063715018a611610118578063a9059cbb116100a0578063d851fd0d1161006f578063d851fd0d14610788578063dd62ed3e146107b3578063e2f45605146107f0578063e6c75f711461081b578063f2fde38b146108465761020f565b8063a9059cbb146106d0578063b3b5e0431461070d578063c024666814610736578063c49b9a801461075f5761020f565b806391d55f41116100e757806391d55f41146105e957806395d89b411461061257806398118cb41461063d578063a457c2d714610668578063a87e5da4146106a55761020f565b8063715018a614610553578063750c11b61461056a57806375f0a874146105935780638da5cb5b146105be5761020f565b8063395093511161019b5780634fbee1931161016a5780634fbee1931461045c5780635c38ffe2146104995780635d098b38146104c25780636b67c4df146104eb57806370a08231146105165761020f565b806339509351146103a0578063455a4396146103dd57806349bd5a5e146104065780634a74bb02146104315761020f565b806318160ddd116101d757806318160ddd146102d05780631cdd3be3146102fb57806323b872dd14610338578063313ce567146103755761020f565b806306fdde0314610214578063095ea7b31461023f5780630b78f9c01461027c5780631694505e146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961086f565b6040516102369190612ad5565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190612b90565b610901565b6040516102739190612beb565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190612c06565b61091f565b005b3480156102b157600080fd5b506102ba610a03565b6040516102c79190612ca5565b60405180910390f35b3480156102dc57600080fd5b506102e5610a29565b6040516102f29190612ccf565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612cea565b610a33565b60405161032f9190612beb565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a9190612d17565b610a53565b60405161036c9190612beb565b60405180910390f35b34801561038157600080fd5b5061038a610b4b565b6040516103979190612d86565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c29190612b90565b610b54565b6040516103d49190612beb565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190612dcd565b610c00565b005b34801561041257600080fd5b5061041b610cd7565b6040516104289190612e1c565b60405180910390f35b34801561043d57600080fd5b50610446610cfb565b6040516104539190612beb565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e9190612cea565b610d0e565b6040516104909190612beb565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190612e37565b610d64565b005b3480156104ce57600080fd5b506104e960048036038101906104e49190612ea2565b610e4a565b005b3480156104f757600080fd5b50610500610f0a565b60405161050d9190612ccf565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190612cea565b610f10565b60405161054a9190612ccf565b60405180910390f35b34801561055f57600080fd5b50610568610f58565b005b34801561057657600080fd5b50610591600480360381019061058c9190612e37565b610fe0565b005b34801561059f57600080fd5b506105a8611066565b6040516105b59190612ede565b60405180910390f35b3480156105ca57600080fd5b506105d361108c565b6040516105e09190612e1c565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b9190612e37565b6110b6565b005b34801561061e57600080fd5b5061062761119b565b6040516106349190612ad5565b60405180910390f35b34801561064957600080fd5b5061065261122d565b60405161065f9190612ccf565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a9190612b90565b611233565b60405161069c9190612beb565b60405180910390f35b3480156106b157600080fd5b506106ba61131e565b6040516106c79190612ccf565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f29190612b90565b611324565b6040516107049190612beb565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f9190612e37565b611342565b005b34801561074257600080fd5b5061075d60048036038101906107589190612dcd565b611428565b005b34801561076b57600080fd5b5061078660048036038101906107819190612ef9565b61154d565b005b34801561079457600080fd5b5061079d61161d565b6040516107aa9190612ccf565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190612f26565b611623565b6040516107e79190612ccf565b60405180910390f35b3480156107fc57600080fd5b506108056116aa565b6040516108129190612ccf565b60405180910390f35b34801561082757600080fd5b506108306116b0565b60405161083d9190612ccf565b60405180910390f35b34801561085257600080fd5b5061086d60048036038101906108689190612cea565b6116b6565b005b60606003805461087e90612f95565b80601f01602080910402602001604051908101604052809291908181526020018280546108aa90612f95565b80156108f75780601f106108cc576101008083540402835291602001916108f7565b820191906000526020600020905b8154815290600101906020018083116108da57829003601f168201915b5050505050905090565b600061091561090e6117ad565b84846117b5565b6001905092915050565b6109276117ad565b73ffffffffffffffffffffffffffffffffffffffff1661094561108c565b73ffffffffffffffffffffffffffffffffffffffff161461099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099290613012565b60405180910390fd5b60146109b0828461197e90919063ffffffff16565b11156109f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e89061307e565b60405180910390fd5b81600b8190555080600c819055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000610a60848484611994565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aab6117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2290613110565b60405180910390fd5b610b3f85610b376117ad565b8584036117b5565b60019150509392505050565b60006009905090565b6000610bf6610b616117ad565b848460016000610b6f6117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bf1919061315f565b6117b5565b6001905092915050565b610c086117ad565b73ffffffffffffffffffffffffffffffffffffffff16610c2661108c565b73ffffffffffffffffffffffffffffffffffffffff1614610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7390613012565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600660159054906101000a900460ff1681565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d6c6117ad565b73ffffffffffffffffffffffffffffffffffffffff16610d8a61108c565b73ffffffffffffffffffffffffffffffffffffffff1614610de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd790613012565b60405180910390fd5b80600981905550610e0361012c610df5610a29565b6121e090919063ffffffff16565b6009541015610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e90613201565b60405180910390fd5b50565b610e526117ad565b73ffffffffffffffffffffffffffffffffffffffff16610e7061108c565b73ffffffffffffffffffffffffffffffffffffffff1614610ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebd90613012565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f606117ad565b73ffffffffffffffffffffffffffffffffffffffff16610f7e61108c565b73ffffffffffffffffffffffffffffffffffffffff1614610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb90613012565b60405180910390fd5b610fde60006121f6565b565b610fe86117ad565b73ffffffffffffffffffffffffffffffffffffffff1661100661108c565b73ffffffffffffffffffffffffffffffffffffffff161461105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105390613012565b60405180910390fd5b80600a8190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110be6117ad565b73ffffffffffffffffffffffffffffffffffffffff166110dc61108c565b73ffffffffffffffffffffffffffffffffffffffff1614611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990613012565b60405180910390fd5b8060078190555061115460c8611146610a29565b6121e090919063ffffffff16565b6007541015611198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118f90613201565b60405180910390fd5b50565b6060600480546111aa90612f95565b80601f01602080910402602001604051908101604052809291908181526020018280546111d690612f95565b80156112235780601f106111f857610100808354040283529160200191611223565b820191906000526020600020905b81548152906001019060200180831161120657829003601f168201915b5050505050905090565b600b5481565b600080600160006112426117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f690613293565b60405180910390fd5b61131361130a6117ad565b858584036117b5565b600191505092915050565b60085481565b60006113386113316117ad565b8484611994565b6001905092915050565b61134a6117ad565b73ffffffffffffffffffffffffffffffffffffffff1661136861108c565b73ffffffffffffffffffffffffffffffffffffffff16146113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b590613012565b60405180910390fd5b806008819055506113e161012c6113d3610a29565b6121e090919063ffffffff16565b6008541015611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90613201565b60405180910390fd5b50565b6114306117ad565b73ffffffffffffffffffffffffffffffffffffffff1661144e61108c565b73ffffffffffffffffffffffffffffffffffffffff16146114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149b90613012565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115419190612beb565b60405180910390a25050565b6115556117ad565b73ffffffffffffffffffffffffffffffffffffffff1661157361108c565b73ffffffffffffffffffffffffffffffffffffffff16146115c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c090613012565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516116129190612beb565b60405180910390a150565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60075481565b6116be6117ad565b73ffffffffffffffffffffffffffffffffffffffff166116dc61108c565b73ffffffffffffffffffffffffffffffffffffffff1614611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172990613012565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179890613325565b60405180910390fd5b6117aa816121f6565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b906133b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90613449565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119719190612ccf565b60405180910390a3505050565b6000818361198c919061315f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa906134db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a699061356d565b60405180910390fd5b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b165750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4c906135d9565b60405180910390fd5b60008103611b6e57611b69838360006122bc565b6121db565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611c135750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c695750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cb457600854811115611cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caa9061366b565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611d595750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611daf5750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611dfa57600954811115611df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df0906136fd565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e9f5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611ef55750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f59576000611f0583610f10565b90506007548282611f16919061315f565b1115611f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4e9061378f565b60405180910390fd5b505b6000611f6430610f10565b90506000600a548210159050808015611f8a5750600660149054906101000a900460ff16155b8015611fe157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015611ff95750600660159054906101000a900460ff165b1561200d57600a54915061200c8261253b565b5b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120b15750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121cd5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148061215d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156121a15761219e6064612190612181600c54600b5461197e90919063ffffffff16565b876126d590919063ffffffff16565b6121e090919063ffffffff16565b90505b6121b481856126eb90919063ffffffff16565b935060008111156121cb576121ca8630836122bc565b5b505b6121d88585856122bc565b50505b505050565b600081836121ee91906137de565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361232b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612322906134db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361239a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123919061356d565b60405180910390fd5b6123a5838383612701565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561242b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242290613881565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124be919061315f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125229190612ccf565b60405180910390a3612535848484612706565b50505050565b6001600660146101000a81548160ff0219169083151502179055506000612595612572600c54600b5461197e90919063ffffffff16565b612587600b54856126d590919063ffffffff16565b6121e090919063ffffffff16565b905060006125ad6002836121e090919063ffffffff16565b905060006125c482846126eb90919063ffffffff16565b905060004790506125d48361270b565b60006125e982476126eb90919063ffffffff16565b90506125f58382612984565b61261061260b86886126eb90919063ffffffff16565b61270b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612678573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148684826040516126aa9291906138a1565b60405180910390a150505050506000600660146101000a81548160ff02191690831515021790555050565b600081836126e391906138ca565b905092915050565b600081836126f99190613924565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561272857612727613958565b5b6040519080825280602002602001820160405280156127565781602001602082028036833780820191505090505b509050308160008151811061276e5761276d613987565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612815573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283991906139cb565b8160018151811061284d5761284c613987565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050816128b430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611623565b10156128ea576128e930600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196117b5565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161294e959493929190613af1565b600060405180830381600087803b15801561296857600080fd5b505af115801561297c573d6000803e3d6000fd5b505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806129d061108c565b426040518863ffffffff1660e01b81526004016129f296959493929190613b4b565b60606040518083038185885af1158015612a10573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a359190613bc1565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a76578082015181840152602081019050612a5b565b83811115612a85576000848401525b50505050565b6000601f19601f8301169050919050565b6000612aa782612a3c565b612ab18185612a47565b9350612ac1818560208601612a58565b612aca81612a8b565b840191505092915050565b60006020820190508181036000830152612aef8184612a9c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b2782612afc565b9050919050565b612b3781612b1c565b8114612b4257600080fd5b50565b600081359050612b5481612b2e565b92915050565b6000819050919050565b612b6d81612b5a565b8114612b7857600080fd5b50565b600081359050612b8a81612b64565b92915050565b60008060408385031215612ba757612ba6612af7565b5b6000612bb585828601612b45565b9250506020612bc685828601612b7b565b9150509250929050565b60008115159050919050565b612be581612bd0565b82525050565b6000602082019050612c006000830184612bdc565b92915050565b60008060408385031215612c1d57612c1c612af7565b5b6000612c2b85828601612b7b565b9250506020612c3c85828601612b7b565b9150509250929050565b6000819050919050565b6000612c6b612c66612c6184612afc565b612c46565b612afc565b9050919050565b6000612c7d82612c50565b9050919050565b6000612c8f82612c72565b9050919050565b612c9f81612c84565b82525050565b6000602082019050612cba6000830184612c96565b92915050565b612cc981612b5a565b82525050565b6000602082019050612ce46000830184612cc0565b92915050565b600060208284031215612d0057612cff612af7565b5b6000612d0e84828501612b45565b91505092915050565b600080600060608486031215612d3057612d2f612af7565b5b6000612d3e86828701612b45565b9350506020612d4f86828701612b45565b9250506040612d6086828701612b7b565b9150509250925092565b600060ff82169050919050565b612d8081612d6a565b82525050565b6000602082019050612d9b6000830184612d77565b92915050565b612daa81612bd0565b8114612db557600080fd5b50565b600081359050612dc781612da1565b92915050565b60008060408385031215612de457612de3612af7565b5b6000612df285828601612b45565b9250506020612e0385828601612db8565b9150509250929050565b612e1681612b1c565b82525050565b6000602082019050612e316000830184612e0d565b92915050565b600060208284031215612e4d57612e4c612af7565b5b6000612e5b84828501612b7b565b91505092915050565b6000612e6f82612afc565b9050919050565b612e7f81612e64565b8114612e8a57600080fd5b50565b600081359050612e9c81612e76565b92915050565b600060208284031215612eb857612eb7612af7565b5b6000612ec684828501612e8d565b91505092915050565b612ed881612e64565b82525050565b6000602082019050612ef36000830184612ecf565b92915050565b600060208284031215612f0f57612f0e612af7565b5b6000612f1d84828501612db8565b91505092915050565b60008060408385031215612f3d57612f3c612af7565b5b6000612f4b85828601612b45565b9250506020612f5c85828601612b45565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fad57607f821691505b602082108103612fc057612fbf612f66565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612ffc602083612a47565b915061300782612fc6565b602082019050919050565b6000602082019050818103600083015261302b81612fef565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000613068600c83612a47565b915061307382613032565b602082019050919050565b600060208201905081810360008301526130978161305b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006130fa602883612a47565b91506131058261309e565b604082019050919050565b60006020820190508181036000830152613129816130ed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061316a82612b5a565b915061317583612b5a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131aa576131a9613130565b5b828201905092915050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b60006131eb600d83612a47565b91506131f6826131b5565b602082019050919050565b6000602082019050818103600083015261321a816131de565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061327d602583612a47565b915061328882613221565b604082019050919050565b600060208201905081810360008301526132ac81613270565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061330f602683612a47565b915061331a826132b3565b604082019050919050565b6000602082019050818103600083015261333e81613302565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006133a1602483612a47565b91506133ac82613345565b604082019050919050565b600060208201905081810360008301526133d081613394565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613433602283612a47565b915061343e826133d7565b604082019050919050565b6000602082019050818103600083015261346281613426565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134c5602583612a47565b91506134d082613469565b604082019050919050565b600060208201905081810360008301526134f4816134b8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613557602383612a47565b9150613562826134fb565b604082019050919050565b600060208201905081810360008301526135868161354a565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b60006135c3601383612a47565b91506135ce8261358d565b602082019050919050565b600060208201905081810360008301526135f2816135b6565b9050919050565b7f616d6f756e74206d757374206265206c657373207468616e206f72206571756160008201527f6c20746f206d61784275795478416d6f756e7400000000000000000000000000602082015250565b6000613655603383612a47565b9150613660826135f9565b604082019050919050565b6000602082019050818103600083015261368481613648565b9050919050565b7f616d6f756e74206d757374206265206c657373207468616e206f72206571756160008201527f6c20746f206d617853656c6c5478416d6f756e74000000000000000000000000602082015250565b60006136e7603483612a47565b91506136f28261368b565b604082019050919050565b60006020820190508181036000830152613716816136da565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000613779602483612a47565b91506137848261371d565b604082019050919050565b600060208201905081810360008301526137a88161376c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137e982612b5a565b91506137f483612b5a565b925082613804576138036137af565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061386b602683612a47565b91506138768261380f565b604082019050919050565b6000602082019050818103600083015261389a8161385e565b9050919050565b60006040820190506138b66000830185612cc0565b6138c36020830184612cc0565b9392505050565b60006138d582612b5a565b91506138e083612b5a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561391957613918613130565b5b828202905092915050565b600061392f82612b5a565b915061393a83612b5a565b92508282101561394d5761394c613130565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506139c581612b2e565b92915050565b6000602082840312156139e1576139e0612af7565b5b60006139ef848285016139b6565b91505092915050565b6000819050919050565b6000613a1d613a18613a13846139f8565b612c46565b612b5a565b9050919050565b613a2d81613a02565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a6881612b1c565b82525050565b6000613a7a8383613a5f565b60208301905092915050565b6000602082019050919050565b6000613a9e82613a33565b613aa88185613a3e565b9350613ab383613a4f565b8060005b83811015613ae4578151613acb8882613a6e565b9750613ad683613a86565b925050600181019050613ab7565b5085935050505092915050565b600060a082019050613b066000830188612cc0565b613b136020830187613a24565b8181036040830152613b258186613a93565b9050613b346060830185612e0d565b613b416080830184612cc0565b9695505050505050565b600060c082019050613b606000830189612e0d565b613b6d6020830188612cc0565b613b7a6040830187613a24565b613b876060830186613a24565b613b946080830185612e0d565b613ba160a0830184612cc0565b979650505050505050565b600081519050613bbb81612b64565b92915050565b600080600060608486031215613bda57613bd9612af7565b5b6000613be886828701613bac565b9350506020613bf986828701613bac565b9250506040613c0a86828701613bac565b915050925092509256fea2646970667358221220ebaa7c1063d8a77ded18c2dd03aed6f416a8fa51610ec3b9e9e1db7439f9f34f64736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102085760003560e01c8063715018a611610118578063a9059cbb116100a0578063d851fd0d1161006f578063d851fd0d14610788578063dd62ed3e146107b3578063e2f45605146107f0578063e6c75f711461081b578063f2fde38b146108465761020f565b8063a9059cbb146106d0578063b3b5e0431461070d578063c024666814610736578063c49b9a801461075f5761020f565b806391d55f41116100e757806391d55f41146105e957806395d89b411461061257806398118cb41461063d578063a457c2d714610668578063a87e5da4146106a55761020f565b8063715018a614610553578063750c11b61461056a57806375f0a874146105935780638da5cb5b146105be5761020f565b8063395093511161019b5780634fbee1931161016a5780634fbee1931461045c5780635c38ffe2146104995780635d098b38146104c25780636b67c4df146104eb57806370a08231146105165761020f565b806339509351146103a0578063455a4396146103dd57806349bd5a5e146104065780634a74bb02146104315761020f565b806318160ddd116101d757806318160ddd146102d05780631cdd3be3146102fb57806323b872dd14610338578063313ce567146103755761020f565b806306fdde0314610214578063095ea7b31461023f5780630b78f9c01461027c5780631694505e146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961086f565b6040516102369190612ad5565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190612b90565b610901565b6040516102739190612beb565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190612c06565b61091f565b005b3480156102b157600080fd5b506102ba610a03565b6040516102c79190612ca5565b60405180910390f35b3480156102dc57600080fd5b506102e5610a29565b6040516102f29190612ccf565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612cea565b610a33565b60405161032f9190612beb565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a9190612d17565b610a53565b60405161036c9190612beb565b60405180910390f35b34801561038157600080fd5b5061038a610b4b565b6040516103979190612d86565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c29190612b90565b610b54565b6040516103d49190612beb565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190612dcd565b610c00565b005b34801561041257600080fd5b5061041b610cd7565b6040516104289190612e1c565b60405180910390f35b34801561043d57600080fd5b50610446610cfb565b6040516104539190612beb565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e9190612cea565b610d0e565b6040516104909190612beb565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190612e37565b610d64565b005b3480156104ce57600080fd5b506104e960048036038101906104e49190612ea2565b610e4a565b005b3480156104f757600080fd5b50610500610f0a565b60405161050d9190612ccf565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190612cea565b610f10565b60405161054a9190612ccf565b60405180910390f35b34801561055f57600080fd5b50610568610f58565b005b34801561057657600080fd5b50610591600480360381019061058c9190612e37565b610fe0565b005b34801561059f57600080fd5b506105a8611066565b6040516105b59190612ede565b60405180910390f35b3480156105ca57600080fd5b506105d361108c565b6040516105e09190612e1c565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b9190612e37565b6110b6565b005b34801561061e57600080fd5b5061062761119b565b6040516106349190612ad5565b60405180910390f35b34801561064957600080fd5b5061065261122d565b60405161065f9190612ccf565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a9190612b90565b611233565b60405161069c9190612beb565b60405180910390f35b3480156106b157600080fd5b506106ba61131e565b6040516106c79190612ccf565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f29190612b90565b611324565b6040516107049190612beb565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f9190612e37565b611342565b005b34801561074257600080fd5b5061075d60048036038101906107589190612dcd565b611428565b005b34801561076b57600080fd5b5061078660048036038101906107819190612ef9565b61154d565b005b34801561079457600080fd5b5061079d61161d565b6040516107aa9190612ccf565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190612f26565b611623565b6040516107e79190612ccf565b60405180910390f35b3480156107fc57600080fd5b506108056116aa565b6040516108129190612ccf565b60405180910390f35b34801561082757600080fd5b506108306116b0565b60405161083d9190612ccf565b60405180910390f35b34801561085257600080fd5b5061086d60048036038101906108689190612cea565b6116b6565b005b60606003805461087e90612f95565b80601f01602080910402602001604051908101604052809291908181526020018280546108aa90612f95565b80156108f75780601f106108cc576101008083540402835291602001916108f7565b820191906000526020600020905b8154815290600101906020018083116108da57829003601f168201915b5050505050905090565b600061091561090e6117ad565b84846117b5565b6001905092915050565b6109276117ad565b73ffffffffffffffffffffffffffffffffffffffff1661094561108c565b73ffffffffffffffffffffffffffffffffffffffff161461099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099290613012565b60405180910390fd5b60146109b0828461197e90919063ffffffff16565b11156109f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e89061307e565b60405180910390fd5b81600b8190555080600c819055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000610a60848484611994565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aab6117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2290613110565b60405180910390fd5b610b3f85610b376117ad565b8584036117b5565b60019150509392505050565b60006009905090565b6000610bf6610b616117ad565b848460016000610b6f6117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bf1919061315f565b6117b5565b6001905092915050565b610c086117ad565b73ffffffffffffffffffffffffffffffffffffffff16610c2661108c565b73ffffffffffffffffffffffffffffffffffffffff1614610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7390613012565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000e41f7f518070eb298ec65ae9260099e9cebc091f81565b600660159054906101000a900460ff1681565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d6c6117ad565b73ffffffffffffffffffffffffffffffffffffffff16610d8a61108c565b73ffffffffffffffffffffffffffffffffffffffff1614610de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd790613012565b60405180910390fd5b80600981905550610e0361012c610df5610a29565b6121e090919063ffffffff16565b6009541015610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e90613201565b60405180910390fd5b50565b610e526117ad565b73ffffffffffffffffffffffffffffffffffffffff16610e7061108c565b73ffffffffffffffffffffffffffffffffffffffff1614610ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebd90613012565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f606117ad565b73ffffffffffffffffffffffffffffffffffffffff16610f7e61108c565b73ffffffffffffffffffffffffffffffffffffffff1614610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb90613012565b60405180910390fd5b610fde60006121f6565b565b610fe86117ad565b73ffffffffffffffffffffffffffffffffffffffff1661100661108c565b73ffffffffffffffffffffffffffffffffffffffff161461105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105390613012565b60405180910390fd5b80600a8190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110be6117ad565b73ffffffffffffffffffffffffffffffffffffffff166110dc61108c565b73ffffffffffffffffffffffffffffffffffffffff1614611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990613012565b60405180910390fd5b8060078190555061115460c8611146610a29565b6121e090919063ffffffff16565b6007541015611198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118f90613201565b60405180910390fd5b50565b6060600480546111aa90612f95565b80601f01602080910402602001604051908101604052809291908181526020018280546111d690612f95565b80156112235780601f106111f857610100808354040283529160200191611223565b820191906000526020600020905b81548152906001019060200180831161120657829003601f168201915b5050505050905090565b600b5481565b600080600160006112426117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f690613293565b60405180910390fd5b61131361130a6117ad565b858584036117b5565b600191505092915050565b60085481565b60006113386113316117ad565b8484611994565b6001905092915050565b61134a6117ad565b73ffffffffffffffffffffffffffffffffffffffff1661136861108c565b73ffffffffffffffffffffffffffffffffffffffff16146113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b590613012565b60405180910390fd5b806008819055506113e161012c6113d3610a29565b6121e090919063ffffffff16565b6008541015611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90613201565b60405180910390fd5b50565b6114306117ad565b73ffffffffffffffffffffffffffffffffffffffff1661144e61108c565b73ffffffffffffffffffffffffffffffffffffffff16146114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149b90613012565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115419190612beb565b60405180910390a25050565b6115556117ad565b73ffffffffffffffffffffffffffffffffffffffff1661157361108c565b73ffffffffffffffffffffffffffffffffffffffff16146115c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c090613012565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516116129190612beb565b60405180910390a150565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60075481565b6116be6117ad565b73ffffffffffffffffffffffffffffffffffffffff166116dc61108c565b73ffffffffffffffffffffffffffffffffffffffff1614611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172990613012565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179890613325565b60405180910390fd5b6117aa816121f6565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b906133b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90613449565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119719190612ccf565b60405180910390a3505050565b6000818361198c919061315f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa906134db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a699061356d565b60405180910390fd5b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b165750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4c906135d9565b60405180910390fd5b60008103611b6e57611b69838360006122bc565b6121db565b7f000000000000000000000000e41f7f518070eb298ec65ae9260099e9cebc091f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611c135750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c695750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cb457600854811115611cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caa9061366b565b60405180910390fd5b5b7f000000000000000000000000e41f7f518070eb298ec65ae9260099e9cebc091f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611d595750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611daf5750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611dfa57600954811115611df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df0906136fd565b60405180910390fd5b5b7f000000000000000000000000e41f7f518070eb298ec65ae9260099e9cebc091f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e9f5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611ef55750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f59576000611f0583610f10565b90506007548282611f16919061315f565b1115611f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4e9061378f565b60405180910390fd5b505b6000611f6430610f10565b90506000600a548210159050808015611f8a5750600660149054906101000a900460ff16155b8015611fe157507f000000000000000000000000e41f7f518070eb298ec65ae9260099e9cebc091f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015611ff95750600660159054906101000a900460ff165b1561200d57600a54915061200c8261253b565b5b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120b15750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121cd5760007f000000000000000000000000e41f7f518070eb298ec65ae9260099e9cebc091f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148061215d57507f000000000000000000000000e41f7f518070eb298ec65ae9260099e9cebc091f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156121a15761219e6064612190612181600c54600b5461197e90919063ffffffff16565b876126d590919063ffffffff16565b6121e090919063ffffffff16565b90505b6121b481856126eb90919063ffffffff16565b935060008111156121cb576121ca8630836122bc565b5b505b6121d88585856122bc565b50505b505050565b600081836121ee91906137de565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361232b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612322906134db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361239a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123919061356d565b60405180910390fd5b6123a5838383612701565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561242b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242290613881565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124be919061315f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125229190612ccf565b60405180910390a3612535848484612706565b50505050565b6001600660146101000a81548160ff0219169083151502179055506000612595612572600c54600b5461197e90919063ffffffff16565b612587600b54856126d590919063ffffffff16565b6121e090919063ffffffff16565b905060006125ad6002836121e090919063ffffffff16565b905060006125c482846126eb90919063ffffffff16565b905060004790506125d48361270b565b60006125e982476126eb90919063ffffffff16565b90506125f58382612984565b61261061260b86886126eb90919063ffffffff16565b61270b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612678573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148684826040516126aa9291906138a1565b60405180910390a150505050506000600660146101000a81548160ff02191690831515021790555050565b600081836126e391906138ca565b905092915050565b600081836126f99190613924565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561272857612727613958565b5b6040519080825280602002602001820160405280156127565781602001602082028036833780820191505090505b509050308160008151811061276e5761276d613987565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612815573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283991906139cb565b8160018151811061284d5761284c613987565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050816128b430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611623565b10156128ea576128e930600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196117b5565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161294e959493929190613af1565b600060405180830381600087803b15801561296857600080fd5b505af115801561297c573d6000803e3d6000fd5b505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806129d061108c565b426040518863ffffffff1660e01b81526004016129f296959493929190613b4b565b60606040518083038185885af1158015612a10573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a359190613bc1565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a76578082015181840152602081019050612a5b565b83811115612a85576000848401525b50505050565b6000601f19601f8301169050919050565b6000612aa782612a3c565b612ab18185612a47565b9350612ac1818560208601612a58565b612aca81612a8b565b840191505092915050565b60006020820190508181036000830152612aef8184612a9c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b2782612afc565b9050919050565b612b3781612b1c565b8114612b4257600080fd5b50565b600081359050612b5481612b2e565b92915050565b6000819050919050565b612b6d81612b5a565b8114612b7857600080fd5b50565b600081359050612b8a81612b64565b92915050565b60008060408385031215612ba757612ba6612af7565b5b6000612bb585828601612b45565b9250506020612bc685828601612b7b565b9150509250929050565b60008115159050919050565b612be581612bd0565b82525050565b6000602082019050612c006000830184612bdc565b92915050565b60008060408385031215612c1d57612c1c612af7565b5b6000612c2b85828601612b7b565b9250506020612c3c85828601612b7b565b9150509250929050565b6000819050919050565b6000612c6b612c66612c6184612afc565b612c46565b612afc565b9050919050565b6000612c7d82612c50565b9050919050565b6000612c8f82612c72565b9050919050565b612c9f81612c84565b82525050565b6000602082019050612cba6000830184612c96565b92915050565b612cc981612b5a565b82525050565b6000602082019050612ce46000830184612cc0565b92915050565b600060208284031215612d0057612cff612af7565b5b6000612d0e84828501612b45565b91505092915050565b600080600060608486031215612d3057612d2f612af7565b5b6000612d3e86828701612b45565b9350506020612d4f86828701612b45565b9250506040612d6086828701612b7b565b9150509250925092565b600060ff82169050919050565b612d8081612d6a565b82525050565b6000602082019050612d9b6000830184612d77565b92915050565b612daa81612bd0565b8114612db557600080fd5b50565b600081359050612dc781612da1565b92915050565b60008060408385031215612de457612de3612af7565b5b6000612df285828601612b45565b9250506020612e0385828601612db8565b9150509250929050565b612e1681612b1c565b82525050565b6000602082019050612e316000830184612e0d565b92915050565b600060208284031215612e4d57612e4c612af7565b5b6000612e5b84828501612b7b565b91505092915050565b6000612e6f82612afc565b9050919050565b612e7f81612e64565b8114612e8a57600080fd5b50565b600081359050612e9c81612e76565b92915050565b600060208284031215612eb857612eb7612af7565b5b6000612ec684828501612e8d565b91505092915050565b612ed881612e64565b82525050565b6000602082019050612ef36000830184612ecf565b92915050565b600060208284031215612f0f57612f0e612af7565b5b6000612f1d84828501612db8565b91505092915050565b60008060408385031215612f3d57612f3c612af7565b5b6000612f4b85828601612b45565b9250506020612f5c85828601612b45565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fad57607f821691505b602082108103612fc057612fbf612f66565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612ffc602083612a47565b915061300782612fc6565b602082019050919050565b6000602082019050818103600083015261302b81612fef565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000613068600c83612a47565b915061307382613032565b602082019050919050565b600060208201905081810360008301526130978161305b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006130fa602883612a47565b91506131058261309e565b604082019050919050565b60006020820190508181036000830152613129816130ed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061316a82612b5a565b915061317583612b5a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131aa576131a9613130565b5b828201905092915050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b60006131eb600d83612a47565b91506131f6826131b5565b602082019050919050565b6000602082019050818103600083015261321a816131de565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061327d602583612a47565b915061328882613221565b604082019050919050565b600060208201905081810360008301526132ac81613270565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061330f602683612a47565b915061331a826132b3565b604082019050919050565b6000602082019050818103600083015261333e81613302565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006133a1602483612a47565b91506133ac82613345565b604082019050919050565b600060208201905081810360008301526133d081613394565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613433602283612a47565b915061343e826133d7565b604082019050919050565b6000602082019050818103600083015261346281613426565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134c5602583612a47565b91506134d082613469565b604082019050919050565b600060208201905081810360008301526134f4816134b8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613557602383612a47565b9150613562826134fb565b604082019050919050565b600060208201905081810360008301526135868161354a565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b60006135c3601383612a47565b91506135ce8261358d565b602082019050919050565b600060208201905081810360008301526135f2816135b6565b9050919050565b7f616d6f756e74206d757374206265206c657373207468616e206f72206571756160008201527f6c20746f206d61784275795478416d6f756e7400000000000000000000000000602082015250565b6000613655603383612a47565b9150613660826135f9565b604082019050919050565b6000602082019050818103600083015261368481613648565b9050919050565b7f616d6f756e74206d757374206265206c657373207468616e206f72206571756160008201527f6c20746f206d617853656c6c5478416d6f756e74000000000000000000000000602082015250565b60006136e7603483612a47565b91506136f28261368b565b604082019050919050565b60006020820190508181036000830152613716816136da565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000613779602483612a47565b91506137848261371d565b604082019050919050565b600060208201905081810360008301526137a88161376c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137e982612b5a565b91506137f483612b5a565b925082613804576138036137af565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061386b602683612a47565b91506138768261380f565b604082019050919050565b6000602082019050818103600083015261389a8161385e565b9050919050565b60006040820190506138b66000830185612cc0565b6138c36020830184612cc0565b9392505050565b60006138d582612b5a565b91506138e083612b5a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561391957613918613130565b5b828202905092915050565b600061392f82612b5a565b915061393a83612b5a565b92508282101561394d5761394c613130565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506139c581612b2e565b92915050565b6000602082840312156139e1576139e0612af7565b5b60006139ef848285016139b6565b91505092915050565b6000819050919050565b6000613a1d613a18613a13846139f8565b612c46565b612b5a565b9050919050565b613a2d81613a02565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a6881612b1c565b82525050565b6000613a7a8383613a5f565b60208301905092915050565b6000602082019050919050565b6000613a9e82613a33565b613aa88185613a3e565b9350613ab383613a4f565b8060005b83811015613ae4578151613acb8882613a6e565b9750613ad683613a86565b925050600181019050613ab7565b5085935050505092915050565b600060a082019050613b066000830188612cc0565b613b136020830187613a24565b8181036040830152613b258186613a93565b9050613b346060830185612e0d565b613b416080830184612cc0565b9695505050505050565b600060c082019050613b606000830189612e0d565b613b6d6020830188612cc0565b613b7a6040830187613a24565b613b876060830186613a24565b613b946080830185612e0d565b613ba160a0830184612cc0565b979650505050505050565b600081519050613bbb81612b64565b92915050565b600080600060608486031215613bda57613bd9612af7565b5b6000613be886828701613bac565b9350506020613bf986828701613bac565b9250506040613c0a86828701613bac565b915050925092509256fea2646970667358221220ebaa7c1063d8a77ded18c2dd03aed6f416a8fa51610ec3b9e9e1db7439f9f34f64736f6c634300080f0033

Deployed Bytecode Sourcemap

39719:8395:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5583:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7749:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47095:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39804:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6702:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40546:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8400:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6545:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9301:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46837:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39852:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39935:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46522:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47869:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47537:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40249:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6873:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17112:94;;;;;;;;;;;;;:::i;:::-;;46968:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40289:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16461:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47343:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5802:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40211:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10019:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40040:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7213:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47672:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46326:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46658:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40096:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7451:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40153:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39984;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17361:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5583:100;5637:13;5670:5;5663:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5583:100;:::o;7749:169::-;7832:4;7849:39;7858:12;:10;:12::i;:::-;7872:7;7881:6;7849:8;:39::i;:::-;7906:4;7899:11;;7749:169;;;;:::o;47095:240::-;16692:12;:10;:12::i;:::-;16681:23;;:7;:5;:7::i;:::-;:23;;;16673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47230:2:::1;47194:32;47212:13;47194;:17;;:32;;;;:::i;:::-;:38;;47186:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;47275:13;47260:12;:28;;;;47314:13;47299:12;:28;;;;47095:240:::0;;:::o;39804:41::-;;;;;;;;;;;;;:::o;6702:108::-;6763:7;6790:12;;6783:19;;6702:108;:::o;40546:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;8400:492::-;8540:4;8557:36;8567:6;8575:9;8586:6;8557:9;:36::i;:::-;8606:24;8633:11;:19;8645:6;8633:19;;;;;;;;;;;;;;;:33;8653:12;:10;:12::i;:::-;8633:33;;;;;;;;;;;;;;;;8606:60;;8705:6;8685:16;:26;;8677:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8792:57;8801:6;8809:12;:10;:12::i;:::-;8842:6;8823:16;:25;8792:8;:57::i;:::-;8880:4;8873:11;;;8400:492;;;;;:::o;6545:92::-;6603:5;6628:1;6621:8;;6545:92;:::o;9301:215::-;9389:4;9406:80;9415:12;:10;:12::i;:::-;9429:7;9475:10;9438:11;:25;9450:12;:10;:12::i;:::-;9438:25;;;;;;;;;;;;;;;:34;9464:7;9438:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9406:8;:80::i;:::-;9504:4;9497:11;;9301:215;;;;:::o;46837:123::-;16692:12;:10;:12::i;:::-;16681:23;;:7;:5;:7::i;:::-;:23;;;16673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46947:5:::1;46921:14;:23;46936:7;46921:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;46837:123:::0;;:::o;39852:38::-;;;:::o;39935:40::-;;;;;;;;;;;;;:::o;46522:125::-;46587:4;46611:19;:28;46631:7;46611:28;;;;;;;;;;;;;;;;;;;;;;;;;46604:35;;46522:125;;;:::o;47869:194::-;16692:12;:10;:12::i;:::-;16681:23;;:7;:5;:7::i;:::-;:23;;;16673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47968:10:::1;47950:15;:28;;;;48016:22;48034:3;48016:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;47997:15;;:41;;47989:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;47869:194:::0;:::o;47537:123::-;16692:12;:10;:12::i;:::-;16681:23;;:7;:5;:7::i;:::-;:23;;;16673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47642:11:::1;47624:15;;:29;;;;;;;;;;;;;;;;;;47537:123:::0;:::o;40249:31::-;;;;:::o;6873:127::-;6947:7;6974:9;:18;6984:7;6974:18;;;;;;;;;;;;;;;;6967:25;;6873:127;;;:::o;17112:94::-;16692:12;:10;:12::i;:::-;16681:23;;:7;:5;:7::i;:::-;:23;;;16673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17177:21:::1;17195:1;17177:9;:21::i;:::-;17112:94::o:0;46968:119::-;16692:12;:10;:12::i;:::-;16681:23;;:7;:5;:7::i;:::-;:23;;;16673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47069:10:::1;47048:18;:31;;;;46968:119:::0;:::o;40289:92::-;;;;;;;;;;;;;:::o;16461:87::-;16507:7;16534:6;;;;;;;;;;;16527:13;;16461:87;:::o;47343:186::-;16692:12;:10;:12::i;:::-;16681:23;;:7;:5;:7::i;:::-;:23;;;16673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47436:9:::1;47419:14;:26;;;;47482:22;47500:3;47482:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;47464:14;;:40;;47456:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;47343:186:::0;:::o;5802:104::-;5858:13;5891:7;5884:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5802:104;:::o;40211:31::-;;;;:::o;10019:413::-;10112:4;10129:24;10156:11;:25;10168:12;:10;:12::i;:::-;10156:25;;;;;;;;;;;;;;;:34;10182:7;10156:34;;;;;;;;;;;;;;;;10129:61;;10229:15;10209:16;:35;;10201:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10322:67;10331:12;:10;:12::i;:::-;10345:7;10373:15;10354:16;:34;10322:8;:67::i;:::-;10420:4;10413:11;;;10019:413;;;;:::o;40040:49::-;;;;:::o;7213:175::-;7299:4;7316:42;7326:12;:10;:12::i;:::-;7340:9;7351:6;7316:9;:42::i;:::-;7376:4;7369:11;;7213:175;;;;:::o;47672:189::-;16692:12;:10;:12::i;:::-;16681:23;;:7;:5;:7::i;:::-;:23;;;16673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47768:9:::1;47751:14;:26;;;;47814:22;47832:3;47814:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;47796:14;;:40;;47788:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;47672:189:::0;:::o;46326:184::-;16692:12;:10;:12::i;:::-;16681:23;;:7;:5;:7::i;:::-;:23;;;16673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46442:8:::1;46411:19;:28;46431:7;46411:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;46484:7;46468:34;;;46493:8;46468:34;;;;;;:::i;:::-;;;;;;;;46326:184:::0;;:::o;46658:171::-;16692:12;:10;:12::i;:::-;16681:23;;:7;:5;:7::i;:::-;:23;;;16673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46759:8:::1;46735:21;;:32;;;;;;;;;;;;;;;;;;46783:38;46812:8;46783:38;;;;;;:::i;:::-;;;;;;;;46658:171:::0;:::o;40096:50::-;;;;:::o;7451:151::-;7540:7;7567:11;:18;7579:5;7567:18;;;;;;;;;;;;;;;:27;7586:7;7567:27;;;;;;;;;;;;;;;;7560:34;;7451:151;;;;:::o;40153:49::-;;;;:::o;39984:::-;;;;:::o;17361:192::-;16692:12;:10;:12::i;:::-;16681:23;;:7;:5;:7::i;:::-;:23;;;16673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17470:1:::1;17450:22;;:8;:22;;::::0;17442:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17526:19;17536:8;17526:9;:19::i;:::-;17361:192:::0;:::o;3397:98::-;3450:7;3477:10;3470:17;;3397:98;:::o;13711:380::-;13864:1;13847:19;;:5;:19;;;13839:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13945:1;13926:21;;:7;:21;;;13918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14029:6;13999:11;:18;14011:5;13999:18;;;;;;;;;;;;;;;:27;14018:7;13999:27;;;;;;;;;;;;;;;:36;;;;14067:7;14051:32;;14060:5;14051:32;;;14076:6;14051:32;;;;;;:::i;:::-;;;;;;;;13711:380;;;:::o;27615:98::-;27673:7;27704:1;27700;:5;;;;:::i;:::-;27693:12;;27615:98;;;;:::o;41780:2187::-;41928:1;41912:18;;:4;:18;;;41904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42005:1;41991:16;;:2;:16;;;41983:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42067:14;:20;42082:4;42067:20;;;;;;;;;;;;;;;;;;;;;;;;;42066:21;:44;;;;;42092:14;:18;42107:2;42092:18;;;;;;;;;;;;;;;;;;;;;;;;;42091:19;42066:44;42058:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;42160:1;42150:6;:11;42147:92;;42178:28;42194:4;42200:2;42204:1;42178:15;:28::i;:::-;42221:7;;42147:92;42262:13;42254:21;;:4;:21;;;:51;;;;;42280:19;:25;42300:4;42280:25;;;;;;;;;;;;;;;;;;;;;;;;;42279:26;42254:51;:79;;;;;42310:19;:23;42330:2;42310:23;;;;;;;;;;;;;;;;;;;;;;;;;42309:24;42254:79;42251:199;;;42368:14;;42358:6;:24;;42350:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;42251:199;42472:13;42466:19;;:2;:19;;;:49;;;;;42490:19;:25;42510:4;42490:25;;;;;;;;;;;;;;;;;;;;;;;;;42489:26;42466:49;:77;;;;;42520:19;:23;42540:2;42520:23;;;;;;;;;;;;;;;;;;;;;;;;;42519:24;42466:77;42463:199;;;42578:15;;42568:6;:25;;42560:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;42463:199;42683:13;42677:19;;:4;:19;;;:49;;;;;42701:19;:25;42721:4;42701:25;;;;;;;;;;;;;;;;;;;;;;;;;42700:26;42677:49;:77;;;;;42731:19;:23;42751:2;42731:23;;;;;;;;;;;;;;;;;;;;;;;;;42730:24;42677:77;42674:271;;;42770:32;42805:13;42815:2;42805:9;:13::i;:::-;42770:48;;42878:14;;42868:6;42841:24;:33;;;;:::i;:::-;:51;;42833:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;42755:190;42674:271;42954:28;42985:24;43003:4;42985:9;:24::i;:::-;42954:55;;43030:24;43081:18;;43057:20;:42;;43030:69;;43136:19;:53;;;;;43173:16;;;;;;;;;;;43172:17;43136:53;:87;;;;;43210:13;43206:17;;:2;:17;;;43136:87;:126;;;;;43241:21;;;;;;;;;;;43136:126;43119:274;;;43312:18;;43289:41;;43345:36;43360:20;43345:14;:36::i;:::-;43119:274;43495:19;:25;43515:4;43495:25;;;;;;;;;;;;;;;;;;;;;;;;;43494:26;:54;;;;;43525:19;:23;43545:2;43525:23;;;;;;;;;;;;;;;;;;;;;;;;;43524:24;43494:54;43491:421;;;43565:12;43611:13;43605:19;;:4;:19;;;:40;;;;43632:13;43628:17;;:2;:17;;;43605:40;43602:138;;;43673:51;43720:3;43673:42;43684:30;43701:12;;43684;;:16;;:30;;;;:::i;:::-;43673:6;:10;;:42;;;;:::i;:::-;:46;;:51;;;;:::i;:::-;43666:58;;43602:138;43762:16;43773:4;43762:6;:10;;:16;;;;:::i;:::-;43753:25;;43805:1;43798:4;:8;43795:91;;;43827:42;43843:4;43857;43864;43827:15;:42::i;:::-;43795:91;43550:362;43491:421;43924:33;43940:4;43946:2;43950:6;43924:15;:33::i;:::-;41893:2074;;41780:2187;;;;:::o;28752:98::-;28810:7;28841:1;28837;:5;;;;:::i;:::-;28830:12;;28752:98;;;;:::o;17561:173::-;17617:16;17636:6;;;;;;;;;;;17617:25;;17662:8;17653:6;;:17;;;;;;;;;;;;;;;;;;17717:8;17686:40;;17707:8;17686:40;;;;;;;;;;;;17606:128;17561:173;:::o;10922:733::-;11080:1;11062:20;;:6;:20;;;11054:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11164:1;11143:23;;:9;:23;;;11135:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11219:47;11240:6;11248:9;11259:6;11219:20;:47::i;:::-;11279:21;11303:9;:17;11313:6;11303:17;;;;;;;;;;;;;;;;11279:41;;11356:6;11339:13;:23;;11331:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11477:6;11461:13;:22;11441:9;:17;11451:6;11441:17;;;;;;;;;;;;;;;:42;;;;11529:6;11505:9;:20;11515:9;11505:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;11570:9;11553:35;;11562:6;11553:35;;;11581:6;11553:35;;;;;;:::i;:::-;;;;;;;;11601:46;11621:6;11629:9;11640:6;11601:19;:46::i;:::-;11043:612;10922:733;;;:::o;43976:1253::-;40855:4;40836:16;;:23;;;;;;;;;;;;;;;;;;44061:26:::1;44090:74;44133:30;44150:12;;44133;;:16;;:30;;;;:::i;:::-;44090:38;44115:12;;44090:20;:24;;:38;;;;:::i;:::-;:42;;:74;;;;:::i;:::-;44061:103;;44233:12;44248:25;44271:1;44248:18;:22;;:25;;;;:::i;:::-;44233:40;;44284:17;44304:28;44327:4;44304:18;:22;;:28;;;;:::i;:::-;44284:48;;44610:22;44635:21;44610:46;;44701:22;44718:4;44701:16;:22::i;:::-;44854:18;44875:41;44901:14;44875:21;:25;;:41;;;;:::i;:::-;44854:62;;44966:35;44979:9;44990:10;44966:12;:35::i;:::-;45051:62;45068:44;45093:18;45068:20;:24;;:44;;;;:::i;:::-;45051:16;:62::i;:::-;45124:15;;;;;;;;;;;:24;;:47;45149:21;45124:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45189:32;45204:4;45210:10;45189:32;;;;;;;:::i;:::-;;;;;;;;44050:1179;;;;;40901:5:::0;40882:16;;:24;;;;;;;;;;;;;;;;;;43976:1253;:::o;28353:98::-;28411:7;28442:1;28438;:5;;;;:::i;:::-;28431:12;;28353:98;;;;:::o;27996:::-;28054:7;28085:1;28081;:5;;;;:::i;:::-;28074:12;;27996:98;;;;:::o;14691:125::-;;;;:::o;15420:124::-;;;;:::o;45237:692::-;45363:21;45401:1;45387:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45363:40;;45432:4;45414;45419:1;45414:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;45458:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45448:4;45453:1;45448:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;45549:11;45496:50;45514:4;45529:15;;;;;;;;;;;45496:9;:50::i;:::-;:64;45493:156;;;45575:62;45592:4;45607:15;;;;;;;;;;;45634:1;45625:11;45575:8;:62::i;:::-;45493:156;45687:15;;;;;;;;;;;:66;;;45768:11;45794:1;45838:4;45865;45885:15;45687:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45292:637;45237:692;:::o;45937:381::-;46048:15;;;;;;;;;;;:31;;;46087:9;46120:4;46140:11;46166:1;46209;46252:7;:5;:7::i;:::-;46274:15;46048:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;45937:381;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:474::-;3562:6;3570;3619:2;3607:9;3598:7;3594:23;3590:32;3587:119;;;3625:79;;:::i;:::-;3587:119;3745:1;3770:53;3815:7;3806:6;3795:9;3791:22;3770:53;:::i;:::-;3760:63;;3716:117;3872:2;3898:53;3943:7;3934:6;3923:9;3919:22;3898:53;:::i;:::-;3888:63;;3843:118;3494:474;;;;;:::o;3974:60::-;4002:3;4023:5;4016:12;;3974:60;;;:::o;4040:142::-;4090:9;4123:53;4141:34;4150:24;4168:5;4150:24;:::i;:::-;4141:34;:::i;:::-;4123:53;:::i;:::-;4110:66;;4040:142;;;:::o;4188:126::-;4238:9;4271:37;4302:5;4271:37;:::i;:::-;4258:50;;4188:126;;;:::o;4320:153::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4320:153;;;:::o;4479:185::-;4593:64;4651:5;4593:64;:::i;:::-;4588:3;4581:77;4479:185;;:::o;4670:276::-;4790:4;4828:2;4817:9;4813:18;4805:26;;4841:98;4936:1;4925:9;4921:17;4912:6;4841:98;:::i;:::-;4670:276;;;;:::o;4952:118::-;5039:24;5057:5;5039:24;:::i;:::-;5034:3;5027:37;4952:118;;:::o;5076:222::-;5169:4;5207:2;5196:9;5192:18;5184:26;;5220:71;5288:1;5277:9;5273:17;5264:6;5220:71;:::i;:::-;5076:222;;;;:::o;5304:329::-;5363:6;5412:2;5400:9;5391:7;5387:23;5383:32;5380:119;;;5418:79;;:::i;:::-;5380:119;5538:1;5563:53;5608:7;5599:6;5588:9;5584:22;5563:53;:::i;:::-;5553:63;;5509:117;5304:329;;;;:::o;5639:619::-;5716:6;5724;5732;5781:2;5769:9;5760:7;5756:23;5752:32;5749:119;;;5787:79;;:::i;:::-;5749:119;5907:1;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5878:117;6034:2;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6005:118;6162:2;6188:53;6233:7;6224:6;6213:9;6209:22;6188:53;:::i;:::-;6178:63;;6133:118;5639:619;;;;;:::o;6264:86::-;6299:7;6339:4;6332:5;6328:16;6317:27;;6264:86;;;:::o;6356:112::-;6439:22;6455:5;6439:22;:::i;:::-;6434:3;6427:35;6356:112;;:::o;6474:214::-;6563:4;6601:2;6590:9;6586:18;6578:26;;6614:67;6678:1;6667:9;6663:17;6654:6;6614:67;:::i;:::-;6474:214;;;;:::o;6694:116::-;6764:21;6779:5;6764:21;:::i;:::-;6757:5;6754:32;6744:60;;6800:1;6797;6790:12;6744:60;6694:116;:::o;6816:133::-;6859:5;6897:6;6884:20;6875:29;;6913:30;6937:5;6913:30;:::i;:::-;6816:133;;;;:::o;6955:468::-;7020:6;7028;7077:2;7065:9;7056:7;7052:23;7048:32;7045:119;;;7083:79;;:::i;:::-;7045:119;7203:1;7228:53;7273:7;7264:6;7253:9;7249:22;7228:53;:::i;:::-;7218:63;;7174:117;7330:2;7356:50;7398:7;7389:6;7378:9;7374:22;7356:50;:::i;:::-;7346:60;;7301:115;6955:468;;;;;:::o;7429:118::-;7516:24;7534:5;7516:24;:::i;:::-;7511:3;7504:37;7429:118;;:::o;7553:222::-;7646:4;7684:2;7673:9;7669:18;7661:26;;7697:71;7765:1;7754:9;7750:17;7741:6;7697:71;:::i;:::-;7553:222;;;;:::o;7781:329::-;7840:6;7889:2;7877:9;7868:7;7864:23;7860:32;7857:119;;;7895:79;;:::i;:::-;7857:119;8015:1;8040:53;8085:7;8076:6;8065:9;8061:22;8040:53;:::i;:::-;8030:63;;7986:117;7781:329;;;;:::o;8116:104::-;8161:7;8190:24;8208:5;8190:24;:::i;:::-;8179:35;;8116:104;;;:::o;8226:138::-;8307:32;8333:5;8307:32;:::i;:::-;8300:5;8297:43;8287:71;;8354:1;8351;8344:12;8287:71;8226:138;:::o;8370:155::-;8424:5;8462:6;8449:20;8440:29;;8478:41;8513:5;8478:41;:::i;:::-;8370:155;;;;:::o;8531:345::-;8598:6;8647:2;8635:9;8626:7;8622:23;8618:32;8615:119;;;8653:79;;:::i;:::-;8615:119;8773:1;8798:61;8851:7;8842:6;8831:9;8827:22;8798:61;:::i;:::-;8788:71;;8744:125;8531:345;;;;:::o;8882:142::-;8985:32;9011:5;8985:32;:::i;:::-;8980:3;8973:45;8882:142;;:::o;9030:254::-;9139:4;9177:2;9166:9;9162:18;9154:26;;9190:87;9274:1;9263:9;9259:17;9250:6;9190:87;:::i;:::-;9030:254;;;;:::o;9290:323::-;9346:6;9395:2;9383:9;9374:7;9370:23;9366:32;9363:119;;;9401:79;;:::i;:::-;9363:119;9521:1;9546:50;9588:7;9579:6;9568:9;9564:22;9546:50;:::i;:::-;9536:60;;9492:114;9290:323;;;;:::o;9619:474::-;9687:6;9695;9744:2;9732:9;9723:7;9719:23;9715:32;9712:119;;;9750:79;;:::i;:::-;9712:119;9870:1;9895:53;9940:7;9931:6;9920:9;9916:22;9895:53;:::i;:::-;9885:63;;9841:117;9997:2;10023:53;10068:7;10059:6;10048:9;10044:22;10023:53;:::i;:::-;10013:63;;9968:118;9619:474;;;;;:::o;10099:180::-;10147:77;10144:1;10137:88;10244:4;10241:1;10234:15;10268:4;10265:1;10258:15;10285:320;10329:6;10366:1;10360:4;10356:12;10346:22;;10413:1;10407:4;10403:12;10434:18;10424:81;;10490:4;10482:6;10478:17;10468:27;;10424:81;10552:2;10544:6;10541:14;10521:18;10518:38;10515:84;;10571:18;;:::i;:::-;10515:84;10336:269;10285:320;;;:::o;10611:182::-;10751:34;10747:1;10739:6;10735:14;10728:58;10611:182;:::o;10799:366::-;10941:3;10962:67;11026:2;11021:3;10962:67;:::i;:::-;10955:74;;11038:93;11127:3;11038:93;:::i;:::-;11156:2;11151:3;11147:12;11140:19;;10799:366;;;:::o;11171:419::-;11337:4;11375:2;11364:9;11360:18;11352:26;;11424:9;11418:4;11414:20;11410:1;11399:9;11395:17;11388:47;11452:131;11578:4;11452:131;:::i;:::-;11444:139;;11171:419;;;:::o;11596:162::-;11736:14;11732:1;11724:6;11720:14;11713:38;11596:162;:::o;11764:366::-;11906:3;11927:67;11991:2;11986:3;11927:67;:::i;:::-;11920:74;;12003:93;12092:3;12003:93;:::i;:::-;12121:2;12116:3;12112:12;12105:19;;11764:366;;;:::o;12136:419::-;12302:4;12340:2;12329:9;12325:18;12317:26;;12389:9;12383:4;12379:20;12375:1;12364:9;12360:17;12353:47;12417:131;12543:4;12417:131;:::i;:::-;12409:139;;12136:419;;;:::o;12561:227::-;12701:34;12697:1;12689:6;12685:14;12678:58;12770:10;12765:2;12757:6;12753:15;12746:35;12561:227;:::o;12794:366::-;12936:3;12957:67;13021:2;13016:3;12957:67;:::i;:::-;12950:74;;13033:93;13122:3;13033:93;:::i;:::-;13151:2;13146:3;13142:12;13135:19;;12794:366;;;:::o;13166:419::-;13332:4;13370:2;13359:9;13355:18;13347:26;;13419:9;13413:4;13409:20;13405:1;13394:9;13390:17;13383:47;13447:131;13573:4;13447:131;:::i;:::-;13439:139;;13166:419;;;:::o;13591:180::-;13639:77;13636:1;13629:88;13736:4;13733:1;13726:15;13760:4;13757:1;13750:15;13777:305;13817:3;13836:20;13854:1;13836:20;:::i;:::-;13831:25;;13870:20;13888:1;13870:20;:::i;:::-;13865:25;;14024:1;13956:66;13952:74;13949:1;13946:81;13943:107;;;14030:18;;:::i;:::-;13943:107;14074:1;14071;14067:9;14060:16;;13777:305;;;;:::o;14088:163::-;14228:15;14224:1;14216:6;14212:14;14205:39;14088:163;:::o;14257:366::-;14399:3;14420:67;14484:2;14479:3;14420:67;:::i;:::-;14413:74;;14496:93;14585:3;14496:93;:::i;:::-;14614:2;14609:3;14605:12;14598:19;;14257:366;;;:::o;14629:419::-;14795:4;14833:2;14822:9;14818:18;14810:26;;14882:9;14876:4;14872:20;14868:1;14857:9;14853:17;14846:47;14910:131;15036:4;14910:131;:::i;:::-;14902:139;;14629:419;;;:::o;15054:224::-;15194:34;15190:1;15182:6;15178:14;15171:58;15263:7;15258:2;15250:6;15246:15;15239:32;15054:224;:::o;15284:366::-;15426:3;15447:67;15511:2;15506:3;15447:67;:::i;:::-;15440:74;;15523:93;15612:3;15523:93;:::i;:::-;15641:2;15636:3;15632:12;15625:19;;15284:366;;;:::o;15656:419::-;15822:4;15860:2;15849:9;15845:18;15837:26;;15909:9;15903:4;15899:20;15895:1;15884:9;15880:17;15873:47;15937:131;16063:4;15937:131;:::i;:::-;15929:139;;15656:419;;;:::o;16081:225::-;16221:34;16217:1;16209:6;16205:14;16198:58;16290:8;16285:2;16277:6;16273:15;16266:33;16081:225;:::o;16312:366::-;16454:3;16475:67;16539:2;16534:3;16475:67;:::i;:::-;16468:74;;16551:93;16640:3;16551:93;:::i;:::-;16669:2;16664:3;16660:12;16653:19;;16312:366;;;:::o;16684:419::-;16850:4;16888:2;16877:9;16873:18;16865:26;;16937:9;16931:4;16927:20;16923:1;16912:9;16908:17;16901:47;16965:131;17091:4;16965:131;:::i;:::-;16957:139;;16684:419;;;:::o;17109:223::-;17249:34;17245:1;17237:6;17233:14;17226:58;17318:6;17313:2;17305:6;17301:15;17294:31;17109:223;:::o;17338:366::-;17480:3;17501:67;17565:2;17560:3;17501:67;:::i;:::-;17494:74;;17577:93;17666:3;17577:93;:::i;:::-;17695:2;17690:3;17686:12;17679:19;;17338:366;;;:::o;17710:419::-;17876:4;17914:2;17903:9;17899:18;17891:26;;17963:9;17957:4;17953:20;17949:1;17938:9;17934:17;17927:47;17991:131;18117:4;17991:131;:::i;:::-;17983:139;;17710:419;;;:::o;18135:221::-;18275:34;18271:1;18263:6;18259:14;18252:58;18344:4;18339:2;18331:6;18327:15;18320:29;18135:221;:::o;18362:366::-;18504:3;18525:67;18589:2;18584:3;18525:67;:::i;:::-;18518:74;;18601:93;18690:3;18601:93;:::i;:::-;18719:2;18714:3;18710:12;18703:19;;18362:366;;;:::o;18734:419::-;18900:4;18938:2;18927:9;18923:18;18915:26;;18987:9;18981:4;18977:20;18973:1;18962:9;18958:17;18951:47;19015:131;19141:4;19015:131;:::i;:::-;19007:139;;18734:419;;;:::o;19159:224::-;19299:34;19295:1;19287:6;19283:14;19276:58;19368:7;19363:2;19355:6;19351:15;19344:32;19159:224;:::o;19389:366::-;19531:3;19552:67;19616:2;19611:3;19552:67;:::i;:::-;19545:74;;19628:93;19717:3;19628:93;:::i;:::-;19746:2;19741:3;19737:12;19730:19;;19389:366;;;:::o;19761:419::-;19927:4;19965:2;19954:9;19950:18;19942:26;;20014:9;20008:4;20004:20;20000:1;19989:9;19985:17;19978:47;20042:131;20168:4;20042:131;:::i;:::-;20034:139;;19761:419;;;:::o;20186:222::-;20326:34;20322:1;20314:6;20310:14;20303:58;20395:5;20390:2;20382:6;20378:15;20371:30;20186:222;:::o;20414:366::-;20556:3;20577:67;20641:2;20636:3;20577:67;:::i;:::-;20570:74;;20653:93;20742:3;20653:93;:::i;:::-;20771:2;20766:3;20762:12;20755:19;;20414:366;;;:::o;20786:419::-;20952:4;20990:2;20979:9;20975:18;20967:26;;21039:9;21033:4;21029:20;21025:1;21014:9;21010:17;21003:47;21067:131;21193:4;21067:131;:::i;:::-;21059:139;;20786:419;;;:::o;21211:169::-;21351:21;21347:1;21339:6;21335:14;21328:45;21211:169;:::o;21386:366::-;21528:3;21549:67;21613:2;21608:3;21549:67;:::i;:::-;21542:74;;21625:93;21714:3;21625:93;:::i;:::-;21743:2;21738:3;21734:12;21727:19;;21386:366;;;:::o;21758:419::-;21924:4;21962:2;21951:9;21947:18;21939:26;;22011:9;22005:4;22001:20;21997:1;21986:9;21982:17;21975:47;22039:131;22165:4;22039:131;:::i;:::-;22031:139;;21758:419;;;:::o;22183:238::-;22323:34;22319:1;22311:6;22307:14;22300:58;22392:21;22387:2;22379:6;22375:15;22368:46;22183:238;:::o;22427:366::-;22569:3;22590:67;22654:2;22649:3;22590:67;:::i;:::-;22583:74;;22666:93;22755:3;22666:93;:::i;:::-;22784:2;22779:3;22775:12;22768:19;;22427:366;;;:::o;22799:419::-;22965:4;23003:2;22992:9;22988:18;22980:26;;23052:9;23046:4;23042:20;23038:1;23027:9;23023:17;23016:47;23080:131;23206:4;23080:131;:::i;:::-;23072:139;;22799:419;;;:::o;23224:239::-;23364:34;23360:1;23352:6;23348:14;23341:58;23433:22;23428:2;23420:6;23416:15;23409:47;23224:239;:::o;23469:366::-;23611:3;23632:67;23696:2;23691:3;23632:67;:::i;:::-;23625:74;;23708:93;23797:3;23708:93;:::i;:::-;23826:2;23821:3;23817:12;23810:19;;23469:366;;;:::o;23841:419::-;24007:4;24045:2;24034:9;24030:18;24022:26;;24094:9;24088:4;24084:20;24080:1;24069:9;24065:17;24058:47;24122:131;24248:4;24122:131;:::i;:::-;24114:139;;23841:419;;;:::o;24266:223::-;24406:34;24402:1;24394:6;24390:14;24383:58;24475:6;24470:2;24462:6;24458:15;24451:31;24266:223;:::o;24495:366::-;24637:3;24658:67;24722:2;24717:3;24658:67;:::i;:::-;24651:74;;24734:93;24823:3;24734:93;:::i;:::-;24852:2;24847:3;24843:12;24836:19;;24495:366;;;:::o;24867:419::-;25033:4;25071:2;25060:9;25056:18;25048:26;;25120:9;25114:4;25110:20;25106:1;25095:9;25091:17;25084:47;25148:131;25274:4;25148:131;:::i;:::-;25140:139;;24867:419;;;:::o;25292:180::-;25340:77;25337:1;25330:88;25437:4;25434:1;25427:15;25461:4;25458:1;25451:15;25478:185;25518:1;25535:20;25553:1;25535:20;:::i;:::-;25530:25;;25569:20;25587:1;25569:20;:::i;:::-;25564:25;;25608:1;25598:35;;25613:18;;:::i;:::-;25598:35;25655:1;25652;25648:9;25643:14;;25478:185;;;;:::o;25669:225::-;25809:34;25805:1;25797:6;25793:14;25786:58;25878:8;25873:2;25865:6;25861:15;25854:33;25669:225;:::o;25900:366::-;26042:3;26063:67;26127:2;26122:3;26063:67;:::i;:::-;26056:74;;26139:93;26228:3;26139:93;:::i;:::-;26257:2;26252:3;26248:12;26241:19;;25900:366;;;:::o;26272:419::-;26438:4;26476:2;26465:9;26461:18;26453:26;;26525:9;26519:4;26515:20;26511:1;26500:9;26496:17;26489:47;26553:131;26679:4;26553:131;:::i;:::-;26545:139;;26272:419;;;:::o;26697:332::-;26818:4;26856:2;26845:9;26841:18;26833:26;;26869:71;26937:1;26926:9;26922:17;26913:6;26869:71;:::i;:::-;26950:72;27018:2;27007:9;27003:18;26994:6;26950:72;:::i;:::-;26697:332;;;;;:::o;27035:348::-;27075:7;27098:20;27116:1;27098:20;:::i;:::-;27093:25;;27132:20;27150:1;27132:20;:::i;:::-;27127:25;;27320:1;27252:66;27248:74;27245:1;27242:81;27237:1;27230:9;27223:17;27219:105;27216:131;;;27327:18;;:::i;:::-;27216:131;27375:1;27372;27368:9;27357:20;;27035:348;;;;:::o;27389:191::-;27429:4;27449:20;27467:1;27449:20;:::i;:::-;27444:25;;27483:20;27501:1;27483:20;:::i;:::-;27478:25;;27522:1;27519;27516:8;27513:34;;;27527:18;;:::i;:::-;27513:34;27572:1;27569;27565:9;27557:17;;27389:191;;;;:::o;27586:180::-;27634:77;27631:1;27624:88;27731:4;27728:1;27721:15;27755:4;27752:1;27745:15;27772:180;27820:77;27817:1;27810:88;27917:4;27914:1;27907:15;27941:4;27938:1;27931:15;27958:143;28015:5;28046:6;28040:13;28031:22;;28062:33;28089:5;28062:33;:::i;:::-;27958:143;;;;:::o;28107:351::-;28177:6;28226:2;28214:9;28205:7;28201:23;28197:32;28194:119;;;28232:79;;:::i;:::-;28194:119;28352:1;28377:64;28433:7;28424:6;28413:9;28409:22;28377:64;:::i;:::-;28367:74;;28323:128;28107:351;;;;:::o;28464:85::-;28509:7;28538:5;28527:16;;28464:85;;;:::o;28555:158::-;28613:9;28646:61;28664:42;28673:32;28699:5;28673:32;:::i;:::-;28664:42;:::i;:::-;28646:61;:::i;:::-;28633:74;;28555:158;;;:::o;28719:147::-;28814:45;28853:5;28814:45;:::i;:::-;28809:3;28802:58;28719:147;;:::o;28872:114::-;28939:6;28973:5;28967:12;28957:22;;28872:114;;;:::o;28992:184::-;29091:11;29125:6;29120:3;29113:19;29165:4;29160:3;29156:14;29141:29;;28992:184;;;;:::o;29182:132::-;29249:4;29272:3;29264:11;;29302:4;29297:3;29293:14;29285:22;;29182:132;;;:::o;29320:108::-;29397:24;29415:5;29397:24;:::i;:::-;29392:3;29385:37;29320:108;;:::o;29434:179::-;29503:10;29524:46;29566:3;29558:6;29524:46;:::i;:::-;29602:4;29597:3;29593:14;29579:28;;29434:179;;;;:::o;29619:113::-;29689:4;29721;29716:3;29712:14;29704:22;;29619:113;;;:::o;29768:732::-;29887:3;29916:54;29964:5;29916:54;:::i;:::-;29986:86;30065:6;30060:3;29986:86;:::i;:::-;29979:93;;30096:56;30146:5;30096:56;:::i;:::-;30175:7;30206:1;30191:284;30216:6;30213:1;30210:13;30191:284;;;30292:6;30286:13;30319:63;30378:3;30363:13;30319:63;:::i;:::-;30312:70;;30405:60;30458:6;30405:60;:::i;:::-;30395:70;;30251:224;30238:1;30235;30231:9;30226:14;;30191:284;;;30195:14;30491:3;30484:10;;29892:608;;;29768:732;;;;:::o;30506:831::-;30769:4;30807:3;30796:9;30792:19;30784:27;;30821:71;30889:1;30878:9;30874:17;30865:6;30821:71;:::i;:::-;30902:80;30978:2;30967:9;30963:18;30954:6;30902:80;:::i;:::-;31029:9;31023:4;31019:20;31014:2;31003:9;30999:18;30992:48;31057:108;31160:4;31151:6;31057:108;:::i;:::-;31049:116;;31175:72;31243:2;31232:9;31228:18;31219:6;31175:72;:::i;:::-;31257:73;31325:3;31314:9;31310:19;31301:6;31257:73;:::i;:::-;30506:831;;;;;;;;:::o;31343:807::-;31592:4;31630:3;31619:9;31615:19;31607:27;;31644:71;31712:1;31701:9;31697:17;31688:6;31644:71;:::i;:::-;31725:72;31793:2;31782:9;31778:18;31769:6;31725:72;:::i;:::-;31807:80;31883:2;31872:9;31868:18;31859:6;31807:80;:::i;:::-;31897;31973:2;31962:9;31958:18;31949:6;31897:80;:::i;:::-;31987:73;32055:3;32044:9;32040:19;32031:6;31987:73;:::i;:::-;32070;32138:3;32127:9;32123:19;32114:6;32070:73;:::i;:::-;31343:807;;;;;;;;;:::o;32156:143::-;32213:5;32244:6;32238:13;32229:22;;32260:33;32287:5;32260:33;:::i;:::-;32156:143;;;;:::o;32305:663::-;32393:6;32401;32409;32458:2;32446:9;32437:7;32433:23;32429:32;32426:119;;;32464:79;;:::i;:::-;32426:119;32584:1;32609:64;32665:7;32656:6;32645:9;32641:22;32609:64;:::i;:::-;32599:74;;32555:128;32722:2;32748:64;32804:7;32795:6;32784:9;32780:22;32748:64;:::i;:::-;32738:74;;32693:129;32861:2;32887:64;32943:7;32934:6;32923:9;32919:22;32887:64;:::i;:::-;32877:74;;32832:129;32305:663;;;;;:::o

Swarm Source

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