ETH Price: $3,274.18 (-0.77%)

Token

SHIBARIUM PEPE ($SHIBPEPE)
 

Overview

Max Total Supply

1,000,000,000 $SHIBPEPE

Holders

8

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.125387743 $SHIBPEPE

Value
$0.00
0x78959a67da42f65ab5b103157eb67cdcc929fbca
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:
myToken

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-16
*/

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

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

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

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

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

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

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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

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

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// 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 generally not needed starting with Solidity 0.8, since 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 subtraction 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;
        }
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: contracts/MyToken.sol


pragma solidity ^0.8.17;






contract myToken is Context, IERC20, Ownable {
    using SafeMath for uint256;
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private bots;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;
    address payable private _taxWallet;

    uint256 private _initialBuyTax=20;
    uint256 private _initialSellTax=25;
    uint256 private _finalBuyTax=1;
    uint256 private _finalSellTax=1;
    uint256 private _reduceBuyTaxAt=20;
    uint256 private _reduceSellTaxAt=25;
    uint256 private _preventSwapBefore=25;
    uint256 private _buyCount=0;

    uint8 private constant _decimals = 9;
    uint256 private constant _tTotal = 1000000000 * 10**_decimals;
    string private constant _name = unicode"SHIBARIUM PEPE";
    string private constant _symbol = unicode"$SHIBPEPE";
    uint256 public _maxTxAmount = 20000000 * 10**_decimals;
    uint256 public _maxWalletSize = 20000000 * 10**_decimals;
    uint256 public _taxSwapThreshold= 14000001 * 10**_decimals;
    uint256 public _maxTaxSwap= 14000000 * 10**_decimals;

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;

    event MaxTxAmountUpdated(uint _maxTxAmount);
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () {
        _taxWallet = payable(_msgSender());
        _balances[_msgSender()] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_taxWallet] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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);
    }

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 taxAmount=0;
        if (from != owner() && to != owner()) {
            taxAmount = amount.mul((_buyCount>_reduceBuyTaxAt)?_finalBuyTax:_initialBuyTax).div(100);

            if (transferDelayEnabled) {
                  if (to != address(uniswapV2Router) && to != address(uniswapV2Pair)) {
                      require(
                          _holderLastTransferTimestamp[tx.origin] <
                              block.number,
                          "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                      );
                      _holderLastTransferTimestamp[tx.origin] = block.number;
                  }
              }

            if (from == uniswapV2Pair && to != address(uniswapV2Router) && ! _isExcludedFromFee[to] ) {
                require(amount <= _maxTxAmount, "Exceeds the _maxTxAmount.");
                require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");
                _buyCount++;
            }

            if(to == uniswapV2Pair && from!= address(this) ){
                taxAmount = amount.mul((_buyCount>_reduceSellTaxAt)?_finalSellTax:_initialSellTax).div(100);
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            if (!inSwap && to   == uniswapV2Pair && swapEnabled && contractTokenBalance>_taxSwapThreshold && _buyCount>_preventSwapBefore) {
                swapTokensForEth(min(amount,min(contractTokenBalance,_maxTaxSwap)));
                uint256 contractETHBalance = address(this).balance;
                if(contractETHBalance > 50000000000000000) {
                    sendETHToFee(address(this).balance);
                }
            }
        }

        if(taxAmount>0){
          _balances[address(this)]=_balances[address(this)].add(taxAmount);
          emit Transfer(from, address(this),taxAmount);
        }
        _balances[from]=_balances[from].sub(amount);
        _balances[to]=_balances[to].add(amount.sub(taxAmount));
        emit Transfer(from, to, amount.sub(taxAmount));
    }


    function min(uint256 a, uint256 b) private pure returns (uint256){
      return (a>b)?b:a;
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function removeLimits() external onlyOwner{
        _maxTxAmount = _tTotal;
        _maxWalletSize=_tTotal;
        transferDelayEnabled=false;
        emit MaxTxAmountUpdated(_tTotal);
    }

    function sendETHToFee(uint256 amount) private {
        _taxWallet.transfer(amount);
    }


    function openTrading() external onlyOwner() {
        require(!tradingOpen,"trading is already open");
        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        swapEnabled = true;
        tradingOpen = true;
    }

    receive() external payable {}

    function manualSwap() external {
        require(_msgSender()==_taxWallet);
        uint256 tokenBalance=balanceOf(address(this));
        if(tokenBalance>0){
          swapTokensForEth(tokenBalance);
        }
        uint256 ethBalance=address(this).balance;
        if(ethBalance>0){
          sendETHToFee(ethBalance);
        }
    }
}

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":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTaxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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"},{"stateMutability":"payable","type":"receive"}]

