ETH Price: $3,160.17 (+0.65%)
Gas: 2 Gwei

Token

Samcoin.ai (SAM)
 

Overview

Max Total Supply

69,420,000,000,000 SAM

Holders

76

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000001600474484 SAM

Value
$0.00
0x0b2ee0131f16ff30770a26e3f0fd04ce815ce7aa
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-18
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.0;

/**
 *  この夢の世界で、さらに漂い、また夢を、そして夢を。 夢について夢を見てください。
 */

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

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

/**
 * @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 {
    // Basic units
    uint256 public constant TOTAL_SUPPLY = 69_420_000_000_000 * (10**18);
    uint256 private constant PERCENT_DENOMENATOR = 1000;

    uint256 public maxBuy = (PERCENT_DENOMENATOR * 2) / 100; // 2%
    uint256 public maxSell = (PERCENT_DENOMENATOR * 2) / 100; // 2%

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

    constructor() ERC20("Samcoin.ai", "SAM") {
        _mint(msg.sender, 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 _isOwner = sender == owner() || recipient == owner();
        bool _isContract = sender == address(this) ||
            recipient == address(this);
        bool _isBuy = sender == uniswapV2Pair &&
            recipient != address(uniswapV2Router);
        bool _isSell = recipient == uniswapV2Pair;
        bool _isSwap = _isBuy || _isSell;

        if (_isSwap && !_isContract && !_isOwner) {
            require(
                _isOwner ||
                    amount <=
                    ((totalSupply() / PERCENT_DENOMENATOR) *
                        (_isSell ? maxSell : maxBuy)),
                "ERC20: exceed max transaction"
            );
        }

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

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":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSell","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":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

6080604052606460026103e862000017919062000826565b620000239190620007ee565b600655606460026103e862000039919062000826565b620000459190620007ee565b6007553480156200005557600080fd5b506040518060400160405280600a81526020017f53616d636f696e2e6169000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f53414d00000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000da929190620005bd565b508060049080519060200190620000f3929190620005bd565b505050620001166200010a6200036c60201b60201c565b6200037460201b60201c565b62000136336d036c341e1f992f96840fe00000006200043a60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200019657600080fd5b505afa158015620001ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d1919062000684565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023457600080fd5b505afa15801562000249573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026f919062000684565b6040518363ffffffff1660e01b81526004016200028e92919062000714565b602060405180830381600087803b158015620002a957600080fd5b505af1158015620002be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e4919062000684565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620009a2565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004a49062000741565b60405180910390fd5b620004c160008383620005b360201b60201c565b8060026000828254620004d5919062000791565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200052c919062000791565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000593919062000763565b60405180910390a3620005af60008383620005b860201b60201c565b5050565b505050565b505050565b828054620005cb90620008c5565b90600052602060002090601f016020900481019282620005ef57600085556200063b565b82601f106200060a57805160ff19168380011785556200063b565b828001600101855582156200063b579182015b828111156200063a5782518255916020019190600101906200061d565b5b5090506200064a91906200064e565b5090565b5b80821115620006695760008160009055506001016200064f565b5090565b6000815190506200067e8162000988565b92915050565b6000602082840312156200069757600080fd5b6000620006a7848285016200066d565b91505092915050565b620006bb8162000887565b82525050565b6000620006d0601f8362000780565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b6200070e81620008bb565b82525050565b60006040820190506200072b6000830185620006b0565b6200073a6020830184620006b0565b9392505050565b600060208201905081810360008301526200075c81620006c1565b9050919050565b60006020820190506200077a600083018462000703565b92915050565b600082825260208201905092915050565b60006200079e82620008bb565b9150620007ab83620008bb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620007e357620007e2620008fb565b5b828201905092915050565b6000620007fb82620008bb565b91506200080883620008bb565b9250826200081b576200081a6200092a565b5b828204905092915050565b60006200083382620008bb565b91506200084083620008bb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200087c576200087b620008fb565b5b828202905092915050565b600062000894826200089b565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680620008de57607f821691505b60208210811415620008f557620008f462000959565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620009938162000887565b81146200099f57600080fd5b50565b611b3e80620009b26000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806370db69d6116100ad578063a457c2d711610071578063a457c2d7146102fe578063a9059cbb1461032e578063b8eb35461461035e578063dd62ed3e1461037c578063f2fde38b146103ac57610121565b806370db69d61461027c578063715018a61461029a5780638da5cb5b146102a4578063902d55a5146102c257806395d89b41146102e057610121565b806323b872dd116100f457806323b872dd146101b0578063313ce567146101e057806339509351146101fe57806349bd5a5e1461022e57806370a082311461024c57610121565b806306fdde0314610126578063095ea7b3146101445780631694505e1461017457806318160ddd14610192575b600080fd5b61012e6103c8565b60405161013b91906116c9565b60405180910390f35b61015e6004803603810190610159919061122e565b61045a565b60405161016b9190611693565b60405180910390f35b61017c61047d565b60405161018991906116ae565b60405180910390f35b61019a6104a3565b6040516101a7919061182b565b60405180910390f35b6101ca60048036038101906101c591906111df565b6104ad565b6040516101d79190611693565b60405180910390f35b6101e86104dc565b6040516101f59190611846565b60405180910390f35b6102186004803603810190610213919061122e565b6104e5565b6040516102259190611693565b60405180910390f35b61023661051c565b6040516102439190611678565b60405180910390f35b6102666004803603810190610261919061117a565b610542565b604051610273919061182b565b60405180910390f35b61028461058a565b604051610291919061182b565b60405180910390f35b6102a2610590565b005b6102ac610618565b6040516102b99190611678565b60405180910390f35b6102ca610642565b6040516102d7919061182b565b60405180910390f35b6102e8610654565b6040516102f591906116c9565b60405180910390f35b6103186004803603810190610313919061122e565b6106e6565b6040516103259190611693565b60405180910390f35b6103486004803603810190610343919061122e565b61075d565b6040516103559190611693565b60405180910390f35b610366610780565b604051610373919061182b565b60405180910390f35b610396600480360381019061039191906111a3565b610786565b6040516103a3919061182b565b60405180910390f35b6103c660048036038101906103c1919061117a565b61080d565b005b6060600380546103d790611a0a565b80601f016020809104026020016040519081016040528092919081815260200182805461040390611a0a565b80156104505780601f1061042557610100808354040283529160200191610450565b820191906000526020600020905b81548152906001019060200180831161043357829003601f168201915b5050505050905090565b600080610465610905565b905061047281858561090d565b600191505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000806104b8610905565b90506104c5858285610ad8565b6104d0858585610b64565b60019150509392505050565b60006012905090565b6000806104f0610905565b90506105118185856105028589610786565b61050c919061187d565b61090d565b600191505092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60065481565b610598610905565b73ffffffffffffffffffffffffffffffffffffffff166105b6610618565b73ffffffffffffffffffffffffffffffffffffffff161461060c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610603906117ab565b60405180910390fd5b6106166000610dff565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6d036c341e1f992f96840fe000000081565b60606004805461066390611a0a565b80601f016020809104026020016040519081016040528092919081815260200182805461068f90611a0a565b80156106dc5780601f106106b1576101008083540402835291602001916106dc565b820191906000526020600020905b8154815290600101906020018083116106bf57829003601f168201915b5050505050905090565b6000806106f1610905565b905060006106ff8286610786565b905083811015610744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073b9061180b565b60405180910390fd5b610751828686840361090d565b60019250505092915050565b600080610768610905565b9050610775818585610b64565b600191505092915050565b60075481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610815610905565b73ffffffffffffffffffffffffffffffffffffffff16610833610618565b73ffffffffffffffffffffffffffffffffffffffff1614610889576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610880906117ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156108f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f09061170b565b60405180910390fd5b61090281610dff565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561097d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610974906117eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e49061172b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610acb919061182b565b60405180910390a3505050565b6000610ae48484610786565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b5e5781811015610b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b479061174b565b60405180910390fd5b610b5d848484840361090d565b5b50505050565b6000610b6e610618565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610bd95750610baa610618565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b905060003073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c4257503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b90506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015610cf15750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b90506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905060008280610d535750815b9050808015610d60575083155b8015610d6a575084155b15610dea578480610daa575081610d8357600654610d87565b6007545b6103e8610d926104a3565b610d9c91906118d3565b610da69190611904565b8611155b610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de09061178b565b60405180910390fd5b5b610df5888888610ec5565b5050505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2c906117cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9c906116eb565b60405180910390fd5b610fb0838383611146565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d9061176b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110c9919061187d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161112d919061182b565b60405180910390a361114084848461114b565b50505050565b505050565b505050565b60008135905061115f81611ada565b92915050565b60008135905061117481611af1565b92915050565b60006020828403121561118c57600080fd5b600061119a84828501611150565b91505092915050565b600080604083850312156111b657600080fd5b60006111c485828601611150565b92505060206111d585828601611150565b9150509250929050565b6000806000606084860312156111f457600080fd5b600061120286828701611150565b935050602061121386828701611150565b925050604061122486828701611165565b9150509250925092565b6000806040838503121561124157600080fd5b600061124f85828601611150565b925050602061126085828601611165565b9150509250929050565b6112738161195e565b82525050565b61128281611970565b82525050565b611291816119b3565b82525050565b60006112a282611861565b6112ac818561186c565b93506112bc8185602086016119d7565b6112c581611ac9565b840191505092915050565b60006112dd60238361186c565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061134360268361186c565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006113a960228361186c565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061140f601d8361186c565b91507f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006000830152602082019050919050565b600061144f60268361186c565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006114b5601d8361186c565b91507f45524332303a20657863656564206d6178207472616e73616374696f6e0000006000830152602082019050919050565b60006114f560208361186c565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061153560258361186c565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061159b60248361186c565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061160160258361186c565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6116638161199c565b82525050565b611672816119a6565b82525050565b600060208201905061168d600083018461126a565b92915050565b60006020820190506116a86000830184611279565b92915050565b60006020820190506116c36000830184611288565b92915050565b600060208201905081810360008301526116e38184611297565b905092915050565b60006020820190508181036000830152611704816112d0565b9050919050565b6000602082019050818103600083015261172481611336565b9050919050565b600060208201905081810360008301526117448161139c565b9050919050565b6000602082019050818103600083015261176481611402565b9050919050565b6000602082019050818103600083015261178481611442565b9050919050565b600060208201905081810360008301526117a4816114a8565b9050919050565b600060208201905081810360008301526117c4816114e8565b9050919050565b600060208201905081810360008301526117e481611528565b9050919050565b600060208201905081810360008301526118048161158e565b9050919050565b60006020820190508181036000830152611824816115f4565b9050919050565b6000602082019050611840600083018461165a565b92915050565b600060208201905061185b6000830184611669565b92915050565b600081519050919050565b600082825260208201905092915050565b60006118888261199c565b91506118938361199c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156118c8576118c7611a3c565b5b828201905092915050565b60006118de8261199c565b91506118e98361199c565b9250826118f9576118f8611a6b565b5b828204905092915050565b600061190f8261199c565b915061191a8361199c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561195357611952611a3c565b5b828202905092915050565b60006119698261197c565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006119be826119c5565b9050919050565b60006119d08261197c565b9050919050565b60005b838110156119f55780820151818401526020810190506119da565b83811115611a04576000848401525b50505050565b60006002820490506001821680611a2257607f821691505b60208210811415611a3657611a35611a9a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b611ae38161195e565b8114611aee57600080fd5b50565b611afa8161199c565b8114611b0557600080fd5b5056fea2646970667358221220d1bb89e70b805df6c872900122df3bbb2ac5bed81af268cebf629c58dd3caf0e64736f6c63430008000033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101215760003560e01c806370db69d6116100ad578063a457c2d711610071578063a457c2d7146102fe578063a9059cbb1461032e578063b8eb35461461035e578063dd62ed3e1461037c578063f2fde38b146103ac57610121565b806370db69d61461027c578063715018a61461029a5780638da5cb5b146102a4578063902d55a5146102c257806395d89b41146102e057610121565b806323b872dd116100f457806323b872dd146101b0578063313ce567146101e057806339509351146101fe57806349bd5a5e1461022e57806370a082311461024c57610121565b806306fdde0314610126578063095ea7b3146101445780631694505e1461017457806318160ddd14610192575b600080fd5b61012e6103c8565b60405161013b91906116c9565b60405180910390f35b61015e6004803603810190610159919061122e565b61045a565b60405161016b9190611693565b60405180910390f35b61017c61047d565b60405161018991906116ae565b60405180910390f35b61019a6104a3565b6040516101a7919061182b565b60405180910390f35b6101ca60048036038101906101c591906111df565b6104ad565b6040516101d79190611693565b60405180910390f35b6101e86104dc565b6040516101f59190611846565b60405180910390f35b6102186004803603810190610213919061122e565b6104e5565b6040516102259190611693565b60405180910390f35b61023661051c565b6040516102439190611678565b60405180910390f35b6102666004803603810190610261919061117a565b610542565b604051610273919061182b565b60405180910390f35b61028461058a565b604051610291919061182b565b60405180910390f35b6102a2610590565b005b6102ac610618565b6040516102b99190611678565b60405180910390f35b6102ca610642565b6040516102d7919061182b565b60405180910390f35b6102e8610654565b6040516102f591906116c9565b60405180910390f35b6103186004803603810190610313919061122e565b6106e6565b6040516103259190611693565b60405180910390f35b6103486004803603810190610343919061122e565b61075d565b6040516103559190611693565b60405180910390f35b610366610780565b604051610373919061182b565b60405180910390f35b610396600480360381019061039191906111a3565b610786565b6040516103a3919061182b565b60405180910390f35b6103c660048036038101906103c1919061117a565b61080d565b005b6060600380546103d790611a0a565b80601f016020809104026020016040519081016040528092919081815260200182805461040390611a0a565b80156104505780601f1061042557610100808354040283529160200191610450565b820191906000526020600020905b81548152906001019060200180831161043357829003601f168201915b5050505050905090565b600080610465610905565b905061047281858561090d565b600191505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000806104b8610905565b90506104c5858285610ad8565b6104d0858585610b64565b60019150509392505050565b60006012905090565b6000806104f0610905565b90506105118185856105028589610786565b61050c919061187d565b61090d565b600191505092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60065481565b610598610905565b73ffffffffffffffffffffffffffffffffffffffff166105b6610618565b73ffffffffffffffffffffffffffffffffffffffff161461060c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610603906117ab565b60405180910390fd5b6106166000610dff565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6d036c341e1f992f96840fe000000081565b60606004805461066390611a0a565b80601f016020809104026020016040519081016040528092919081815260200182805461068f90611a0a565b80156106dc5780601f106106b1576101008083540402835291602001916106dc565b820191906000526020600020905b8154815290600101906020018083116106bf57829003601f168201915b5050505050905090565b6000806106f1610905565b905060006106ff8286610786565b905083811015610744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073b9061180b565b60405180910390fd5b610751828686840361090d565b60019250505092915050565b600080610768610905565b9050610775818585610b64565b600191505092915050565b60075481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610815610905565b73ffffffffffffffffffffffffffffffffffffffff16610833610618565b73ffffffffffffffffffffffffffffffffffffffff1614610889576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610880906117ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156108f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f09061170b565b60405180910390fd5b61090281610dff565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561097d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610974906117eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e49061172b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610acb919061182b565b60405180910390a3505050565b6000610ae48484610786565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b5e5781811015610b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b479061174b565b60405180910390fd5b610b5d848484840361090d565b5b50505050565b6000610b6e610618565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610bd95750610baa610618565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b905060003073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c4257503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b90506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015610cf15750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b90506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905060008280610d535750815b9050808015610d60575083155b8015610d6a575084155b15610dea578480610daa575081610d8357600654610d87565b6007545b6103e8610d926104a3565b610d9c91906118d3565b610da69190611904565b8611155b610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de09061178b565b60405180910390fd5b5b610df5888888610ec5565b5050505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2c906117cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9c906116eb565b60405180910390fd5b610fb0838383611146565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d9061176b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110c9919061187d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161112d919061182b565b60405180910390a361114084848461114b565b50505050565b505050565b505050565b60008135905061115f81611ada565b92915050565b60008135905061117481611af1565b92915050565b60006020828403121561118c57600080fd5b600061119a84828501611150565b91505092915050565b600080604083850312156111b657600080fd5b60006111c485828601611150565b92505060206111d585828601611150565b9150509250929050565b6000806000606084860312156111f457600080fd5b600061120286828701611150565b935050602061121386828701611150565b925050604061122486828701611165565b9150509250925092565b6000806040838503121561124157600080fd5b600061124f85828601611150565b925050602061126085828601611165565b9150509250929050565b6112738161195e565b82525050565b61128281611970565b82525050565b611291816119b3565b82525050565b60006112a282611861565b6112ac818561186c565b93506112bc8185602086016119d7565b6112c581611ac9565b840191505092915050565b60006112dd60238361186c565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061134360268361186c565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006113a960228361186c565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061140f601d8361186c565b91507f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006000830152602082019050919050565b600061144f60268361186c565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006114b5601d8361186c565b91507f45524332303a20657863656564206d6178207472616e73616374696f6e0000006000830152602082019050919050565b60006114f560208361186c565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061153560258361186c565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061159b60248361186c565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061160160258361186c565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6116638161199c565b82525050565b611672816119a6565b82525050565b600060208201905061168d600083018461126a565b92915050565b60006020820190506116a86000830184611279565b92915050565b60006020820190506116c36000830184611288565b92915050565b600060208201905081810360008301526116e38184611297565b905092915050565b60006020820190508181036000830152611704816112d0565b9050919050565b6000602082019050818103600083015261172481611336565b9050919050565b600060208201905081810360008301526117448161139c565b9050919050565b6000602082019050818103600083015261176481611402565b9050919050565b6000602082019050818103600083015261178481611442565b9050919050565b600060208201905081810360008301526117a4816114a8565b9050919050565b600060208201905081810360008301526117c4816114e8565b9050919050565b600060208201905081810360008301526117e481611528565b9050919050565b600060208201905081810360008301526118048161158e565b9050919050565b60006020820190508181036000830152611824816115f4565b9050919050565b6000602082019050611840600083018461165a565b92915050565b600060208201905061185b6000830184611669565b92915050565b600081519050919050565b600082825260208201905092915050565b60006118888261199c565b91506118938361199c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156118c8576118c7611a3c565b5b828201905092915050565b60006118de8261199c565b91506118e98361199c565b9250826118f9576118f8611a6b565b5b828204905092915050565b600061190f8261199c565b915061191a8361199c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561195357611952611a3c565b5b828202905092915050565b60006119698261197c565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006119be826119c5565b9050919050565b60006119d08261197c565b9050919050565b60005b838110156119f55780820151818401526020810190506119da565b83811115611a04576000848401525b50505050565b60006002820490506001821680611a2257607f821691505b60208210811415611a3657611a35611a9a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b611ae38161195e565b8114611aee57600080fd5b50565b611afa8161199c565b8114611b0557600080fd5b5056fea2646970667358221220d1bb89e70b805df6c872900122df3bbb2ac5bed81af268cebf629c58dd3caf0e64736f6c63430008000033

Deployed Bytecode Sourcemap

29215:1783:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6259:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8751:242;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29573:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7379:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9573:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7221:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10277:270;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29621:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7550:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29408:55;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19018:103;;;:::i;:::-;;18367:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29273:68;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6478:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11050:505;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7933:234;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29476:56;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8230:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19276:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6259:100;6313:13;6346:5;6339:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6259:100;:::o;8751:242::-;8870:4;8892:13;8908:12;:10;:12::i;:::-;8892:28;;8931:32;8940:5;8947:7;8956:6;8931:8;:32::i;:::-;8981:4;8974:11;;;8751:242;;;;:::o;29573:41::-;;;;;;;;;;;;;:::o;7379:108::-;7440:7;7467:12;;7460:19;;7379:108;:::o;9573:295::-;9704:4;9721:15;9739:12;:10;:12::i;:::-;9721:30;;9762:38;9778:4;9784:7;9793:6;9762:15;:38::i;:::-;9811:27;9821:4;9827:2;9831:6;9811:9;:27::i;:::-;9856:4;9849:11;;;9573:295;;;;;:::o;7221:93::-;7279:5;7304:2;7297:9;;7221:93;:::o;10277:270::-;10392:4;10414:13;10430:12;:10;:12::i;:::-;10414:28;;10453:64;10462:5;10469:7;10506:10;10478:25;10488:5;10495:7;10478:9;:25::i;:::-;:38;;;;:::i;:::-;10453:8;:64::i;:::-;10535:4;10528:11;;;10277:270;;;;:::o;29621:28::-;;;;;;;;;;;;;:::o;7550:177::-;7669:7;7701:9;:18;7711:7;7701:18;;;;;;;;;;;;;;;;7694:25;;7550:177;;;:::o;29408:55::-;;;;:::o;19018:103::-;18598:12;:10;:12::i;:::-;18587:23;;:7;:5;:7::i;:::-;:23;;;18579:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19083:30:::1;19110:1;19083:18;:30::i;:::-;19018:103::o:0;18367:87::-;18413:7;18440:6;;;;;;;;;;;18433:13;;18367:87;:::o;29273:68::-;29312:29;29273:68;:::o;6478:104::-;6534:13;6567:7;6560:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6478:104;:::o;11050:505::-;11170:4;11192:13;11208:12;:10;:12::i;:::-;11192:28;;11231:24;11258:25;11268:5;11275:7;11258:9;:25::i;:::-;11231:52;;11336:15;11316:16;:35;;11294:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;11452:60;11461:5;11468:7;11496:15;11477:16;:34;11452:8;:60::i;:::-;11543:4;11536:11;;;;11050:505;;;;:::o;7933:234::-;8048:4;8070:13;8086:12;:10;:12::i;:::-;8070:28;;8109;8119:5;8126:2;8130:6;8109:9;:28::i;:::-;8155:4;8148:11;;;7933:234;;;;:::o;29476:56::-;;;;:::o;8230:201::-;8364:7;8396:11;:18;8408:5;8396:18;;;;;;;;;;;;;;;:27;8415:7;8396:27;;;;;;;;;;;;;;;;8389:34;;8230:201;;;;:::o;19276:238::-;18598:12;:10;:12::i;:::-;18587:23;;:7;:5;:7::i;:::-;:23;;;18579:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19399:1:::1;19379:22;;:8;:22;;;;19357:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;19478:28;19497:8;19478:18;:28::i;:::-;19276:238:::0;:::o;745:98::-;798:7;825:10;818:17;;745:98;:::o;14790:380::-;14943:1;14926:19;;:5;:19;;;;14918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15024:1;15005:21;;:7;:21;;;;14997:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15108:6;15078:11;:18;15090:5;15078:18;;;;;;;;;;;;;;;:27;15097:7;15078:27;;;;;;;;;;;;;;;:36;;;;15146:7;15130:32;;15139:5;15130:32;;;15155:6;15130:32;;;;;;:::i;:::-;;;;;;;;14790:380;;;:::o;15461:502::-;15596:24;15623:25;15633:5;15640:7;15623:9;:25::i;:::-;15596:52;;15683:17;15663:16;:37;15659:297;;15763:6;15743:16;:26;;15717:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;15878:51;15887:5;15894:7;15922:6;15903:16;:25;15878:8;:51::i;:::-;15659:297;15461:502;;;;:::o;30078:917::-;30219:13;30245:7;:5;:7::i;:::-;30235:17;;:6;:17;;;:41;;;;30269:7;:5;:7::i;:::-;30256:20;;:9;:20;;;30235:41;30219:57;;30287:16;30324:4;30306:23;;:6;:23;;;:66;;;;30367:4;30346:26;;:9;:26;;;30306:66;30287:85;;30383:11;30407:13;;;;;;;;;;;30397:23;;:6;:23;;;:77;;;;;30458:15;;;;;;;;;;;30437:37;;:9;:37;;;;30397:77;30383:91;;30485:12;30513:13;;;;;;;;;;;30500:26;;:9;:26;;;30485:41;;30537:12;30552:6;:17;;;;30562:7;30552:17;30537:32;;30586:7;:23;;;;;30598:11;30597:12;30586:23;:36;;;;;30614:8;30613:9;30586:36;30582:319;;;30665:8;:159;;;;30796:7;:26;;30816:6;;30796:26;;;30806:7;;30796:26;29395:4;30731:13;:11;:13::i;:::-;:35;;;;:::i;:::-;30730:93;;;;:::i;:::-;30698:6;:126;;30665:159;30639:250;;;;;;;;;;;;:::i;:::-;;;;;;;;;30582:319;30943:44;30959:6;30967:9;30979:6;30943:15;:44::i;:::-;30078:917;;;;;;;;:::o;19674:191::-;19748:16;19767:6;;;;;;;;;;;19748:25;;19793:8;19784:6;;:17;;;;;;;;;;;;;;;;;;19848:8;19817:40;;19838:8;19817:40;;;;;;;;;;;;19674:191;;:::o;12034:708::-;12181:1;12165:18;;:4;:18;;;;12157:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12258:1;12244:16;;:2;:16;;;;12236:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12313:38;12334:4;12340:2;12344:6;12313:20;:38::i;:::-;12364:19;12386:9;:15;12396:4;12386:15;;;;;;;;;;;;;;;;12364:37;;12449:6;12434:11;:21;;12412:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;12589:6;12575:11;:20;12557:9;:15;12567:4;12557:15;;;;;;;;;;;;;;;:38;;;;12634:6;12617:9;:13;12627:2;12617:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;12673:2;12658:26;;12667:4;12658:26;;;12677:6;12658:26;;;;;;:::i;:::-;;;;;;;;12697:37;12717:4;12723:2;12727:6;12697:19;:37::i;:::-;12034:708;;;;:::o;16563:125::-;;;;:::o;17292:124::-;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:262::-;;405:2;393:9;384:7;380:23;376:32;373:2;;;421:1;418;411:12;373:2;464:1;489:53;534:7;525:6;514:9;510:22;489:53;:::i;:::-;479:63;;435:117;363:196;;;;:::o;565:407::-;;;690:2;678:9;669:7;665:23;661:32;658:2;;;706:1;703;696:12;658:2;749:1;774:53;819:7;810:6;799:9;795:22;774:53;:::i;:::-;764:63;;720:117;876:2;902:53;947:7;938:6;927:9;923:22;902:53;:::i;:::-;892:63;;847:118;648:324;;;;;:::o;978:552::-;;;;1120:2;1108:9;1099:7;1095:23;1091:32;1088:2;;;1136:1;1133;1126:12;1088:2;1179:1;1204:53;1249:7;1240:6;1229:9;1225:22;1204:53;:::i;:::-;1194:63;;1150:117;1306:2;1332:53;1377:7;1368:6;1357:9;1353:22;1332:53;:::i;:::-;1322:63;;1277:118;1434:2;1460:53;1505:7;1496:6;1485:9;1481:22;1460:53;:::i;:::-;1450:63;;1405:118;1078:452;;;;;:::o;1536:407::-;;;1661:2;1649:9;1640:7;1636:23;1632:32;1629:2;;;1677:1;1674;1667:12;1629:2;1720:1;1745:53;1790:7;1781:6;1770:9;1766:22;1745:53;:::i;:::-;1735:63;;1691:117;1847:2;1873:53;1918:7;1909:6;1898:9;1894:22;1873:53;:::i;:::-;1863:63;;1818:118;1619:324;;;;;:::o;1949:118::-;2036:24;2054:5;2036:24;:::i;:::-;2031:3;2024:37;2014:53;;:::o;2073:109::-;2154:21;2169:5;2154:21;:::i;:::-;2149:3;2142:34;2132:50;;:::o;2188:185::-;2302:64;2360:5;2302:64;:::i;:::-;2297:3;2290:77;2280:93;;:::o;2379:364::-;;2495:39;2528:5;2495:39;:::i;:::-;2550:71;2614:6;2609:3;2550:71;:::i;:::-;2543:78;;2630:52;2675:6;2670:3;2663:4;2656:5;2652:16;2630:52;:::i;:::-;2707:29;2729:6;2707:29;:::i;:::-;2702:3;2698:39;2691:46;;2471:272;;;;;:::o;2749:367::-;;2912:67;2976:2;2971:3;2912:67;:::i;:::-;2905:74;;3009:34;3005:1;3000:3;2996:11;2989:55;3075:5;3070:2;3065:3;3061:12;3054:27;3107:2;3102:3;3098:12;3091:19;;2895:221;;;:::o;3122:370::-;;3285:67;3349:2;3344:3;3285:67;:::i;:::-;3278:74;;3382:34;3378:1;3373:3;3369:11;3362:55;3448:8;3443:2;3438:3;3434:12;3427:30;3483:2;3478:3;3474:12;3467:19;;3268:224;;;:::o;3498:366::-;;3661:67;3725:2;3720:3;3661:67;:::i;:::-;3654:74;;3758:34;3754:1;3749:3;3745:11;3738:55;3824:4;3819:2;3814:3;3810:12;3803:26;3855:2;3850:3;3846:12;3839:19;;3644:220;;;:::o;3870:327::-;;4033:67;4097:2;4092:3;4033:67;:::i;:::-;4026:74;;4130:31;4126:1;4121:3;4117:11;4110:52;4188:2;4183:3;4179:12;4172:19;;4016:181;;;:::o;4203:370::-;;4366:67;4430:2;4425:3;4366:67;:::i;:::-;4359:74;;4463:34;4459:1;4454:3;4450:11;4443:55;4529:8;4524:2;4519:3;4515:12;4508:30;4564:2;4559:3;4555:12;4548:19;;4349:224;;;:::o;4579:327::-;;4742:67;4806:2;4801:3;4742:67;:::i;:::-;4735:74;;4839:31;4835:1;4830:3;4826:11;4819:52;4897:2;4892:3;4888:12;4881:19;;4725:181;;;:::o;4912:330::-;;5075:67;5139:2;5134:3;5075:67;:::i;:::-;5068:74;;5172:34;5168:1;5163:3;5159:11;5152:55;5233:2;5228:3;5224:12;5217:19;;5058:184;;;:::o;5248:369::-;;5411:67;5475:2;5470:3;5411:67;:::i;:::-;5404:74;;5508:34;5504:1;5499:3;5495:11;5488:55;5574:7;5569:2;5564:3;5560:12;5553:29;5608:2;5603:3;5599:12;5592:19;;5394:223;;;:::o;5623:368::-;;5786:67;5850:2;5845:3;5786:67;:::i;:::-;5779:74;;5883:34;5879:1;5874:3;5870:11;5863:55;5949:6;5944:2;5939:3;5935:12;5928:28;5982:2;5977:3;5973:12;5966:19;;5769:222;;;:::o;5997:369::-;;6160:67;6224:2;6219:3;6160:67;:::i;:::-;6153:74;;6257:34;6253:1;6248:3;6244:11;6237:55;6323:7;6318:2;6313:3;6309:12;6302:29;6357:2;6352:3;6348:12;6341:19;;6143:223;;;:::o;6372:118::-;6459:24;6477:5;6459:24;:::i;:::-;6454:3;6447:37;6437:53;;:::o;6496:112::-;6579:22;6595:5;6579:22;:::i;:::-;6574:3;6567:35;6557:51;;:::o;6614:222::-;;6745:2;6734:9;6730:18;6722:26;;6758:71;6826:1;6815:9;6811:17;6802:6;6758:71;:::i;:::-;6712:124;;;;:::o;6842:210::-;;6967:2;6956:9;6952:18;6944:26;;6980:65;7042:1;7031:9;7027:17;7018:6;6980:65;:::i;:::-;6934:118;;;;:::o;7058:276::-;;7216:2;7205:9;7201:18;7193:26;;7229:98;7324:1;7313:9;7309:17;7300:6;7229:98;:::i;:::-;7183:151;;;;:::o;7340:313::-;;7491:2;7480:9;7476:18;7468:26;;7540:9;7534:4;7530:20;7526:1;7515:9;7511:17;7504:47;7568:78;7641:4;7632:6;7568:78;:::i;:::-;7560:86;;7458:195;;;;:::o;7659:419::-;;7863:2;7852:9;7848:18;7840:26;;7912:9;7906:4;7902:20;7898:1;7887:9;7883:17;7876:47;7940:131;8066:4;7940:131;:::i;:::-;7932:139;;7830:248;;;:::o;8084:419::-;;8288:2;8277:9;8273:18;8265:26;;8337:9;8331:4;8327:20;8323:1;8312:9;8308:17;8301:47;8365:131;8491:4;8365:131;:::i;:::-;8357:139;;8255:248;;;:::o;8509:419::-;;8713:2;8702:9;8698:18;8690:26;;8762:9;8756:4;8752:20;8748:1;8737:9;8733:17;8726:47;8790:131;8916:4;8790:131;:::i;:::-;8782:139;;8680:248;;;:::o;8934:419::-;;9138:2;9127:9;9123:18;9115:26;;9187:9;9181:4;9177:20;9173:1;9162:9;9158:17;9151:47;9215:131;9341:4;9215:131;:::i;:::-;9207:139;;9105:248;;;:::o;9359:419::-;;9563:2;9552:9;9548:18;9540:26;;9612:9;9606:4;9602:20;9598:1;9587:9;9583:17;9576:47;9640:131;9766:4;9640:131;:::i;:::-;9632:139;;9530:248;;;:::o;9784:419::-;;9988:2;9977:9;9973:18;9965:26;;10037:9;10031:4;10027:20;10023:1;10012:9;10008:17;10001:47;10065:131;10191:4;10065:131;:::i;:::-;10057:139;;9955:248;;;:::o;10209:419::-;;10413:2;10402:9;10398:18;10390:26;;10462:9;10456:4;10452:20;10448:1;10437:9;10433:17;10426:47;10490:131;10616:4;10490:131;:::i;:::-;10482:139;;10380:248;;;:::o;10634:419::-;;10838:2;10827:9;10823:18;10815:26;;10887:9;10881:4;10877:20;10873:1;10862:9;10858:17;10851:47;10915:131;11041:4;10915:131;:::i;:::-;10907:139;;10805:248;;;:::o;11059:419::-;;11263:2;11252:9;11248:18;11240:26;;11312:9;11306:4;11302:20;11298:1;11287:9;11283:17;11276:47;11340:131;11466:4;11340:131;:::i;:::-;11332:139;;11230:248;;;:::o;11484:419::-;;11688:2;11677:9;11673:18;11665:26;;11737:9;11731:4;11727:20;11723:1;11712:9;11708:17;11701:47;11765:131;11891:4;11765:131;:::i;:::-;11757:139;;11655:248;;;:::o;11909:222::-;;12040:2;12029:9;12025:18;12017:26;;12053:71;12121:1;12110:9;12106:17;12097:6;12053:71;:::i;:::-;12007:124;;;;:::o;12137:214::-;;12264:2;12253:9;12249:18;12241:26;;12277:67;12341:1;12330:9;12326:17;12317:6;12277:67;:::i;:::-;12231:120;;;;:::o;12357:99::-;;12443:5;12437:12;12427:22;;12416:40;;;:::o;12462:169::-;;12580:6;12575:3;12568:19;12620:4;12615:3;12611:14;12596:29;;12558:73;;;;:::o;12637:305::-;;12696:20;12714:1;12696:20;:::i;:::-;12691:25;;12730:20;12748:1;12730:20;:::i;:::-;12725:25;;12884:1;12816:66;12812:74;12809:1;12806:81;12803:2;;;12890:18;;:::i;:::-;12803:2;12934:1;12931;12927:9;12920:16;;12681:261;;;;:::o;12948:185::-;;13005:20;13023:1;13005:20;:::i;:::-;13000:25;;13039:20;13057:1;13039:20;:::i;:::-;13034:25;;13078:1;13068:2;;13083:18;;:::i;:::-;13068:2;13125:1;13122;13118:9;13113:14;;12990:143;;;;:::o;13139:348::-;;13202:20;13220:1;13202:20;:::i;:::-;13197:25;;13236:20;13254:1;13236:20;:::i;:::-;13231:25;;13424:1;13356:66;13352:74;13349:1;13346:81;13341:1;13334:9;13327:17;13323:105;13320:2;;;13431:18;;:::i;:::-;13320:2;13479:1;13476;13472:9;13461:20;;13187:300;;;;:::o;13493:96::-;;13559:24;13577:5;13559:24;:::i;:::-;13548:35;;13538:51;;;:::o;13595:90::-;;13672:5;13665:13;13658:21;13647:32;;13637:48;;;:::o;13691:126::-;;13768:42;13761:5;13757:54;13746:65;;13736:81;;;:::o;13823:77::-;;13889:5;13878:16;;13868:32;;;:::o;13906:86::-;;13981:4;13974:5;13970:16;13959:27;;13949:43;;;:::o;13998:180::-;;14108:64;14166:5;14108:64;:::i;:::-;14095:77;;14085:93;;;:::o;14184:140::-;;14294:24;14312:5;14294:24;:::i;:::-;14281:37;;14271:53;;;:::o;14330:307::-;14398:1;14408:113;14422:6;14419:1;14416:13;14408:113;;;14507:1;14502:3;14498:11;14492:18;14488:1;14483:3;14479:11;14472:39;14444:2;14441:1;14437:10;14432:15;;14408:113;;;14539:6;14536:1;14533:13;14530:2;;;14619:1;14610:6;14605:3;14601:16;14594:27;14530:2;14379:258;;;;:::o;14643:320::-;;14724:1;14718:4;14714:12;14704:22;;14771:1;14765:4;14761:12;14792:18;14782:2;;14848:4;14840:6;14836:17;14826:27;;14782:2;14910;14902:6;14899:14;14879:18;14876:38;14873:2;;;14929:18;;:::i;:::-;14873:2;14694:269;;;;:::o;14969:180::-;15017:77;15014:1;15007:88;15114:4;15111:1;15104:15;15138:4;15135:1;15128:15;15155:180;15203:77;15200:1;15193:88;15300:4;15297:1;15290:15;15324:4;15321:1;15314:15;15341:180;15389:77;15386:1;15379:88;15486:4;15483:1;15476:15;15510:4;15507:1;15500:15;15527:102;;15619:2;15615:7;15610:2;15603:5;15599:14;15595:28;15585:38;;15575:54;;;:::o;15635:122::-;15708:24;15726:5;15708:24;:::i;:::-;15701:5;15698:35;15688:2;;15747:1;15744;15737:12;15688:2;15678:79;:::o;15763:122::-;15836:24;15854:5;15836:24;:::i;:::-;15829:5;15826:35;15816:2;;15875:1;15872;15865:12;15816:2;15806:79;:::o

Swarm Source

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