ETH Price: $2,488.75 (-1.38%)

Token

CrypDough (Dough)
 

Overview

Max Total Supply

1,000,000,000,000,000 Dough

Holders

51

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
517,556,626.42161605915108973 Dough

Value
$0.00
0x5117b71a7c72a860b6ff3069fe99726ad656d7fd
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:
DxFeeToken

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;
pragma experimental ABIEncoderV2;


/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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);
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

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

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

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

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

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

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


interface UniSwapFactory {
    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 IIUniSwapPair {
    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 IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function WBNB() external pure returns (address);

    function WAVAX() external pure returns (address);

    function WHT() 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 addLiquidityBNB(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function addLiquidityAVAX(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function addLiquidityHT(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);

    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);

    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);

    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);

    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);

    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);

    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}


interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

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

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

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

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

    function swapExactTokensForBNBSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactTokensForAVAXSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactTokensForHTSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

}

contract DxFeeToken is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    address private dead = 0x000000000000000000000000000000000000dEaD;
    uint256 public maxLiqFee = 10;
    uint256 public maxTaxFee = 10; 
    uint256 public maxDevFee = 10;
    uint256 public minMxTxPercentage = 50;
    uint256 public maxSellTaxFee = 20;
    uint256 public prevLiqFee;
    uint256 public prevTaxFee;
    uint256 public prevDevFee;
    uint256 public prevSellFee;
    
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isdevWallet;
    
    address[] private _excluded;
    address public _devWalletAddress;     // team wallet here
    address public router;
    address public basePair;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;
    bool public mintedByDxsale = true;
    string private _name;
    string private _symbol;
    uint8 private _decimals;
    
    uint256 public _taxFee;
    uint256 private _previousTaxFee;
    
    uint256 public _liquidityFee;
    uint256 private _previousLiquidityFee;
    
    uint256 public _devFee;
    uint256 private _previousDevFee = _devFee;

    uint256 public _sellTaxFee;
    uint256 private _previousSellFee;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool public inSwapAndLiquify;
    bool public swapAndLiquifyEnabled;
    
    uint256 public _maxTxAmount;
    uint256 public numTokensSellToAddToLiquidity;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor (address tokenOwner,string memory name_, string memory symbol_,uint8 decimal_, uint256 amountOfTokenWei,uint8[4] memory setFees, uint256[5] memory maxFees, address devWalletAddress_, address _router, address _basePair) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimal_;
        _tTotal = amountOfTokenWei;
        _rTotal = (MAX - (MAX % _tTotal));
        router = _router;
        basePair = _basePair;    
        _rOwned[tokenOwner] = _rTotal;
        
        maxTaxFee = maxFees[0];        
        maxLiqFee = maxFees[1];
        maxDevFee = maxFees[2];
        minMxTxPercentage = maxFees[3];
        maxSellTaxFee = maxFees[4]; 
        _taxFee = setFees[0];
        _previousTaxFee = _taxFee;     
        _liquidityFee = setFees[1];
        _previousLiquidityFee = _liquidityFee;
        _devFee = setFees[2];
        _previousDevFee = _devFee;
        _sellTaxFee = setFees[3];  
        _previousSellFee = _sellTaxFee;      
        _devWalletAddress = devWalletAddress_;

        _maxTxAmount = amountOfTokenWei;
        numTokensSellToAddToLiquidity = amountOfTokenWei.mul(1).div(1000);

        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
         // Create a uniswap pair for this new token
        uniswapV2Pair = UniSwapFactory(_uniswapV2Router.factory())
            .createPair(address(this), basePair);

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_devWalletAddress] = true;
    
        //set wallet provided to true
        _isdevWallet[_devWalletAddress] = true;
        
        emit Transfer(address(0), tokenOwner, _tTotal);
    }

    function getWrapAddr() public view returns (address){

        return basePair;

    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }
    
    function excludeFromFee(address account) public onlyOwner {
        require(!_isExcludedFromFee[account], "Account is already excluded");
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        require(_isExcludedFromFee[account], "Account is already included");
        _isExcludedFromFee[account] = false;
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
         require(taxFee >= 0 && taxFee <=maxTaxFee,"taxFee out of range");
        _taxFee = taxFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
         require(liquidityFee >= 0 && liquidityFee <=maxLiqFee,"liquidityFee out of range");
        _liquidityFee = liquidityFee;
    }
    
    function setDevFeePercent(uint256 devFee) external onlyOwner() {
        require(devFee >= 0 && devFee <=maxDevFee,"teamFee out of range");
        _devFee = devFee;
    }      

    function setSellTaxFeePercent(uint256 sellTaxFee) external onlyOwner() {
         require(sellTaxFee >= 0 && sellTaxFee <=maxSellTaxFee,"taxFee out of range");
        _sellTaxFee = sellTaxFee;
    }
   
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        require(maxTxPercent >= minMxTxPercentage && maxTxPercent <=100,"maxTxPercent out of range");
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }
        
    function setDevWalletAddress(address _addr) public onlyOwner {
        require(!_isdevWallet[_addr], "Wallet address already set");
        if (!_isExcludedFromFee[_addr]) {
            excludeFromFee(_addr);
        }
        _isdevWallet[_addr] = true;
        _devWalletAddress = _addr;
    }

    function replaceDevWalletAddress(address _addr, address _newAddr) public onlyOwner {
        require(_isdevWallet[_addr], "Wallet address not set previously");
        if (_isExcludedFromFee[_addr]) {
            includeInFee(_addr);
        }
        _isdevWallet[_addr] = false;
        if (_devWalletAddress == _addr){
            setDevWalletAddress(_newAddr);
        }
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tDev, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tDev);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tDev = calculateDevFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tDev);
        return (tTransferAmount, tFee, tLiquidity, tDev);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rDev = tDev.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rDev);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function _takeDev(uint256 tDev) private {
        uint256 currentRate = _getRate();
        uint256 rDev = tDev.mul(currentRate);
        _rOwned[_devWalletAddress] = _rOwned[_devWalletAddress].add(rDev);
        if(_isExcluded[_devWalletAddress])
            _tOwned[_devWalletAddress] = _tOwned[_devWalletAddress].add(tDev);
    }    
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
            return _amount.mul(_taxFee).div(
                10**2
            );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function calculateDevFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_devFee).div(
            10**2
        );
    }    
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0 && _devFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousDevFee = _devFee;
        _previousSellFee = _sellTaxFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
        _devFee = 0;
        _sellTaxFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
        _devFee = _previousDevFee;
        _sellTaxFee = _previousSellFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        //Special case when sell is uniswapV2Pair
        if (to == address(uniswapV2Pair)){
            _taxFee = _sellTaxFee;
        }

        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);

        //reset tax fees
        restoreAllFee();
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

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

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

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

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

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

        catch(bytes memory) {

            try uniswapV2Router.swapExactTokensForBNBSupportingFeeOnTransferTokens(
                tokenAmount,
                0, // accept any amount of ETH
                path,
                address(this),
                block.timestamp
            ) {}
            catch(bytes memory) {
                try uniswapV2Router.swapExactTokensForAVAXSupportingFeeOnTransferTokens(
                    tokenAmount,
                    0, // accept any amount of ETH
                    path,
                    address(this),
                    block.timestamp
                ){}

                catch(bytes memory) {
                    try uniswapV2Router.swapExactTokensForHTSupportingFeeOnTransferTokens(
                        tokenAmount,
                        0, // accept any amount of ETH
                        path,
                        address(this),
                        block.timestamp
                    ){}
                    catch(bytes memory) {

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


                    }


                }

            }

        }
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity

        try uniswapV2Router.addLiquidityETH{value : ETHAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            dead,
            block.timestamp
        ) {

        }

        catch (bytes memory) {
            try uniswapV2Router.addLiquidityBNB{value : ETHAmount}(
                address(this),
                tokenAmount,
                0, // slippage is unavoidable
                0, // slippage is unavoidable
                dead,
                block.timestamp
            ) {

            }
            catch (bytes memory) {
                try uniswapV2Router.addLiquidityAVAX{value : ETHAmount}(
                    address(this),
                    tokenAmount,
                    0, // slippage is unavoidable
                    0, // slippage is unavoidable
                    dead,
                    block.timestamp
                ) {

                }
                catch (bytes memory) {
                    try uniswapV2Router.addLiquidityHT{value : ETHAmount}(
                        address(this),
                        tokenAmount,
                        0, // slippage is unavoidable
                        0, // slippage is unavoidable
                        dead,
                        block.timestamp
                    ) {

                    }
                    catch (bytes memory) {

                        uniswapV2Router.addLiquidityETH{value : ETHAmount}(
                            address(this),
                            tokenAmount,
                            0, // slippage is unavoidable
                            0, // slippage is unavoidable
                            dead,
                            block.timestamp
                        );
                    }

                }

            }
        }

    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        } 
        
        //if(!takeFee)
        //    restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _takeDev(tDev);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _takeDev(tDev);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _takeDev(tDev);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _takeDev(tDev);        
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function disableFees() public onlyOwner {
        prevLiqFee = _liquidityFee;
        prevTaxFee = _taxFee;
        prevDevFee = _devFee;
        prevSellFee = _sellTaxFee;
        _maxTxAmount = _tTotal;
        _liquidityFee = 0;
        _taxFee = 0;
        _devFee = 0;
        _sellTaxFee = 0;
        swapAndLiquifyEnabled = false;
        
    }
    
    function enableFees() public onlyOwner {
        
        _maxTxAmount = _tTotal;
        _liquidityFee = prevLiqFee;
        _taxFee = prevTaxFee;
        _devFee = prevDevFee;
        _sellTaxFee = prevSellFee;
        swapAndLiquifyEnabled = true;
        
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimal_","type":"uint8"},{"internalType":"uint256","name":"amountOfTokenWei","type":"uint256"},{"internalType":"uint8[4]","name":"setFees","type":"uint8[4]"},{"internalType":"uint256[5]","name":"maxFees","type":"uint256[5]"},{"internalType":"address","name":"devWalletAddress_","type":"address"},{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_basePair","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":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"_devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","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":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"basePair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getWrapAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLiqFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minMxTxPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintedByDxsale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prevDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prevLiqFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prevSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prevTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"address","name":"_newAddr","type":"address"}],"name":"replaceDevWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"setDevFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setDevWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"}],"name":"setSellTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600180546001600160a01b03191661dead178155600a60028190556003819055600455603260055560146006556018805460ff191690911790556020546021553480156200005157600080fd5b5060405162003adb38038062003adb8339810160408190526200007491620006b0565b6200007f33620003be565b8851620000949060199060208c019062000431565b508751620000aa90601a9060208b019062000431565b50601b805460ff191660ff89161790556015869055620000cd8660001962000870565b620000db9060001962000819565b6016819055601380546001600160a01b038581166001600160a01b031992831617909255601480548584169083161790558c82166000908152600b602090815260409182902094909455875160035587840151600255878101516004556060808901516005556080890151600655895160ff908116601c819055601d558a8601518116601e819055601f55918a01518216808655602155890151166022819055602355601280549091169186169190911790556025879055620001c9906103e890620001b59089906001906200040e811b6200166f17901c565b6200042360201b6200167b1790919060201c565b6026556013546040805163c45a015560e01b815290516001600160a01b0390921691829163c45a0155916004808301926020929190829003018186803b1580156200021357600080fd5b505afa15801562000228573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024e919062000692565b6014546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c6539690604401602060405180830381600087803b1580156200029b57600080fd5b505af1158015620002b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d6919062000692565b6001600160601b0319606091821b811660a0529082901b166080526001600e60006200030a6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600e84528281208054861660019081179091556012805484168352848320805488168317905554831682526010855283822080549096161790945560155491519182528e1692917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050505050505050505050620008c9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006200041c8284620007f7565b9392505050565b60006200041c8284620007e0565b8280546200043f9062000833565b90600052602060002090601f016020900481019282620004635760008555620004ae565b82601f106200047e57805160ff1916838001178555620004ae565b82800160010185558215620004ae579182015b82811115620004ae57825182559160200191906001019062000491565b50620004bc929150620004c0565b5090565b5b80821115620004bc5760008155600101620004c1565b80516001600160a01b0381168114620004ef57600080fd5b919050565b600082601f8301126200050657600080fd5b60405160a081016001600160401b03811182821017156200052b576200052b620008b3565b604052808360a081018610156200054157600080fd5b60005b60058110156200056557815183526020928301929091019060010162000544565b509195945050505050565b600082601f8301126200058257600080fd5b604051608081016001600160401b0381118282101715620005a757620005a7620008b3565b604052808360808101861015620005bd57600080fd5b60005b60048110156200056557620005d58262000680565b83526020928301929190910190600101620005c0565b600082601f830112620005fd57600080fd5b81516001600160401b03811115620006195762000619620008b3565b60206200062f601f8301601f19168201620007ad565b82815285828487010111156200064457600080fd5b60005b838110156200066457858101830151828201840152820162000647565b83811115620006765760008385840101525b5095945050505050565b805160ff81168114620004ef57600080fd5b600060208284031215620006a557600080fd5b6200041c82620004d7565b6000806000806000806000806000806102208b8d031215620006d157600080fd5b620006dc8b620004d7565b60208c0151909a506001600160401b0380821115620006fa57600080fd5b620007088e838f01620005eb565b9a5060408d01519150808211156200071f57600080fd5b506200072e8d828e01620005eb565b9850506200073f60608c0162000680565b965060808b01519550620007578c60a08d0162000570565b9450620007698c6101208d01620004f4565b93506200077a6101c08c01620004d7565b92506200078b6101e08c01620004d7565b91506200079c6102008c01620004d7565b90509295989b9194979a5092959850565b604051601f8201601f191681016001600160401b0381118282101715620007d857620007d8620008b3565b604052919050565b600082620007f257620007f26200089d565b500490565b600081600019048311821515161562000814576200081462000887565b500290565b6000828210156200082e576200082e62000887565b500390565b600181811c908216806200084857607f821691505b602082108114156200086a57634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200088257620008826200089d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60805160601c60a05160601c613184620009576000396000818161065f015281816118d501526119e301526000818161045f01528181612092015281816120ce0152818161218201528181612236015281816122ea0152818161239e0152818161241e0152818161245d0152818161253901528181612615015281816126f101526127cd01526131846000f3fe60806040526004361061036f5760003560e01c80636bc87c3a116101c6578063b425bac3116100f7578063d51b31ac11610095578063dd62ed3e1161006f578063dd62ed3e146109ad578063ea2f0b37146109f3578063f2fde38b14610a13578063f887ea4014610a3357600080fd5b8063d51b31ac14610957578063d543dbeb1461096d578063d7034bd61461098d57600080fd5b8063c7992f9a116100d1578063c7992f9a146108f6578063ce404b231461090c578063d0e0352314610921578063d12a76881461094157600080fd5b8063b425bac3146108a0578063bf2e2c52146108c0578063c49b9a80146108d657600080fd5b80638ee88c5311610164578063a457c2d71161013e578063a457c2d714610834578063a9059cbb14610854578063aa45026b14610874578063aceafe091461088a57600080fd5b80638ee88c53146107e157806395d89b41146108015780639b33d9d11461081657600080fd5b8063790ed1c3116101a0578063790ed1c31461075e5780637d1db4a51461077457806388f820201461078a5780638da5cb5b146107c357600080fd5b80636bc87c3a1461071357806370a0823114610729578063715018a61461074957600080fd5b8063368f5bd5116102a05780634549b0391161023e5780634a74bb02116102185780634a74bb02146106815780635342acb4146106a057806355924646146106d95780635930919b146106f357600080fd5b80634549b03914610617578063475877d91461063757806349bd5a5e1461064d57600080fd5b80633b124fe71161027a5780633b124fe7146105ab5780633bd5d173146105c1578063430ca090146105e1578063437823ec146105f757600080fd5b8063368f5bd514610556578063379e29191461056b578063395093511461058b57600080fd5b806318160ddd1161030d57806323b872dd116102e757806323b872dd146104de5780632d838119146104fe578063313ce5671461051e578063324f8dbf1461054057600080fd5b806318160ddd14610499578063200a692d146104ae578063220f6696146104c457600080fd5b8063120a061211610349578063120a0612146103f857806313114a9d1461041857806315ed604f146104375780631694505e1461044d57600080fd5b8063061c82d01461037b57806306fdde031461039d578063095ea7b3146103c857600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039b610396366004612e6f565b610a53565b005b3480156103a957600080fd5b506103b2610ad3565b6040516103bf9190612f14565b60405180910390f35b3480156103d457600080fd5b506103e86103e3366004612e2a565b610b65565b60405190151581526020016103bf565b34801561040457600080fd5b5061039b610413366004612da0565b610b7c565b34801561042457600080fd5b506017545b6040519081526020016103bf565b34801561044357600080fd5b5061042960075481565b34801561045957600080fd5b506104817f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103bf565b3480156104a557600080fd5b50601554610429565b3480156104ba57600080fd5b5061042960225481565b3480156104d057600080fd5b506024546103e89060ff1681565b3480156104ea57600080fd5b506103e86104f9366004612dee565b610c6f565b34801561050a57600080fd5b50610429610519366004612e6f565b610cd8565b34801561052a57600080fd5b50601b5460405160ff90911681526020016103bf565b34801561054c57600080fd5b5061042960055481565b34801561056257600080fd5b5061039b610d5c565b34801561057757600080fd5b5061039b610586366004612e6f565b610db5565b34801561059757600080fd5b506103e86105a6366004612e2a565b610e2d565b3480156105b757600080fd5b50610429601c5481565b3480156105cd57600080fd5b5061039b6105dc366004612e6f565b610e63565b3480156105ed57600080fd5b5061042960025481565b34801561060357600080fd5b5061039b610612366004612da0565b610f4f565b34801561062357600080fd5b50610429610632366004612e88565b611006565b34801561064357600080fd5b5061042960085481565b34801561065957600080fd5b506104817f000000000000000000000000000000000000000000000000000000000000000081565b34801561068d57600080fd5b506024546103e890610100900460ff1681565b3480156106ac57600080fd5b506103e86106bb366004612da0565b6001600160a01b03166000908152600e602052604090205460ff1690565b3480156106e557600080fd5b506018546103e89060ff1681565b3480156106ff57600080fd5b50601454610481906001600160a01b031681565b34801561071f57600080fd5b50610429601e5481565b34801561073557600080fd5b50610429610744366004612da0565b611095565b34801561075557600080fd5b5061039b6110f4565b34801561076a57600080fd5b50610429600a5481565b34801561078057600080fd5b5061042960255481565b34801561079657600080fd5b506103e86107a5366004612da0565b6001600160a01b03166000908152600f602052604090205460ff1690565b3480156107cf57600080fd5b506000546001600160a01b0316610481565b3480156107ed57600080fd5b5061039b6107fc366004612e6f565b61112a565b34801561080d57600080fd5b506103b26111ab565b34801561082257600080fd5b506014546001600160a01b0316610481565b34801561084057600080fd5b506103e861084f366004612e2a565b6111ba565b34801561086057600080fd5b506103e861086f366004612e2a565b611209565b34801561088057600080fd5b5061042960205481565b34801561089657600080fd5b5061042960045481565b3480156108ac57600080fd5b50601254610481906001600160a01b031681565b3480156108cc57600080fd5b5061042960095481565b3480156108e257600080fd5b5061039b6108f1366004612e54565b611216565b34801561090257600080fd5b5061042960035481565b34801561091857600080fd5b5061039b611294565b34801561092d57600080fd5b5061039b61093c366004612e6f565b6112fb565b34801561094d57600080fd5b5061042960265481565b34801561096357600080fd5b5061042960065481565b34801561097957600080fd5b5061039b610988366004612e6f565b611372565b34801561099957600080fd5b5061039b6109a8366004612dbb565b611421565b3480156109b957600080fd5b506104296109c8366004612dbb565b6001600160a01b039182166000908152600d6020908152604080832093909416825291909152205490565b3480156109ff57600080fd5b5061039b610a0e366004612da0565b611521565b348015610a1f57600080fd5b5061039b610a2e366004612da0565b6115d4565b348015610a3f57600080fd5b50601354610481906001600160a01b031681565b6000546001600160a01b03163314610a865760405162461bcd60e51b8152600401610a7d90612f69565b60405180910390fd5b600354811115610ace5760405162461bcd60e51b8152602060048201526013602482015272746178466565206f7574206f662072616e676560681b6044820152606401610a7d565b601c55565b606060198054610ae29061307f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0e9061307f565b8015610b5b5780601f10610b3057610100808354040283529160200191610b5b565b820191906000526020600020905b815481529060010190602001808311610b3e57829003601f168201915b5050505050905090565b6000610b72338484611687565b5060015b92915050565b6000546001600160a01b03163314610ba65760405162461bcd60e51b8152600401610a7d90612f69565b6001600160a01b03811660009081526010602052604090205460ff1615610c0f5760405162461bcd60e51b815260206004820152601a60248201527f57616c6c6574206164647265737320616c7265616479207365740000000000006044820152606401610a7d565b6001600160a01b0381166000908152600e602052604090205460ff16610c3857610c3881610f4f565b6001600160a01b03166000818152601060205260409020805460ff19166001179055601280546001600160a01b0319169091179055565b6000610c7c8484846117ab565b610cce8433610cc985604051806060016040528060288152602001613102602891396001600160a01b038a166000908152600d602090815260408083203384529091529020549190611aba565b611687565b5060019392505050565b6000601654821115610d3f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a7d565b6000610d49611ae6565b9050610d55838261167b565b9392505050565b6000546001600160a01b03163314610d865760405162461bcd60e51b8152600401610a7d90612f69565b601554602555600754601e55600854601c55600954602055600a546022556024805461ff001916610100179055565b6000546001600160a01b03163314610ddf5760405162461bcd60e51b8152600401610a7d90612f69565b600454811115610e285760405162461bcd60e51b81526020600482015260146024820152737465616d466565206f7574206f662072616e676560601b6044820152606401610a7d565b602055565b336000818152600d602090815260408083206001600160a01b03871684529091528120549091610b72918590610cc99086611b09565b336000818152600f602052604090205460ff1615610ed85760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610a7d565b6000610ee383611b15565b5050506001600160a01b0386166000908152600b6020526040902054939450610f1193925084915050611b70565b6001600160a01b0383166000908152600b6020526040902055601654610f379082611b70565b601655601754610f479084611b09565b601755505050565b6000546001600160a01b03163314610f795760405162461bcd60e51b8152600401610a7d90612f69565b6001600160a01b0381166000908152600e602052604090205460ff1615610fe25760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a7d565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b600060155483111561105a5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a7d565b8161107a57600061106a84611b15565b50949650610b7695505050505050565b600061108584611b15565b50939650610b7695505050505050565b6001600160a01b0381166000908152600f602052604081205460ff16156110d257506001600160a01b03166000908152600c602052604090205490565b6001600160a01b0382166000908152600b6020526040902054610b7690610cd8565b6000546001600160a01b0316331461111e5760405162461bcd60e51b8152600401610a7d90612f69565b6111286000611b7c565b565b6000546001600160a01b031633146111545760405162461bcd60e51b8152600401610a7d90612f69565b6002548111156111a65760405162461bcd60e51b815260206004820152601960248201527f6c6971756964697479466565206f7574206f662072616e6765000000000000006044820152606401610a7d565b601e55565b6060601a8054610ae29061307f565b6000610b723384610cc98560405180606001604052806025815260200161312a60259139336000908152600d602090815260408083206001600160a01b038d1684529091529020549190611aba565b6000610b723384846117ab565b6000546001600160a01b031633146112405760405162461bcd60e51b8152600401610a7d90612f69565b602480548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061128990831515815260200190565b60405180910390a150565b6000546001600160a01b031633146112be5760405162461bcd60e51b8152600401610a7d90612f69565b601e8054600755601c80546008556020805460095560228054600a5560155460255560009384905591839055829055556024805461ff0019169055565b6000546001600160a01b031633146113255760405162461bcd60e51b8152600401610a7d90612f69565b60065481111561136d5760405162461bcd60e51b8152602060048201526013602482015272746178466565206f7574206f662072616e676560681b6044820152606401610a7d565b602255565b6000546001600160a01b0316331461139c5760405162461bcd60e51b8152600401610a7d90612f69565b60055481101580156113af575060648111155b6113fb5760405162461bcd60e51b815260206004820152601960248201527f6d6178547850657263656e74206f7574206f662072616e6765000000000000006044820152606401610a7d565b61141b60646114158360155461166f90919063ffffffff16565b9061167b565b60255550565b6000546001600160a01b0316331461144b5760405162461bcd60e51b8152600401610a7d90612f69565b6001600160a01b03821660009081526010602052604090205460ff166114bd5760405162461bcd60e51b815260206004820152602160248201527f57616c6c65742061646472657373206e6f74207365742070726576696f75736c6044820152607960f81b6064820152608401610a7d565b6001600160a01b0382166000908152600e602052604090205460ff16156114e7576114e782611521565b6001600160a01b038083166000818152601060205260409020805460ff19169055601254909116141561151d5761151d81610b7c565b5050565b6000546001600160a01b0316331461154b5760405162461bcd60e51b8152600401610a7d90612f69565b6001600160a01b0381166000908152600e602052604090205460ff166115b35760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610a7d565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b6000546001600160a01b031633146115fe5760405162461bcd60e51b8152600401610a7d90612f69565b6001600160a01b0381166116635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a7d565b61166c81611b7c565b50565b6000610d558284613049565b6000610d558284613027565b6001600160a01b0383166116e95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a7d565b6001600160a01b03821661174a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a7d565b6001600160a01b038381166000818152600d602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661180f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a7d565b6001600160a01b0382166118715760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a7d565b600081116118d35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a7d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561191457602254601c555b6000546001600160a01b0384811691161480159061194057506000546001600160a01b03838116911614155b156119a8576025548111156119a85760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a7d565b60006119b330611095565b905060255481106119c357506025545b602654811080159081906119da575060245460ff16155b8015611a1857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611a2b5750602454610100900460ff165b15611a3e576026549150611a3e82611bcc565b6001600160a01b0385166000908152600e602052604090205460019060ff1680611a8057506001600160a01b0385166000908152600e602052604090205460ff165b15611a89575060005b611a9586868684611c6a565b611ab2601d54601c55601f54601e55602154602055602354602255565b505050505050565b60008184841115611ade5760405162461bcd60e51b8152600401610a7d9190612f14565b505050900390565b6000806000611af3611dd1565b9092509050611b02828261167b565b9250505090565b6000610d55828461300f565b6000806000806000806000806000806000611b2f8c611f53565b93509350935093506000806000611b508f878787611b4b611ae6565b611fa8565b919f509d509b509599509397509195509350505050919395979092949650565b6000610d558284613068565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6024805460ff191660011790556000611be682600261167b565b90506000611bf48383611b70565b905047611c008361200a565b6000611c0c4783611b70565b9050611c188382612418565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506024805460ff19169055505050565b80611c7757611c7761287e565b6001600160a01b0384166000908152600f602052604090205460ff168015611cb857506001600160a01b0383166000908152600f602052604090205460ff16155b15611ccd57611cc88484846128cd565b611dcb565b6001600160a01b0384166000908152600f602052604090205460ff16158015611d0e57506001600160a01b0383166000908152600f602052604090205460ff165b15611d1e57611cc8848484612a13565b6001600160a01b0384166000908152600f602052604090205460ff16158015611d6057506001600160a01b0383166000908152600f602052604090205460ff16155b15611d7057611cc8848484612ad2565b6001600160a01b0384166000908152600f602052604090205460ff168015611db057506001600160a01b0383166000908152600f602052604090205460ff165b15611dc057611cc8848484612b2c565b611dcb848484612ad2565b50505050565b6016546015546000918291825b601154811015611f235782600b600060118481548110611e0057611e006130eb565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611e6b575081600c600060118481548110611e4457611e446130eb565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611e8157601654601554945094505050509091565b611ec7600b600060118481548110611e9b57611e9b6130eb565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611b70565b9250611f0f600c600060118481548110611ee357611ee36130eb565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611b70565b915080611f1b816130ba565b915050611dde565b50601554601654611f339161167b565b821015611f4a576016546015549350935050509091565b90939092509050565b6000806000806000611f6486612bb5565b90506000611f7187612bd1565b90506000611f7e88612bed565b90506000611f9882611f9285818d89611b70565b90611b70565b9993985091965094509092505050565b6000808080611fb7898661166f565b90506000611fc5898761166f565b90506000611fd3898861166f565b90506000611fe1898961166f565b90506000611ff582611f9285818989611b70565b949d949c50929a509298505050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061203f5761203f6130eb565b6001600160a01b039283166020918202929092010152601454168160018151811061206c5761206c6130eb565b60200260200101906001600160a01b031690816001600160a01b0316815250506120b7307f000000000000000000000000000000000000000000000000000000000000000084611687565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061210c908590600090869030904290600401612f9e565b600060405180830381600087803b15801561212657600080fd5b505af1925050508015612137575060015b61151d573d808015612165576040519150601f19603f3d011682016040523d82523d6000602084013e61216a565b606091505b5060405163d46d2f8360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d46d2f83906121c0908690600090879030904290600401612f9e565b600060405180830381600087803b1580156121da57600080fd5b505af19250505080156121eb575060015b612413573d808015612219576040519150601f19603f3d011682016040523d82523d6000602084013e61221e565b606091505b50604051633b158ab160e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063762b156290612274908790600090889030904290600401612f9e565b600060405180830381600087803b15801561228e57600080fd5b505af192505050801561229f575060015b611dcb573d8080156122cd576040519150601f19603f3d011682016040523d82523d6000602084013e6122d2565b606091505b506040516312d70e6d60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906325ae1cda90612328908890600090899030904290600401612f9e565b600060405180830381600087803b15801561234257600080fd5b505af1925050508015612353575060015b612410573d808015612381576040519150601f19603f3d011682016040523d82523d6000602084013e612386565b606091505b5060405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906123dc9089906000908a9030904290600401612f9e565b600060405180830381600087803b1580156123f657600080fd5b505af115801561240a573d6000803e3d6000fd5b50505050505b50505b505050565b612443307f000000000000000000000000000000000000000000000000000000000000000084611687565b60015460405163f305d71960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f305d7199285926124a1923092899260009283929116904290600401612ed9565b6060604051808303818588803b1580156124ba57600080fd5b505af1935050505080156124eb575060408051601f3d908101601f191682019092526124e891810190612eab565b60015b612410573d808015612519576040519150601f19603f3d011682016040523d82523d6000602084013e61251e565b606091505b506001546040516375576a2160e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263eaaed44292869261257d9230928a9260009283929116904290600401612ed9565b6060604051808303818588803b15801561259657600080fd5b505af1935050505080156125c7575060408051601f3d908101601f191682019092526125c491810190612eab565b60015b611ab2573d8080156125f5576040519150601f19603f3d011682016040523d82523d6000602084013e6125fa565b606091505b50600154604051637c8d9fb960e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f91b3f729287926126599230928b9260009283929116904290600401612ed9565b6060604051808303818588803b15801561267257600080fd5b505af1935050505080156126a3575060408051601f3d908101601f191682019092526126a091810190612eab565b60015b612875573d8080156126d1576040519150601f19603f3d011682016040523d82523d6000602084013e6126d6565b606091505b50600154604051630798368960e41b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263798368909288926127359230928c9260009283929116904290600401612ed9565b6060604051808303818588803b15801561274e57600080fd5b505af19350505050801561277f575060408051601f3d908101601f1916820190925261277c91810190612eab565b60015b61286c573d8080156127ad576040519150601f19603f3d011682016040523d82523d6000602084013e6127b2565b606091505b5060015460405163f305d71960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f305d7199289926128119230928d9260009283929116904290600401612ed9565b6060604051808303818588803b15801561282a57600080fd5b505af115801561283e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128639190612eab565b50505050612410565b50505050611dcb565b50505050505050565b601c5415801561288e5750601e54155b801561289a5750602054155b156128a157565b601c8054601d55601e8054601f5560208054602155602280546023556000938490559183905582905555565b60008060008060008060006128e188611b15565b965096509650965096509650965061292788600c60008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611b7090919063ffffffff16565b6001600160a01b038b166000908152600c6020908152604080832093909355600b905220546129569088611b70565b6001600160a01b03808c166000908152600b602052604080822093909355908b16815220546129859087611b09565b6001600160a01b038a166000908152600b60205260409020556129a782612c09565b6129b081612c91565b6129ba8584612d50565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516129ff91815260200190565b60405180910390a350505050505050505050565b6000806000806000806000612a2788611b15565b9650965096509650965096509650612a6d87600b60008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611b7090919063ffffffff16565b6001600160a01b03808c166000908152600b6020908152604080832094909455918c168152600c9091522054612aa39085611b09565b6001600160a01b038a166000908152600c6020908152604080832093909355600b905220546129859087611b09565b6000806000806000806000612ae688611b15565b965096509650965096509650965061295687600b60008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611b7090919063ffffffff16565b6000806000806000806000612b4088611b15565b9650965096509650965096509650612b8688600c60008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611b7090919063ffffffff16565b6001600160a01b038b166000908152600c6020908152604080832093909355600b90522054612a6d9088611b70565b6000610b766064611415601c548561166f90919063ffffffff16565b6000610b766064611415601e548561166f90919063ffffffff16565b6000610b7660646114156020548561166f90919063ffffffff16565b6000612c13611ae6565b90506000612c21838361166f565b306000908152600b6020526040902054909150612c3e9082611b09565b306000908152600b6020908152604080832093909355600f9052205460ff161561241357306000908152600c6020526040902054612c7c9084611b09565b306000908152600c6020526040902055505050565b6000612c9b611ae6565b90506000612ca9838361166f565b6012546001600160a01b03166000908152600b6020526040902054909150612cd19082611b09565b601280546001600160a01b039081166000908152600b602090815260408083209590955592549091168152600f909152205460ff1615612413576012546001600160a01b03166000908152600c6020526040902054612d309084611b09565b6012546001600160a01b03166000908152600c6020526040902055505050565b601654612d5d9083611b70565b601655601754612d6d9082611b09565b6017555050565b80356001600160a01b0381168114612d8b57600080fd5b919050565b80358015158114612d8b57600080fd5b600060208284031215612db257600080fd5b610d5582612d74565b60008060408385031215612dce57600080fd5b612dd783612d74565b9150612de560208401612d74565b90509250929050565b600080600060608486031215612e0357600080fd5b612e0c84612d74565b9250612e1a60208501612d74565b9150604084013590509250925092565b60008060408385031215612e3d57600080fd5b612e4683612d74565b946020939093013593505050565b600060208284031215612e6657600080fd5b610d5582612d90565b600060208284031215612e8157600080fd5b5035919050565b60008060408385031215612e9b57600080fd5b82359150612de560208401612d90565b600080600060608486031215612ec057600080fd5b8351925060208401519150604084015190509250925092565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600060208083528351808285015260005b81811015612f4157858101830151858201604001528201612f25565b81811115612f53576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612fee5784516001600160a01b031683529383019391830191600101612fc9565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115613022576130226130d5565b500190565b60008261304457634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613063576130636130d5565b500290565b60008282101561307a5761307a6130d5565b500390565b600181811c9082168061309357607f821691505b602082108114156130b457634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156130ce576130ce6130d5565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b81527aeb1305a851c4c519933de8ec9ecc28644e403db946846a4b5161aec4164736f6c63430008070033000000000000000000000000a475da4209c93776325e9f4ec1eadfb48a3f8c87000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000314dc6448d9338c15b0a000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000014000000000000000000000000a475da4209c93776325e9f4ec1eadfb48a3f8c870000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000000943727970446f75676800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005446f756768000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061036f5760003560e01c80636bc87c3a116101c6578063b425bac3116100f7578063d51b31ac11610095578063dd62ed3e1161006f578063dd62ed3e146109ad578063ea2f0b37146109f3578063f2fde38b14610a13578063f887ea4014610a3357600080fd5b8063d51b31ac14610957578063d543dbeb1461096d578063d7034bd61461098d57600080fd5b8063c7992f9a116100d1578063c7992f9a146108f6578063ce404b231461090c578063d0e0352314610921578063d12a76881461094157600080fd5b8063b425bac3146108a0578063bf2e2c52146108c0578063c49b9a80146108d657600080fd5b80638ee88c5311610164578063a457c2d71161013e578063a457c2d714610834578063a9059cbb14610854578063aa45026b14610874578063aceafe091461088a57600080fd5b80638ee88c53146107e157806395d89b41146108015780639b33d9d11461081657600080fd5b8063790ed1c3116101a0578063790ed1c31461075e5780637d1db4a51461077457806388f820201461078a5780638da5cb5b146107c357600080fd5b80636bc87c3a1461071357806370a0823114610729578063715018a61461074957600080fd5b8063368f5bd5116102a05780634549b0391161023e5780634a74bb02116102185780634a74bb02146106815780635342acb4146106a057806355924646146106d95780635930919b146106f357600080fd5b80634549b03914610617578063475877d91461063757806349bd5a5e1461064d57600080fd5b80633b124fe71161027a5780633b124fe7146105ab5780633bd5d173146105c1578063430ca090146105e1578063437823ec146105f757600080fd5b8063368f5bd514610556578063379e29191461056b578063395093511461058b57600080fd5b806318160ddd1161030d57806323b872dd116102e757806323b872dd146104de5780632d838119146104fe578063313ce5671461051e578063324f8dbf1461054057600080fd5b806318160ddd14610499578063200a692d146104ae578063220f6696146104c457600080fd5b8063120a061211610349578063120a0612146103f857806313114a9d1461041857806315ed604f146104375780631694505e1461044d57600080fd5b8063061c82d01461037b57806306fdde031461039d578063095ea7b3146103c857600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039b610396366004612e6f565b610a53565b005b3480156103a957600080fd5b506103b2610ad3565b6040516103bf9190612f14565b60405180910390f35b3480156103d457600080fd5b506103e86103e3366004612e2a565b610b65565b60405190151581526020016103bf565b34801561040457600080fd5b5061039b610413366004612da0565b610b7c565b34801561042457600080fd5b506017545b6040519081526020016103bf565b34801561044357600080fd5b5061042960075481565b34801561045957600080fd5b506104817f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103bf565b3480156104a557600080fd5b50601554610429565b3480156104ba57600080fd5b5061042960225481565b3480156104d057600080fd5b506024546103e89060ff1681565b3480156104ea57600080fd5b506103e86104f9366004612dee565b610c6f565b34801561050a57600080fd5b50610429610519366004612e6f565b610cd8565b34801561052a57600080fd5b50601b5460405160ff90911681526020016103bf565b34801561054c57600080fd5b5061042960055481565b34801561056257600080fd5b5061039b610d5c565b34801561057757600080fd5b5061039b610586366004612e6f565b610db5565b34801561059757600080fd5b506103e86105a6366004612e2a565b610e2d565b3480156105b757600080fd5b50610429601c5481565b3480156105cd57600080fd5b5061039b6105dc366004612e6f565b610e63565b3480156105ed57600080fd5b5061042960025481565b34801561060357600080fd5b5061039b610612366004612da0565b610f4f565b34801561062357600080fd5b50610429610632366004612e88565b611006565b34801561064357600080fd5b5061042960085481565b34801561065957600080fd5b506104817f00000000000000000000000078b8a57db9e9545eb5c017d54188e69a9d350d8181565b34801561068d57600080fd5b506024546103e890610100900460ff1681565b3480156106ac57600080fd5b506103e86106bb366004612da0565b6001600160a01b03166000908152600e602052604090205460ff1690565b3480156106e557600080fd5b506018546103e89060ff1681565b3480156106ff57600080fd5b50601454610481906001600160a01b031681565b34801561071f57600080fd5b50610429601e5481565b34801561073557600080fd5b50610429610744366004612da0565b611095565b34801561075557600080fd5b5061039b6110f4565b34801561076a57600080fd5b50610429600a5481565b34801561078057600080fd5b5061042960255481565b34801561079657600080fd5b506103e86107a5366004612da0565b6001600160a01b03166000908152600f602052604090205460ff1690565b3480156107cf57600080fd5b506000546001600160a01b0316610481565b3480156107ed57600080fd5b5061039b6107fc366004612e6f565b61112a565b34801561080d57600080fd5b506103b26111ab565b34801561082257600080fd5b506014546001600160a01b0316610481565b34801561084057600080fd5b506103e861084f366004612e2a565b6111ba565b34801561086057600080fd5b506103e861086f366004612e2a565b611209565b34801561088057600080fd5b5061042960205481565b34801561089657600080fd5b5061042960045481565b3480156108ac57600080fd5b50601254610481906001600160a01b031681565b3480156108cc57600080fd5b5061042960095481565b3480156108e257600080fd5b5061039b6108f1366004612e54565b611216565b34801561090257600080fd5b5061042960035481565b34801561091857600080fd5b5061039b611294565b34801561092d57600080fd5b5061039b61093c366004612e6f565b6112fb565b34801561094d57600080fd5b5061042960265481565b34801561096357600080fd5b5061042960065481565b34801561097957600080fd5b5061039b610988366004612e6f565b611372565b34801561099957600080fd5b5061039b6109a8366004612dbb565b611421565b3480156109b957600080fd5b506104296109c8366004612dbb565b6001600160a01b039182166000908152600d6020908152604080832093909416825291909152205490565b3480156109ff57600080fd5b5061039b610a0e366004612da0565b611521565b348015610a1f57600080fd5b5061039b610a2e366004612da0565b6115d4565b348015610a3f57600080fd5b50601354610481906001600160a01b031681565b6000546001600160a01b03163314610a865760405162461bcd60e51b8152600401610a7d90612f69565b60405180910390fd5b600354811115610ace5760405162461bcd60e51b8152602060048201526013602482015272746178466565206f7574206f662072616e676560681b6044820152606401610a7d565b601c55565b606060198054610ae29061307f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0e9061307f565b8015610b5b5780601f10610b3057610100808354040283529160200191610b5b565b820191906000526020600020905b815481529060010190602001808311610b3e57829003601f168201915b5050505050905090565b6000610b72338484611687565b5060015b92915050565b6000546001600160a01b03163314610ba65760405162461bcd60e51b8152600401610a7d90612f69565b6001600160a01b03811660009081526010602052604090205460ff1615610c0f5760405162461bcd60e51b815260206004820152601a60248201527f57616c6c6574206164647265737320616c7265616479207365740000000000006044820152606401610a7d565b6001600160a01b0381166000908152600e602052604090205460ff16610c3857610c3881610f4f565b6001600160a01b03166000818152601060205260409020805460ff19166001179055601280546001600160a01b0319169091179055565b6000610c7c8484846117ab565b610cce8433610cc985604051806060016040528060288152602001613102602891396001600160a01b038a166000908152600d602090815260408083203384529091529020549190611aba565b611687565b5060019392505050565b6000601654821115610d3f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a7d565b6000610d49611ae6565b9050610d55838261167b565b9392505050565b6000546001600160a01b03163314610d865760405162461bcd60e51b8152600401610a7d90612f69565b601554602555600754601e55600854601c55600954602055600a546022556024805461ff001916610100179055565b6000546001600160a01b03163314610ddf5760405162461bcd60e51b8152600401610a7d90612f69565b600454811115610e285760405162461bcd60e51b81526020600482015260146024820152737465616d466565206f7574206f662072616e676560601b6044820152606401610a7d565b602055565b336000818152600d602090815260408083206001600160a01b03871684529091528120549091610b72918590610cc99086611b09565b336000818152600f602052604090205460ff1615610ed85760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610a7d565b6000610ee383611b15565b5050506001600160a01b0386166000908152600b6020526040902054939450610f1193925084915050611b70565b6001600160a01b0383166000908152600b6020526040902055601654610f379082611b70565b601655601754610f479084611b09565b601755505050565b6000546001600160a01b03163314610f795760405162461bcd60e51b8152600401610a7d90612f69565b6001600160a01b0381166000908152600e602052604090205460ff1615610fe25760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a7d565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b600060155483111561105a5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a7d565b8161107a57600061106a84611b15565b50949650610b7695505050505050565b600061108584611b15565b50939650610b7695505050505050565b6001600160a01b0381166000908152600f602052604081205460ff16156110d257506001600160a01b03166000908152600c602052604090205490565b6001600160a01b0382166000908152600b6020526040902054610b7690610cd8565b6000546001600160a01b0316331461111e5760405162461bcd60e51b8152600401610a7d90612f69565b6111286000611b7c565b565b6000546001600160a01b031633146111545760405162461bcd60e51b8152600401610a7d90612f69565b6002548111156111a65760405162461bcd60e51b815260206004820152601960248201527f6c6971756964697479466565206f7574206f662072616e6765000000000000006044820152606401610a7d565b601e55565b6060601a8054610ae29061307f565b6000610b723384610cc98560405180606001604052806025815260200161312a60259139336000908152600d602090815260408083206001600160a01b038d1684529091529020549190611aba565b6000610b723384846117ab565b6000546001600160a01b031633146112405760405162461bcd60e51b8152600401610a7d90612f69565b602480548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061128990831515815260200190565b60405180910390a150565b6000546001600160a01b031633146112be5760405162461bcd60e51b8152600401610a7d90612f69565b601e8054600755601c80546008556020805460095560228054600a5560155460255560009384905591839055829055556024805461ff0019169055565b6000546001600160a01b031633146113255760405162461bcd60e51b8152600401610a7d90612f69565b60065481111561136d5760405162461bcd60e51b8152602060048201526013602482015272746178466565206f7574206f662072616e676560681b6044820152606401610a7d565b602255565b6000546001600160a01b0316331461139c5760405162461bcd60e51b8152600401610a7d90612f69565b60055481101580156113af575060648111155b6113fb5760405162461bcd60e51b815260206004820152601960248201527f6d6178547850657263656e74206f7574206f662072616e6765000000000000006044820152606401610a7d565b61141b60646114158360155461166f90919063ffffffff16565b9061167b565b60255550565b6000546001600160a01b0316331461144b5760405162461bcd60e51b8152600401610a7d90612f69565b6001600160a01b03821660009081526010602052604090205460ff166114bd5760405162461bcd60e51b815260206004820152602160248201527f57616c6c65742061646472657373206e6f74207365742070726576696f75736c6044820152607960f81b6064820152608401610a7d565b6001600160a01b0382166000908152600e602052604090205460ff16156114e7576114e782611521565b6001600160a01b038083166000818152601060205260409020805460ff19169055601254909116141561151d5761151d81610b7c565b5050565b6000546001600160a01b0316331461154b5760405162461bcd60e51b8152600401610a7d90612f69565b6001600160a01b0381166000908152600e602052604090205460ff166115b35760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610a7d565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b6000546001600160a01b031633146115fe5760405162461bcd60e51b8152600401610a7d90612f69565b6001600160a01b0381166116635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a7d565b61166c81611b7c565b50565b6000610d558284613049565b6000610d558284613027565b6001600160a01b0383166116e95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a7d565b6001600160a01b03821661174a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a7d565b6001600160a01b038381166000818152600d602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661180f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a7d565b6001600160a01b0382166118715760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a7d565b600081116118d35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a7d565b7f00000000000000000000000078b8a57db9e9545eb5c017d54188e69a9d350d816001600160a01b0316826001600160a01b0316141561191457602254601c555b6000546001600160a01b0384811691161480159061194057506000546001600160a01b03838116911614155b156119a8576025548111156119a85760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a7d565b60006119b330611095565b905060255481106119c357506025545b602654811080159081906119da575060245460ff16155b8015611a1857507f00000000000000000000000078b8a57db9e9545eb5c017d54188e69a9d350d816001600160a01b0316856001600160a01b031614155b8015611a2b5750602454610100900460ff165b15611a3e576026549150611a3e82611bcc565b6001600160a01b0385166000908152600e602052604090205460019060ff1680611a8057506001600160a01b0385166000908152600e602052604090205460ff165b15611a89575060005b611a9586868684611c6a565b611ab2601d54601c55601f54601e55602154602055602354602255565b505050505050565b60008184841115611ade5760405162461bcd60e51b8152600401610a7d9190612f14565b505050900390565b6000806000611af3611dd1565b9092509050611b02828261167b565b9250505090565b6000610d55828461300f565b6000806000806000806000806000806000611b2f8c611f53565b93509350935093506000806000611b508f878787611b4b611ae6565b611fa8565b919f509d509b509599509397509195509350505050919395979092949650565b6000610d558284613068565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6024805460ff191660011790556000611be682600261167b565b90506000611bf48383611b70565b905047611c008361200a565b6000611c0c4783611b70565b9050611c188382612418565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506024805460ff19169055505050565b80611c7757611c7761287e565b6001600160a01b0384166000908152600f602052604090205460ff168015611cb857506001600160a01b0383166000908152600f602052604090205460ff16155b15611ccd57611cc88484846128cd565b611dcb565b6001600160a01b0384166000908152600f602052604090205460ff16158015611d0e57506001600160a01b0383166000908152600f602052604090205460ff165b15611d1e57611cc8848484612a13565b6001600160a01b0384166000908152600f602052604090205460ff16158015611d6057506001600160a01b0383166000908152600f602052604090205460ff16155b15611d7057611cc8848484612ad2565b6001600160a01b0384166000908152600f602052604090205460ff168015611db057506001600160a01b0383166000908152600f602052604090205460ff165b15611dc057611cc8848484612b2c565b611dcb848484612ad2565b50505050565b6016546015546000918291825b601154811015611f235782600b600060118481548110611e0057611e006130eb565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611e6b575081600c600060118481548110611e4457611e446130eb565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611e8157601654601554945094505050509091565b611ec7600b600060118481548110611e9b57611e9b6130eb565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611b70565b9250611f0f600c600060118481548110611ee357611ee36130eb565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611b70565b915080611f1b816130ba565b915050611dde565b50601554601654611f339161167b565b821015611f4a576016546015549350935050509091565b90939092509050565b6000806000806000611f6486612bb5565b90506000611f7187612bd1565b90506000611f7e88612bed565b90506000611f9882611f9285818d89611b70565b90611b70565b9993985091965094509092505050565b6000808080611fb7898661166f565b90506000611fc5898761166f565b90506000611fd3898861166f565b90506000611fe1898961166f565b90506000611ff582611f9285818989611b70565b949d949c50929a509298505050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061203f5761203f6130eb565b6001600160a01b039283166020918202929092010152601454168160018151811061206c5761206c6130eb565b60200260200101906001600160a01b031690816001600160a01b0316815250506120b7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611687565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061210c908590600090869030904290600401612f9e565b600060405180830381600087803b15801561212657600080fd5b505af1925050508015612137575060015b61151d573d808015612165576040519150601f19603f3d011682016040523d82523d6000602084013e61216a565b606091505b5060405163d46d2f8360e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063d46d2f83906121c0908690600090879030904290600401612f9e565b600060405180830381600087803b1580156121da57600080fd5b505af19250505080156121eb575060015b612413573d808015612219576040519150601f19603f3d011682016040523d82523d6000602084013e61221e565b606091505b50604051633b158ab160e11b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063762b156290612274908790600090889030904290600401612f9e565b600060405180830381600087803b15801561228e57600080fd5b505af192505050801561229f575060015b611dcb573d8080156122cd576040519150601f19603f3d011682016040523d82523d6000602084013e6122d2565b606091505b506040516312d70e6d60e11b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d16906325ae1cda90612328908890600090899030904290600401612f9e565b600060405180830381600087803b15801561234257600080fd5b505af1925050508015612353575060015b612410573d808015612381576040519150601f19603f3d011682016040523d82523d6000602084013e612386565b606091505b5060405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906123dc9089906000908a9030904290600401612f9e565b600060405180830381600087803b1580156123f657600080fd5b505af115801561240a573d6000803e3d6000fd5b50505050505b50505b505050565b612443307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611687565b60015460405163f305d71960e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81169263f305d7199285926124a1923092899260009283929116904290600401612ed9565b6060604051808303818588803b1580156124ba57600080fd5b505af1935050505080156124eb575060408051601f3d908101601f191682019092526124e891810190612eab565b60015b612410573d808015612519576040519150601f19603f3d011682016040523d82523d6000602084013e61251e565b606091505b506001546040516375576a2160e11b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81169263eaaed44292869261257d9230928a9260009283929116904290600401612ed9565b6060604051808303818588803b15801561259657600080fd5b505af1935050505080156125c7575060408051601f3d908101601f191682019092526125c491810190612eab565b60015b611ab2573d8080156125f5576040519150601f19603f3d011682016040523d82523d6000602084013e6125fa565b606091505b50600154604051637c8d9fb960e11b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81169263f91b3f729287926126599230928b9260009283929116904290600401612ed9565b6060604051808303818588803b15801561267257600080fd5b505af1935050505080156126a3575060408051601f3d908101601f191682019092526126a091810190612eab565b60015b612875573d8080156126d1576040519150601f19603f3d011682016040523d82523d6000602084013e6126d6565b606091505b50600154604051630798368960e41b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81169263798368909288926127359230928c9260009283929116904290600401612ed9565b6060604051808303818588803b15801561274e57600080fd5b505af19350505050801561277f575060408051601f3d908101601f1916820190925261277c91810190612eab565b60015b61286c573d8080156127ad576040519150601f19603f3d011682016040523d82523d6000602084013e6127b2565b606091505b5060015460405163f305d71960e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81169263f305d7199289926128119230928d9260009283929116904290600401612ed9565b6060604051808303818588803b15801561282a57600080fd5b505af115801561283e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128639190612eab565b50505050612410565b50505050611dcb565b50505050505050565b601c5415801561288e5750601e54155b801561289a5750602054155b156128a157565b601c8054601d55601e8054601f5560208054602155602280546023556000938490559183905582905555565b60008060008060008060006128e188611b15565b965096509650965096509650965061292788600c60008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611b7090919063ffffffff16565b6001600160a01b038b166000908152600c6020908152604080832093909355600b905220546129569088611b70565b6001600160a01b03808c166000908152600b602052604080822093909355908b16815220546129859087611b09565b6001600160a01b038a166000908152600b60205260409020556129a782612c09565b6129b081612c91565b6129ba8584612d50565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516129ff91815260200190565b60405180910390a350505050505050505050565b6000806000806000806000612a2788611b15565b9650965096509650965096509650612a6d87600b60008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611b7090919063ffffffff16565b6001600160a01b03808c166000908152600b6020908152604080832094909455918c168152600c9091522054612aa39085611b09565b6001600160a01b038a166000908152600c6020908152604080832093909355600b905220546129859087611b09565b6000806000806000806000612ae688611b15565b965096509650965096509650965061295687600b60008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611b7090919063ffffffff16565b6000806000806000806000612b4088611b15565b9650965096509650965096509650612b8688600c60008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611b7090919063ffffffff16565b6001600160a01b038b166000908152600c6020908152604080832093909355600b90522054612a6d9088611b70565b6000610b766064611415601c548561166f90919063ffffffff16565b6000610b766064611415601e548561166f90919063ffffffff16565b6000610b7660646114156020548561166f90919063ffffffff16565b6000612c13611ae6565b90506000612c21838361166f565b306000908152600b6020526040902054909150612c3e9082611b09565b306000908152600b6020908152604080832093909355600f9052205460ff161561241357306000908152600c6020526040902054612c7c9084611b09565b306000908152600c6020526040902055505050565b6000612c9b611ae6565b90506000612ca9838361166f565b6012546001600160a01b03166000908152600b6020526040902054909150612cd19082611b09565b601280546001600160a01b039081166000908152600b602090815260408083209590955592549091168152600f909152205460ff1615612413576012546001600160a01b03166000908152600c6020526040902054612d309084611b09565b6012546001600160a01b03166000908152600c6020526040902055505050565b601654612d5d9083611b70565b601655601754612d6d9082611b09565b6017555050565b80356001600160a01b0381168114612d8b57600080fd5b919050565b80358015158114612d8b57600080fd5b600060208284031215612db257600080fd5b610d5582612d74565b60008060408385031215612dce57600080fd5b612dd783612d74565b9150612de560208401612d74565b90509250929050565b600080600060608486031215612e0357600080fd5b612e0c84612d74565b9250612e1a60208501612d74565b9150604084013590509250925092565b60008060408385031215612e3d57600080fd5b612e4683612d74565b946020939093013593505050565b600060208284031215612e6657600080fd5b610d5582612d90565b600060208284031215612e8157600080fd5b5035919050565b60008060408385031215612e9b57600080fd5b82359150612de560208401612d90565b600080600060608486031215612ec057600080fd5b8351925060208401519150604084015190509250925092565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600060208083528351808285015260005b81811015612f4157858101830151858201604001528201612f25565b81811115612f53576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612fee5784516001600160a01b031683529383019391830191600101612fc9565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115613022576130226130d5565b500190565b60008261304457634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613063576130636130d5565b500290565b60008282101561307a5761307a6130d5565b500390565b600181811c9082168061309357607f821691505b602082108114156130b457634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156130ce576130ce6130d5565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b81527aeb1305a851c4c519933de8ec9ecc28644e403db946846a4b5161aec4164736f6c63430008070033

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

