ETH Price: $2,374.16 (-0.64%)

Token

Hex Dogelon (HEXDOGELON)
 

Overview

Max Total Supply

1,000,000,000 HEXDOGELON

Holders

10

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,593,085.979622840550858099 HEXDOGELON

Value
$0.00
0x12dd7a4dbedc7afc56287588a66f40729b3db0c0
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:
HexDogelon

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-07
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.15;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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



/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. 
 *
 * This contract is only required for intermediate, library-like contracts.
 */

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

/**
 * @dev 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.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

}

/**
 * @dev Implementation of the {IERC20} interface.
 */
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}.
     */
    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.
     */
    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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), 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}.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }


    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.

     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     */
    function _createInitialTotalSupply(address account, uint256 amount) internal virtual {
        require(account != address(0));

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     */
    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 Hook that is called before any transfer of tokens
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens.
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}


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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SignedSafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SignedSafeMath {
    /**
     * @dev Returns the multiplication of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        return a * b;
    }

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

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

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

// 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 no longer needed starting with Solidity 0.8. 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 substraction 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;
        }
    }
}

/**
 * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow
 * checks.
 */
library SafeCast {
    /**
     * @dev Returns the downcasted uint224 from uint256, reverting on
     * overflow (when the input is greater than largest uint224).
     *
     * Counterpart to Solidity's `uint224` operator.
     *
     * Requirements:
     *
     * - input must fit into 224 bits
     */
    function toUint224(uint256 value) internal pure returns (uint224) {
        require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits");
        return uint224(value);
    }

    /**
     * @dev Returns the downcasted uint128 from uint256, reverting on
     * overflow (when the input is greater than largest uint128).
     *
     * Counterpart to Solidity's `uint128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     */
    function toUint128(uint256 value) internal pure returns (uint128) {
        require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits");
        return uint128(value);
    }

    /**
     * @dev Returns the downcasted uint96 from uint256, reverting on
     * overflow (when the input is greater than largest uint96).
     *
     * Counterpart to Solidity's `uint96` operator.
     *
     * Requirements:
     *
     * - input must fit into 96 bits
     */
    function toUint96(uint256 value) internal pure returns (uint96) {
        require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits");
        return uint96(value);
    }

    /**
     * @dev Returns the downcasted uint64 from uint256, reverting on
     * overflow (when the input is greater than largest uint64).
     *
     * Counterpart to Solidity's `uint64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     */
    function toUint64(uint256 value) internal pure returns (uint64) {
        require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits");
        return uint64(value);
    }

    /**
     * @dev Returns the downcasted uint32 from uint256, reverting on
     * overflow (when the input is greater than largest uint32).
     *
     * Counterpart to Solidity's `uint32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     */
    function toUint32(uint256 value) internal pure returns (uint32) {
        require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits");
        return uint32(value);
    }

    /**
     * @dev Returns the downcasted uint16 from uint256, reverting on
     * overflow (when the input is greater than largest uint16).
     *
     * Counterpart to Solidity's `uint16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     */
    function toUint16(uint256 value) internal pure returns (uint16) {
        require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits");
        return uint16(value);
    }

    /**
     * @dev Returns the downcasted uint8 from uint256, reverting on
     * overflow (when the input is greater than largest uint8).
     *
     * Counterpart to Solidity's `uint8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     */
    function toUint8(uint256 value) internal pure returns (uint8) {
        require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits");
        return uint8(value);
    }

    /**
     * @dev Converts a signed int256 into an unsigned uint256.
     *
     * Requirements:
     *
     * - input must be greater than or equal to 0.
     */
    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    /**
     * @dev Returns the downcasted int128 from int256, reverting on
     * overflow (when the input is less than smallest int128 or
     * greater than largest int128).
     *
     * Counterpart to Solidity's `int128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     *
     * _Available since v3.1._
     */
    function toInt128(int256 value) internal pure returns (int128) {
        require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits");
        return int128(value);
    }

    /**
     * @dev Returns the downcasted int64 from int256, reverting on
     * overflow (when the input is less than smallest int64 or
     * greater than largest int64).
     *
     * Counterpart to Solidity's `int64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     *
     * _Available since v3.1._
     */
    function toInt64(int256 value) internal pure returns (int64) {
        require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits");
        return int64(value);
    }

    /**
     * @dev Returns the downcasted int32 from int256, reverting on
     * overflow (when the input is less than smallest int32 or
     * greater than largest int32).
     *
     * Counterpart to Solidity's `int32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     *
     * _Available since v3.1._
     */
    function toInt32(int256 value) internal pure returns (int32) {
        require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits");
        return int32(value);
    }

    /**
     * @dev Returns the downcasted int16 from int256, reverting on
     * overflow (when the input is less than smallest int16 or
     * greater than largest int16).
     *
     * Counterpart to Solidity's `int16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     *
     * _Available since v3.1._
     */
    function toInt16(int256 value) internal pure returns (int16) {
        require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits");
        return int16(value);
    }

    /**
     * @dev Returns the downcasted int8 from int256, reverting on
     * overflow (when the input is less than smallest int8 or
     * greater than largest int8).
     *
     * Counterpart to Solidity's `int8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     *
     * _Available since v3.1._
     */
    function toInt8(int256 value) internal pure returns (int8) {
        require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits");
        return int8(value);
    }

    /**
     * @dev Converts an unsigned uint256 into a signed int256.
     *
     * Requirements:
     *
     * - input must be less than or equal to maxInt256.
     */
    function toInt256(uint256 value) internal pure returns (int256) {
        // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
        require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256");
        return int256(value);
    }
}

contract HexDogelon is ERC20, Ownable {
    using SafeMath for uint256;

    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool private isOpen = false;

    uint256 public liquidityFee = 1;
    uint256 public marketingFee = 1;
    uint256 public devFee = 1;
    uint256 public sellLiquidityFee = 1;
    uint256 public sellMarketingFee = 1;
    uint256 public sellDevFee = 1;
    uint256 public maxTransactionAmount = 1000000000 * (10**18);
    uint256 public maxWalletToken = 2000000000 * (10**18);
    uint256 public swapTokensAtAmount = 500000 * (10**18);

    IUniswapV2Router02 public uniswapV2Router;
    address public immutable uniswapV2Pair;

    mapping(address => bool) public _isBlacklisted;

    address payable public marketingWallet = payable(0x3943f8F65182e24164a6Bf5620165AEbEE7502AD); 
    address payable public devWallet = payable(0xD42380Ae66CeAadd27627055f510c2Bdac36a1e7);

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    event SwapAndLiquify(uint256 tokensIntoLiqudity, uint256 ethReceived);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapETHForTokens(uint256 amountIn, address[] path);
    event ExcludeFromFees(address indexed account, bool isExcluded);


    constructor() ERC20("Hex Dogelon", "HEXDOGELON") {
    	IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        // exclude from paying fees and max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(devWallet, true);
        excludeFromFees(address(this), true);
        
        /*
          an internal function that is only called here, and CANNOT be called ever again
        */
        
        _createInitialTotalSupply(owner(), 1000000000 * (10**18));
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        bool excludedAccount = _isExcludedFromFees[from] || _isExcludedFromFees[to];
        require(isOpen || excludedAccount, "trading is not yet Open");
        require(!_isBlacklisted[from] && !_isBlacklisted[to], 'Blacklisted address');

        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

         if(from==uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
            uint256 contractBalanceRecepient = balanceOf(to);
            require(contractBalanceRecepient + amount <= maxWalletToken, "Exceeds maximum wallet token amount.");
        }
        
        if(to==uniswapV2Pair && !excludedAccount) {
            require(amount <= maxTransactionAmount, "amount exceeds the maxTransactionAmount.");
        }
        
    	uint256 contractTokenBalance = balanceOf(address(this));
        
        bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount;
       
        if(overMinTokenBalance && !inSwapAndLiquify && to==uniswapV2Pair && swapAndLiquifyEnabled) {
            contractTokenBalance = swapTokensAtAmount;
            swapAndLiquify(contractTokenBalance);

        }

         // if any account belongs to _isExcludedFromFee account then remove the fee
        if(!excludedAccount) {
            uint256 fees;
            if(from==uniswapV2Pair) {
              fees  = amount.mul(liquidityFee.add(marketingFee).add(devFee)).div(100);
            }

            if(to==uniswapV2Pair) {
              fees  = amount.mul(sellLiquidityFee.add(sellMarketingFee).add(sellDevFee)).div(100);
            }

        	amount = amount.sub(fees);
            if(fees > 0) {
                super._transfer(from, address(this), fees); 
            }
        }

        super._transfer(from, to, amount);

    }

     function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 tokensForLiquidity = contractTokenBalance.mul(sellLiquidityFee).div(sellMarketingFee.add(sellLiquidityFee).add(sellDevFee));
        // split the Liquidity token balance into halves
        uint256 half = tokensForLiquidity.div(2);
        uint256 otherHalf = tokensForLiquidity.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); 

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        // swap and Send eth to wallets
        swapTokensForEth(contractTokenBalance.sub(tokensForLiquidity));
        devWallet.transfer(address(this).balance.mul(sellDevFee).div(sellMarketingFee.add(sellDevFee)));
        marketingWallet.transfer(address(this).balance);
       
        emit SwapAndLiquify(half, newBalance); 
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) {
          _approve(address(this), address(uniswapV2Router), ~uint256(0));
        }

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
        
    }

     function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
    
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function openTrade() external onlyOwner {
        isOpen = true;
    }

    function setMaxWalletLimit(uint256 _newLimit) public onlyOwner {
        maxWalletToken = _newLimit;
        require(maxWalletToken >= totalSupply().div(200), "value too low");
    }

    function setMaxTxAmount(uint256 _maxTx) public onlyOwner {
        maxTransactionAmount = _maxTx;
        require(maxTransactionAmount >= totalSupply().div(1000000000), "value too low");
    }

    function updateBuyFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _devFee) public onlyOwner {
        require(_liquidityFee.add(_marketingFee).add(_devFee) <= 15, "tax too high");
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
        devFee = _devFee;
    }

     function updateSellFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _devFee) public onlyOwner {
        require(_liquidityFee.add(_marketingFee).add(_devFee) <= 15, "tax too high");
        sellLiquidityFee = _liquidityFee;
        sellMarketingFee = _marketingFee;
        sellDevFee = _devFee;
    }

    function updateWallets(address payable _marketingWallet, address payable _devWallet) public onlyOwner {
        marketingWallet = _marketingWallet;
        devWallet = _devWallet;
    }

    function setSwapTokensAtAmouunt(uint256 _newAmount) public onlyOwner {
        swapTokensAtAmount = _newAmount;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function blacklistAddress(address account, bool value) external onlyOwner{
        _isBlacklisted[account] = value;
    }

    receive() external payable {

    }
  
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","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":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","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":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setSwapTokensAtAmouunt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketingWallet","type":"address"},{"internalType":"address payable","name":"_devWallet","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526006805461ffff60a81b1916600160a81b1790556001600781905560088190556009819055600a819055600b819055600c556b033b2e3c9fd0803ce8000000600d556b06765c793fa10079d0000000600e556969e10de76676d0800000600f55601280546001600160a01b0319908116733943f8f65182e24164a6bf5620165aebee7502ad179091556013805490911673d42380ae66ceaadd27627055f510c2bdac36a1e7179055348015620000b957600080fd5b506040518060400160405280600b81526020016a2432bc102237b3b2b637b760a91b8152506040518060400160405280600a8152602001692422ac2227a3a2a627a760b11b815250816003908162000112919062000635565b50600462000121828262000635565b505050600062000136620003a360201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000204919062000701565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000252573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000278919062000701565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ec919062000701565b601080546001600160a01b0319166001600160a01b038581169190911790915581166080529050620003326200032a6005546001600160a01b031690565b6001620003a7565b6012546200034b906001600160a01b03166001620003a7565b60135462000364906001600160a01b03166001620003a7565b62000371306001620003a7565b6200039b620003886005546001600160a01b031690565b6b033b2e3c9fd0803ce8000000620004eb565b50506200075a565b3390565b6005546001600160a01b03163314620004075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036200048c5760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401620003fe565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620004ff57600080fd5b806002600082825462000513919062000733565b90915550506001600160a01b038216600090815260208190526040812080548392906200054290849062000733565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005bc57607f821691505b602082108103620005dd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200058c57600081815260208120601f850160051c810160208610156200060c5750805b601f850160051c820191505b818110156200062d5782815560010162000618565b505050505050565b81516001600160401b0381111562000651576200065162000591565b6200066981620006628454620005a7565b84620005e3565b602080601f831160018114620006a15760008415620006885750858301515b600019600386901b1c1916600185901b1785556200062d565b600085815260208120601f198616915b82811015620006d257888601518255948401946001909101908401620006b1565b5085821015620006f15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200071457600080fd5b81516001600160a01b03811681146200072c57600080fd5b9392505050565b600082198211156200075557634e487b7160e01b600052601160045260246000fd5b500190565b608051611c9b620007996000396000818161037101528181610fbe015281816110c4015281816111a001528181611205015261126d0152611c9b6000f3fe6080604052600436106102135760003560e01c80638da5cb5b11610118578063c49b9a80116100a0578063e6c75f711161006f578063e6c75f7114610656578063e8ba854f1461066c578063ec28438a1461068c578063f6374342146106ac578063fb201b1d146106c257600080fd5b8063c49b9a80146105c4578063c8c8ebe4146105e4578063dd62ed3e146105fa578063e2f456051461064057600080fd5b806398118cb4116100e757806398118cb414610538578063a0d82dc51461054e578063a9059cbb14610564578063c024666814610584578063c17b5b8c146105a457600080fd5b80638da5cb5b146104cf5780638ea5220f146104ed578063921369131461050d57806395d89b411461052357600080fd5b80634a74bb021161019b57806370a082311161016a57806370a0823114610419578063728d41c91461044f578063750c11b61461046f57806375f0a8741461048f5780638095d564146104af57600080fd5b80634a74bb02146103935780634fbee193146103b45780636827e764146103ed5780636b67c4df1461040357600080fd5b80631cdd3be3116101e25780631cdd3be3146102d157806323b872dd14610301578063313ce56714610321578063455a43961461033d57806349bd5a5e1461035f57600080fd5b806306fdde031461021f578063095ea7b31461024a5780631694505e1461027a57806318160ddd146102b257600080fd5b3661021a57005b600080fd5b34801561022b57600080fd5b506102346106d7565b604051610241919061183f565b60405180910390f35b34801561025657600080fd5b5061026a6102653660046118a9565b610769565b6040519015158152602001610241565b34801561028657600080fd5b5060105461029a906001600160a01b031681565b6040516001600160a01b039091168152602001610241565b3480156102be57600080fd5b506002545b604051908152602001610241565b3480156102dd57600080fd5b5061026a6102ec3660046118d5565b60116020526000908152604090205460ff1681565b34801561030d57600080fd5b5061026a61031c3660046118f2565b61077f565b34801561032d57600080fd5b5060405160128152602001610241565b34801561034957600080fd5b5061035d610358366004611948565b61082e565b005b34801561036b57600080fd5b5061029a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561039f57600080fd5b5060065461026a90600160a81b900460ff1681565b3480156103c057600080fd5b5061026a6103cf3660046118d5565b6001600160a01b031660009081526014602052604090205460ff1690565b3480156103f957600080fd5b506102c360095481565b34801561040f57600080fd5b506102c360085481565b34801561042557600080fd5b506102c36104343660046118d5565b6001600160a01b031660009081526020819052604090205490565b34801561045b57600080fd5b5061035d61046a36600461197d565b610883565b34801561047b57600080fd5b5061035d61048a36600461197d565b61090a565b34801561049b57600080fd5b5060125461029a906001600160a01b031681565b3480156104bb57600080fd5b5061035d6104ca366004611996565b610939565b3480156104db57600080fd5b506005546001600160a01b031661029a565b3480156104f957600080fd5b5060135461029a906001600160a01b031681565b34801561051957600080fd5b506102c3600b5481565b34801561052f57600080fd5b506102346109c4565b34801561054457600080fd5b506102c360075481565b34801561055a57600080fd5b506102c3600c5481565b34801561057057600080fd5b5061026a61057f3660046118a9565b6109d3565b34801561059057600080fd5b5061035d61059f366004611948565b6109e0565b3480156105b057600080fd5b5061035d6105bf366004611996565b610aec565b3480156105d057600080fd5b5061035d6105df3660046119c2565b610b71565b3480156105f057600080fd5b506102c3600d5481565b34801561060657600080fd5b506102c36106153660046119dd565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561064c57600080fd5b506102c3600f5481565b34801561066257600080fd5b506102c3600e5481565b34801561067857600080fd5b5061035d6106873660046119dd565b610bf3565b34801561069857600080fd5b5061035d6106a736600461197d565b610c4b565b3480156106b857600080fd5b506102c3600a5481565b3480156106ce57600080fd5b5061035d610ccc565b6060600380546106e690611a16565b80601f016020809104026020016040519081016040528092919081815260200182805461071290611a16565b801561075f5780601f106107345761010080835404028352916020019161075f565b820191906000526020600020905b81548152906001019060200180831161074257829003601f168201915b5050505050905090565b6000610776338484610d0b565b50600192915050565b600061078c848484610e2f565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156108165760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6108238533858403610d0b565b506001949350505050565b6005546001600160a01b031633146108585760405162461bcd60e51b815260040161080d90611a50565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146108ad5760405162461bcd60e51b815260040161080d90611a50565b600e8190556108c660c86108c060025490565b906112fe565b600e5410156109075760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b604482015260640161080d565b50565b6005546001600160a01b031633146109345760405162461bcd60e51b815260040161080d90611a50565b600f55565b6005546001600160a01b031633146109635760405162461bcd60e51b815260040161080d90611a50565b600f610979826109738686611311565b90611311565b11156109b65760405162461bcd60e51b815260206004820152600c60248201526b0e8c2f040e8dede40d0d2ced60a31b604482015260640161080d565b600792909255600855600955565b6060600480546106e690611a16565b6000610776338484610e2f565b6005546001600160a01b03163314610a0a5760405162461bcd60e51b815260040161080d90611a50565b6001600160a01b03821660009081526014602052604090205481151560ff909116151503610a8d5760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b606482015260840161080d565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610b165760405162461bcd60e51b815260040161080d90611a50565b600f610b26826109738686611311565b1115610b635760405162461bcd60e51b815260206004820152600c60248201526b0e8c2f040e8dede40d0d2ced60a31b604482015260640161080d565b600a92909255600b55600c55565b6005546001600160a01b03163314610b9b5760405162461bcd60e51b815260040161080d90611a50565b60068054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610be890831515815260200190565b60405180910390a150565b6005546001600160a01b03163314610c1d5760405162461bcd60e51b815260040161080d90611a50565b601280546001600160a01b039384166001600160a01b03199182161790915560138054929093169116179055565b6005546001600160a01b03163314610c755760405162461bcd60e51b815260040161080d90611a50565b600d819055610c8b633b9aca006108c060025490565b600d5410156109075760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b604482015260640161080d565b6005546001600160a01b03163314610cf65760405162461bcd60e51b815260040161080d90611a50565b6006805460ff60b01b1916600160b01b179055565b6001600160a01b038316610d6d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161080d565b6001600160a01b038216610dce5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161080d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610e555760405162461bcd60e51b815260040161080d90611a85565b6001600160a01b038216610e7b5760405162461bcd60e51b815260040161080d90611aca565b6001600160a01b03831660009081526014602052604081205460ff1680610eba57506001600160a01b03831660009081526014602052604090205460ff165b600654909150600160b01b900460ff1680610ed25750805b610f1e5760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206973206e6f7420796574204f70656e000000000000000000604482015260640161080d565b6001600160a01b03841660009081526011602052604090205460ff16158015610f6057506001600160a01b03831660009081526011602052604090205460ff16155b610fa25760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b604482015260640161080d565b81600003610fbc57610fb68484600061131d565b50505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614801561101657506001600160a01b03841660009081526014602052604090205460ff16155b801561103b57506001600160a01b03831660009081526014602052604090205460ff16155b156110c2576001600160a01b038316600090815260208190526040902054600e546110668483611b23565b11156110c05760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b606482015260840161080d565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316148015611101575080155b1561116957600d548211156111695760405162461bcd60e51b815260206004820152602860248201527f616d6f756e74206578636565647320746865206d61785472616e73616374696f6044820152673720b6b7bab73a1760c11b606482015260840161080d565b30600090815260208190526040902054600f54811080159081906111975750600654600160a01b900460ff16155b80156111d457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316145b80156111e95750600654600160a81b900460ff165b156111fc57600f5491506111fc82611471565b826112eb5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b03160361126b5761126860646108c061126160095461097360085460075461131190919063ffffffff16565b88906115e7565b90505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316036112cc576112c960646108c0611261600c54610973600b54600a5461131190919063ffffffff16565b90505b6112d685826115f3565b945080156112e9576112e987308361131d565b505b6112f686868661131d565b505050505050565b600061130a8284611b3b565b9392505050565b600061130a8284611b23565b6001600160a01b0383166113435760405162461bcd60e51b815260040161080d90611a85565b6001600160a01b0382166113695760405162461bcd60e51b815260040161080d90611aca565b6001600160a01b038316600090815260208190526040902054818110156113e15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161080d565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611418908490611b23565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161146491815260200190565b60405180910390a3610fb6565b6006805460ff60a01b1916600160a01b179055600c54600a54600b546000926114af926114a19261097391611311565b600a546108c09085906115e7565b905060006114be8260026112fe565b905060006114cc83836115f3565b9050476114d8836115ff565b60006114e447836115f3565b90506114f08382611782565b6115026114fd87876115f3565b6115ff565b601354600c54600b546001600160a01b03909216916108fc916115369161152891611311565b600c546108c09047906115e7565b6040518115909202916000818181858888f1935050505015801561155e573d6000803e3d6000fd5b506012546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611598573d6000803e3d6000fd5b5060408051858152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a150506006805460ff60a01b1916905550505050565b600061130a8284611b5d565b600061130a8284611b7c565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061163457611634611b93565b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561168d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b19190611ba9565b816001815181106116c4576116c4611b93565b6001600160a01b039283166020918202929092018101919091526010543060009081526001835260408082209290941681529152205482111561171b5760105461171b9030906001600160a01b0316600019610d0b565b60105460405163791ac94760e01b81526001600160a01b039091169063791ac94790611754908590600090869030904290600401611bc6565b600060405180830381600087803b15801561176e57600080fd5b505af11580156112f6573d6000803e3d6000fd5b6010546001600160a01b031663f305d7198230856000806117ab6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611813573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118389190611c37565b5050505050565b600060208083528351808285015260005b8181101561186c57858101830151858201604001528201611850565b8181111561187e576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461090757600080fd5b600080604083850312156118bc57600080fd5b82356118c781611894565b946020939093013593505050565b6000602082840312156118e757600080fd5b813561130a81611894565b60008060006060848603121561190757600080fd5b833561191281611894565b9250602084013561192281611894565b929592945050506040919091013590565b8035801515811461194357600080fd5b919050565b6000806040838503121561195b57600080fd5b823561196681611894565b915061197460208401611933565b90509250929050565b60006020828403121561198f57600080fd5b5035919050565b6000806000606084860312156119ab57600080fd5b505081359360208301359350604090920135919050565b6000602082840312156119d457600080fd5b61130a82611933565b600080604083850312156119f057600080fd5b82356119fb81611894565b91506020830135611a0b81611894565b809150509250929050565b600181811c90821680611a2a57607f821691505b602082108103611a4a57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611b3657611b36611b0d565b500190565b600082611b5857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611b7757611b77611b0d565b500290565b600082821015611b8e57611b8e611b0d565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611bbb57600080fd5b815161130a81611894565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611c165784516001600160a01b031683529383019391830191600101611bf1565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611c4c57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122054c0e3052d66913df46006ccdb3b021b463dfc1342f244328e646d14c6c1ef9c64736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102135760003560e01c80638da5cb5b11610118578063c49b9a80116100a0578063e6c75f711161006f578063e6c75f7114610656578063e8ba854f1461066c578063ec28438a1461068c578063f6374342146106ac578063fb201b1d146106c257600080fd5b8063c49b9a80146105c4578063c8c8ebe4146105e4578063dd62ed3e146105fa578063e2f456051461064057600080fd5b806398118cb4116100e757806398118cb414610538578063a0d82dc51461054e578063a9059cbb14610564578063c024666814610584578063c17b5b8c146105a457600080fd5b80638da5cb5b146104cf5780638ea5220f146104ed578063921369131461050d57806395d89b411461052357600080fd5b80634a74bb021161019b57806370a082311161016a57806370a0823114610419578063728d41c91461044f578063750c11b61461046f57806375f0a8741461048f5780638095d564146104af57600080fd5b80634a74bb02146103935780634fbee193146103b45780636827e764146103ed5780636b67c4df1461040357600080fd5b80631cdd3be3116101e25780631cdd3be3146102d157806323b872dd14610301578063313ce56714610321578063455a43961461033d57806349bd5a5e1461035f57600080fd5b806306fdde031461021f578063095ea7b31461024a5780631694505e1461027a57806318160ddd146102b257600080fd5b3661021a57005b600080fd5b34801561022b57600080fd5b506102346106d7565b604051610241919061183f565b60405180910390f35b34801561025657600080fd5b5061026a6102653660046118a9565b610769565b6040519015158152602001610241565b34801561028657600080fd5b5060105461029a906001600160a01b031681565b6040516001600160a01b039091168152602001610241565b3480156102be57600080fd5b506002545b604051908152602001610241565b3480156102dd57600080fd5b5061026a6102ec3660046118d5565b60116020526000908152604090205460ff1681565b34801561030d57600080fd5b5061026a61031c3660046118f2565b61077f565b34801561032d57600080fd5b5060405160128152602001610241565b34801561034957600080fd5b5061035d610358366004611948565b61082e565b005b34801561036b57600080fd5b5061029a7f000000000000000000000000c36bc5cecf7581ef7a7ec3e709536f5e28503ad281565b34801561039f57600080fd5b5060065461026a90600160a81b900460ff1681565b3480156103c057600080fd5b5061026a6103cf3660046118d5565b6001600160a01b031660009081526014602052604090205460ff1690565b3480156103f957600080fd5b506102c360095481565b34801561040f57600080fd5b506102c360085481565b34801561042557600080fd5b506102c36104343660046118d5565b6001600160a01b031660009081526020819052604090205490565b34801561045b57600080fd5b5061035d61046a36600461197d565b610883565b34801561047b57600080fd5b5061035d61048a36600461197d565b61090a565b34801561049b57600080fd5b5060125461029a906001600160a01b031681565b3480156104bb57600080fd5b5061035d6104ca366004611996565b610939565b3480156104db57600080fd5b506005546001600160a01b031661029a565b3480156104f957600080fd5b5060135461029a906001600160a01b031681565b34801561051957600080fd5b506102c3600b5481565b34801561052f57600080fd5b506102346109c4565b34801561054457600080fd5b506102c360075481565b34801561055a57600080fd5b506102c3600c5481565b34801561057057600080fd5b5061026a61057f3660046118a9565b6109d3565b34801561059057600080fd5b5061035d61059f366004611948565b6109e0565b3480156105b057600080fd5b5061035d6105bf366004611996565b610aec565b3480156105d057600080fd5b5061035d6105df3660046119c2565b610b71565b3480156105f057600080fd5b506102c3600d5481565b34801561060657600080fd5b506102c36106153660046119dd565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561064c57600080fd5b506102c3600f5481565b34801561066257600080fd5b506102c3600e5481565b34801561067857600080fd5b5061035d6106873660046119dd565b610bf3565b34801561069857600080fd5b5061035d6106a736600461197d565b610c4b565b3480156106b857600080fd5b506102c3600a5481565b3480156106ce57600080fd5b5061035d610ccc565b6060600380546106e690611a16565b80601f016020809104026020016040519081016040528092919081815260200182805461071290611a16565b801561075f5780601f106107345761010080835404028352916020019161075f565b820191906000526020600020905b81548152906001019060200180831161074257829003601f168201915b5050505050905090565b6000610776338484610d0b565b50600192915050565b600061078c848484610e2f565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156108165760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6108238533858403610d0b565b506001949350505050565b6005546001600160a01b031633146108585760405162461bcd60e51b815260040161080d90611a50565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146108ad5760405162461bcd60e51b815260040161080d90611a50565b600e8190556108c660c86108c060025490565b906112fe565b600e5410156109075760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b604482015260640161080d565b50565b6005546001600160a01b031633146109345760405162461bcd60e51b815260040161080d90611a50565b600f55565b6005546001600160a01b031633146109635760405162461bcd60e51b815260040161080d90611a50565b600f610979826109738686611311565b90611311565b11156109b65760405162461bcd60e51b815260206004820152600c60248201526b0e8c2f040e8dede40d0d2ced60a31b604482015260640161080d565b600792909255600855600955565b6060600480546106e690611a16565b6000610776338484610e2f565b6005546001600160a01b03163314610a0a5760405162461bcd60e51b815260040161080d90611a50565b6001600160a01b03821660009081526014602052604090205481151560ff909116151503610a8d5760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b606482015260840161080d565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610b165760405162461bcd60e51b815260040161080d90611a50565b600f610b26826109738686611311565b1115610b635760405162461bcd60e51b815260206004820152600c60248201526b0e8c2f040e8dede40d0d2ced60a31b604482015260640161080d565b600a92909255600b55600c55565b6005546001600160a01b03163314610b9b5760405162461bcd60e51b815260040161080d90611a50565b60068054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610be890831515815260200190565b60405180910390a150565b6005546001600160a01b03163314610c1d5760405162461bcd60e51b815260040161080d90611a50565b601280546001600160a01b039384166001600160a01b03199182161790915560138054929093169116179055565b6005546001600160a01b03163314610c755760405162461bcd60e51b815260040161080d90611a50565b600d819055610c8b633b9aca006108c060025490565b600d5410156109075760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b604482015260640161080d565b6005546001600160a01b03163314610cf65760405162461bcd60e51b815260040161080d90611a50565b6006805460ff60b01b1916600160b01b179055565b6001600160a01b038316610d6d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161080d565b6001600160a01b038216610dce5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161080d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610e555760405162461bcd60e51b815260040161080d90611a85565b6001600160a01b038216610e7b5760405162461bcd60e51b815260040161080d90611aca565b6001600160a01b03831660009081526014602052604081205460ff1680610eba57506001600160a01b03831660009081526014602052604090205460ff165b600654909150600160b01b900460ff1680610ed25750805b610f1e5760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206973206e6f7420796574204f70656e000000000000000000604482015260640161080d565b6001600160a01b03841660009081526011602052604090205460ff16158015610f6057506001600160a01b03831660009081526011602052604090205460ff16155b610fa25760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b604482015260640161080d565b81600003610fbc57610fb68484600061131d565b50505050565b7f000000000000000000000000c36bc5cecf7581ef7a7ec3e709536f5e28503ad26001600160a01b0316846001600160a01b031614801561101657506001600160a01b03841660009081526014602052604090205460ff16155b801561103b57506001600160a01b03831660009081526014602052604090205460ff16155b156110c2576001600160a01b038316600090815260208190526040902054600e546110668483611b23565b11156110c05760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b606482015260840161080d565b505b7f000000000000000000000000c36bc5cecf7581ef7a7ec3e709536f5e28503ad26001600160a01b0316836001600160a01b0316148015611101575080155b1561116957600d548211156111695760405162461bcd60e51b815260206004820152602860248201527f616d6f756e74206578636565647320746865206d61785472616e73616374696f6044820152673720b6b7bab73a1760c11b606482015260840161080d565b30600090815260208190526040902054600f54811080159081906111975750600654600160a01b900460ff16155b80156111d457507f000000000000000000000000c36bc5cecf7581ef7a7ec3e709536f5e28503ad26001600160a01b0316856001600160a01b0316145b80156111e95750600654600160a81b900460ff165b156111fc57600f5491506111fc82611471565b826112eb5760007f000000000000000000000000c36bc5cecf7581ef7a7ec3e709536f5e28503ad26001600160a01b0316876001600160a01b03160361126b5761126860646108c061126160095461097360085460075461131190919063ffffffff16565b88906115e7565b90505b7f000000000000000000000000c36bc5cecf7581ef7a7ec3e709536f5e28503ad26001600160a01b0316866001600160a01b0316036112cc576112c960646108c0611261600c54610973600b54600a5461131190919063ffffffff16565b90505b6112d685826115f3565b945080156112e9576112e987308361131d565b505b6112f686868661131d565b505050505050565b600061130a8284611b3b565b9392505050565b600061130a8284611b23565b6001600160a01b0383166113435760405162461bcd60e51b815260040161080d90611a85565b6001600160a01b0382166113695760405162461bcd60e51b815260040161080d90611aca565b6001600160a01b038316600090815260208190526040902054818110156113e15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161080d565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611418908490611b23565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161146491815260200190565b60405180910390a3610fb6565b6006805460ff60a01b1916600160a01b179055600c54600a54600b546000926114af926114a19261097391611311565b600a546108c09085906115e7565b905060006114be8260026112fe565b905060006114cc83836115f3565b9050476114d8836115ff565b60006114e447836115f3565b90506114f08382611782565b6115026114fd87876115f3565b6115ff565b601354600c54600b546001600160a01b03909216916108fc916115369161152891611311565b600c546108c09047906115e7565b6040518115909202916000818181858888f1935050505015801561155e573d6000803e3d6000fd5b506012546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611598573d6000803e3d6000fd5b5060408051858152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a150506006805460ff60a01b1916905550505050565b600061130a8284611b5d565b600061130a8284611b7c565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061163457611634611b93565b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561168d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b19190611ba9565b816001815181106116c4576116c4611b93565b6001600160a01b039283166020918202929092018101919091526010543060009081526001835260408082209290941681529152205482111561171b5760105461171b9030906001600160a01b0316600019610d0b565b60105460405163791ac94760e01b81526001600160a01b039091169063791ac94790611754908590600090869030904290600401611bc6565b600060405180830381600087803b15801561176e57600080fd5b505af11580156112f6573d6000803e3d6000fd5b6010546001600160a01b031663f305d7198230856000806117ab6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611813573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118389190611c37565b5050505050565b600060208083528351808285015260005b8181101561186c57858101830151858201604001528201611850565b8181111561187e576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461090757600080fd5b600080604083850312156118bc57600080fd5b82356118c781611894565b946020939093013593505050565b6000602082840312156118e757600080fd5b813561130a81611894565b60008060006060848603121561190757600080fd5b833561191281611894565b9250602084013561192281611894565b929592945050506040919091013590565b8035801515811461194357600080fd5b919050565b6000806040838503121561195b57600080fd5b823561196681611894565b915061197460208401611933565b90509250929050565b60006020828403121561198f57600080fd5b5035919050565b6000806000606084860312156119ab57600080fd5b505081359360208301359350604090920135919050565b6000602082840312156119d457600080fd5b61130a82611933565b600080604083850312156119f057600080fd5b82356119fb81611894565b91506020830135611a0b81611894565b809150509250929050565b600181811c90821680611a2a57607f821691505b602082108103611a4a57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611b3657611b36611b0d565b500190565b600082611b5857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611b7757611b77611b0d565b500290565b600082821015611b8e57611b8e611b0d565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611bbb57600080fd5b815161130a81611894565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611c165784516001600160a01b031683529383019391830191600101611bf1565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611c4c57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122054c0e3052d66913df46006ccdb3b021b463dfc1342f244328e646d14c6c1ef9c64736f6c634300080f0033

Deployed Bytecode Sourcemap

29431:9149:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3288:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4923:169;;;;;;;;;;-1:-1:-1;4923:169:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;4923:169:0;1072:187:1;30046:41:0;;;;;;;;;;-1:-1:-1;30046:41:0;;;;-1:-1:-1;;;;;30046:41:0;;;;;;-1:-1:-1;;;;;1454:32:1;;;1436:51;;1424:2;1409:18;30046:41:0;1264:229:1;3876:108:0;;;;;;;;;;-1:-1:-1;3964:12:0;;3876:108;;;1644:25:1;;;1632:2;1617:18;3876:108:0;1498:177:1;30141:46:0;;;;;;;;;;-1:-1:-1;30141:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5317:492;;;;;;;;;;-1:-1:-1;5317:492:0;;;;;:::i;:::-;;:::i;3718:93::-;;;;;;;;;;-1:-1:-1;3718:93:0;;3801:2;2535:36:1;;2523:2;2508:18;3718:93:0;2393:184:1;38405:123:0;;;;;;;;;;-1:-1:-1;38405:123:0;;;;;:::i;:::-;;:::i;:::-;;30094:38;;;;;;;;;;;;;;;29547:40;;;;;;;;;;-1:-1:-1;29547:40:0;;;;-1:-1:-1;;;29547:40:0;;;;;;36658:125;;;;;;;;;;-1:-1:-1;36658:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;36747:28:0;36723:4;36747:28;;;:19;:28;;;;;;;;;36658:125;29706:25;;;;;;;;;;;;;;;;29668:31;;;;;;;;;;;;;;;;4047:127;;;;;;;;;;-1:-1:-1;4047:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;4148:18:0;4121:7;4148:18;;;;;;;;;;;;4047:127;36871:185;;;;;;;;;;-1:-1:-1;36871:185:0;;;;;:::i;:::-;;:::i;38099:119::-;;;;;;;;;;-1:-1:-1;38099:119:0;;;;;:::i;:::-;;:::i;30196:92::-;;;;;;;;;;-1:-1:-1;30196:92:0;;;;-1:-1:-1;;;;;30196:92:0;;;37267:303;;;;;;;;;;-1:-1:-1;37267:303:0;;;;;:::i;:::-;;:::i;2387:79::-;;;;;;;;;;-1:-1:-1;2452:6:0;;-1:-1:-1;;;;;2452:6:0;2387:79;;30296:86;;;;;;;;;;-1:-1:-1;30296:86:0;;;;-1:-1:-1;;;;;30296:86:0;;;29780:35;;;;;;;;;;;;;;;;3507:104;;;;;;;;;;;;;:::i;29630:31::-;;;;;;;;;;;;;;;;29822:29;;;;;;;;;;;;;;;;4387:175;;;;;;;;;;-1:-1:-1;4387:175:0;;;;;:::i;:::-;;:::i;36358:288::-;;;;;;;;;;-1:-1:-1;36358:288:0;;;;;:::i;:::-;;:::i;37579:316::-;;;;;;;;;;-1:-1:-1;37579:316:0;;;;;:::i;:::-;;:::i;38226:171::-;;;;;;;;;;-1:-1:-1;38226:171:0;;;;;:::i;:::-;;:::i;29858:59::-;;;;;;;;;;;;;;;;4625:151;;;;;;;;;;-1:-1:-1;4625:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4741:18:0;;;4714:7;4741:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4625:151;29984:53;;;;;;;;;;;;;;;;29924;;;;;;;;;;;;;;;;37903:188;;;;;;;;;;-1:-1:-1;37903:188:0;;;;;:::i;:::-;;:::i;37064:195::-;;;;;;;;;;-1:-1:-1;37064:195:0;;;;;:::i;:::-;;:::i;29738:35::-;;;;;;;;;;;;;;;;36791:72;;;;;;;;;;;;;:::i;3288:100::-;3342:13;3375:5;3368:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3288:100;:::o;4923:169::-;5006:4;5023:39;1535:10;5046:7;5055:6;5023:8;:39::i;:::-;-1:-1:-1;5080:4:0;4923:169;;;;:::o;5317:492::-;5457:4;5474:36;5484:6;5492:9;5503:6;5474:9;:36::i;:::-;-1:-1:-1;;;;;5550:19:0;;5523:24;5550:19;;;:11;:19;;;;;;;;1535:10;5550:33;;;;;;;;5602:26;;;;5594:79;;;;-1:-1:-1;;;5594:79:0;;5579:2:1;5594:79:0;;;5561:21:1;5618:2;5598:18;;;5591:30;5657:34;5637:18;;;5630:62;-1:-1:-1;;;5708:18:1;;;5701:38;5756:19;;5594:79:0;;;;;;;;;5709:57;5718:6;1535:10;5759:6;5740:16;:25;5709:8;:57::i;:::-;-1:-1:-1;5797:4:0;;5317:492;-1:-1:-1;;;;5317:492:0:o;38405:123::-;2599:6;;-1:-1:-1;;;;;2599:6:0;1535:10;2599:22;2591:67;;;;-1:-1:-1;;;2591:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38489:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;38489:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38405:123::o;36871:185::-;2599:6;;-1:-1:-1;;;;;2599:6:0;1535:10;2599:22;2591:67;;;;-1:-1:-1;;;2591:67:0;;;;;;;:::i;:::-;36945:14:::1;:26:::0;;;37008:22:::1;37026:3;37008:13;3964:12:::0;;;3876:108;37008:13:::1;:17:::0;::::1;:22::i;:::-;36990:14;;:40;;36982:66;;;::::0;-1:-1:-1;;;36982:66:0;;6349:2:1;36982:66:0::1;::::0;::::1;6331:21:1::0;6388:2;6368:18;;;6361:30;-1:-1:-1;;;6407:18:1;;;6400:43;6460:18;;36982:66:0::1;6147:337:1::0;36982:66:0::1;36871:185:::0;:::o;38099:119::-;2599:6;;-1:-1:-1;;;;;2599:6:0;1535:10;2599:22;2591:67;;;;-1:-1:-1;;;2591:67:0;;;;;;;:::i;:::-;38179:18:::1;:31:::0;38099:119::o;37267:303::-;2599:6;;-1:-1:-1;;;;;2599:6:0;1535:10;2599:22;2591:67;;;;-1:-1:-1;;;2591:67:0;;;;;;;:::i;:::-;37438:2:::1;37389:45;37426:7:::0;37389:32:::1;:13:::0;37407;37389:17:::1;:32::i;:::-;:36:::0;::::1;:45::i;:::-;:51;;37381:76;;;::::0;-1:-1:-1;;;37381:76:0;;6691:2:1;37381:76:0::1;::::0;::::1;6673:21:1::0;6730:2;6710:18;;;6703:30;-1:-1:-1;;;6749:18:1;;;6742:42;6801:18;;37381:76:0::1;6489:336:1::0;37381:76:0::1;37468:12;:28:::0;;;;37507:12:::1;:28:::0;37546:6:::1;:16:::0;37267:303::o;3507:104::-;3563:13;3596:7;3589:14;;;;;:::i;4387:175::-;4473:4;4490:42;1535:10;4514:9;4525:6;4490:9;:42::i;36358:288::-;2599:6;;-1:-1:-1;;;;;2599:6:0;1535:10;2599:22;2591:67;;;;-1:-1:-1;;;2591:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36451:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;36443:95:::1;;;::::0;-1:-1:-1;;;36443:95:0;;7032:2:1;36443:95:0::1;::::0;::::1;7014:21:1::0;7071:2;7051:18;;;7044:30;7110:34;7090:18;;;7083:62;-1:-1:-1;;;7161:18:1;;;7154:40;7211:19;;36443:95:0::1;6830:406:1::0;36443:95:0::1;-1:-1:-1::0;;;;;36549:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;36549:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;36604:34;;1212:41:1;;;36604:34:0::1;::::0;1185:18:1;36604:34:0::1;;;;;;;36358:288:::0;;:::o;37579:316::-;2599:6;;-1:-1:-1;;;;;2599:6:0;1535:10;2599:22;2591:67;;;;-1:-1:-1;;;2591:67:0;;;;;;;:::i;:::-;37751:2:::1;37702:45;37739:7:::0;37702:32:::1;:13:::0;37720;37702:17:::1;:32::i;:45::-;:51;;37694:76;;;::::0;-1:-1:-1;;;37694:76:0;;6691:2:1;37694:76:0::1;::::0;::::1;6673:21:1::0;6730:2;6710:18;;;6703:30;-1:-1:-1;;;6749:18:1;;;6742:42;6801:18;;37694:76:0::1;6489:336:1::0;37694:76:0::1;37781:16;:32:::0;;;;37824:16:::1;:32:::0;37867:10:::1;:20:::0;37579:316::o;38226:171::-;2599:6;;-1:-1:-1;;;;;2599:6:0;1535:10;2599:22;2591:67;;;;-1:-1:-1;;;2591:67:0;;;;;;;:::i;:::-;38303:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;38303:32:0::1;-1:-1:-1::0;;;;38303:32:0;;::::1;;::::0;;38351:38:::1;::::0;::::1;::::0;::::1;::::0;38327:8;1237:14:1;1230:22;1212:41;;1200:2;1185:18;;1072:187;38351:38:0::1;;;;;;;;38226:171:::0;:::o;37903:188::-;2599:6;;-1:-1:-1;;;;;2599:6:0;1535:10;2599:22;2591:67;;;;-1:-1:-1;;;2591:67:0;;;;;;;:::i;:::-;38016:15:::1;:34:::0;;-1:-1:-1;;;;;38016:34:0;;::::1;-1:-1:-1::0;;;;;;38016:34:0;;::::1;;::::0;;;38061:9:::1;:22:::0;;;;;::::1;::::0;::::1;;::::0;;37903:188::o;37064:195::-;2599:6;;-1:-1:-1;;;;;2599:6:0;1535:10;2599:22;2591:67;;;;-1:-1:-1;;;2591:67:0;;;;;;;:::i;:::-;37132:20:::1;:29:::0;;;37204::::1;37222:10;37204:13;3964:12:::0;;;3876:108;37204:29:::1;37180:20;;:53;;37172:79;;;::::0;-1:-1:-1;;;37172:79:0;;6349:2:1;37172:79:0::1;::::0;::::1;6331:21:1::0;6388:2;6368:18;;;6361:30;-1:-1:-1;;;6407:18:1;;;6400:43;6460:18;;37172:79:0::1;6147:337:1::0;36791:72:0;2599:6;;-1:-1:-1;;;;;2599:6:0;1535:10;2599:22;2591:67;;;;-1:-1:-1;;;2591:67:0;;;;;;;:::i;:::-;36842:6:::1;:13:::0;;-1:-1:-1;;;;36842:13:0::1;-1:-1:-1::0;;;36842:13:0::1;::::0;;36791:72::o;7257:380::-;-1:-1:-1;;;;;7393:19:0;;7385:68;;;;-1:-1:-1;;;7385:68:0;;7443:2:1;7385:68:0;;;7425:21:1;7482:2;7462:18;;;7455:30;7521:34;7501:18;;;7494:62;-1:-1:-1;;;7572:18:1;;;7565:34;7616:19;;7385:68:0;7241:400:1;7385:68:0;-1:-1:-1;;;;;7472:21:0;;7464:68;;;;-1:-1:-1;;;7464:68:0;;7848:2:1;7464:68:0;;;7830:21:1;7887:2;7867:18;;;7860:30;7926:34;7906:18;;;7899:62;-1:-1:-1;;;7977:18:1;;;7970:32;8019:19;;7464:68:0;7646:398:1;7464:68:0;-1:-1:-1;;;;;7545:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7597:32;;1644:25:1;;;7597:32:0;;1617:18:1;7597:32:0;;;;;;;7257:380;;;:::o;31801:2120::-;-1:-1:-1;;;;;31933:18:0;;31925:68;;;;-1:-1:-1;;;31925:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32012:16:0;;32004:64;;;;-1:-1:-1;;;32004:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32102:25:0;;32079:20;32102:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;32131:23:0;;;;;;:19;:23;;;;;;;;32102:52;32173:6;;32079:75;;-1:-1:-1;;;;32173:6:0;;;;;:25;;;32183:15;32173:25;32165:61;;;;-1:-1:-1;;;32165:61:0;;9061:2:1;32165:61:0;;;9043:21:1;9100:2;9080:18;;;9073:30;9139:25;9119:18;;;9112:53;9182:18;;32165:61:0;8859:347:1;32165:61:0;-1:-1:-1;;;;;32246:20:0;;;;;;:14;:20;;;;;;;;32245:21;:44;;;;-1:-1:-1;;;;;;32271:18:0;;;;;;:14;:18;;;;;;;;32270:19;32245:44;32237:76;;;;-1:-1:-1;;;32237:76:0;;9413:2:1;32237:76:0;;;9395:21:1;9452:2;9432:18;;;9425:30;-1:-1:-1;;;9471:18:1;;;9464:49;9530:18;;32237:76:0;9211:343:1;32237:76:0;32329:6;32339:1;32329:11;32326:92;;32357:28;32373:4;32379:2;32383:1;32357:15;:28::i;:::-;32400:7;31801:2120;;;:::o;32326:92::-;32440:13;-1:-1:-1;;;;;32434:19:0;:4;-1:-1:-1;;;;;32434:19:0;;:49;;;;-1:-1:-1;;;;;;32458:25:0;;;;;;:19;:25;;;;;;;;32457:26;32434:49;:77;;;;-1:-1:-1;;;;;;32488:23:0;;;;;;:19;:23;;;;;;;;32487:24;32434:77;32431:271;;;-1:-1:-1;;;;;4148:18:0;;32527:32;4148:18;;;;;;;;;;;32635:14;;32598:33;32625:6;4148:18;32598:33;:::i;:::-;:51;;32590:100;;;;-1:-1:-1;;;32590:100:0;;10026:2:1;32590:100:0;;;10008:21:1;10065:2;10045:18;;;10038:30;10104:34;10084:18;;;10077:62;-1:-1:-1;;;10155:18:1;;;10148:34;10199:19;;32590:100:0;9824:400:1;32590:100:0;32512:190;32431:271;32729:13;-1:-1:-1;;;;;32725:17:0;:2;-1:-1:-1;;;;;32725:17:0;;:37;;;;;32747:15;32746:16;32725:37;32722:152;;;32797:20;;32787:6;:30;;32779:83;;;;-1:-1:-1;;;32779:83:0;;10431:2:1;32779:83:0;;;10413:21:1;10470:2;10450:18;;;10443:30;10509:34;10489:18;;;10482:62;-1:-1:-1;;;10560:18:1;;;10553:38;10608:19;;32779:83:0;10229:404:1;32779:83:0;32940:4;32891:28;4148:18;;;;;;;;;;;33018;;32994:42;;;;;;;33059:40;;-1:-1:-1;33083:16:0;;-1:-1:-1;;;33083:16:0;;;;33082:17;33059:40;:61;;;;;33107:13;-1:-1:-1;;;;;33103:17:0;:2;-1:-1:-1;;;;;33103:17:0;;33059:61;:86;;;;-1:-1:-1;33124:21:0;;-1:-1:-1;;;33124:21:0;;;;33059:86;33056:212;;;33185:18;;33162:41;;33218:36;33233:20;33218:14;:36::i;:::-;33370:15;33366:500;;33402:12;33438:13;-1:-1:-1;;;;;33432:19:0;:4;-1:-1:-1;;;;;33432:19:0;;33429:128;;33478:63;33537:3;33478:54;33489:42;33524:6;;33489:30;33506:12;;33489;;:16;;:30;;;;:::i;:42::-;33478:6;;:10;:54::i;:63::-;33470:71;;33429:128;33580:13;-1:-1:-1;;;;;33576:17:0;:2;-1:-1:-1;;;;;33576:17:0;;33573:138;;33620:75;33691:3;33620:66;33631:54;33674:10;;33631:38;33652:16;;33631;;:20;;:38;;;;:::i;33620:75::-;33612:83;;33573:138;33733:16;:6;33744:4;33733:10;:16::i;:::-;33724:25;-1:-1:-1;33767:8:0;;33764:91;;33796:42;33812:4;33826;33833;33796:15;:42::i;:::-;33387:479;33366:500;33878:33;33894:4;33900:2;33904:6;33878:15;:33::i;:::-;31914:2007;;;31801:2120;;;:::o;19082:98::-;19140:7;19167:5;19171:1;19167;:5;:::i;:::-;19160:12;19082:98;-1:-1:-1;;;19082:98:0:o;17945:::-;18003:7;18030:5;18034:1;18030;:5;:::i;5907:733::-;-1:-1:-1;;;;;6047:20:0;;6039:70;;;;-1:-1:-1;;;6039:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6128:23:0;;6120:71;;;;-1:-1:-1;;;6120:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6288:17:0;;6264:21;6288:17;;;;;;;;;;;6324:23;;;;6316:74;;;;-1:-1:-1;;;6316:74:0;;11062:2:1;6316:74:0;;;11044:21:1;11101:2;11081:18;;;11074:30;11140:34;11120:18;;;11113:62;-1:-1:-1;;;11191:18:1;;;11184:36;11237:19;;6316:74:0;10860:402:1;6316:74:0;-1:-1:-1;;;;;6426:17:0;;;:9;:17;;;;;;;;;;;6446:22;;;6426:42;;6490:20;;;;;;;;:30;;6462:6;;6426:9;6490:30;;6462:6;;6490:30;:::i;:::-;;;;;;;;6555:9;-1:-1:-1;;;;;6538:35:0;6547:6;-1:-1:-1;;;;;6538:35:0;;6566:6;6538:35;;;;1644:25:1;;1632:2;1617:18;;1498:177;6538:35:0;;;;;;;;6586:46;7726:125;33930:1330;30538:16;:23;;-1:-1:-1;;;;30538:23:0;-1:-1:-1;;;30538:23:0;;;34134:10:::1;::::0;34112:16:::1;::::0;34091::::1;::::0;30538:23;;34044:102:::1;::::0;34091:54:::1;::::0;:38:::1;::::0;:20:::1;:38::i;:54::-;34069:16;::::0;34044:42:::1;::::0;:20;;:24:::1;:42::i;:102::-;34015:131:::0;-1:-1:-1;34215:12:0::1;34230:25;34015:131:::0;34253:1:::1;34230:22;:25::i;:::-;34215:40:::0;-1:-1:-1;34266:17:0::1;34286:28;:18:::0;34215:40;34286:22:::1;:28::i;:::-;34266:48:::0;-1:-1:-1;34617:21:0::1;34683:22;34700:4:::0;34683:16:::1;:22::i;:::-;34767:18;34788:41;:21;34814:14:::0;34788:25:::1;:41::i;:::-;34767:62;;34879:35;34892:9;34903:10;34879:12;:35::i;:::-;34968:62;34985:44;:20:::0;35010:18;34985:24:::1;:44::i;:::-;34968:16;:62::i;:::-;35041:9;::::0;35123:10:::1;::::0;35102:16:::1;::::0;-1:-1:-1;;;;;35041:9:0;;::::1;::::0;:95:::1;::::0;35060:75:::1;::::0;35102:32:::1;::::0;:20:::1;:32::i;:::-;35086:10;::::0;35060:37:::1;::::0;:21:::1;::::0;:25:::1;:37::i;:75::-;35041:95;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;35147:15:0::1;::::0;:47:::1;::::0;-1:-1:-1;;;;;35147:15:0;;::::1;::::0;35172:21:::1;35147:47:::0;::::1;;;::::0;:15:::1;:47:::0;:15;:47;35172:21;35147:15;:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;35219:32:0::1;::::0;;11441:25:1;;;11497:2;11482:18;;11475:34;;;35219:32:0::1;::::0;11414:18:1;35219:32:0::1;;;;;;;-1:-1:-1::0;;30584:16:0;:24;;-1:-1:-1;;;;30584:24:0;;;-1:-1:-1;;;;33930:1330:0:o;18683:98::-;18741:7;18768:5;18772:1;18768;:5;:::i;18326:98::-;18384:7;18411:5;18415:1;18411;:5;:::i;35268:692::-;35418:16;;;35432:1;35418:16;;;;;;;;35394:21;;35418:16;;;;;;;;;;-1:-1:-1;35418:16:0;35394:40;;35463:4;35445;35450:1;35445:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35445:23:0;;;:7;;;;;;;;;;:23;;;;35489:15;;:22;;;-1:-1:-1;;;35489:22:0;;;;:15;;;;;:20;;:22;;;;;35445:7;;35489:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35479:4;35484:1;35479:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35479:32:0;;;:7;;;;;;;;;;:32;;;;35560:15;;35545:4;4714:7;4741:18;;;:11;:18;;;;;;35560:15;;;;4741:27;;;;;;35580:11;-1:-1:-1;35524:156:0;;;35638:15;;35606:62;;35623:4;;-1:-1:-1;;;;;35638:15:0;-1:-1:-1;;35606:8:0;:62::i;:::-;35718:15;;:224;;-1:-1:-1;;;35718:224:0;;-1:-1:-1;;;;;35718:15:0;;;;:66;;:224;;35799:11;;35718:15;;35869:4;;35896;;35916:15;;35718:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35968:381;36079:15;;-1:-1:-1;;;;;36079:15:0;:31;36118:9;36151:4;36171:11;36079:15;;36283:7;2452:6;;-1:-1:-1;;;;;2452:6:0;;2387:79;36283:7;36079:252;;;;;;-1:-1:-1;;;;;;36079:252:0;;;-1:-1:-1;;;;;13687:15:1;;;36079:252:0;;;13669:34:1;13719:18;;;13712:34;;;;13762:18;;;13755:34;;;;13805:18;;;13798:34;13869:15;;;13848:19;;;13841:44;36305:15:0;13901:19:1;;;13894:35;13603:19;;36079:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;35968:381;;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1680:247::-;1739:6;1792:2;1780:9;1771:7;1767:23;1763:32;1760:52;;;1808:1;1805;1798:12;1760:52;1847:9;1834:23;1866:31;1891:5;1866:31;:::i;1932:456::-;2009:6;2017;2025;2078:2;2066:9;2057:7;2053:23;2049:32;2046:52;;;2094:1;2091;2084:12;2046:52;2133:9;2120:23;2152:31;2177:5;2152:31;:::i;:::-;2202:5;-1:-1:-1;2259:2:1;2244:18;;2231:32;2272:33;2231:32;2272:33;:::i;:::-;1932:456;;2324:7;;-1:-1:-1;;;2378:2:1;2363:18;;;;2350:32;;1932:456::o;2582:160::-;2647:20;;2703:13;;2696:21;2686:32;;2676:60;;2732:1;2729;2722:12;2676:60;2582:160;;;:::o;2747:315::-;2812:6;2820;2873:2;2861:9;2852:7;2848:23;2844:32;2841:52;;;2889:1;2886;2879:12;2841:52;2928:9;2915:23;2947:31;2972:5;2947:31;:::i;:::-;2997:5;-1:-1:-1;3021:35:1;3052:2;3037:18;;3021:35;:::i;:::-;3011:45;;2747:315;;;;;:::o;3275:180::-;3334:6;3387:2;3375:9;3366:7;3362:23;3358:32;3355:52;;;3403:1;3400;3393:12;3355:52;-1:-1:-1;3426:23:1;;3275:180;-1:-1:-1;3275:180:1:o;3684:316::-;3761:6;3769;3777;3830:2;3818:9;3809:7;3805:23;3801:32;3798:52;;;3846:1;3843;3836:12;3798:52;-1:-1:-1;;3869:23:1;;;3939:2;3924:18;;3911:32;;-1:-1:-1;3990:2:1;3975:18;;;3962:32;;3684:316;-1:-1:-1;3684:316:1:o;4005:180::-;4061:6;4114:2;4102:9;4093:7;4089:23;4085:32;4082:52;;;4130:1;4127;4120:12;4082:52;4153:26;4169:9;4153:26;:::i;4190:388::-;4258:6;4266;4319:2;4307:9;4298:7;4294:23;4290:32;4287:52;;;4335:1;4332;4325:12;4287:52;4374:9;4361:23;4393:31;4418:5;4393:31;:::i;:::-;4443:5;-1:-1:-1;4500:2:1;4485:18;;4472:32;4513:33;4472:32;4513:33;:::i;:::-;4565:7;4555:17;;;4190:388;;;;;:::o;4992:380::-;5071:1;5067:12;;;;5114;;;5135:61;;5189:4;5181:6;5177:17;5167:27;;5135:61;5242:2;5234:6;5231:14;5211:18;5208:38;5205:161;;5288:10;5283:3;5279:20;5276:1;5269:31;5323:4;5320:1;5313:15;5351:4;5348:1;5341:15;5205:161;;4992:380;;;:::o;5786:356::-;5988:2;5970:21;;;6007:18;;;6000:30;6066:34;6061:2;6046:18;;6039:62;6133:2;6118:18;;5786:356::o;8049:401::-;8251:2;8233:21;;;8290:2;8270:18;;;8263:30;8329:34;8324:2;8309:18;;8302:62;-1:-1:-1;;;8395:2:1;8380:18;;8373:35;8440:3;8425:19;;8049:401::o;8455:399::-;8657:2;8639:21;;;8696:2;8676:18;;;8669:30;8735:34;8730:2;8715:18;;8708:62;-1:-1:-1;;;8801:2:1;8786:18;;8779:33;8844:3;8829:19;;8455:399::o;9559:127::-;9620:10;9615:3;9611:20;9608:1;9601:31;9651:4;9648:1;9641:15;9675:4;9672:1;9665:15;9691:128;9731:3;9762:1;9758:6;9755:1;9752:13;9749:39;;;9768:18;;:::i;:::-;-1:-1:-1;9804:9:1;;9691:128::o;10638:217::-;10678:1;10704;10694:132;;10748:10;10743:3;10739:20;10736:1;10729:31;10783:4;10780:1;10773:15;10811:4;10808:1;10801:15;10694:132;-1:-1:-1;10840:9:1;;10638:217::o;11520:168::-;11560:7;11626:1;11622;11618:6;11614:14;11611:1;11608:21;11603:1;11596:9;11589:17;11585:45;11582:71;;;11633:18;;:::i;:::-;-1:-1:-1;11673:9:1;;11520:168::o;11693:125::-;11733:4;11761:1;11758;11755:8;11752:34;;;11766:18;;:::i;:::-;-1:-1:-1;11803:9:1;;11693:125::o;11955:127::-;12016:10;12011:3;12007:20;12004:1;11997:31;12047:4;12044:1;12037:15;12071:4;12068:1;12061:15;12087:251;12157:6;12210:2;12198:9;12189:7;12185:23;12181:32;12178:52;;;12226:1;12223;12216:12;12178:52;12258:9;12252:16;12277:31;12302:5;12277:31;:::i;12343:980::-;12605:4;12653:3;12642:9;12638:19;12684:6;12673:9;12666:25;12710:2;12748:6;12743:2;12732:9;12728:18;12721:34;12791:3;12786:2;12775:9;12771:18;12764:31;12815:6;12850;12844:13;12881:6;12873;12866:22;12919:3;12908:9;12904:19;12897:26;;12958:2;12950:6;12946:15;12932:29;;12979:1;12989:195;13003:6;13000:1;12997:13;12989:195;;;13068:13;;-1:-1:-1;;;;;13064:39:1;13052:52;;13159:15;;;;13124:12;;;;13100:1;13018:9;12989:195;;;-1:-1:-1;;;;;;;13240:32:1;;;;13235:2;13220:18;;13213:60;-1:-1:-1;;;13304:3:1;13289:19;13282:35;13201:3;12343:980;-1:-1:-1;;;12343:980:1:o;13940:306::-;14028:6;14036;14044;14097:2;14085:9;14076:7;14072:23;14068:32;14065:52;;;14113:1;14110;14103:12;14065:52;14142:9;14136:16;14126:26;;14192:2;14181:9;14177:18;14171:25;14161:35;;14236:2;14225:9;14221:18;14215:25;14205:35;;13940:306;;;;;:::o

Swarm Source

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