ETH Price: $2,312.55 (+0.23%)

Token

暴走 Baozou ($BAOZOU)
 

Overview

Max Total Supply

999,999,999,999 $BAOZOU

Holders

9

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:
Baozou

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-28
*/

// twitter: https://twitter.com/baozouerc20
// 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/Baozou.sol

// twitter: https://twitter.com/baozouerc20

pragma solidity ^0.8.9;







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 Baozou is Ownable, ERC20 {
    using Address for address payable;
    using SafeMath for uint256;
    
    IUniswapV2Router02 public router;
    address public pair;

    bool private swapping;
    bool public swapEnabled;
    bool public tradingEnabled;

    uint256 public genesis_block;
    uint256 public deadblocks = 0;

    uint256 public supply = 999999999999 * 10 ** 18;
    uint256 public swapHolder = supply * 1 / 1000;
    uint256 public maxTxAmount = supply * 50 / 1000;
    uint256 public maxWalletAmount = supply * 50 / 1000;

    uint256 public totalBuyTax = 1;
    uint256 public totalSellTax = 1;

    uint256 private accumulatedFees = 0;
    address public devWallet;
    
    mapping (address => bool) public _excludedFromFees;
    mapping (address => bool) private isBot;
    
    modifier inSwap() {
        if (!swapping) {
            swapping = true;
            _;
            swapping = false;
        }
    }
        
    constructor(address pDevWallet, address pRouter) ERC20(unicode"暴走 Baozou", "$BAOZOU") {
        _mint(msg.sender, supply);

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

        router = _router;
        pair = _pair;

        devWallet = pDevWallet;

        _excludedFromFees[address(this)] = true;
        _excludedFromFees[devWallet] = true;
        _excludedFromFees[msg.sender] = true;
    }
    
    function _transfer(address sender, address recipient, uint256 amount) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!isBot[sender] && !isBot[recipient], "You can't transfer tokens");

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

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

        if (swapEnabled && !swapping && sender != pair && accumulatedFees >= swapHolder) {
            swapForFees(accumulatedFees);
            accumulatedFees = 0;
        }

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

    }

    function swapForFees(uint256 fee) private inSwap {
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(fee);
        uint256 newBalance = address(this).balance;
        uint256 ethSwapped = newBalance - initialBalance;
        payable(devWallet).transfer(ethSwapped);
    }

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

        // add the liquidity
        router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            devWallet,
            block.timestamp
        );
    }

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

    function startTrading(uint256 numOfDeadBlocks) external onlyOwner {
        require(!tradingEnabled, "Trading already active");
        tradingEnabled = true;
        swapEnabled = true;
        genesis_block = block.number;
        deadblocks = numOfDeadBlocks;
    }

    function setBuySellTaxes(uint256 _buy, uint256 _sell) external onlyOwner{
        totalBuyTax = _buy;
        totalSellTax = _sell;
    }
    
    function addBots(address[] memory isBot_) public onlyOwner {
        for (uint i = 0; i < isBot_.length; i++) {
            isBot[isBot_[i]] = true;
        }
    }

    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 setSwapHolder(uint256 new_amount) external onlyOwner {
        swapHolder = supply * new_amount / 1000;
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"pDevWallet","type":"address"},{"internalType":"address","name":"pRouter","type":"address"}],"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":"","type":"address"}],"name":"_excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"isBot_","type":"address[]"}],"name":"addBots","outputs":[],"stateMutability":"nonpayable","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":"deadblocks","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":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genesis_block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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"}],"name":"setBuySellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_amount","type":"uint256"}],"name":"setSwapHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setSwapHolderEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numOfDeadBlocks","type":"uint256"}],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapHolder","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"}]