000000000000000000000000a475da4209c93776325e9f4ec1eadfb48a3f8c87000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000314dc6448d9338c15b0a000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000014000000000000000000000000a475da4209c93776325e9f4ec1eadfb48a3f8c870000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000000943727970446f75676800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005446f756768000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : tokenOwner (address): 0xa475DA4209c93776325e9F4Ec1EAdFb48A3f8c87
Arg [1] : name_ (string): CrypDough
Arg [2] : symbol_ (string): Dough
Arg [3] : decimal_ (uint8): 18
Arg [4] : amountOfTokenWei (uint256): 1000000000000000000000000000000000
Arg [5] : setFees (uint8[4]): 2,6,0,2
Arg [6] : maxFees (uint256[5]): 10,10,10,50,20
Arg [7] : devWalletAddress_ (address): 0xa475DA4209c93776325e9F4Ec1EAdFb48A3f8c87
Arg [8] : _router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [9] : _basePair (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2

-----Encoded View---------------
21 Constructor Arguments found :
Arg [0] : 000000000000000000000000a475da4209c93776325e9f4ec1eadfb48a3f8c87
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000220
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000260
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [4] : 000000000000000000000000000000000000314dc6448d9338c15b0a00000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [9] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [10] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [11] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [14] : 000000000000000000000000a475da4209c93776325e9f4ec1eadfb48a3f8c87
Arg [15] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [16] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [18] : 43727970446f7567680000000000000000000000000000000000000000000000
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [20] : 446f756768000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

30841:25970:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38756:174;;;;;;;;;;-1:-1:-1;38756:174:0;;;;;:::i;:::-;;:::i;:::-;;35129:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36041:161;;;;;;;;;;-1:-1:-1;36041:161:0;;;;;:::i;:::-;;:::i;:::-;;;3324:14:1;;3317:22;3299:41;;3287:2;3272:18;36041:161:0;3159:187:1;39852:302:0;;;;;;;;;;-1:-1:-1;39852:302:0;;;;;:::i;:::-;;:::i;37162:87::-;;;;;;;;;;-1:-1:-1;37231:10:0;;37162:87;;;11597:25:1;;;11585:2;11570:18;37162:87:0;11451:177:1;31226:25:0;;;;;;;;;;;;;;;;32449:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2503:32:1;;;2485:51;;2473:2;2458:18;32449:51:0;2339:203:1;35406:95:0;;;;;;;;;;-1:-1:-1;35486:7:0;;35406:95;;32375:26;;;;;;;;;;;;;;;;32558:28;;;;;;;;;;-1:-1:-1;32558:28:0;;;;;;;;36210:313;;;;;;;;;;-1:-1:-1;36210:313:0;;;;;:::i;:::-;;:::i;38089:253::-;;;;;;;;;;-1:-1:-1;38089:253:0;;;;;:::i;:::-;;:::i;35315:83::-;;;;;;;;;;-1:-1:-1;35381:9:0;;35315:83;;35381:9;;;;13084:36:1;;13072:2;13057:18;35315:83:0;12942:184:1;31142:37:0;;;;;;;;;;;;;;;;56532:274;;;;;;;;;;;;;:::i;39170:174::-;;;;;;;;;;-1:-1:-1;39170:174:0;;;;;:::i;:::-;;:::i;36531:218::-;;;;;;;;;;-1:-1:-1;36531:218:0;;;;;:::i;:::-;;:::i;32138:22::-;;;;;;;;;;;;;;;;37257:378;;;;;;;;;;-1:-1:-1;37257:378:0;;;;;:::i;:::-;;:::i;31033:29::-;;;;;;;;;;;;;;;;38354:190;;;;;;;;;;-1:-1:-1;38354:190:0;;;;;:::i;:::-;;:::i;37643:438::-;;;;;;;;;;-1:-1:-1;37643:438:0;;;;;:::i;:::-;;:::i;31258:25::-;;;;;;;;;;;;;;;;32507:38;;;;;;;;;;;;;;;32593:33;;;;;;;;;;-1:-1:-1;32593:33:0;;;;;;;;;;;44823:123;;;;;;;;;;-1:-1:-1;44823:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;44911:27:0;44887:4;44911:27;;;:18;:27;;;;;;;;;44823:123;32006:33;;;;;;;;;;-1:-1:-1;32006:33:0;;;;;;;;31834:23;;;;;;;;;;-1:-1:-1;31834:23:0;;;;-1:-1:-1;;;;;31834:23:0;;;32211:28;;;;;;;;;;;;;;;;35509:198;;;;;;;;;;-1:-1:-1;35509:198:0;;;;;:::i;:::-;;:::i;20365:103::-;;;;;;;;;;;;;:::i;31322:26::-;;;;;;;;;;;;;;;;32639:27;;;;;;;;;;;;;;;;37034:120;;;;;;;;;;-1:-1:-1;37034:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;37126:20:0;37102:4;37126:20;;;:11;:20;;;;;;;;;37034:120;19714:87;;;;;;;;;;-1:-1:-1;19760:7:0;19787:6;-1:-1:-1;;;;;19787:6:0;19714:87;;38942:216;;;;;;;;;;-1:-1:-1;38942:216:0;;;;;:::i;:::-;;:::i;35220:87::-;;;;;;;;;;;;;:::i;35031:90::-;;;;;;;;;;-1:-1:-1;35103:8:0;;-1:-1:-1;;;;;35103:8:0;35031:90;;36757:269;;;;;;;;;;-1:-1:-1;36757:269:0;;;;;:::i;:::-;;:::i;35715:167::-;;;;;;;;;;-1:-1:-1;35715:167:0;;;;;:::i;:::-;;:::i;32296:22::-;;;;;;;;;;;;;;;;31106:29;;;;;;;;;;;;;;;;31743:32;;;;;;;;;;-1:-1:-1;31743:32:0;;;;-1:-1:-1;;;;;31743:32:0;;;31290:25;;;;;;;;;;;;;;;;40559:171;;;;;;;;;;-1:-1:-1;40559:171:0;;;;;:::i;:::-;;:::i;31069:29::-;;;;;;;;;;;;;;;;56156:364;;;;;;;;;;;;;:::i;39358:202::-;;;;;;;;;;-1:-1:-1;39358:202:0;;;;;:::i;:::-;;:::i;32673:44::-;;;;;;;;;;;;;;;;31186:33;;;;;;;;;;;;;;;;39571:265;;;;;;;;;;-1:-1:-1;39571:265:0;;;;;:::i;:::-;;:::i;40162:389::-;;;;;;;;;;-1:-1:-1;40162:389:0;;;;;:::i;:::-;;:::i;35890:143::-;;;;;;;;;;-1:-1:-1;35890:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;35998:18:0;;;35971:7;35998:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;35890:143;38556:188;;;;;;;;;;-1:-1:-1;38556:188:0;;;;;:::i;:::-;;:::i;20623:201::-;;;;;;;;;;-1:-1:-1;20623:201:0;;;;;:::i;:::-;;:::i;31806:21::-;;;;;;;;;;-1:-1:-1;31806:21:0;;;;-1:-1:-1;;;;;31806:21:0;;;38756:174;19760:7;19787:6;-1:-1:-1;;;;;19787:6:0;10310:10;19934:23;19926:68;;;;-1:-1:-1;;;19926:68:0;;;;;;;:::i;:::-;;;;;;;;;38863:9:::1;;38854:6;:18;;38831:64;;;::::0;-1:-1:-1;;;38831:64:0;;11305:2:1;38831:64:0::1;::::0;::::1;11287:21:1::0;11344:2;11324:18;;;11317:30;-1:-1:-1;;;11363:18:1;;;11356:49;11422:18;;38831:64:0::1;11103:343:1::0;38831:64:0::1;38906:7;:16:::0;38756:174::o;35129:83::-;35166:13;35199:5;35192:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35129:83;:::o;36041:161::-;36116:4;36133:39;10310:10;36156:7;36165:6;36133:8;:39::i;:::-;-1:-1:-1;36190:4:0;36041:161;;;;;:::o;39852:302::-;19760:7;19787:6;-1:-1:-1;;;;;19787:6:0;10310:10;19934:23;19926:68;;;;-1:-1:-1;;;19926:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39933:19:0;::::1;;::::0;;;:12:::1;:19;::::0;;;;;::::1;;39932:20;39924:59;;;::::0;-1:-1:-1;;;39924:59:0;;10132:2:1;39924:59:0::1;::::0;::::1;10114:21:1::0;10171:2;10151:18;;;10144:30;10210:28;10190:18;;;10183:56;10256:18;;39924:59:0::1;9930:350:1::0;39924:59:0::1;-1:-1:-1::0;;;;;39999:25:0;::::1;;::::0;;;:18:::1;:25;::::0;;;;;::::1;;39994:80;;40041:21;40056:5;40041:14;:21::i;:::-;-1:-1:-1::0;;;;;40084:19:0::1;;::::0;;;:12:::1;:19;::::0;;;;:26;;-1:-1:-1;;40084:26:0::1;40106:4;40084:26;::::0;;40121:17:::1;:25:::0;;-1:-1:-1;;;;;;40121:25:0::1;::::0;;::::1;::::0;;39852:302::o;36210:313::-;36308:4;36325:36;36335:6;36343:9;36354:6;36325:9;:36::i;:::-;36372:121;36381:6;10310:10;36403:89;36441:6;36403:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36403:19:0;;;;;;:11;:19;;;;;;;;10310:10;36403:33;;;;;;;;;;:37;:89::i;:::-;36372:8;:121::i;:::-;-1:-1:-1;36511:4:0;36210:313;;;;;:::o;38089:253::-;38155:7;38194;;38183;:18;;38175:73;;;;-1:-1:-1;;;38175:73:0;;5148:2:1;38175:73:0;;;5130:21:1;5187:2;5167:18;;;5160:30;5226:34;5206:18;;;5199:62;-1:-1:-1;;;5277:18:1;;;5270:40;5327:19;;38175:73:0;4946:406:1;38175:73:0;38259:19;38282:10;:8;:10::i;:::-;38259:33;-1:-1:-1;38310:24:0;:7;38259:33;38310:11;:24::i;:::-;38303:31;38089:253;-1:-1:-1;;;38089:253:0:o;56532:274::-;19760:7;19787:6;-1:-1:-1;;;;;19787:6:0;10310:10;19934:23;19926:68;;;;-1:-1:-1;;;19926:68:0;;;;;;;:::i;:::-;56607:7:::1;::::0;56592:12:::1;:22:::0;56641:10:::1;::::0;56625:13:::1;:26:::0;56672:10:::1;::::0;56662:7:::1;:20:::0;-1:-1:-1;56703:10:0;56693:7:::1;:20:::0;56738:11:::1;::::0;56724::::1;:25:::0;56760:21:::1;:28:::0;;-1:-1:-1;;56760:28:0::1;;;::::0;;56532:274::o;39170:174::-;19760:7;19787:6;-1:-1:-1;;;;;19787:6:0;10310:10;19934:23;19926:68;;;;-1:-1:-1;;;19926:68:0;;;;;;;:::i;:::-;39276:9:::1;;39267:6;:18;;39244:65;;;::::0;-1:-1:-1;;;39244:65:0;;8621:2:1;39244:65:0::1;::::0;::::1;8603:21:1::0;8660:2;8640:18;;;8633:30;-1:-1:-1;;;8679:18:1;;;8672:50;8739:18;;39244:65:0::1;8419:344:1::0;39244:65:0::1;39320:7;:16:::0;39170:174::o;36531:218::-;10310:10;36619:4;36668:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;36668:34:0;;;;;;;;;;36619:4;;36636:83;;36659:7;;36668:50;;36707:10;36668:38;:50::i;37257:378::-;10310:10;37309:14;37358:19;;;:11;:19;;;;;;;;37357:20;37349:77;;;;-1:-1:-1;;;37349:77:0;;10892:2:1;37349:77:0;;;10874:21:1;10931:2;10911:18;;;10904:30;10970:34;10950:18;;;10943:62;-1:-1:-1;;;11021:18:1;;;11014:42;11073:19;;37349:77:0;10690:408:1;37349:77:0;37438:15;37463:19;37474:7;37463:10;:19::i;:::-;-1:-1:-1;;;;;;;;37511:15:0;;;;;;:7;:15;;;;;;37437:45;;-1:-1:-1;37511:28:0;;:15;-1:-1:-1;37437:45:0;;-1:-1:-1;;37511:19:0;:28::i;:::-;-1:-1:-1;;;;;37493:15:0;;;;;;:7;:15;;;;;:46;37560:7;;:20;;37572:7;37560:11;:20::i;:::-;37550:7;:30;37604:10;;:23;;37619:7;37604:14;:23::i;:::-;37591:10;:36;-1:-1:-1;;;37257:378:0:o;38354:190::-;19760:7;19787:6;-1:-1:-1;;;;;19787:6:0;10310:10;19934:23;19926:68;;;;-1:-1:-1;;;19926:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38432:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;38431:28;38423:68;;;::::0;-1:-1:-1;;;38423:68:0;;6369:2:1;38423:68:0::1;::::0;::::1;6351:21:1::0;6408:2;6388:18;;;6381:30;6447:29;6427:18;;;6420:57;6494:18;;38423:68:0::1;6167:351:1::0;38423:68:0::1;-1:-1:-1::0;;;;;38502:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;38502:34:0::1;38532:4;38502:34;::::0;;38354:190::o;37643:438::-;37733:7;37772;;37761;:18;;37753:62;;;;-1:-1:-1;;;37753:62:0;;7081:2:1;37753:62:0;;;7063:21:1;7120:2;7100:18;;;7093:30;7159:33;7139:18;;;7132:61;7210:18;;37753:62:0;6879:355:1;37753:62:0;37831:17;37826:248;;37866:15;37891:19;37902:7;37891:10;:19::i;:::-;-1:-1:-1;37865:45:0;;-1:-1:-1;37925:14:0;;-1:-1:-1;;;;;;37925:14:0;37826:248;37974:23;38006:19;38017:7;38006:10;:19::i;:::-;-1:-1:-1;37972:53:0;;-1:-1:-1;38040:22:0;;-1:-1:-1;;;;;;38040:22:0;35509:198;-1:-1:-1;;;;;35599:20:0;;35575:7;35599:20;;;:11;:20;;;;;;;;35595:49;;;-1:-1:-1;;;;;;35628:16:0;;;;;:7;:16;;;;;;;35509:198::o;35595:49::-;-1:-1:-1;;;;;35682:16:0;;;;;;:7;:16;;;;;;35662:37;;:19;:37::i;20365:103::-;19760:7;19787:6;-1:-1:-1;;;;;19787:6:0;10310:10;19934:23;19926:68;;;;-1:-1:-1;;;19926:68:0;;;;;;;:::i;:::-;20430:30:::1;20457:1;20430:18;:30::i;:::-;20365:103::o:0;38942:216::-;19760:7;19787:6;-1:-1:-1;;;;;19787:6:0;10310:10;19934:23;19926:68;;;;-1:-1:-1;;;19926:68:0;;;;;;;:::i;:::-;39073:9:::1;;39058:12;:24;;39029:82;;;::::0;-1:-1:-1;;;39029:82:0;;4794:2:1;39029:82:0::1;::::0;::::1;4776:21:1::0;4833:2;4813:18;;;4806:30;4872:27;4852:18;;;4845:55;4917:18;;39029:82:0::1;4592:349:1::0;39029:82:0::1;39122:13;:28:::0;38942:216::o;35220:87::-;35259:13;35292:7;35285:14;;;;;:::i;36757:269::-;36850:4;36867:129;10310:10;36890:7;36899:96;36938:15;36899:96;;;;;;;;;;;;;;;;;10310:10;36899:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;36899:34:0;;;;;;;;;;;;:38;:96::i;35715:167::-;35793:4;35810:42;10310:10;35834:9;35845:6;35810:9;:42::i;40559:171::-;19760:7;19787:6;-1:-1:-1;;;;;19787:6:0;10310:10;19934:23;19926:68;;;;-1:-1:-1;;;19926:68:0;;;;;;;:::i;:::-;40636:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;40636:32:0;;::::1;;::::0;;40684:38:::1;::::0;::::1;::::0;::::1;::::0;40660:8;3324:14:1;3317:22;3299:41;;3287:2;3272:18;;3159:187;40684:38:0::1;;;;;;;;40559:171:::0;:::o;56156:364::-;19760:7;19787:6;-1:-1:-1;;;;;19787:6:0;10310:10;19934:23;19926:68;;;;-1:-1:-1;;;19926:68:0;;;;;;;:::i;:::-;56220:13:::1;::::0;;56207:10:::1;:26:::0;56257:7:::1;::::0;;56244:10:::1;:20:::0;56288:7:::1;::::0;;56275:10:::1;:20:::0;56320:11:::1;::::0;;56306::::1;:25:::0;-1:-1:-1;56357:7:0;56342:12:::1;:22:::0;-1:-1:-1;56375:17:0;;;;56403:11;;;;56425;;;56447:15;56473:21:::1;:29:::0;;-1:-1:-1;;56473:29:0::1;::::0;;56156:364::o;39358:202::-;19760:7;19787:6;-1:-1:-1;;;;;19787:6:0;10310:10;19934:23;19926:68;;;;-1:-1:-1;;;19926:68:0;;;;;;;:::i;:::-;39481:13:::1;;39468:10;:26;;39441:76;;;::::0;-1:-1:-1;;;39441:76:0;;11305:2:1;39441:76:0::1;::::0;::::1;11287:21:1::0;11344:2;11324:18;;;11317:30;-1:-1:-1;;;11363:18:1;;;11356:49;11422:18;;39441:76:0::1;11103:343:1::0;39441:76:0::1;39528:11;:24:::0;39358:202::o;39571:265::-;19760:7;19787:6;-1:-1:-1;;;;;19787:6:0;10310:10;19934:23;19926:68;;;;-1:-1:-1;;;19926:68:0;;;;;;;:::i;:::-;39674:17:::1;;39658:12;:33;;:55;;;;;39710:3;39695:12;:18;;39658:55;39650:92;;;::::0;-1:-1:-1;;;39650:92:0;;9372:2:1;39650:92:0::1;::::0;::::1;9354:21:1::0;9411:2;9391:18;;;9384:30;9450:27;9430:18;;;9423:55;9495:18;;39650:92:0::1;9170:349:1::0;39650:92:0::1;39768:60;39812:5;39768:25;39780:12;39768:7;;:11;;:25;;;;:::i;:::-;:29:::0;::::1;:60::i;:::-;39753:12;:75:::0;-1:-1:-1;39571:265:0:o;40162:389::-;19760:7;19787:6;-1:-1:-1;;;;;19787:6:0;10310:10;19934:23;19926:68;;;;-1:-1:-1;;;19926:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40264:19:0;::::1;;::::0;;;:12:::1;:19;::::0;;;;;::::1;;40256:65;;;::::0;-1:-1:-1;;;40256:65:0;;8970:2:1;40256:65:0::1;::::0;::::1;8952:21:1::0;9009:2;8989:18;;;8982:30;9048:34;9028:18;;;9021:62;-1:-1:-1;;;9099:18:1;;;9092:31;9140:19;;40256:65:0::1;8768:397:1::0;40256:65:0::1;-1:-1:-1::0;;;;;40336:25:0;::::1;;::::0;;;:18:::1;:25;::::0;;;;;::::1;;40332:77;;;40378:19;40391:5;40378:12;:19::i;:::-;-1:-1:-1::0;;;;;40419:19:0;;::::1;40441:5;40419:19:::0;;;:12:::1;:19;::::0;;;;:27;;-1:-1:-1;;40419:27:0::1;::::0;;40461:17:::1;::::0;;;::::1;:26;40457:87;;;40503:29;40523:8;40503:19;:29::i;:::-;40162:389:::0;;:::o;38556:188::-;19760:7;19787:6;-1:-1:-1;;;;;19787:6:0;10310:10;19934:23;19926:68;;;;-1:-1:-1;;;19926:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38631:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;38623:67;;;::::0;-1:-1:-1;;;38623:67:0;;6725:2:1;38623:67:0::1;::::0;::::1;6707:21:1::0;6764:2;6744:18;;;6737:30;6803:29;6783:18;;;6776:57;6850:18;;38623:67:0::1;6523:351:1::0;38623:67:0::1;-1:-1:-1::0;;;;;38701:27:0::1;38731:5;38701:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;38701:35:0::1;::::0;;38556:188::o;20623:201::-;19760:7;19787:6;-1:-1:-1;;;;;19787:6:0;10310:10;19934:23;19926:68;;;;-1:-1:-1;;;19926:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20712:22:0;::::1;20704:73;;;::::0;-1:-1:-1;;;20704:73:0;;5559:2:1;20704:73:0::1;::::0;::::1;5541:21:1::0;5598:2;5578:18;;;5571:30;5637:34;5617:18;;;5610:62;-1:-1:-1;;;5688:18:1;;;5681:36;5734:19;;20704:73:0::1;5357:402:1::0;20704:73:0::1;20788:28;20807:8;20788:18;:28::i;:::-;20623:201:::0;:::o;6263:98::-;6321:7;6348:5;6352:1;6348;:5;:::i;6662:98::-;6720:7;6747:5;6751:1;6747;:5;:::i;44954:337::-;-1:-1:-1;;;;;45047:19:0;;45039:68;;;;-1:-1:-1;;;45039:68:0;;10487:2:1;45039:68:0;;;10469:21:1;10526:2;10506:18;;;10499:30;10565:34;10545:18;;;10538:62;-1:-1:-1;;;10616:18:1;;;10609:34;10660:19;;45039:68:0;10285:400:1;45039:68:0;-1:-1:-1;;;;;45126:21:0;;45118:68;;;;-1:-1:-1;;;45118:68:0;;5966:2:1;45118:68:0;;;5948:21:1;6005:2;5985:18;;;5978:30;6044:34;6024:18;;;6017:62;-1:-1:-1;;;6095:18:1;;;6088:32;6137:19;;45118:68:0;5764:398:1;45118:68:0;-1:-1:-1;;;;;45199:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;45251:32;;11597:25:1;;;45251:32:0;;11570:18:1;45251:32:0;;;;;;;44954:337;;;:::o;45299:2013::-;-1:-1:-1;;;;;45421:18:0;;45413:68;;;;-1:-1:-1;;;45413:68:0;;9726:2:1;45413:68:0;;;9708:21:1;9765:2;9745:18;;;9738:30;9804:34;9784:18;;;9777:62;-1:-1:-1;;;9855:18:1;;;9848:35;9900:19;;45413:68:0;9524:401:1;45413:68:0;-1:-1:-1;;;;;45500:16:0;;45492:64;;;;-1:-1:-1;;;45492:64:0;;4390:2:1;45492:64:0;;;4372:21:1;4429:2;4409:18;;;4402:30;4468:34;4448:18;;;4441:62;-1:-1:-1;;;4519:18:1;;;4512:33;4562:19;;45492:64:0;4188:399:1;45492:64:0;45584:1;45575:6;:10;45567:64;;;;-1:-1:-1;;;45567:64:0;;8211:2:1;45567:64:0;;;8193:21:1;8250:2;8230:18;;;8223:30;8289:34;8269:18;;;8262:62;-1:-1:-1;;;8340:18:1;;;8333:39;8389:19;;45567:64:0;8009:405:1;45567:64:0;45713:13;-1:-1:-1;;;;;45699:28:0;:2;-1:-1:-1;;;;;45699:28:0;;45695:81;;;45753:11;;45743:7;:21;45695:81;19760:7;19787:6;-1:-1:-1;;;;;45791:15:0;;;19787:6;;45791:15;;;;:32;;-1:-1:-1;19760:7:0;19787:6;-1:-1:-1;;;;;45810:13:0;;;19787:6;;45810:13;;45791:32;45788:125;;;45856:12;;45846:6;:22;;45838:75;;;;-1:-1:-1;;;45838:75:0;;7441:2:1;45838:75:0;;;7423:21:1;7480:2;7460:18;;;7453:30;7519:34;7499:18;;;7492:62;-1:-1:-1;;;7570:18:1;;;7563:38;7618:19;;45838:75:0;7239:404:1;45838:75:0;46208:28;46239:24;46257:4;46239:9;:24::i;:::-;46208:55;;46311:12;;46287:20;:36;46284:112;;-1:-1:-1;46372:12:0;;46284:112;46467:29;;46443:53;;;;;;;46525;;-1:-1:-1;46562:16:0;;;;46561:17;46525:53;:91;;;;;46603:13;-1:-1:-1;;;;;46595:21:0;:4;-1:-1:-1;;;;;46595:21:0;;;46525:91;:129;;;;-1:-1:-1;46633:21:0;;;;;;;46525:129;46507:318;;;46704:29;;46681:52;;46777:36;46792:20;46777:14;:36::i;:::-;-1:-1:-1;;;;;47033:24:0;;46906:12;47033:24;;;:18;:24;;;;;;46921:4;;47033:24;;;:50;;-1:-1:-1;;;;;;47061:22:0;;;;;;:18;:22;;;;;;;;47033:50;47030:96;;;-1:-1:-1;47109:5:0;47030:96;47212:38;47227:4;47232:2;47235:6;47242:7;47212:14;:38::i;:::-;47289:15;44663;;44653:7;:25;44705:21;;44689:13;:37;44747:15;;44737:7;:25;44787:16;;44773:11;:30;44609:202;47289:15;45402:1910;;;45299:2013;;;:::o;7804:240::-;7924:7;7985:12;7977:6;;;;7969:29;;;;-1:-1:-1;;;7969:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;8020:5:0;;;7804:240::o;42219:163::-;42260:7;42281:15;42298;42317:19;:17;:19::i;:::-;42280:56;;-1:-1:-1;42280:56:0;-1:-1:-1;42354:20:0;42280:56;;42354:11;:20::i;:::-;42347:27;;;;42219:163;:::o;5525:98::-;5583:7;5610:5;5614:1;5610;:5;:::i;40836:454::-;40895:7;40904;40913;40922;40931;40940;40949;40970:23;40995:12;41009:18;41029:12;41045:20;41057:7;41045:11;:20::i;:::-;40969:96;;;;;;;;41077:15;41094:23;41119:12;41135:56;41147:7;41156:4;41162:10;41174:4;41180:10;:8;:10::i;:::-;41135:11;:56::i;:::-;41076:115;;-1:-1:-1;41076:115:0;-1:-1:-1;41076:115:0;-1:-1:-1;41242:15:0;;-1:-1:-1;41259:4:0;;-1:-1:-1;41265:10:0;;-1:-1:-1;41277:4:0;-1:-1:-1;;;;40836:454:0;;;;;;;;;:::o;5906:98::-;5964:7;5991:5;5995:1;5991;:5;:::i;20984:191::-;21058:16;21077:6;;-1:-1:-1;;;;;21094:17:0;;;-1:-1:-1;;;;;;21094:17:0;;;;;;21127:40;;21077:6;;;;;;;21127:40;;21058:16;21127:40;21047:128;20984:191;:::o;47320:985::-;33024:16;:23;;-1:-1:-1;;33024:23:0;33043:4;33024:23;;;:16;47471:27:::1;:20:::0;47496:1:::1;47471:24;:27::i;:::-;47456:42:::0;-1:-1:-1;47509:17:0::1;47529:30;:20:::0;47456:42;47529:24:::1;:30::i;:::-;47509:50:::0;-1:-1:-1;47862:21:0::1;47928:22;47945:4:::0;47928:16:::1;:22::i;:::-;48081:18;48102:41;:21;48128:14:::0;48102:25:::1;:41::i;:::-;48081:62;;48193:35;48206:9;48217:10;48193:12;:35::i;:::-;48254:43;::::0;;12820:25:1;;;12876:2;12861:18;;12854:34;;;12904:18;;;12897:34;;;48254:43:0::1;::::0;12808:2:1;12793:18;48254:43:0::1;;;;;;;-1:-1:-1::0;;33070:16:0;:24;;-1:-1:-1;;33070:24:0;;;-1:-1:-1;;;47320:985:0:o;52662:839::-;52773:7;52769:40;;52795:14;:12;:14::i;:::-;-1:-1:-1;;;;;52834:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;52858:22:0;;;;;;:11;:22;;;;;;;;52857:23;52834:46;52830:597;;;52897:48;52919:6;52927:9;52938:6;52897:21;:48::i;:::-;52830:597;;;-1:-1:-1;;;;;52968:19:0;;;;;;:11;:19;;;;;;;;52967:20;:46;;;;-1:-1:-1;;;;;;52991:22:0;;;;;;:11;:22;;;;;;;;52967:46;52963:464;;;53030:46;53050:6;53058:9;53069:6;53030:19;:46::i;52963:464::-;-1:-1:-1;;;;;53099:19:0;;;;;;:11;:19;;;;;;;;53098:20;:47;;;;-1:-1:-1;;;;;;53123:22:0;;;;;;:11;:22;;;;;;;;53122:23;53098:47;53094:333;;;53162:44;53180:6;53188:9;53199:6;53162:17;:44::i;53094:333::-;-1:-1:-1;;;;;53228:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;53251:22:0;;;;;;:11;:22;;;;;;;;53228:45;53224:203;;;53290:48;53312:6;53320:9;53331:6;53290:21;:48::i;53224:203::-;53371:44;53389:6;53397:9;53408:6;53371:17;:44::i;:::-;52662:839;;;;:::o;42390:561::-;42487:7;;42523;;42440;;;;;42547:289;42571:9;:16;42567:20;;42547:289;;;42637:7;42613;:21;42621:9;42631:1;42621:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42621:12:0;42613:21;;;;;;;;;;;;;:31;;:66;;;42672:7;42648;:21;42656:9;42666:1;42656:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42656:12:0;42648:21;;;;;;;;;;;;;:31;42613:66;42609:97;;;42689:7;;42698;;42681:25;;;;;;;42390:561;;:::o;42609:97::-;42731:34;42743:7;:21;42751:9;42761:1;42751:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42751:12:0;42743:21;;;;;;;;;;;;;42731:7;;:11;:34::i;:::-;42721:44;;42790:34;42802:7;:21;42810:9;42820:1;42810:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42810:12:0;42802:21;;;;;;;;;;;;;42790:7;;:11;:34::i;:::-;42780:44;-1:-1:-1;42589:3:0;;;;:::i;:::-;;;;42547:289;;;-1:-1:-1;42872:7:0;;42860;;:20;;:11;:20::i;:::-;42850:7;:30;42846:61;;;42890:7;;42899;;42882:25;;;;;;42390:561;;:::o;42846:61::-;42926:7;;42935;;-1:-1:-1;42390:561:0;-1:-1:-1;42390:561:0:o;41298:405::-;41358:7;41367;41376;41385;41405:12;41420:24;41436:7;41420:15;:24::i;:::-;41405:39;;41455:18;41476:30;41498:7;41476:21;:30::i;:::-;41455:51;;41517:12;41532:24;41548:7;41532:15;:24::i;:::-;41517:39;-1:-1:-1;41567:23:0;41593:43;41517:39;41593:33;41615:10;41593:33;:7;41605:4;41593:11;:17::i;:::-;:21;;:33::i;:43::-;41567:69;41672:4;;-1:-1:-1;41678:10:0;;-1:-1:-1;41678:10:0;-1:-1:-1;41298:405:0;;-1:-1:-1;;;41298:405:0:o;41711:500::-;41840:7;;;;41896:24;:7;41908:11;41896;:24::i;:::-;41878:42;-1:-1:-1;41931:12:0;41946:21;:4;41955:11;41946:8;:21::i;:::-;41931:36;-1:-1:-1;41978:18:0;41999:27;:10;42014:11;41999:14;:27::i;:::-;41978:48;-1:-1:-1;42037:12:0;42052:21;:4;42061:11;42052:8;:21::i;:::-;42037:36;-1:-1:-1;42084:23:0;42110:43;42037:36;42110:33;42132:10;42110:33;:7;42122:4;42110:11;:17::i;:43::-;42172:7;;;;-1:-1:-1;42198:4:0;;-1:-1:-1;41711:500:0;;-1:-1:-1;;;;;;;;;41711:500:0:o;48313:2057::-;48462:16;;;48476:1;48462:16;;;;;;;;48438:21;;48462:16;;;;;;;;;;-1:-1:-1;48462:16:0;48438:40;;48507:4;48489;48494:1;48489:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48489:23:0;;;:7;;;;;;;;;:23;35103:8;;;48523:4;48528:1;48523:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;48523:23:0;;;-1:-1:-1;;;;;48523:23:0;;;;;48559:62;48576:4;48591:15;48609:11;48559:8;:62::i;:::-;48664:224;;-1:-1:-1;;;48664:224:0;;-1:-1:-1;;;;;48664:15:0;:66;;;;:224;;48745:11;;48771:1;;48815:4;;48842;;48862:15;;48664:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48660:1703;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48944:248:0;;-1:-1:-1;;;48944:248:0;;-1:-1:-1;;;;;48944:15:0;:66;;;;:248;;49029:11;;49059:1;;49107:4;;49138;;49162:15;;48944:248;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48940:1410;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49252:273:0;;-1:-1:-1;;;49252:273:0;;-1:-1:-1;;;;;49252:15:0;:67;;;;:273;;49342:11;;49376:1;;49428:4;;49463;;49491:15;;49252:273;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49248:1085;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49594:295:0;;-1:-1:-1;;;49594:295:0;;-1:-1:-1;;;;;49594:15:0;:65;;;;:295;;49686:11;;49724:1;;49780:4;;49819;;49851:15;;49594:295;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49590:720;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49962:320:0;;-1:-1:-1;;;49962:320:0;;-1:-1:-1;;;;;49962:15:0;:66;;;;:320;;50059:11;;50101:1;;50161:4;;50204;;50240:15;;49962:320;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49913:397;49590:720;49547:786;49209:1141;48940:1410;48903:1460;40162:389;;:::o;50378:2203::-;50526:62;50543:4;50558:15;50576:11;50526:8;:62::i;:::-;50842:4;;50637:250;;-1:-1:-1;;;50637:250:0;;-1:-1:-1;;;;;50637:15:0;:31;;;;;50677:9;;50637:250;;50710:4;;50730:11;;50756:1;;;;50842:4;;;50861:15;;50637:250;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50637:250:0;;;;;;;;-1:-1:-1;;50637:250:0;;;;;;;;;;;;:::i;:::-;;;50633:1939;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51179:4:0;;50954:278;;-1:-1:-1;;;50954:278:0;;-1:-1:-1;;;;;50954:15:0;:31;;;;;50994:9;;50954:278;;51031:4;;51055:11;;51085:1;;;;51179:4;;;51202:15;;50954:278;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50954:278:0;;;;;;;;-1:-1:-1;;50954:278:0;;;;;;;;;;;;:::i;:::-;;;50950:1611;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51555:4:0;;51309:307;;-1:-1:-1;;;51309:307:0;;-1:-1:-1;;;;;51309:15:0;:32;;;;;51350:9;;51309:307;;51391:4;;51419:11;;51453:1;;;;51555:4;;;51582:15;;51309:307;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51309:307:0;;;;;;;;-1:-1:-1;;51309:307:0;;;;;;;;;;;;:::i;:::-;;;51305:1239;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51969:4:0;;51705:333;;-1:-1:-1;;;51705:333:0;;-1:-1:-1;;;;;51705:15:0;:30;;;;;51744:9;;51705:333;;51789:4;;51821:11;;51859:1;;;;51969:4;;;52000:15;;51705:333;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51705:333:0;;;;;;;;-1:-1:-1;;51705:333:0;;;;;;;;;;;;:::i;:::-;;;51701:822;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52422:4:0;;52137:362;;-1:-1:-1;;;52137:362:0;;-1:-1:-1;;;;;52137:15:0;:31;;;;;52177:9;;52137:362;;52226:4;;52262:11;;52304:1;;;;52422:4;;;52457:15;;52137:362;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;52087:436;51701:822;;;;;;51657:887;51305:1239;;;;;;51265:1296;48903:1460;40162:389;;:::o;44206:391::-;44252:7;;:12;:34;;;;-1:-1:-1;44268:13:0;;:18;44252:34;:50;;;;-1:-1:-1;44290:7:0;;:12;44252:50;44249:62;;;44206:391::o;44249:62::-;44349:7;;;44331:15;:25;44391:13;;;44367:21;:37;44433:7;;;44415:15;:25;44470:11;;;44451:16;:30;-1:-1:-1;44502:11:0;;;;44524:17;;;;44552:11;;;44574:15;44206:391::o;54691:605::-;54794:15;54811:23;54836:12;54850:23;54875:12;54889:18;54909:12;54925:19;54936:7;54925:10;:19::i;:::-;54793:151;;;;;;;;;;;;;;54973:28;54993:7;54973;:15;54981:6;-1:-1:-1;;;;;54973:15:0;-1:-1:-1;;;;;54973:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;54955:15:0;;;;;;:7;:15;;;;;;;;:46;;;;55030:7;:15;;;;:28;;55050:7;55030:19;:28::i;:::-;-1:-1:-1;;;;;55012:15:0;;;;;;;:7;:15;;;;;;:46;;;;55090:18;;;;;;;:39;;55113:15;55090:22;:39::i;:::-;-1:-1:-1;;;;;55069:18:0;;;;;;:7;:18;;;;;:60;55143:26;55158:10;55143:14;:26::i;:::-;55180:14;55189:4;55180:8;:14::i;:::-;55205:23;55217:4;55223;55205:11;:23::i;:::-;55261:9;-1:-1:-1;;;;;55244:44:0;55253:6;-1:-1:-1;;;;;55244:44:0;;55272:15;55244:44;;;;11597:25:1;;11585:2;11570:18;;11451:177;55244:44:0;;;;;;;;54782:514;;;;;;;54691:605;;;:::o;54058:625::-;54159:15;54176:23;54201:12;54215:23;54240:12;54254:18;54274:12;54290:19;54301:7;54290:10;:19::i;:::-;54158:151;;;;;;;;;;;;;;54338:28;54358:7;54338;:15;54346:6;-1:-1:-1;;;;;54338:15:0;-1:-1:-1;;;;;54338:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;54320:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;54398:18;;;;;:7;:18;;;;;:39;;54421:15;54398:22;:39::i;:::-;-1:-1:-1;;;;;54377:18:0;;;;;;:7;:18;;;;;;;;:60;;;;54469:7;:18;;;;:39;;54492:15;54469:22;:39::i;53509:541::-;53608:15;53625:23;53650:12;53664:23;53689:12;53703:18;53723:12;53739:19;53750:7;53739:10;:19::i;:::-;53607:151;;;;;;;;;;;;;;53787:28;53807:7;53787;:15;53795:6;-1:-1:-1;;;;;53787:15:0;-1:-1:-1;;;;;53787:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;55304:689::-;55407:15;55424:23;55449:12;55463:23;55488:12;55502:18;55522:12;55538:19;55549:7;55538:10;:19::i;:::-;55406:151;;;;;;;;;;;;;;55586:28;55606:7;55586;:15;55594:6;-1:-1:-1;;;;;55586:15:0;-1:-1:-1;;;;;55586:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;55568:15:0;;;;;;:7;:15;;;;;;;;:46;;;;55643:7;:15;;;;:28;;55663:7;55643:19;:28::i;43684:166::-;43748:7;43779:63;43822:5;43779:20;43791:7;;43779;:11;;:20;;;;:::i;43858:166::-;43928:7;43955:61;44000:5;43955:26;43967:13;;43955:7;:11;;:26;;;;:::i;44036:154::-;44100:7;44127:55;44166:5;44127:20;44139:7;;44127;:11;;:20;;;;:::i;42963:355::-;43026:19;43049:10;:8;:10::i;:::-;43026:33;-1:-1:-1;43070:18:0;43091:27;:10;43026:33;43091:14;:27::i;:::-;43170:4;43154:22;;;;:7;:22;;;;;;43070:48;;-1:-1:-1;43154:38:0;;43070:48;43154:26;:38::i;:::-;43145:4;43129:22;;;;:7;:22;;;;;;;;:63;;;;43206:11;:26;;;;;;43203:107;;;43288:4;43272:22;;;;:7;:22;;;;;;:38;;43299:10;43272:26;:38::i;:::-;43263:4;43247:22;;;;:7;:22;;;;;:63;43015:303;;42963:355;:::o;43330:338::-;43381:19;43403:10;:8;:10::i;:::-;43381:32;-1:-1:-1;43424:12:0;43439:21;:4;43381:32;43439:8;:21::i;:::-;43508:17;;-1:-1:-1;;;;;43508:17:0;43500:26;;;;:7;:26;;;;;;43424:36;;-1:-1:-1;43500:36:0;;43424;43500:30;:36::i;:::-;43479:17;;;-1:-1:-1;;;;;43479:17:0;;;43471:26;;;;:7;:26;;;;;;;;:65;;;;43562:17;;;;;43550:30;;:11;:30;;;;;;;43547:113;;;43632:17;;-1:-1:-1;;;;;43632:17:0;43624:26;;;;:7;:26;;;;;;:36;;43655:4;43624:30;:36::i;:::-;43603:17;;-1:-1:-1;;;;;43603:17:0;43595:26;;;;:7;:26;;;;;:65;43370:298;;43330:338;:::o;56001:147::-;56079:7;;:17;;56091:4;56079:11;:17::i;:::-;56069:7;:27;56120:10;;:20;;56135:4;56120:14;:20::i;:::-;56107:10;:33;-1:-1:-1;;56001:147:0:o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:160::-;257:20;;313:13;;306:21;296:32;;286:60;;342:1;339;332:12;357:186;416:6;469:2;457:9;448:7;444:23;440:32;437:52;;;485:1;482;475:12;437:52;508:29;527:9;508:29;:::i;548:260::-;616:6;624;677:2;665:9;656:7;652:23;648:32;645:52;;;693:1;690;683:12;645:52;716:29;735:9;716:29;:::i;:::-;706:39;;764:38;798:2;787:9;783:18;764:38;:::i;:::-;754:48;;548:260;;;;;:::o;813:328::-;890:6;898;906;959:2;947:9;938:7;934:23;930:32;927:52;;;975:1;972;965:12;927:52;998:29;1017:9;998:29;:::i;:::-;988:39;;1046:38;1080:2;1069:9;1065:18;1046:38;:::i;:::-;1036:48;;1131:2;1120:9;1116:18;1103:32;1093:42;;813:328;;;;;:::o;1146:254::-;1214:6;1222;1275:2;1263:9;1254:7;1250:23;1246:32;1243:52;;;1291:1;1288;1281:12;1243:52;1314:29;1333:9;1314:29;:::i;:::-;1304:39;1390:2;1375:18;;;;1362:32;;-1:-1:-1;;;1146:254:1:o;1405:180::-;1461:6;1514:2;1502:9;1493:7;1489:23;1485:32;1482:52;;;1530:1;1527;1520:12;1482:52;1553:26;1569:9;1553:26;:::i;1590:180::-;1649:6;1702:2;1690:9;1681:7;1677:23;1673:32;1670:52;;;1718:1;1715;1708:12;1670:52;-1:-1:-1;1741:23:1;;1590:180;-1:-1:-1;1590:180:1:o;1775:248::-;1840:6;1848;1901:2;1889:9;1880:7;1876:23;1872:32;1869:52;;;1917:1;1914;1907:12;1869:52;1953:9;1940:23;1930:33;;1982:35;2013:2;2002:9;1998:18;1982:35;:::i;2028:306::-;2116:6;2124;2132;2185:2;2173:9;2164:7;2160:23;2156:32;2153:52;;;2201:1;2198;2191:12;2153:52;2230:9;2224:16;2214:26;;2280:2;2269:9;2265:18;2259:25;2249:35;;2324:2;2313:9;2309:18;2303:25;2293:35;;2028:306;;;;;:::o;2547:607::-;-1:-1:-1;;;;;2906:15:1;;;2888:34;;2953:2;2938:18;;2931:34;;;;2996:2;2981:18;;2974:34;;;;3039:2;3024:18;;3017:34;;;;3088:15;;;3082:3;3067:19;;3060:44;2868:3;3120:19;;3113:35;;;;2837:3;2822:19;;2547:607::o;3586:597::-;3698:4;3727:2;3756;3745:9;3738:21;3788:6;3782:13;3831:6;3826:2;3815:9;3811:18;3804:34;3856:1;3866:140;3880:6;3877:1;3874:13;3866:140;;;3975:14;;;3971:23;;3965:30;3941:17;;;3960:2;3937:26;3930:66;3895:10;;3866:140;;;4024:6;4021:1;4018:13;4015:91;;;4094:1;4089:2;4080:6;4069:9;4065:22;4061:31;4054:42;4015:91;-1:-1:-1;4167:2:1;4146:15;-1:-1:-1;;4142:29:1;4127:45;;;;4174:2;4123:54;;3586:597;-1:-1:-1;;;3586:597:1:o;7648:356::-;7850:2;7832:21;;;7869:18;;;7862:30;7928:34;7923:2;7908:18;;7901:62;7995:2;7980:18;;7648:356::o;11633:980::-;11895:4;11943:3;11932:9;11928:19;11974:6;11963:9;11956:25;12000:2;12038:6;12033:2;12022:9;12018:18;12011:34;12081:3;12076:2;12065:9;12061:18;12054:31;12105:6;12140;12134:13;12171:6;12163;12156:22;12209:3;12198:9;12194:19;12187:26;;12248:2;12240:6;12236:15;12222:29;;12269:1;12279:195;12293:6;12290:1;12287:13;12279:195;;;12358:13;;-1:-1:-1;;;;;12354:39:1;12342:52;;12449:15;;;;12414:12;;;;12390:1;12308:9;12279:195;;;-1:-1:-1;;;;;;;12530:32:1;;;;12525:2;12510:18;;12503:60;-1:-1:-1;;;12594:3:1;12579:19;12572:35;12491:3;11633:980;-1:-1:-1;;;11633:980:1:o;13131:128::-;13171:3;13202:1;13198:6;13195:1;13192:13;13189:39;;;13208:18;;:::i;:::-;-1:-1:-1;13244:9:1;;13131:128::o;13264:217::-;13304:1;13330;13320:132;;13374:10;13369:3;13365:20;13362:1;13355:31;13409:4;13406:1;13399:15;13437:4;13434:1;13427:15;13320:132;-1:-1:-1;13466:9:1;;13264:217::o;13486:168::-;13526:7;13592:1;13588;13584:6;13580:14;13577:1;13574:21;13569:1;13562:9;13555:17;13551:45;13548:71;;;13599:18;;:::i;:::-;-1:-1:-1;13639:9:1;;13486:168::o;13659:125::-;13699:4;13727:1;13724;13721:8;13718:34;;;13732:18;;:::i;:::-;-1:-1:-1;13769:9:1;;13659:125::o;13789:380::-;13868:1;13864:12;;;;13911;;;13932:61;;13986:4;13978:6;13974:17;13964:27;;13932:61;14039:2;14031:6;14028:14;14008:18;14005:38;14002:161;;;14085:10;14080:3;14076:20;14073:1;14066:31;14120:4;14117:1;14110:15;14148:4;14145:1;14138:15;14002:161;;13789:380;;;:::o;14174:135::-;14213:3;-1:-1:-1;;14234:17:1;;14231:43;;;14254:18;;:::i;:::-;-1:-1:-1;14301:1:1;14290:13;;14174:135::o;14314:127::-;14375:10;14370:3;14366:20;14363:1;14356:31;14406:4;14403:1;14396:15;14430:4;14427:1;14420:15;14446:127;14507:10;14502:3;14498:20;14495:1;14488:31;14538:4;14535:1;14528:15;14562:4;14559:1;14552:15

Swarm Source

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