ETH Price: $3,338.34 (-1.10%)
Gas: 8 Gwei

Token

SamGPT (SAM)
 

Overview

Max Total Supply

69,000,000,000,000 SAM

Holders

471

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
elseviers.eth
Balance
0 SAM

Value
$0.00
0x55a26150fca533e9f558e154eb908e84616d7194
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:
Sam

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-25
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.0;

/**
 *  hte_tpgmas@
 */

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 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 `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `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;
        }
        _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;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

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

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

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

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

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

/**
 * @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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

contract Sam is ERC20, Ownable {
    // CONSTANTS
    uint256 public constant TOTAL_SUPPLY = 69_000_000_000_000 * (10**18);
    uint256 private constant PERCENT_DENOMENATOR = 1000;

    // Variables
    bool public limitedHolding;
    uint256 public maxHoldingPercentage = 10; // 1%
    bool public _taxesOff = false;
    uint256 public buyTax = (PERCENT_DENOMENATOR * 1) / 100; // 1%
    uint256 public sellTax = (PERCENT_DENOMENATOR * 5) / 100; // 5%
    address public taxRecipient = 0x8b41B7682cd63DdfF42cC09a248e6Ac560714a8a;
    uint8 public taxLevel = 0;

    // Time units
    uint256 public launchTime;
    uint256 private _launchBlock;

    // Blacklisted Bots
    mapping(address => bool) public _isBot;

    // Uniswap addresses
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    constructor() ERC20("SamGPT", "SAM") {
        // _mint(msg.sender, TOTAL_SUPPLY);
        _mint(address(this), TOTAL_SUPPLY);

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual override {
        bool _isContract = sender == address(this) ||
            recipient == address(this);
        bool _isBuy = sender == uniswapV2Pair &&
            recipient != address(uniswapV2Router);
        bool _isSell = recipient == uniswapV2Pair;
        bool _isSwap = _isBuy || _isSell;

        if (_isBuy) {
            // a highly complex method to fight against bots
            if (block.number <= _launchBlock + 2) {
                _isBot[recipient] = true;
            }
        } else {
            // fuck bots
            require(!_isBot[recipient], "Stop botting!");
            require(!_isBot[sender], "Stop botting!");
            require(!_isBot[_msgSender()], "Stop botting!");
        }

        uint256 _tax = 0;
        if (launchTime != 0 && _isSwap && !_isContract && !_taxesOff) {
            // Tax Level
            if (taxLevel < 5 && (block.timestamp - launchTime) / 14400 > taxLevel) {
                _lowerTax();
            }

            // Max position
            if (limitedHolding && sender == uniswapV2Pair) {
                require(
                    super.balanceOf(recipient) + amount <=
                        (totalSupply() / 1000) * maxHoldingPercentage,
                    "Position would exceed max holdings"
                );
            }
            _tax = (amount * (_isBuy ? buyTax : sellTax)) / PERCENT_DENOMENATOR;
            super._transfer(sender, taxRecipient, _tax);
        }

        // transfer the rest
        super._transfer(sender, recipient, (amount - _tax));
    }

    // _percent: 1 == 0.1%, 1000 = 100%
    function launch(uint16 _percent) external payable onlyOwner {
        require(_percent <= PERCENT_DENOMENATOR, "must be between 0-100%");
        require(launchTime == 0, "already launched");
        require(_percent == 0 || msg.value > 0, "need ETH for initial LP");

        uint256 _lpSupply = (totalSupply() * _percent) / PERCENT_DENOMENATOR;
        uint256 _leftover = totalSupply() - _lpSupply;
        if (_lpSupply > 0) {
            _addLp(_lpSupply, msg.value);
        }
        if (_leftover > 0) {
            _transfer(address(this), owner(), _leftover);
        }
        launchTime = block.timestamp;
        _launchBlock = block.number;
    }

    function _addLp(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    function _lowerTax() private {
        require(taxLevel < 5, "tax already zero");
        require(buyTax > 0, "tax already zero");
        require(sellTax > 0, "tax already zero");
        buyTax -= 2;
        sellTax -= 10;
        taxLevel++;
        if (taxLevel == 5) {
            setTaxesOff();
        }
    }

    function setTaxReceiver(address _newRecipient) external onlyOwner {
        taxRecipient = _newRecipient;
    }

    function setTaxesOff() internal {
        _taxesOff = true;
    }

    function setLimitedHoldings(bool _bool) external onlyOwner {
        limitedHolding = _bool;
    }

    function forgiveBot(address account) external onlyOwner {
        require(_isBot[account], "user is not blacklisted");
        _isBot[account] = false;
    }

    function changeMaxHoldingPercengate(uint256 _newPercentage)
        external
        onlyOwner
    {
        maxHoldingPercentage = _newPercentage;
    }

    function withdrawETH() external onlyOwner {
        address payable to = payable(msg.sender);
        to.transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxesOff","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPercentage","type":"uint256"}],"name":"changeMaxHoldingPercengate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"forgiveBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_percent","type":"uint16"}],"name":"launch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitedHolding","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHoldingPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setLimitedHoldings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRecipient","type":"address"}],"name":"setTaxReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxLevel","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600a6006556000600760006101000a81548160ff021916908315150217905550606460016103e8620000379190620008b7565b6200004391906200087f565b600855606460056103e8620000599190620008b7565b6200006591906200087f565b600955738b41b7682cd63ddff42cc09a248e6ac560714a8a600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600a60146101000a81548160ff021916908360ff160217905550348015620000e657600080fd5b506040518060400160405280600681526020017f53616d47505400000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f53414d000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200016b9291906200064e565b508060049080519060200190620001849291906200064e565b505050620001a76200019b620003fd60201b60201c565b6200040560201b60201c565b620001c7306d0366e7064422fd84202340000000620004cb60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022757600080fd5b505afa1580156200023c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000262919062000715565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002c557600080fd5b505afa158015620002da573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000300919062000715565b6040518363ffffffff1660e01b81526004016200031f929190620007a5565b602060405180830381600087803b1580156200033a57600080fd5b505af11580156200034f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000375919062000715565b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000a33565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200053e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200053590620007d2565b60405180910390fd5b62000552600083836200064460201b60201c565b806002600082825462000566919062000822565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005bd919062000822565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620006249190620007f4565b60405180910390a362000640600083836200064960201b60201c565b5050565b505050565b505050565b8280546200065c9062000956565b90600052602060002090601f016020900481019282620006805760008555620006cc565b82601f106200069b57805160ff1916838001178555620006cc565b82800160010185558215620006cc579182015b82811115620006cb578251825591602001919060010190620006ae565b5b509050620006db9190620006df565b5090565b5b80821115620006fa576000816000905550600101620006e0565b5090565b6000815190506200070f8162000a19565b92915050565b6000602082840312156200072857600080fd5b60006200073884828501620006fe565b91505092915050565b6200074c8162000918565b82525050565b600062000761601f8362000811565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b6200079f816200094c565b82525050565b6000604082019050620007bc600083018562000741565b620007cb602083018462000741565b9392505050565b60006020820190508181036000830152620007ed8162000752565b9050919050565b60006020820190506200080b600083018462000794565b92915050565b600082825260208201905092915050565b60006200082f826200094c565b91506200083c836200094c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200087457620008736200098c565b5b828201905092915050565b60006200088c826200094c565b915062000899836200094c565b925082620008ac57620008ab620009bb565b5b828204905092915050565b6000620008c4826200094c565b9150620008d1836200094c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200090d576200090c6200098c565b5b828202905092915050565b600062000925826200092c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200096f57607f821691505b60208210811415620009865762000985620009ea565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b62000a248162000918565b811462000a3057600080fd5b50565b612f8a8062000a436000396000f3fe6080604052600436106101e35760003560e01c8063715018a611610102578063a9059cbb11610095578063dd62ed3e11610064578063dd62ed3e146106f1578063e086e5ec1461072e578063f137d50714610745578063f2fde38b1461076e576101e3565b8063a9059cbb14610623578063abb8105214610660578063cc1776d31461069d578063cd8de42c146106c8576101e3565b80638da5cb5b116100d15780638da5cb5b14610565578063902d55a51461059057806395d89b41146105bb578063a457c2d7146105e6576101e3565b8063715018a6146104dc578063737ea06e146104f3578063782a2e341461051e578063790ca4131461053a576101e3565b8063313ce5671161017a57806348a792011161014957806348a792011461042057806349bd5a5e146104495780634f7041a51461047457806370a082311461049f576101e3565b8063313ce5671461036257806331d66bff1461038d57806337dac0eb146103b857806339509351146103e3576101e3565b806317f02b93116101b657806317f02b93146102a457806318160ddd146102cf578063229ba197146102fa57806323b872dd14610325576101e3565b806306fdde03146101e8578063095ea7b314610213578063134f9c8d146102505780631694505e14610279575b600080fd5b3480156101f457600080fd5b506101fd610797565b60405161020a91906129a9565b60405180910390f35b34801561021f57600080fd5b5061023a6004803603810190610235919061222e565b610829565b6040516102479190612973565b60405180910390f35b34801561025c57600080fd5b506102776004803603810190610272919061217a565b61084c565b005b34801561028557600080fd5b5061028e6109af565b60405161029b919061298e565b60405180910390f35b3480156102b057600080fd5b506102b96109d5565b6040516102c69190612973565b60405180910390f35b3480156102db57600080fd5b506102e46109e8565b6040516102f19190612bcb565b60405180910390f35b34801561030657600080fd5b5061030f6109f2565b60405161031c9190612be6565b60405180910390f35b34801561033157600080fd5b5061034c600480360381019061034791906121df565b610a05565b6040516103599190612973565b60405180910390f35b34801561036e57600080fd5b50610377610a34565b6040516103849190612be6565b60405180910390f35b34801561039957600080fd5b506103a2610a3d565b6040516103af9190612973565b60405180910390f35b3480156103c457600080fd5b506103cd610a50565b6040516103da9190612bcb565b60405180910390f35b3480156103ef57600080fd5b5061040a6004803603810190610405919061222e565b610a56565b6040516104179190612973565b60405180910390f35b34801561042c57600080fd5b50610447600480360381019061044291906122bc565b610a8d565b005b34801561045557600080fd5b5061045e610b13565b60405161046b91906128f7565b60405180910390f35b34801561048057600080fd5b50610489610b39565b6040516104969190612bcb565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c1919061217a565b610b3f565b6040516104d39190612bcb565b60405180910390f35b3480156104e857600080fd5b506104f1610b87565b005b3480156104ff57600080fd5b50610508610c0f565b60405161051591906128f7565b60405180910390f35b61053860048036038101906105339190612293565b610c35565b005b34801561054657600080fd5b5061054f610e13565b60405161055c9190612bcb565b60405180910390f35b34801561057157600080fd5b5061057a610e19565b60405161058791906128f7565b60405180910390f35b34801561059c57600080fd5b506105a5610e43565b6040516105b29190612bcb565b60405180910390f35b3480156105c757600080fd5b506105d0610e55565b6040516105dd91906129a9565b60405180910390f35b3480156105f257600080fd5b5061060d6004803603810190610608919061222e565b610ee7565b60405161061a9190612973565b60405180910390f35b34801561062f57600080fd5b5061064a6004803603810190610645919061222e565b610f5e565b6040516106579190612973565b60405180910390f35b34801561066c57600080fd5b506106876004803603810190610682919061217a565b610f81565b6040516106949190612973565b60405180910390f35b3480156106a957600080fd5b506106b2610fa1565b6040516106bf9190612bcb565b60405180910390f35b3480156106d457600080fd5b506106ef60048036038101906106ea919061217a565b610fa7565b005b3480156106fd57600080fd5b50610718600480360381019061071391906121a3565b611067565b6040516107259190612bcb565b60405180910390f35b34801561073a57600080fd5b506107436110ee565b005b34801561075157600080fd5b5061076c6004803603810190610767919061226a565b6111b9565b005b34801561077a57600080fd5b506107956004803603810190610790919061217a565b611252565b005b6060600380546107a690612dfe565b80601f01602080910402602001604051908101604052809291908181526020018280546107d290612dfe565b801561081f5780601f106107f45761010080835404028352916020019161081f565b820191906000526020600020905b81548152906001019060200180831161080257829003601f168201915b5050505050905090565b60008061083461134a565b9050610841818585611352565b600191505092915050565b61085461134a565b73ffffffffffffffffffffffffffffffffffffffff16610872610e19565b73ffffffffffffffffffffffffffffffffffffffff16146108c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bf90612acb565b60405180910390fd5b600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094b90612b0b565b60405180910390fd5b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560149054906101000a900460ff1681565b6000600254905090565b600a60149054906101000a900460ff1681565b600080610a1061134a565b9050610a1d85828561151d565b610a288585856115a9565b60019150509392505050565b60006012905090565b600760009054906101000a900460ff1681565b60065481565b600080610a6161134a565b9050610a82818585610a738589611067565b610a7d9190612c1d565b611352565b600191505092915050565b610a9561134a565b73ffffffffffffffffffffffffffffffffffffffff16610ab3610e19565b73ffffffffffffffffffffffffffffffffffffffff1614610b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0090612acb565b60405180910390fd5b8060068190555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b8f61134a565b73ffffffffffffffffffffffffffffffffffffffff16610bad610e19565b73ffffffffffffffffffffffffffffffffffffffff1614610c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfa90612acb565b60405180910390fd5b610c0d6000611b3e565b565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c3d61134a565b73ffffffffffffffffffffffffffffffffffffffff16610c5b610e19565b73ffffffffffffffffffffffffffffffffffffffff1614610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca890612acb565b60405180910390fd5b6103e88161ffff161115610cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf190612b2b565b60405180910390fd5b6000600b5414610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690612aeb565b60405180910390fd5b60008161ffff161480610d525750600034115b610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8890612a4b565b60405180910390fd5b60006103e88261ffff16610da36109e8565b610dad9190612ca4565b610db79190612c73565b9050600081610dc46109e8565b610dce9190612cfe565b90506000821115610de457610de38234611c04565b5b6000811115610e0057610dff30610df9610e19565b836115a9565b5b42600b8190555043600c81905550505050565b600b5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6d0366e7064422fd8420234000000081565b606060048054610e6490612dfe565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9090612dfe565b8015610edd5780601f10610eb257610100808354040283529160200191610edd565b820191906000526020600020905b815481529060010190602001808311610ec057829003601f168201915b5050505050905090565b600080610ef261134a565b90506000610f008286611067565b905083811015610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c90612bab565b60405180910390fd5b610f528286868403611352565b60019250505092915050565b600080610f6961134a565b9050610f768185856115a9565b600191505092915050565b600d6020528060005260406000206000915054906101000a900460ff1681565b60095481565b610faf61134a565b73ffffffffffffffffffffffffffffffffffffffff16610fcd610e19565b73ffffffffffffffffffffffffffffffffffffffff1614611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90612acb565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6110f661134a565b73ffffffffffffffffffffffffffffffffffffffff16611114610e19565b73ffffffffffffffffffffffffffffffffffffffff161461116a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116190612acb565b60405180910390fd5b60003390508073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156111b5573d6000803e3d6000fd5b5050565b6111c161134a565b73ffffffffffffffffffffffffffffffffffffffff166111df610e19565b73ffffffffffffffffffffffffffffffffffffffff1614611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122c90612acb565b60405180910390fd5b80600560146101000a81548160ff02191690831515021790555050565b61125a61134a565b73ffffffffffffffffffffffffffffffffffffffff16611278610e19565b73ffffffffffffffffffffffffffffffffffffffff16146112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c590612acb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561133e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133590612a0b565b60405180910390fd5b61134781611b3e565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990612b6b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142990612a2b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115109190612bcb565b60405180910390a3505050565b60006115298484611067565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115a35781811015611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c90612a6b565b60405180910390fd5b6115a28484848403611352565b5b50505050565b60003073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061161057503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b90506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480156116bf5750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b90506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16149050600082806117215750815b9050821561179c576002600c546117389190612c1d565b4311611797576001600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b61194b565b600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611829576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611820906129eb565b60405180910390fd5b600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ad906129eb565b60405180910390fd5b600d60006118c261134a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561194a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611941906129eb565b60405180910390fd5b5b600080600b541415801561195c5750815b8015611966575084155b801561197f5750600760009054906101000a900460ff16155b15611b1e576005600a60149054906101000a900460ff1660ff161080156119d15750600a60149054906101000a900460ff1660ff16613840600b54426119c59190612cfe565b6119cf9190612c73565b115b156119df576119de611cf8565b5b600560149054906101000a900460ff168015611a485750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16145b15611ac5576006546103e8611a5b6109e8565b611a659190612c73565b611a6f9190612ca4565b86611a7989610b3f565b611a839190612c1d565b1115611ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abb90612b8b565b60405180910390fd5b5b6103e884611ad557600954611ad9565b6008545b87611ae49190612ca4565b611aee9190612c73565b9050611b1d88600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611e69565b5b611b3488888389611b2f9190612cfe565b611e69565b5050505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611c3130600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611352565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080611c7d610e19565b426040518863ffffffff1660e01b8152600401611c9f96959493929190612912565b6060604051808303818588803b158015611cb857600080fd5b505af1158015611ccc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611cf191906122e5565b5050505050565b6005600a60149054906101000a900460ff1660ff1610611d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4490612a8b565b60405180910390fd5b600060085411611d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8990612a8b565b60405180910390fd5b600060095411611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90612a8b565b60405180910390fd5b600260086000828254611dea9190612cfe565b92505081905550600a60096000828254611e049190612cfe565b92505081905550600a601481819054906101000a900460ff1680929190611e2a90612e30565b91906101000a81548160ff021916908360ff160217905550506005600a60149054906101000a900460ff1660ff161415611e6757611e666120ea565b5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed090612b4b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f40906129cb565b60405180910390fd5b611f54838383612107565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190612aab565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461206d9190612c1d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120d19190612bcb565b60405180910390a36120e484848461210c565b50505050565b6001600760006101000a81548160ff021916908315150217905550565b505050565b505050565b60008135905061212081612ef8565b92915050565b60008135905061213581612f0f565b92915050565b60008135905061214a81612f26565b92915050565b60008135905061215f81612f3d565b92915050565b60008151905061217481612f3d565b92915050565b60006020828403121561218c57600080fd5b600061219a84828501612111565b91505092915050565b600080604083850312156121b657600080fd5b60006121c485828601612111565b92505060206121d585828601612111565b9150509250929050565b6000806000606084860312156121f457600080fd5b600061220286828701612111565b935050602061221386828701612111565b925050604061222486828701612150565b9150509250925092565b6000806040838503121561224157600080fd5b600061224f85828601612111565b925050602061226085828601612150565b9150509250929050565b60006020828403121561227c57600080fd5b600061228a84828501612126565b91505092915050565b6000602082840312156122a557600080fd5b60006122b38482850161213b565b91505092915050565b6000602082840312156122ce57600080fd5b60006122dc84828501612150565b91505092915050565b6000806000606084860312156122fa57600080fd5b600061230886828701612165565b935050602061231986828701612165565b925050604061232a86828701612165565b9150509250925092565b61233d81612d32565b82525050565b61234c81612d44565b82525050565b61235b81612d95565b82525050565b61236a81612db9565b82525050565b600061237b82612c01565b6123858185612c0c565b9350612395818560208601612dcb565b61239e81612ee7565b840191505092915050565b60006123b6602383612c0c565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061241c600d83612c0c565b91507f53746f7020626f7474696e6721000000000000000000000000000000000000006000830152602082019050919050565b600061245c602683612c0c565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006124c2602283612c0c565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612528601783612c0c565b91507f6e6565642045544820666f7220696e697469616c204c500000000000000000006000830152602082019050919050565b6000612568601d83612c0c565b91507f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006000830152602082019050919050565b60006125a8601083612c0c565b91507f74617820616c7265616479207a65726f000000000000000000000000000000006000830152602082019050919050565b60006125e8602683612c0c565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061264e602083612c0c565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061268e601083612c0c565b91507f616c7265616479206c61756e63686564000000000000000000000000000000006000830152602082019050919050565b60006126ce601783612c0c565b91507f75736572206973206e6f7420626c61636b6c69737465640000000000000000006000830152602082019050919050565b600061270e601683612c0c565b91507f6d757374206265206265747765656e20302d31303025000000000000000000006000830152602082019050919050565b600061274e602583612c0c565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006127b4602483612c0c565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061281a602283612c0c565b91507f506f736974696f6e20776f756c6420657863656564206d617820686f6c64696e60008301527f67730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612880602583612c0c565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6128e281612d7e565b82525050565b6128f181612d88565b82525050565b600060208201905061290c6000830184612334565b92915050565b600060c0820190506129276000830189612334565b61293460208301886128d9565b6129416040830187612361565b61294e6060830186612361565b61295b6080830185612334565b61296860a08301846128d9565b979650505050505050565b60006020820190506129886000830184612343565b92915050565b60006020820190506129a36000830184612352565b92915050565b600060208201905081810360008301526129c38184612370565b905092915050565b600060208201905081810360008301526129e4816123a9565b9050919050565b60006020820190508181036000830152612a048161240f565b9050919050565b60006020820190508181036000830152612a248161244f565b9050919050565b60006020820190508181036000830152612a44816124b5565b9050919050565b60006020820190508181036000830152612a648161251b565b9050919050565b60006020820190508181036000830152612a848161255b565b9050919050565b60006020820190508181036000830152612aa48161259b565b9050919050565b60006020820190508181036000830152612ac4816125db565b9050919050565b60006020820190508181036000830152612ae481612641565b9050919050565b60006020820190508181036000830152612b0481612681565b9050919050565b60006020820190508181036000830152612b24816126c1565b9050919050565b60006020820190508181036000830152612b4481612701565b9050919050565b60006020820190508181036000830152612b6481612741565b9050919050565b60006020820190508181036000830152612b84816127a7565b9050919050565b60006020820190508181036000830152612ba48161280d565b9050919050565b60006020820190508181036000830152612bc481612873565b9050919050565b6000602082019050612be060008301846128d9565b92915050565b6000602082019050612bfb60008301846128e8565b92915050565b600081519050919050565b600082825260208201905092915050565b6000612c2882612d7e565b9150612c3383612d7e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c6857612c67612e5a565b5b828201905092915050565b6000612c7e82612d7e565b9150612c8983612d7e565b925082612c9957612c98612e89565b5b828204905092915050565b6000612caf82612d7e565b9150612cba83612d7e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612cf357612cf2612e5a565b5b828202905092915050565b6000612d0982612d7e565b9150612d1483612d7e565b925082821015612d2757612d26612e5a565b5b828203905092915050565b6000612d3d82612d5e565b9050919050565b60008115159050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612da082612da7565b9050919050565b6000612db282612d5e565b9050919050565b6000612dc482612d7e565b9050919050565b60005b83811015612de9578082015181840152602081019050612dce565b83811115612df8576000848401525b50505050565b60006002820490506001821680612e1657607f821691505b60208210811415612e2a57612e29612eb8565b5b50919050565b6000612e3b82612d88565b915060ff821415612e4f57612e4e612e5a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b612f0181612d32565b8114612f0c57600080fd5b50565b612f1881612d44565b8114612f2357600080fd5b50565b612f2f81612d50565b8114612f3a57600080fd5b50565b612f4681612d7e565b8114612f5157600080fd5b5056fea26469706673582212208567d8815fa6d56507ebba1cdc6c0aeb0f867aae92618dfb7931538f5698f1d564736f6c63430008000033

Deployed Bytecode

0x6080604052600436106101e35760003560e01c8063715018a611610102578063a9059cbb11610095578063dd62ed3e11610064578063dd62ed3e146106f1578063e086e5ec1461072e578063f137d50714610745578063f2fde38b1461076e576101e3565b8063a9059cbb14610623578063abb8105214610660578063cc1776d31461069d578063cd8de42c146106c8576101e3565b80638da5cb5b116100d15780638da5cb5b14610565578063902d55a51461059057806395d89b41146105bb578063a457c2d7146105e6576101e3565b8063715018a6146104dc578063737ea06e146104f3578063782a2e341461051e578063790ca4131461053a576101e3565b8063313ce5671161017a57806348a792011161014957806348a792011461042057806349bd5a5e146104495780634f7041a51461047457806370a082311461049f576101e3565b8063313ce5671461036257806331d66bff1461038d57806337dac0eb146103b857806339509351146103e3576101e3565b806317f02b93116101b657806317f02b93146102a457806318160ddd146102cf578063229ba197146102fa57806323b872dd14610325576101e3565b806306fdde03146101e8578063095ea7b314610213578063134f9c8d146102505780631694505e14610279575b600080fd5b3480156101f457600080fd5b506101fd610797565b60405161020a91906129a9565b60405180910390f35b34801561021f57600080fd5b5061023a6004803603810190610235919061222e565b610829565b6040516102479190612973565b60405180910390f35b34801561025c57600080fd5b506102776004803603810190610272919061217a565b61084c565b005b34801561028557600080fd5b5061028e6109af565b60405161029b919061298e565b60405180910390f35b3480156102b057600080fd5b506102b96109d5565b6040516102c69190612973565b60405180910390f35b3480156102db57600080fd5b506102e46109e8565b6040516102f19190612bcb565b60405180910390f35b34801561030657600080fd5b5061030f6109f2565b60405161031c9190612be6565b60405180910390f35b34801561033157600080fd5b5061034c600480360381019061034791906121df565b610a05565b6040516103599190612973565b60405180910390f35b34801561036e57600080fd5b50610377610a34565b6040516103849190612be6565b60405180910390f35b34801561039957600080fd5b506103a2610a3d565b6040516103af9190612973565b60405180910390f35b3480156103c457600080fd5b506103cd610a50565b6040516103da9190612bcb565b60405180910390f35b3480156103ef57600080fd5b5061040a6004803603810190610405919061222e565b610a56565b6040516104179190612973565b60405180910390f35b34801561042c57600080fd5b50610447600480360381019061044291906122bc565b610a8d565b005b34801561045557600080fd5b5061045e610b13565b60405161046b91906128f7565b60405180910390f35b34801561048057600080fd5b50610489610b39565b6040516104969190612bcb565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c1919061217a565b610b3f565b6040516104d39190612bcb565b60405180910390f35b3480156104e857600080fd5b506104f1610b87565b005b3480156104ff57600080fd5b50610508610c0f565b60405161051591906128f7565b60405180910390f35b61053860048036038101906105339190612293565b610c35565b005b34801561054657600080fd5b5061054f610e13565b60405161055c9190612bcb565b60405180910390f35b34801561057157600080fd5b5061057a610e19565b60405161058791906128f7565b60405180910390f35b34801561059c57600080fd5b506105a5610e43565b6040516105b29190612bcb565b60405180910390f35b3480156105c757600080fd5b506105d0610e55565b6040516105dd91906129a9565b60405180910390f35b3480156105f257600080fd5b5061060d6004803603810190610608919061222e565b610ee7565b60405161061a9190612973565b60405180910390f35b34801561062f57600080fd5b5061064a6004803603810190610645919061222e565b610f5e565b6040516106579190612973565b60405180910390f35b34801561066c57600080fd5b506106876004803603810190610682919061217a565b610f81565b6040516106949190612973565b60405180910390f35b3480156106a957600080fd5b506106b2610fa1565b6040516106bf9190612bcb565b60405180910390f35b3480156106d457600080fd5b506106ef60048036038101906106ea919061217a565b610fa7565b005b3480156106fd57600080fd5b50610718600480360381019061071391906121a3565b611067565b6040516107259190612bcb565b60405180910390f35b34801561073a57600080fd5b506107436110ee565b005b34801561075157600080fd5b5061076c6004803603810190610767919061226a565b6111b9565b005b34801561077a57600080fd5b506107956004803603810190610790919061217a565b611252565b005b6060600380546107a690612dfe565b80601f01602080910402602001604051908101604052809291908181526020018280546107d290612dfe565b801561081f5780601f106107f45761010080835404028352916020019161081f565b820191906000526020600020905b81548152906001019060200180831161080257829003601f168201915b5050505050905090565b60008061083461134a565b9050610841818585611352565b600191505092915050565b61085461134a565b73ffffffffffffffffffffffffffffffffffffffff16610872610e19565b73ffffffffffffffffffffffffffffffffffffffff16146108c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bf90612acb565b60405180910390fd5b600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094b90612b0b565b60405180910390fd5b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560149054906101000a900460ff1681565b6000600254905090565b600a60149054906101000a900460ff1681565b600080610a1061134a565b9050610a1d85828561151d565b610a288585856115a9565b60019150509392505050565b60006012905090565b600760009054906101000a900460ff1681565b60065481565b600080610a6161134a565b9050610a82818585610a738589611067565b610a7d9190612c1d565b611352565b600191505092915050565b610a9561134a565b73ffffffffffffffffffffffffffffffffffffffff16610ab3610e19565b73ffffffffffffffffffffffffffffffffffffffff1614610b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0090612acb565b60405180910390fd5b8060068190555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b8f61134a565b73ffffffffffffffffffffffffffffffffffffffff16610bad610e19565b73ffffffffffffffffffffffffffffffffffffffff1614610c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfa90612acb565b60405180910390fd5b610c0d6000611b3e565b565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c3d61134a565b73ffffffffffffffffffffffffffffffffffffffff16610c5b610e19565b73ffffffffffffffffffffffffffffffffffffffff1614610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca890612acb565b60405180910390fd5b6103e88161ffff161115610cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf190612b2b565b60405180910390fd5b6000600b5414610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690612aeb565b60405180910390fd5b60008161ffff161480610d525750600034115b610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8890612a4b565b60405180910390fd5b60006103e88261ffff16610da36109e8565b610dad9190612ca4565b610db79190612c73565b9050600081610dc46109e8565b610dce9190612cfe565b90506000821115610de457610de38234611c04565b5b6000811115610e0057610dff30610df9610e19565b836115a9565b5b42600b8190555043600c81905550505050565b600b5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6d0366e7064422fd8420234000000081565b606060048054610e6490612dfe565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9090612dfe565b8015610edd5780601f10610eb257610100808354040283529160200191610edd565b820191906000526020600020905b815481529060010190602001808311610ec057829003601f168201915b5050505050905090565b600080610ef261134a565b90506000610f008286611067565b905083811015610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c90612bab565b60405180910390fd5b610f528286868403611352565b60019250505092915050565b600080610f6961134a565b9050610f768185856115a9565b600191505092915050565b600d6020528060005260406000206000915054906101000a900460ff1681565b60095481565b610faf61134a565b73ffffffffffffffffffffffffffffffffffffffff16610fcd610e19565b73ffffffffffffffffffffffffffffffffffffffff1614611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90612acb565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6110f661134a565b73ffffffffffffffffffffffffffffffffffffffff16611114610e19565b73ffffffffffffffffffffffffffffffffffffffff161461116a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116190612acb565b60405180910390fd5b60003390508073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156111b5573d6000803e3d6000fd5b5050565b6111c161134a565b73ffffffffffffffffffffffffffffffffffffffff166111df610e19565b73ffffffffffffffffffffffffffffffffffffffff1614611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122c90612acb565b60405180910390fd5b80600560146101000a81548160ff02191690831515021790555050565b61125a61134a565b73ffffffffffffffffffffffffffffffffffffffff16611278610e19565b73ffffffffffffffffffffffffffffffffffffffff16146112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c590612acb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561133e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133590612a0b565b60405180910390fd5b61134781611b3e565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990612b6b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142990612a2b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115109190612bcb565b60405180910390a3505050565b60006115298484611067565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115a35781811015611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c90612a6b565b60405180910390fd5b6115a28484848403611352565b5b50505050565b60003073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061161057503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b90506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480156116bf5750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b90506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16149050600082806117215750815b9050821561179c576002600c546117389190612c1d565b4311611797576001600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b61194b565b600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611829576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611820906129eb565b60405180910390fd5b600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ad906129eb565b60405180910390fd5b600d60006118c261134a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561194a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611941906129eb565b60405180910390fd5b5b600080600b541415801561195c5750815b8015611966575084155b801561197f5750600760009054906101000a900460ff16155b15611b1e576005600a60149054906101000a900460ff1660ff161080156119d15750600a60149054906101000a900460ff1660ff16613840600b54426119c59190612cfe565b6119cf9190612c73565b115b156119df576119de611cf8565b5b600560149054906101000a900460ff168015611a485750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16145b15611ac5576006546103e8611a5b6109e8565b611a659190612c73565b611a6f9190612ca4565b86611a7989610b3f565b611a839190612c1d565b1115611ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abb90612b8b565b60405180910390fd5b5b6103e884611ad557600954611ad9565b6008545b87611ae49190612ca4565b611aee9190612c73565b9050611b1d88600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611e69565b5b611b3488888389611b2f9190612cfe565b611e69565b5050505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611c3130600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611352565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080611c7d610e19565b426040518863ffffffff1660e01b8152600401611c9f96959493929190612912565b6060604051808303818588803b158015611cb857600080fd5b505af1158015611ccc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611cf191906122e5565b5050505050565b6005600a60149054906101000a900460ff1660ff1610611d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4490612a8b565b60405180910390fd5b600060085411611d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8990612a8b565b60405180910390fd5b600060095411611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90612a8b565b60405180910390fd5b600260086000828254611dea9190612cfe565b92505081905550600a60096000828254611e049190612cfe565b92505081905550600a601481819054906101000a900460ff1680929190611e2a90612e30565b91906101000a81548160ff021916908360ff160217905550506005600a60149054906101000a900460ff1660ff161415611e6757611e666120ea565b5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed090612b4b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f40906129cb565b60405180910390fd5b611f54838383612107565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190612aab565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461206d9190612c1d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120d19190612bcb565b60405180910390a36120e484848461210c565b50505050565b6001600760006101000a81548160ff021916908315150217905550565b505050565b505050565b60008135905061212081612ef8565b92915050565b60008135905061213581612f0f565b92915050565b60008135905061214a81612f26565b92915050565b60008135905061215f81612f3d565b92915050565b60008151905061217481612f3d565b92915050565b60006020828403121561218c57600080fd5b600061219a84828501612111565b91505092915050565b600080604083850312156121b657600080fd5b60006121c485828601612111565b92505060206121d585828601612111565b9150509250929050565b6000806000606084860312156121f457600080fd5b600061220286828701612111565b935050602061221386828701612111565b925050604061222486828701612150565b9150509250925092565b6000806040838503121561224157600080fd5b600061224f85828601612111565b925050602061226085828601612150565b9150509250929050565b60006020828403121561227c57600080fd5b600061228a84828501612126565b91505092915050565b6000602082840312156122a557600080fd5b60006122b38482850161213b565b91505092915050565b6000602082840312156122ce57600080fd5b60006122dc84828501612150565b91505092915050565b6000806000606084860312156122fa57600080fd5b600061230886828701612165565b935050602061231986828701612165565b925050604061232a86828701612165565b9150509250925092565b61233d81612d32565b82525050565b61234c81612d44565b82525050565b61235b81612d95565b82525050565b61236a81612db9565b82525050565b600061237b82612c01565b6123858185612c0c565b9350612395818560208601612dcb565b61239e81612ee7565b840191505092915050565b60006123b6602383612c0c565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061241c600d83612c0c565b91507f53746f7020626f7474696e6721000000000000000000000000000000000000006000830152602082019050919050565b600061245c602683612c0c565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006124c2602283612c0c565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612528601783612c0c565b91507f6e6565642045544820666f7220696e697469616c204c500000000000000000006000830152602082019050919050565b6000612568601d83612c0c565b91507f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006000830152602082019050919050565b60006125a8601083612c0c565b91507f74617820616c7265616479207a65726f000000000000000000000000000000006000830152602082019050919050565b60006125e8602683612c0c565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061264e602083612c0c565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061268e601083612c0c565b91507f616c7265616479206c61756e63686564000000000000000000000000000000006000830152602082019050919050565b60006126ce601783612c0c565b91507f75736572206973206e6f7420626c61636b6c69737465640000000000000000006000830152602082019050919050565b600061270e601683612c0c565b91507f6d757374206265206265747765656e20302d31303025000000000000000000006000830152602082019050919050565b600061274e602583612c0c565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006127b4602483612c0c565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061281a602283612c0c565b91507f506f736974696f6e20776f756c6420657863656564206d617820686f6c64696e60008301527f67730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612880602583612c0c565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6128e281612d7e565b82525050565b6128f181612d88565b82525050565b600060208201905061290c6000830184612334565b92915050565b600060c0820190506129276000830189612334565b61293460208301886128d9565b6129416040830187612361565b61294e6060830186612361565b61295b6080830185612334565b61296860a08301846128d9565b979650505050505050565b60006020820190506129886000830184612343565b92915050565b60006020820190506129a36000830184612352565b92915050565b600060208201905081810360008301526129c38184612370565b905092915050565b600060208201905081810360008301526129e4816123a9565b9050919050565b60006020820190508181036000830152612a048161240f565b9050919050565b60006020820190508181036000830152612a248161244f565b9050919050565b60006020820190508181036000830152612a44816124b5565b9050919050565b60006020820190508181036000830152612a648161251b565b9050919050565b60006020820190508181036000830152612a848161255b565b9050919050565b60006020820190508181036000830152612aa48161259b565b9050919050565b60006020820190508181036000830152612ac4816125db565b9050919050565b60006020820190508181036000830152612ae481612641565b9050919050565b60006020820190508181036000830152612b0481612681565b9050919050565b60006020820190508181036000830152612b24816126c1565b9050919050565b60006020820190508181036000830152612b4481612701565b9050919050565b60006020820190508181036000830152612b6481612741565b9050919050565b60006020820190508181036000830152612b84816127a7565b9050919050565b60006020820190508181036000830152612ba48161280d565b9050919050565b60006020820190508181036000830152612bc481612873565b9050919050565b6000602082019050612be060008301846128d9565b92915050565b6000602082019050612bfb60008301846128e8565b92915050565b600081519050919050565b600082825260208201905092915050565b6000612c2882612d7e565b9150612c3383612d7e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c6857612c67612e5a565b5b828201905092915050565b6000612c7e82612d7e565b9150612c8983612d7e565b925082612c9957612c98612e89565b5b828204905092915050565b6000612caf82612d7e565b9150612cba83612d7e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612cf357612cf2612e5a565b5b828202905092915050565b6000612d0982612d7e565b9150612d1483612d7e565b925082821015612d2757612d26612e5a565b5b828203905092915050565b6000612d3d82612d5e565b9050919050565b60008115159050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612da082612da7565b9050919050565b6000612db282612d5e565b9050919050565b6000612dc482612d7e565b9050919050565b60005b83811015612de9578082015181840152602081019050612dce565b83811115612df8576000848401525b50505050565b60006002820490506001821680612e1657607f821691505b60208210811415612e2a57612e29612eb8565b5b50919050565b6000612e3b82612d88565b915060ff821415612e4f57612e4e612e5a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b612f0181612d32565b8114612f0c57600080fd5b50565b612f1881612d44565b8114612f2357600080fd5b50565b612f2f81612d50565b8114612f3a57600080fd5b50565b612f4681612d7e565b8114612f5157600080fd5b5056fea26469706673582212208567d8815fa6d56507ebba1cdc6c0aeb0f867aae92618dfb7931538f5698f1d564736f6c63430008000033

Deployed Bytecode Sourcemap

29108:5240:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6152:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8644:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33865:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29875:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29317:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7272:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29655:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9466:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7114:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29403:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29350:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10170:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34033:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29923:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29439:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7443:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18911:103;;;;;;;;;;;;;:::i;:::-;;29576:72;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32182:675;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29708:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18260:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29164:68;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6371:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10943:505;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7826:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29802:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29507:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33561:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8123:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34199:146;;;;;;;;;;;;;:::i;:::-;;33757:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19169:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6152:100;6206:13;6239:5;6232:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6152:100;:::o;8644:242::-;8763:4;8785:13;8801:12;:10;:12::i;:::-;8785:28;;8824:32;8833:5;8840:7;8849:6;8824:8;:32::i;:::-;8874:4;8867:11;;;8644:242;;;;:::o;33865:160::-;18491:12;:10;:12::i;:::-;18480:23;;:7;:5;:7::i;:::-;:23;;;18472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33940:6:::1;:15;33947:7;33940:15;;;;;;;;;;;;;;;;;;;;;;;;;33932:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;34012:5;33994:6;:15;34001:7;33994:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;33865:160:::0;:::o;29875:41::-;;;;;;;;;;;;;:::o;29317:26::-;;;;;;;;;;;;;:::o;7272:108::-;7333:7;7360:12;;7353:19;;7272:108;:::o;29655:25::-;;;;;;;;;;;;;:::o;9466:295::-;9597:4;9614:15;9632:12;:10;:12::i;:::-;9614:30;;9655:38;9671:4;9677:7;9686:6;9655:15;:38::i;:::-;9704:27;9714:4;9720:2;9724:6;9704:9;:27::i;:::-;9749:4;9742:11;;;9466:295;;;;;:::o;7114:93::-;7172:5;7197:2;7190:9;;7114:93;:::o;29403:29::-;;;;;;;;;;;;;:::o;29350:40::-;;;;:::o;10170:270::-;10285:4;10307:13;10323:12;:10;:12::i;:::-;10307:28;;10346:64;10355:5;10362:7;10399:10;10371:25;10381:5;10388:7;10371:9;:25::i;:::-;:38;;;;:::i;:::-;10346:8;:64::i;:::-;10428:4;10421:11;;;10170:270;;;;:::o;34033:158::-;18491:12;:10;:12::i;:::-;18480:23;;:7;:5;:7::i;:::-;:23;;;18472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34169:14:::1;34146:20;:37;;;;34033:158:::0;:::o;29923:28::-;;;;;;;;;;;;;:::o;29439:55::-;;;;:::o;7443:177::-;7562:7;7594:9;:18;7604:7;7594:18;;;;;;;;;;;;;;;;7587:25;;7443:177;;;:::o;18911:103::-;18491:12;:10;:12::i;:::-;18480:23;;:7;:5;:7::i;:::-;:23;;;18472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18976:30:::1;19003:1;18976:18;:30::i;:::-;18911:103::o:0;29576:72::-;;;;;;;;;;;;;:::o;32182:675::-;18491:12;:10;:12::i;:::-;18480:23;;:7;:5;:7::i;:::-;:23;;;18472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29286:4:::1;32261:8;:31;;;;32253:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32352:1;32338:10;;:15;32330:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;32405:1;32393:8;:13;;;:30;;;;32422:1;32410:9;:13;32393:30;32385:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32464:17;29286:4;32501:8;32485:24;;:13;:11;:13::i;:::-;:24;;;;:::i;:::-;32484:48;;;;:::i;:::-;32464:68;;32543:17;32579:9;32563:13;:11;:13::i;:::-;:25;;;;:::i;:::-;32543:45;;32615:1;32603:9;:13;32599:74;;;32633:28;32640:9;32651;32633:6;:28::i;:::-;32599:74;32699:1;32687:9;:13;32683:90;;;32717:44;32735:4;32742:7;:5;:7::i;:::-;32751:9;32717;:44::i;:::-;32683:90;32796:15;32783:10;:28;;;;32837:12;32822;:27;;;;18551:1;;32182:675:::0;:::o;29708:25::-;;;;:::o;18260:87::-;18306:7;18333:6;;;;;;;;;;;18326:13;;18260:87;:::o;29164:68::-;29203:29;29164:68;:::o;6371:104::-;6427:13;6460:7;6453:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6371:104;:::o;10943:505::-;11063:4;11085:13;11101:12;:10;:12::i;:::-;11085:28;;11124:24;11151:25;11161:5;11168:7;11151:9;:25::i;:::-;11124:52;;11229:15;11209:16;:35;;11187:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;11345:60;11354:5;11361:7;11389:15;11370:16;:34;11345:8;:60::i;:::-;11436:4;11429:11;;;;10943:505;;;;:::o;7826:234::-;7941:4;7963:13;7979:12;:10;:12::i;:::-;7963:28;;8002;8012:5;8019:2;8023:6;8002:9;:28::i;:::-;8048:4;8041:11;;;7826:234;;;;:::o;29802:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;29507:56::-;;;;:::o;33561:113::-;18491:12;:10;:12::i;:::-;18480:23;;:7;:5;:7::i;:::-;:23;;;18472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33653:13:::1;33638:12;;:28;;;;;;;;;;;;;;;;;;33561:113:::0;:::o;8123:201::-;8257:7;8289:11;:18;8301:5;8289:18;;;;;;;;;;;;;;;:27;8308:7;8289:27;;;;;;;;;;;;;;;;8282:34;;8123:201;;;;:::o;34199:146::-;18491:12;:10;:12::i;:::-;18480:23;;:7;:5;:7::i;:::-;:23;;;18472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34252:18:::1;34281:10;34252:40;;34303:2;:11;;:34;34315:21;34303:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;18551:1;34199:146::o:0;33757:100::-;18491:12;:10;:12::i;:::-;18480:23;;:7;:5;:7::i;:::-;:23;;;18472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33844:5:::1;33827:14;;:22;;;;;;;;;;;;;;;;;;33757:100:::0;:::o;19169:238::-;18491:12;:10;:12::i;:::-;18480:23;;:7;:5;:7::i;:::-;:23;;;18472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19292:1:::1;19272:22;;:8;:22;;;;19250:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;19371:28;19390:8;19371:18;:28::i;:::-;19169:238:::0;:::o;638:98::-;691:7;718:10;711:17;;638:98;:::o;14683:380::-;14836:1;14819:19;;:5;:19;;;;14811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14917:1;14898:21;;:7;:21;;;;14890:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15001:6;14971:11;:18;14983:5;14971:18;;;;;;;;;;;;;;;:27;14990:7;14971:27;;;;;;;;;;;;;;;:36;;;;15039:7;15023:32;;15032:5;15023:32;;;15048:6;15023:32;;;;;;:::i;:::-;;;;;;;;14683:380;;;:::o;15354:502::-;15489:24;15516:25;15526:5;15533:7;15516:9;:25::i;:::-;15489:52;;15576:17;15556:16;:37;15552:297;;15656:6;15636:16;:26;;15610:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;15771:51;15780:5;15787:7;15815:6;15796:16;:25;15771:8;:51::i;:::-;15552:297;15354:502;;;;:::o;30424:1709::-;30565:16;30602:4;30584:23;;:6;:23;;;:66;;;;30645:4;30624:26;;:9;:26;;;30584:66;30565:85;;30661:11;30685:13;;;;;;;;;;;30675:23;;:6;:23;;;:77;;;;;30736:15;;;;;;;;;;;30715:37;;:9;:37;;;;30675:77;30661:91;;30763:12;30791:13;;;;;;;;;;;30778:26;;:9;:26;;;30763:41;;30815:12;30830:6;:17;;;;30840:7;30830:17;30815:32;;30864:6;30860:418;;;30984:1;30969:12;;:16;;;;:::i;:::-;30953:12;:32;30949:97;;31026:4;31006:6;:17;31013:9;31006:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;30949:97;30860:418;;;31113:6;:17;31120:9;31113:17;;;;;;;;;;;;;;;;;;;;;;;;;31112:18;31104:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;31172:6;:14;31179:6;31172:14;;;;;;;;;;;;;;;;;;;;;;;;;31171:15;31163:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;31228:6;:20;31235:12;:10;:12::i;:::-;31228:20;;;;;;;;;;;;;;;;;;;;;;;;;31227:21;31219:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;30860:418;31290:12;31335:1;31321:10;;:15;;:26;;;;;31340:7;31321:26;:42;;;;;31352:11;31351:12;31321:42;:56;;;;;31368:9;;;;;;;;;;;31367:10;31321:56;31317:715;;;31435:1;31424:8;;;;;;;;;;;:12;;;:65;;;;;31481:8;;;;;;;;;;;31440:49;;31473:5;31459:10;;31441:15;:28;;;;:::i;:::-;31440:38;;;;:::i;:::-;:49;31424:65;31420:117;;;31510:11;:9;:11::i;:::-;31420:117;31586:14;;;;;;;;;;;:41;;;;;31614:13;;;;;;;;;;;31604:23;;:6;:23;;;31586:41;31582:299;;;31767:20;;31759:4;31743:13;:11;:13::i;:::-;:20;;;;:::i;:::-;31742:45;;;;:::i;:::-;31707:6;31678:26;31694:9;31678:15;:26::i;:::-;:35;;;;:::i;:::-;:109;;31648:217;;;;;;;;;;;;:::i;:::-;;;;;;;;;31582:299;29286:4;31913:6;:25;;31931:7;;31913:25;;;31922:6;;31913:25;31903:6;:36;;;;:::i;:::-;31902:60;;;;:::i;:::-;31895:67;;31977:43;31993:6;32001:12;;;;;;;;;;;32015:4;31977:15;:43::i;:::-;31317:715;32074:51;32090:6;32098:9;32119:4;32110:6;:13;;;;:::i;:::-;32074:15;:51::i;:::-;30424:1709;;;;;;;;:::o;19567:191::-;19641:16;19660:6;;;;;;;;;;;19641:25;;19686:8;19677:6;;:17;;;;;;;;;;;;;;;;;;19741:8;19710:40;;19731:8;19710:40;;;;;;;;;;;;19567:191;;:::o;32865:354::-;32940:62;32957:4;32972:15;;;;;;;;;;;32990:11;32940:8;:62::i;:::-;33013:15;;;;;;;;;;;:31;;;33052:9;33085:4;33105:11;33131:1;33147;33163:7;:5;:7::i;:::-;33185:15;33013:198;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32865:354;;:::o;33227:326::-;33286:1;33275:8;;;;;;;;;;;:12;;;33267:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;33336:1;33327:6;;:10;33319:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;33387:1;33377:7;;:11;33369:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;33430:1;33420:6;;:11;;;;;;;:::i;:::-;;;;;;;;33453:2;33442:7;;:13;;;;;;;:::i;:::-;;;;;;;;33466:8;;:10;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;33503:1;33491:8;;;;;;;;;;;:13;;;33487:59;;;33521:13;:11;:13::i;:::-;33487:59;33227:326::o;11927:708::-;12074:1;12058:18;;:4;:18;;;;12050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12151:1;12137:16;;:2;:16;;;;12129:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12206:38;12227:4;12233:2;12237:6;12206:20;:38::i;:::-;12257:19;12279:9;:15;12289:4;12279:15;;;;;;;;;;;;;;;;12257:37;;12342:6;12327:11;:21;;12305:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;12482:6;12468:11;:20;12450:9;:15;12460:4;12450:15;;;;;;;;;;;;;;;:38;;;;12527:6;12510:9;:13;12520:2;12510:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;12566:2;12551:26;;12560:4;12551:26;;;12570:6;12551:26;;;;;;:::i;:::-;;;;;;;;12590:37;12610:4;12616:2;12620:6;12590:19;:37::i;:::-;11927:708;;;;:::o;33682:67::-;33737:4;33725:9;;:16;;;;;;;;;;;;;;;;;;33682:67::o;16456:125::-;;;;:::o;17185:124::-;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:137::-;;374:6;361:20;352:29;;390:32;416:5;390:32;:::i;:::-;342:86;;;;:::o;434:139::-;;518:6;505:20;496:29;;534:33;561:5;534:33;:::i;:::-;486:87;;;;:::o;579:143::-;;667:6;661:13;652:22;;683:33;710:5;683:33;:::i;:::-;642:80;;;;:::o;728:262::-;;836:2;824:9;815:7;811:23;807:32;804:2;;;852:1;849;842:12;804:2;895:1;920:53;965:7;956:6;945:9;941:22;920:53;:::i;:::-;910:63;;866:117;794:196;;;;:::o;996:407::-;;;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:53;1250:7;1241:6;1230:9;1226:22;1205:53;:::i;:::-;1195:63;;1151:117;1307:2;1333:53;1378:7;1369:6;1358:9;1354:22;1333:53;:::i;:::-;1323:63;;1278:118;1079:324;;;;;:::o;1409:552::-;;;;1551:2;1539:9;1530:7;1526:23;1522:32;1519:2;;;1567:1;1564;1557:12;1519:2;1610:1;1635:53;1680:7;1671:6;1660:9;1656:22;1635:53;:::i;:::-;1625:63;;1581:117;1737:2;1763:53;1808:7;1799:6;1788:9;1784:22;1763:53;:::i;:::-;1753:63;;1708:118;1865:2;1891:53;1936:7;1927:6;1916:9;1912:22;1891:53;:::i;:::-;1881:63;;1836:118;1509:452;;;;;:::o;1967:407::-;;;2092:2;2080:9;2071:7;2067:23;2063:32;2060:2;;;2108:1;2105;2098:12;2060:2;2151:1;2176:53;2221:7;2212:6;2201:9;2197:22;2176:53;:::i;:::-;2166:63;;2122:117;2278:2;2304:53;2349:7;2340:6;2329:9;2325:22;2304:53;:::i;:::-;2294:63;;2249:118;2050:324;;;;;:::o;2380:256::-;;2485:2;2473:9;2464:7;2460:23;2456:32;2453:2;;;2501:1;2498;2491:12;2453:2;2544:1;2569:50;2611:7;2602:6;2591:9;2587:22;2569:50;:::i;:::-;2559:60;;2515:114;2443:193;;;;:::o;2642:260::-;;2749:2;2737:9;2728:7;2724:23;2720:32;2717:2;;;2765:1;2762;2755:12;2717:2;2808:1;2833:52;2877:7;2868:6;2857:9;2853:22;2833:52;:::i;:::-;2823:62;;2779:116;2707:195;;;;:::o;2908:262::-;;3016:2;3004:9;2995:7;2991:23;2987:32;2984:2;;;3032:1;3029;3022:12;2984:2;3075:1;3100:53;3145:7;3136:6;3125:9;3121:22;3100:53;:::i;:::-;3090:63;;3046:117;2974:196;;;;:::o;3176:596::-;;;;3329:2;3317:9;3308:7;3304:23;3300:32;3297:2;;;3345:1;3342;3335:12;3297:2;3388:1;3413:64;3469:7;3460:6;3449:9;3445:22;3413:64;:::i;:::-;3403:74;;3359:128;3526:2;3552:64;3608:7;3599:6;3588:9;3584:22;3552:64;:::i;:::-;3542:74;;3497:129;3665:2;3691:64;3747:7;3738:6;3727:9;3723:22;3691:64;:::i;:::-;3681:74;;3636:129;3287:485;;;;;:::o;3778:118::-;3865:24;3883:5;3865:24;:::i;:::-;3860:3;3853:37;3843:53;;:::o;3902:109::-;3983:21;3998:5;3983:21;:::i;:::-;3978:3;3971:34;3961:50;;:::o;4017:185::-;4131:64;4189:5;4131:64;:::i;:::-;4126:3;4119:77;4109:93;;:::o;4208:147::-;4303:45;4342:5;4303:45;:::i;:::-;4298:3;4291:58;4281:74;;:::o;4361:364::-;;4477:39;4510:5;4477:39;:::i;:::-;4532:71;4596:6;4591:3;4532:71;:::i;:::-;4525:78;;4612:52;4657:6;4652:3;4645:4;4638:5;4634:16;4612:52;:::i;:::-;4689:29;4711:6;4689:29;:::i;:::-;4684:3;4680:39;4673:46;;4453:272;;;;;:::o;4731:367::-;;4894:67;4958:2;4953:3;4894:67;:::i;:::-;4887:74;;4991:34;4987:1;4982:3;4978:11;4971:55;5057:5;5052:2;5047:3;5043:12;5036:27;5089:2;5084:3;5080:12;5073:19;;4877:221;;;:::o;5104:311::-;;5267:67;5331:2;5326:3;5267:67;:::i;:::-;5260:74;;5364:15;5360:1;5355:3;5351:11;5344:36;5406:2;5401:3;5397:12;5390:19;;5250:165;;;:::o;5421:370::-;;5584:67;5648:2;5643:3;5584:67;:::i;:::-;5577:74;;5681:34;5677:1;5672:3;5668:11;5661:55;5747:8;5742:2;5737:3;5733:12;5726:30;5782:2;5777:3;5773:12;5766:19;;5567:224;;;:::o;5797:366::-;;5960:67;6024:2;6019:3;5960:67;:::i;:::-;5953:74;;6057:34;6053:1;6048:3;6044:11;6037:55;6123:4;6118:2;6113:3;6109:12;6102:26;6154:2;6149:3;6145:12;6138:19;;5943:220;;;:::o;6169:321::-;;6332:67;6396:2;6391:3;6332:67;:::i;:::-;6325:74;;6429:25;6425:1;6420:3;6416:11;6409:46;6481:2;6476:3;6472:12;6465:19;;6315:175;;;:::o;6496:327::-;;6659:67;6723:2;6718:3;6659:67;:::i;:::-;6652:74;;6756:31;6752:1;6747:3;6743:11;6736:52;6814:2;6809:3;6805:12;6798:19;;6642:181;;;:::o;6829:314::-;;6992:67;7056:2;7051:3;6992:67;:::i;:::-;6985:74;;7089:18;7085:1;7080:3;7076:11;7069:39;7134:2;7129:3;7125:12;7118:19;;6975:168;;;:::o;7149:370::-;;7312:67;7376:2;7371:3;7312:67;:::i;:::-;7305:74;;7409:34;7405:1;7400:3;7396:11;7389:55;7475:8;7470:2;7465:3;7461:12;7454:30;7510:2;7505:3;7501:12;7494:19;;7295:224;;;:::o;7525:330::-;;7688:67;7752:2;7747:3;7688:67;:::i;:::-;7681:74;;7785:34;7781:1;7776:3;7772:11;7765:55;7846:2;7841:3;7837:12;7830:19;;7671:184;;;:::o;7861:314::-;;8024:67;8088:2;8083:3;8024:67;:::i;:::-;8017:74;;8121:18;8117:1;8112:3;8108:11;8101:39;8166:2;8161:3;8157:12;8150:19;;8007:168;;;:::o;8181:321::-;;8344:67;8408:2;8403:3;8344:67;:::i;:::-;8337:74;;8441:25;8437:1;8432:3;8428:11;8421:46;8493:2;8488:3;8484:12;8477:19;;8327:175;;;:::o;8508:320::-;;8671:67;8735:2;8730:3;8671:67;:::i;:::-;8664:74;;8768:24;8764:1;8759:3;8755:11;8748:45;8819:2;8814:3;8810:12;8803:19;;8654:174;;;:::o;8834:369::-;;8997:67;9061:2;9056:3;8997:67;:::i;:::-;8990:74;;9094:34;9090:1;9085:3;9081:11;9074:55;9160:7;9155:2;9150:3;9146:12;9139:29;9194:2;9189:3;9185:12;9178:19;;8980:223;;;:::o;9209:368::-;;9372:67;9436:2;9431:3;9372:67;:::i;:::-;9365:74;;9469:34;9465:1;9460:3;9456:11;9449:55;9535:6;9530:2;9525:3;9521:12;9514:28;9568:2;9563:3;9559:12;9552:19;;9355:222;;;:::o;9583:366::-;;9746:67;9810:2;9805:3;9746:67;:::i;:::-;9739:74;;9843:34;9839:1;9834:3;9830:11;9823:55;9909:4;9904:2;9899:3;9895:12;9888:26;9940:2;9935:3;9931:12;9924:19;;9729:220;;;:::o;9955:369::-;;10118:67;10182:2;10177:3;10118:67;:::i;:::-;10111:74;;10215:34;10211:1;10206:3;10202:11;10195:55;10281:7;10276:2;10271:3;10267:12;10260:29;10315:2;10310:3;10306:12;10299:19;;10101:223;;;:::o;10330:118::-;10417:24;10435:5;10417:24;:::i;:::-;10412:3;10405:37;10395:53;;:::o;10454:112::-;10537:22;10553:5;10537:22;:::i;:::-;10532:3;10525:35;10515:51;;:::o;10572:222::-;;10703:2;10692:9;10688:18;10680:26;;10716:71;10784:1;10773:9;10769:17;10760:6;10716:71;:::i;:::-;10670:124;;;;:::o;10800:807::-;;11087:3;11076:9;11072:19;11064:27;;11101:71;11169:1;11158:9;11154:17;11145:6;11101:71;:::i;:::-;11182:72;11250:2;11239:9;11235:18;11226:6;11182:72;:::i;:::-;11264:80;11340:2;11329:9;11325:18;11316:6;11264:80;:::i;:::-;11354;11430:2;11419:9;11415:18;11406:6;11354:80;:::i;:::-;11444:73;11512:3;11501:9;11497:19;11488:6;11444:73;:::i;:::-;11527;11595:3;11584:9;11580:19;11571:6;11527:73;:::i;:::-;11054:553;;;;;;;;;:::o;11613:210::-;;11738:2;11727:9;11723:18;11715:26;;11751:65;11813:1;11802:9;11798:17;11789:6;11751:65;:::i;:::-;11705:118;;;;:::o;11829:276::-;;11987:2;11976:9;11972:18;11964:26;;12000:98;12095:1;12084:9;12080:17;12071:6;12000:98;:::i;:::-;11954:151;;;;:::o;12111:313::-;;12262:2;12251:9;12247:18;12239:26;;12311:9;12305:4;12301:20;12297:1;12286:9;12282:17;12275:47;12339:78;12412:4;12403:6;12339:78;:::i;:::-;12331:86;;12229:195;;;;:::o;12430:419::-;;12634:2;12623:9;12619:18;12611:26;;12683:9;12677:4;12673:20;12669:1;12658:9;12654:17;12647:47;12711:131;12837:4;12711:131;:::i;:::-;12703:139;;12601:248;;;:::o;12855:419::-;;13059:2;13048:9;13044:18;13036:26;;13108:9;13102:4;13098:20;13094:1;13083:9;13079:17;13072:47;13136:131;13262:4;13136:131;:::i;:::-;13128:139;;13026:248;;;:::o;13280:419::-;;13484:2;13473:9;13469:18;13461:26;;13533:9;13527:4;13523:20;13519:1;13508:9;13504:17;13497:47;13561:131;13687:4;13561:131;:::i;:::-;13553:139;;13451:248;;;:::o;13705:419::-;;13909:2;13898:9;13894:18;13886:26;;13958:9;13952:4;13948:20;13944:1;13933:9;13929:17;13922:47;13986:131;14112:4;13986:131;:::i;:::-;13978:139;;13876:248;;;:::o;14130:419::-;;14334:2;14323:9;14319:18;14311:26;;14383:9;14377:4;14373:20;14369:1;14358:9;14354:17;14347:47;14411:131;14537:4;14411:131;:::i;:::-;14403:139;;14301:248;;;:::o;14555:419::-;;14759:2;14748:9;14744:18;14736:26;;14808:9;14802:4;14798:20;14794:1;14783:9;14779:17;14772:47;14836:131;14962:4;14836:131;:::i;:::-;14828:139;;14726:248;;;:::o;14980:419::-;;15184:2;15173:9;15169:18;15161:26;;15233:9;15227:4;15223:20;15219:1;15208:9;15204:17;15197:47;15261:131;15387:4;15261:131;:::i;:::-;15253:139;;15151:248;;;:::o;15405:419::-;;15609:2;15598:9;15594:18;15586:26;;15658:9;15652:4;15648:20;15644:1;15633:9;15629:17;15622:47;15686:131;15812:4;15686:131;:::i;:::-;15678:139;;15576:248;;;:::o;15830:419::-;;16034:2;16023:9;16019:18;16011:26;;16083:9;16077:4;16073:20;16069:1;16058:9;16054:17;16047:47;16111:131;16237:4;16111:131;:::i;:::-;16103:139;;16001:248;;;:::o;16255:419::-;;16459:2;16448:9;16444:18;16436:26;;16508:9;16502:4;16498:20;16494:1;16483:9;16479:17;16472:47;16536:131;16662:4;16536:131;:::i;:::-;16528:139;;16426:248;;;:::o;16680:419::-;;16884:2;16873:9;16869:18;16861:26;;16933:9;16927:4;16923:20;16919:1;16908:9;16904:17;16897:47;16961:131;17087:4;16961:131;:::i;:::-;16953:139;;16851:248;;;:::o;17105:419::-;;17309:2;17298:9;17294:18;17286:26;;17358:9;17352:4;17348:20;17344:1;17333:9;17329:17;17322:47;17386:131;17512:4;17386:131;:::i;:::-;17378:139;;17276:248;;;:::o;17530:419::-;;17734:2;17723:9;17719:18;17711:26;;17783:9;17777:4;17773:20;17769:1;17758:9;17754:17;17747:47;17811:131;17937:4;17811:131;:::i;:::-;17803:139;;17701:248;;;:::o;17955:419::-;;18159:2;18148:9;18144:18;18136:26;;18208:9;18202:4;18198:20;18194:1;18183:9;18179:17;18172:47;18236:131;18362:4;18236:131;:::i;:::-;18228:139;;18126:248;;;:::o;18380:419::-;;18584:2;18573:9;18569:18;18561:26;;18633:9;18627:4;18623:20;18619:1;18608:9;18604:17;18597:47;18661:131;18787:4;18661:131;:::i;:::-;18653:139;;18551:248;;;:::o;18805:419::-;;19009:2;18998:9;18994:18;18986:26;;19058:9;19052:4;19048:20;19044:1;19033:9;19029:17;19022:47;19086:131;19212:4;19086:131;:::i;:::-;19078:139;;18976:248;;;:::o;19230:222::-;;19361:2;19350:9;19346:18;19338:26;;19374:71;19442:1;19431:9;19427:17;19418:6;19374:71;:::i;:::-;19328:124;;;;:::o;19458:214::-;;19585:2;19574:9;19570:18;19562:26;;19598:67;19662:1;19651:9;19647:17;19638:6;19598:67;:::i;:::-;19552:120;;;;:::o;19678:99::-;;19764:5;19758:12;19748:22;;19737:40;;;:::o;19783:169::-;;19901:6;19896:3;19889:19;19941:4;19936:3;19932:14;19917:29;;19879:73;;;;:::o;19958:305::-;;20017:20;20035:1;20017:20;:::i;:::-;20012:25;;20051:20;20069:1;20051:20;:::i;:::-;20046:25;;20205:1;20137:66;20133:74;20130:1;20127:81;20124:2;;;20211:18;;:::i;:::-;20124:2;20255:1;20252;20248:9;20241:16;;20002:261;;;;:::o;20269:185::-;;20326:20;20344:1;20326:20;:::i;:::-;20321:25;;20360:20;20378:1;20360:20;:::i;:::-;20355:25;;20399:1;20389:2;;20404:18;;:::i;:::-;20389:2;20446:1;20443;20439:9;20434:14;;20311:143;;;;:::o;20460:348::-;;20523:20;20541:1;20523:20;:::i;:::-;20518:25;;20557:20;20575:1;20557:20;:::i;:::-;20552:25;;20745:1;20677:66;20673:74;20670:1;20667:81;20662:1;20655:9;20648:17;20644:105;20641:2;;;20752:18;;:::i;:::-;20641:2;20800:1;20797;20793:9;20782:20;;20508:300;;;;:::o;20814:191::-;;20874:20;20892:1;20874:20;:::i;:::-;20869:25;;20908:20;20926:1;20908:20;:::i;:::-;20903:25;;20947:1;20944;20941:8;20938:2;;;20952:18;;:::i;:::-;20938:2;20997:1;20994;20990:9;20982:17;;20859:146;;;;:::o;21011:96::-;;21077:24;21095:5;21077:24;:::i;:::-;21066:35;;21056:51;;;:::o;21113:90::-;;21190:5;21183:13;21176:21;21165:32;;21155:48;;;:::o;21209:89::-;;21285:6;21278:5;21274:18;21263:29;;21253:45;;;:::o;21304:126::-;;21381:42;21374:5;21370:54;21359:65;;21349:81;;;:::o;21436:77::-;;21502:5;21491:16;;21481:32;;;:::o;21519:86::-;;21594:4;21587:5;21583:16;21572:27;;21562:43;;;:::o;21611:180::-;;21721:64;21779:5;21721:64;:::i;:::-;21708:77;;21698:93;;;:::o;21797:140::-;;21907:24;21925:5;21907:24;:::i;:::-;21894:37;;21884:53;;;:::o;21943:121::-;;22034:24;22052:5;22034:24;:::i;:::-;22021:37;;22011:53;;;:::o;22070:307::-;22138:1;22148:113;22162:6;22159:1;22156:13;22148:113;;;22247:1;22242:3;22238:11;22232:18;22228:1;22223:3;22219:11;22212:39;22184:2;22181:1;22177:10;22172:15;;22148:113;;;22279:6;22276:1;22273:13;22270:2;;;22359:1;22350:6;22345:3;22341:16;22334:27;22270:2;22119:258;;;;:::o;22383:320::-;;22464:1;22458:4;22454:12;22444:22;;22511:1;22505:4;22501:12;22532:18;22522:2;;22588:4;22580:6;22576:17;22566:27;;22522:2;22650;22642:6;22639:14;22619:18;22616:38;22613:2;;;22669:18;;:::i;:::-;22613:2;22434:269;;;;:::o;22709:167::-;;22769:22;22785:5;22769:22;:::i;:::-;22760:31;;22813:4;22806:5;22803:15;22800:2;;;22821:18;;:::i;:::-;22800:2;22868:1;22861:5;22857:13;22850:20;;22750:126;;;:::o;22882:180::-;22930:77;22927:1;22920:88;23027:4;23024:1;23017:15;23051:4;23048:1;23041:15;23068:180;23116:77;23113:1;23106:88;23213:4;23210:1;23203:15;23237:4;23234:1;23227:15;23254:180;23302:77;23299:1;23292:88;23399:4;23396:1;23389:15;23423:4;23420:1;23413:15;23440:102;;23532:2;23528:7;23523:2;23516:5;23512:14;23508:28;23498:38;;23488:54;;;:::o;23548:122::-;23621:24;23639:5;23621:24;:::i;:::-;23614:5;23611:35;23601:2;;23660:1;23657;23650:12;23601:2;23591:79;:::o;23676:116::-;23746:21;23761:5;23746:21;:::i;:::-;23739:5;23736:32;23726:2;;23782:1;23779;23772:12;23726:2;23716:76;:::o;23798:120::-;23870:23;23887:5;23870:23;:::i;:::-;23863:5;23860:34;23850:2;;23908:1;23905;23898:12;23850:2;23840:78;:::o;23924:122::-;23997:24;24015:5;23997:24;:::i;:::-;23990:5;23987:35;23977:2;;24036:1;24033;24026:12;23977:2;23967:79;:::o

Swarm Source

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