608060405260006009556c0c9f2c9cd038943736989c0000600a556103e8600a5460016200002e919062000517565b6200003a919062000539565b600b556103e8600a54603262000051919062000517565b6200005d919062000539565b600c556103e8600a54603262000074919062000517565b62000080919062000539565b600d556001600e556001600f5560006010553480156200009f57600080fd5b5060405162001f6038038062001f60833981016040819052620000c29162000579565b6040518060400160405280600d81526020016ce69ab4e8b5b02042616f7a6f7560981b815250604051806040016040528060078152602001662442414f5a4f5560c81b815250620001226200011c6200033f60201b60201c565b62000343565b8151620001379060049060208501906200045b565b5080516200014d9060059060208401906200045b565b5050506200016433600a546200039360201b60201c565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d09190620005b1565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200021e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002449190620005b1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000292573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b89190620005b1565b600680546001600160a01b03199081166001600160a01b039586161790915560078054821692851692909217909155601180549091169483169490941784555030600090815260126020526040808220805460ff1990811660019081179092559554909316825280822080548616841790553382529020805490931617909155506200062e565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216620003ee5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060036000828254620004029190620005d6565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b8280546200046990620005f1565b90600052602060002090601f0160209004810192826200048d5760008555620004d8565b82601f10620004a857805160ff1916838001178555620004d8565b82800160010185558215620004d8579182015b82811115620004d8578251825591602001919060010190620004bb565b50620004e6929150620004ea565b5090565b5b80821115620004e65760008155600101620004eb565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000534576200053462000501565b500290565b6000826200055757634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160a01b03811681146200057457600080fd5b919050565b600080604083850312156200058d57600080fd5b62000598836200055c565b9150620005a8602084016200055c565b90509250929050565b600060208284031215620005c457600080fd5b620005cf826200055c565b9392505050565b60008219821115620005ec57620005ec62000501565b500190565b600181811c908216806200060657607f821691505b602082108114156200062857634e487b7160e01b600052602260045260246000fd5b50919050565b611922806200063e6000396000f3fe6080604052600436106102085760003560e01c8063715018a611610118578063a8aa1b31116100a0578063dd62ed3e1161006f578063dd62ed3e146105c0578063e545fd6d146105e0578063f0d9904814610600578063f2fde38b14610620578063f887ea401461064057600080fd5b8063a8aa1b311461054a578063a9059cbb1461056a578063aa4bde281461058a578063d34628cc146105a057600080fd5b80638c0b5e22116100e75780638c0b5e22146104ad5780638da5cb5b146104c35780638ea5220f146104f557806395d89b4114610515578063a457c2d71461052a57600080fd5b8063715018a6146104325780637198c4721461044757806378c2e712146104775780637e78c30a1461049757600080fd5b8063313ce5671161019b5780634caefb581161016a5780634caefb581461038557806350a01528146103a557806350c9a88f146103c55780636ddd1713146103db57806370a08231146103fc57600080fd5b8063313ce56714610312578063395093511461032e57806346469afb1461034e5780634ada218b1461036457600080fd5b806318160ddd116101d757806318160ddd146102b15780631bff7898146102c657806323b872dd146102dc578063274a533c146102fc57600080fd5b8063047fc9aa1461021457806306a1409f1461023d57806306fdde031461025f578063095ea7b31461028157600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b5061022a600a5481565b6040519081526020015b60405180910390f35b34801561024957600080fd5b5061025d6102583660046114b2565b610660565b005b34801561026b57600080fd5b506102746106de565b60405161023491906114cb565b34801561028d57600080fd5b506102a161029c366004611545565b610770565b6040519015158152602001610234565b3480156102bd57600080fd5b5060035461022a565b3480156102d257600080fd5b5061022a600f5481565b3480156102e857600080fd5b506102a16102f7366004611571565b610788565b34801561030857600080fd5b5061022a60085481565b34801561031e57600080fd5b5060405160128152602001610234565b34801561033a57600080fd5b506102a1610349366004611545565b6107ac565b34801561035a57600080fd5b5061022a600e5481565b34801561037057600080fd5b506007546102a190600160b01b900460ff1681565b34801561039157600080fd5b5061025d6103a03660046115b2565b6107ce565b3480156103b157600080fd5b5061025d6103c03660046114b2565b610817565b3480156103d157600080fd5b5061022a60095481565b3480156103e757600080fd5b506007546102a190600160a81b900460ff1681565b34801561040857600080fd5b5061022a6104173660046115d4565b6001600160a01b031660009081526001602052604090205490565b34801561043e57600080fd5b5061025d610840565b34801561045357600080fd5b506102a16104623660046115d4565b60126020526000908152604090205460ff1681565b34801561048357600080fd5b5061025d610492366004611608565b610854565b3480156104a357600080fd5b5061022a600b5481565b3480156104b957600080fd5b5061022a600c5481565b3480156104cf57600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610234565b34801561050157600080fd5b506011546104dd906001600160a01b031681565b34801561052157600080fd5b5061027461087a565b34801561053657600080fd5b506102a1610545366004611545565b610889565b34801561055657600080fd5b506007546104dd906001600160a01b031681565b34801561057657600080fd5b506102a1610585366004611545565b610904565b34801561059657600080fd5b5061022a600d5481565b3480156105ac57600080fd5b5061025d6105bb366004611639565b610912565b3480156105cc57600080fd5b5061022a6105db3660046116fe565b610986565b3480156105ec57600080fd5b5061025d6105fb366004611737565b6109b1565b34801561060c57600080fd5b5061025d61061b3660046115b2565b6109e4565b34801561062c57600080fd5b5061025d61063b3660046115d4565b6109f7565b34801561064c57600080fd5b506006546104dd906001600160a01b031681565b610668610a70565b600754600160b01b900460ff16156106c05760405162461bcd60e51b815260206004820152601660248201527554726164696e6720616c72656164792061637469766560501b60448201526064015b60405180910390fd5b6007805461ffff60a81b191661010160a81b17905543600855600955565b6060600480546106ed9061176c565b80601f01602080910402602001604051908101604052809291908181526020018280546107199061176c565b80156107665780601f1061073b57610100808354040283529160200191610766565b820191906000526020600020905b81548152906001019060200180831161074957829003601f168201915b5050505050905090565b60003361077e818585610aca565b5060019392505050565b600033610796858285610bee565b6107a1858585610c68565b506001949350505050565b60003361077e8185856107bf8383610986565b6107c991906117bd565b610aca565b6107d6610a70565b6103e882600a546107e791906117d5565b6107f191906117f4565b600c55600a546103e8906108069083906117d5565b61081091906117f4565b600d555050565b61081f610a70565b6103e881600a5461083091906117d5565b61083a91906117f4565b600b5550565b610848610a70565b61085260006110d3565b565b61085c610a70565b60078054911515600160a81b0260ff60a81b19909216919091179055565b6060600580546106ed9061176c565b600033816108978286610986565b9050838110156108f75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106b7565b6107a18286868403610aca565b60003361077e818585610c68565b61091a610a70565b60005b81518110156109825760016013600084848151811061093e5761093e611816565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061097a8161182c565b91505061091d565b5050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6109b9610a70565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6109ec610a70565b600e91909155600f55565b6109ff610a70565b6001600160a01b038116610a645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106b7565b610a6d816110d3565b50565b6000546001600160a01b031633146108525760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106b7565b6001600160a01b038316610b2c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106b7565b6001600160a01b038216610b8d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106b7565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610bfa8484610986565b90506000198114610c625781811015610c555760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106b7565b610c628484848403610aca565b50505050565b60008111610cca5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016106b7565b6001600160a01b03831660009081526013602052604090205460ff16158015610d0c57506001600160a01b03821660009081526013602052604090205460ff16155b610d585760405162461bcd60e51b815260206004820152601960248201527f596f752063616e2774207472616e7366657220746f6b656e730000000000000060448201526064016106b7565b6001600160a01b03831660009081526012602052604090205460ff16158015610d9a57506001600160a01b03821660009081526012602052604090205460ff16155b8015610db05750600754600160a01b900460ff16155b15610f7c57600754600160b01b900460ff16610e075760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81b9bdd081858dd1a5d99481e595d60521b60448201526064016106b7565b43600954600854610e1891906117bd565b1115610e90576007546001600160a01b03838116911614610e57576001600160a01b0382166000908152601360205260409020805460ff191660011790555b6007546001600160a01b03848116911614610e90576001600160a01b0383166000908152601360205260409020805460ff191660011790555b600c54811115610ee25760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61785478416d6f756e7400000060448201526064016106b7565b6007546001600160a01b03838116911614610f7c57600d5481610f1a846001600160a01b031660009081526001602052604090205490565b610f2491906117bd565b1115610f7c5760405162461bcd60e51b815260206004820152602160248201527f596f752061726520657863656564696e67206d617857616c6c6574416d6f756e6044820152601d60fa1b60648201526084016106b7565b600754600090600160a01b900460ff1680610faf57506001600160a01b03841660009081526012602052604090205460ff165b80610fd257506001600160a01b03831660009081526012602052604090205460ff165b15610fdf57506000611033565b6007546001600160a01b0384811691161415611016576064600f548361100591906117d5565b61100f91906117f4565b9050611033565b6064600e548361102691906117d5565b61103091906117f4565b90505b600754600160a81b900460ff1680156110565750600754600160a01b900460ff16155b801561107057506007546001600160a01b03858116911614155b80156110805750600b5460105410155b1561109657611090601054611123565b60006010555b6110aa84846110a58486611847565b6111ad565b8015610c625780601060008282546110c291906117bd565b90915550610c6290508430836111ad565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600754600160a01b900460ff16610a6d576007805460ff60a01b1916600160a01b1790554761115182611358565b47600061115e8383611847565b6011546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611199573d6000803e3d6000fd5b50506007805460ff60a01b19169055505050565b6001600160a01b0383166112115760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106b7565b6001600160a01b0382166112735760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106b7565b6001600160a01b038316600090815260016020526040902054818110156112eb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106b7565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061134b9086815260200190565b60405180910390a3610c62565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061138d5761138d611816565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156113e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140a919061185e565b8160018151811061141d5761141d611816565b6001600160a01b0392831660209182029290920101526006546114439130911684610aca565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061147c90859060009086903090429060040161187b565b600060405180830381600087803b15801561149657600080fd5b505af11580156114aa573d6000803e3d6000fd5b505050505050565b6000602082840312156114c457600080fd5b5035919050565b600060208083528351808285015260005b818110156114f8578581018301518582016040015282016114dc565b8181111561150a576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610a6d57600080fd5b803561154081611520565b919050565b6000806040838503121561155857600080fd5b823561156381611520565b946020939093013593505050565b60008060006060848603121561158657600080fd5b833561159181611520565b925060208401356115a181611520565b929592945050506040919091013590565b600080604083850312156115c557600080fd5b50508035926020909101359150565b6000602082840312156115e657600080fd5b81356115f181611520565b9392505050565b8035801515811461154057600080fd5b60006020828403121561161a57600080fd5b6115f1826115f8565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561164c57600080fd5b823567ffffffffffffffff8082111561166457600080fd5b818501915085601f83011261167857600080fd5b81358181111561168a5761168a611623565b8060051b604051601f19603f830116810181811085821117156116af576116af611623565b6040529182528482019250838101850191888311156116cd57600080fd5b938501935b828510156116f2576116e385611535565b845293850193928501926116d2565b98975050505050505050565b6000806040838503121561171157600080fd5b823561171c81611520565b9150602083013561172c81611520565b809150509250929050565b6000806040838503121561174a57600080fd5b823561175581611520565b9150611763602084016115f8565b90509250929050565b600181811c9082168061178057607f821691505b602082108114156117a157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156117d0576117d06117a7565b500190565b60008160001904831182151516156117ef576117ef6117a7565b500290565b60008261181157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611840576118406117a7565b5060010190565b600082821015611859576118596117a7565b500390565b60006020828403121561187057600080fd5b81516115f181611520565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156118cb5784516001600160a01b0316835293830193918301916001016118a6565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122043c7ca863d922e0f576c154d566d70880b89d13683602e4a90e327639318daac64736f6c634300080c0033000000000000000000000000a58c12172ba7e2c5223f5f3c3107949eacc755c60000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106102085760003560e01c8063715018a611610118578063a8aa1b31116100a0578063dd62ed3e1161006f578063dd62ed3e146105c0578063e545fd6d146105e0578063f0d9904814610600578063f2fde38b14610620578063f887ea401461064057600080fd5b8063a8aa1b311461054a578063a9059cbb1461056a578063aa4bde281461058a578063d34628cc146105a057600080fd5b80638c0b5e22116100e75780638c0b5e22146104ad5780638da5cb5b146104c35780638ea5220f146104f557806395d89b4114610515578063a457c2d71461052a57600080fd5b8063715018a6146104325780637198c4721461044757806378c2e712146104775780637e78c30a1461049757600080fd5b8063313ce5671161019b5780634caefb581161016a5780634caefb581461038557806350a01528146103a557806350c9a88f146103c55780636ddd1713146103db57806370a08231146103fc57600080fd5b8063313ce56714610312578063395093511461032e57806346469afb1461034e5780634ada218b1461036457600080fd5b806318160ddd116101d757806318160ddd146102b15780631bff7898146102c657806323b872dd146102dc578063274a533c146102fc57600080fd5b8063047fc9aa1461021457806306a1409f1461023d57806306fdde031461025f578063095ea7b31461028157600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b5061022a600a5481565b6040519081526020015b60405180910390f35b34801561024957600080fd5b5061025d6102583660046114b2565b610660565b005b34801561026b57600080fd5b506102746106de565b60405161023491906114cb565b34801561028d57600080fd5b506102a161029c366004611545565b610770565b6040519015158152602001610234565b3480156102bd57600080fd5b5060035461022a565b3480156102d257600080fd5b5061022a600f5481565b3480156102e857600080fd5b506102a16102f7366004611571565b610788565b34801561030857600080fd5b5061022a60085481565b34801561031e57600080fd5b5060405160128152602001610234565b34801561033a57600080fd5b506102a1610349366004611545565b6107ac565b34801561035a57600080fd5b5061022a600e5481565b34801561037057600080fd5b506007546102a190600160b01b900460ff1681565b34801561039157600080fd5b5061025d6103a03660046115b2565b6107ce565b3480156103b157600080fd5b5061025d6103c03660046114b2565b610817565b3480156103d157600080fd5b5061022a60095481565b3480156103e757600080fd5b506007546102a190600160a81b900460ff1681565b34801561040857600080fd5b5061022a6104173660046115d4565b6001600160a01b031660009081526001602052604090205490565b34801561043e57600080fd5b5061025d610840565b34801561045357600080fd5b506102a16104623660046115d4565b60126020526000908152604090205460ff1681565b34801561048357600080fd5b5061025d610492366004611608565b610854565b3480156104a357600080fd5b5061022a600b5481565b3480156104b957600080fd5b5061022a600c5481565b3480156104cf57600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610234565b34801561050157600080fd5b506011546104dd906001600160a01b031681565b34801561052157600080fd5b5061027461087a565b34801561053657600080fd5b506102a1610545366004611545565b610889565b34801561055657600080fd5b506007546104dd906001600160a01b031681565b34801561057657600080fd5b506102a1610585366004611545565b610904565b34801561059657600080fd5b5061022a600d5481565b3480156105ac57600080fd5b5061025d6105bb366004611639565b610912565b3480156105cc57600080fd5b5061022a6105db3660046116fe565b610986565b3480156105ec57600080fd5b5061025d6105fb366004611737565b6109b1565b34801561060c57600080fd5b5061025d61061b3660046115b2565b6109e4565b34801561062c57600080fd5b5061025d61063b3660046115d4565b6109f7565b34801561064c57600080fd5b506006546104dd906001600160a01b031681565b610668610a70565b600754600160b01b900460ff16156106c05760405162461bcd60e51b815260206004820152601660248201527554726164696e6720616c72656164792061637469766560501b60448201526064015b60405180910390fd5b6007805461ffff60a81b191661010160a81b17905543600855600955565b6060600480546106ed9061176c565b80601f01602080910402602001604051908101604052809291908181526020018280546107199061176c565b80156107665780601f1061073b57610100808354040283529160200191610766565b820191906000526020600020905b81548152906001019060200180831161074957829003601f168201915b5050505050905090565b60003361077e818585610aca565b5060019392505050565b600033610796858285610bee565b6107a1858585610c68565b506001949350505050565b60003361077e8185856107bf8383610986565b6107c991906117bd565b610aca565b6107d6610a70565b6103e882600a546107e791906117d5565b6107f191906117f4565b600c55600a546103e8906108069083906117d5565b61081091906117f4565b600d555050565b61081f610a70565b6103e881600a5461083091906117d5565b61083a91906117f4565b600b5550565b610848610a70565b61085260006110d3565b565b61085c610a70565b60078054911515600160a81b0260ff60a81b19909216919091179055565b6060600580546106ed9061176c565b600033816108978286610986565b9050838110156108f75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106b7565b6107a18286868403610aca565b60003361077e818585610c68565b61091a610a70565b60005b81518110156109825760016013600084848151811061093e5761093e611816565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061097a8161182c565b91505061091d565b5050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6109b9610a70565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6109ec610a70565b600e91909155600f55565b6109ff610a70565b6001600160a01b038116610a645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106b7565b610a6d816110d3565b50565b6000546001600160a01b031633146108525760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106b7565b6001600160a01b038316610b2c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106b7565b6001600160a01b038216610b8d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106b7565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610bfa8484610986565b90506000198114610c625781811015610c555760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106b7565b610c628484848403610aca565b50505050565b60008111610cca5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016106b7565b6001600160a01b03831660009081526013602052604090205460ff16158015610d0c57506001600160a01b03821660009081526013602052604090205460ff16155b610d585760405162461bcd60e51b815260206004820152601960248201527f596f752063616e2774207472616e7366657220746f6b656e730000000000000060448201526064016106b7565b6001600160a01b03831660009081526012602052604090205460ff16158015610d9a57506001600160a01b03821660009081526012602052604090205460ff16155b8015610db05750600754600160a01b900460ff16155b15610f7c57600754600160b01b900460ff16610e075760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81b9bdd081858dd1a5d99481e595d60521b60448201526064016106b7565b43600954600854610e1891906117bd565b1115610e90576007546001600160a01b03838116911614610e57576001600160a01b0382166000908152601360205260409020805460ff191660011790555b6007546001600160a01b03848116911614610e90576001600160a01b0383166000908152601360205260409020805460ff191660011790555b600c54811115610ee25760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61785478416d6f756e7400000060448201526064016106b7565b6007546001600160a01b03838116911614610f7c57600d5481610f1a846001600160a01b031660009081526001602052604090205490565b610f2491906117bd565b1115610f7c5760405162461bcd60e51b815260206004820152602160248201527f596f752061726520657863656564696e67206d617857616c6c6574416d6f756e6044820152601d60fa1b60648201526084016106b7565b600754600090600160a01b900460ff1680610faf57506001600160a01b03841660009081526012602052604090205460ff165b80610fd257506001600160a01b03831660009081526012602052604090205460ff165b15610fdf57506000611033565b6007546001600160a01b0384811691161415611016576064600f548361100591906117d5565b61100f91906117f4565b9050611033565b6064600e548361102691906117d5565b61103091906117f4565b90505b600754600160a81b900460ff1680156110565750600754600160a01b900460ff16155b801561107057506007546001600160a01b03858116911614155b80156110805750600b5460105410155b1561109657611090601054611123565b60006010555b6110aa84846110a58486611847565b6111ad565b8015610c625780601060008282546110c291906117bd565b90915550610c6290508430836111ad565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600754600160a01b900460ff16610a6d576007805460ff60a01b1916600160a01b1790554761115182611358565b47600061115e8383611847565b6011546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611199573d6000803e3d6000fd5b50506007805460ff60a01b19169055505050565b6001600160a01b0383166112115760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106b7565b6001600160a01b0382166112735760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106b7565b6001600160a01b038316600090815260016020526040902054818110156112eb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106b7565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061134b9086815260200190565b60405180910390a3610c62565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061138d5761138d611816565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156113e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140a919061185e565b8160018151811061141d5761141d611816565b6001600160a01b0392831660209182029290920101526006546114439130911684610aca565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061147c90859060009086903090429060040161187b565b600060405180830381600087803b15801561149657600080fd5b505af11580156114aa573d6000803e3d6000fd5b505050505050565b6000602082840312156114c457600080fd5b5035919050565b600060208083528351808285015260005b818110156114f8578581018301518582016040015282016114dc565b8181111561150a576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610a6d57600080fd5b803561154081611520565b919050565b6000806040838503121561155857600080fd5b823561156381611520565b946020939093013593505050565b60008060006060848603121561158657600080fd5b833561159181611520565b925060208401356115a181611520565b929592945050506040919091013590565b600080604083850312156115c557600080fd5b50508035926020909101359150565b6000602082840312156115e657600080fd5b81356115f181611520565b9392505050565b8035801515811461154057600080fd5b60006020828403121561161a57600080fd5b6115f1826115f8565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561164c57600080fd5b823567ffffffffffffffff8082111561166457600080fd5b818501915085601f83011261167857600080fd5b81358181111561168a5761168a611623565b8060051b604051601f19603f830116810181811085821117156116af576116af611623565b6040529182528482019250838101850191888311156116cd57600080fd5b938501935b828510156116f2576116e385611535565b845293850193928501926116d2565b98975050505050505050565b6000806040838503121561171157600080fd5b823561171c81611520565b9150602083013561172c81611520565b809150509250929050565b6000806040838503121561174a57600080fd5b823561175581611520565b9150611763602084016115f8565b90509250929050565b600181811c9082168061178057607f821691505b602082108114156117a157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156117d0576117d06117a7565b500190565b60008160001904831182151516156117ef576117ef6117a7565b500290565b60008261181157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611840576118406117a7565b5060010190565b600082821015611859576118596117a7565b500390565b60006020828403121561187057600080fd5b81516115f181611520565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156118cb5784516001600160a01b0316835293830193918301916001016118a6565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122043c7ca863d922e0f576c154d566d70880b89d13683602e4a90e327639318daac64736f6c634300080c0033

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

