ETH Price: $2,050.83 (+0.10%)

Token

龙王 Lóngwáng (Longwei)
 

Overview

Max Total Supply

555,555,555,555 Longwei

Holders

53

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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

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

Contract Source Code Verified (Exact Match)

Contract Name:
Longwei

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// site: https://www.longweicoin.xyz/
// twitter: https://twitter.com/longweicoin
// telegram: https://t.me/longweiportal

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint 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 (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    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 (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

pragma solidity >=0.5.0;

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

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

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

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

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

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

pragma solidity >=0.6.2;

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

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

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

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

pragma solidity >=0.6.2;


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

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

// File: contracts/Longwei.sol

// site: https://www.longweicoin.xyz/
// twitter: https://twitter.com/longweicoin
// telegram: https://t.me/longweiportal

pragma solidity ^0.8.12;







library Address{
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

contract Longwei is Ownable, ERC20 {
    using Address for address payable;
    using SafeMath for uint256;
    
    IUniswapV2Router02 public router;
    address public pair;

    bool private swapping = false;
    bool private swapEnabled = false;
    bool public tradingEnabled = false;

    uint256 public supply = 555555555555 * 10 ** 18;
    uint256 private swapTokensAtAmount = supply * 5 / 1000;
    uint256 public maxTxAmount = supply * 10 / 1000;
    uint256 public maxWalletAmount = supply * 20 / 1000;

    uint256 public totalBuyTax = 0;
    uint256 public totalSellTax = 0;

    uint256 private countTx = 0; 
    uint256 private limitSwapFees = 0;

    address private teamWallet;
    
    mapping (address => bool) private _excludedFromFees;
    
    modifier inSwap() {
        if (!swapping) {
            swapping = true;
            _;
            swapping = false;
        }
    }
        
    constructor(address pTeamWallet, address pRouter, uint256 pBuy, uint256 pSell, uint256 pLimitSwapFees) ERC20(unicode"龙王 Lóngwáng", "Longwei") {
        _mint(msg.sender, supply);

        IUniswapV2Router02 _router = IUniswapV2Router02(pRouter);
        address _pair = IUniswapV2Factory(_router.factory())
            .createPair(address(this), _router.WETH());

        router = _router;
        pair = _pair;

        teamWallet = pTeamWallet;

        _excludedFromFees[address(this)] = true;
        _excludedFromFees[teamWallet] = true;
        _excludedFromFees[msg.sender] = true;
        _excludedFromFees[pRouter] = true;
        _excludedFromFees[address(0xdead)]; 

        totalBuyTax = pBuy;
        totalSellTax = pSell;
        limitSwapFees = pLimitSwapFees;
    }
    
    function _transfer(address sender, address recipient, uint256 amount) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");

        if(!_excludedFromFees[sender] && !_excludedFromFees[recipient] && !swapping){
            require(tradingEnabled, "Trading not active yet");
            require(amount <= maxTxAmount, "You are exceeding maxTxAmount");
            if(recipient != pair){ 
                require(balanceOf(recipient) + amount <= maxWalletAmount, "You are exceeding maxWalletAmount");
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= swapTokensAtAmount;

            if (canSwap && swapEnabled && !swapping && sender != pair && contractTokenBalance > 0) {
                if (countTx >= limitSwapFees) {
                    swapForFees(contractTokenBalance);
                }
                countTx++;
            } 

        }

        uint256 fee;
        if (swapping || _excludedFromFees[sender] || _excludedFromFees[recipient]) {
            fee = 0;
        } else{
            if(recipient == pair) {
                fee = amount * totalSellTax / 100;
            }
            else {
                fee = amount * totalBuyTax / 100;
            }
        }

        super._transfer(sender, recipient, amount - fee);
        if(fee > 0) {
            super._transfer(sender, address(this) ,fee);
        }

    }

    function swapForFees(uint256 amount) private inSwap {
        swapTokensForETH(amount);
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance > 0) {
            payable(teamWallet).sendValue(address(this).balance);
        }
        countTx = 0;
    }

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(router), tokenAmount);

        router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            teamWallet,
            block.timestamp
        );
    }

    function setswapTokensAtAmountEnable(bool enable) external onlyOwner {
        swapEnabled = enable;
    }

    function startTrading() external onlyOwner {
        require(!tradingEnabled, "Trading already active");
        tradingEnabled = true;
        swapEnabled = true;
    }

    function setBuySellTaxes(uint256 _buy, uint256 _sell, uint256 cntSwapFees) external onlyOwner{
        totalBuyTax = _buy;
        totalSellTax = _sell;
        limitSwapFees = cntSwapFees;
    }

    function updateExcludedFromFees(address _address, bool state) external onlyOwner {
        _excludedFromFees[_address] = state;
    }
    
    function updateMaxTxMaxWalletAmount(uint256 maxTx, uint256 maxWallet) external onlyOwner{
        maxTxAmount = supply * maxTx / 1000;
        maxWalletAmount = supply * maxWallet / 1000;
    }

    function setSwapTokensAtAmount(uint256 new_amount) external onlyOwner {
        swapTokensAtAmount = supply * new_amount / 1000;
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"pTeamWallet","type":"address"},{"internalType":"address","name":"pRouter","type":"address"},{"internalType":"uint256","name":"pBuy","type":"uint256"},{"internalType":"uint256","name":"pSell","type":"uint256"},{"internalType":"uint256","name":"pLimitSwapFees","type":"uint256"}],"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":[{"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":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"cntSwapFees","type":"uint256"}],"name":"setBuySellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setswapTokensAtAmountEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTx","type":"uint256"},{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"updateMaxTxMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526007805462ffffff60a01b191690556c070318c8e574c41eac8dac000060088190556103e890620000379060056200054a565b6200004391906200056c565b6009556103e8600854600a6200005a91906200054a565b6200006691906200056c565b600a556103e860085460146200007d91906200054a565b6200008991906200056c565b600b556000600c556000600d556000600e556000600f55348015620000ad57600080fd5b5060405162001d4e38038062001d4e833981016040819052620000d091620005ac565b60405180604001604052806011815260200170e9be99e78e8b204cc3b36e6777c3a16e6760781b815250604051806040016040528060078152602001664c6f6e6777656960c81b815250620001346200012e6200037260201b60201c565b62000376565b8151620001499060049060208501906200048e565b5080516200015f9060059060208401906200048e565b5050506200017633600854620003c660201b60201c565b60008490506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e29190620005ff565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000230573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002569190620005ff565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ca9190620005ff565b600680546001600160a01b03199081166001600160a01b039586161790915560078054821692851692909217909155601080549091169783169790971787555030600090815260116020526040808220805460ff19908116600190811790925598548416835281832080548a168217905533835281832080548a1682179055969092168152908120805490961690941790945561dead909252600c55600d55600f556200067c565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216620004215760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b806003600082825462000435919062000624565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b8280546200049c906200063f565b90600052602060002090601f016020900481019282620004c057600085556200050b565b82601f10620004db57805160ff19168380011785556200050b565b828001600101855582156200050b579182015b828111156200050b578251825591602001919060010190620004ee565b50620005199291506200051d565b5090565b5b808211156200051957600081556001016200051e565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000567576200056762000534565b500290565b6000826200058a57634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160a01b0381168114620005a757600080fd5b919050565b600080600080600060a08688031215620005c557600080fd5b620005d0866200058f565b9450620005e0602087016200058f565b6040870151606088015160809098015196999198509695945092505050565b6000602082840312156200061257600080fd5b6200061d826200058f565b9392505050565b600082198211156200063a576200063a62000534565b500190565b600181811c908216806200065457607f821691505b602082108114156200067657634e487b7160e01b600052602260045260246000fd5b50919050565b6116c2806200068c6000396000f3fe6080604052600436106101bb5760003560e01c8063715018a6116100ec578063aa4bde281161008a578063e545fd6d11610064578063e545fd6d146104b5578063f2fde38b146104d5578063f887ea40146104f5578063fe2637851461051557600080fd5b8063aa4bde281461045f578063afa4f3b214610475578063dd62ed3e1461049557600080fd5b806395d89b41116100c657806395d89b41146103ea578063a457c2d7146103ff578063a8aa1b311461041f578063a9059cbb1461043f57600080fd5b8063715018a61461038d5780638c0b5e22146103a25780638da5cb5b146103b857600080fd5b806330a5f61e1161015957806346469afb1161013357806346469afb146103005780634ada218b146103165780634caefb581461033757806370a082311461035757600080fd5b806330a5f61e146102a4578063313ce567146102c457806339509351146102e057600080fd5b806318160ddd1161019557806318160ddd146102425780631bff78981461025757806323b872dd1461026d578063293230b81461028d57600080fd5b8063047fc9aa146101c757806306fdde03146101f0578063095ea7b31461021257600080fd5b366101c257005b600080fd5b3480156101d357600080fd5b506101dd60085481565b6040519081526020015b60405180910390f35b3480156101fc57600080fd5b50610205610535565b6040516101e7919061130c565b34801561021e57600080fd5b5061023261022d366004611376565b6105c7565b60405190151581526020016101e7565b34801561024e57600080fd5b506003546101dd565b34801561026357600080fd5b506101dd600d5481565b34801561027957600080fd5b506102326102883660046113a2565b6105df565b34801561029957600080fd5b506102a2610603565b005b3480156102b057600080fd5b506102a26102bf3660046113f8565b61067a565b3480156102d057600080fd5b50604051601281526020016101e7565b3480156102ec57600080fd5b506102326102fb366004611376565b6106a0565b34801561030c57600080fd5b506101dd600c5481565b34801561032257600080fd5b5060075461023290600160b01b900460ff1681565b34801561034357600080fd5b506102a261035236600461141a565b6106c2565b34801561036357600080fd5b506101dd61037236600461143c565b6001600160a01b031660009081526001602052604090205490565b34801561039957600080fd5b506102a261070b565b3480156103ae57600080fd5b506101dd600a5481565b3480156103c457600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016101e7565b3480156103f657600080fd5b5061020561071f565b34801561040b57600080fd5b5061023261041a366004611376565b61072e565b34801561042b57600080fd5b506007546103d2906001600160a01b031681565b34801561044b57600080fd5b5061023261045a366004611376565b6107a9565b34801561046b57600080fd5b506101dd600b5481565b34801561048157600080fd5b506102a2610490366004611459565b6107b7565b3480156104a157600080fd5b506101dd6104b0366004611472565b6107e0565b3480156104c157600080fd5b506102a26104d03660046114ab565b61080b565b3480156104e157600080fd5b506102a26104f036600461143c565b61083e565b34801561050157600080fd5b506006546103d2906001600160a01b031681565b34801561052157600080fd5b506102a26105303660046114e0565b6108b7565b6060600480546105449061150c565b80601f01602080910402602001604051908101604052809291908181526020018280546105709061150c565b80156105bd5780601f10610592576101008083540402835291602001916105bd565b820191906000526020600020905b8154815290600101906020018083116105a057829003601f168201915b5050505050905090565b6000336105d58185856108cd565b5060019392505050565b6000336105ed8582856109f1565b6105f8858585610a6b565b506001949350505050565b61060b610ddf565b600754600160b01b900460ff16156106635760405162461bcd60e51b815260206004820152601660248201527554726164696e6720616c72656164792061637469766560501b60448201526064015b60405180910390fd5b6007805461ffff60a81b191661010160a81b179055565b610682610ddf565b60078054911515600160a81b0260ff60a81b19909216919091179055565b6000336105d58185856106b383836107e0565b6106bd919061155d565b6108cd565b6106ca610ddf565b6103e8826008546106db9190611575565b6106e59190611594565b600a556008546103e8906106fa908390611575565b6107049190611594565b600b555050565b610713610ddf565b61071d6000610e39565b565b6060600580546105449061150c565b6000338161073c82866107e0565b90508381101561079c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161065a565b6105f882868684036108cd565b6000336105d5818585610a6b565b6107bf610ddf565b6103e8816008546107d09190611575565b6107da9190611594565b60095550565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b610813610ddf565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b610846610ddf565b6001600160a01b0381166108ab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161065a565b6108b481610e39565b50565b6108bf610ddf565b600c92909255600d55600f55565b6001600160a01b03831661092f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161065a565b6001600160a01b0382166109905760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161065a565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006109fd84846107e0565b90506000198114610a655781811015610a585760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161065a565b610a6584848484036108cd565b50505050565b60008111610acd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161065a565b6001600160a01b03831660009081526011602052604090205460ff16158015610b0f57506001600160a01b03821660009081526011602052604090205460ff16155b8015610b255750600754600160a01b900460ff16155b15610d0357600754600160b01b900460ff16610b7c5760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81b9bdd081858dd1a5d99481e595d60521b604482015260640161065a565b600a54811115610bce5760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61785478416d6f756e74000000604482015260640161065a565b6007546001600160a01b03838116911614610c6857600b5481610c06846001600160a01b031660009081526001602052604090205490565b610c10919061155d565b1115610c685760405162461bcd60e51b815260206004820152602160248201527f596f752061726520657863656564696e67206d617857616c6c6574416d6f756e6044820152601d60fa1b606482015260840161065a565b3060009081526001602052604090205460095481108015908190610c955750600754600160a81b900460ff165b8015610cab5750600754600160a01b900460ff16155b8015610cc557506007546001600160a01b03868116911614155b8015610cd15750600082115b15610d0057600f54600e5410610cea57610cea82610e89565b600e8054906000610cfa836115b6565b91905055505b50505b600754600090600160a01b900460ff1680610d3657506001600160a01b03841660009081526011602052604090205460ff165b80610d5957506001600160a01b03831660009081526011602052604090205460ff165b15610d6657506000610dba565b6007546001600160a01b0384811691161415610d9d576064600d5483610d8c9190611575565b610d969190611594565b9050610dba565b6064600c5483610dad9190611575565b610db79190611594565b90505b610dce8484610dc984866115d1565b610ee9565b8015610a6557610a65843083610ee9565b6000546001600160a01b0316331461071d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161065a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600754600160a01b900460ff166108b4576007805460ff60a01b1916600160a01b179055610eb681611094565b478015610ed357601054610ed3906001600160a01b0316476111ee565b506000600e556007805460ff60a01b1916905550565b6001600160a01b038316610f4d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161065a565b6001600160a01b038216610faf5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161065a565b6001600160a01b038316600090815260016020526040902054818110156110275760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161065a565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906110879086815260200190565b60405180910390a3610a65565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106110c9576110c96115e8565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114691906115fe565b81600181518110611159576111596115e8565b6001600160a01b03928316602091820292909201015260065461117f91309116846108cd565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906111b890859060009086903090429060040161161b565b600060405180830381600087803b1580156111d257600080fd5b505af11580156111e6573d6000803e3d6000fd5b505050505050565b8047101561123e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161065a565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461128b576040519150601f19603f3d011682016040523d82523d6000602084013e611290565b606091505b50509050806113075760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161065a565b505050565b600060208083528351808285015260005b818110156113395785810183015185820160400152820161131d565b8181111561134b576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146108b457600080fd5b6000806040838503121561138957600080fd5b823561139481611361565b946020939093013593505050565b6000806000606084860312156113b757600080fd5b83356113c281611361565b925060208401356113d281611361565b929592945050506040919091013590565b803580151581146113f357600080fd5b919050565b60006020828403121561140a57600080fd5b611413826113e3565b9392505050565b6000806040838503121561142d57600080fd5b50508035926020909101359150565b60006020828403121561144e57600080fd5b813561141381611361565b60006020828403121561146b57600080fd5b5035919050565b6000806040838503121561148557600080fd5b823561149081611361565b915060208301356114a081611361565b809150509250929050565b600080604083850312156114be57600080fd5b82356114c981611361565b91506114d7602084016113e3565b90509250929050565b6000806000606084860312156114f557600080fd5b505081359360208301359350604090920135919050565b600181811c9082168061152057607f821691505b6020821081141561154157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561157057611570611547565b500190565b600081600019048311821515161561158f5761158f611547565b500290565b6000826115b157634e487b7160e01b600052601260045260246000fd5b500490565b60006000198214156115ca576115ca611547565b5060010190565b6000828210156115e3576115e3611547565b500390565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561161057600080fd5b815161141381611361565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561166b5784516001600160a01b031683529383019391830191600101611646565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220a46a747d20a1f73856bdc0e1d9e42103bcb4e9563ccb243a61b421ec4f10874e64736f6c634300080c0033000000000000000000000000d59723396a43e7b090f3fc9f5b59146a40fa22220000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000019

Deployed Bytecode

0x6080604052600436106101bb5760003560e01c8063715018a6116100ec578063aa4bde281161008a578063e545fd6d11610064578063e545fd6d146104b5578063f2fde38b146104d5578063f887ea40146104f5578063fe2637851461051557600080fd5b8063aa4bde281461045f578063afa4f3b214610475578063dd62ed3e1461049557600080fd5b806395d89b41116100c657806395d89b41146103ea578063a457c2d7146103ff578063a8aa1b311461041f578063a9059cbb1461043f57600080fd5b8063715018a61461038d5780638c0b5e22146103a25780638da5cb5b146103b857600080fd5b806330a5f61e1161015957806346469afb1161013357806346469afb146103005780634ada218b146103165780634caefb581461033757806370a082311461035757600080fd5b806330a5f61e146102a4578063313ce567146102c457806339509351146102e057600080fd5b806318160ddd1161019557806318160ddd146102425780631bff78981461025757806323b872dd1461026d578063293230b81461028d57600080fd5b8063047fc9aa146101c757806306fdde03146101f0578063095ea7b31461021257600080fd5b366101c257005b600080fd5b3480156101d357600080fd5b506101dd60085481565b6040519081526020015b60405180910390f35b3480156101fc57600080fd5b50610205610535565b6040516101e7919061130c565b34801561021e57600080fd5b5061023261022d366004611376565b6105c7565b60405190151581526020016101e7565b34801561024e57600080fd5b506003546101dd565b34801561026357600080fd5b506101dd600d5481565b34801561027957600080fd5b506102326102883660046113a2565b6105df565b34801561029957600080fd5b506102a2610603565b005b3480156102b057600080fd5b506102a26102bf3660046113f8565b61067a565b3480156102d057600080fd5b50604051601281526020016101e7565b3480156102ec57600080fd5b506102326102fb366004611376565b6106a0565b34801561030c57600080fd5b506101dd600c5481565b34801561032257600080fd5b5060075461023290600160b01b900460ff1681565b34801561034357600080fd5b506102a261035236600461141a565b6106c2565b34801561036357600080fd5b506101dd61037236600461143c565b6001600160a01b031660009081526001602052604090205490565b34801561039957600080fd5b506102a261070b565b3480156103ae57600080fd5b506101dd600a5481565b3480156103c457600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016101e7565b3480156103f657600080fd5b5061020561071f565b34801561040b57600080fd5b5061023261041a366004611376565b61072e565b34801561042b57600080fd5b506007546103d2906001600160a01b031681565b34801561044b57600080fd5b5061023261045a366004611376565b6107a9565b34801561046b57600080fd5b506101dd600b5481565b34801561048157600080fd5b506102a2610490366004611459565b6107b7565b3480156104a157600080fd5b506101dd6104b0366004611472565b6107e0565b3480156104c157600080fd5b506102a26104d03660046114ab565b61080b565b3480156104e157600080fd5b506102a26104f036600461143c565b61083e565b34801561050157600080fd5b506006546103d2906001600160a01b031681565b34801561052157600080fd5b506102a26105303660046114e0565b6108b7565b6060600480546105449061150c565b80601f01602080910402602001604051908101604052809291908181526020018280546105709061150c565b80156105bd5780601f10610592576101008083540402835291602001916105bd565b820191906000526020600020905b8154815290600101906020018083116105a057829003601f168201915b5050505050905090565b6000336105d58185856108cd565b5060019392505050565b6000336105ed8582856109f1565b6105f8858585610a6b565b506001949350505050565b61060b610ddf565b600754600160b01b900460ff16156106635760405162461bcd60e51b815260206004820152601660248201527554726164696e6720616c72656164792061637469766560501b60448201526064015b60405180910390fd5b6007805461ffff60a81b191661010160a81b179055565b610682610ddf565b60078054911515600160a81b0260ff60a81b19909216919091179055565b6000336105d58185856106b383836107e0565b6106bd919061155d565b6108cd565b6106ca610ddf565b6103e8826008546106db9190611575565b6106e59190611594565b600a556008546103e8906106fa908390611575565b6107049190611594565b600b555050565b610713610ddf565b61071d6000610e39565b565b6060600580546105449061150c565b6000338161073c82866107e0565b90508381101561079c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161065a565b6105f882868684036108cd565b6000336105d5818585610a6b565b6107bf610ddf565b6103e8816008546107d09190611575565b6107da9190611594565b60095550565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b610813610ddf565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b610846610ddf565b6001600160a01b0381166108ab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161065a565b6108b481610e39565b50565b6108bf610ddf565b600c92909255600d55600f55565b6001600160a01b03831661092f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161065a565b6001600160a01b0382166109905760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161065a565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006109fd84846107e0565b90506000198114610a655781811015610a585760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161065a565b610a6584848484036108cd565b50505050565b60008111610acd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161065a565b6001600160a01b03831660009081526011602052604090205460ff16158015610b0f57506001600160a01b03821660009081526011602052604090205460ff16155b8015610b255750600754600160a01b900460ff16155b15610d0357600754600160b01b900460ff16610b7c5760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81b9bdd081858dd1a5d99481e595d60521b604482015260640161065a565b600a54811115610bce5760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61785478416d6f756e74000000604482015260640161065a565b6007546001600160a01b03838116911614610c6857600b5481610c06846001600160a01b031660009081526001602052604090205490565b610c10919061155d565b1115610c685760405162461bcd60e51b815260206004820152602160248201527f596f752061726520657863656564696e67206d617857616c6c6574416d6f756e6044820152601d60fa1b606482015260840161065a565b3060009081526001602052604090205460095481108015908190610c955750600754600160a81b900460ff165b8015610cab5750600754600160a01b900460ff16155b8015610cc557506007546001600160a01b03868116911614155b8015610cd15750600082115b15610d0057600f54600e5410610cea57610cea82610e89565b600e8054906000610cfa836115b6565b91905055505b50505b600754600090600160a01b900460ff1680610d3657506001600160a01b03841660009081526011602052604090205460ff165b80610d5957506001600160a01b03831660009081526011602052604090205460ff165b15610d6657506000610dba565b6007546001600160a01b0384811691161415610d9d576064600d5483610d8c9190611575565b610d969190611594565b9050610dba565b6064600c5483610dad9190611575565b610db79190611594565b90505b610dce8484610dc984866115d1565b610ee9565b8015610a6557610a65843083610ee9565b6000546001600160a01b0316331461071d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161065a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600754600160a01b900460ff166108b4576007805460ff60a01b1916600160a01b179055610eb681611094565b478015610ed357601054610ed3906001600160a01b0316476111ee565b506000600e556007805460ff60a01b1916905550565b6001600160a01b038316610f4d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161065a565b6001600160a01b038216610faf5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161065a565b6001600160a01b038316600090815260016020526040902054818110156110275760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161065a565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906110879086815260200190565b60405180910390a3610a65565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106110c9576110c96115e8565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114691906115fe565b81600181518110611159576111596115e8565b6001600160a01b03928316602091820292909201015260065461117f91309116846108cd565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906111b890859060009086903090429060040161161b565b600060405180830381600087803b1580156111d257600080fd5b505af11580156111e6573d6000803e3d6000fd5b505050505050565b8047101561123e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161065a565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461128b576040519150601f19603f3d011682016040523d82523d6000602084013e611290565b606091505b50509050806113075760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161065a565b505050565b600060208083528351808285015260005b818110156113395785810183015185820160400152820161131d565b8181111561134b576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146108b457600080fd5b6000806040838503121561138957600080fd5b823561139481611361565b946020939093013593505050565b6000806000606084860312156113b757600080fd5b83356113c281611361565b925060208401356113d281611361565b929592945050506040919091013590565b803580151581146113f357600080fd5b919050565b60006020828403121561140a57600080fd5b611413826113e3565b9392505050565b6000806040838503121561142d57600080fd5b50508035926020909101359150565b60006020828403121561144e57600080fd5b813561141381611361565b60006020828403121561146b57600080fd5b5035919050565b6000806040838503121561148557600080fd5b823561149081611361565b915060208301356114a081611361565b809150509250929050565b600080604083850312156114be57600080fd5b82356114c981611361565b91506114d7602084016113e3565b90509250929050565b6000806000606084860312156114f557600080fd5b505081359360208301359350604090920135919050565b600181811c9082168061152057607f821691505b6020821081141561154157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561157057611570611547565b500190565b600081600019048311821515161561158f5761158f611547565b500290565b6000826115b157634e487b7160e01b600052601260045260246000fd5b500490565b60006000198214156115ca576115ca611547565b5060010190565b6000828210156115e3576115e3611547565b500390565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561161057600080fd5b815161141381611361565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561166b5784516001600160a01b031683529383019391830191600101611646565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220a46a747d20a1f73856bdc0e1d9e42103bcb4e9563ccb243a61b421ec4f10874e64736f6c634300080c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000d59723396a43e7b090f3fc9f5b59146a40fa22220000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000019

-----Decoded View---------------
Arg [0] : pTeamWallet (address): 0xD59723396a43E7b090F3Fc9F5b59146A40fa2222
Arg [1] : pRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [2] : pBuy (uint256): 20
Arg [3] : pSell (uint256): 60
Arg [4] : pLimitSwapFees (uint256): 25

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000d59723396a43e7b090f3fc9f5b59146a40fa2222
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [3] : 000000000000000000000000000000000000000000000000000000000000003c
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000019


Deployed Bytecode Sourcemap

36294:5342:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36600:47;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;36600:47:0;;;;;;;;16380:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18740:201::-;;;;;;;;;;-1:-1:-1;18740:201:0;;;;;:::i;:::-;;:::i;:::-;;;1419:14:1;;1412:22;1394:41;;1382:2;1367:18;18740:201:0;1254:187:1;17509:108:0;;;;;;;;;;-1:-1:-1;17597:12:0;;17509:108;;36866:31;;;;;;;;;;;;;;;;19521:261;;;;;;;;;;-1:-1:-1;19521:261:0;;;;;:::i;:::-;;:::i;40721:173::-;;;;;;;;;;;;;:::i;:::-;;40605:108;;;;;;;;;;-1:-1:-1;40605:108:0;;;;;:::i;:::-;;:::i;17351:93::-;;;;;;;;;;-1:-1:-1;17351:93:0;;17434:2;2399:36:1;;2387:2;2372:18;17351:93:0;2257:184:1;20191:238:0;;;;;;;;;;-1:-1:-1;20191:238:0;;;;;:::i;:::-;;:::i;36829:30::-;;;;;;;;;;;;;;;;36557:34;;;;;;;;;;-1:-1:-1;36557:34:0;;;;-1:-1:-1;;;36557:34:0;;;;;;41256:196;;;;;;;;;;-1:-1:-1;41256:196:0;;;;;:::i;:::-;;:::i;17680:127::-;;;;;;;;;;-1:-1:-1;17680:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;17781:18:0;17754:7;17781:18;;;:9;:18;;;;;;;17680:127;9835:103;;;;;;;;;;;;;:::i;36715:47::-;;;;;;;;;;;;;;;;9194:87;;;;;;;;;;-1:-1:-1;9240:7:0;9267:6;-1:-1:-1;;;;;9267:6:0;9194:87;;;-1:-1:-1;;;;;3115:32:1;;;3097:51;;3085:2;3070:18;9194:87:0;2951:203:1;16599:104:0;;;;;;;;;;;;;:::i;20932:436::-;;;;;;;;;;-1:-1:-1;20932:436:0;;;;;:::i;:::-;;:::i;36454:19::-;;;;;;;;;;-1:-1:-1;36454:19:0;;;;-1:-1:-1;;;;;36454:19:0;;;18013:193;;;;;;;;;;-1:-1:-1;18013:193:0;;;;;:::i;:::-;;:::i;36769:51::-;;;;;;;;;;;;;;;;41460:136;;;;;;;;;;-1:-1:-1;41460:136:0;;;;;:::i;:::-;;:::i;18269:151::-;;;;;;;;;;-1:-1:-1;18269:151:0;;;;;:::i;:::-;;:::i;41109:135::-;;;;;;;;;;-1:-1:-1;41109:135:0;;;;;:::i;:::-;;:::i;10093:201::-;;;;;;;;;;-1:-1:-1;10093:201:0;;;;;:::i;:::-;;:::i;36415:32::-;;;;;;;;;;-1:-1:-1;36415:32:0;;;;-1:-1:-1;;;;;36415:32:0;;;40902:199;;;;;;;;;;-1:-1:-1;40902:199:0;;;;;:::i;:::-;;:::i;16380:100::-;16434:13;16467:5;16460:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16380:100;:::o;18740:201::-;18823:4;7825:10;18879:32;7825:10;18895:7;18904:6;18879:8;:32::i;:::-;-1:-1:-1;18929:4:0;;18740:201;-1:-1:-1;;;18740:201:0:o;19521:261::-;19618:4;7825:10;19676:38;19692:4;7825:10;19707:6;19676:15;:38::i;:::-;19725:27;19735:4;19741:2;19745:6;19725:9;:27::i;:::-;-1:-1:-1;19770:4:0;;19521:261;-1:-1:-1;;;;19521:261:0:o;40721:173::-;9080:13;:11;:13::i;:::-;40784:14:::1;::::0;-1:-1:-1;;;40784:14:0;::::1;;;40783:15;40775:50;;;::::0;-1:-1:-1;;;40775:50:0;;5200:2:1;40775:50:0::1;::::0;::::1;5182:21:1::0;5239:2;5219:18;;;5212:30;-1:-1:-1;;;5258:18:1;;;5251:52;5320:18;;40775:50:0::1;;;;;;;;;40836:14;:21:::0;;-1:-1:-1;;;;40868:18:0;-1:-1:-1;;;40868:18:0;;;40721:173::o;40605:108::-;9080:13;:11;:13::i;:::-;40685:11:::1;:20:::0;;;::::1;;-1:-1:-1::0;;;40685:20:0::1;-1:-1:-1::0;;;;40685:20:0;;::::1;::::0;;;::::1;::::0;;40605:108::o;20191:238::-;20279:4;7825:10;20335:64;7825:10;20351:7;20388:10;20360:25;7825:10;20351:7;20360:9;:25::i;:::-;:38;;;;:::i;:::-;20335:8;:64::i;41256:196::-;9080:13;:11;:13::i;:::-;41386:4:::1;41378:5;41369:6;;:14;;;;:::i;:::-;:21;;;;:::i;:::-;41355:11;:35:::0;41419:6:::1;::::0;41440:4:::1;::::0;41419:18:::1;::::0;41428:9;;41419:18:::1;:::i;:::-;:25;;;;:::i;:::-;41401:15;:43:::0;-1:-1:-1;;41256:196:0:o;9835:103::-;9080:13;:11;:13::i;:::-;9900:30:::1;9927:1;9900:18;:30::i;:::-;9835:103::o:0;16599:104::-;16655:13;16688:7;16681:14;;;;;:::i;20932:436::-;21025:4;7825:10;21025:4;21108:25;7825:10;21125:7;21108:9;:25::i;:::-;21081:52;;21172:15;21152:16;:35;;21144:85;;;;-1:-1:-1;;;21144:85:0;;6211:2:1;21144:85:0;;;6193:21:1;6250:2;6230:18;;;6223:30;6289:34;6269:18;;;6262:62;-1:-1:-1;;;6340:18:1;;;6333:35;6385:19;;21144:85:0;6009:401:1;21144:85:0;21265:60;21274:5;21281:7;21309:15;21290:16;:34;21265:8;:60::i;18013:193::-;18092:4;7825:10;18148:28;7825:10;18165:2;18169:6;18148:9;:28::i;41460:136::-;9080:13;:11;:13::i;:::-;41584:4:::1;41571:10;41562:6;;:19;;;;:::i;:::-;:26;;;;:::i;:::-;41541:18;:47:::0;-1:-1:-1;41460:136:0:o;18269:151::-;-1:-1:-1;;;;;18385:18:0;;;18358:7;18385:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18269:151::o;41109:135::-;9080:13;:11;:13::i;:::-;-1:-1:-1;;;;;41201:27:0;;;::::1;;::::0;;;:17:::1;:27;::::0;;;;:35;;-1:-1:-1;;41201:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41109:135::o;10093:201::-;9080:13;:11;:13::i;:::-;-1:-1:-1;;;;;10182:22:0;::::1;10174:73;;;::::0;-1:-1:-1;;;10174:73:0;;6617:2:1;10174:73:0::1;::::0;::::1;6599:21:1::0;6656:2;6636:18;;;6629:30;6695:34;6675:18;;;6668:62;-1:-1:-1;;;6746:18:1;;;6739:36;6792:19;;10174:73:0::1;6415:402:1::0;10174:73:0::1;10258:28;10277:8;10258:18;:28::i;:::-;10093:201:::0;:::o;40902:199::-;9080:13;:11;:13::i;:::-;41006:11:::1;:18:::0;;;;41035:12:::1;:20:::0;41066:13:::1;:27:::0;40902:199::o;24925:346::-;-1:-1:-1;;;;;25027:19:0;;25019:68;;;;-1:-1:-1;;;25019:68:0;;7024:2:1;25019:68:0;;;7006:21:1;7063:2;7043:18;;;7036:30;7102:34;7082:18;;;7075:62;-1:-1:-1;;;7153:18:1;;;7146:34;7197:19;;25019:68:0;6822:400:1;25019:68:0;-1:-1:-1;;;;;25106:21:0;;25098:68;;;;-1:-1:-1;;;25098:68:0;;7429:2:1;25098:68:0;;;7411:21:1;7468:2;7448:18;;;7441:30;7507:34;7487:18;;;7480:62;-1:-1:-1;;;7558:18:1;;;7551:32;7600:19;;25098:68:0;7227:398:1;25098:68:0;-1:-1:-1;;;;;25179:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25231:32;;160:25:1;;;25231:32:0;;133:18:1;25231:32:0;;;;;;;24925:346;;;:::o;25562:419::-;25663:24;25690:25;25700:5;25707:7;25690:9;:25::i;:::-;25663:52;;-1:-1:-1;;25730:16:0;:37;25726:248;;25812:6;25792:16;:26;;25784:68;;;;-1:-1:-1;;;25784:68:0;;7832:2:1;25784:68:0;;;7814:21:1;7871:2;7851:18;;;7844:30;7910:31;7890:18;;;7883:59;7959:18;;25784:68:0;7630:353:1;25784:68:0;25896:51;25905:5;25912:7;25940:6;25921:16;:25;25896:8;:51::i;:::-;25652:329;25562:419;;;:::o;38062:1501::-;38178:1;38169:6;:10;38161:64;;;;-1:-1:-1;;;38161:64:0;;8190:2:1;38161:64:0;;;8172:21:1;8229:2;8209:18;;;8202:30;8268:34;8248:18;;;8241:62;-1:-1:-1;;;8319:18:1;;;8312:39;8368:19;;38161:64:0;7988:405:1;38161:64:0;-1:-1:-1;;;;;38242:25:0;;;;;;:17;:25;;;;;;;;38241:26;:59;;;;-1:-1:-1;;;;;;38272:28:0;;;;;;:17;:28;;;;;;;;38271:29;38241:59;:72;;;;-1:-1:-1;38305:8:0;;-1:-1:-1;;;38305:8:0;;;;38304:9;38241:72;38238:813;;;38337:14;;-1:-1:-1;;;38337:14:0;;;;38329:49;;;;-1:-1:-1;;;38329:49:0;;8600:2:1;38329:49:0;;;8582:21:1;8639:2;8619:18;;;8612:30;-1:-1:-1;;;8658:18:1;;;8651:52;8720:18;;38329:49:0;8398:346:1;38329:49:0;38411:11;;38401:6;:21;;38393:63;;;;-1:-1:-1;;;38393:63:0;;8951:2:1;38393:63:0;;;8933:21:1;8990:2;8970:18;;;8963:30;9029:31;9009:18;;;9002:59;9078:18;;38393:63:0;8749:353:1;38393:63:0;38487:4;;-1:-1:-1;;;;;38474:17:0;;;38487:4;;38474:17;38471:151;;38553:15;;38543:6;38520:20;38530:9;-1:-1:-1;;;;;17781:18:0;17754:7;17781:18;;;:9;:18;;;;;;;17680:127;38520:20;:29;;;;:::i;:::-;:48;;38512:94;;;;-1:-1:-1;;;38512:94:0;;9309:2:1;38512:94:0;;;9291:21:1;9348:2;9328:18;;;9321:30;9387:34;9367:18;;;9360:62;-1:-1:-1;;;9438:18:1;;;9431:31;9479:19;;38512:94:0;9107:397:1;38512:94:0;38687:4;38638:28;17781:18;;;:9;:18;;;;;;38747;;38723:42;;;;;;;38786:22;;-1:-1:-1;38797:11:0;;-1:-1:-1;;;38797:11:0;;;;38786:22;:35;;;;-1:-1:-1;38813:8:0;;-1:-1:-1;;;38813:8:0;;;;38812:9;38786:35;:53;;;;-1:-1:-1;38835:4:0;;-1:-1:-1;;;;;38825:14:0;;;38835:4;;38825:14;;38786:53;:81;;;;;38866:1;38843:20;:24;38786:81;38782:255;;;38903:13;;38892:7;;:24;38888:106;;38941:33;38953:20;38941:11;:33::i;:::-;39012:7;:9;;;:7;:9;;;:::i;:::-;;;;;;38782:255;38314:737;;38238:813;39089:8;;39063:11;;-1:-1:-1;;;39089:8:0;;;;;:37;;-1:-1:-1;;;;;;39101:25:0;;;;;;:17;:25;;;;;;;;39089:37;:69;;;-1:-1:-1;;;;;;39130:28:0;;;;;;:17;:28;;;;;;;;39089:69;39085:316;;;-1:-1:-1;39181:1:0;39085:316;;;39230:4;;-1:-1:-1;;;;;39217:17:0;;;39230:4;;39217:17;39214:176;;;39285:3;39270:12;;39261:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;39255:33;;39214:176;;;39371:3;39357:11;;39348:6;:20;;;;:::i;:::-;:26;;;;:::i;:::-;39342:32;;39214:176;39413:48;39429:6;39437:9;39448:12;39457:3;39448:6;:12;:::i;:::-;39413:15;:48::i;:::-;39475:7;;39472:82;;39499:43;39515:6;39531:4;39538:3;39499:15;:43::i;9359:132::-;9240:7;9267:6;-1:-1:-1;;;;;9267:6:0;7825:10;9423:23;9415:68;;;;-1:-1:-1;;;9415:68:0;;9981:2:1;9415:68:0;;;9963:21:1;;;10000:18;;;9993:30;10059:34;10039:18;;;10032:62;10111:18;;9415:68:0;9779:356:1;10454:191:0;10528:16;10547:6;;-1:-1:-1;;;;;10564:17:0;;;-1:-1:-1;;;;;;10564:17:0;;;;;;10597:40;;10547:6;;;;;;;10597:40;;10528:16;10597:40;10517:128;10454:191;:::o;39571:295::-;37120:8;;-1:-1:-1;;;37120:8:0;;;;37115:104;;37145:8;:15;;-1:-1:-1;;;;37145:15:0;-1:-1:-1;;;37145:15:0;;;39634:24:::1;39651:6:::0;39634:16:::1;:24::i;:::-;39698:21;39734:22:::0;;39730:107:::1;;39781:10;::::0;39773:52:::1;::::0;-1:-1:-1;;;;;39781:10:0::1;39803:21;39773:29;:52::i;:::-;-1:-1:-1::0;39857:1:0::1;39847:7;:11:::0;37191:8;:16;;-1:-1:-1;;;;37191:16:0;;;39571:295;:::o;21838:806::-;-1:-1:-1;;;;;21935:18:0;;21927:68;;;;-1:-1:-1;;;21927:68:0;;10342:2:1;21927:68:0;;;10324:21:1;10381:2;10361:18;;;10354:30;10420:34;10400:18;;;10393:62;-1:-1:-1;;;10471:18:1;;;10464:35;10516:19;;21927:68:0;10140:401:1;21927:68:0;-1:-1:-1;;;;;22014:16:0;;22006:64;;;;-1:-1:-1;;;22006:64:0;;10748:2:1;22006:64:0;;;10730:21:1;10787:2;10767:18;;;10760:30;10826:34;10806:18;;;10799:62;-1:-1:-1;;;10877:18:1;;;10870:33;10920:19;;22006:64:0;10546:399:1;22006:64:0;-1:-1:-1;;;;;22156:15:0;;22134:19;22156:15;;;:9;:15;;;;;;22190:21;;;;22182:72;;;;-1:-1:-1;;;22182:72:0;;11152:2:1;22182:72:0;;;11134:21:1;11191:2;11171:18;;;11164:30;11230:34;11210:18;;;11203:62;-1:-1:-1;;;11281:18:1;;;11274:36;11327:19;;22182:72:0;10950:402:1;22182:72:0;-1:-1:-1;;;;;22290:15:0;;;;;;;:9;:15;;;;;;22308:20;;;22290:38;;22508:13;;;;;;;;;;:23;;;;;;22560:26;;;;;;22322:6;160:25:1;;148:2;133:18;;14:177;22560:26:0;;;;;;;;22599:37;35970:317;39874:368;39964:16;;;39978:1;39964:16;;;;;;;;39940:21;;39964:16;;;;;;;;;;-1:-1:-1;39964:16:0;39940:40;;40009:4;39991;39996:1;39991:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39991:23:0;;;:7;;;;;;;;;;:23;;;;40035:6;;:13;;;-1:-1:-1;;;40035:13:0;;;;:6;;;;;:11;;:13;;;;;39991:7;;40035:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40025:4;40030:1;40025:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40025:23:0;;;:7;;;;;;;;;:23;40091:6;;40059:53;;40076:4;;40091:6;40100:11;40059:8;:53::i;:::-;40123:6;;:111;;-1:-1:-1;;;40123:111:0;;-1:-1:-1;;;;;40123:6:0;;;;:57;;:111;;40181:11;;40123:6;;40197:4;;40211;;40218:15;;40123:111;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39929:313;39874:368;:::o;35970:317::-;36085:6;36060:21;:31;;36052:73;;;;-1:-1:-1;;;36052:73:0;;13064:2:1;36052:73:0;;;13046:21:1;13103:2;13083:18;;;13076:30;13142:31;13122:18;;;13115:59;13191:18;;36052:73:0;12862:353:1;36052:73:0;36139:12;36157:9;-1:-1:-1;;;;;36157:14:0;36179:6;36157:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36138:52;;;36209:7;36201:78;;;;-1:-1:-1;;;36201:78:0;;13632:2:1;36201:78:0;;;13614:21:1;13671:2;13651:18;;;13644:30;13710:34;13690:18;;;13683:62;13781:28;13761:18;;;13754:56;13827:19;;36201:78:0;13430:422:1;36201:78:0;36041:246;35970:317;;:::o;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;798:131::-;-1:-1:-1;;;;;873:31:1;;863:42;;853:70;;919:1;916;909:12;934:315;1002:6;1010;1063:2;1051:9;1042:7;1038:23;1034:32;1031:52;;;1079:1;1076;1069:12;1031:52;1118:9;1105:23;1137:31;1162:5;1137:31;:::i;:::-;1187:5;1239:2;1224:18;;;;1211:32;;-1:-1:-1;;;934:315:1:o;1446:456::-;1523:6;1531;1539;1592:2;1580:9;1571:7;1567:23;1563:32;1560:52;;;1608:1;1605;1598:12;1560:52;1647:9;1634:23;1666:31;1691:5;1666:31;:::i;:::-;1716:5;-1:-1:-1;1773:2:1;1758:18;;1745:32;1786:33;1745:32;1786:33;:::i;:::-;1446:456;;1838:7;;-1:-1:-1;;;1892:2:1;1877:18;;;;1864:32;;1446:456::o;1907:160::-;1972:20;;2028:13;;2021:21;2011:32;;2001:60;;2057:1;2054;2047:12;2001:60;1907:160;;;:::o;2072:180::-;2128:6;2181:2;2169:9;2160:7;2156:23;2152:32;2149:52;;;2197:1;2194;2187:12;2149:52;2220:26;2236:9;2220:26;:::i;:::-;2210:36;2072:180;-1:-1:-1;;;2072:180:1:o;2446:248::-;2514:6;2522;2575:2;2563:9;2554:7;2550:23;2546:32;2543:52;;;2591:1;2588;2581:12;2543:52;-1:-1:-1;;2614:23:1;;;2684:2;2669:18;;;2656:32;;-1:-1:-1;2446:248:1:o;2699:247::-;2758:6;2811:2;2799:9;2790:7;2786:23;2782:32;2779:52;;;2827:1;2824;2817:12;2779:52;2866:9;2853:23;2885:31;2910:5;2885:31;:::i;3159:180::-;3218:6;3271:2;3259:9;3250:7;3246:23;3242:32;3239:52;;;3287:1;3284;3277:12;3239:52;-1:-1:-1;3310:23:1;;3159:180;-1:-1:-1;3159:180:1:o;3344:388::-;3412:6;3420;3473:2;3461:9;3452:7;3448:23;3444:32;3441:52;;;3489:1;3486;3479:12;3441:52;3528:9;3515:23;3547:31;3572:5;3547:31;:::i;:::-;3597:5;-1:-1:-1;3654:2:1;3639:18;;3626:32;3667:33;3626:32;3667:33;:::i;:::-;3719:7;3709:17;;;3344:388;;;;;:::o;3737:315::-;3802:6;3810;3863:2;3851:9;3842:7;3838:23;3834:32;3831:52;;;3879:1;3876;3869:12;3831:52;3918:9;3905:23;3937:31;3962:5;3937:31;:::i;:::-;3987:5;-1:-1:-1;4011:35:1;4042:2;4027:18;;4011:35;:::i;:::-;4001:45;;3737:315;;;;;:::o;4292:316::-;4369:6;4377;4385;4438:2;4426:9;4417:7;4413:23;4409:32;4406:52;;;4454:1;4451;4444:12;4406:52;-1:-1:-1;;4477:23:1;;;4547:2;4532:18;;4519:32;;-1:-1:-1;4598:2:1;4583:18;;;4570:32;;4292:316;-1:-1:-1;4292:316:1:o;4613:380::-;4692:1;4688:12;;;;4735;;;4756:61;;4810:4;4802:6;4798:17;4788:27;;4756:61;4863:2;4855:6;4852:14;4832:18;4829:38;4826:161;;;4909:10;4904:3;4900:20;4897:1;4890:31;4944:4;4941:1;4934:15;4972:4;4969:1;4962:15;4826:161;;4613:380;;;:::o;5349:127::-;5410:10;5405:3;5401:20;5398:1;5391:31;5441:4;5438:1;5431:15;5465:4;5462:1;5455:15;5481:128;5521:3;5552:1;5548:6;5545:1;5542:13;5539:39;;;5558:18;;:::i;:::-;-1:-1:-1;5594:9:1;;5481:128::o;5614:168::-;5654:7;5720:1;5716;5712:6;5708:14;5705:1;5702:21;5697:1;5690:9;5683:17;5679:45;5676:71;;;5727:18;;:::i;:::-;-1:-1:-1;5767:9:1;;5614:168::o;5787:217::-;5827:1;5853;5843:132;;5897:10;5892:3;5888:20;5885:1;5878:31;5932:4;5929:1;5922:15;5960:4;5957:1;5950:15;5843:132;-1:-1:-1;5989:9:1;;5787:217::o;9509:135::-;9548:3;-1:-1:-1;;9569:17:1;;9566:43;;;9589:18;;:::i;:::-;-1:-1:-1;9636:1:1;9625:13;;9509:135::o;9649:125::-;9689:4;9717:1;9714;9711:8;9708:34;;;9722:18;;:::i;:::-;-1:-1:-1;9759:9:1;;9649:125::o;11489:127::-;11550:10;11545:3;11541:20;11538:1;11531:31;11581:4;11578:1;11571:15;11605:4;11602:1;11595:15;11621:251;11691:6;11744:2;11732:9;11723:7;11719:23;11715:32;11712:52;;;11760:1;11757;11750:12;11712:52;11792:9;11786:16;11811:31;11836:5;11811:31;:::i;11877:980::-;12139:4;12187:3;12176:9;12172:19;12218:6;12207:9;12200:25;12244:2;12282:6;12277:2;12266:9;12262:18;12255:34;12325:3;12320:2;12309:9;12305:18;12298:31;12349:6;12384;12378:13;12415:6;12407;12400:22;12453:3;12442:9;12438:19;12431:26;;12492:2;12484:6;12480:15;12466:29;;12513:1;12523:195;12537:6;12534:1;12531:13;12523:195;;;12602:13;;-1:-1:-1;;;;;12598:39:1;12586:52;;12693:15;;;;12658:12;;;;12634:1;12552:9;12523:195;;;-1:-1:-1;;;;;;;12774:32:1;;;;12769:2;12754:18;;12747:60;-1:-1:-1;;;12838:3:1;12823:19;12816:35;12735:3;11877:980;-1:-1:-1;;;11877:980:1:o

Swarm Source

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