60806040526001600660006101000a81548160ff0219169083151502179055506014600755601960085560016009556001600a556014600b556019600c556019600d556000600e556009600a62000057919062000661565b6301312d00620000689190620006b2565b600f556009600a6200007b919062000661565b6301312d006200008c9190620006b2565b6010556009600a6200009f919062000661565b62d59f81620000af9190620006b2565b6011556009600a620000c2919062000661565b62d59f80620000d29190620006b2565b6012556000601460156101000a81548160ff0219169083151502179055506000601460166101000a81548160ff0219169083151502179055503480156200011857600080fd5b50620001396200012d620003d260201b60201c565b620003da60201b60201c565b62000149620003d260201b60201c565b600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a62000199919062000661565b633b9aca00620001aa9190620006b2565b60016000620001be620003d260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160036000620002126200049e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000345620003d260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a620003a4919062000661565b633b9aca00620003b59190620006b2565b604051620003c491906200070e565b60405180910390a36200072b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000555578086048111156200052d576200052c620004c7565b5b60018516156200053d5780820291505b80810290506200054d85620004f6565b94506200050d565b94509492505050565b60008262000570576001905062000643565b8162000580576000905062000643565b8160018114620005995760028114620005a457620005da565b600191505062000643565b60ff841115620005b957620005b8620004c7565b5b8360020a915084821115620005d357620005d2620004c7565b5b5062000643565b5060208310610133831016604e8410600b8410161715620006145782820a9050838111156200060e576200060d620004c7565b5b62000643565b62000623848484600162000503565b925090508184048111156200063d576200063c620004c7565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b60006200066e826200064a565b91506200067b8362000654565b9250620006aa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200055e565b905092915050565b6000620006bf826200064a565b9150620006cc836200064a565b9250828202620006dc816200064a565b91508282048414831517620006f657620006f5620004c7565b5b5092915050565b62000708816200064a565b82525050565b6000602082019050620007256000830184620006fd565b92915050565b612e17806200073b6000396000f3fe6080604052600436106101235760003560e01c80637d1db4a5116100a0578063bf474bed11610064578063bf474bed146103c0578063c876d0b9146103eb578063c9567bf914610416578063dd62ed3e1461042d578063f2fde38b1461046a5761012a565b80637d1db4a5146102d75780638da5cb5b146103025780638f9a55c01461032d57806395d89b4114610358578063a9059cbb146103835761012a565b8063313ce567116100e7578063313ce5671461022a57806351bc3c851461025557806370a082311461026c578063715018a6146102a9578063751039fc146102c05761012a565b806306fdde031461012f578063095ea7b31461015a5780630faee56f1461019757806318160ddd146101c257806323b872dd146101ed5761012a565b3661012a57005b600080fd5b34801561013b57600080fd5b50610144610493565b6040516101519190611ef9565b60405180910390f35b34801561016657600080fd5b50610181600480360381019061017c9190611fb4565b6104d0565b60405161018e919061200f565b60405180910390f35b3480156101a357600080fd5b506101ac6104ee565b6040516101b99190612039565b60405180910390f35b3480156101ce57600080fd5b506101d76104f4565b6040516101e49190612039565b60405180910390f35b3480156101f957600080fd5b50610214600480360381019061020f9190612054565b610518565b604051610221919061200f565b60405180910390f35b34801561023657600080fd5b5061023f6105f1565b60405161024c91906120c3565b60405180910390f35b34801561026157600080fd5b5061026a6105fa565b005b34801561027857600080fd5b50610293600480360381019061028e91906120de565b610697565b6040516102a09190612039565b60405180910390f35b3480156102b557600080fd5b506102be6106e0565b005b3480156102cc57600080fd5b506102d56106f4565b005b3480156102e357600080fd5b506102ec6107b2565b6040516102f99190612039565b60405180910390f35b34801561030e57600080fd5b506103176107b8565b604051610324919061211a565b60405180910390f35b34801561033957600080fd5b506103426107e1565b60405161034f9190612039565b60405180910390f35b34801561036457600080fd5b5061036d6107e7565b60405161037a9190611ef9565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190611fb4565b610824565b6040516103b7919061200f565b60405180910390f35b3480156103cc57600080fd5b506103d5610842565b6040516103e29190612039565b60405180910390f35b3480156103f757600080fd5b50610400610848565b60405161040d919061200f565b60405180910390f35b34801561042257600080fd5b5061042b61085b565b005b34801561043957600080fd5b50610454600480360381019061044f9190612135565b610d03565b6040516104619190612039565b60405180910390f35b34801561047657600080fd5b50610491600480360381019061048c91906120de565b610d8a565b005b60606040518060400160405280600e81526020017f53484942415249554d2050455045000000000000000000000000000000000000815250905090565b60006104e46104dd610e0d565b8484610e15565b6001905092915050565b60125481565b60006009600a61050491906122d7565b633b9aca006105139190612322565b905090565b6000610525848484610fde565b6105e684610531610e0d565b6105e185604051806060016040528060288152602001612dba60289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610597610e0d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461197c9092919063ffffffff16565b610e15565b600190509392505050565b60006009905090565b600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661063b610e0d565b73ffffffffffffffffffffffffffffffffffffffff161461065b57600080fd5b600061066630610697565b9050600081111561067b5761067a816119d1565b5b600047905060008111156106935761069281611c4a565b5b5050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6106e8611cb6565b6106f26000611d34565b565b6106fc611cb6565b6009600a61070a91906122d7565b633b9aca006107199190612322565b600f819055506009600a61072d91906122d7565b633b9aca0061073c9190612322565b6010819055506000600660006101000a81548160ff0219169083151502179055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6009600a61078c91906122d7565b633b9aca0061079b9190612322565b6040516107a89190612039565b60405180910390a1565b600f5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b60606040518060400160405280600981526020017f2453484942504550450000000000000000000000000000000000000000000000815250905090565b6000610838610831610e0d565b8484610fde565b6001905092915050565b60115481565b600660009054906101000a900460ff1681565b610863611cb6565b60148054906101000a900460ff16156108b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a8906123b0565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061094f30601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009600a61093b91906122d7565b633b9aca0061094a9190612322565b610e15565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e091906123e5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8d91906123e5565b6040518363ffffffff1660e01b8152600401610aaa929190612412565b6020604051808303816000875af1158015610ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aed91906123e5565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610b7630610697565b600080610b816107b8565b426040518863ffffffff1660e01b8152600401610ba396959493929190612480565b60606040518083038185885af1158015610bc1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610be691906124f6565b505050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610c88929190612549565b6020604051808303816000875af1158015610ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccb919061259e565b506001601460166101000a81548160ff02191690831515021790555060016014806101000a81548160ff021916908315150217905550565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d92611cb6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df89061263d565b60405180910390fd5b610e0a81611d34565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b906126cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea90612761565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610fd19190612039565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361104d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611044906127f3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b390612885565b60405180910390fd5b600081116110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f690612917565b60405180910390fd5b60006111096107b8565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561117757506111476107b8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156116bf576111b860646111aa600b54600e54116111975760075461119b565b6009545b85611df890919063ffffffff16565b611e0e90919063ffffffff16565b9050600660009054906101000a900460ff161561134757601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561127b5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156113465743600560003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f8906129cf565b60405180910390fd5b43600560003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156113f25750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156114485750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561150357600f54821115611492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148990612a3b565b60405180910390fd5b6010548261149f85610697565b6114a99190612a5b565b11156114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e190612adb565b60405180910390fd5b600e60008154809291906114fd90612afb565b91905055505b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561158c57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156115d0576115cd60646115bf600c54600e54116115ac576008546115b0565b600a545b85611df890919063ffffffff16565b611e0e90919063ffffffff16565b90505b60006115db30610697565b9050601460159054906101000a900460ff161580156116475750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561165f5750601460169054906101000a900460ff165b801561166c575060115481115b801561167b5750600d54600e54115b156116bd5761169d6116988461169384601254611e24565b611e24565b6119d1565b600047905066b1a2bc2ec500008111156116bb576116ba47611c4a565b5b505b505b60008111156117c35761171a81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e3d90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117ba9190612039565b60405180910390a35b61181582600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e5390919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118bc61186e8284611e5390919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e3d90919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6119618486611e5390919063ffffffff16565b60405161196e9190612039565b60405180910390a350505050565b60008383111582906119c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bb9190611ef9565b60405180910390fd5b5082840390509392505050565b6001601460156101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611a0957611a08612b43565b5b604051908082528060200260200182016040528015611a375781602001602082028036833780820191505090505b5090503081600081518110611a4f57611a4e612b72565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1a91906123e5565b81600181518110611b2e57611b2d612b72565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611b9530601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610e15565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611bf9959493929190612c5f565b600060405180830381600087803b158015611c1357600080fd5b505af1158015611c27573d6000803e3d6000fd5b50505050506000601460156101000a81548160ff02191690831515021790555050565b600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611cb2573d6000803e3d6000fd5b5050565b611cbe610e0d565b73ffffffffffffffffffffffffffffffffffffffff16611cdc6107b8565b73ffffffffffffffffffffffffffffffffffffffff1614611d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2990612d05565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183611e069190612322565b905092915050565b60008183611e1c9190612d54565b905092915050565b6000818311611e335782611e35565b815b905092915050565b60008183611e4b9190612a5b565b905092915050565b60008183611e619190612d85565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ea3578082015181840152602081019050611e88565b60008484015250505050565b6000601f19601f8301169050919050565b6000611ecb82611e69565b611ed58185611e74565b9350611ee5818560208601611e85565b611eee81611eaf565b840191505092915050565b60006020820190508181036000830152611f138184611ec0565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f4b82611f20565b9050919050565b611f5b81611f40565b8114611f6657600080fd5b50565b600081359050611f7881611f52565b92915050565b6000819050919050565b611f9181611f7e565b8114611f9c57600080fd5b50565b600081359050611fae81611f88565b92915050565b60008060408385031215611fcb57611fca611f1b565b5b6000611fd985828601611f69565b9250506020611fea85828601611f9f565b9150509250929050565b60008115159050919050565b61200981611ff4565b82525050565b60006020820190506120246000830184612000565b92915050565b61203381611f7e565b82525050565b600060208201905061204e600083018461202a565b92915050565b60008060006060848603121561206d5761206c611f1b565b5b600061207b86828701611f69565b935050602061208c86828701611f69565b925050604061209d86828701611f9f565b9150509250925092565b600060ff82169050919050565b6120bd816120a7565b82525050565b60006020820190506120d860008301846120b4565b92915050565b6000602082840312156120f4576120f3611f1b565b5b600061210284828501611f69565b91505092915050565b61211481611f40565b82525050565b600060208201905061212f600083018461210b565b92915050565b6000806040838503121561214c5761214b611f1b565b5b600061215a85828601611f69565b925050602061216b85828601611f69565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156121fb578086048111156121d7576121d6612175565b5b60018516156121e65780820291505b80810290506121f4856121a4565b94506121bb565b94509492505050565b60008261221457600190506122d0565b8161222257600090506122d0565b8160018114612238576002811461224257612271565b60019150506122d0565b60ff84111561225457612253612175565b5b8360020a91508482111561226b5761226a612175565b5b506122d0565b5060208310610133831016604e8410600b84101617156122a65782820a9050838111156122a1576122a0612175565b5b6122d0565b6122b384848460016121b1565b925090508184048111156122ca576122c9612175565b5b81810290505b9392505050565b60006122e282611f7e565b91506122ed836120a7565b925061231a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612204565b905092915050565b600061232d82611f7e565b915061233883611f7e565b925082820261234681611f7e565b9150828204841483151761235d5761235c612175565b5b5092915050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b600061239a601783611e74565b91506123a582612364565b602082019050919050565b600060208201905081810360008301526123c98161238d565b9050919050565b6000815190506123df81611f52565b92915050565b6000602082840312156123fb576123fa611f1b565b5b6000612409848285016123d0565b91505092915050565b6000604082019050612427600083018561210b565b612434602083018461210b565b9392505050565b6000819050919050565b6000819050919050565b600061246a6124656124608461243b565b612445565b611f7e565b9050919050565b61247a8161244f565b82525050565b600060c082019050612495600083018961210b565b6124a2602083018861202a565b6124af6040830187612471565b6124bc6060830186612471565b6124c9608083018561210b565b6124d660a083018461202a565b979650505050505050565b6000815190506124f081611f88565b92915050565b60008060006060848603121561250f5761250e611f1b565b5b600061251d868287016124e1565b935050602061252e868287016124e1565b925050604061253f868287016124e1565b9150509250925092565b600060408201905061255e600083018561210b565b61256b602083018461202a565b9392505050565b61257b81611ff4565b811461258657600080fd5b50565b60008151905061259881612572565b92915050565b6000602082840312156125b4576125b3611f1b565b5b60006125c284828501612589565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612627602683611e74565b9150612632826125cb565b604082019050919050565b600060208201905081810360008301526126568161261a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006126b9602483611e74565b91506126c48261265d565b604082019050919050565b600060208201905081810360008301526126e8816126ac565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061274b602283611e74565b9150612756826126ef565b604082019050919050565b6000602082019050818103600083015261277a8161273e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006127dd602583611e74565b91506127e882612781565b604082019050919050565b6000602082019050818103600083015261280c816127d0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061286f602383611e74565b915061287a82612813565b604082019050919050565b6000602082019050818103600083015261289e81612862565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612901602983611e74565b915061290c826128a5565b604082019050919050565b60006020820190508181036000830152612930816128f4565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006129b9604983611e74565b91506129c482612937565b606082019050919050565b600060208201905081810360008301526129e8816129ac565b9050919050565b7f4578636565647320746865205f6d61785478416d6f756e742e00000000000000600082015250565b6000612a25601983611e74565b9150612a30826129ef565b602082019050919050565b60006020820190508181036000830152612a5481612a18565b9050919050565b6000612a6682611f7e565b9150612a7183611f7e565b9250828201905080821115612a8957612a88612175565b5b92915050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b6000612ac5601a83611e74565b9150612ad082612a8f565b602082019050919050565b60006020820190508181036000830152612af481612ab8565b9050919050565b6000612b0682611f7e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b3857612b37612175565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612bd681611f40565b82525050565b6000612be88383612bcd565b60208301905092915050565b6000602082019050919050565b6000612c0c82612ba1565b612c168185612bac565b9350612c2183612bbd565b8060005b83811015612c52578151612c398882612bdc565b9750612c4483612bf4565b925050600181019050612c25565b5085935050505092915050565b600060a082019050612c74600083018861202a565b612c816020830187612471565b8181036040830152612c938186612c01565b9050612ca2606083018561210b565b612caf608083018461202a565b9695505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612cef602083611e74565b9150612cfa82612cb9565b602082019050919050565b60006020820190508181036000830152612d1e81612ce2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612d5f82611f7e565b9150612d6a83611f7e565b925082612d7a57612d79612d25565b5b828204905092915050565b6000612d9082611f7e565b9150612d9b83611f7e565b9250828203905081811115612db357612db2612175565b5b9291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212201f25ca9b270ec9a4a8c440df96a03d35c1d7490766167777557f12296f3e528e64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101235760003560e01c80637d1db4a5116100a0578063bf474bed11610064578063bf474bed146103c0578063c876d0b9146103eb578063c9567bf914610416578063dd62ed3e1461042d578063f2fde38b1461046a5761012a565b80637d1db4a5146102d75780638da5cb5b146103025780638f9a55c01461032d57806395d89b4114610358578063a9059cbb146103835761012a565b8063313ce567116100e7578063313ce5671461022a57806351bc3c851461025557806370a082311461026c578063715018a6146102a9578063751039fc146102c05761012a565b806306fdde031461012f578063095ea7b31461015a5780630faee56f1461019757806318160ddd146101c257806323b872dd146101ed5761012a565b3661012a57005b600080fd5b34801561013b57600080fd5b50610144610493565b6040516101519190611ef9565b60405180910390f35b34801561016657600080fd5b50610181600480360381019061017c9190611fb4565b6104d0565b60405161018e919061200f565b60405180910390f35b3480156101a357600080fd5b506101ac6104ee565b6040516101b99190612039565b60405180910390f35b3480156101ce57600080fd5b506101d76104f4565b6040516101e49190612039565b60405180910390f35b3480156101f957600080fd5b50610214600480360381019061020f9190612054565b610518565b604051610221919061200f565b60405180910390f35b34801561023657600080fd5b5061023f6105f1565b60405161024c91906120c3565b60405180910390f35b34801561026157600080fd5b5061026a6105fa565b005b34801561027857600080fd5b50610293600480360381019061028e91906120de565b610697565b6040516102a09190612039565b60405180910390f35b3480156102b557600080fd5b506102be6106e0565b005b3480156102cc57600080fd5b506102d56106f4565b005b3480156102e357600080fd5b506102ec6107b2565b6040516102f99190612039565b60405180910390f35b34801561030e57600080fd5b506103176107b8565b604051610324919061211a565b60405180910390f35b34801561033957600080fd5b506103426107e1565b60405161034f9190612039565b60405180910390f35b34801561036457600080fd5b5061036d6107e7565b60405161037a9190611ef9565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190611fb4565b610824565b6040516103b7919061200f565b60405180910390f35b3480156103cc57600080fd5b506103d5610842565b6040516103e29190612039565b60405180910390f35b3480156103f757600080fd5b50610400610848565b60405161040d919061200f565b60405180910390f35b34801561042257600080fd5b5061042b61085b565b005b34801561043957600080fd5b50610454600480360381019061044f9190612135565b610d03565b6040516104619190612039565b60405180910390f35b34801561047657600080fd5b50610491600480360381019061048c91906120de565b610d8a565b005b60606040518060400160405280600e81526020017f53484942415249554d2050455045000000000000000000000000000000000000815250905090565b60006104e46104dd610e0d565b8484610e15565b6001905092915050565b60125481565b60006009600a61050491906122d7565b633b9aca006105139190612322565b905090565b6000610525848484610fde565b6105e684610531610e0d565b6105e185604051806060016040528060288152602001612dba60289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610597610e0d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461197c9092919063ffffffff16565b610e15565b600190509392505050565b60006009905090565b600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661063b610e0d565b73ffffffffffffffffffffffffffffffffffffffff161461065b57600080fd5b600061066630610697565b9050600081111561067b5761067a816119d1565b5b600047905060008111156106935761069281611c4a565b5b5050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6106e8611cb6565b6106f26000611d34565b565b6106fc611cb6565b6009600a61070a91906122d7565b633b9aca006107199190612322565b600f819055506009600a61072d91906122d7565b633b9aca0061073c9190612322565b6010819055506000600660006101000a81548160ff0219169083151502179055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6009600a61078c91906122d7565b633b9aca0061079b9190612322565b6040516107a89190612039565b60405180910390a1565b600f5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b60606040518060400160405280600981526020017f2453484942504550450000000000000000000000000000000000000000000000815250905090565b6000610838610831610e0d565b8484610fde565b6001905092915050565b60115481565b600660009054906101000a900460ff1681565b610863611cb6565b60148054906101000a900460ff16156108b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a8906123b0565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061094f30601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009600a61093b91906122d7565b633b9aca0061094a9190612322565b610e15565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e091906123e5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8d91906123e5565b6040518363ffffffff1660e01b8152600401610aaa929190612412565b6020604051808303816000875af1158015610ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aed91906123e5565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610b7630610697565b600080610b816107b8565b426040518863ffffffff1660e01b8152600401610ba396959493929190612480565b60606040518083038185885af1158015610bc1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610be691906124f6565b505050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610c88929190612549565b6020604051808303816000875af1158015610ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccb919061259e565b506001601460166101000a81548160ff02191690831515021790555060016014806101000a81548160ff021916908315150217905550565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d92611cb6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df89061263d565b60405180910390fd5b610e0a81611d34565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b906126cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea90612761565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610fd19190612039565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361104d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611044906127f3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b390612885565b60405180910390fd5b600081116110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f690612917565b60405180910390fd5b60006111096107b8565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561117757506111476107b8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156116bf576111b860646111aa600b54600e54116111975760075461119b565b6009545b85611df890919063ffffffff16565b611e0e90919063ffffffff16565b9050600660009054906101000a900460ff161561134757601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561127b5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156113465743600560003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f8906129cf565b60405180910390fd5b43600560003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156113f25750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156114485750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561150357600f54821115611492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148990612a3b565b60405180910390fd5b6010548261149f85610697565b6114a99190612a5b565b11156114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e190612adb565b60405180910390fd5b600e60008154809291906114fd90612afb565b91905055505b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561158c57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156115d0576115cd60646115bf600c54600e54116115ac576008546115b0565b600a545b85611df890919063ffffffff16565b611e0e90919063ffffffff16565b90505b60006115db30610697565b9050601460159054906101000a900460ff161580156116475750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561165f5750601460169054906101000a900460ff165b801561166c575060115481115b801561167b5750600d54600e54115b156116bd5761169d6116988461169384601254611e24565b611e24565b6119d1565b600047905066b1a2bc2ec500008111156116bb576116ba47611c4a565b5b505b505b60008111156117c35761171a81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e3d90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117ba9190612039565b60405180910390a35b61181582600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e5390919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118bc61186e8284611e5390919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e3d90919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6119618486611e5390919063ffffffff16565b60405161196e9190612039565b60405180910390a350505050565b60008383111582906119c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bb9190611ef9565b60405180910390fd5b5082840390509392505050565b6001601460156101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611a0957611a08612b43565b5b604051908082528060200260200182016040528015611a375781602001602082028036833780820191505090505b5090503081600081518110611a4f57611a4e612b72565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1a91906123e5565b81600181518110611b2e57611b2d612b72565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611b9530601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610e15565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611bf9959493929190612c5f565b600060405180830381600087803b158015611c1357600080fd5b505af1158015611c27573d6000803e3d6000fd5b50505050506000601460156101000a81548160ff02191690831515021790555050565b600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611cb2573d6000803e3d6000fd5b5050565b611cbe610e0d565b73ffffffffffffffffffffffffffffffffffffffff16611cdc6107b8565b73ffffffffffffffffffffffffffffffffffffffff1614611d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2990612d05565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183611e069190612322565b905092915050565b60008183611e1c9190612d54565b905092915050565b6000818311611e335782611e35565b815b905092915050565b60008183611e4b9190612a5b565b905092915050565b60008183611e619190612d85565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ea3578082015181840152602081019050611e88565b60008484015250505050565b6000601f19601f8301169050919050565b6000611ecb82611e69565b611ed58185611e74565b9350611ee5818560208601611e85565b611eee81611eaf565b840191505092915050565b60006020820190508181036000830152611f138184611ec0565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f4b82611f20565b9050919050565b611f5b81611f40565b8114611f6657600080fd5b50565b600081359050611f7881611f52565b92915050565b6000819050919050565b611f9181611f7e565b8114611f9c57600080fd5b50565b600081359050611fae81611f88565b92915050565b60008060408385031215611fcb57611fca611f1b565b5b6000611fd985828601611f69565b9250506020611fea85828601611f9f565b9150509250929050565b60008115159050919050565b61200981611ff4565b82525050565b60006020820190506120246000830184612000565b92915050565b61203381611f7e565b82525050565b600060208201905061204e600083018461202a565b92915050565b60008060006060848603121561206d5761206c611f1b565b5b600061207b86828701611f69565b935050602061208c86828701611f69565b925050604061209d86828701611f9f565b9150509250925092565b600060ff82169050919050565b6120bd816120a7565b82525050565b60006020820190506120d860008301846120b4565b92915050565b6000602082840312156120f4576120f3611f1b565b5b600061210284828501611f69565b91505092915050565b61211481611f40565b82525050565b600060208201905061212f600083018461210b565b92915050565b6000806040838503121561214c5761214b611f1b565b5b600061215a85828601611f69565b925050602061216b85828601611f69565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156121fb578086048111156121d7576121d6612175565b5b60018516156121e65780820291505b80810290506121f4856121a4565b94506121bb565b94509492505050565b60008261221457600190506122d0565b8161222257600090506122d0565b8160018114612238576002811461224257612271565b60019150506122d0565b60ff84111561225457612253612175565b5b8360020a91508482111561226b5761226a612175565b5b506122d0565b5060208310610133831016604e8410600b84101617156122a65782820a9050838111156122a1576122a0612175565b5b6122d0565b6122b384848460016121b1565b925090508184048111156122ca576122c9612175565b5b81810290505b9392505050565b60006122e282611f7e565b91506122ed836120a7565b925061231a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612204565b905092915050565b600061232d82611f7e565b915061233883611f7e565b925082820261234681611f7e565b9150828204841483151761235d5761235c612175565b5b5092915050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b600061239a601783611e74565b91506123a582612364565b602082019050919050565b600060208201905081810360008301526123c98161238d565b9050919050565b6000815190506123df81611f52565b92915050565b6000602082840312156123fb576123fa611f1b565b5b6000612409848285016123d0565b91505092915050565b6000604082019050612427600083018561210b565b612434602083018461210b565b9392505050565b6000819050919050565b6000819050919050565b600061246a6124656124608461243b565b612445565b611f7e565b9050919050565b61247a8161244f565b82525050565b600060c082019050612495600083018961210b565b6124a2602083018861202a565b6124af6040830187612471565b6124bc6060830186612471565b6124c9608083018561210b565b6124d660a083018461202a565b979650505050505050565b6000815190506124f081611f88565b92915050565b60008060006060848603121561250f5761250e611f1b565b5b600061251d868287016124e1565b935050602061252e868287016124e1565b925050604061253f868287016124e1565b9150509250925092565b600060408201905061255e600083018561210b565b61256b602083018461202a565b9392505050565b61257b81611ff4565b811461258657600080fd5b50565b60008151905061259881612572565b92915050565b6000602082840312156125b4576125b3611f1b565b5b60006125c284828501612589565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612627602683611e74565b9150612632826125cb565b604082019050919050565b600060208201905081810360008301526126568161261a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006126b9602483611e74565b91506126c48261265d565b604082019050919050565b600060208201905081810360008301526126e8816126ac565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061274b602283611e74565b9150612756826126ef565b604082019050919050565b6000602082019050818103600083015261277a8161273e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006127dd602583611e74565b91506127e882612781565b604082019050919050565b6000602082019050818103600083015261280c816127d0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061286f602383611e74565b915061287a82612813565b604082019050919050565b6000602082019050818103600083015261289e81612862565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612901602983611e74565b915061290c826128a5565b604082019050919050565b60006020820190508181036000830152612930816128f4565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006129b9604983611e74565b91506129c482612937565b606082019050919050565b600060208201905081810360008301526129e8816129ac565b9050919050565b7f4578636565647320746865205f6d61785478416d6f756e742e00000000000000600082015250565b6000612a25601983611e74565b9150612a30826129ef565b602082019050919050565b60006020820190508181036000830152612a5481612a18565b9050919050565b6000612a6682611f7e565b9150612a7183611f7e565b9250828201905080821115612a8957612a88612175565b5b92915050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b6000612ac5601a83611e74565b9150612ad082612a8f565b602082019050919050565b60006020820190508181036000830152612af481612ab8565b9050919050565b6000612b0682611f7e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b3857612b37612175565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612bd681611f40565b82525050565b6000612be88383612bcd565b60208301905092915050565b6000602082019050919050565b6000612c0c82612ba1565b612c168185612bac565b9350612c2183612bbd565b8060005b83811015612c52578151612c398882612bdc565b9750612c4483612bf4565b925050600181019050612c25565b5085935050505092915050565b600060a082019050612c74600083018861202a565b612c816020830187612471565b8181036040830152612c938186612c01565b9050612ca2606083018561210b565b612caf608083018461202a565b9695505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612cef602083611e74565b9150612cfa82612cb9565b602082019050919050565b60006020820190508181036000830152612d1e81612ce2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612d5f82611f7e565b9150612d6a83611f7e565b925082612d7a57612d79612d25565b5b828204905092915050565b6000612d9082611f7e565b9150612d9b83611f7e565b9250828203905081811115612db357612db2612175565b5b9291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212201f25ca9b270ec9a4a8c440df96a03d35c1d7490766167777557f12296f3e528e64736f6c63430008110033

