ETH Price: $2,430.04 (-2.42%)

Token

Hiroki (HIRO)
 

Overview

Max Total Supply

1,100,265,172,738,775.607261246325989585 HIRO

Holders

89

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 HIRO

Value
$0.00
0xfa9edba55314dd71f8a31ec31c684bffa4b7cd0b
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:
Hiroki

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Apache-2.0 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-01
*/

// SPDX-License-Identifier: Apache-2.0

//* Telegram group: https://t.me/HirokiCommunity
pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

interface IDexFactory {
    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;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IDexRouter {
    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);

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

contract MintableERC20 is ERC20, Ownable {
    event Burn(address account, uint amount);

    mapping(address => bool) isMinters;
    modifier onlyMinter() {
        require(isMinters[msg.sender], "Permission denied");
        _;
    }

    function setMinter(address to, bool isMinter) external onlyOwner {
        isMinters[to] = isMinter;
    }

    constructor(
        uint initialSupply,
        string memory name,
        string memory symbol
    ) ERC20(name, symbol) {
        _mint(msg.sender, initialSupply);
    }

    // mint and burn
    function mint(address to, uint amount) external onlyMinter {
        _mint(to, amount);
    }

    function burn(uint amount) external {
        _burn(msg.sender, amount);
        emit Burn(msg.sender, amount);
    }
}

contract Hiroki is MintableERC20 {
    // tax
    uint FeeDecimals = 1000000;
    struct Fee {
        uint marketing_fee;
        uint NFT_fee;
        uint team_fee;
        uint reserve_fee;
        uint reward_fee;
        uint auto_lp;
    }
    struct FeeWallet {
        address marketing;
        address nft;
        address team;
        address reserve;
    }

    Fee public sellFees;
    Fee public buyFees;
    FeeWallet public feeWallets;

    uint autoLPPercent;
    uint rewardPercent;

    mapping(address => bool) public isExcludeFromFee;
    mapping(address => bool) public isExcludeFromMaxWallet;

    // WL
    mapping(address => bool) public isOnWL;
    bool public isOnPresale;

    // tx limit
    uint public _maxTxAmount = 1e6 * 1e18;
    uint public _maxAmountPerWallet = 1e12 * 1e18;
    uint public _numTokensSellToAddToLiquidity = 1e2 * 1e18;
    bool public _swapAndLiquifyEnabled = true;

    // exchange info
    IDexRouter public DexRouter;
    address public DexPair;

    //swap
    bool inSwapAndLiquify;
    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    // old hiroki contract
    address oldContractAddress;

    constructor(
        string memory name,
        string memory symbol,
        uint initialSupply,
        address _RouterAddress
    ) MintableERC20(initialSupply, name, symbol) {
        IDexRouter _DexRouter = IDexRouter(_RouterAddress);
        DexRouter = _DexRouter;
        DexPair = IDexFactory(_DexRouter.factory()).createPair(
            address(this),
            _DexRouter.WETH()
        ); //MD vs USDT pair
        isExcludeFromMaxWallet[DexPair] = true;
        isOnPresale = true;
        isOnWL[msg.sender] = true;
        _swapAndLiquifyEnabled = false;
        isOnWL[msg.sender] = true;
        isOnWL[address(this)] = true;
    }

    function setFees(Fee calldata _sellFees, Fee calldata _buyFees)
        external
        onlyOwner
    {
        sellFees.marketing_fee = _sellFees.marketing_fee;
        sellFees.NFT_fee = _sellFees.NFT_fee;
        sellFees.team_fee = _sellFees.team_fee;
        sellFees.reserve_fee = _sellFees.reserve_fee;
        sellFees.reward_fee = _sellFees.reward_fee;
        sellFees.auto_lp = _sellFees.auto_lp;

        buyFees.marketing_fee = _buyFees.marketing_fee;
        buyFees.NFT_fee = _buyFees.NFT_fee;
        buyFees.team_fee = _buyFees.team_fee;
        buyFees.reserve_fee = _buyFees.reserve_fee;
        buyFees.reward_fee = _buyFees.reward_fee;
        buyFees.auto_lp = _buyFees.auto_lp;
    }

    function setTxLimit(
        uint maxTxAmount,
        uint maxAmountPerWallet,
        uint numTokensSellToAddToLiquidity,
        bool swapAndLiquifyEnabled
    ) external onlyOwner {
        _maxTxAmount = maxTxAmount;
        _maxAmountPerWallet = maxAmountPerWallet;
        _numTokensSellToAddToLiquidity = numTokensSellToAddToLiquidity;
        swapAndLiquifyEnabled = swapAndLiquifyEnabled;
    }

    function getTotalSellFee() public view returns (uint totalFee) {
        totalFee =
            sellFees.marketing_fee +
            sellFees.NFT_fee +
            sellFees.team_fee +
            sellFees.reserve_fee +
            sellFees.reward_fee +
            sellFees.auto_lp;
    }

    function getTotalBuyFee() public view returns (uint totalFee) {
        totalFee =
            buyFees.marketing_fee +
            buyFees.NFT_fee +
            buyFees.team_fee +
            buyFees.reserve_fee +
            buyFees.reward_fee +
            buyFees.auto_lp;
    }

    function setFeeWallets(FeeWallet calldata _feeWallets) external onlyOwner {
        feeWallets.marketing = _feeWallets.marketing;
        feeWallets.nft = _feeWallets.nft;
        feeWallets.team = _feeWallets.team;
        feeWallets.reserve = _feeWallets.reserve;
    }

    function setExcludFromFee(address to, bool _excluded) external onlyOwner {
        isExcludeFromFee[to] = _excluded;
    }

    function setExcludFromMaxWallet(address to, bool _excluded)
        external
        onlyOwner
    {
        isExcludeFromMaxWallet[to] = _excluded;
    }

    //WL
    function setWL(address[] memory tos) external onlyOwner {
        for (uint i = 0; i < tos.length; i++) {
            isOnWL[tos[i]] = true;
        }
    }

    function setPresale(bool _isOnPresale) external onlyOwner {
        isOnPresale = _isOnPresale;
        if (!isOnPresale) _swapAndLiquifyEnabled = true;
    }

    function _transferWithFeeCalculate(
        address from,
        address to,
        uint256 amount
    ) internal {
        super._transfer(from, to, amount);
        tokenTransferReward(from, to, amount);
        transferForExcludeReward(from, to, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        // normal transfer for fee excluded wallet

        if (isOnPresale) {
            require(isOnWL[from] || isOnWL[to], "You are not in a WL");
        }

        if (isExcludeFromFee[from] || isExcludeFromFee[to]) {
            _transferWithFeeCalculate(from, to, amount);
            return;
        }

        require(
            amount <= _maxTxAmount || from == owner() || to == owner(),
            "Exceed max transfer amount"
        );

        uint recieveAmount = amount;
        if (from == DexPair) {
            //buy
            _transferWithFeeCalculate(
                from,
                feeWallets.marketing,
                (amount * sellFees.marketing_fee) / FeeDecimals
            );
            _transferWithFeeCalculate(
                from,
                feeWallets.nft,
                (amount * sellFees.NFT_fee) / FeeDecimals
            );
            _transferWithFeeCalculate(
                from,
                feeWallets.team,
                (amount * sellFees.team_fee) / FeeDecimals
            );
            _transferWithFeeCalculate(
                from,
                feeWallets.reserve,
                (amount * sellFees.reserve_fee) / FeeDecimals
            );
            _transferWithFeeCalculate(
                from,
                address(this),
                (amount * (sellFees.reward_fee + sellFees.auto_lp)) /
                    FeeDecimals
            );
            autoLPPercent += (amount * sellFees.auto_lp) / FeeDecimals;
            rewardPercent += (amount * sellFees.reward_fee) / FeeDecimals;

            recieveAmount = amount - (amount * getTotalSellFee()) / FeeDecimals;
        } else if (to == DexPair) {
            //sell
            _transferWithFeeCalculate(
                from,
                feeWallets.marketing,
                (amount * buyFees.marketing_fee) / FeeDecimals
            );
            _transferWithFeeCalculate(
                from,
                feeWallets.nft,
                (amount * buyFees.NFT_fee) / FeeDecimals
            );
            _transferWithFeeCalculate(
                from,
                feeWallets.team,
                (amount * buyFees.team_fee) / FeeDecimals
            );
            _transferWithFeeCalculate(
                from,
                feeWallets.reserve,
                (amount * buyFees.reserve_fee) / FeeDecimals
            );
            _transferWithFeeCalculate(
                from,
                address(this),
                (amount * (buyFees.reward_fee + buyFees.auto_lp)) / FeeDecimals
            );
            autoLPPercent += (amount * buyFees.auto_lp) / FeeDecimals;
            rewardPercent += (amount * buyFees.reward_fee) / FeeDecimals;

            recieveAmount = amount - (amount * getTotalBuyFee()) / FeeDecimals;
        } else {
            // normal transfer
            uint256 contractTokenBalance = balanceOf(address(this));
            if (contractTokenBalance >= _maxTxAmount) {
                contractTokenBalance = _maxTxAmount;
            }
            bool overMinTokenBalance = contractTokenBalance >=
                _numTokensSellToAddToLiquidity;
            if (
                overMinTokenBalance &&
                !inSwapAndLiquify &&
                _swapAndLiquifyEnabled
            ) {
                contractTokenBalance = _numTokensSellToAddToLiquidity;
                //add liquidity
                swapAndLiquify(contractTokenBalance);
            }
        }

        require(
            isExcludeFromMaxWallet[to] ||
                balanceOf(to) + recieveAmount <= _maxAmountPerWallet ||
                from == owner() ||
                to == owner(),
            "Exceed max transfer amount"
        );
        _transferWithFeeCalculate(from, to, recieveAmount);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        if (autoLPPercent + rewardPercent == 0) return;
        uint autoLPAmount = (contractTokenBalance * autoLPPercent) /
            (autoLPPercent + rewardPercent);
        if (
            autoLPPercent < autoLPAmount ||
            rewardPercent < contractTokenBalance - autoLPAmount
        ) return;
        autoLPPercent -= autoLPAmount;
        rewardPercent -= contractTokenBalance - autoLPAmount;

        uint256 otherHalf = contractTokenBalance - autoLPAmount / 2;
        uint256 initialBalance = address(this).balance;

        swapTokensForEth(otherHalf);
        addLiquidity(autoLPAmount / 2, address(this).balance - initialBalance);
        uint remainedBalance = address(this).balance - initialBalance;
        addReward(remainedBalance);
    }

    // auto lp
    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = DexRouter.WETH();

        _approve(address(this), address(DexRouter), tokenAmount);

        DexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

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

        DexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    // reward section
    mapping(address => uint) rewardedAmount; // already rewarded amount
    mapping(address => uint) rewardableAmount; // rewardable amount

    uint rewardRate; // reward amount per token
    uint totalRewardableAmount; //total reward pool amount

    mapping(address => bool) public isExcludedFromReward;
    uint totalExcludedAmount;

    function setExcludedFromReward(address to, bool data) external onlyOwner {
        if (isExcludedFromReward[to] != data) {
            isExcludedFromReward[to] = data;
            if (data) {
                // set to exclude
                totalExcludedAmount += balanceOf(to);
            } else {
                // remove from exclude
                totalExcludedAmount -= balanceOf(to);
                uint newRewardBalance = getClaimableReward(to);
                rewardedAmount[msg.sender] += newRewardBalance;
            }
        }
    }

    function transferForExcludeReward(
        address from,
        address to,
        uint amount
    ) internal {
        if (isExcludedFromReward[from]) totalExcludedAmount -= amount;
        if (isExcludedFromReward[to]) totalExcludedAmount += amount;
    }

    function addReward(uint amount) internal {
        if (totalSupply() - totalExcludedAmount == 0) return;
        rewardRate += (amount * 1e18) / (totalSupply() - totalExcludedAmount);
    }

    function getClaimableReward(address to)
        public
        view
        returns (uint rewardAmount)
    {
        if (isExcludedFromReward[to]) return 0;
        rewardAmount =
            (balanceOf(to) * rewardRate) /
            1e18 +
            rewardableAmount[to] -
            rewardedAmount[to];
    }

    function claimReward() external {
        uint rewardAmount = getClaimableReward(msg.sender);
        rewardedAmount[msg.sender] += rewardAmount;
        payable(msg.sender).transfer(rewardAmount);
    }

    function tokenTransferReward(
        address from,
        address to,
        uint amount
    ) internal {
        uint rewardAmount = (amount * rewardRate) / 1e18;
        rewardableAmount[from] += rewardAmount;
        rewardedAmount[to] += rewardAmount;
    }

    receive() external payable {}

    function claimstuckedToken(address token, uint amount) external onlyOwner {
        if (token == address(0)) payable(msg.sender).transfer(amount);
        else IERC20(token).transfer(msg.sender, amount);
    }

    // exchange with old hiroki token
    function setOldContractAddress(address _oldContractAddress) external {
        oldContractAddress = _oldContractAddress;
    }

    function claimNewToken(uint amount) external {
        require(
            oldContractAddress != address(0),
            "Claim new token is not available!"
        );
        IERC20(oldContractAddress).transferFrom(
            msg.sender,
            address(this),
            amount
        );
        _mint(msg.sender, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"address","name":"_RouterAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxAmountPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapAndLiquifyEnabled","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":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint256","name":"marketing_fee","type":"uint256"},{"internalType":"uint256","name":"NFT_fee","type":"uint256"},{"internalType":"uint256","name":"team_fee","type":"uint256"},{"internalType":"uint256","name":"reserve_fee","type":"uint256"},{"internalType":"uint256","name":"reward_fee","type":"uint256"},{"internalType":"uint256","name":"auto_lp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimNewToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimstuckedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeWallets","outputs":[{"internalType":"address","name":"marketing","type":"address"},{"internalType":"address","name":"nft","type":"address"},{"internalType":"address","name":"team","type":"address"},{"internalType":"address","name":"reserve","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"getClaimableReward","outputs":[{"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalBuyFee","outputs":[{"internalType":"uint256","name":"totalFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSellFee","outputs":[{"internalType":"uint256","name":"totalFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludeFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludeFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOnPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isOnWL","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"marketing_fee","type":"uint256"},{"internalType":"uint256","name":"NFT_fee","type":"uint256"},{"internalType":"uint256","name":"team_fee","type":"uint256"},{"internalType":"uint256","name":"reserve_fee","type":"uint256"},{"internalType":"uint256","name":"reward_fee","type":"uint256"},{"internalType":"uint256","name":"auto_lp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"setExcludFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"setExcludFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"data","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"marketing","type":"address"},{"internalType":"address","name":"nft","type":"address"},{"internalType":"address","name":"team","type":"address"},{"internalType":"address","name":"reserve","type":"address"}],"internalType":"struct Hiroki.FeeWallet","name":"_feeWallets","type":"tuple"}],"name":"setFeeWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"marketing_fee","type":"uint256"},{"internalType":"uint256","name":"NFT_fee","type":"uint256"},{"internalType":"uint256","name":"team_fee","type":"uint256"},{"internalType":"uint256","name":"reserve_fee","type":"uint256"},{"internalType":"uint256","name":"reward_fee","type":"uint256"},{"internalType":"uint256","name":"auto_lp","type":"uint256"}],"internalType":"struct Hiroki.Fee","name":"_sellFees","type":"tuple"},{"components":[{"internalType":"uint256","name":"marketing_fee","type":"uint256"},{"internalType":"uint256","name":"NFT_fee","type":"uint256"},{"internalType":"uint256","name":"team_fee","type":"uint256"},{"internalType":"uint256","name":"reserve_fee","type":"uint256"},{"internalType":"uint256","name":"reward_fee","type":"uint256"},{"internalType":"uint256","name":"auto_lp","type":"uint256"}],"internalType":"struct Hiroki.Fee","name":"_buyFees","type":"tuple"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"isMinter","type":"bool"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oldContractAddress","type":"address"}],"name":"setOldContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isOnPresale","type":"bool"}],"name":"setPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"maxAmountPerWallet","type":"uint256"},{"internalType":"uint256","name":"numTokensSellToAddToLiquidity","type":"uint256"},{"internalType":"bool","name":"swapAndLiquifyEnabled","type":"bool"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tos","type":"address[]"}],"name":"setWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620f424060075569d3c21bcecceda1000000601e556c0c9f2c9cd04674edea40000000601f5568056bc75e2d631000006020556021805460ff191660011790553480156200005157600080fd5b50604051620030f6380380620030f68339810160408190526200007491620005dc565b818484818181600390805190602001906200009192919062000442565b508051620000a790600490602084019062000442565b505050620000c4620000be6200030460201b60201c565b62000308565b620000d033846200035a565b505050600081905080602160016101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200013957600080fd5b505afa1580156200014e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001749190620005b8565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001bd57600080fd5b505afa158015620001d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f89190620005b8565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200024157600080fd5b505af115801562000256573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027c9190620005b8565b602280546001600160a01b0319166001600160a01b039290921691821790556000908152601b60209081526040808320805460ff199081166001908117909255601d8054821683179055338552601c90935281842080548416821781556021805485169055805484168217905530845292208054909116909117905550620006d79350505050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620003b55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620003c991906200065f565b90915550506001600160a01b03821660009081526020819052604081208054839290620003f89084906200065f565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620004509062000684565b90600052602060002090601f016020900481019282620004745760008555620004bf565b82601f106200048f57805160ff1916838001178555620004bf565b82800160010185558215620004bf579182015b82811115620004bf578251825591602001919060010190620004a2565b50620004cd929150620004d1565b5090565b5b80821115620004cd5760008155600101620004d2565b80516001600160a01b03811681146200050057600080fd5b919050565b600082601f83011262000516578081fd5b81516001600160401b0380821115620005335762000533620006c1565b604051601f8301601f19908116603f011681019082821181831017156200055e576200055e620006c1565b816040528381526020925086838588010111156200057a578485fd5b8491505b838210156200059d57858201830151818301840152908201906200057e565b83821115620005ae57848385830101525b9695505050505050565b600060208284031215620005ca578081fd5b620005d582620004e8565b9392505050565b60008060008060808587031215620005f2578283fd5b84516001600160401b038082111562000609578485fd5b620006178883890162000505565b955060208701519150808211156200062d578485fd5b506200063c8782880162000505565b935050604085015191506200065460608601620004e8565b905092959194509250565b600082198211156200067f57634e487b7160e01b81526011600452602481fd5b500190565b600181811c908216806200069957607f821691505b60208210811415620006bb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b612a0f80620006e76000396000f3fe6080604052600436106102815760003560e01c8063736ce0d41161014f578063b88a802f116100c1578063dd62ed3e1161007a578063dd62ed3e14610808578063e0f3ccf51461084e578063e4748b9e146108a6578063e65ac447146108d1578063e83b51b814610901578063f2fde38b1461092157600080fd5b8063b88a802f14610749578063c3f1d1851461075e578063c54e73e31461077e578063cbecede01461079e578063cf456ae7146107b8578063d66628f0146107d857600080fd5b80638e5916b2116101135780638e5916b21461068e57806395d89b41146106be578063a12957e7146106d3578063a457c2d7146106f3578063a9059cbb14610713578063b3f22ce31461073357600080fd5b8063736ce0d4146105e55780637d1db4a51461060a5780638340a8041461062057806388f82020146106405780638da5cb5b1461067057600080fd5b8063313ce567116101f35780635ff329af116101ac5780635ff329af14610502578063631ca6f0146105225780636a51b8401461054257806370a0823114610562578063715018a61461059857806372460e7f146105ad57600080fd5b8063313ce5671461045b5780633950935114610477578063397dbed71461049757806340c10f19146104ad57806342966c68146104cd57806347cb8c04146104ed57600080fd5b806318160ddd1161024557806318160ddd146103615780631da3f6d0146103805780631ebe8be8146103a05780632265b0e5146103b557806323b872dd146103d557806325379fc3146103f557600080fd5b806305bce6731461028d57806306fdde03146102cc578063070638e6146102f7578063095ea7b31461032157806313e461921461034157600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102ca6102a83660046124fb565b602380546001600160a01b0319166001600160a01b0392909216919091179055565b005b3480156102d857600080fd5b506102e1610941565b6040516102ee91906127d4565b60405180910390f35b34801561030357600080fd5b50601d546103119060ff1681565b60405190151581526020016102ee565b34801561032d57600080fd5b5061031161033c3660046125df565b6109d3565b34801561034d57600080fd5b506102ca61035c3660046125b2565b6109eb565b34801561036d57600080fd5b506002545b6040519081526020016102ee565b34801561038c57600080fd5b506102ca61039b366004612709565b610b10565b3480156103ac57600080fd5b50610372610bfa565b3480156103c157600080fd5b506102ca6103d036600461274f565b610c49565b3480156103e157600080fd5b506103116103f0366004612572565b610d43565b34801561040157600080fd5b50601454601554601654601754610428936001600160a01b03908116938116928116911684565b604080516001600160a01b03958616815293851660208501529184169183019190915290911660608201526080016102ee565b34801561046757600080fd5b50604051601281526020016102ee565b34801561048357600080fd5b506103116104923660046125df565b610d67565b3480156104a357600080fd5b50610372601f5481565b3480156104b957600080fd5b506102ca6104c83660046125df565b610da6565b3480156104d957600080fd5b506102ca6104e836600461274f565b610e03565b3480156104f957600080fd5b50610372610e49565b34801561050e57600080fd5b5061037261051d3660046124fb565b610e6b565b34801561052e57600080fd5b506102ca61053d3660046125df565b610efe565b34801561054e57600080fd5b506102ca61055d3660046125b2565b610fe8565b34801561056e57600080fd5b5061037261057d3660046124fb565b6001600160a01b031660009081526020819052604090205490565b3480156105a457600080fd5b506102ca61103d565b3480156105b957600080fd5b506022546105cd906001600160a01b031681565b6040516001600160a01b0390911681526020016102ee565b3480156105f157600080fd5b506021546105cd9061010090046001600160a01b031681565b34801561061657600080fd5b50610372601e5481565b34801561062c57600080fd5b506102ca61063b366004612794565b611073565b34801561064c57600080fd5b5061031161065b3660046124fb565b60286020526000908152604090205460ff1681565b34801561067c57600080fd5b506005546001600160a01b03166105cd565b34801561069a57600080fd5b506103116106a93660046124fb565b601a6020526000908152604090205460ff1681565b3480156106ca57600080fd5b506102e16110ac565b3480156106df57600080fd5b506102ca6106ee3660046125b2565b6110bb565b3480156106ff57600080fd5b5061031161070e3660046125df565b611110565b34801561071f57600080fd5b5061031161072e3660046125df565b6111a2565b34801561073f57600080fd5b5061037260205481565b34801561075557600080fd5b506102ca6111b0565b34801561076a57600080fd5b506102ca61077936600461260a565b611211565b34801561078a57600080fd5b506102ca6107993660046126d1565b6112b1565b3480156107aa57600080fd5b506021546103119060ff1681565b3480156107c457600080fd5b506102ca6107d33660046125b2565b611303565b3480156107e457600080fd5b506103116107f33660046124fb565b601c6020526000908152604090205460ff1681565b34801561081457600080fd5b5061037261082336600461253a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561085a57600080fd5b50600854600954600a54600b54600c54600d5461087995949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0016102ee565b3480156108b257600080fd5b50600e54600f5460105460115460125460135461087995949392919086565b3480156108dd57600080fd5b506103116108ec3660046124fb565b601b6020526000908152604090205460ff1681565b34801561090d57600080fd5b506102ca61091c36600461271a565b611358565b34801561092d57600080fd5b506102ca61093c3660046124fb565b6113da565b6060600380546109509061293a565b80601f016020809104026020016040519081016040528092919081815260200182805461097c9061293a565b80156109c95780601f1061099e576101008083540402835291602001916109c9565b820191906000526020600020905b8154815290600101906020018083116109ac57829003601f168201915b5050505050905090565b6000336109e1818585611472565b5060019392505050565b6005546001600160a01b03163314610a1e5760405162461bcd60e51b8152600401610a1590612827565b60405180910390fd5b6001600160a01b03821660009081526028602052604090205460ff16151581151514610b0c576001600160a01b0382166000908152602860205260409020805460ff19168215801591909117909155610aa6576001600160a01b03821660009081526020819052604090205460296000828254610a9b91906128cc565b90915550610b0c9050565b6001600160a01b03821660009081526020819052604090205460296000828254610ad09190612923565b9091555060009050610ae183610e6b565b33600090815260246020526040812080549293508392909190610b059084906128cc565b9091555050505b5050565b6005546001600160a01b03163314610b3a5760405162461bcd60e51b8152600401610a1590612827565b610b4760208201826124fb565b601480546001600160a01b0319166001600160a01b0392909216919091179055610b7760408201602083016124fb565b601580546001600160a01b0319166001600160a01b0392909216919091179055610ba760608201604083016124fb565b601680546001600160a01b0319166001600160a01b0392909216919091179055610bd760808201606083016124fb565b601780546001600160a01b0319166001600160a01b039290921691909117905550565b601354601254601154601054600f54600e5460009594939291610c1c916128cc565b610c2691906128cc565b610c3091906128cc565b610c3a91906128cc565b610c4491906128cc565b905090565b6023546001600160a01b0316610cab5760405162461bcd60e51b815260206004820152602160248201527f436c61696d206e657720746f6b656e206973206e6f7420617661696c61626c656044820152602160f81b6064820152608401610a15565b6023546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015610cfd57600080fd5b505af1158015610d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3591906126ed565b50610d403382611596565b50565b600033610d51858285611675565b610d5c858585611707565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091906109e19082908690610da19087906128cc565b611472565b3360009081526006602052604090205460ff16610df95760405162461bcd60e51b815260206004820152601160248201527014195c9b5a5cdcda5bdb8819195b9a5959607a1b6044820152606401610a15565b610b0c8282611596565b610e0d3382611c3d565b60408051338152602081018390527fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5910160405180910390a150565b600d54600c54600b54600a5460095460085460009594939291610c1c916128cc565b6001600160a01b03811660009081526028602052604081205460ff1615610e9457506000919050565b6001600160a01b03821660009081526024602090815260408083205460258352818420546026549385905291909320549091670de0b6b3a764000091610eda9190612904565b610ee491906128e4565b610eee91906128cc565b610ef89190612923565b92915050565b6005546001600160a01b03163314610f285760405162461bcd60e51b8152600401610a1590612827565b6001600160a01b038216610f6857604051339082156108fc029083906000818181858888f19350505050158015610f63573d6000803e3d6000fd5b505050565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015610fb057600080fd5b505af1158015610fc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6391906126ed565b6005546001600160a01b031633146110125760405162461bcd60e51b8152600401610a1590612827565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110675760405162461bcd60e51b8152600401610a1590612827565b6110716000611d8b565b565b6005546001600160a01b0316331461109d5760405162461bcd60e51b8152600401610a1590612827565b50601e92909255601f55602055565b6060600480546109509061293a565b6005546001600160a01b031633146110e55760405162461bcd60e51b8152600401610a1590612827565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156111955760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a15565b610d5c8286868403611472565b6000336109e1818585611707565b60006111bb33610e6b565b336000908152602460205260408120805492935083929091906111df9084906128cc565b9091555050604051339082156108fc029083906000818181858888f19350505050158015610b0c573d6000803e3d6000fd5b6005546001600160a01b0316331461123b5760405162461bcd60e51b8152600401610a1590612827565b60005b8151811015610b0c576001601c600084848151811061126d57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806112a98161296f565b91505061123e565b6005546001600160a01b031633146112db5760405162461bcd60e51b8152600401610a1590612827565b601d805460ff191682151590811790915560ff16610d40576021805460ff1916600117905550565b6005546001600160a01b0316331461132d5760405162461bcd60e51b8152600401610a1590612827565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146113825760405162461bcd60e51b8152600401610a1590612827565b8135600855602080830135600955604080840135600a55606080850135600b55608080860135600c5560a095860135600d558435600e5592840135600f55908301356010558201356011558101356012550135601355565b6005546001600160a01b031633146114045760405162461bcd60e51b8152600401610a1590612827565b6001600160a01b0381166114695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a15565b610d4081611d8b565b6001600160a01b0383166114d45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a15565b6001600160a01b0382166115355760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a15565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166115ec5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610a15565b80600260008282546115fe91906128cc565b90915550506001600160a01b0382166000908152602081905260408120805483929061162b9084906128cc565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461170157818110156116f45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a15565b6117018484848403611472565b50505050565b601d5460ff1615611793576001600160a01b0383166000908152601c602052604090205460ff168061175157506001600160a01b0382166000908152601c602052604090205460ff165b6117935760405162461bcd60e51b8152602060048201526013602482015272165bdd48185c99481b9bdd081a5b88184815d3606a1b6044820152606401610a15565b6001600160a01b0383166000908152601a602052604090205460ff16806117d257506001600160a01b0382166000908152601a602052604090205460ff165b156117e257610f63838383611ddd565b601e548111158061180057506005546001600160a01b038481169116145b8061181857506005546001600160a01b038381169116145b6118645760405162461bcd60e51b815260206004820152601a60248201527f457863656564206d6178207472616e7366657220616d6f756e740000000000006044820152606401610a15565b60225481906001600160a01b03858116911614156119d4576014546007546008546118b09287926001600160a01b03909116916118a19087612904565b6118ab91906128e4565b611ddd565b6015546007546009546118d59287926001600160a01b03909116916118a19087612904565b601654600754600a546118fa9287926001600160a01b03909116916118a19087612904565b601754600754600b5461191f9287926001600160a01b03909116916118a19087612904565b600754600d54600c54611944928792309261193a91906128cc565b6118a19087612904565b600754600d546119549084612904565b61195e91906128e4565b6018600082825461196f91906128cc565b9091555050600754600c546119849084612904565b61198e91906128e4565b6019600082825461199f91906128cc565b90915550506007546119af610e49565b6119b99084612904565b6119c391906128e4565b6119cd9083612923565b9050611b64565b6022546001600160a01b0384811691161415611b0457601454600754600e54611a0f9287926001600160a01b03909116916118a19087612904565b601554600754600f54611a349287926001600160a01b03909116916118a19087612904565b601654600754601054611a599287926001600160a01b03909116916118a19087612904565b601754600754601154611a7e9287926001600160a01b03909116916118a19087612904565b600754601354601254611a99928792309261193a91906128cc565b600754601354611aa99084612904565b611ab391906128e4565b60186000828254611ac491906128cc565b9091555050600754601254611ad99084612904565b611ae391906128e4565b60196000828254611af491906128cc565b90915550506007546119af610bfa565b30600090815260208190526040902054601e548110611b225750601e545b60205481108015908190611b405750602254600160a01b900460ff16155b8015611b4e575060215460ff165b15611b61576020549150611b6182611dfe565b50505b6001600160a01b0383166000908152601b602052604090205460ff1680611bb65750601f5481611ba9856001600160a01b031660009081526020819052604090205490565b611bb391906128cc565b11155b80611bce57506005546001600160a01b038581169116145b80611be657506005546001600160a01b038481169116145b611c325760405162461bcd60e51b815260206004820152601a60248201527f457863656564206d6178207472616e7366657220616d6f756e740000000000006044820152606401610a15565b611701848483611ddd565b6001600160a01b038216611c9d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a15565b6001600160a01b03821660009081526020819052604090205481811015611d115760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a15565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611d40908490612923565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611de8838383611f1f565b611df38383836120ed565b610f63838383612175565b6022805460ff60a01b1916600160a01b179055601954601854611e2191906128cc565b611e2a57611f0f565b6000601954601854611e3c91906128cc565b601854611e499084612904565b611e5391906128e4565b9050806018541080611e6f5750611e6a8183612923565b601954105b15611e7a5750611f0f565b8060186000828254611e8c9190612923565b90915550611e9c90508183612923565b60196000828254611ead9190612923565b9091555060009050611ec06002836128e4565b611eca9084612923565b905047611ed6826121e1565b611ef3611ee46002856128e4565b611eee8347612923565b612389565b6000611eff8247612923565b9050611f0a81612478565b505050505b506022805460ff60a01b19169055565b6001600160a01b038316611f835760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a15565b6001600160a01b038216611fe55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a15565b6001600160a01b0383166000908152602081905260409020548181101561205d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a15565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120949084906128cc565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120e091815260200190565b60405180910390a3611701565b6000670de0b6b3a7640000602654836121069190612904565b61211091906128e4565b6001600160a01b03851660009081526025602052604081208054929350839290919061213d9084906128cc565b90915550506001600160a01b0383166000908152602460205260408120805483929061216a9084906128cc565b909155505050505050565b6001600160a01b03831660009081526028602052604090205460ff16156121ae5780602960008282546121a89190612923565b90915550505b6001600160a01b03821660009081526028602052604090205460ff1615610f63578060296000828254610b0591906128cc565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061222457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050602160019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561229257600080fd5b505afa1580156122a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ca919061251e565b816001815181106122eb57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260215461231691309161010090041684611472565b60215460405163791ac94760e01b81526101009091046001600160a01b03169063791ac9479061235390859060009086903090429060040161285c565b600060405180830381600087803b15801561236d57600080fd5b505af1158015612381573d6000803e3d6000fd5b505050505050565b6021546123a690309061010090046001600160a01b031684611472565b6021546001600160a01b036101009091041663f305d7198230856000806123d56005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561243857600080fd5b505af115801561244c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124719190612767565b5050505050565b6029546002546124889190612923565b61248f5750565b60295460025461249f9190612923565b6124b182670de0b6b3a7640000612904565b6124bb91906128e4565b602660008282546124cc91906128cc565b909155505050565b80356124df816129b6565b919050565b600060c082840312156124f5578081fd5b50919050565b60006020828403121561250c578081fd5b8135612517816129b6565b9392505050565b60006020828403121561252f578081fd5b8151612517816129b6565b6000806040838503121561254c578081fd5b8235612557816129b6565b91506020830135612567816129b6565b809150509250929050565b600080600060608486031215612586578081fd5b8335612591816129b6565b925060208401356125a1816129b6565b929592945050506040919091013590565b600080604083850312156125c4578182fd5b82356125cf816129b6565b91506020830135612567816129cb565b600080604083850312156125f1578182fd5b82356125fc816129b6565b946020939093013593505050565b6000602080838503121561261c578182fd5b823567ffffffffffffffff80821115612633578384fd5b818501915085601f830112612646578384fd5b813581811115612658576126586129a0565b8060051b604051601f19603f8301168101818110858211171561267d5761267d6129a0565b604052828152858101935084860182860187018a101561269b578788fd5b8795505b838610156126c4576126b0816124d4565b85526001959095019493860193860161269f565b5098975050505050505050565b6000602082840312156126e2578081fd5b8135612517816129cb565b6000602082840312156126fe578081fd5b8151612517816129cb565b6000608082840312156124f5578081fd5b600080610180838503121561272d578182fd5b61273784846124e4565b91506127468460c085016124e4565b90509250929050565b600060208284031215612760578081fd5b5035919050565b60008060006060848603121561277b578283fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156127a9578081fd5b84359350602085013592506040850135915060608501356127c9816129cb565b939692955090935050565b6000602080835283518082850152825b81811015612800578581018301518582016040015282016127e4565b818111156128115783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156128ab5784516001600160a01b031683529383019391830191600101612886565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156128df576128df61298a565b500190565b6000826128ff57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561291e5761291e61298a565b500290565b6000828210156129355761293561298a565b500390565b600181811c9082168061294e57607f821691505b602082108114156124f557634e487b7160e01b600052602260045260246000fd5b60006000198214156129835761298361298a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610d4057600080fd5b8015158114610d4057600080fdfea264697066735822122078ac4b850b6dab9df2cff7e657bc791db5166d283e943be580b1cc2f5a123f2464736f6c63430008040033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000052b7d2dcc80cd2e40000000000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000000000000000000000000000000000000000000064869726f6b69000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044849524f00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102815760003560e01c8063736ce0d41161014f578063b88a802f116100c1578063dd62ed3e1161007a578063dd62ed3e14610808578063e0f3ccf51461084e578063e4748b9e146108a6578063e65ac447146108d1578063e83b51b814610901578063f2fde38b1461092157600080fd5b8063b88a802f14610749578063c3f1d1851461075e578063c54e73e31461077e578063cbecede01461079e578063cf456ae7146107b8578063d66628f0146107d857600080fd5b80638e5916b2116101135780638e5916b21461068e57806395d89b41146106be578063a12957e7146106d3578063a457c2d7146106f3578063a9059cbb14610713578063b3f22ce31461073357600080fd5b8063736ce0d4146105e55780637d1db4a51461060a5780638340a8041461062057806388f82020146106405780638da5cb5b1461067057600080fd5b8063313ce567116101f35780635ff329af116101ac5780635ff329af14610502578063631ca6f0146105225780636a51b8401461054257806370a0823114610562578063715018a61461059857806372460e7f146105ad57600080fd5b8063313ce5671461045b5780633950935114610477578063397dbed71461049757806340c10f19146104ad57806342966c68146104cd57806347cb8c04146104ed57600080fd5b806318160ddd1161024557806318160ddd146103615780631da3f6d0146103805780631ebe8be8146103a05780632265b0e5146103b557806323b872dd146103d557806325379fc3146103f557600080fd5b806305bce6731461028d57806306fdde03146102cc578063070638e6146102f7578063095ea7b31461032157806313e461921461034157600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102ca6102a83660046124fb565b602380546001600160a01b0319166001600160a01b0392909216919091179055565b005b3480156102d857600080fd5b506102e1610941565b6040516102ee91906127d4565b60405180910390f35b34801561030357600080fd5b50601d546103119060ff1681565b60405190151581526020016102ee565b34801561032d57600080fd5b5061031161033c3660046125df565b6109d3565b34801561034d57600080fd5b506102ca61035c3660046125b2565b6109eb565b34801561036d57600080fd5b506002545b6040519081526020016102ee565b34801561038c57600080fd5b506102ca61039b366004612709565b610b10565b3480156103ac57600080fd5b50610372610bfa565b3480156103c157600080fd5b506102ca6103d036600461274f565b610c49565b3480156103e157600080fd5b506103116103f0366004612572565b610d43565b34801561040157600080fd5b50601454601554601654601754610428936001600160a01b03908116938116928116911684565b604080516001600160a01b03958616815293851660208501529184169183019190915290911660608201526080016102ee565b34801561046757600080fd5b50604051601281526020016102ee565b34801561048357600080fd5b506103116104923660046125df565b610d67565b3480156104a357600080fd5b50610372601f5481565b3480156104b957600080fd5b506102ca6104c83660046125df565b610da6565b3480156104d957600080fd5b506102ca6104e836600461274f565b610e03565b3480156104f957600080fd5b50610372610e49565b34801561050e57600080fd5b5061037261051d3660046124fb565b610e6b565b34801561052e57600080fd5b506102ca61053d3660046125df565b610efe565b34801561054e57600080fd5b506102ca61055d3660046125b2565b610fe8565b34801561056e57600080fd5b5061037261057d3660046124fb565b6001600160a01b031660009081526020819052604090205490565b3480156105a457600080fd5b506102ca61103d565b3480156105b957600080fd5b506022546105cd906001600160a01b031681565b6040516001600160a01b0390911681526020016102ee565b3480156105f157600080fd5b506021546105cd9061010090046001600160a01b031681565b34801561061657600080fd5b50610372601e5481565b34801561062c57600080fd5b506102ca61063b366004612794565b611073565b34801561064c57600080fd5b5061031161065b3660046124fb565b60286020526000908152604090205460ff1681565b34801561067c57600080fd5b506005546001600160a01b03166105cd565b34801561069a57600080fd5b506103116106a93660046124fb565b601a6020526000908152604090205460ff1681565b3480156106ca57600080fd5b506102e16110ac565b3480156106df57600080fd5b506102ca6106ee3660046125b2565b6110bb565b3480156106ff57600080fd5b5061031161070e3660046125df565b611110565b34801561071f57600080fd5b5061031161072e3660046125df565b6111a2565b34801561073f57600080fd5b5061037260205481565b34801561075557600080fd5b506102ca6111b0565b34801561076a57600080fd5b506102ca61077936600461260a565b611211565b34801561078a57600080fd5b506102ca6107993660046126d1565b6112b1565b3480156107aa57600080fd5b506021546103119060ff1681565b3480156107c457600080fd5b506102ca6107d33660046125b2565b611303565b3480156107e457600080fd5b506103116107f33660046124fb565b601c6020526000908152604090205460ff1681565b34801561081457600080fd5b5061037261082336600461253a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561085a57600080fd5b50600854600954600a54600b54600c54600d5461087995949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0016102ee565b3480156108b257600080fd5b50600e54600f5460105460115460125460135461087995949392919086565b3480156108dd57600080fd5b506103116108ec3660046124fb565b601b6020526000908152604090205460ff1681565b34801561090d57600080fd5b506102ca61091c36600461271a565b611358565b34801561092d57600080fd5b506102ca61093c3660046124fb565b6113da565b6060600380546109509061293a565b80601f016020809104026020016040519081016040528092919081815260200182805461097c9061293a565b80156109c95780601f1061099e576101008083540402835291602001916109c9565b820191906000526020600020905b8154815290600101906020018083116109ac57829003601f168201915b5050505050905090565b6000336109e1818585611472565b5060019392505050565b6005546001600160a01b03163314610a1e5760405162461bcd60e51b8152600401610a1590612827565b60405180910390fd5b6001600160a01b03821660009081526028602052604090205460ff16151581151514610b0c576001600160a01b0382166000908152602860205260409020805460ff19168215801591909117909155610aa6576001600160a01b03821660009081526020819052604090205460296000828254610a9b91906128cc565b90915550610b0c9050565b6001600160a01b03821660009081526020819052604090205460296000828254610ad09190612923565b9091555060009050610ae183610e6b565b33600090815260246020526040812080549293508392909190610b059084906128cc565b9091555050505b5050565b6005546001600160a01b03163314610b3a5760405162461bcd60e51b8152600401610a1590612827565b610b4760208201826124fb565b601480546001600160a01b0319166001600160a01b0392909216919091179055610b7760408201602083016124fb565b601580546001600160a01b0319166001600160a01b0392909216919091179055610ba760608201604083016124fb565b601680546001600160a01b0319166001600160a01b0392909216919091179055610bd760808201606083016124fb565b601780546001600160a01b0319166001600160a01b039290921691909117905550565b601354601254601154601054600f54600e5460009594939291610c1c916128cc565b610c2691906128cc565b610c3091906128cc565b610c3a91906128cc565b610c4491906128cc565b905090565b6023546001600160a01b0316610cab5760405162461bcd60e51b815260206004820152602160248201527f436c61696d206e657720746f6b656e206973206e6f7420617661696c61626c656044820152602160f81b6064820152608401610a15565b6023546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015610cfd57600080fd5b505af1158015610d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3591906126ed565b50610d403382611596565b50565b600033610d51858285611675565b610d5c858585611707565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091906109e19082908690610da19087906128cc565b611472565b3360009081526006602052604090205460ff16610df95760405162461bcd60e51b815260206004820152601160248201527014195c9b5a5cdcda5bdb8819195b9a5959607a1b6044820152606401610a15565b610b0c8282611596565b610e0d3382611c3d565b60408051338152602081018390527fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5910160405180910390a150565b600d54600c54600b54600a5460095460085460009594939291610c1c916128cc565b6001600160a01b03811660009081526028602052604081205460ff1615610e9457506000919050565b6001600160a01b03821660009081526024602090815260408083205460258352818420546026549385905291909320549091670de0b6b3a764000091610eda9190612904565b610ee491906128e4565b610eee91906128cc565b610ef89190612923565b92915050565b6005546001600160a01b03163314610f285760405162461bcd60e51b8152600401610a1590612827565b6001600160a01b038216610f6857604051339082156108fc029083906000818181858888f19350505050158015610f63573d6000803e3d6000fd5b505050565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015610fb057600080fd5b505af1158015610fc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6391906126ed565b6005546001600160a01b031633146110125760405162461bcd60e51b8152600401610a1590612827565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110675760405162461bcd60e51b8152600401610a1590612827565b6110716000611d8b565b565b6005546001600160a01b0316331461109d5760405162461bcd60e51b8152600401610a1590612827565b50601e92909255601f55602055565b6060600480546109509061293a565b6005546001600160a01b031633146110e55760405162461bcd60e51b8152600401610a1590612827565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156111955760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a15565b610d5c8286868403611472565b6000336109e1818585611707565b60006111bb33610e6b565b336000908152602460205260408120805492935083929091906111df9084906128cc565b9091555050604051339082156108fc029083906000818181858888f19350505050158015610b0c573d6000803e3d6000fd5b6005546001600160a01b0316331461123b5760405162461bcd60e51b8152600401610a1590612827565b60005b8151811015610b0c576001601c600084848151811061126d57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806112a98161296f565b91505061123e565b6005546001600160a01b031633146112db5760405162461bcd60e51b8152600401610a1590612827565b601d805460ff191682151590811790915560ff16610d40576021805460ff1916600117905550565b6005546001600160a01b0316331461132d5760405162461bcd60e51b8152600401610a1590612827565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146113825760405162461bcd60e51b8152600401610a1590612827565b8135600855602080830135600955604080840135600a55606080850135600b55608080860135600c5560a095860135600d558435600e5592840135600f55908301356010558201356011558101356012550135601355565b6005546001600160a01b031633146114045760405162461bcd60e51b8152600401610a1590612827565b6001600160a01b0381166114695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a15565b610d4081611d8b565b6001600160a01b0383166114d45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a15565b6001600160a01b0382166115355760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a15565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166115ec5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610a15565b80600260008282546115fe91906128cc565b90915550506001600160a01b0382166000908152602081905260408120805483929061162b9084906128cc565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461170157818110156116f45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a15565b6117018484848403611472565b50505050565b601d5460ff1615611793576001600160a01b0383166000908152601c602052604090205460ff168061175157506001600160a01b0382166000908152601c602052604090205460ff165b6117935760405162461bcd60e51b8152602060048201526013602482015272165bdd48185c99481b9bdd081a5b88184815d3606a1b6044820152606401610a15565b6001600160a01b0383166000908152601a602052604090205460ff16806117d257506001600160a01b0382166000908152601a602052604090205460ff165b156117e257610f63838383611ddd565b601e548111158061180057506005546001600160a01b038481169116145b8061181857506005546001600160a01b038381169116145b6118645760405162461bcd60e51b815260206004820152601a60248201527f457863656564206d6178207472616e7366657220616d6f756e740000000000006044820152606401610a15565b60225481906001600160a01b03858116911614156119d4576014546007546008546118b09287926001600160a01b03909116916118a19087612904565b6118ab91906128e4565b611ddd565b6015546007546009546118d59287926001600160a01b03909116916118a19087612904565b601654600754600a546118fa9287926001600160a01b03909116916118a19087612904565b601754600754600b5461191f9287926001600160a01b03909116916118a19087612904565b600754600d54600c54611944928792309261193a91906128cc565b6118a19087612904565b600754600d546119549084612904565b61195e91906128e4565b6018600082825461196f91906128cc565b9091555050600754600c546119849084612904565b61198e91906128e4565b6019600082825461199f91906128cc565b90915550506007546119af610e49565b6119b99084612904565b6119c391906128e4565b6119cd9083612923565b9050611b64565b6022546001600160a01b0384811691161415611b0457601454600754600e54611a0f9287926001600160a01b03909116916118a19087612904565b601554600754600f54611a349287926001600160a01b03909116916118a19087612904565b601654600754601054611a599287926001600160a01b03909116916118a19087612904565b601754600754601154611a7e9287926001600160a01b03909116916118a19087612904565b600754601354601254611a99928792309261193a91906128cc565b600754601354611aa99084612904565b611ab391906128e4565b60186000828254611ac491906128cc565b9091555050600754601254611ad99084612904565b611ae391906128e4565b60196000828254611af491906128cc565b90915550506007546119af610bfa565b30600090815260208190526040902054601e548110611b225750601e545b60205481108015908190611b405750602254600160a01b900460ff16155b8015611b4e575060215460ff165b15611b61576020549150611b6182611dfe565b50505b6001600160a01b0383166000908152601b602052604090205460ff1680611bb65750601f5481611ba9856001600160a01b031660009081526020819052604090205490565b611bb391906128cc565b11155b80611bce57506005546001600160a01b038581169116145b80611be657506005546001600160a01b038481169116145b611c325760405162461bcd60e51b815260206004820152601a60248201527f457863656564206d6178207472616e7366657220616d6f756e740000000000006044820152606401610a15565b611701848483611ddd565b6001600160a01b038216611c9d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a15565b6001600160a01b03821660009081526020819052604090205481811015611d115760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a15565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611d40908490612923565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611de8838383611f1f565b611df38383836120ed565b610f63838383612175565b6022805460ff60a01b1916600160a01b179055601954601854611e2191906128cc565b611e2a57611f0f565b6000601954601854611e3c91906128cc565b601854611e499084612904565b611e5391906128e4565b9050806018541080611e6f5750611e6a8183612923565b601954105b15611e7a5750611f0f565b8060186000828254611e8c9190612923565b90915550611e9c90508183612923565b60196000828254611ead9190612923565b9091555060009050611ec06002836128e4565b611eca9084612923565b905047611ed6826121e1565b611ef3611ee46002856128e4565b611eee8347612923565b612389565b6000611eff8247612923565b9050611f0a81612478565b505050505b506022805460ff60a01b19169055565b6001600160a01b038316611f835760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a15565b6001600160a01b038216611fe55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a15565b6001600160a01b0383166000908152602081905260409020548181101561205d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a15565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120949084906128cc565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120e091815260200190565b60405180910390a3611701565b6000670de0b6b3a7640000602654836121069190612904565b61211091906128e4565b6001600160a01b03851660009081526025602052604081208054929350839290919061213d9084906128cc565b90915550506001600160a01b0383166000908152602460205260408120805483929061216a9084906128cc565b909155505050505050565b6001600160a01b03831660009081526028602052604090205460ff16156121ae5780602960008282546121a89190612923565b90915550505b6001600160a01b03821660009081526028602052604090205460ff1615610f63578060296000828254610b0591906128cc565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061222457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050602160019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561229257600080fd5b505afa1580156122a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ca919061251e565b816001815181106122eb57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260215461231691309161010090041684611472565b60215460405163791ac94760e01b81526101009091046001600160a01b03169063791ac9479061235390859060009086903090429060040161285c565b600060405180830381600087803b15801561236d57600080fd5b505af1158015612381573d6000803e3d6000fd5b505050505050565b6021546123a690309061010090046001600160a01b031684611472565b6021546001600160a01b036101009091041663f305d7198230856000806123d56005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561243857600080fd5b505af115801561244c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124719190612767565b5050505050565b6029546002546124889190612923565b61248f5750565b60295460025461249f9190612923565b6124b182670de0b6b3a7640000612904565b6124bb91906128e4565b602660008282546124cc91906128cc565b909155505050565b80356124df816129b6565b919050565b600060c082840312156124f5578081fd5b50919050565b60006020828403121561250c578081fd5b8135612517816129b6565b9392505050565b60006020828403121561252f578081fd5b8151612517816129b6565b6000806040838503121561254c578081fd5b8235612557816129b6565b91506020830135612567816129b6565b809150509250929050565b600080600060608486031215612586578081fd5b8335612591816129b6565b925060208401356125a1816129b6565b929592945050506040919091013590565b600080604083850312156125c4578182fd5b82356125cf816129b6565b91506020830135612567816129cb565b600080604083850312156125f1578182fd5b82356125fc816129b6565b946020939093013593505050565b6000602080838503121561261c578182fd5b823567ffffffffffffffff80821115612633578384fd5b818501915085601f830112612646578384fd5b813581811115612658576126586129a0565b8060051b604051601f19603f8301168101818110858211171561267d5761267d6129a0565b604052828152858101935084860182860187018a101561269b578788fd5b8795505b838610156126c4576126b0816124d4565b85526001959095019493860193860161269f565b5098975050505050505050565b6000602082840312156126e2578081fd5b8135612517816129cb565b6000602082840312156126fe578081fd5b8151612517816129cb565b6000608082840312156124f5578081fd5b600080610180838503121561272d578182fd5b61273784846124e4565b91506127468460c085016124e4565b90509250929050565b600060208284031215612760578081fd5b5035919050565b60008060006060848603121561277b578283fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156127a9578081fd5b84359350602085013592506040850135915060608501356127c9816129cb565b939692955090935050565b6000602080835283518082850152825b81811015612800578581018301518582016040015282016127e4565b818111156128115783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156128ab5784516001600160a01b031683529383019391830191600101612886565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156128df576128df61298a565b500190565b6000826128ff57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561291e5761291e61298a565b500290565b6000828210156129355761293561298a565b500390565b600181811c9082168061294e57607f821691505b602082108114156124f557634e487b7160e01b600052602260045260246000fd5b60006000198214156129835761298361298a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610d4057600080fd5b8015158114610d4057600080fdfea264697066735822122078ac4b850b6dab9df2cff7e657bc791db5166d283e943be580b1cc2f5a123f2464736f6c63430008040033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000052b7d2dcc80cd2e40000000000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000000000000000000000000000000000000000000064869726f6b69000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044849524f00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): Hiroki
Arg [1] : symbol (string): HIRO
Arg [2] : initialSupply (uint256): 100000000000000000000000000
Arg [3] : _RouterAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
Arg [3] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [5] : 4869726f6b690000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 4849524f00000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

27019:13800:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40330:128;;;;;;;;;;-1:-1:-1;40330:128:0;;;;;:::i;:::-;40410:18;:40;;-1:-1:-1;;;;;;40410:40:0;-1:-1:-1;;;;;40410:40:0;;;;;;;;;;40330:128;;;4272:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27726:23;;;;;;;;;;-1:-1:-1;27726:23:0;;;;;;;;;;;7812:14:1;;7805:22;7787:41;;7775:2;7760:18;27726:23:0;7742:92:1;6764:242:0;;;;;;;;;;-1:-1:-1;6764:242:0;;;;;:::i;:::-;;:::i;38159:564::-;;;;;;;;;;-1:-1:-1;38159:564:0;;;;;:::i;:::-;;:::i;5392:108::-;;;;;;;;;;-1:-1:-1;5480:12:0;;5392:108;;;14993:25:1;;;14981:2;14966:18;5392:108:0;14948:76:1;30726:276:0;;;;;;;;;;-1:-1:-1;30726:276:0;;;;;:::i;:::-;;:::i;30429:289::-;;;;;;;;;;;;;:::i;40466:350::-;;;;;;;;;;-1:-1:-1;40466:350:0;;;;;:::i;:::-;;:::i;7586:295::-;;;;;;;;;;-1:-1:-1;7586:295:0;;;;;:::i;:::-;;:::i;27464:27::-;;;;;;;;;;-1:-1:-1;27464:27:0;;;;;;;;;;-1:-1:-1;;;;;27464:27:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6193:15:1;;;6175:34;;6245:15;;;6240:2;6225:18;;6218:43;6297:15;;;6277:18;;;6270:43;;;;6349:15;;;6344:2;6329:18;;6322:43;6124:3;6109:19;27464:27:0;6091:280:1;5234:93:0;;;;;;;;;;-1:-1:-1;5234:93:0;;5317:2;16699:36:1;;16687:2;16672:18;5234:93:0;16654:87:1;8290:272:0;;;;;;;;;;-1:-1:-1;8290:272:0;;;;;:::i;:::-;;:::i;27819:45::-;;;;;;;;;;;;;;;;26789:95;;;;;;;;;;-1:-1:-1;26789:95:0;;;;;:::i;:::-;;:::i;26892:120::-;;;;;;;;;;-1:-1:-1;26892:120:0;;;;;:::i;:::-;;:::i;30125:296::-;;;;;;;;;;;;;:::i;39205:326::-;;;;;;;;;;-1:-1:-1;39205:326:0;;;;;:::i;:::-;;:::i;40071:212::-;;;;;;;;;;-1:-1:-1;40071:212:0;;;;;:::i;:::-;;:::i;31142:159::-;;;;;;;;;;-1:-1:-1;31142:159:0;;;;;:::i;:::-;;:::i;5563:177::-;;;;;;;;;;-1:-1:-1;5563:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;5714:18:0;5682:7;5714:18;;;;;;;;;;;;5563:177;16524:103;;;;;;;;;;;;;:::i;28039:22::-;;;;;;;;;;-1:-1:-1;28039:22:0;;;;-1:-1:-1;;;;;28039:22:0;;;;;;-1:-1:-1;;;;;5862:32:1;;;5844:51;;5832:2;5817:18;28039:22:0;5799:102:1;28005:27:0;;;;;;;;;;-1:-1:-1;28005:27:0;;;;;;;-1:-1:-1;;;;;28005:27:0;;;27775:37;;;;;;;;;;;;;;;;29703:414;;;;;;;;;;-1:-1:-1;29703:414:0;;;;;:::i;:::-;;:::i;38067:52::-;;;;;;;;;;-1:-1:-1;38067:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15873:87;;;;;;;;;;-1:-1:-1;15946:6:0;;-1:-1:-1;;;;;15946:6:0;15873:87;;27552:48;;;;;;;;;;-1:-1:-1;27552:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4491:104;;;;;;;;;;;;;:::i;31010:124::-;;;;;;;;;;-1:-1:-1;31010:124:0;;;;;:::i;:::-;;:::i;9065:507::-;;;;;;;;;;-1:-1:-1;9065:507:0;;;;;:::i;:::-;;:::i;5946:234::-;;;;;;;;;;-1:-1:-1;5946:234:0;;;;;:::i;:::-;;:::i;27871:55::-;;;;;;;;;;;;;;;;39539:207;;;;;;;;;;;;;:::i;31319:160::-;;;;;;;;;;-1:-1:-1;31319:160:0;;;;;:::i;:::-;;:::i;31487:161::-;;;;;;;;;;-1:-1:-1;31487:161:0;;;;;:::i;:::-;;:::i;27933:41::-;;;;;;;;;;-1:-1:-1;27933:41:0;;;;;;;;26464:108;;;;;;;;;;-1:-1:-1;26464:108:0;;;;;:::i;:::-;;:::i;27681:38::-;;;;;;;;;;-1:-1:-1;27681:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6243:201;;;;;;;;;;-1:-1:-1;6243:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;6409:18:0;;;6377:7;6409:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6243:201;27413:19;;;;;;;;;;-1:-1:-1;27413:19:0;;;;;;;;;;;;;;;;;;;;;;;;;16304:25:1;;;16360:2;16345:18;;16338:34;;;;16388:18;;;16381:34;;;;16446:2;16431:18;;16424:34;16489:3;16474:19;;16467:35;16533:3;16518:19;;16511:35;16291:3;16276:19;27413::0;16258:294:1;27439:18:0;;;;;;;;;;-1:-1:-1;27439:18:0;;;;;;;;;;;;;;;;;;;;;27607:54;;;;;;;;;;-1:-1:-1;27607:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28971:724;;;;;;;;;;-1:-1:-1;28971:724:0;;;;;:::i;:::-;;:::i;16782:238::-;;;;;;;;;;-1:-1:-1;16782:238:0;;;;;:::i;:::-;;:::i;4272:100::-;4326:13;4359:5;4352:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4272:100;:::o;6764:242::-;6883:4;232:10;6944:32;232:10;6960:7;6969:6;6944:8;:32::i;:::-;-1:-1:-1;6994:4:0;;6764:242;-1:-1:-1;;;6764:242:0:o;38159:564::-;15946:6;;-1:-1:-1;;;;;15946:6:0;232:10;16093:23;16085:68;;;;-1:-1:-1;;;16085:68:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;38247:24:0;::::1;;::::0;;;:20:::1;:24;::::0;;;;;::::1;;:32;;::::0;::::1;;;38243:473;;-1:-1:-1::0;;;;;38296:24:0;::::1;;::::0;;;:20:::1;:24;::::0;;;;:31;;-1:-1:-1;;38296:31:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;38342:363:::1;;-1:-1:-1::0;;;;;5714:18:0;;5682:7;5714:18;;;;;;;;;;;38406:19:::1;;:36;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;38342:363:0::1;::::0;-1:-1:-1;38342:363:0::1;;-1:-1:-1::0;;;;;5714:18:0;;5682:7;5714:18;;;;;;;;;;;38523:19:::1;;:36;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;38578:21:0::1;::::0;-1:-1:-1;38602:22:0::1;38621:2:::0;38602:18:::1;:22::i;:::-;38658:10;38643:26;::::0;;;:14:::1;:26;::::0;;;;:46;;38578;;-1:-1:-1;38578:46:0;;38643:26;;;:46:::1;::::0;38578;;38643::::1;:::i;:::-;::::0;;;-1:-1:-1;;;38342:363:0::1;38159:564:::0;;:::o;30726:276::-;15946:6;;-1:-1:-1;;;;;15946:6:0;232:10;16093:23;16085:68;;;;-1:-1:-1;;;16085:68:0;;;;;;;:::i;:::-;30834:21:::1;;::::0;::::1;:11:::0;:21:::1;:::i;:::-;30811:10;:44:::0;;-1:-1:-1;;;;;;30811:44:0::1;-1:-1:-1::0;;;;;30811:44:0;;;::::1;::::0;;;::::1;::::0;;30883:15:::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;30866:14:::0;:32;;-1:-1:-1;;;;;;30866:32:0::1;-1:-1:-1::0;;;;;30866:32:0;;;::::1;::::0;;;::::1;::::0;;30927:16:::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;30909:15:::0;:34;;-1:-1:-1;;;;;;30909:34:0::1;-1:-1:-1::0;;;;;30909:34:0;;;::::1;::::0;;;::::1;::::0;;30975:19:::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;30954:18:::0;:40;;-1:-1:-1;;;;;;30954:40:0::1;-1:-1:-1::0;;;;;30954:40:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;30726:276:0:o;30429:289::-;30695:15;;30661:18;;30626:19;;30594:16;;30563:15;;30695:7;30526:21;30476:13;;30695:15;30661:18;30626:19;30594:16;30526:52;;;:::i;:::-;:84;;;;:::i;:::-;:119;;;;:::i;:::-;:153;;;;:::i;:::-;:184;;;;:::i;:::-;30502:208;;30429:289;:::o;40466:350::-;40544:18;;-1:-1:-1;;;;;40544:18:0;40522:115;;;;-1:-1:-1;;;40522:115:0;;10848:2:1;40522:115:0;;;10830:21:1;10887:2;10867:18;;;10860:30;10926:34;10906:18;;;10899:62;-1:-1:-1;;;10977:18:1;;;10970:31;11018:19;;40522:115:0;10820:223:1;40522:115:0;40655:18;;40648:124;;-1:-1:-1;;;40648:124:0;;40702:10;40648:124;;;6616:34:1;40735:4:0;6666:18:1;;;6659:43;6718:18;;;6711:34;;;-1:-1:-1;;;;;40655:18:0;;;;40648:39;;6551:18:1;;40648:124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40783:25;40789:10;40801:6;40783:5;:25::i;:::-;40466:350;:::o;7586:295::-;7717:4;232:10;7775:38;7791:4;232:10;7806:6;7775:15;:38::i;:::-;7824:27;7834:4;7840:2;7844:6;7824:9;:27::i;:::-;-1:-1:-1;7869:4:0;;7586:295;-1:-1:-1;;;;7586:295:0:o;8290:272::-;232:10;8405:4;8491:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;8491:27:0;;;;;;;;;;8405:4;;232:10;8466:66;;232:10;;8491:27;;:40;;8521:10;;8491:40;:::i;:::-;8466:8;:66::i;26789:95::-;26403:10;26393:21;;;;:9;:21;;;;;;;;26385:51;;;;-1:-1:-1;;;26385:51:0;;12015:2:1;26385:51:0;;;11997:21:1;12054:2;12034:18;;;12027:30;-1:-1:-1;;;12073:18:1;;;12066:47;12130:18;;26385:51:0;11987:167:1;26385:51:0;26859:17:::1;26865:2;26869:6;26859:5;:17::i;26892:120::-:0;26939:25;26945:10;26957:6;26939:5;:25::i;:::-;26980:24;;;26985:10;6930:51:1;;7012:2;6997:18;;6990:34;;;26980:24:0;;6903:18:1;26980:24:0;;;;;;;26892:120;:::o;30125:296::-;30397:16;;30362:19;;30326:20;;30293:17;;30261:16;;30397:8;30223:22;30173:13;;30397:16;30362:19;30326:20;30293:17;30223:54;;;:::i;39205:326::-;-1:-1:-1;;;;;39332:24:0;;39293:17;39332:24;;;:20;:24;;;;;;;;39328:38;;;-1:-1:-1;39365:1:0;;39205:326;-1:-1:-1;39205:326:0:o;39328:38::-;-1:-1:-1;;;;;39505:18:0;;;;;;:14;:18;;;;;;;;;39469:16;:20;;;;;;39422:10;;5714:18;;;;;;;;;39469:20;;39449:4;;39406:26;;;;:::i;:::-;39405:48;;;;:::i;:::-;:84;;;;:::i;:::-;:118;;;;:::i;:::-;39377:146;39205:326;-1:-1:-1;;39205:326:0:o;40071:212::-;15946:6;;-1:-1:-1;;;;;15946:6:0;232:10;16093:23;16085:68;;;;-1:-1:-1;;;16085:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40160:19:0;::::1;40156:119;;40181:36;::::0;40189:10:::1;::::0;40181:36;::::1;;;::::0;40210:6;;40181:36:::1;::::0;;;40210:6;40189:10;40181:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;38159:564:::0;;:::o;40156:119::-:1;40233:42;::::0;-1:-1:-1;;;40233:42:0;;40256:10:::1;40233:42;::::0;::::1;6930:51:1::0;6997:18;;;6990:34;;;-1:-1:-1;;;;;40233:22:0;::::1;::::0;::::1;::::0;6903:18:1;;40233:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31142:159::-:0;15946:6;;-1:-1:-1;;;;;15946:6:0;232:10;16093:23;16085:68;;;;-1:-1:-1;;;16085:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31255:26:0;;;::::1;;::::0;;;:22:::1;:26;::::0;;;;:38;;-1:-1:-1;;31255:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31142:159::o;16524:103::-;15946:6;;-1:-1:-1;;;;;15946:6:0;232:10;16093:23;16085:68;;;;-1:-1:-1;;;16085:68:0;;;;;;;:::i;:::-;16589:30:::1;16616:1;16589:18;:30::i;:::-;16524:103::o:0;29703:414::-;15946:6;;-1:-1:-1;;;;;15946:6:0;232:10;16093:23;16085:68;;;;-1:-1:-1;;;16085:68:0;;;;;;;:::i;:::-;-1:-1:-1;29903:12:0::1;:26:::0;;;;29940:19:::1;:40:::0;29991:30:::1;:62:::0;29703:414::o;4491:104::-;4547:13;4580:7;4573:14;;;;;:::i;31010:124::-;15946:6;;-1:-1:-1;;;;;15946:6:0;232:10;16093:23;16085:68;;;;-1:-1:-1;;;16085:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31094:20:0;;;::::1;;::::0;;;:16:::1;:20;::::0;;;;:32;;-1:-1:-1;;31094:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31010:124::o;9065:507::-;232:10;9185:4;9273:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;9273:27:0;;;;;;;;;;9185:4;;232:10;9333:35;;;;9311:122;;;;-1:-1:-1;;;9311:122:0;;14283:2:1;9311:122:0;;;14265:21:1;14322:2;14302:18;;;14295:30;14361:34;14341:18;;;14334:62;-1:-1:-1;;;14412:18:1;;;14405:35;14457:19;;9311:122:0;14255:227:1;9311:122:0;9469:60;9478:5;9485:7;9513:15;9494:16;:34;9469:8;:60::i;5946:234::-;6061:4;232:10;6122:28;232:10;6139:2;6143:6;6122:9;:28::i;39539:207::-;39582:17;39602:30;39621:10;39602:18;:30::i;:::-;39658:10;39643:26;;;;:14;:26;;;;;:42;;39582:50;;-1:-1:-1;39582:50:0;;39643:26;;;:42;;39582:50;;39643:42;:::i;:::-;;;;-1:-1:-1;;39696:42:0;;39704:10;;39696:42;;;;;39725:12;;39696:42;;;;39725:12;39704:10;39696:42;;;;;;;;;;;;;;;;;;;31319:160;15946:6;;-1:-1:-1;;;;;15946:6:0;232:10;16093:23;16085:68;;;;-1:-1:-1;;;16085:68:0;;;;;;;:::i;:::-;31391:6:::1;31386:86;31407:3;:10;31403:1;:14;31386:86;;;31456:4;31439:6;:14;31446:3;31450:1;31446:6;;;;;;-1:-1:-1::0;;;31446:6:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;31439:14:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;31439:14:0;:21;;-1:-1:-1;;31439:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31419:3;::::1;::::0;::::1;:::i;:::-;;;;31386:86;;31487:161:::0;15946:6;;-1:-1:-1;;;;;15946:6:0;232:10;16093:23;16085:68;;;;-1:-1:-1;;;16085:68:0;;;;;;;:::i;:::-;31556:11:::1;:26:::0;;-1:-1:-1;;31556:26:0::1;::::0;::::1;;::::0;;::::1;::::0;;;::::1;31598:11:::0;31593:47:::1;;31611:22;:29:::0;;-1:-1:-1;;31611:29:0::1;31636:4;31611:29;::::0;;31487:161;:::o;26464:108::-;15946:6;;-1:-1:-1;;;;;15946:6:0;232:10;16093:23;16085:68;;;;-1:-1:-1;;;16085:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26540:13:0;;;::::1;;::::0;;;:9:::1;:13;::::0;;;;:24;;-1:-1:-1;;26540:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26464:108::o;28971:724::-;15946:6;;-1:-1:-1;;;;;15946:6:0;232:10;16093:23;16085:68;;;;-1:-1:-1;;;16085:68:0;;;;;;;:::i;:::-;29113:23;::::1;29088:8;:48:::0;29166:17:::1;::::0;;::::1;;29147:16:::0;:36;29214:18:::1;::::0;;::::1;;29194:17:::0;:38;29266:21:::1;::::0;;::::1;;29243:20:::0;:44;29320:20:::1;::::0;;::::1;;29298:19:::0;:42;29370:17:::1;::::0;;::::1;;29351:16:::0;:36;29424:22;::::1;29400:7;:46:::0;29475:16;;::::1;;29457:15:::0;:34;29521:17;;::::1;;29502:16:::0;:36;29571:20;::::1;;29549:19:::0;:42;29623:19;::::1;;29602:18:::0;:40;29671:16:::1;;29653:15:::0;:34;28971:724::o;16782:238::-;15946:6;;-1:-1:-1;;;;;15946:6:0;232:10;16093:23;16085:68;;;;-1:-1:-1;;;16085:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16885:22:0;::::1;16863:110;;;::::0;-1:-1:-1;;;16863:110:0;;10038:2:1;16863:110:0::1;::::0;::::1;10020:21:1::0;10077:2;10057:18;;;10050:30;10116:34;10096:18;;;10089:62;-1:-1:-1;;;10167:18:1;;;10160:36;10213:19;;16863:110:0::1;10010:228:1::0;16863:110:0::1;16984:28;17003:8;16984:18;:28::i;12807:380::-:0;-1:-1:-1;;;;;12943:19:0;;12935:68;;;;-1:-1:-1;;;12935:68:0;;13878:2:1;12935:68:0;;;13860:21:1;13917:2;13897:18;;;13890:30;13956:34;13936:18;;;13929:62;-1:-1:-1;;;14007:18:1;;;14000:34;14051:19;;12935:68:0;13850:226:1;12935:68:0;-1:-1:-1;;;;;13022:21:0;;13014:68;;;;-1:-1:-1;;;13014:68:0;;10445:2:1;13014:68:0;;;10427:21:1;10484:2;10464:18;;;10457:30;10523:34;10503:18;;;10496:62;-1:-1:-1;;;10574:18:1;;;10567:32;10616:19;;13014:68:0;10417:224:1;13014:68:0;-1:-1:-1;;;;;13095:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13147:32;;14993:25:1;;;13147:32:0;;14966:18:1;13147:32:0;;;;;;;12807:380;;;:::o;11046:399::-;-1:-1:-1;;;;;11130:21:0;;11122:65;;;;-1:-1:-1;;;11122:65:0;;14689:2:1;11122:65:0;;;14671:21:1;14728:2;14708:18;;;14701:30;14767:33;14747:18;;;14740:61;14818:18;;11122:65:0;14661:181:1;11122:65:0;11278:6;11262:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;11295:18:0;;:9;:18;;;;;;;;;;:28;;11317:6;;11295:9;:28;;11317:6;;11295:28;:::i;:::-;;;;-1:-1:-1;;11339:37:0;;14993:25:1;;;-1:-1:-1;;;;;11339:37:0;;;11356:1;;11339:37;;14981:2:1;14966:18;11339:37:0;;;;;;;38159:564;;:::o;13474:502::-;-1:-1:-1;;;;;6409:18:0;;;13609:24;6409:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;13676:37:0;;13672:297;;13776:6;13756:16;:26;;13730:117;;;;-1:-1:-1;;;13730:117:0;;11250:2:1;13730:117:0;;;11232:21:1;11289:2;11269:18;;;11262:30;11328:31;11308:18;;;11301:59;11377:18;;13730:117:0;11222:179:1;13730:117:0;13891:51;13900:5;13907:7;13935:6;13916:16;:25;13891:8;:51::i;:::-;13474:502;;;;:::o;31937:4032::-;32119:11;;;;32115:102;;;-1:-1:-1;;;;;32155:12:0;;;;;;:6;:12;;;;;;;;;:26;;-1:-1:-1;;;;;;32171:10:0;;;;;;:6;:10;;;;;;;;32155:26;32147:58;;;;-1:-1:-1;;;32147:58:0;;13124:2:1;32147:58:0;;;13106:21:1;13163:2;13143:18;;;13136:30;-1:-1:-1;;;13182:18:1;;;13175:49;13241:18;;32147:58:0;13096:169:1;32147:58:0;-1:-1:-1;;;;;32233:22:0;;;;;;:16;:22;;;;;;;;;:46;;-1:-1:-1;;;;;;32259:20:0;;;;;;:16;:20;;;;;;;;32233:46;32229:143;;;32296:43;32322:4;32328:2;32332:6;32296:25;:43::i;32229:143::-;32416:12;;32406:6;:22;;:41;;;-1:-1:-1;15946:6:0;;-1:-1:-1;;;;;32432:15:0;;;15946:6;;32432:15;32406:41;:58;;;-1:-1:-1;15946:6:0;;-1:-1:-1;;;;;32451:13:0;;;15946:6;;32451:13;32406:58;32384:134;;;;-1:-1:-1;;;32384:134:0;;9280:2:1;32384:134:0;;;9262:21:1;9319:2;9299:18;;;9292:30;9358:28;9338:18;;;9331:56;9404:18;;32384:134:0;9252:176:1;32384:134:0;32581:7;;32552:6;;-1:-1:-1;;;;;32573:15:0;;;32581:7;;32573:15;32569:3074;;;32691:10;:20;32766:11;;32740:8;:22;32624:168;;32668:4;;-1:-1:-1;;;;;32691:20:0;;;;32731:31;;:6;:31;:::i;:::-;32730:47;;;;:::i;:::-;32624:25;:168::i;:::-;32874:14;;32937:11;;32917:16;;32807:156;;32851:4;;-1:-1:-1;;;;;32874:14:0;;;;32908:25;;:6;:25;:::i;32807:156::-;33045:15;;33110:11;;33089:17;;32978:158;;33022:4;;-1:-1:-1;;;;;33045:15:0;;;;33080:26;;:6;:26;:::i;32978:158::-;33218:18;;33289:11;;33265:20;;33151:164;;33195:4;;-1:-1:-1;;;;;33218:18:0;;;;33256:29;;:6;:29;:::i;33151:164::-;33504:11;;33462:16;;33440:19;;33330:200;;33374:4;;33405;;33440:38;;33462:16;33440:38;:::i;:::-;33430:49;;:6;:49;:::i;33330:200::-;33592:11;;33572:16;;33563:25;;:6;:25;:::i;:::-;33562:41;;;;:::i;:::-;33545:13;;:58;;;;;;;:::i;:::-;;;;-1:-1:-1;;33668:11:0;;33645:19;;33636:28;;:6;:28;:::i;:::-;33635:44;;;;:::i;:::-;33618:13;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;33752:11:0;;33731:17;:15;:17::i;:::-;33722:26;;:6;:26;:::i;:::-;33721:42;;;;:::i;:::-;33712:51;;:6;:51;:::i;:::-;33696:67;;32569:3074;;;33791:7;;-1:-1:-1;;;;;33785:13:0;;;33791:7;;33785:13;33781:1862;;;33902:10;:20;33976:11;;33951:7;:21;33835:167;;33879:4;;-1:-1:-1;;;;;33902:20:0;;;;33942:30;;:6;:30;:::i;33835:167::-;34084:14;;34146:11;;34127:15;;34017:155;;34061:4;;-1:-1:-1;;;;;34084:14:0;;;;34118:24;;:6;:24;:::i;34017:155::-;34254:15;;34318:11;;34298:16;;34187:157;;34231:4;;-1:-1:-1;;;;;34254:15:0;;;;34289:25;;:6;:25;:::i;34187:157::-;34426:18;;34496:11;;34473:19;;34359:163;;34403:4;;-1:-1:-1;;;;;34426:18:0;;;;34464:28;;:6;:28;:::i;34359:163::-;34688:11;;34668:15;;34647:18;;34537:177;;34581:4;;34612;;34647:36;;34668:15;34647:36;:::i;34537:177::-;34775:11;;34756:15;;34747:24;;:6;:24;:::i;:::-;34746:40;;;;:::i;:::-;34729:13;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;34850:11:0;;34828:18;;34819:27;;:6;:27;:::i;:::-;34818:43;;;;:::i;:::-;34801:13;;:60;;;;;;;:::i;:::-;;;;-1:-1:-1;;34933:11:0;;34913:16;:14;:16::i;33781:1862::-;35058:4;35009:28;5714:18;;;;;;;;;;;35107:12;;35083:36;;35079:112;;-1:-1:-1;35163:12:0;;35079:112;35273:30;;35232:71;;;;;;;35340:57;;-1:-1:-1;35381:16:0;;-1:-1:-1;;;35381:16:0;;;;35380:17;35340:57;:100;;;;-1:-1:-1;35418:22:0;;;;35340:100;35318:314;;;35498:30;;35475:53;;35580:36;35595:20;35580:14;:36::i;:::-;33781:1862;;;-1:-1:-1;;;;;35677:26:0;;;;;;:22;:26;;;;;;;;;:99;;;35757:19;;35740:13;35724;35734:2;-1:-1:-1;;;;;5714:18:0;5682:7;5714:18;;;;;;;;;;;;5563:177;35724:13;:29;;;;:::i;:::-;:52;;35677:99;:135;;;-1:-1:-1;15946:6:0;;-1:-1:-1;;;;;35797:15:0;;;15946:6;;35797:15;35677:135;:169;;;-1:-1:-1;15946:6:0;;-1:-1:-1;;;;;35833:13:0;;;15946:6;;35833:13;35677:169;35655:245;;;;-1:-1:-1;;;35655:245:0;;9280:2:1;35655:245:0;;;9262:21:1;9319:2;9299:18;;;9292:30;9358:28;9338:18;;;9331:56;9404:18;;35655:245:0;9252:176:1;35655:245:0;35911:50;35937:4;35943:2;35947:13;35911:25;:50::i;11778:591::-;-1:-1:-1;;;;;11862:21:0;;11854:67;;;;-1:-1:-1;;;11854:67:0;;12722:2:1;11854:67:0;;;12704:21:1;12761:2;12741:18;;;12734:30;12800:34;12780:18;;;12773:62;-1:-1:-1;;;12851:18:1;;;12844:31;12892:19;;11854:67:0;12694:223:1;11854:67:0;-1:-1:-1;;;;;12021:18:0;;11996:22;12021:18;;;;;;;;;;;12058:24;;;;12050:71;;;;-1:-1:-1;;;12050:71:0;;9635:2:1;12050:71:0;;;9617:21:1;9674:2;9654:18;;;9647:30;9713:34;9693:18;;;9686:62;-1:-1:-1;;;9764:18:1;;;9757:32;9806:19;;12050:71:0;9607:224:1;12050:71:0;-1:-1:-1;;;;;12157:18:0;;:9;:18;;;;;;;;;;12178:23;;;12157:44;;12223:12;:22;;12195:6;;12157:9;12223:22;;12195:6;;12223:22;:::i;:::-;;;;-1:-1:-1;;12263:37:0;;14993:25:1;;;12289:1:0;;-1:-1:-1;;;;;12263:37:0;;;;;14981:2:1;14966:18;12263:37:0;;;;;;;40181:36:::1;38159:564:::0;;:::o;17180:191::-;17273:6;;;-1:-1:-1;;;;;17290:17:0;;;-1:-1:-1;;;;;;17290:17:0;;;;;;;17323:40;;17273:6;;;17290:17;17273:6;;17323:40;;17254:16;;17323:40;17180:191;;:::o;31656:273::-;31787:33;31803:4;31809:2;31813:6;31787:15;:33::i;:::-;31831:37;31851:4;31857:2;31861:6;31831:19;:37::i;:::-;31879:42;31904:4;31910:2;31914:6;31879:24;:42::i;35977:911::-;28144:16;:23;;-1:-1:-1;;;;28144:23:0;-1:-1:-1;;;28144:23:0;;;36133:13:::1;::::0;36117::::1;::::0;:29:::1;::::0;36133:13;36117:29:::1;:::i;:::-;36113:47;;36153:7;;36113:47;36170:17;36261:13;;36245;;:29;;;;:::i;:::-;36214:13;::::0;36191:36:::1;::::0;:20;:36:::1;:::i;:::-;36190:85;;;;:::i;:::-;36170:105;;36320:12;36304:13;;:28;:96;;;-1:-1:-1::0;36365:35:0::1;36388:12:::0;36365:20;:35:::1;:::i;:::-;36349:13;;:51;36304:96;36286:133;;;36412:7;;;36286:133;36446:12;36429:13;;:29;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;36486:35:0::1;::::0;-1:-1:-1;36509:12:0;36486:20;:35:::1;:::i;:::-;36469:13;;:52;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;36534:17:0::1;::::0;-1:-1:-1;36577:16:0::1;36592:1;36577:12:::0;:16:::1;:::i;:::-;36554:39;::::0;:20;:39:::1;:::i;:::-;36534:59:::0;-1:-1:-1;36629:21:0::1;36663:27;36534:59:::0;36663:16:::1;:27::i;:::-;36701:70;36714:16;36729:1;36714:12:::0;:16:::1;:::i;:::-;36732:38;36756:14:::0;36732:21:::1;:38;:::i;:::-;36701:12;:70::i;:::-;36782:20;36805:38;36829:14:::0;36805:21:::1;:38;:::i;:::-;36782:61;;36854:26;36864:15;36854:9;:26::i;:::-;28178:1;;;;;-1:-1:-1::0;28190:16:0;:24;;-1:-1:-1;;;;28190:24:0;;;35977:911::o;10051:708::-;-1:-1:-1;;;;;10182:18:0;;10174:68;;;;-1:-1:-1;;;10174:68:0;;13472:2:1;10174:68:0;;;13454:21:1;13511:2;13491:18;;;13484:30;13550:34;13530:18;;;13523:62;-1:-1:-1;;;13601:18:1;;;13594:35;13646:19;;10174:68:0;13444:227:1;10174:68:0;-1:-1:-1;;;;;10261:16:0;;10253:64;;;;-1:-1:-1;;;10253:64:0;;8876:2:1;10253:64:0;;;8858:21:1;8915:2;8895:18;;;8888:30;8954:34;8934:18;;;8927:62;-1:-1:-1;;;9005:18:1;;;8998:33;9048:19;;10253:64:0;8848:225:1;10253:64:0;-1:-1:-1;;;;;10403:15:0;;10381:19;10403:15;;;;;;;;;;;10451:21;;;;10429:109;;;;-1:-1:-1;;;10429:109:0;;11608:2:1;10429:109:0;;;11590:21:1;11647:2;11627:18;;;11620:30;11686:34;11666:18;;;11659:62;-1:-1:-1;;;11737:18:1;;;11730:36;11783:19;;10429:109:0;11580:228:1;10429:109:0;-1:-1:-1;;;;;10574:15:0;;;:9;:15;;;;;;;;;;;10592:20;;;10574:38;;10634:13;;;;;;;;:23;;10606:6;;10574:9;10634:23;;10606:6;;10634:23;:::i;:::-;;;;;;;;10690:2;-1:-1:-1;;;;;10675:26:0;10684:4;-1:-1:-1;;;;;10675:26:0;;10694:6;10675:26;;;;14993:25:1;;14981:2;14966:18;;14948:76;10675:26:0;;;;;;;;10714:37;40071:212;39754:272;39876:17;39920:4;39906:10;;39897:6;:19;;;;:::i;:::-;39896:28;;;;:::i;:::-;-1:-1:-1;;;;;39935:22:0;;;;;;:16;:22;;;;;:38;;39876:48;;-1:-1:-1;39876:48:0;;39935:22;;;:38;;39876:48;;39935:38;:::i;:::-;;;;-1:-1:-1;;;;;;;39984:18:0;;;;;;:14;:18;;;;;:34;;40006:12;;39984:18;:34;;40006:12;;39984:34;:::i;:::-;;;;-1:-1:-1;;;;;;39754:272:0:o;38731:266::-;-1:-1:-1;;;;;38862:26:0;;;;;;:20;:26;;;;;;;;38858:61;;;38913:6;38890:19;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;;38858:61:0;-1:-1:-1;;;;;38934:24:0;;;;;;:20;:24;;;;;;;;38930:59;;;38983:6;38960:19;;:29;;;;;;;:::i;36912:457::-;37002:16;;;37016:1;37002:16;;;;;;;;36978:21;;37002:16;;;;;;;;;;-1:-1:-1;37002:16:0;36978:40;;37047:4;37029;37034:1;37029:7;;;;;;-1:-1:-1;;;37029:7:0;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;37029:23:0;;;-1:-1:-1;;;;;37029:23:0;;;;;37073:9;;;;;;;;;-1:-1:-1;;;;;37073:9:0;-1:-1:-1;;;;;37073:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37063:4;37068:1;37063:7;;;;;;-1:-1:-1;;;37063:7:0;;;;;;;;;-1:-1:-1;;;;;37063:26:0;;;:7;;;;;;;;;:26;37134:9;;37102:56;;37119:4;;37134:9;;;;37146:11;37102:8;:56::i;:::-;37171:9;;:190;;-1:-1:-1;;;37171:190:0;;:9;;;;-1:-1:-1;;;;;37171:9:0;;:60;;:190;;37246:11;;37272:1;;37288:4;;37315;;37335:15;;37171:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36912:457;;:::o;37377:404::-;37490:9;;37458:56;;37475:4;;37490:9;;;-1:-1:-1;;;;;37490:9:0;37502:11;37458:8;:56::i;:::-;37527:9;;-1:-1:-1;;;;;37527:9:0;;;;;:25;37560:9;37593:4;37613:11;37639:1;;37725:7;15946:6;;-1:-1:-1;;;;;15946:6:0;;15873:87;37725:7;37527:246;;;;;;-1:-1:-1;;;;;;37527:246:0;;;-1:-1:-1;;;;;7394:15:1;;;37527:246:0;;;7376:34:1;7426:18;;;7419:34;;;;7469:18;;;7462:34;;;;7512:18;;;7505:34;7576:15;;;7555:19;;;7548:44;37747:15:0;7608:19:1;;;7601:35;7310:19;;37527:246:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37377:404;;:::o;39005:192::-;39077:19;;5480:12;;39061:35;;;;:::i;:::-;39057:53;;39005:192;:::o;39057:53::-;39169:19;;5480:12;;39153:35;;;;:::i;:::-;39135:13;:6;39144:4;39135:13;:::i;:::-;39134:55;;;;:::i;:::-;39120:10;;:69;;;;;;;:::i;:::-;;;;-1:-1:-1;;;39005:192:0:o;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;:::-;63:85;;;:::o;153:160::-;209:5;254:3;245:6;240:3;236:16;232:26;229:2;;;275:5;268;261:20;229:2;-1:-1:-1;301:6:1;219:94;-1:-1:-1;219:94:1:o;318:257::-;377:6;430:2;418:9;409:7;405:23;401:32;398:2;;;451:6;443;436:22;398:2;495:9;482:23;514:31;539:5;514:31;:::i;:::-;564:5;388:187;-1:-1:-1;;;388:187:1:o;580:261::-;650:6;703:2;691:9;682:7;678:23;674:32;671:2;;;724:6;716;709:22;671:2;761:9;755:16;780:31;805:5;780:31;:::i;846:398::-;914:6;922;975:2;963:9;954:7;950:23;946:32;943:2;;;996:6;988;981:22;943:2;1040:9;1027:23;1059:31;1084:5;1059:31;:::i;:::-;1109:5;-1:-1:-1;1166:2:1;1151:18;;1138:32;1179:33;1138:32;1179:33;:::i;:::-;1231:7;1221:17;;;933:311;;;;;:::o;1249:466::-;1326:6;1334;1342;1395:2;1383:9;1374:7;1370:23;1366:32;1363:2;;;1416:6;1408;1401:22;1363:2;1460:9;1447:23;1479:31;1504:5;1479:31;:::i;:::-;1529:5;-1:-1:-1;1586:2:1;1571:18;;1558:32;1599:33;1558:32;1599:33;:::i;:::-;1353:362;;1651:7;;-1:-1:-1;;;1705:2:1;1690:18;;;;1677:32;;1353:362::o;1720:392::-;1785:6;1793;1846:2;1834:9;1825:7;1821:23;1817:32;1814:2;;;1867:6;1859;1852:22;1814:2;1911:9;1898:23;1930:31;1955:5;1930:31;:::i;:::-;1980:5;-1:-1:-1;2037:2:1;2022:18;;2009:32;2050:30;2009:32;2050:30;:::i;2117:325::-;2185:6;2193;2246:2;2234:9;2225:7;2221:23;2217:32;2214:2;;;2267:6;2259;2252:22;2214:2;2311:9;2298:23;2330:31;2355:5;2330:31;:::i;:::-;2380:5;2432:2;2417:18;;;;2404:32;;-1:-1:-1;;;2204:238:1:o;2447:1177::-;2531:6;2562:2;2605;2593:9;2584:7;2580:23;2576:32;2573:2;;;2626:6;2618;2611:22;2573:2;2671:9;2658:23;2700:18;2741:2;2733:6;2730:14;2727:2;;;2762:6;2754;2747:22;2727:2;2805:6;2794:9;2790:22;2780:32;;2850:7;2843:4;2839:2;2835:13;2831:27;2821:2;;2877:6;2869;2862:22;2821:2;2918;2905:16;2940:2;2936;2933:10;2930:2;;;2946:18;;:::i;:::-;2992:2;2989:1;2985:10;3024:2;3018:9;3087:2;3083:7;3078:2;3074;3070:11;3066:25;3058:6;3054:38;3142:6;3130:10;3127:22;3122:2;3110:10;3107:18;3104:46;3101:2;;;3153:18;;:::i;:::-;3189:2;3182:22;3239:18;;;3273:15;;;;-1:-1:-1;3308:11:1;;;3338;;;3334:20;;3331:33;-1:-1:-1;3328:2:1;;;3382:6;3374;3367:22;3328:2;3409:6;3400:15;;3424:169;3438:2;3435:1;3432:9;3424:169;;;3495:23;3514:3;3495:23;:::i;:::-;3483:36;;3456:1;3449:9;;;;;3539:12;;;;3571;;3424:169;;;-1:-1:-1;3612:6:1;2542:1082;-1:-1:-1;;;;;;;;2542:1082:1:o;3629:251::-;3685:6;3738:2;3726:9;3717:7;3713:23;3709:32;3706:2;;;3759:6;3751;3744:22;3706:2;3803:9;3790:23;3822:28;3844:5;3822:28;:::i;3885:255::-;3952:6;4005:2;3993:9;3984:7;3980:23;3976:32;3973:2;;;4026:6;4018;4011:22;3973:2;4063:9;4057:16;4082:28;4104:5;4082:28;:::i;4145:206::-;4233:6;4286:3;4274:9;4265:7;4261:23;4257:33;4254:2;;;4308:6;4300;4293:22;4356:360;4470:6;4478;4531:3;4519:9;4510:7;4506:23;4502:33;4499:2;;;4553:6;4545;4538:22;4499:2;4581:50;4623:7;4612:9;4581:50;:::i;:::-;4571:60;;4650;4702:7;4696:3;4685:9;4681:19;4650:60;:::i;:::-;4640:70;;4489:227;;;;;:::o;4721:190::-;4780:6;4833:2;4821:9;4812:7;4808:23;4804:32;4801:2;;;4854:6;4846;4839:22;4801:2;-1:-1:-1;4882:23:1;;4791:120;-1:-1:-1;4791:120:1:o;4916:316::-;5004:6;5012;5020;5073:2;5061:9;5052:7;5048:23;5044:32;5041:2;;;5094:6;5086;5079:22;5041:2;5128:9;5122:16;5112:26;;5178:2;5167:9;5163:18;5157:25;5147:35;;5222:2;5211:9;5207:18;5201:25;5191:35;;5031:201;;;;;:::o;5237:456::-;5320:6;5328;5336;5344;5397:3;5385:9;5376:7;5372:23;5368:33;5365:2;;;5419:6;5411;5404:22;5365:2;5460:9;5447:23;5437:33;;5517:2;5506:9;5502:18;5489:32;5479:42;;5568:2;5557:9;5553:18;5540:32;5530:42;;5622:2;5611:9;5607:18;5594:32;5635:28;5657:5;5635:28;:::i;:::-;5355:338;;;;-1:-1:-1;5355:338:1;;-1:-1:-1;;5355:338:1:o;8066:603::-;8178:4;8207:2;8236;8225:9;8218:21;8268:6;8262:13;8311:6;8306:2;8295:9;8291:18;8284:34;8336:4;8349:140;8363:6;8360:1;8357:13;8349:140;;;8458:14;;;8454:23;;8448:30;8424:17;;;8443:2;8420:26;8413:66;8378:10;;8349:140;;;8507:6;8504:1;8501:13;8498:2;;;8577:4;8572:2;8563:6;8552:9;8548:22;8544:31;8537:45;8498:2;-1:-1:-1;8653:2:1;8632:15;-1:-1:-1;;8628:29:1;8613:45;;;;8660:2;8609:54;;8187:482;-1:-1:-1;;;8187:482:1:o;12159:356::-;12361:2;12343:21;;;12380:18;;;12373:30;12439:34;12434:2;12419:18;;12412:62;12506:2;12491:18;;12333:182::o;15029:983::-;15291:4;15339:3;15328:9;15324:19;15370:6;15359:9;15352:25;15396:2;15434:6;15429:2;15418:9;15414:18;15407:34;15477:3;15472:2;15461:9;15457:18;15450:31;15501:6;15536;15530:13;15567:6;15559;15552:22;15605:3;15594:9;15590:19;15583:26;;15644:2;15636:6;15632:15;15618:29;;15665:4;15678:195;15692:6;15689:1;15686:13;15678:195;;;15757:13;;-1:-1:-1;;;;;15753:39:1;15741:52;;15848:15;;;;15813:12;;;;15789:1;15707:9;15678:195;;;-1:-1:-1;;;;;;;15929:32:1;;;;15924:2;15909:18;;15902:60;-1:-1:-1;;;15993:3:1;15978:19;15971:35;15890:3;15300:712;-1:-1:-1;;;15300:712:1:o;16746:128::-;16786:3;16817:1;16813:6;16810:1;16807:13;16804:2;;;16823:18;;:::i;:::-;-1:-1:-1;16859:9:1;;16794:80::o;16879:217::-;16919:1;16945;16935:2;;-1:-1:-1;;;16970:31:1;;17024:4;17021:1;17014:15;17052:4;16977:1;17042:15;16935:2;-1:-1:-1;17081:9:1;;16925:171::o;17101:168::-;17141:7;17207:1;17203;17199:6;17195:14;17192:1;17189:21;17184:1;17177:9;17170:17;17166:45;17163:2;;;17214:18;;:::i;:::-;-1:-1:-1;17254:9:1;;17153:116::o;17274:125::-;17314:4;17342:1;17339;17336:8;17333:2;;;17347:18;;:::i;:::-;-1:-1:-1;17384:9:1;;17323:76::o;17404:380::-;17483:1;17479:12;;;;17526;;;17547:2;;17601:4;17593:6;17589:17;17579:27;;17547:2;17654;17646:6;17643:14;17623:18;17620:38;17617:2;;;17700:10;17695:3;17691:20;17688:1;17681:31;17735:4;17732:1;17725:15;17763:4;17760:1;17753:15;17789:135;17828:3;-1:-1:-1;;17849:17:1;;17846:2;;;17869:18;;:::i;:::-;-1:-1:-1;17916:1:1;17905:13;;17836:88::o;17929:127::-;17990:10;17985:3;17981:20;17978:1;17971:31;18021:4;18018:1;18011:15;18045:4;18042:1;18035:15;18061:127;18122:10;18117:3;18113:20;18110:1;18103:31;18153:4;18150:1;18143:15;18177:4;18174:1;18167:15;18193:131;-1:-1:-1;;;;;18268:31:1;;18258:42;;18248:2;;18314:1;18311;18304:12;18329:118;18415:5;18408:13;18401:21;18394:5;18391:32;18381:2;;18437:1;18434;18427:12

Swarm Source

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