000000000000000000000000a58c12172ba7e2c5223f5f3c3107949eacc755c60000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : pDevWallet (address): 0xA58C12172BA7E2c5223f5f3c3107949EAcC755C6
Arg [1] : pRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000a58c12172ba7e2c5223f5f3c3107949eacc755c6
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

36130:5594:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36483:47;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;36483:47:0;;;;;;;;40603:274;;;;;;;;;;-1:-1:-1;40603:274:0;;;;;:::i;:::-;;:::i;:::-;;16298:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18658:201::-;;;;;;;;;;-1:-1:-1;18658:201:0;;;;;:::i;:::-;;:::i;:::-;;;1743:14:1;;1736:22;1718:41;;1706:2;1691:18;18658:201:0;1578:187:1;17427:108:0;;;;;;;;;;-1:-1:-1;17515:12:0;;17427:108;;36740:31;;;;;;;;;;;;;;;;19439:261;;;;;;;;;;-1:-1:-1;19439:261:0;;;;;:::i;:::-;;:::i;36410:28::-;;;;;;;;;;;;;;;;17269:93;;;;;;;;;;-1:-1:-1;17269:93:0;;17352:2;2373:36:1;;2361:2;2346:18;17269:93:0;2231:184:1;20109:238:0;;;;;;;;;;-1:-1:-1;20109:238:0;;;;;:::i;:::-;;:::i;36703:30::-;;;;;;;;;;;;;;;;36375:26;;;;;;;;;;-1:-1:-1;36375:26:0;;;;-1:-1:-1;;;36375:26:0;;;;;;41360:196;;;;;;;;;;-1:-1:-1;41360:196:0;;;;;:::i;:::-;;:::i;41564:120::-;;;;;;;;;;-1:-1:-1;41564:120:0;;;;;:::i;:::-;;:::i;36445:29::-;;;;;;;;;;;;;;;;36345:23;;;;;;;;;;-1:-1:-1;36345:23:0;;;;-1:-1:-1;;;36345:23:0;;;;;;17598:127;;;;;;;;;;-1:-1:-1;17598:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;17699:18:0;17672:7;17699:18;;;:9;:18;;;;;;;17598:127;9753:103;;;;;;;;;;;;;:::i;36859:50::-;;;;;;;;;;-1:-1:-1;36859:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;40495:100;;;;;;;;;;-1:-1:-1;40495:100:0;;;;;:::i;:::-;;:::i;36537:45::-;;;;;;;;;;;;;;;;36589:47;;;;;;;;;;;;;;;;9112:87;;;;;;;;;;-1:-1:-1;9158:7:0;9185:6;-1:-1:-1;;;;;9185:6:0;9112:87;;;-1:-1:-1;;;;;3439:32:1;;;3421:51;;3409:2;3394:18;9112:87:0;3275:203:1;36822:24:0;;;;;;;;;;-1:-1:-1;36822:24:0;;;;-1:-1:-1;;;;;36822:24:0;;;16517:104;;;;;;;;;;;;;:::i;20850:436::-;;;;;;;;;;-1:-1:-1;20850:436:0;;;;;:::i;:::-;;:::i;36289:19::-;;;;;;;;;;-1:-1:-1;36289:19:0;;;;-1:-1:-1;;;;;36289:19:0;;;17931:193;;;;;;;;;;-1:-1:-1;17931:193:0;;;;;:::i;:::-;;:::i;36643:51::-;;;;;;;;;;;;;;;;41037:168;;;;;;;;;;-1:-1:-1;41037:168:0;;;;;:::i;:::-;;:::i;18187:151::-;;;;;;;;;;-1:-1:-1;18187:151:0;;;;;:::i;:::-;;:::i;41213:135::-;;;;;;;;;;-1:-1:-1;41213:135:0;;;;;:::i;:::-;;:::i;40885:140::-;;;;;;;;;;-1:-1:-1;40885:140:0;;;;;:::i;:::-;;:::i;10011:201::-;;;;;;;;;;-1:-1:-1;10011:201:0;;;;;:::i;:::-;;:::i;36250:32::-;;;;;;;;;;-1:-1:-1;36250:32:0;;;;-1:-1:-1;;;;;36250:32:0;;;40603:274;8998:13;:11;:13::i;:::-;40689:14:::1;::::0;-1:-1:-1;;;40689:14:0;::::1;;;40688:15;40680:50;;;::::0;-1:-1:-1;;;40680:50:0;;5891:2:1;40680:50:0::1;::::0;::::1;5873:21:1::0;5930:2;5910:18;;;5903:30;-1:-1:-1;;;5949:18:1;;;5942:52;6011:18;;40680:50:0::1;;;;;;;;;40741:14;:21:::0;;-1:-1:-1;;;;40773:18:0;-1:-1:-1;;;40773:18:0;;;40818:12:::1;40802:13;:28:::0;40841:10:::1;:28:::0;40603:274::o;16298:100::-;16352:13;16385:5;16378:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16298:100;:::o;18658:201::-;18741:4;7743:10;18797:32;7743:10;18813:7;18822:6;18797:8;:32::i;:::-;-1:-1:-1;18847:4:0;;18658:201;-1:-1:-1;;;18658:201:0:o;19439:261::-;19536:4;7743:10;19594:38;19610:4;7743:10;19625:6;19594:15;:38::i;:::-;19643:27;19653:4;19659:2;19663:6;19643:9;:27::i;:::-;-1:-1:-1;19688:4:0;;19439:261;-1:-1:-1;;;;19439:261:0:o;20109:238::-;20197:4;7743:10;20253:64;7743:10;20269:7;20306:10;20278:25;7743:10;20269:7;20278:9;:25::i;:::-;:38;;;;:::i;:::-;20253:8;:64::i;41360:196::-;8998:13;:11;:13::i;:::-;41490:4:::1;41482:5;41473:6;;:14;;;;:::i;:::-;:21;;;;:::i;:::-;41459:11;:35:::0;41523:6:::1;::::0;41544:4:::1;::::0;41523:18:::1;::::0;41532:9;;41523:18:::1;:::i;:::-;:25;;;;:::i;:::-;41505:15;:43:::0;-1:-1:-1;;41360:196:0:o;41564:120::-;8998:13;:11;:13::i;:::-;41672:4:::1;41659:10;41650:6;;:19;;;;:::i;:::-;:26;;;;:::i;:::-;41637:10;:39:::0;-1:-1:-1;41564:120:0:o;9753:103::-;8998:13;:11;:13::i;:::-;9818:30:::1;9845:1;9818:18;:30::i;:::-;9753:103::o:0;40495:100::-;8998:13;:11;:13::i;:::-;40567:11:::1;:20:::0;;;::::1;;-1:-1:-1::0;;;40567:20:0::1;-1:-1:-1::0;;;;40567:20:0;;::::1;::::0;;;::::1;::::0;;40495:100::o;16517:104::-;16573:13;16606:7;16599:14;;;;;:::i;20850:436::-;20943:4;7743:10;20943:4;21026:25;7743:10;21043:7;21026:9;:25::i;:::-;20999:52;;21090:15;21070:16;:35;;21062:85;;;;-1:-1:-1;;;21062:85:0;;7287:2:1;21062:85:0;;;7269:21:1;7326:2;7306:18;;;7299:30;7365:34;7345:18;;;7338:62;-1:-1:-1;;;7416:18:1;;;7409:35;7461:19;;21062:85:0;7085:401:1;21062:85:0;21183:60;21192:5;21199:7;21227:15;21208:16;:34;21183:8;:60::i;17931:193::-;18010:4;7743:10;18066:28;7743:10;18083:2;18087:6;18066:9;:28::i;41037:168::-;8998:13;:11;:13::i;:::-;41112:6:::1;41107:91;41128:6;:13;41124:1;:17;41107:91;;;41182:4;41163:5;:16;41169:6;41176:1;41169:9;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;41163:16:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;41163:16:0;:23;;-1:-1:-1;;41163:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41143:3;::::1;::::0;::::1;:::i;:::-;;;;41107:91;;;;41037:168:::0;:::o;18187:151::-;-1:-1:-1;;;;;18303:18:0;;;18276:7;18303:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18187:151::o;41213:135::-;8998:13;:11;:13::i;:::-;-1:-1:-1;;;;;41305:27:0;;;::::1;;::::0;;;:17:::1;:27;::::0;;;;:35;;-1:-1:-1;;41305:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41213:135::o;40885:140::-;8998:13;:11;:13::i;:::-;40968:11:::1;:18:::0;;;;40997:12:::1;:20:::0;40885:140::o;10011:201::-;8998:13;:11;:13::i;:::-;-1:-1:-1;;;;;10100:22:0;::::1;10092:73;;;::::0;-1:-1:-1;;;10092:73:0;;7965:2:1;10092:73:0::1;::::0;::::1;7947:21:1::0;8004:2;7984:18;;;7977:30;8043:34;8023:18;;;8016:62;-1:-1:-1;;;8094:18:1;;;8087:36;8140:19;;10092:73:0::1;7763:402:1::0;10092:73:0::1;10176:28;10195:8;10176:18;:28::i;:::-;10011:201:::0;:::o;9277:132::-;9158:7;9185:6;-1:-1:-1;;;;;9185:6:0;7743:10;9341:23;9333:68;;;;-1:-1:-1;;;9333:68:0;;8372:2:1;9333:68:0;;;8354:21:1;;;8391:18;;;8384:30;8450:34;8430:18;;;8423:62;8502:18;;9333:68:0;8170:356:1;24843:346:0;-1:-1:-1;;;;;24945:19:0;;24937:68;;;;-1:-1:-1;;;24937:68:0;;8733:2:1;24937:68:0;;;8715:21:1;8772:2;8752:18;;;8745:30;8811:34;8791:18;;;8784:62;-1:-1:-1;;;8862:18:1;;;8855:34;8906:19;;24937:68:0;8531:400:1;24937:68:0;-1:-1:-1;;;;;25024:21:0;;25016:68;;;;-1:-1:-1;;;25016:68:0;;9138:2:1;25016:68:0;;;9120:21:1;9177:2;9157:18;;;9150:30;9216:34;9196:18;;;9189:62;-1:-1:-1;;;9267:18:1;;;9260:32;9309:19;;25016:68:0;8936:398:1;25016:68:0;-1:-1:-1;;;;;25097:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25149:32;;160:25:1;;;25149:32:0;;133:18:1;25149:32:0;;;;;;;24843:346;;;:::o;25480:419::-;25581:24;25608:25;25618:5;25625:7;25608:9;:25::i;:::-;25581:52;;-1:-1:-1;;25648:16:0;:37;25644:248;;25730:6;25710:16;:26;;25702:68;;;;-1:-1:-1;;;25702:68:0;;9541:2:1;25702:68:0;;;9523:21:1;9580:2;9560:18;;;9553:30;9619:31;9599:18;;;9592:59;9668:18;;25702:68:0;9339:353:1;25702:68:0;25814:51;25823:5;25830:7;25858:6;25839:16;:25;25814:8;:51::i;:::-;25570:329;25480:419;;;:::o;37690:1667::-;37806:1;37797:6;:10;37789:64;;;;-1:-1:-1;;;37789:64:0;;9899:2:1;37789:64:0;;;9881:21:1;9938:2;9918:18;;;9911:30;9977:34;9957:18;;;9950:62;-1:-1:-1;;;10028:18:1;;;10021:39;10077:19;;37789:64:0;9697:405:1;37789:64:0;-1:-1:-1;;;;;37873:13:0;;;;;;:5;:13;;;;;;;;37872:14;:35;;;;-1:-1:-1;;;;;;37891:16:0;;;;;;:5;:16;;;;;;;;37890:17;37872:35;37864:73;;;;-1:-1:-1;;;37864:73:0;;10309:2:1;37864:73:0;;;10291:21:1;10348:2;10328:18;;;10321:30;10387:27;10367:18;;;10360:55;10432:18;;37864:73:0;10107:349:1;37864:73:0;-1:-1:-1;;;;;37954:25:0;;;;;;:17;:25;;;;;;;;37953:26;:59;;;;-1:-1:-1;;;;;;37984:28:0;;;;;;:17;:28;;;;;;;;37983:29;37953:59;:72;;;;-1:-1:-1;38017:8:0;;-1:-1:-1;;;38017:8:0;;;;38016:9;37953:72;37950:676;;;38049:14;;-1:-1:-1;;;38049:14:0;;;;38041:49;;;;-1:-1:-1;;;38041:49:0;;10663:2:1;38041:49:0;;;10645:21:1;10702:2;10682:18;;;10675:30;-1:-1:-1;;;10721:18:1;;;10714:52;10783:18;;38041:49:0;10461:346:1;38041:49:0;38137:12;38124:10;;38108:13;;:26;;;;:::i;:::-;:41;38105:268;;;38185:4;;-1:-1:-1;;;;;38172:17:0;;;38185:4;;38172:17;38169:89;;-1:-1:-1;;;;;38215:16:0;;;;;;:5;:16;;;;;:23;;-1:-1:-1;;38215:23:0;38234:4;38215:23;;;38169:89;38289:4;;-1:-1:-1;;;;;38279:14:0;;;38289:4;;38279:14;38276:82;;-1:-1:-1;;;;;38318:13:0;;;;;;:5;:13;;;;;:20;;-1:-1:-1;;38318:20:0;38334:4;38318:20;;;38276:82;38405:11;;38395:6;:21;;38387:63;;;;-1:-1:-1;;;38387:63:0;;11014:2:1;38387:63:0;;;10996:21:1;11053:2;11033:18;;;11026:30;11092:31;11072:18;;;11065:59;11141:18;;38387:63:0;10812:353:1;38387:63:0;38481:4;;-1:-1:-1;;;;;38468:17:0;;;38481:4;;38468:17;38465:150;;38546:15;;38536:6;38513:20;38523:9;-1:-1:-1;;;;;17699:18:0;17672:7;17699:18;;;:9;:18;;;;;;;17598:127;38513:20;:29;;;;:::i;:::-;:48;;38505:94;;;;-1:-1:-1;;;38505:94:0;;11372:2:1;38505:94:0;;;11354:21:1;11411:2;11391:18;;;11384:30;11450:34;11430:18;;;11423:62;-1:-1:-1;;;11501:18:1;;;11494:31;11542:19;;38505:94:0;11170:397:1;38505:94:0;38664:8;;38638:11;;-1:-1:-1;;;38664:8:0;;;;;:37;;-1:-1:-1;;;;;;38676:25:0;;;;;;:17;:25;;;;;;;;38664:37;:69;;;-1:-1:-1;;;;;;38705:28:0;;;;;;:17;:28;;;;;;;;38664:69;38660:316;;;-1:-1:-1;38756:1:0;38660:316;;;38805:4;;-1:-1:-1;;;;;38792:17:0;;;38805:4;;38792:17;38789:176;;;38860:3;38845:12;;38836:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;38830:33;;38789:176;;;38946:3;38932:11;;38923:6;:20;;;;:::i;:::-;:26;;;;:::i;:::-;38917:32;;38789:176;38992:11;;-1:-1:-1;;;38992:11:0;;;;:24;;;;-1:-1:-1;39008:8:0;;-1:-1:-1;;;39008:8:0;;;;39007:9;38992:24;:42;;;;-1:-1:-1;39030:4:0;;-1:-1:-1;;;;;39020:14:0;;;39030:4;;39020:14;;38992:42;:75;;;;;39057:10;;39038:15;;:29;;38992:75;38988:170;;;39084:28;39096:15;;39084:11;:28::i;:::-;39145:1;39127:15;:19;38988:170;39170:48;39186:6;39194:9;39205:12;39214:3;39205:6;:12;:::i;:::-;39170:15;:48::i;:::-;39232:7;;39229:119;;39275:3;39256:15;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;39293:43:0;;-1:-1:-1;39309:6:0;39325:4;39332:3;39293:15;:43::i;10372:191::-;10446:16;10465:6;;-1:-1:-1;;;;;10482:17:0;;;-1:-1:-1;;;;;;10482:17:0;;;;;;10515:40;;10465:6;;;;;;;10515:40;;10446:16;10515:40;10435:128;10372:191;:::o;39365:308::-;37002:8;;-1:-1:-1;;;37002:8:0;;;;36997:104;;37027:8;:15;;-1:-1:-1;;;;37027:15:0;-1:-1:-1;;;37027:15:0;;;39450:21:::1;39482;39499:3:::0;39482:16:::1;:21::i;:::-;39535;39514:18;39588:27;39601:14:::0;39535:21;39588:27:::1;:::i;:::-;39634:9;::::0;39626:39:::1;::::0;39567:48;;-1:-1:-1;;;;;;39634:9:0::1;::::0;39626:39;::::1;;;::::0;39567:48;;39634:9:::1;39626:39:::0;39634:9;39626:39;39567:48;39634:9;39626:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;37073:8:0;:16;;-1:-1:-1;;;;37073:16:0;;;-1:-1:-1;;39365:308:0;:::o;21756:806::-;-1:-1:-1;;;;;21853:18:0;;21845:68;;;;-1:-1:-1;;;21845:68:0;;11904:2:1;21845:68:0;;;11886:21:1;11943:2;11923:18;;;11916:30;11982:34;11962:18;;;11955:62;-1:-1:-1;;;12033:18:1;;;12026:35;12078:19;;21845:68:0;11702:401:1;21845:68:0;-1:-1:-1;;;;;21932:16:0;;21924:64;;;;-1:-1:-1;;;21924:64:0;;12310:2:1;21924:64:0;;;12292:21:1;12349:2;12329:18;;;12322:30;12388:34;12368:18;;;12361:62;-1:-1:-1;;;12439:18:1;;;12432:33;12482:19;;21924:64:0;12108:399:1;21924:64:0;-1:-1:-1;;;;;22074:15:0;;22052:19;22074:15;;;:9;:15;;;;;;22108:21;;;;22100:72;;;;-1:-1:-1;;;22100:72:0;;12714:2:1;22100:72:0;;;12696:21:1;12753:2;12733:18;;;12726:30;12792:34;12772:18;;;12765:62;-1:-1:-1;;;12843:18:1;;;12836:36;12889:19;;22100:72:0;12512:402:1;22100:72:0;-1:-1:-1;;;;;22208:15:0;;;;;;;:9;:15;;;;;;22226:20;;;22208:38;;22426:13;;;;;;;;;;:23;;;;;;22478:26;;;;;;22240:6;160:25:1;;148:2;133:18;;14:177;22478:26:0;;;;;;;;22517:37;26499:91;39681:368;39771:16;;;39785:1;39771:16;;;;;;;;39747:21;;39771:16;;;;;;;;;;-1:-1:-1;39771:16:0;39747:40;;39816:4;39798;39803:1;39798:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39798:23:0;;;:7;;;;;;;;;;:23;;;;39842:6;;:13;;;-1:-1:-1;;;39842:13:0;;;;:6;;;;;:11;;:13;;;;;39798:7;;39842:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39832:4;39837:1;39832:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39832:23:0;;;:7;;;;;;;;;:23;39898:6;;39866:53;;39883:4;;39898:6;39907:11;39866:8;:53::i;:::-;39930:6;;:111;;-1:-1:-1;;;39930:111:0;;-1:-1:-1;;;;;39930:6:0;;;;:57;;:111;;39988:11;;39930:6;;40004:4;;40018;;40025:15;;39930:111;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39736:313;39681:368;:::o;196:180:1:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:1;;196:180;-1:-1:-1;196:180:1:o;381:597::-;493:4;522:2;551;540:9;533:21;583:6;577:13;626:6;621:2;610:9;606:18;599:34;651:1;661:140;675:6;672:1;669:13;661:140;;;770:14;;;766:23;;760:30;736:17;;;755:2;732:26;725:66;690:10;;661:140;;;819:6;816:1;813:13;810:91;;;889:1;884:2;875:6;864:9;860:22;856:31;849:42;810:91;-1:-1:-1;962:2:1;941:15;-1:-1:-1;;937:29:1;922:45;;;;969:2;918:54;;381:597;-1:-1:-1;;;381:597:1:o;983:131::-;-1:-1:-1;;;;;1058:31:1;;1048:42;;1038:70;;1104:1;1101;1094:12;1119:134;1187:20;;1216:31;1187:20;1216:31;:::i;:::-;1119:134;;;:::o;1258:315::-;1326:6;1334;1387:2;1375:9;1366:7;1362:23;1358:32;1355:52;;;1403:1;1400;1393:12;1355:52;1442:9;1429:23;1461:31;1486:5;1461:31;:::i;:::-;1511:5;1563:2;1548:18;;;;1535:32;;-1:-1:-1;;;1258:315:1:o;1770:456::-;1847:6;1855;1863;1916:2;1904:9;1895:7;1891:23;1887:32;1884:52;;;1932:1;1929;1922:12;1884:52;1971:9;1958:23;1990:31;2015:5;1990:31;:::i;:::-;2040:5;-1:-1:-1;2097:2:1;2082:18;;2069:32;2110:33;2069:32;2110:33;:::i;:::-;1770:456;;2162:7;;-1:-1:-1;;;2216:2:1;2201:18;;;;2188:32;;1770:456::o;2420:248::-;2488:6;2496;2549:2;2537:9;2528:7;2524:23;2520:32;2517:52;;;2565:1;2562;2555:12;2517:52;-1:-1:-1;;2588:23:1;;;2658:2;2643:18;;;2630:32;;-1:-1:-1;2420:248:1:o;2673:247::-;2732:6;2785:2;2773:9;2764:7;2760:23;2756:32;2753:52;;;2801:1;2798;2791:12;2753:52;2840:9;2827:23;2859:31;2884:5;2859:31;:::i;:::-;2909:5;2673:247;-1:-1:-1;;;2673:247:1:o;2925:160::-;2990:20;;3046:13;;3039:21;3029:32;;3019:60;;3075:1;3072;3065:12;3090:180;3146:6;3199:2;3187:9;3178:7;3174:23;3170:32;3167:52;;;3215:1;3212;3205:12;3167:52;3238:26;3254:9;3238:26;:::i;3483:127::-;3544:10;3539:3;3535:20;3532:1;3525:31;3575:4;3572:1;3565:15;3599:4;3596:1;3589:15;3615:1121;3699:6;3730:2;3773;3761:9;3752:7;3748:23;3744:32;3741:52;;;3789:1;3786;3779:12;3741:52;3829:9;3816:23;3858:18;3899:2;3891:6;3888:14;3885:34;;;3915:1;3912;3905:12;3885:34;3953:6;3942:9;3938:22;3928:32;;3998:7;3991:4;3987:2;3983:13;3979:27;3969:55;;4020:1;4017;4010:12;3969:55;4056:2;4043:16;4078:2;4074;4071:10;4068:36;;;4084:18;;:::i;:::-;4130:2;4127:1;4123:10;4162:2;4156:9;4225:2;4221:7;4216:2;4212;4208:11;4204:25;4196:6;4192:38;4280:6;4268:10;4265:22;4260:2;4248:10;4245:18;4242:46;4239:72;;;4291:18;;:::i;:::-;4327:2;4320:22;4377:18;;;4411:15;;;;-1:-1:-1;4453:11:1;;;4449:20;;;4481:19;;;4478:39;;;4513:1;4510;4503:12;4478:39;4537:11;;;;4557:148;4573:6;4568:3;4565:15;4557:148;;;4639:23;4658:3;4639:23;:::i;:::-;4627:36;;4590:12;;;;4683;;;;4557:148;;;4724:6;3615:1121;-1:-1:-1;;;;;;;;3615:1121:1:o;4741:388::-;4809:6;4817;4870:2;4858:9;4849:7;4845:23;4841:32;4838:52;;;4886:1;4883;4876:12;4838:52;4925:9;4912:23;4944:31;4969:5;4944:31;:::i;:::-;4994:5;-1:-1:-1;5051:2:1;5036:18;;5023:32;5064:33;5023:32;5064:33;:::i;:::-;5116:7;5106:17;;;4741:388;;;;;:::o;5134:315::-;5199:6;5207;5260:2;5248:9;5239:7;5235:23;5231:32;5228:52;;;5276:1;5273;5266:12;5228:52;5315:9;5302:23;5334:31;5359:5;5334:31;:::i;:::-;5384:5;-1:-1:-1;5408:35:1;5439:2;5424:18;;5408:35;:::i;:::-;5398:45;;5134:315;;;;;:::o;6040:380::-;6119:1;6115:12;;;;6162;;;6183:61;;6237:4;6229:6;6225:17;6215:27;;6183:61;6290:2;6282:6;6279:14;6259:18;6256:38;6253:161;;;6336:10;6331:3;6327:20;6324:1;6317:31;6371:4;6368:1;6361:15;6399:4;6396:1;6389:15;6253:161;;6040:380;;;:::o;6425:127::-;6486:10;6481:3;6477:20;6474:1;6467:31;6517:4;6514:1;6507:15;6541:4;6538:1;6531:15;6557:128;6597:3;6628:1;6624:6;6621:1;6618:13;6615:39;;;6634:18;;:::i;:::-;-1:-1:-1;6670:9:1;;6557:128::o;6690:168::-;6730:7;6796:1;6792;6788:6;6784:14;6781:1;6778:21;6773:1;6766:9;6759:17;6755:45;6752:71;;;6803:18;;:::i;:::-;-1:-1:-1;6843:9:1;;6690:168::o;6863:217::-;6903:1;6929;6919:132;;6973:10;6968:3;6964:20;6961:1;6954:31;7008:4;7005:1;6998:15;7036:4;7033:1;7026:15;6919:132;-1:-1:-1;7065:9:1;;6863:217::o;7491:127::-;7552:10;7547:3;7543:20;7540:1;7533:31;7583:4;7580:1;7573:15;7607:4;7604:1;7597:15;7623:135;7662:3;-1:-1:-1;;7683:17:1;;7680:43;;;7703:18;;:::i;:::-;-1:-1:-1;7750:1:1;7739:13;;7623:135::o;11572:125::-;11612:4;11640:1;11637;11634:8;11631:34;;;11645:18;;:::i;:::-;-1:-1:-1;11682:9:1;;11572:125::o;12919:251::-;12989:6;13042:2;13030:9;13021:7;13017:23;13013:32;13010:52;;;13058:1;13055;13048:12;13010:52;13090:9;13084:16;13109:31;13134:5;13109:31;:::i;13175:980::-;13437:4;13485:3;13474:9;13470:19;13516:6;13505:9;13498:25;13542:2;13580:6;13575:2;13564:9;13560:18;13553:34;13623:3;13618:2;13607:9;13603:18;13596:31;13647:6;13682;13676:13;13713:6;13705;13698:22;13751:3;13740:9;13736:19;13729:26;;13790:2;13782:6;13778:15;13764:29;;13811:1;13821:195;13835:6;13832:1;13829:13;13821:195;;;13900:13;;-1:-1:-1;;;;;13896:39:1;13884:52;;13991:15;;;;13956:12;;;;13932:1;13850:9;13821:195;;;-1:-1:-1;;;;;;;14072:32:1;;;;14067:2;14052:18;;14045:60;-1:-1:-1;;;14136:3:1;14121:19;14114:35;14033:3;13175:980;-1:-1:-1;;;13175:980:1:o

Swarm Source

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