Deployed Bytecode Sourcemap

33147:8003:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35090:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35923:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34365:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35367:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36092:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35276:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40799:348;;;;;;;;;;;;;:::i;:::-;;35470:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15535:103;;;;;;;;;;;;;:::i;:::-;;39777:196;;;;;;;;;;;;;:::i;:::-;;34176:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14894:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34237:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35181:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35597:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34300:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33536:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40083:671;;;;;;;;;;;;;:::i;:::-;;35772:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15793:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35090:83;35127:13;35160:5;;;;;;;;;;;;;;;;;35153:12;;35090:83;:::o;35923:161::-;35998:4;36015:39;36024:12;:10;:12::i;:::-;36038:7;36047:6;36015:8;:39::i;:::-;36072:4;36065:11;;35923:161;;;;:::o;34365:52::-;;;;:::o;35367:95::-;35420:7;33979:1;34035:2;:13;;;;:::i;:::-;34022:10;:26;;;;:::i;:::-;35440:14;;35367:95;:::o;36092:313::-;36190:4;36207:36;36217:6;36225:9;36236:6;36207:9;:36::i;:::-;36254:121;36263:6;36271:12;:10;:12::i;:::-;36285:89;36323:6;36285:89;;;;;;;;;;;;;;;;;:11;:19;36297:6;36285:19;;;;;;;;;;;;;;;:33;36305:12;:10;:12::i;:::-;36285:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;36254:8;:121::i;:::-;36393:4;36386:11;;36092:313;;;;;:::o;35276:83::-;35317:5;33979:1;35335:16;;35276:83;:::o;40799:348::-;40863:10;;;;;;;;;;;40849:24;;:12;:10;:12::i;:::-;:24;;;40841:33;;;;;;40885:20;40906:24;40924:4;40906:9;:24::i;:::-;40885:45;;40957:1;40944:12;:14;40941:73;;;40972:30;40989:12;40972:16;:30::i;:::-;40941:73;41024:18;41043:21;41024:40;;41089:1;41078:10;:12;41075:65;;;41104:24;41117:10;41104:12;:24::i;:::-;41075:65;40830:317;;40799:348::o;35470:119::-;35536:7;35563:9;:18;35573:7;35563:18;;;;;;;;;;;;;;;;35556:25;;35470:119;;;:::o;15535:103::-;14780:13;:11;:13::i;:::-;15600:30:::1;15627:1;15600:18;:30::i;:::-;15535:103::o:0;39777:196::-;14780:13;:11;:13::i;:::-;33979:1:::1;34035:2;:13;;;;:::i;:::-;34022:10;:26;;;;:::i;:::-;39830:12;:22;;;;33979:1;34035:2;:13;;;;:::i;:::-;34022:10;:26;;;;:::i;:::-;39863:14;:22;;;;39917:5;39896:20;;:26;;;;;;;;;;;;;;;;;;39938:27;33979:1;34035:2;:13;;;;:::i;:::-;34022:10;:26;;;;:::i;:::-;39938:27;;;;;;:::i;:::-;;;;;;;;39777:196::o:0;34176:54::-;;;;:::o;14894:87::-;14940:7;14967:6;;;;;;;;;;;14960:13;;14894:87;:::o;34237:56::-;;;;:::o;35181:87::-;35220:13;35253:7;;;;;;;;;;;;;;;;;35246:14;;35181:87;:::o;35597:167::-;35675:4;35692:42;35702:12;:10;:12::i;:::-;35716:9;35727:6;35692:9;:42::i;:::-;35752:4;35745:11;;35597:167;;;;:::o;34300:58::-;;;;:::o;33536:39::-;;;;;;;;;;;;;:::o;40083:671::-;14780:13;:11;:13::i;:::-;40147:11:::1;::::0;::::1;;;;;;;;40146:12;40138:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;40233:42;40196:15;;:80;;;;;;;;;;;;;;;;;;40287:58;40304:4;40319:15;;;;;;;;;;;33979:1;34035:2;:13;;;;:::i;:::-;34022:10;:26;;;;:::i;:::-;40287:8;:58::i;:::-;40390:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40372:55;;;40436:4;40443:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40372:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40356:13;;:110;;;;;;;;;;;;;;;;;;40477:15;;;;;;;;;;;:31;;;40516:21;40547:4;40553:24;40571:4;40553:9;:24::i;:::-;40578:1;40580::::0;40582:7:::1;:5;:7::i;:::-;40590:15;40477:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40624:13;;;;;;;;;;;40617:29;;;40655:15;;;;;;;;;;;40673:14;40617:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40713:4;40699:11;;:18;;;;;;;;;;;;;;;;;;40742:4;40728:11;::::0;:18:::1;;;;;;;;;;;;;;;;;;40083:671::o:0;35772:143::-;35853:7;35880:11;:18;35892:5;35880:18;;;;;;;;;;;;;;;:27;35899:7;35880:27;;;;;;;;;;;;;;;;35873:34;;35772:143;;;;:::o;15793:201::-;14780:13;:11;:13::i;:::-;15902:1:::1;15882:22;;:8;:22;;::::0;15874:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15958:28;15977:8;15958:18;:28::i;:::-;15793:201:::0;:::o;13445:98::-;13498:7;13525:10;13518:17;;13445:98;:::o;36413:335::-;36523:1;36506:19;;:5;:19;;;36498:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36604:1;36585:21;;:7;:21;;;36577:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36686:6;36656:11;:18;36668:5;36656:18;;;;;;;;;;;;;;;:27;36675:7;36656:27;;;;;;;;;;;;;;;:36;;;;36724:7;36708:32;;36717:5;36708:32;;;36733:6;36708:32;;;;;;:::i;:::-;;;;;;;;36413:335;;;:::o;36756:2414::-;36860:1;36844:18;;:4;:18;;;36836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36937:1;36923:16;;:2;:16;;;36915:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37007:1;36998:6;:10;36990:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37065:17;37107:7;:5;:7::i;:::-;37099:15;;:4;:15;;;;:32;;;;;37124:7;:5;:7::i;:::-;37118:13;;:2;:13;;;;37099:32;37095:1719;;;37160:76;37232:3;37160:67;37182:15;;37172:9;;:25;37171:55;;37212:14;;37171:55;;;37199:12;;37171:55;37160:6;:10;;:67;;;;:::i;:::-;:71;;:76;;;;:::i;:::-;37148:88;;37257:20;;;;;;;;;;;37253:508;;;37318:15;;;;;;;;;;;37304:30;;:2;:30;;;;:62;;;;;37352:13;;;;;;;;;;;37338:28;;:2;:28;;;;37304:62;37300:444;;;37502:12;37429:28;:39;37458:9;37429:39;;;;;;;;;;;;;;;;:85;37393:250;;;;;;;;;;;;:::i;:::-;;;;;;;;;37710:12;37668:28;:39;37697:9;37668:39;;;;;;;;;;;;;;;:54;;;;37300:444;37253:508;37789:13;;;;;;;;;;;37781:21;;:4;:21;;;:55;;;;;37820:15;;;;;;;;;;;37806:30;;:2;:30;;;;37781:55;:83;;;;;37842:18;:22;37861:2;37842:22;;;;;;;;;;;;;;;;;;;;;;;;;37840:24;37781:83;37777:313;;;37904:12;;37894:6;:22;;37886:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37999:14;;37989:6;37973:13;37983:2;37973:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;37965:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;38063:9;;:11;;;;;;;;;:::i;:::-;;;;;;37777:313;38115:13;;;;;;;;;;;38109:19;;:2;:19;;;:43;;;;;38147:4;38132:20;;:4;:20;;;;38109:43;38106:174;;;38185:79;38260:3;38185:70;38207:16;;38197:9;;:26;38196:58;;38239:15;;38196:58;;;38225:13;;38196:58;38185:6;:10;;:70;;;;:::i;:::-;:74;;:79;;;;:::i;:::-;38173:91;;38106:174;38296:28;38327:24;38345:4;38327:9;:24::i;:::-;38296:55;;38371:6;;;;;;;;;;;38370:7;:32;;;;;38389:13;;;;;;;;;;;38381:21;;:2;:21;;;38370:32;:47;;;;;38406:11;;;;;;;;;;;38370:47;:89;;;;;38442:17;;38421:20;:38;38370:89;:121;;;;;38473:18;;38463:9;;:28;38370:121;38366:437;;;38512:67;38529:49;38533:6;38540:37;38544:20;38565:11;;38540:3;:37::i;:::-;38529:3;:49::i;:::-;38512:16;:67::i;:::-;38598:26;38627:21;38598:50;;38691:17;38670:18;:38;38667:121;;;38733:35;38746:21;38733:12;:35::i;:::-;38667:121;38493:310;38366:437;37133:1681;37095:1719;38839:1;38829:9;:11;38826:161;;;38879:39;38908:9;38879;:24;38897:4;38879:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;38854:9;:24;38872:4;38854:24;;;;;;;;;;;;;;;:64;;;;38959:4;38936:39;;38945:4;38936:39;;;38965:9;38936:39;;;;;;:::i;:::-;;;;;;;;38826:161;39013:27;39033:6;39013:9;:15;39023:4;39013:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;38997:9;:15;39007:4;38997:15;;;;;;;;;;;;;;;:43;;;;39065:40;39083:21;39094:9;39083:6;:10;;:21;;;;:::i;:::-;39065:9;:13;39075:2;39065:13;;;;;;;;;;;;;;;;:17;;:40;;;;:::i;:::-;39051:9;:13;39061:2;39051:13;;;;;;;;;;;;;;;:54;;;;39136:2;39121:41;;39130:4;39121:41;;;39140:21;39151:9;39140:6;:10;;:21;;;;:::i;:::-;39121:41;;;;;;:::i;:::-;;;;;;;;36825:2345;36756:2414;;;:::o;10982:206::-;11068:7;11126:1;11121;:6;;11129:12;11113:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11168:1;11164;:5;11157:12;;10982:206;;;;;:::o;39286:483::-;34708:4;34699:6;;:13;;;;;;;;;;;;;;;;;;39364:21:::1;39402:1;39388:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39364:40;;39433:4;39415;39420:1;39415:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;39459:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39449:4;39454:1;39449:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;39492:62;39509:4;39524:15;;;;;;;;;;;39542:11;39492:8;:62::i;:::-;39565:15;;;;;;;;;;;:66;;;39646:11;39672:1;39688:4;39715;39735:15;39565:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;39353:416;34744:5:::0;34735:6;;:14;;;;;;;;;;;;;;;;;;39286:483;:::o;39981:92::-;40038:10;;;;;;;;;;;:19;;:27;40058:6;40038:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39981:92;:::o;15059:132::-;15134:12;:10;:12::i;:::-;15123:23;;:7;:5;:7::i;:::-;:23;;;15115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15059:132::o;16154:191::-;16228:16;16247:6;;;;;;;;;;;16228:25;;16273:8;16264:6;;:17;;;;;;;;;;;;;;;;;;16328:8;16297:40;;16318:8;16297:40;;;;;;;;;;;;16217:128;16154:191;:::o;9441:98::-;9499:7;9530:1;9526;:5;;;;:::i;:::-;9519:12;;9441:98;;;;:::o;9840:::-;9898:7;9929:1;9925;:5;;;;:::i;:::-;9918:12;;9840:98;;;;:::o;39180:::-;39237:7;39264:1;39262;:3;39261:9;;39269:1;39261:9;;;39267:1;39261:9;39254:16;;39180:98;;;;:::o;8703:::-;8761:7;8792:1;8788;:5;;;;:::i;:::-;8781:12;;8703:98;;;;:::o;9084:::-;9142:7;9173:1;9169;:5;;;;:::i;:::-;9162:12;;9084:98;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:118::-;5275:24;5293:5;5275:24;:::i;:::-;5270:3;5263:37;5188:118;;:::o;5312:222::-;5405:4;5443:2;5432:9;5428:18;5420:26;;5456:71;5524:1;5513:9;5509:17;5500:6;5456:71;:::i;:::-;5312:222;;;;:::o;5540:474::-;5608:6;5616;5665:2;5653:9;5644:7;5640:23;5636:32;5633:119;;;5671:79;;:::i;:::-;5633:119;5791:1;5816:53;5861:7;5852:6;5841:9;5837:22;5816:53;:::i;:::-;5806:63;;5762:117;5918:2;5944:53;5989:7;5980:6;5969:9;5965:22;5944:53;:::i;:::-;5934:63;;5889:118;5540:474;;;;;:::o;6020:180::-;6068:77;6065:1;6058:88;6165:4;6162:1;6155:15;6189:4;6186:1;6179:15;6206:102;6248:8;6295:5;6292:1;6288:13;6267:34;;6206:102;;;:::o;6314:848::-;6375:5;6382:4;6406:6;6397:15;;6430:5;6421:14;;6444:712;6465:1;6455:8;6452:15;6444:712;;;6560:4;6555:3;6551:14;6545:4;6542:24;6539:50;;;6569:18;;:::i;:::-;6539:50;6619:1;6609:8;6605:16;6602:451;;;7034:4;7027:5;7023:16;7014:25;;6602:451;7084:4;7078;7074:15;7066:23;;7114:32;7137:8;7114:32;:::i;:::-;7102:44;;6444:712;;;6314:848;;;;;;;:::o;7168:1073::-;7222:5;7413:8;7403:40;;7434:1;7425:10;;7436:5;;7403:40;7462:4;7452:36;;7479:1;7470:10;;7481:5;;7452:36;7548:4;7596:1;7591:27;;;;7632:1;7627:191;;;;7541:277;;7591:27;7609:1;7600:10;;7611:5;;;7627:191;7672:3;7662:8;7659:17;7656:43;;;7679:18;;:::i;:::-;7656:43;7728:8;7725:1;7721:16;7712:25;;7763:3;7756:5;7753:14;7750:40;;;7770:18;;:::i;:::-;7750:40;7803:5;;;7541:277;;7927:2;7917:8;7914:16;7908:3;7902:4;7899:13;7895:36;7877:2;7867:8;7864:16;7859:2;7853:4;7850:12;7846:35;7830:111;7827:246;;;7983:8;7977:4;7973:19;7964:28;;8018:3;8011:5;8008:14;8005:40;;;8025:18;;:::i;:::-;8005:40;8058:5;;7827:246;8098:42;8136:3;8126:8;8120:4;8117:1;8098:42;:::i;:::-;8083:57;;;;8172:4;8167:3;8163:14;8156:5;8153:25;8150:51;;;8181:18;;:::i;:::-;8150:51;8230:4;8223:5;8219:16;8210:25;;7168:1073;;;;;;:::o;8247:281::-;8305:5;8329:23;8347:4;8329:23;:::i;:::-;8321:31;;8373:25;8389:8;8373:25;:::i;:::-;8361:37;;8417:104;8454:66;8444:8;8438:4;8417:104;:::i;:::-;8408:113;;8247:281;;;;:::o;8534:410::-;8574:7;8597:20;8615:1;8597:20;:::i;:::-;8592:25;;8631:20;8649:1;8631:20;:::i;:::-;8626:25;;8686:1;8683;8679:9;8708:30;8726:11;8708:30;:::i;:::-;8697:41;;8887:1;8878:7;8874:15;8871:1;8868:22;8848:1;8841:9;8821:83;8798:139;;8917:18;;:::i;:::-;8798:139;8582:362;8534:410;;;;:::o;8950:173::-;9090:25;9086:1;9078:6;9074:14;9067:49;8950:173;:::o;9129:366::-;9271:3;9292:67;9356:2;9351:3;9292:67;:::i;:::-;9285:74;;9368:93;9457:3;9368:93;:::i;:::-;9486:2;9481:3;9477:12;9470:19;;9129:366;;;:::o;9501:419::-;9667:4;9705:2;9694:9;9690:18;9682:26;;9754:9;9748:4;9744:20;9740:1;9729:9;9725:17;9718:47;9782:131;9908:4;9782:131;:::i;:::-;9774:139;;9501:419;;;:::o;9926:143::-;9983:5;10014:6;10008:13;9999:22;;10030:33;10057:5;10030:33;:::i;:::-;9926:143;;;;:::o;10075:351::-;10145:6;10194:2;10182:9;10173:7;10169:23;10165:32;10162:119;;;10200:79;;:::i;:::-;10162:119;10320:1;10345:64;10401:7;10392:6;10381:9;10377:22;10345:64;:::i;:::-;10335:74;;10291:128;10075:351;;;;:::o;10432:332::-;10553:4;10591:2;10580:9;10576:18;10568:26;;10604:71;10672:1;10661:9;10657:17;10648:6;10604:71;:::i;:::-;10685:72;10753:2;10742:9;10738:18;10729:6;10685:72;:::i;:::-;10432:332;;;;;:::o;10770:85::-;10815:7;10844:5;10833:16;;10770:85;;;:::o;10861:60::-;10889:3;10910:5;10903:12;;10861:60;;;:::o;10927:158::-;10985:9;11018:61;11036:42;11045:32;11071:5;11045:32;:::i;:::-;11036:42;:::i;:::-;11018:61;:::i;:::-;11005:74;;10927:158;;;:::o;11091:147::-;11186:45;11225:5;11186:45;:::i;:::-;11181:3;11174:58;11091:147;;:::o;11244:807::-;11493:4;11531:3;11520:9;11516:19;11508:27;;11545:71;11613:1;11602:9;11598:17;11589:6;11545:71;:::i;:::-;11626:72;11694:2;11683:9;11679:18;11670:6;11626:72;:::i;:::-;11708:80;11784:2;11773:9;11769:18;11760:6;11708:80;:::i;:::-;11798;11874:2;11863:9;11859:18;11850:6;11798:80;:::i;:::-;11888:73;11956:3;11945:9;11941:19;11932:6;11888:73;:::i;:::-;11971;12039:3;12028:9;12024:19;12015:6;11971:73;:::i;:::-;11244:807;;;;;;;;;:::o;12057:143::-;12114:5;12145:6;12139:13;12130:22;;12161:33;12188:5;12161:33;:::i;:::-;12057:143;;;;:::o;12206:663::-;12294:6;12302;12310;12359:2;12347:9;12338:7;12334:23;12330:32;12327:119;;;12365:79;;:::i;:::-;12327:119;12485:1;12510:64;12566:7;12557:6;12546:9;12542:22;12510:64;:::i;:::-;12500:74;;12456:128;12623:2;12649:64;12705:7;12696:6;12685:9;12681:22;12649:64;:::i;:::-;12639:74;;12594:129;12762:2;12788:64;12844:7;12835:6;12824:9;12820:22;12788:64;:::i;:::-;12778:74;;12733:129;12206:663;;;;;:::o;12875:332::-;12996:4;13034:2;13023:9;13019:18;13011:26;;13047:71;13115:1;13104:9;13100:17;13091:6;13047:71;:::i;:::-;13128:72;13196:2;13185:9;13181:18;13172:6;13128:72;:::i;:::-;12875:332;;;;;:::o;13213:116::-;13283:21;13298:5;13283:21;:::i;:::-;13276:5;13273:32;13263:60;;13319:1;13316;13309:12;13263:60;13213:116;:::o;13335:137::-;13389:5;13420:6;13414:13;13405:22;;13436:30;13460:5;13436:30;:::i;:::-;13335:137;;;;:::o;13478:345::-;13545:6;13594:2;13582:9;13573:7;13569:23;13565:32;13562:119;;;13600:79;;:::i;:::-;13562:119;13720:1;13745:61;13798:7;13789:6;13778:9;13774:22;13745:61;:::i;:::-;13735:71;;13691:125;13478:345;;;;:::o;13829:225::-;13969:34;13965:1;13957:6;13953:14;13946:58;14038:8;14033:2;14025:6;14021:15;14014:33;13829:225;:::o;14060:366::-;14202:3;14223:67;14287:2;14282:3;14223:67;:::i;:::-;14216:74;;14299:93;14388:3;14299:93;:::i;:::-;14417:2;14412:3;14408:12;14401:19;;14060:366;;;:::o;14432:419::-;14598:4;14636:2;14625:9;14621:18;14613:26;;14685:9;14679:4;14675:20;14671:1;14660:9;14656:17;14649:47;14713:131;14839:4;14713:131;:::i;:::-;14705:139;;14432:419;;;:::o;14857:223::-;14997:34;14993:1;14985:6;14981:14;14974:58;15066:6;15061:2;15053:6;15049:15;15042:31;14857:223;:::o;15086:366::-;15228:3;15249:67;15313:2;15308:3;15249:67;:::i;:::-;15242:74;;15325:93;15414:3;15325:93;:::i;:::-;15443:2;15438:3;15434:12;15427:19;;15086:366;;;:::o;15458:419::-;15624:4;15662:2;15651:9;15647:18;15639:26;;15711:9;15705:4;15701:20;15697:1;15686:9;15682:17;15675:47;15739:131;15865:4;15739:131;:::i;:::-;15731:139;;15458:419;;;:::o;15883:221::-;16023:34;16019:1;16011:6;16007:14;16000:58;16092:4;16087:2;16079:6;16075:15;16068:29;15883:221;:::o;16110:366::-;16252:3;16273:67;16337:2;16332:3;16273:67;:::i;:::-;16266:74;;16349:93;16438:3;16349:93;:::i;:::-;16467:2;16462:3;16458:12;16451:19;;16110:366;;;:::o;16482:419::-;16648:4;16686:2;16675:9;16671:18;16663:26;;16735:9;16729:4;16725:20;16721:1;16710:9;16706:17;16699:47;16763:131;16889:4;16763:131;:::i;:::-;16755:139;;16482:419;;;:::o;16907:224::-;17047:34;17043:1;17035:6;17031:14;17024:58;17116:7;17111:2;17103:6;17099:15;17092:32;16907:224;:::o;17137:366::-;17279:3;17300:67;17364:2;17359:3;17300:67;:::i;:::-;17293:74;;17376:93;17465:3;17376:93;:::i;:::-;17494:2;17489:3;17485:12;17478:19;;17137:366;;;:::o;17509:419::-;17675:4;17713:2;17702:9;17698:18;17690:26;;17762:9;17756:4;17752:20;17748:1;17737:9;17733:17;17726:47;17790:131;17916:4;17790:131;:::i;:::-;17782:139;;17509:419;;;:::o;17934:222::-;18074:34;18070:1;18062:6;18058:14;18051:58;18143:5;18138:2;18130:6;18126:15;18119:30;17934:222;:::o;18162:366::-;18304:3;18325:67;18389:2;18384:3;18325:67;:::i;:::-;18318:74;;18401:93;18490:3;18401:93;:::i;:::-;18519:2;18514:3;18510:12;18503:19;;18162:366;;;:::o;18534:419::-;18700:4;18738:2;18727:9;18723:18;18715:26;;18787:9;18781:4;18777:20;18773:1;18762:9;18758:17;18751:47;18815:131;18941:4;18815:131;:::i;:::-;18807:139;;18534:419;;;:::o;18959:228::-;19099:34;19095:1;19087:6;19083:14;19076:58;19168:11;19163:2;19155:6;19151:15;19144:36;18959:228;:::o;19193:366::-;19335:3;19356:67;19420:2;19415:3;19356:67;:::i;:::-;19349:74;;19432:93;19521:3;19432:93;:::i;:::-;19550:2;19545:3;19541:12;19534:19;;19193:366;;;:::o;19565:419::-;19731:4;19769:2;19758:9;19754:18;19746:26;;19818:9;19812:4;19808:20;19804:1;19793:9;19789:17;19782:47;19846:131;19972:4;19846:131;:::i;:::-;19838:139;;19565:419;;;:::o;19990:297::-;20130:34;20126:1;20118:6;20114:14;20107:58;20199:34;20194:2;20186:6;20182:15;20175:59;20268:11;20263:2;20255:6;20251:15;20244:36;19990:297;:::o;20293:366::-;20435:3;20456:67;20520:2;20515:3;20456:67;:::i;:::-;20449:74;;20532:93;20621:3;20532:93;:::i;:::-;20650:2;20645:3;20641:12;20634:19;;20293:366;;;:::o;20665:419::-;20831:4;20869:2;20858:9;20854:18;20846:26;;20918:9;20912:4;20908:20;20904:1;20893:9;20889:17;20882:47;20946:131;21072:4;20946:131;:::i;:::-;20938:139;;20665:419;;;:::o;21090:175::-;21230:27;21226:1;21218:6;21214:14;21207:51;21090:175;:::o;21271:366::-;21413:3;21434:67;21498:2;21493:3;21434:67;:::i;:::-;21427:74;;21510:93;21599:3;21510:93;:::i;:::-;21628:2;21623:3;21619:12;21612:19;;21271:366;;;:::o;21643:419::-;21809:4;21847:2;21836:9;21832:18;21824:26;;21896:9;21890:4;21886:20;21882:1;21871:9;21867:17;21860:47;21924:131;22050:4;21924:131;:::i;:::-;21916:139;;21643:419;;;:::o;22068:191::-;22108:3;22127:20;22145:1;22127:20;:::i;:::-;22122:25;;22161:20;22179:1;22161:20;:::i;:::-;22156:25;;22204:1;22201;22197:9;22190:16;;22225:3;22222:1;22219:10;22216:36;;;22232:18;;:::i;:::-;22216:36;22068:191;;;;:::o;22265:176::-;22405:28;22401:1;22393:6;22389:14;22382:52;22265:176;:::o;22447:366::-;22589:3;22610:67;22674:2;22669:3;22610:67;:::i;:::-;22603:74;;22686:93;22775:3;22686:93;:::i;:::-;22804:2;22799:3;22795:12;22788:19;;22447:366;;;:::o;22819:419::-;22985:4;23023:2;23012:9;23008:18;23000:26;;23072:9;23066:4;23062:20;23058:1;23047:9;23043:17;23036:47;23100:131;23226:4;23100:131;:::i;:::-;23092:139;;22819:419;;;:::o;23244:233::-;23283:3;23306:24;23324:5;23306:24;:::i;:::-;23297:33;;23352:66;23345:5;23342:77;23339:103;;23422:18;;:::i;:::-;23339:103;23469:1;23462:5;23458:13;23451:20;;23244:233;;;:::o;23483:180::-;23531:77;23528:1;23521:88;23628:4;23625:1;23618:15;23652:4;23649:1;23642:15;23669:180;23717:77;23714:1;23707:88;23814:4;23811:1;23804:15;23838:4;23835:1;23828:15;23855:114;23922:6;23956:5;23950:12;23940:22;;23855:114;;;:::o;23975:184::-;24074:11;24108:6;24103:3;24096:19;24148:4;24143:3;24139:14;24124:29;;23975:184;;;;:::o;24165:132::-;24232:4;24255:3;24247:11;;24285:4;24280:3;24276:14;24268:22;;24165:132;;;:::o;24303:108::-;24380:24;24398:5;24380:24;:::i;:::-;24375:3;24368:37;24303:108;;:::o;24417:179::-;24486:10;24507:46;24549:3;24541:6;24507:46;:::i;:::-;24585:4;24580:3;24576:14;24562:28;;24417:179;;;;:::o;24602:113::-;24672:4;24704;24699:3;24695:14;24687:22;;24602:113;;;:::o;24751:732::-;24870:3;24899:54;24947:5;24899:54;:::i;:::-;24969:86;25048:6;25043:3;24969:86;:::i;:::-;24962:93;;25079:56;25129:5;25079:56;:::i;:::-;25158:7;25189:1;25174:284;25199:6;25196:1;25193:13;25174:284;;;25275:6;25269:13;25302:63;25361:3;25346:13;25302:63;:::i;:::-;25295:70;;25388:60;25441:6;25388:60;:::i;:::-;25378:70;;25234:224;25221:1;25218;25214:9;25209:14;;25174:284;;;25178:14;25474:3;25467:10;;24875:608;;;24751:732;;;;:::o;25489:831::-;25752:4;25790:3;25779:9;25775:19;25767:27;;25804:71;25872:1;25861:9;25857:17;25848:6;25804:71;:::i;:::-;25885:80;25961:2;25950:9;25946:18;25937:6;25885:80;:::i;:::-;26012:9;26006:4;26002:20;25997:2;25986:9;25982:18;25975:48;26040:108;26143:4;26134:6;26040:108;:::i;:::-;26032:116;;26158:72;26226:2;26215:9;26211:18;26202:6;26158:72;:::i;:::-;26240:73;26308:3;26297:9;26293:19;26284:6;26240:73;:::i;:::-;25489:831;;;;;;;;:::o;26326:182::-;26466:34;26462:1;26454:6;26450:14;26443:58;26326:182;:::o;26514:366::-;26656:3;26677:67;26741:2;26736:3;26677:67;:::i;:::-;26670:74;;26753:93;26842:3;26753:93;:::i;:::-;26871:2;26866:3;26862:12;26855:19;;26514:366;;;:::o;26886:419::-;27052:4;27090:2;27079:9;27075:18;27067:26;;27139:9;27133:4;27129:20;27125:1;27114:9;27110:17;27103:47;27167:131;27293:4;27167:131;:::i;:::-;27159:139;;26886:419;;;:::o;27311:180::-;27359:77;27356:1;27349:88;27456:4;27453:1;27446:15;27480:4;27477:1;27470:15;27497:185;27537:1;27554:20;27572:1;27554:20;:::i;:::-;27549:25;;27588:20;27606:1;27588:20;:::i;:::-;27583:25;;27627:1;27617:35;;27632:18;;:::i;:::-;27617:35;27674:1;27671;27667:9;27662:14;;27497:185;;;;:::o;27688:194::-;27728:4;27748:20;27766:1;27748:20;:::i;:::-;27743:25;;27782:20;27800:1;27782:20;:::i;:::-;27777:25;;27826:1;27823;27819:9;27811:17;;27850:1;27844:4;27841:11;27838:37;;;27855:18;;:::i;:::-;27838:37;27688:194;;;;:::o

Swarm Source

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