ETH Price: $3,703.84 (+2.93%)

Token

ERC-20: Nimbl.tv ($NIMBL)
 

Overview

Max Total Supply

800,000,000 $NIMBL

Holders

89

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
navarik.eth
Balance
1,818.1818 $NIMBL

Value
$0.00
0x81276fc93ed8b3897daff792839edbf505646efd
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:
NimblToken

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-13
*/

// SPDX-License-Identifier: MIT


// Website: nimbl.tv
// X/Twitter: x.com/nimbltv
// Official Telegram: t.me/nimbltv
// Whitepaper: whitepaper.nimbl.tv



// File: token/contracts/interfaces/IUniswapV2Router02.sol


pragma solidity ^0.8.20;

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
// File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol


// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

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


// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

/**
 * @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;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

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


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;


/**
 * @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.
 *
 * The initial owner is set to the address provided by the deployer. 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;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

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

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

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

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


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

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

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

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

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

    /**
     * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` 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 value) external returns (bool);
}

// File: token/contracts/interfaces/INimblToken.sol


pragma solidity ^0.8.20;


interface INimblToken {
    struct TimetableTax {
        uint256 timestamp;
        uint16 taxBuy;
        uint16 taxSell;
    }

    struct MonthlyUnlock {
        string month;
        uint256 amount;
    }

    event UpdateExcludeFromFees(address indexed account, bool isExcluded);
    event Claim(address account, uint256 amount);

    error TradingClose();
    error ErrorVerify();
    error AlreadyClaimed();
    error ErrorRoot();
    error WrongHolder();

    function setExcludeFromFees(address account, bool excluded) external;
    
    function setPool(address account) external;

    function unlockFundsMonthly() external;
    
    function setTradingStatus(bool status) external;

    function openTrading() external;

    function getTaxesForDEX() external view returns (uint16 taxBuy, uint16 taxSell);

    function getV2PoolAddr() external view returns (address v2PoolAddr);

    function getVaultAddr() external view returns (address vaultAddr);

    function getTradingStatus() external view returns (bool);

    function isExcludedFromFee(address account) external view returns (bool status);

    function getTimetableTax() external view returns (TimetableTax[] memory _timetableTax);

    function manualSwap() external;

    function bulksendToken(address from, address[] memory _to, uint256[] memory _values) external;

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


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;


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

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

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

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


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;





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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

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

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

pragma solidity >=0.5.0;

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

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

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

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

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

// File: token/contracts/NimblToken.sol



pragma solidity ^0.8.20;


library SafeMath {

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }
}


contract NimblToken is INimblToken, ERC20, Ownable {

    using SafeMath for uint256;
    address internal _v2PoolAddr;
    address internal _vaultAddr;
    address internal _toPublicRound;
    address payable internal _taxWallet;
    address internal _toDEX;
    address internal _toCEX;

    uint256 public _taxSwapThreshold= 76000 * 10**decimals();
    uint256 public _maxTaxSwap= 760000 * 10**decimals();
    
    IUniswapV2Router02 internal _uniswapV2Router;

    bool internal _tradingOpen;
    bool internal _tradingStarted;

    mapping(address => bool) internal _isExcludedFromFee;
    mapping(bytes32 => mapping(bytes32 => bool)) internal _useProof; // root=> leaf => status

    TimetableTax[] internal _timetableTax;
    MonthlyUnlock[] internal _monthlyUnlock;
    uint256 internal _lastUnlockExecutionTime;
    uint256 internal _unlockExecutionCount;
    bool private inSwap = false;
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }


    constructor(
        address payable taxWallet,
        address vaultAddr,
        uint256 totalSupply,
        address toCEX,
        address toDEX,
        address toPublicRound
    ) payable ERC20("Nimbl.tv", "$NIMBL") Ownable(msg.sender) {
        _timetableTax.push(TimetableTax(0, 100, 100));
        _vaultAddr = vaultAddr;
        _toPublicRound = toPublicRound;
        _taxWallet = taxWallet;
        _toDEX = toDEX;
        _toCEX = toCEX;
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_vaultAddr] = true;
        _isExcludedFromFee[_taxWallet] = true;
        _tradingOpen = false;
        _tradingStarted = false;

        _mint(msg.sender, totalSupply * 10**decimals());

        uint256 hundredK = 100000;
        
        // Monthly unlock
        addMonthlyUnlock("_firstMonth", 500 * hundredK * 10**decimals());
        addMonthlyUnlock("_secondMonth", 372 * hundredK * 10**decimals());
        addMonthlyUnlock("_third", 412 * hundredK * 10**decimals());
        addMonthlyUnlock("_fouth", 296 * hundredK * 10**decimals());
        addMonthlyUnlock("_fifth", 296 * hundredK * 10**decimals());
        addMonthlyUnlock("_sixth", 476 * hundredK * 10**decimals());
        addMonthlyUnlock("_seventh", 324 * hundredK * 10**decimals());
        addMonthlyUnlock("_eight", 64 * hundredK * 10**decimals());
        addMonthlyUnlock("_ninth", 244 * hundredK * 10**decimals());
        addMonthlyUnlock("_tenth", 329 * hundredK * 10**decimals());
        addMonthlyUnlock("_eleventh", 64 * hundredK * 10**decimals());
        addMonthlyUnlock("_twelfth", 244 * hundredK * 10**decimals());
        addMonthlyUnlock("_thirteenth", 38566667 * 10**decimals());
        addMonthlyUnlock("_fourteenth", 12066666 * 10**decimals());
        addMonthlyUnlock("_fifteenth", 30066666 * 10**decimals());
        addMonthlyUnlock("_sixteenth", 38566667 * 10**decimals());
        addMonthlyUnlock("_seventeenth", 12066667 * 10**decimals());
        addMonthlyUnlock("_eighteenth", 30066667 * 10**decimals());
        addMonthlyUnlock("_nineteenth", 38566666 * 10**decimals());
        addMonthlyUnlock("_twentieth", 12066667 * 10**decimals());
        addMonthlyUnlock("_twentyfirst", 30066666 * 10**decimals());
        addMonthlyUnlock("_twentysecond", 38066667 * 10**decimals());
        addMonthlyUnlock("_twentythird", 12066667 * 10**decimals());
        addMonthlyUnlock("_twentyfourth", 15666667 * 10**decimals());
        addMonthlyUnlock("_twentyfifth", 26666667 * 10**decimals());
        addMonthlyUnlock("_twentysixth", 5666666 * 10**decimals());
        addMonthlyUnlock("_twentyseventh", 5666667 * 10**decimals());
        addMonthlyUnlock("_twentyeighth", 26666667 * 10**decimals());
        addMonthlyUnlock("_twentyninth", 5666667 * 10**decimals());
        addMonthlyUnlock("_thirtieth", 5666666 * 10**decimals());
        addMonthlyUnlock("_thirtyfirst", 25666667 * 10**decimals());
        addMonthlyUnlock("_thirtysecond", 5666667 * 10**decimals());
        addMonthlyUnlock("_thirtythird", 5666667 * 10**decimals());
        addMonthlyUnlock("_thirtyfourth", 5666666 * 10**decimals());
        addMonthlyUnlock("_thirtyfifth", 5666667 * 10**decimals());
        addMonthlyUnlock("_thirtysixth", 5666666 * 10**decimals());
        
        uint256 amountToUnlock = _monthlyUnlock[0].amount;
        super._transfer(msg.sender, _vaultAddr, amountToUnlock);
        _lastUnlockExecutionTime = block.timestamp;
        _unlockExecutionCount = 1;

        super._transfer(_vaultAddr, _toPublicRound, 300*hundredK * 10**decimals());
        super._transfer(_vaultAddr, toCEX, 80*hundredK * 10**decimals());
        super._transfer(_vaultAddr, toDEX, 120*hundredK * 10**decimals());
        

        // Launchpads
        uint256 _nftbAmount = 157819 * 10**decimals();
        uint256 _kommunitasAmount = 7113200 * 10**decimals();
        uint256 _maticAmount = 4328728 * 10**decimals();

        address _nftb = 0x5955b89C4f342161905C5Fc5a0425E8Bced06996;
        address _kommunitas = 0x29b41c3F9B752AA3c78fd74309211B80584688c6;
        address _matic = 0xdB771f28C89162bD1868E02f4e914245e16D6427;

        super._transfer(_toPublicRound, _nftb, _nftbAmount);
        super._transfer(_toPublicRound, _kommunitas, _kommunitasAmount);
        super._transfer(_toPublicRound, _matic, _maticAmount);

        //Trusfi launchpad drops
        super._transfer(_toPublicRound, 0xB357a57F181CF2Ddd31EB052457F191280739988, 13091 * 10**decimals());
        super._transfer(_toPublicRound, 0x0e6A2A2752d044109106370fc2Fb011a948C141e, 12320 * 10**decimals());
        super._transfer(_toPublicRound, 0x55AD48398B92534aD16bEa6247034244530F92e0, 4786 * 10**decimals());
        super._transfer(_toPublicRound, 0x8f66ABcA9B53BDb8e042F0f7D283fE388a3E3352, 728 * 10**decimals());
        super._transfer(_toPublicRound, 0x872B0f881f874eB97242FEF27d781Db6172b5F7E, 2910 * 10**decimals());
        super._transfer(_toPublicRound, 0xAe9cDa3764c513753dBf99aD365935D1994cdcDb, 49310 * 10**decimals());
        super._transfer(_toPublicRound, 0x7155fABBAF2d8305aefCdF19a6B0d88D9fA1C0E0, 822 * 10**decimals());
        super._transfer(_toPublicRound, 0x2169faDabb94d4D344dAF91581e558F7A3384e19, 655 * 10**decimals());
        super._transfer(_toPublicRound, 0xf03A5e9be02095c230AffC8a965DcfD4AF97363B, 582 * 10**decimals());
        super._transfer(_toPublicRound, 0xac3269A2a0704bDe92E2a019c5b0E4F5fE323191, 341 * 10**decimals());
        super._transfer(_toPublicRound, 0xAe9cDa3764c513753dBf99aD365935D1994cdcDb, 49812 * 10**decimals());
        super._transfer(_toPublicRound, 0x0e6A2A2752d044109106370fc2Fb011a948C141e, 12451 * 10**decimals());
        super._transfer(_toPublicRound, 0xe13A7158D593fb406c909E41b4795a508ecb9431, 1371 * 10**decimals());
        super._transfer(_toPublicRound, 0x1597d23693CC8e57b957c37e410bCB034ecD08b0, 830 * 10**decimals());
        super._transfer(_toPublicRound, 0x2169faDabb94d4D344dAF91581e558F7A3384e19, 728 * 10**decimals());
        super._transfer(_toPublicRound, 0x78A74E14D89109a4CDb70C940c523e4E3f8A3F38, 20454 * 10**decimals());
        super._transfer(_toPublicRound, 0x7155fABBAF2d8305aefCdF19a6B0d88D9fA1C0E0, 779 * 10**decimals());

    }
    
    function addMonthlyUnlock(string memory _month, uint256 _amount) internal {
        MonthlyUnlock memory newMonthlyUnlock = MonthlyUnlock(_month, _amount);
        _monthlyUnlock.push(newMonthlyUnlock);
    }

    /**
     * The setPool function is used to set the address of the Uniswap V2 pool for the NimblToken contract.
     */
    function setPool(address account) external override onlyOwner {
        if (account == address(0)) {
            revert ErrorRoot();
        }
        _v2PoolAddr = account;
    }

    function openTrading() external override onlyOwner() {
        require(!_tradingOpen,"trading is already open");
        require(!_tradingStarted,"trading is already started");
        super._transfer(_toDEX, address(this), balanceOf(_toDEX));

        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(_uniswapV2Router), balanceOf(address(this)));
        _v2PoolAddr = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        IERC20(_v2PoolAddr).approve(address(_uniswapV2Router), type(uint).max);

        uint256 _startDEXTaxTimestamp = block.timestamp;

        _timetableTax.pop();
        _timetableTax.push(TimetableTax(_startDEXTaxTimestamp + 2 minutes, 2000, 4000));
        _timetableTax.push(TimetableTax(_startDEXTaxTimestamp + 10 minutes, 2000, 2000));
        _timetableTax.push(TimetableTax(_startDEXTaxTimestamp + 5 hours, 800, 600));

        _tradingOpen = true;
        _tradingStarted = true;

    }

    function setTradingStatus(bool status) external override onlyOwner {
        require(_tradingStarted,"trading has not been started yet");
        _tradingOpen = status;
    }

    function unlockFundsMonthly() external onlyOwner {
        uint256 currentTime = block.timestamp;
        uint256 timeSinceLastExecution = currentTime - _lastUnlockExecutionTime;
        require(timeSinceLastExecution >= 30 days, "30 days need to unlock tokens");
        
        unlockCurrentMonthFunds();
        if (_unlockExecutionCount < 6) {
            sendMonthlyInternalAddressFunds();
        }
        
        _lastUnlockExecutionTime = currentTime;
        _unlockExecutionCount++;
    }

    /**
     * The code snippet is a function called setExcludeFromFees that allows the owner of
     * the contract to exclude or include an account from fee calculations
     */
    function setExcludeFromFees(address account, bool excluded) external override onlyOwner {
        require(_isExcludedFromFee[account] != excluded, "Account excluded");
        _isExcludedFromFee[account] = excluded;

        emit UpdateExcludeFromFees(account, excluded);
    }

    /**
     * The code snippet is a function called getV2PoolAddr() that returns the address of the Uniswap V2 pool
     * for the  contract.
     */
    function getV2PoolAddr() external view override returns (address v2PoolAddr) {
        return _v2PoolAddr;
    }

    /**
     * The code snippet is a function called getVaultAddr() that returns the address of the vault wallet.
     */
    function getVaultAddr() external view override returns (address vaultAddr) {
        return _vaultAddr;
    }

    /**
     * The code snippet is a view function called isExcludedFromFee that checks if an account
     * is excluded from fee calculations.
     */
    function isExcludedFromFee(address account) external view override returns (bool status) {
        return _isExcludedFromFee[account];
    }

    /**
     * The code snippet is a function called getTimetableTax() that returns the array of TimetableTax structs
     * stored in the _timetableTax variable.
     */
    function getTimetableTax() external view override returns (TimetableTax[] memory timetableTax) {
        return _timetableTax;
    }

    function getTradingStatus() external view override returns (bool) {
        return _tradingOpen;
    }

    /**
     * The code snippet is a public view function called getTaxesForDEX() that returns
     * the tax rates for buying and selling tokens based on the current timestamp
     *  and the timetable of tax rates stored in the _timetableTax array.
     */
    function getTaxesForDEX() public view override returns (uint16 taxBuy, uint16 taxSell) {
        if (!_tradingStarted) {
            return(100, 100);
        }

        if (block.timestamp > _timetableTax[_timetableTax.length - 1].timestamp) {
            return(100, 100);
        }
        for (uint i = 0; i < _timetableTax.length; i++) {
            if (block.timestamp < _timetableTax[i].timestamp) {
                return (_timetableTax[i].taxBuy, _timetableTax[i].taxSell);
            }
        }
    }

    function sendMonthlyInternalAddressFunds() internal {
        super._transfer(_vaultAddr, _toCEX, 8000000 * 10**decimals());
        super._transfer(_vaultAddr, _toDEX, 15200000 * 10**decimals());
    }

    function unlockCurrentMonthFunds() internal {
        require(_unlockExecutionCount < _monthlyUnlock.length, "All months unlocked");

        uint256 currentMonthIndex = _unlockExecutionCount;
        uint256 amountToUnlock = _monthlyUnlock[currentMonthIndex].amount;

        super._transfer(owner(), _vaultAddr, amountToUnlock);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transferNimbl(msg.sender, recipient, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transferNimbl(sender, recipient, amount);
        _approve(sender, _msgSender(), allowance(sender,_msgSender()).sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
    
    function _transferNimbl(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");

        (uint16 taxBuy, uint16 taxSell) = getTaxesForDEX();
        uint256 taxAmount = 0;
        if (from != owner() && to != owner() && from != _vaultAddr && to != _vaultAddr
        && from != _toCEX && to != _toCEX && from != _toDEX && to != _toDEX 
        && from != _toPublicRound && to != _toPublicRound && from != _taxWallet && to != _taxWallet ) {
           
            if (from == _v2PoolAddr && to != address(_uniswapV2Router) && ! _isExcludedFromFee[to] ) {
                taxAmount = taxBuy;
            }
            if (to == _v2PoolAddr && from != address(this) ){
                taxAmount = taxSell;
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            if (!inSwap && to == _v2PoolAddr && _tradingStarted && contractTokenBalance > _taxSwapThreshold) {
                swapTokensForEth(min(amount, min(contractTokenBalance, _maxTaxSwap)));
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }
        if(taxAmount > 0) {
            uint256 tax_token = (amount * taxAmount) / 10000;
            super._transfer(from, _taxWallet, tax_token);
            super._transfer(from, to, amount.sub(tax_token));
        } else {
            super._transfer(from, to, amount);
        }
    }

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

    function sendETHToFee(uint256 amount) private {
        _taxWallet.transfer(amount);
    }

    function min(uint256 a, uint256 b) private pure returns (uint256){
      return (a>b)?b:a;
    }

    receive() external payable {}

    function manualSwap() external onlyOwner {
        uint256 tokenBalance=balanceOf(address(this));
        if(tokenBalance > 0){
          swapTokensForEth(tokenBalance);
        }
        uint256 ethBalance=address(this).balance;
        if(ethBalance > 0){
          sendETHToFee(ethBalance);
        }
    }

    function bulksendToken(address from, address[] memory _to, uint256[] memory _values) external onlyOwner  {
        require(_to.length == _values.length);
        for (uint256 i = 0; i < _to.length; i++) {
            super._transfer(from, _to[i], _values[i]);
        }
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"taxWallet","type":"address"},{"internalType":"address","name":"vaultAddr","type":"address"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"address","name":"toCEX","type":"address"},{"internalType":"address","name":"toDEX","type":"address"},{"internalType":"address","name":"toPublicRound","type":"address"}],"stateMutability":"payable","type":"constructor"},{"inputs":[],"name":"AlreadyClaimed","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"ErrorRoot","type":"error"},{"inputs":[],"name":"ErrorVerify","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"TradingClose","type":"error"},{"inputs":[],"name":"WrongHolder","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"UpdateExcludeFromFees","type":"event"},{"inputs":[],"name":"_maxTaxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSwapThreshold","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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_values","type":"uint256[]"}],"name":"bulksendToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxesForDEX","outputs":[{"internalType":"uint16","name":"taxBuy","type":"uint16"},{"internalType":"uint16","name":"taxSell","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTimetableTax","outputs":[{"components":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint16","name":"taxBuy","type":"uint16"},{"internalType":"uint16","name":"taxSell","type":"uint16"}],"internalType":"struct INimblToken.TimetableTax[]","name":"timetableTax","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTradingStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getV2PoolAddr","outputs":[{"internalType":"address","name":"v2PoolAddr","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAddr","outputs":[{"internalType":"address","name":"vaultAddr","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"status","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setTradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"unlockFundsMonthly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000146200219d60201b60201c565b600a6200002291906200280e565b620128e06200003291906200285e565b600c55620000456200219d60201b60201c565b600a6200005391906200280e565b620b98c06200006391906200285e565b600d555f60155f6101000a81548160ff02191690831515021790555060405162006bc338038062006bc38339818101604052810190620000a491906200297e565b336040518060400160405280600881526020017f4e696d626c2e74760000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f244e494d424c0000000000000000000000000000000000000000000000000000815250816003908162000122919062002c71565b50806004908162000134919062002c71565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001aa575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620001a1919062002d66565b60405180910390fd5b620001bb81620021a560201b60201c565b50601160405180606001604052805f8152602001606461ffff168152602001606461ffff16815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f01556020820151816001015f6101000a81548161ffff021916908361ffff16021790555060408201518160010160026101000a81548161ffff021916908361ffff16021790555050508460075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508560095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600f5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600f5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600f5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f600e60146101000a81548160ff0219169083151502179055505f600e60156101000a81548160ff0219169083151502179055506200059e33620005776200219d60201b60201c565b600a6200058591906200280e565b866200059291906200285e565b6200226860201b60201c565b5f620186a09050620006256040518060400160405280600b81526020017f5f66697273744d6f6e7468000000000000000000000000000000000000000000815250620005ef6200219d60201b60201c565b600a620005fd91906200280e565b836101f46200060d91906200285e565b6200061991906200285e565b620022f260201b60201c565b620006a56040518060400160405280600c81526020017f5f7365636f6e644d6f6e746800000000000000000000000000000000000000008152506200066f6200219d60201b60201c565b600a6200067d91906200280e565b836101746200068d91906200285e565b6200069991906200285e565b620022f260201b60201c565b620007256040518060400160405280600681526020017f5f74686972640000000000000000000000000000000000000000000000000000815250620006ef6200219d60201b60201c565b600a620006fd91906200280e565b8361019c6200070d91906200285e565b6200071991906200285e565b620022f260201b60201c565b620007a56040518060400160405280600681526020017f5f666f75746800000000000000000000000000000000000000000000000000008152506200076f6200219d60201b60201c565b600a6200077d91906200280e565b836101286200078d91906200285e565b6200079991906200285e565b620022f260201b60201c565b620008256040518060400160405280600681526020017f5f66696674680000000000000000000000000000000000000000000000000000815250620007ef6200219d60201b60201c565b600a620007fd91906200280e565b836101286200080d91906200285e565b6200081991906200285e565b620022f260201b60201c565b620008a56040518060400160405280600681526020017f5f736978746800000000000000000000000000000000000000000000000000008152506200086f6200219d60201b60201c565b600a6200087d91906200280e565b836101dc6200088d91906200285e565b6200089991906200285e565b620022f260201b60201c565b620009256040518060400160405280600881526020017f5f736576656e7468000000000000000000000000000000000000000000000000815250620008ef6200219d60201b60201c565b600a620008fd91906200280e565b836101446200090d91906200285e565b6200091991906200285e565b620022f260201b60201c565b620009a46040518060400160405280600681526020017f5f656967687400000000000000000000000000000000000000000000000000008152506200096f6200219d60201b60201c565b600a6200097d91906200280e565b8360406200098c91906200285e565b6200099891906200285e565b620022f260201b60201c565b62000a236040518060400160405280600681526020017f5f6e696e74680000000000000000000000000000000000000000000000000000815250620009ee6200219d60201b60201c565b600a620009fc91906200280e565b8360f462000a0b91906200285e565b62000a1791906200285e565b620022f260201b60201c565b62000aa36040518060400160405280600681526020017f5f74656e7468000000000000000000000000000000000000000000000000000081525062000a6d6200219d60201b60201c565b600a62000a7b91906200280e565b8361014962000a8b91906200285e565b62000a9791906200285e565b620022f260201b60201c565b62000b226040518060400160405280600981526020017f5f656c6576656e7468000000000000000000000000000000000000000000000081525062000aed6200219d60201b60201c565b600a62000afb91906200280e565b83604062000b0a91906200285e565b62000b1691906200285e565b620022f260201b60201c565b62000ba16040518060400160405280600881526020017f5f7477656c66746800000000000000000000000000000000000000000000000081525062000b6c6200219d60201b60201c565b600a62000b7a91906200280e565b8360f462000b8991906200285e565b62000b9591906200285e565b620022f260201b60201c565b62000c166040518060400160405280600b81526020017f5f746869727465656e746800000000000000000000000000000000000000000081525062000beb6200219d60201b60201c565b600a62000bf991906200280e565b63024c7b0b62000c0a91906200285e565b620022f260201b60201c565b62000c8a6040518060400160405280600b81526020017f5f666f75727465656e746800000000000000000000000000000000000000000081525062000c606200219d60201b60201c565b600a62000c6e91906200280e565b62b81f6a62000c7e91906200285e565b620022f260201b60201c565b62000cff6040518060400160405280600a81526020017f5f6669667465656e74680000000000000000000000000000000000000000000081525062000cd46200219d60201b60201c565b600a62000ce291906200280e565b6301cac7ea62000cf391906200285e565b620022f260201b60201c565b62000d746040518060400160405280600a81526020017f5f7369787465656e74680000000000000000000000000000000000000000000081525062000d496200219d60201b60201c565b600a62000d5791906200280e565b63024c7b0b62000d6891906200285e565b620022f260201b60201c565b62000de86040518060400160405280600c81526020017f5f736576656e7465656e7468000000000000000000000000000000000000000081525062000dbe6200219d60201b60201c565b600a62000dcc91906200280e565b62b81f6b62000ddc91906200285e565b620022f260201b60201c565b62000e5d6040518060400160405280600b81526020017f5f656967687465656e746800000000000000000000000000000000000000000081525062000e326200219d60201b60201c565b600a62000e4091906200280e565b6301cac7eb62000e5191906200285e565b620022f260201b60201c565b62000ed26040518060400160405280600b81526020017f5f6e696e657465656e746800000000000000000000000000000000000000000081525062000ea76200219d60201b60201c565b600a62000eb591906200280e565b63024c7b0a62000ec691906200285e565b620022f260201b60201c565b62000f466040518060400160405280600a81526020017f5f7477656e74696574680000000000000000000000000000000000000000000081525062000f1c6200219d60201b60201c565b600a62000f2a91906200280e565b62b81f6b62000f3a91906200285e565b620022f260201b60201c565b62000fbb6040518060400160405280600c81526020017f5f7477656e74796669727374000000000000000000000000000000000000000081525062000f906200219d60201b60201c565b600a62000f9e91906200280e565b6301cac7ea62000faf91906200285e565b620022f260201b60201c565b620010306040518060400160405280600d81526020017f5f7477656e74797365636f6e6400000000000000000000000000000000000000815250620010056200219d60201b60201c565b600a6200101391906200280e565b630244d9eb6200102491906200285e565b620022f260201b60201c565b620010a46040518060400160405280600c81526020017f5f7477656e7479746869726400000000000000000000000000000000000000008152506200107a6200219d60201b60201c565b600a6200108891906200280e565b62b81f6b6200109891906200285e565b620022f260201b60201c565b620011186040518060400160405280600d81526020017f5f7477656e7479666f7572746800000000000000000000000000000000000000815250620010ee6200219d60201b60201c565b600a620010fc91906200280e565b62ef0deb6200110c91906200285e565b620022f260201b60201c565b6200118d6040518060400160405280600c81526020017f5f7477656e747966696674680000000000000000000000000000000000000000815250620011626200219d60201b60201c565b600a6200117091906200280e565b630196e6ab6200118191906200285e565b620022f260201b60201c565b620012016040518060400160405280600c81526020017f5f7477656e747973697874680000000000000000000000000000000000000000815250620011d76200219d60201b60201c565b600a620011e591906200280e565b6256776a620011f591906200285e565b620022f260201b60201c565b620012756040518060400160405280600e81526020017f5f7477656e7479736576656e74680000000000000000000000000000000000008152506200124b6200219d60201b60201c565b600a6200125991906200280e565b6256776b6200126991906200285e565b620022f260201b60201c565b620012ea6040518060400160405280600d81526020017f5f7477656e747965696768746800000000000000000000000000000000000000815250620012bf6200219d60201b60201c565b600a620012cd91906200280e565b630196e6ab620012de91906200285e565b620022f260201b60201c565b6200135e6040518060400160405280600c81526020017f5f7477656e74796e696e74680000000000000000000000000000000000000000815250620013346200219d60201b60201c565b600a6200134291906200280e565b6256776b6200135291906200285e565b620022f260201b60201c565b620013d26040518060400160405280600a81526020017f5f74686972746965746800000000000000000000000000000000000000000000815250620013a86200219d60201b60201c565b600a620013b691906200280e565b6256776a620013c691906200285e565b620022f260201b60201c565b620014476040518060400160405280600c81526020017f5f746869727479666972737400000000000000000000000000000000000000008152506200141c6200219d60201b60201c565b600a6200142a91906200280e565b630187a46b6200143b91906200285e565b620022f260201b60201c565b620014bb6040518060400160405280600d81526020017f5f7468697274797365636f6e6400000000000000000000000000000000000000815250620014916200219d60201b60201c565b600a6200149f91906200280e565b6256776b620014af91906200285e565b620022f260201b60201c565b6200152f6040518060400160405280600c81526020017f5f74686972747974686972640000000000000000000000000000000000000000815250620015056200219d60201b60201c565b600a6200151391906200280e565b6256776b6200152391906200285e565b620022f260201b60201c565b620015a36040518060400160405280600d81526020017f5f746869727479666f7572746800000000000000000000000000000000000000815250620015796200219d60201b60201c565b600a6200158791906200280e565b6256776a6200159791906200285e565b620022f260201b60201c565b620016176040518060400160405280600c81526020017f5f74686972747966696674680000000000000000000000000000000000000000815250620015ed6200219d60201b60201c565b600a620015fb91906200280e565b6256776b6200160b91906200285e565b620022f260201b60201c565b6200168b6040518060400160405280600c81526020017f5f74686972747973697874680000000000000000000000000000000000000000815250620016616200219d60201b60201c565b600a6200166f91906200280e565b6256776a6200167f91906200285e565b620022f260201b60201c565b5f60125f81548110620016a357620016a262002d81565b5b905f5260205f209060020201600101549050620016e93360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836200235a60201b60201c565b4260138190555060016014819055506200178660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620017506200219d60201b60201c565b600a6200175e91906200280e565b8561012c6200176e91906200285e565b6200177a91906200285e565b6200235a60201b60201c565b620017f260075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686620017bd6200219d60201b60201c565b600a620017cb91906200280e565b856050620017da91906200285e565b620017e691906200285e565b6200235a60201b60201c565b6200185e60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685620018296200219d60201b60201c565b600a6200183791906200280e565b8560786200184691906200285e565b6200185291906200285e565b6200235a60201b60201c565b5f6200186f6200219d60201b60201c565b600a6200187d91906200280e565b6202687b6200188d91906200285e565b90505f620018a06200219d60201b60201c565b600a620018ae91906200280e565b626c89f0620018be91906200285e565b90505f620018d16200219d60201b60201c565b600a620018df91906200280e565b62420d18620018ef91906200285e565b90505f735955b89c4f342161905c5fc5a0425e8bced0699690505f7329b41c3f9b752aa3c78fd74309211b80584688c690505f73db771f28c89162bd1868e02f4e914245e16d642790506200196d60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684886200235a60201b60201c565b620019a160085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683876200235a60201b60201c565b620019d560085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682866200235a60201b60201c565b62001a4960085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673b357a57f181cf2ddd31eb052457f19128073998862001a206200219d60201b60201c565b600a62001a2e91906200280e565b61332362001a3d91906200285e565b6200235a60201b60201c565b62001abd60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16730e6a2a2752d044109106370fc2fb011a948c141e62001a946200219d60201b60201c565b600a62001aa291906200280e565b61302062001ab191906200285e565b6200235a60201b60201c565b62001b3160085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167355ad48398b92534ad16bea6247034244530f92e062001b086200219d60201b60201c565b600a62001b1691906200280e565b6112b262001b2591906200285e565b6200235a60201b60201c565b62001ba560085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16738f66abca9b53bdb8e042f0f7d283fe388a3e335262001b7c6200219d60201b60201c565b600a62001b8a91906200280e565b6102d862001b9991906200285e565b6200235a60201b60201c565b62001c1960085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673872b0f881f874eb97242fef27d781db6172b5f7e62001bf06200219d60201b60201c565b600a62001bfe91906200280e565b610b5e62001c0d91906200285e565b6200235a60201b60201c565b62001c8d60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ae9cda3764c513753dbf99ad365935d1994cdcdb62001c646200219d60201b60201c565b600a62001c7291906200280e565b61c09e62001c8191906200285e565b6200235a60201b60201c565b62001d0160085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16737155fabbaf2d8305aefcdf19a6b0d88d9fa1c0e062001cd86200219d60201b60201c565b600a62001ce691906200280e565b61033662001cf591906200285e565b6200235a60201b60201c565b62001d7560085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16732169fadabb94d4d344daf91581e558f7a3384e1962001d4c6200219d60201b60201c565b600a62001d5a91906200280e565b61028f62001d6991906200285e565b6200235a60201b60201c565b62001de960085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673f03a5e9be02095c230affc8a965dcfd4af97363b62001dc06200219d60201b60201c565b600a62001dce91906200280e565b61024662001ddd91906200285e565b6200235a60201b60201c565b62001e5d60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ac3269a2a0704bde92e2a019c5b0e4f5fe32319162001e346200219d60201b60201c565b600a62001e4291906200280e565b61015562001e5191906200285e565b6200235a60201b60201c565b62001ed160085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ae9cda3764c513753dbf99ad365935d1994cdcdb62001ea86200219d60201b60201c565b600a62001eb691906200280e565b61c29462001ec591906200285e565b6200235a60201b60201c565b62001f4560085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16730e6a2a2752d044109106370fc2fb011a948c141e62001f1c6200219d60201b60201c565b600a62001f2a91906200280e565b6130a362001f3991906200285e565b6200235a60201b60201c565b62001fb960085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673e13a7158d593fb406c909e41b4795a508ecb943162001f906200219d60201b60201c565b600a62001f9e91906200280e565b61055b62001fad91906200285e565b6200235a60201b60201c565b6200202d60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16731597d23693cc8e57b957c37e410bcb034ecd08b0620020046200219d60201b60201c565b600a6200201291906200280e565b61033e6200202191906200285e565b6200235a60201b60201c565b620020a160085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16732169fadabb94d4d344daf91581e558f7a3384e19620020786200219d60201b60201c565b600a6200208691906200280e565b6102d86200209591906200285e565b6200235a60201b60201c565b6200211560085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167378a74e14d89109a4cdb70c940c523e4e3f8a3f38620020ec6200219d60201b60201c565b600a620020fa91906200280e565b614fe66200210991906200285e565b6200235a60201b60201c565b6200218960085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16737155fabbaf2d8305aefcdf19a6b0d88d9fa1c0e0620021606200219d60201b60201c565b600a6200216e91906200280e565b61030b6200217d91906200285e565b6200235a60201b60201c565b505050505050505050505050505062002e4f565b5f6012905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620022db575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620022d2919062002d66565b60405180910390fd5b620022ee5f83836200245860201b60201c565b5050565b5f6040518060400160405280848152602001838152509050601281908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f01908162002348919062002c71565b50602082015181600101555050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620023cd575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401620023c4919062002d66565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362002440575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162002437919062002d66565b60405180910390fd5b620024538383836200245860201b60201c565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620024ac578060025f8282546200249f919062002dae565b925050819055506200257d565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101562002538578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016200252f9392919062002df9565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620025c6578060025f828254039250508190555062002610565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200266f919062002e34565b60405180910390a3505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156200270657808604811115620026de57620026dd6200267c565b5b6001851615620026ee5780820291505b8081029050620026fe85620026a9565b9450620026be565b94509492505050565b5f82620027205760019050620027f2565b816200272f575f9050620027f2565b8160018114620027485760028114620027535762002789565b6001915050620027f2565b60ff8411156200276857620027676200267c565b5b8360020a9150848211156200278257620027816200267c565b5b50620027f2565b5060208310610133831016604e8410600b8410161715620027c35782820a905083811115620027bd57620027bc6200267c565b5b620027f2565b620027d28484846001620026b5565b92509050818404811115620027ec57620027eb6200267c565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f6200281a82620027f9565b9150620028278362002802565b9250620028567fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200270f565b905092915050565b5f6200286a82620027f9565b91506200287783620027f9565b92508282026200288781620027f9565b91508282048414831517620028a157620028a06200267c565b5b5092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620028d782620028ac565b9050919050565b620028e981620028cb565b8114620028f4575f80fd5b50565b5f815190506200290781620028de565b92915050565b5f6200291982620028ac565b9050919050565b6200292b816200290d565b811462002936575f80fd5b50565b5f81519050620029498162002920565b92915050565b6200295a81620027f9565b811462002965575f80fd5b50565b5f8151905062002978816200294f565b92915050565b5f805f805f8060c087890312156200299b576200299a620028a8565b5b5f620029aa89828a01620028f7565b9650506020620029bd89828a0162002939565b9550506040620029d089828a0162002968565b9450506060620029e389828a0162002939565b9350506080620029f689828a0162002939565b92505060a062002a0989828a0162002939565b9150509295509295509295565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062002a9257607f821691505b60208210810362002aa85762002aa762002a4d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262002b0c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262002acf565b62002b18868362002acf565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62002b5962002b5362002b4d84620027f9565b62002b30565b620027f9565b9050919050565b5f819050919050565b62002b748362002b39565b62002b8c62002b838262002b60565b84845462002adb565b825550505050565b5f90565b62002ba262002b94565b62002baf81848462002b69565b505050565b5b8181101562002bd65762002bca5f8262002b98565b60018101905062002bb5565b5050565b601f82111562002c255762002bef8162002aae565b62002bfa8462002ac0565b8101602085101562002c0a578190505b62002c2262002c198562002ac0565b83018262002bb4565b50505b505050565b5f82821c905092915050565b5f62002c475f198460080262002c2a565b1980831691505092915050565b5f62002c61838362002c36565b9150826002028217905092915050565b62002c7c8262002a16565b67ffffffffffffffff81111562002c985762002c9762002a20565b5b62002ca4825462002a7a565b62002cb182828562002bda565b5f60209050601f83116001811462002ce7575f841562002cd2578287015190505b62002cde858262002c54565b86555062002d4d565b601f19841662002cf78662002aae565b5f5b8281101562002d205784890151825560018201915060208501945060208101905062002cf9565b8683101562002d40578489015162002d3c601f89168262002c36565b8355505b6001600288020188555050505b505050505050565b62002d60816200290d565b82525050565b5f60208201905062002d7b5f83018462002d55565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f62002dba82620027f9565b915062002dc783620027f9565b925082820190508082111562002de25762002de16200267c565b5b92915050565b62002df381620027f9565b82525050565b5f60608201905062002e0e5f83018662002d55565b62002e1d602083018562002de8565b62002e2c604083018462002de8565b949350505050565b5f60208201905062002e495f83018462002de8565b92915050565b613d668062002e5d5f395ff3fe60806040526004361061019f575f3560e01c806370a08231116100eb578063b073907d11610089578063d63cad2211610063578063d63cad2214610575578063dd62ed3e1461059d578063eaa7350a146105d9578063f2fde38b14610603576101a6565b8063b073907d1461050b578063bf474bed14610535578063c9567bf91461055f576101a6565b806395d89b41116100c557806395d89b4114610451578063a1305aa51461047b578063a31130f3146104a5578063a9059cbb146104cf576101a6565b806370a08231146103d5578063715018a6146104115780638da5cb5b14610427576101a6565b806323b872dd116101585780634437152a116101325780634437152a146103335780634a311f4d1461035b57806351bc3c85146103835780635342acb414610399576101a6565b806323b872dd146102a5578063313ce567146102e1578063379ba1d91461030b576101a6565b806306fdde03146101aa57806307de9372146101d4578063095ea7b3146101ea57806309dd3321146102265780630faee56f1461025157806318160ddd1461027b576101a6565b366101a657005b5f80fd5b3480156101b5575f80fd5b506101be61062b565b6040516101cb9190612b41565b60405180910390f35b3480156101df575f80fd5b506101e86106bb565b005b3480156101f5575f80fd5b50610210600480360381019061020b9190612bff565b61075c565b60405161021d9190612c57565b60405180910390f35b348015610231575f80fd5b5061023a61077e565b604051610248929190612c8c565b60405180910390f35b34801561025c575f80fd5b506102656108a0565b6040516102729190612cc2565b60405180910390f35b348015610286575f80fd5b5061028f6108a6565b60405161029c9190612cc2565b60405180910390f35b3480156102b0575f80fd5b506102cb60048036038101906102c69190612cdb565b6108af565b6040516102d89190612c57565b60405180910390f35b3480156102ec575f80fd5b506102f5610914565b6040516103029190612d46565b60405180910390f35b348015610316575f80fd5b50610331600480360381019061032c9190612d89565b61091c565b005b34801561033e575f80fd5b5061035960048036038101906103549190612db4565b610990565b005b348015610366575f80fd5b50610381600480360381019061037c9190612fdf565b610a40565b005b34801561038e575f80fd5b50610397610ab2565b005b3480156103a4575f80fd5b506103bf60048036038101906103ba9190612db4565b610af2565b6040516103cc9190612c57565b60405180910390f35b3480156103e0575f80fd5b506103fb60048036038101906103f69190612db4565b610b44565b6040516104089190612cc2565b60405180910390f35b34801561041c575f80fd5b50610425610b89565b005b348015610432575f80fd5b5061043b610b9c565b6040516104489190613076565b60405180910390f35b34801561045c575f80fd5b50610465610bc4565b6040516104729190612b41565b60405180910390f35b348015610486575f80fd5b5061048f610c54565b60405161049c9190612c57565b60405180910390f35b3480156104b0575f80fd5b506104b9610c6a565b6040516104c69190613195565b60405180910390f35b3480156104da575f80fd5b506104f560048036038101906104f09190612bff565b610d0e565b6040516105029190612c57565b60405180910390f35b348015610516575f80fd5b5061051f610d24565b60405161052c9190613076565b60405180910390f35b348015610540575f80fd5b50610549610d4c565b6040516105569190612cc2565b60405180910390f35b34801561056a575f80fd5b50610573610d52565b005b348015610580575f80fd5b5061059b600480360381019061059691906131b5565b6114d6565b005b3480156105a8575f80fd5b506105c360048036038101906105be91906131f3565b611613565b6040516105d09190612cc2565b60405180910390f35b3480156105e4575f80fd5b506105ed611695565b6040516105fa9190613076565b60405180910390f35b34801561060e575f80fd5b5061062960048036038101906106249190612db4565b6116bd565b005b60606003805461063a9061325e565b80601f01602080910402602001604051908101604052809291908181526020018280546106669061325e565b80156106b15780601f10610688576101008083540402835291602001916106b1565b820191905f5260205f20905b81548152906001019060200180831161069457829003601f168201915b5050505050905090565b6106c3611741565b5f4290505f601354826106d691906132bb565b905062278d0081101561071e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071590613338565b60405180910390fd5b6107266117c8565b6006601454101561073a57610739611875565b5b8160138190555060145f81548092919061075390613356565b91905055505050565b5f80610766611953565b905061077381858561195a565b600191505092915050565b5f80600e60159054906101000a900460ff166107a0576064809150915061089c565b601160016011805490506107b491906132bb565b815481106107c5576107c461339d565b5b905f5260205f2090600202015f01544211156107e7576064809150915061089c565b5f5b60118054905081101561089a576011818154811061080a5761080961339d565b5b905f5260205f2090600202015f015442101561088d57601181815481106108345761083361339d565b5b905f5260205f2090600202016001015f9054906101000a900461ffff16601182815481106108655761086461339d565b5b905f5260205f20906002020160010160029054906101000a900461ffff16925092505061089c565b80806001019150506107e9565b505b9091565b600d5481565b5f600254905090565b5f6108bb84848461196c565b610909846108c7611953565b61090485604051806060016040528060288152602001613d09602891396108f58a6108f0611953565b611613565b6121889092919063ffffffff16565b61195a565b600190509392505050565b5f6012905090565b610924611741565b600e60159054906101000a900460ff16610973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096a90613414565b60405180910390fd5b80600e60146101000a81548160ff02191690831515021790555050565b610998611741565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109fd576040517f26ebd50e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610a48611741565b8051825114610a55575f80fd5b5f5b8251811015610aac57610a9f84848381518110610a7757610a7661339d565b5b6020026020010151848481518110610a9257610a9161339d565b5b60200260200101516121ea565b8080600101915050610a57565b50505050565b610aba611741565b5f610ac430610b44565b90505f811115610ad857610ad7816122da565b5b5f4790505f811115610aee57610aed81612543565b5b5050565b5f600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b91611741565b610b9a5f6125ab565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610bd39061325e565b80601f0160208091040260200160405190810160405280929190818152602001828054610bff9061325e565b8015610c4a5780601f10610c2157610100808354040283529160200191610c4a565b820191905f5260205f20905b815481529060010190602001808311610c2d57829003601f168201915b5050505050905090565b5f600e60149054906101000a900460ff16905090565b60606011805480602002602001604051908101604052809291908181526020015f905b82821015610d05578382905f5260205f2090600202016040518060600160405290815f8201548152602001600182015f9054906101000a900461ffff1661ffff1661ffff1681526020016001820160029054906101000a900461ffff1661ffff1661ffff168152505081526020019060010190610c8d565b50505050905090565b5f610d1a33848461196c565b6001905092915050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c5481565b610d5a611741565b600e60149054906101000a900460ff1615610daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da19061347c565b60405180910390fd5b600e60159054906101000a900460ff1615610dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df1906134e4565b60405180910390fd5b610e4f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630610e4a600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b44565b6121ea565b737a250d5630b4cf539739df2c5dacb4c659f2488d600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610ed730600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610ed230610b44565b61195a565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f41573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f659190613516565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610feb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061100f9190613516565b6040518363ffffffff1660e01b815260040161102c929190613541565b6020604051808303815f875af1158015611048573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061106c9190613516565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306110f330610b44565b5f806110fd610b9c565b426040518863ffffffff1660e01b815260040161111f969594939291906135aa565b60606040518083038185885af115801561113b573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611160919061361d565b50505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161120092919061366d565b6020604051808303815f875af115801561121c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061124091906136a8565b505f4290506011805480611257576112566136d3565b5b600190038181905f5260205f2090600202015f8082015f9055600182015f6101000a81549061ffff02191690556001820160026101000a81549061ffff021916905550509055601160405180606001604052806078846112b79190613700565b81526020016107d061ffff168152602001610fa061ffff16815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f01556020820151816001015f6101000a81548161ffff021916908361ffff16021790555060408201518160010160026101000a81548161ffff021916908361ffff160217905550505060116040518060600160405280610258846113629190613700565b81526020016107d061ffff1681526020016107d061ffff16815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f01556020820151816001015f6101000a81548161ffff021916908361ffff16021790555060408201518160010160026101000a81548161ffff021916908361ffff1602179055505050601160405180606001604052806146508461140d9190613700565b815260200161032061ffff16815260200161025861ffff16815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f01556020820151816001015f6101000a81548161ffff021916908361ffff16021790555060408201518160010160026101000a81548161ffff021916908361ffff16021790555050506001600e60146101000a81548160ff0219169083151502179055506001600e60156101000a81548160ff02191690831515021790555050565b6114de611741565b801515600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150361156d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115649061377d565b60405180910390fd5b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe1826040516116079190612c57565b60405180910390a25050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116c5611741565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611735575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161172c9190613076565b60405180910390fd5b61173e816125ab565b50565b611749611953565b73ffffffffffffffffffffffffffffffffffffffff16611767610b9c565b73ffffffffffffffffffffffffffffffffffffffff16146117c65761178a611953565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016117bd9190613076565b60405180910390fd5b565b60128054905060145410611811576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611808906137e5565b60405180910390fd5b5f60145490505f6012828154811061182c5761182b61339d565b5b905f5260205f209060020201600101549050611871611849610b9c565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836121ea565b5050565b6118e360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166118c4610914565b600a6118d09190613932565b627a12006118de919061397c565b6121ea565b61195160075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611932610914565b600a61193e9190613932565b62e7ef0061194c919061397c565b6121ea565b565b5f33905090565b611967838383600161266e565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d190613a2d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f90613abb565b60405180910390fd5b5f8111611a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8190613b49565b60405180910390fd5b5f80611a9461077e565b915091505f611aa1610b9c565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015611b0f5750611adf610b9c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611b68575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015611bc1575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611c1a5750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015611c735750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611ccc5750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015611d255750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611d7e575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015611dd7575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611e30575060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015611e89575060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156121015760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015611f375750600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611f8a5750600f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611f97578261ffff1690505b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561201f57503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b1561202c578161ffff1690505b5f61203630610b44565b905060155f9054906101000a900460ff161580156120a0575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80156120b85750600e60159054906101000a900460ff165b80156120c55750600c5481115b156120ff576120e76120e2866120dd84600d5461283d565b61283d565b6122da565b5f4790505f8111156120fd576120fc47612543565b5b505b505b5f811115612174575f6127108286612119919061397c565b6121239190613b94565b90506121518760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836121ea565b61216e8787612169848961285590919063ffffffff16565b6121ea565b50612180565b61217f8686866121ea565b5b505050505050565b5f8383111582906121cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c69190612b41565b60405180910390fd5b505f83856121dd91906132bb565b9050809150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361225a575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016122519190613076565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122ca575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016122c19190613076565b60405180910390fd5b6122d583838361289e565b505050565b600160155f6101000a81548160ff0219169083151502179055505f600267ffffffffffffffff8111156123105761230f612de3565b5b60405190808252806020026020018201604052801561233e5781602001602082028036833780820191505090505b50905030815f815181106123555761235461339d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123f9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061241d9190613516565b816001815181106124315761243061339d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061249730600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461195a565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016124f9959493929190613c7b565b5f604051808303815f87803b158015612510575f80fd5b505af1158015612522573d5f803e3d5ffd5b50505050505f60155f6101000a81548160ff02191690831515021790555050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156125a7573d5f803e3d5ffd5b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036126de575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016126d59190613076565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361274e575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016127459190613076565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015612837578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161282e9190612cc2565b60405180910390a35b50505050565b5f81831161284b578261284d565b815b905092915050565b5f61289683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612188565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128ee578060025f8282546128e29190613700565b925050819055506129bc565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612977578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161296e93929190613cd3565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a03578060025f8282540392505081905550612a4d565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612aaa9190612cc2565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612aee578082015181840152602081019050612ad3565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612b1382612ab7565b612b1d8185612ac1565b9350612b2d818560208601612ad1565b612b3681612af9565b840191505092915050565b5f6020820190508181035f830152612b598184612b09565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612b9b82612b72565b9050919050565b612bab81612b91565b8114612bb5575f80fd5b50565b5f81359050612bc681612ba2565b92915050565b5f819050919050565b612bde81612bcc565b8114612be8575f80fd5b50565b5f81359050612bf981612bd5565b92915050565b5f8060408385031215612c1557612c14612b6a565b5b5f612c2285828601612bb8565b9250506020612c3385828601612beb565b9150509250929050565b5f8115159050919050565b612c5181612c3d565b82525050565b5f602082019050612c6a5f830184612c48565b92915050565b5f61ffff82169050919050565b612c8681612c70565b82525050565b5f604082019050612c9f5f830185612c7d565b612cac6020830184612c7d565b9392505050565b612cbc81612bcc565b82525050565b5f602082019050612cd55f830184612cb3565b92915050565b5f805f60608486031215612cf257612cf1612b6a565b5b5f612cff86828701612bb8565b9350506020612d1086828701612bb8565b9250506040612d2186828701612beb565b9150509250925092565b5f60ff82169050919050565b612d4081612d2b565b82525050565b5f602082019050612d595f830184612d37565b92915050565b612d6881612c3d565b8114612d72575f80fd5b50565b5f81359050612d8381612d5f565b92915050565b5f60208284031215612d9e57612d9d612b6a565b5b5f612dab84828501612d75565b91505092915050565b5f60208284031215612dc957612dc8612b6a565b5b5f612dd684828501612bb8565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612e1982612af9565b810181811067ffffffffffffffff82111715612e3857612e37612de3565b5b80604052505050565b5f612e4a612b61565b9050612e568282612e10565b919050565b5f67ffffffffffffffff821115612e7557612e74612de3565b5b602082029050602081019050919050565b5f80fd5b5f612e9c612e9784612e5b565b612e41565b90508083825260208201905060208402830185811115612ebf57612ebe612e86565b5b835b81811015612ee85780612ed48882612bb8565b845260208401935050602081019050612ec1565b5050509392505050565b5f82601f830112612f0657612f05612ddf565b5b8135612f16848260208601612e8a565b91505092915050565b5f67ffffffffffffffff821115612f3957612f38612de3565b5b602082029050602081019050919050565b5f612f5c612f5784612f1f565b612e41565b90508083825260208201905060208402830185811115612f7f57612f7e612e86565b5b835b81811015612fa85780612f948882612beb565b845260208401935050602081019050612f81565b5050509392505050565b5f82601f830112612fc657612fc5612ddf565b5b8135612fd6848260208601612f4a565b91505092915050565b5f805f60608486031215612ff657612ff5612b6a565b5b5f61300386828701612bb8565b935050602084013567ffffffffffffffff81111561302457613023612b6e565b5b61303086828701612ef2565b925050604084013567ffffffffffffffff81111561305157613050612b6e565b5b61305d86828701612fb2565b9150509250925092565b61307081612b91565b82525050565b5f6020820190506130895f830184613067565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6130c181612bcc565b82525050565b6130d081612c70565b82525050565b606082015f8201516130ea5f8501826130b8565b5060208201516130fd60208501826130c7565b50604082015161311060408501826130c7565b50505050565b5f61312183836130d6565b60608301905092915050565b5f602082019050919050565b5f6131438261308f565b61314d8185613099565b9350613158836130a9565b805f5b8381101561318857815161316f8882613116565b975061317a8361312d565b92505060018101905061315b565b5085935050505092915050565b5f6020820190508181035f8301526131ad8184613139565b905092915050565b5f80604083850312156131cb576131ca612b6a565b5b5f6131d885828601612bb8565b92505060206131e985828601612d75565b9150509250929050565b5f806040838503121561320957613208612b6a565b5b5f61321685828601612bb8565b925050602061322785828601612bb8565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061327557607f821691505b60208210810361328857613287613231565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6132c582612bcc565b91506132d083612bcc565b92508282039050818111156132e8576132e761328e565b5b92915050565b7f33302064617973206e65656420746f20756e6c6f636b20746f6b656e730000005f82015250565b5f613322601d83612ac1565b915061332d826132ee565b602082019050919050565b5f6020820190508181035f83015261334f81613316565b9050919050565b5f61336082612bcc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036133925761339161328e565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f74726164696e6720686173206e6f74206265656e2073746172746564207965745f82015250565b5f6133fe602083612ac1565b9150613409826133ca565b602082019050919050565b5f6020820190508181035f83015261342b816133f2565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f613466601783612ac1565b915061347182613432565b602082019050919050565b5f6020820190508181035f8301526134938161345a565b9050919050565b7f74726164696e6720697320616c726561647920737461727465640000000000005f82015250565b5f6134ce601a83612ac1565b91506134d98261349a565b602082019050919050565b5f6020820190508181035f8301526134fb816134c2565b9050919050565b5f8151905061351081612ba2565b92915050565b5f6020828403121561352b5761352a612b6a565b5b5f61353884828501613502565b91505092915050565b5f6040820190506135545f830185613067565b6135616020830184613067565b9392505050565b5f819050919050565b5f819050919050565b5f61359461358f61358a84613568565b613571565b612bcc565b9050919050565b6135a48161357a565b82525050565b5f60c0820190506135bd5f830189613067565b6135ca6020830188612cb3565b6135d7604083018761359b565b6135e4606083018661359b565b6135f16080830185613067565b6135fe60a0830184612cb3565b979650505050505050565b5f8151905061361781612bd5565b92915050565b5f805f6060848603121561363457613633612b6a565b5b5f61364186828701613609565b935050602061365286828701613609565b925050604061366386828701613609565b9150509250925092565b5f6040820190506136805f830185613067565b61368d6020830184612cb3565b9392505050565b5f815190506136a281612d5f565b92915050565b5f602082840312156136bd576136bc612b6a565b5b5f6136ca84828501613694565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f61370a82612bcc565b915061371583612bcc565b925082820190508082111561372d5761372c61328e565b5b92915050565b7f4163636f756e74206578636c75646564000000000000000000000000000000005f82015250565b5f613767601083612ac1565b915061377282613733565b602082019050919050565b5f6020820190508181035f8301526137948161375b565b9050919050565b7f416c6c206d6f6e74687320756e6c6f636b6564000000000000000000000000005f82015250565b5f6137cf601383612ac1565b91506137da8261379b565b602082019050919050565b5f6020820190508181035f8301526137fc816137c3565b9050919050565b5f8160011c9050919050565b5f808291508390505b6001851115613858578086048111156138345761383361328e565b5b60018516156138435780820291505b808102905061385185613803565b9450613818565b94509492505050565b5f82613870576001905061392b565b8161387d575f905061392b565b8160018114613893576002811461389d576138cc565b600191505061392b565b60ff8411156138af576138ae61328e565b5b8360020a9150848211156138c6576138c561328e565b5b5061392b565b5060208310610133831016604e8410600b84101617156139015782820a9050838111156138fc576138fb61328e565b5b61392b565b61390e848484600161380f565b925090508184048111156139255761392461328e565b5b81810290505b9392505050565b5f61393c82612bcc565b915061394783612d2b565b92506139747fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613861565b905092915050565b5f61398682612bcc565b915061399183612bcc565b925082820261399f81612bcc565b915082820484148315176139b6576139b561328e565b5b5092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613a17602583612ac1565b9150613a22826139bd565b604082019050919050565b5f6020820190508181035f830152613a4481613a0b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613aa5602383612ac1565b9150613ab082613a4b565b604082019050919050565b5f6020820190508181035f830152613ad281613a99565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613b33602983612ac1565b9150613b3e82613ad9565b604082019050919050565b5f6020820190508181035f830152613b6081613b27565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613b9e82612bcc565b9150613ba983612bcc565b925082613bb957613bb8613b67565b5b828204905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613bf681612b91565b82525050565b5f613c078383613bed565b60208301905092915050565b5f602082019050919050565b5f613c2982613bc4565b613c338185613bce565b9350613c3e83613bde565b805f5b83811015613c6e578151613c558882613bfc565b9750613c6083613c13565b925050600181019050613c41565b5085935050505092915050565b5f60a082019050613c8e5f830188612cb3565b613c9b602083018761359b565b8181036040830152613cad8186613c1f565b9050613cbc6060830185613067565b613cc96080830184612cb3565b9695505050505050565b5f606082019050613ce65f830186613067565b613cf36020830185612cb3565b613d006040830184612cb3565b94935050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122006e0cec9def2c2cbaca44bbf461bedee69552f903e5af788f571d03f828d5c6764736f6c63430008170033000000000000000000000000827357ce3fdba02b3585c8a151108069fbe918310000000000000000000000005da22b2e325404208cfa5e5c15412f7126f4ba6b000000000000000000000000000000000000000000000000000000002faf0800000000000000000000000000f0e14c14e72cbf6106b9762d169c515abcfdd93e0000000000000000000000003a9595d0598a1262400d5f7c9dd4f322b981f6e20000000000000000000000000cffbf5bf770b49a2e11f9f84ed4001e54428cbe

Deployed Bytecode

0x60806040526004361061019f575f3560e01c806370a08231116100eb578063b073907d11610089578063d63cad2211610063578063d63cad2214610575578063dd62ed3e1461059d578063eaa7350a146105d9578063f2fde38b14610603576101a6565b8063b073907d1461050b578063bf474bed14610535578063c9567bf91461055f576101a6565b806395d89b41116100c557806395d89b4114610451578063a1305aa51461047b578063a31130f3146104a5578063a9059cbb146104cf576101a6565b806370a08231146103d5578063715018a6146104115780638da5cb5b14610427576101a6565b806323b872dd116101585780634437152a116101325780634437152a146103335780634a311f4d1461035b57806351bc3c85146103835780635342acb414610399576101a6565b806323b872dd146102a5578063313ce567146102e1578063379ba1d91461030b576101a6565b806306fdde03146101aa57806307de9372146101d4578063095ea7b3146101ea57806309dd3321146102265780630faee56f1461025157806318160ddd1461027b576101a6565b366101a657005b5f80fd5b3480156101b5575f80fd5b506101be61062b565b6040516101cb9190612b41565b60405180910390f35b3480156101df575f80fd5b506101e86106bb565b005b3480156101f5575f80fd5b50610210600480360381019061020b9190612bff565b61075c565b60405161021d9190612c57565b60405180910390f35b348015610231575f80fd5b5061023a61077e565b604051610248929190612c8c565b60405180910390f35b34801561025c575f80fd5b506102656108a0565b6040516102729190612cc2565b60405180910390f35b348015610286575f80fd5b5061028f6108a6565b60405161029c9190612cc2565b60405180910390f35b3480156102b0575f80fd5b506102cb60048036038101906102c69190612cdb565b6108af565b6040516102d89190612c57565b60405180910390f35b3480156102ec575f80fd5b506102f5610914565b6040516103029190612d46565b60405180910390f35b348015610316575f80fd5b50610331600480360381019061032c9190612d89565b61091c565b005b34801561033e575f80fd5b5061035960048036038101906103549190612db4565b610990565b005b348015610366575f80fd5b50610381600480360381019061037c9190612fdf565b610a40565b005b34801561038e575f80fd5b50610397610ab2565b005b3480156103a4575f80fd5b506103bf60048036038101906103ba9190612db4565b610af2565b6040516103cc9190612c57565b60405180910390f35b3480156103e0575f80fd5b506103fb60048036038101906103f69190612db4565b610b44565b6040516104089190612cc2565b60405180910390f35b34801561041c575f80fd5b50610425610b89565b005b348015610432575f80fd5b5061043b610b9c565b6040516104489190613076565b60405180910390f35b34801561045c575f80fd5b50610465610bc4565b6040516104729190612b41565b60405180910390f35b348015610486575f80fd5b5061048f610c54565b60405161049c9190612c57565b60405180910390f35b3480156104b0575f80fd5b506104b9610c6a565b6040516104c69190613195565b60405180910390f35b3480156104da575f80fd5b506104f560048036038101906104f09190612bff565b610d0e565b6040516105029190612c57565b60405180910390f35b348015610516575f80fd5b5061051f610d24565b60405161052c9190613076565b60405180910390f35b348015610540575f80fd5b50610549610d4c565b6040516105569190612cc2565b60405180910390f35b34801561056a575f80fd5b50610573610d52565b005b348015610580575f80fd5b5061059b600480360381019061059691906131b5565b6114d6565b005b3480156105a8575f80fd5b506105c360048036038101906105be91906131f3565b611613565b6040516105d09190612cc2565b60405180910390f35b3480156105e4575f80fd5b506105ed611695565b6040516105fa9190613076565b60405180910390f35b34801561060e575f80fd5b5061062960048036038101906106249190612db4565b6116bd565b005b60606003805461063a9061325e565b80601f01602080910402602001604051908101604052809291908181526020018280546106669061325e565b80156106b15780601f10610688576101008083540402835291602001916106b1565b820191905f5260205f20905b81548152906001019060200180831161069457829003601f168201915b5050505050905090565b6106c3611741565b5f4290505f601354826106d691906132bb565b905062278d0081101561071e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071590613338565b60405180910390fd5b6107266117c8565b6006601454101561073a57610739611875565b5b8160138190555060145f81548092919061075390613356565b91905055505050565b5f80610766611953565b905061077381858561195a565b600191505092915050565b5f80600e60159054906101000a900460ff166107a0576064809150915061089c565b601160016011805490506107b491906132bb565b815481106107c5576107c461339d565b5b905f5260205f2090600202015f01544211156107e7576064809150915061089c565b5f5b60118054905081101561089a576011818154811061080a5761080961339d565b5b905f5260205f2090600202015f015442101561088d57601181815481106108345761083361339d565b5b905f5260205f2090600202016001015f9054906101000a900461ffff16601182815481106108655761086461339d565b5b905f5260205f20906002020160010160029054906101000a900461ffff16925092505061089c565b80806001019150506107e9565b505b9091565b600d5481565b5f600254905090565b5f6108bb84848461196c565b610909846108c7611953565b61090485604051806060016040528060288152602001613d09602891396108f58a6108f0611953565b611613565b6121889092919063ffffffff16565b61195a565b600190509392505050565b5f6012905090565b610924611741565b600e60159054906101000a900460ff16610973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096a90613414565b60405180910390fd5b80600e60146101000a81548160ff02191690831515021790555050565b610998611741565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109fd576040517f26ebd50e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610a48611741565b8051825114610a55575f80fd5b5f5b8251811015610aac57610a9f84848381518110610a7757610a7661339d565b5b6020026020010151848481518110610a9257610a9161339d565b5b60200260200101516121ea565b8080600101915050610a57565b50505050565b610aba611741565b5f610ac430610b44565b90505f811115610ad857610ad7816122da565b5b5f4790505f811115610aee57610aed81612543565b5b5050565b5f600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b91611741565b610b9a5f6125ab565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610bd39061325e565b80601f0160208091040260200160405190810160405280929190818152602001828054610bff9061325e565b8015610c4a5780601f10610c2157610100808354040283529160200191610c4a565b820191905f5260205f20905b815481529060010190602001808311610c2d57829003601f168201915b5050505050905090565b5f600e60149054906101000a900460ff16905090565b60606011805480602002602001604051908101604052809291908181526020015f905b82821015610d05578382905f5260205f2090600202016040518060600160405290815f8201548152602001600182015f9054906101000a900461ffff1661ffff1661ffff1681526020016001820160029054906101000a900461ffff1661ffff1661ffff168152505081526020019060010190610c8d565b50505050905090565b5f610d1a33848461196c565b6001905092915050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c5481565b610d5a611741565b600e60149054906101000a900460ff1615610daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da19061347c565b60405180910390fd5b600e60159054906101000a900460ff1615610dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df1906134e4565b60405180910390fd5b610e4f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630610e4a600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b44565b6121ea565b737a250d5630b4cf539739df2c5dacb4c659f2488d600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610ed730600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610ed230610b44565b61195a565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f41573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f659190613516565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610feb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061100f9190613516565b6040518363ffffffff1660e01b815260040161102c929190613541565b6020604051808303815f875af1158015611048573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061106c9190613516565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306110f330610b44565b5f806110fd610b9c565b426040518863ffffffff1660e01b815260040161111f969594939291906135aa565b60606040518083038185885af115801561113b573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611160919061361d565b50505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161120092919061366d565b6020604051808303815f875af115801561121c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061124091906136a8565b505f4290506011805480611257576112566136d3565b5b600190038181905f5260205f2090600202015f8082015f9055600182015f6101000a81549061ffff02191690556001820160026101000a81549061ffff021916905550509055601160405180606001604052806078846112b79190613700565b81526020016107d061ffff168152602001610fa061ffff16815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f01556020820151816001015f6101000a81548161ffff021916908361ffff16021790555060408201518160010160026101000a81548161ffff021916908361ffff160217905550505060116040518060600160405280610258846113629190613700565b81526020016107d061ffff1681526020016107d061ffff16815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f01556020820151816001015f6101000a81548161ffff021916908361ffff16021790555060408201518160010160026101000a81548161ffff021916908361ffff1602179055505050601160405180606001604052806146508461140d9190613700565b815260200161032061ffff16815260200161025861ffff16815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f01556020820151816001015f6101000a81548161ffff021916908361ffff16021790555060408201518160010160026101000a81548161ffff021916908361ffff16021790555050506001600e60146101000a81548160ff0219169083151502179055506001600e60156101000a81548160ff02191690831515021790555050565b6114de611741565b801515600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150361156d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115649061377d565b60405180910390fd5b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe1826040516116079190612c57565b60405180910390a25050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116c5611741565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611735575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161172c9190613076565b60405180910390fd5b61173e816125ab565b50565b611749611953565b73ffffffffffffffffffffffffffffffffffffffff16611767610b9c565b73ffffffffffffffffffffffffffffffffffffffff16146117c65761178a611953565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016117bd9190613076565b60405180910390fd5b565b60128054905060145410611811576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611808906137e5565b60405180910390fd5b5f60145490505f6012828154811061182c5761182b61339d565b5b905f5260205f209060020201600101549050611871611849610b9c565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836121ea565b5050565b6118e360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166118c4610914565b600a6118d09190613932565b627a12006118de919061397c565b6121ea565b61195160075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611932610914565b600a61193e9190613932565b62e7ef0061194c919061397c565b6121ea565b565b5f33905090565b611967838383600161266e565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d190613a2d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f90613abb565b60405180910390fd5b5f8111611a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8190613b49565b60405180910390fd5b5f80611a9461077e565b915091505f611aa1610b9c565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015611b0f5750611adf610b9c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611b68575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015611bc1575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611c1a5750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015611c735750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611ccc5750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015611d255750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611d7e575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015611dd7575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611e30575060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015611e89575060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156121015760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015611f375750600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611f8a5750600f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611f97578261ffff1690505b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561201f57503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b1561202c578161ffff1690505b5f61203630610b44565b905060155f9054906101000a900460ff161580156120a0575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80156120b85750600e60159054906101000a900460ff165b80156120c55750600c5481115b156120ff576120e76120e2866120dd84600d5461283d565b61283d565b6122da565b5f4790505f8111156120fd576120fc47612543565b5b505b505b5f811115612174575f6127108286612119919061397c565b6121239190613b94565b90506121518760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836121ea565b61216e8787612169848961285590919063ffffffff16565b6121ea565b50612180565b61217f8686866121ea565b5b505050505050565b5f8383111582906121cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c69190612b41565b60405180910390fd5b505f83856121dd91906132bb565b9050809150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361225a575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016122519190613076565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122ca575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016122c19190613076565b60405180910390fd5b6122d583838361289e565b505050565b600160155f6101000a81548160ff0219169083151502179055505f600267ffffffffffffffff8111156123105761230f612de3565b5b60405190808252806020026020018201604052801561233e5781602001602082028036833780820191505090505b50905030815f815181106123555761235461339d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123f9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061241d9190613516565b816001815181106124315761243061339d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061249730600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461195a565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016124f9959493929190613c7b565b5f604051808303815f87803b158015612510575f80fd5b505af1158015612522573d5f803e3d5ffd5b50505050505f60155f6101000a81548160ff02191690831515021790555050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156125a7573d5f803e3d5ffd5b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036126de575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016126d59190613076565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361274e575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016127459190613076565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015612837578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161282e9190612cc2565b60405180910390a35b50505050565b5f81831161284b578261284d565b815b905092915050565b5f61289683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612188565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128ee578060025f8282546128e29190613700565b925050819055506129bc565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612977578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161296e93929190613cd3565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a03578060025f8282540392505081905550612a4d565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612aaa9190612cc2565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612aee578082015181840152602081019050612ad3565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612b1382612ab7565b612b1d8185612ac1565b9350612b2d818560208601612ad1565b612b3681612af9565b840191505092915050565b5f6020820190508181035f830152612b598184612b09565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612b9b82612b72565b9050919050565b612bab81612b91565b8114612bb5575f80fd5b50565b5f81359050612bc681612ba2565b92915050565b5f819050919050565b612bde81612bcc565b8114612be8575f80fd5b50565b5f81359050612bf981612bd5565b92915050565b5f8060408385031215612c1557612c14612b6a565b5b5f612c2285828601612bb8565b9250506020612c3385828601612beb565b9150509250929050565b5f8115159050919050565b612c5181612c3d565b82525050565b5f602082019050612c6a5f830184612c48565b92915050565b5f61ffff82169050919050565b612c8681612c70565b82525050565b5f604082019050612c9f5f830185612c7d565b612cac6020830184612c7d565b9392505050565b612cbc81612bcc565b82525050565b5f602082019050612cd55f830184612cb3565b92915050565b5f805f60608486031215612cf257612cf1612b6a565b5b5f612cff86828701612bb8565b9350506020612d1086828701612bb8565b9250506040612d2186828701612beb565b9150509250925092565b5f60ff82169050919050565b612d4081612d2b565b82525050565b5f602082019050612d595f830184612d37565b92915050565b612d6881612c3d565b8114612d72575f80fd5b50565b5f81359050612d8381612d5f565b92915050565b5f60208284031215612d9e57612d9d612b6a565b5b5f612dab84828501612d75565b91505092915050565b5f60208284031215612dc957612dc8612b6a565b5b5f612dd684828501612bb8565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612e1982612af9565b810181811067ffffffffffffffff82111715612e3857612e37612de3565b5b80604052505050565b5f612e4a612b61565b9050612e568282612e10565b919050565b5f67ffffffffffffffff821115612e7557612e74612de3565b5b602082029050602081019050919050565b5f80fd5b5f612e9c612e9784612e5b565b612e41565b90508083825260208201905060208402830185811115612ebf57612ebe612e86565b5b835b81811015612ee85780612ed48882612bb8565b845260208401935050602081019050612ec1565b5050509392505050565b5f82601f830112612f0657612f05612ddf565b5b8135612f16848260208601612e8a565b91505092915050565b5f67ffffffffffffffff821115612f3957612f38612de3565b5b602082029050602081019050919050565b5f612f5c612f5784612f1f565b612e41565b90508083825260208201905060208402830185811115612f7f57612f7e612e86565b5b835b81811015612fa85780612f948882612beb565b845260208401935050602081019050612f81565b5050509392505050565b5f82601f830112612fc657612fc5612ddf565b5b8135612fd6848260208601612f4a565b91505092915050565b5f805f60608486031215612ff657612ff5612b6a565b5b5f61300386828701612bb8565b935050602084013567ffffffffffffffff81111561302457613023612b6e565b5b61303086828701612ef2565b925050604084013567ffffffffffffffff81111561305157613050612b6e565b5b61305d86828701612fb2565b9150509250925092565b61307081612b91565b82525050565b5f6020820190506130895f830184613067565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6130c181612bcc565b82525050565b6130d081612c70565b82525050565b606082015f8201516130ea5f8501826130b8565b5060208201516130fd60208501826130c7565b50604082015161311060408501826130c7565b50505050565b5f61312183836130d6565b60608301905092915050565b5f602082019050919050565b5f6131438261308f565b61314d8185613099565b9350613158836130a9565b805f5b8381101561318857815161316f8882613116565b975061317a8361312d565b92505060018101905061315b565b5085935050505092915050565b5f6020820190508181035f8301526131ad8184613139565b905092915050565b5f80604083850312156131cb576131ca612b6a565b5b5f6131d885828601612bb8565b92505060206131e985828601612d75565b9150509250929050565b5f806040838503121561320957613208612b6a565b5b5f61321685828601612bb8565b925050602061322785828601612bb8565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061327557607f821691505b60208210810361328857613287613231565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6132c582612bcc565b91506132d083612bcc565b92508282039050818111156132e8576132e761328e565b5b92915050565b7f33302064617973206e65656420746f20756e6c6f636b20746f6b656e730000005f82015250565b5f613322601d83612ac1565b915061332d826132ee565b602082019050919050565b5f6020820190508181035f83015261334f81613316565b9050919050565b5f61336082612bcc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036133925761339161328e565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f74726164696e6720686173206e6f74206265656e2073746172746564207965745f82015250565b5f6133fe602083612ac1565b9150613409826133ca565b602082019050919050565b5f6020820190508181035f83015261342b816133f2565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f613466601783612ac1565b915061347182613432565b602082019050919050565b5f6020820190508181035f8301526134938161345a565b9050919050565b7f74726164696e6720697320616c726561647920737461727465640000000000005f82015250565b5f6134ce601a83612ac1565b91506134d98261349a565b602082019050919050565b5f6020820190508181035f8301526134fb816134c2565b9050919050565b5f8151905061351081612ba2565b92915050565b5f6020828403121561352b5761352a612b6a565b5b5f61353884828501613502565b91505092915050565b5f6040820190506135545f830185613067565b6135616020830184613067565b9392505050565b5f819050919050565b5f819050919050565b5f61359461358f61358a84613568565b613571565b612bcc565b9050919050565b6135a48161357a565b82525050565b5f60c0820190506135bd5f830189613067565b6135ca6020830188612cb3565b6135d7604083018761359b565b6135e4606083018661359b565b6135f16080830185613067565b6135fe60a0830184612cb3565b979650505050505050565b5f8151905061361781612bd5565b92915050565b5f805f6060848603121561363457613633612b6a565b5b5f61364186828701613609565b935050602061365286828701613609565b925050604061366386828701613609565b9150509250925092565b5f6040820190506136805f830185613067565b61368d6020830184612cb3565b9392505050565b5f815190506136a281612d5f565b92915050565b5f602082840312156136bd576136bc612b6a565b5b5f6136ca84828501613694565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f61370a82612bcc565b915061371583612bcc565b925082820190508082111561372d5761372c61328e565b5b92915050565b7f4163636f756e74206578636c75646564000000000000000000000000000000005f82015250565b5f613767601083612ac1565b915061377282613733565b602082019050919050565b5f6020820190508181035f8301526137948161375b565b9050919050565b7f416c6c206d6f6e74687320756e6c6f636b6564000000000000000000000000005f82015250565b5f6137cf601383612ac1565b91506137da8261379b565b602082019050919050565b5f6020820190508181035f8301526137fc816137c3565b9050919050565b5f8160011c9050919050565b5f808291508390505b6001851115613858578086048111156138345761383361328e565b5b60018516156138435780820291505b808102905061385185613803565b9450613818565b94509492505050565b5f82613870576001905061392b565b8161387d575f905061392b565b8160018114613893576002811461389d576138cc565b600191505061392b565b60ff8411156138af576138ae61328e565b5b8360020a9150848211156138c6576138c561328e565b5b5061392b565b5060208310610133831016604e8410600b84101617156139015782820a9050838111156138fc576138fb61328e565b5b61392b565b61390e848484600161380f565b925090508184048111156139255761392461328e565b5b81810290505b9392505050565b5f61393c82612bcc565b915061394783612d2b565b92506139747fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613861565b905092915050565b5f61398682612bcc565b915061399183612bcc565b925082820261399f81612bcc565b915082820484148315176139b6576139b561328e565b5b5092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613a17602583612ac1565b9150613a22826139bd565b604082019050919050565b5f6020820190508181035f830152613a4481613a0b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613aa5602383612ac1565b9150613ab082613a4b565b604082019050919050565b5f6020820190508181035f830152613ad281613a99565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613b33602983612ac1565b9150613b3e82613ad9565b604082019050919050565b5f6020820190508181035f830152613b6081613b27565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613b9e82612bcc565b9150613ba983612bcc565b925082613bb957613bb8613b67565b5b828204905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613bf681612b91565b82525050565b5f613c078383613bed565b60208301905092915050565b5f602082019050919050565b5f613c2982613bc4565b613c338185613bce565b9350613c3e83613bde565b805f5b83811015613c6e578151613c558882613bfc565b9750613c6083613c13565b925050600181019050613c41565b5085935050505092915050565b5f60a082019050613c8e5f830188612cb3565b613c9b602083018761359b565b8181036040830152613cad8186613c1f565b9050613cbc6060830185613067565b613cc96080830184612cb3565b9695505050505050565b5f606082019050613ce65f830186613067565b613cf36020830185612cb3565b613d006040830184612cb3565b94935050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122006e0cec9def2c2cbaca44bbf461bedee69552f903e5af788f571d03f828d5c6764736f6c63430008170033

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

000000000000000000000000827357ce3fdba02b3585c8a151108069fbe918310000000000000000000000005da22b2e325404208cfa5e5c15412f7126f4ba6b000000000000000000000000000000000000000000000000000000002faf0800000000000000000000000000f0e14c14e72cbf6106b9762d169c515abcfdd93e0000000000000000000000003a9595d0598a1262400d5f7c9dd4f322b981f6e20000000000000000000000000cffbf5bf770b49a2e11f9f84ed4001e54428cbe

-----Decoded View---------------
Arg [0] : taxWallet (address): 0x827357ce3fdBA02b3585c8a151108069fBe91831
Arg [1] : vaultAddr (address): 0x5Da22B2e325404208CFa5e5c15412F7126f4BA6B
Arg [2] : totalSupply (uint256): 800000000
Arg [3] : toCEX (address): 0xF0e14C14e72CBF6106b9762d169c515ABCfDd93E
Arg [4] : toDEX (address): 0x3a9595d0598a1262400D5f7c9DD4F322b981f6e2
Arg [5] : toPublicRound (address): 0x0CFfbf5BF770B49a2e11f9F84ed4001e54428cBe

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000827357ce3fdba02b3585c8a151108069fbe91831
Arg [1] : 0000000000000000000000005da22b2e325404208cfa5e5c15412f7126f4ba6b
Arg [2] : 000000000000000000000000000000000000000000000000000000002faf0800
Arg [3] : 000000000000000000000000f0e14c14e72cbf6106b9762d169c515abcfdd93e
Arg [4] : 0000000000000000000000003a9595d0598a1262400d5f7c9dd4f322b981f6e2
Arg [5] : 0000000000000000000000000cffbf5bf770b49a2e11f9f84ed4001e54428cbe


Deployed Bytecode Sourcemap

33885:16559:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23357:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43227:513;;;;;;;;;;;;;:::i;:::-;;25650:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45742:525;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;34252:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24459:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47017:315;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24310:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43042:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41639:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50159:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49833:318;;;;;;;;;;;;;:::i;:::-;;44899:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24621:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15488:103;;;;;;;;;;;;;:::i;:::-;;14813:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23567:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45366:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45224:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46839:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44624:111;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34189:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41831:1203;;;;;;;;;;;;;:::i;:::-;;43932:282;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25189:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44377:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15746:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23357:91;23402:13;23435:5;23428:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23357:91;:::o;43227:513::-;14699:13;:11;:13::i;:::-;43287:19:::1;43309:15;43287:37;;43335:30;43382:24;;43368:11;:38;;;;:::i;:::-;43335:71;;43451:7;43425:22;:33;;43417:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;43513:25;:23;:25::i;:::-;43577:1;43553:21;;:25;43549:91;;;43595:33;:31;:33::i;:::-;43549:91;43687:11;43660:24;:38;;;;43709:21;;:23;;;;;;;;;:::i;:::-;;;;;;43276:464;;43227:513::o:0;25650:190::-;25723:4;25740:13;25756:12;:10;:12::i;:::-;25740:28;;25779:31;25788:5;25795:7;25804:5;25779:8;:31::i;:::-;25828:4;25821:11;;;25650:190;;;;:::o;45742:525::-;45798:13;45813:14;45845:15;;;;;;;;;;;45840:65;;45884:3;45889;45877:16;;;;;;45840:65;45939:13;45976:1;45953:13;:20;;;;:24;;;;:::i;:::-;45939:39;;;;;;;;:::i;:::-;;;;;;;;;;;;:49;;;45921:15;:67;45917:116;;;46012:3;46017;46005:16;;;;;;45917:116;46048:6;46043:217;46064:13;:20;;;;46060:1;:24;46043:217;;;46128:13;46142:1;46128:16;;;;;;;;:::i;:::-;;;;;;;;;;;;:26;;;46110:15;:44;46106:143;;;46183:13;46197:1;46183:16;;;;;;;;:::i;:::-;;;;;;;;;;;;:23;;;;;;;;;;;;46208:13;46222:1;46208:16;;;;;;;;:::i;:::-;;;;;;;;;;;;:24;;;;;;;;;;;;46175:58;;;;;;;46106:143;46086:3;;;;;;;46043:217;;;;45742:525;;;:::o;34252:51::-;;;;:::o;24459:99::-;24511:7;24538:12;;24531:19;;24459:99;:::o;47017:315::-;47115:4;47132:41;47147:6;47155:9;47166:6;47132:14;:41::i;:::-;47184:118;47193:6;47201:12;:10;:12::i;:::-;47215:86;47250:6;47215:86;;;;;;;;;;;;;;;;;:30;47225:6;47232:12;:10;:12::i;:::-;47215:9;:30::i;:::-;:34;;:86;;;;;:::i;:::-;47184:8;:118::i;:::-;47320:4;47313:11;;47017:315;;;;;:::o;24310:84::-;24359:5;24384:2;24377:9;;24310:84;:::o;43042:177::-;14699:13;:11;:13::i;:::-;43128:15:::1;;;;;;;;;;;43120:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;43205:6;43190:12;;:21;;;;;;;;;;;;;;;;;;43042:177:::0;:::o;41639:184::-;14699:13;:11;:13::i;:::-;41735:1:::1;41716:21;;:7;:21;;::::0;41712:72:::1;;41761:11;;;;;;;;;;;;;;41712:72;41808:7;41794:11;;:21;;;;;;;;;;;;;;;;;;41639:184:::0;:::o;50159:280::-;14699:13;:11;:13::i;:::-;50297:7:::1;:14;50283:3;:10;:28;50275:37;;;::::0;::::1;;50328:9;50323:109;50347:3;:10;50343:1;:14;50323:109;;;50379:41;50395:4;50401:3;50405:1;50401:6;;;;;;;;:::i;:::-;;;;;;;;50409:7;50417:1;50409:10;;;;;;;;:::i;:::-;;;;;;;;50379:15;:41::i;:::-;50359:3;;;;;;;50323:109;;;;50159:280:::0;;;:::o;49833:318::-;14699:13;:11;:13::i;:::-;49885:20:::1;49906:24;49924:4;49906:9;:24::i;:::-;49885:45;;49959:1;49944:12;:16;49941:75;;;49974:30;49991:12;49974:16;:30::i;:::-;49941:75;50026:18;50045:21;50026:40;;50093:1;50080:10;:14;50077:67;;;50108:24;50121:10;50108:12;:24::i;:::-;50077:67;49874:277;;49833:318::o:0;44899:142::-;44975:11;45006:18;:27;45025:7;45006:27;;;;;;;;;;;;;;;;;;;;;;;;;44999:34;;44899:142;;;:::o;24621:118::-;24686:7;24713:9;:18;24723:7;24713:18;;;;;;;;;;;;;;;;24706:25;;24621:118;;;:::o;15488:103::-;14699:13;:11;:13::i;:::-;15553:30:::1;15580:1;15553:18;:30::i;:::-;15488:103::o:0;14813:87::-;14859:7;14886:6;;;;;;;;;;;14879:13;;14813:87;:::o;23567:95::-;23614:13;23647:7;23640:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23567:95;:::o;45366:104::-;45426:4;45450:12;;;;;;;;;;;45443:19;;45366:104;:::o;45224:134::-;45283:34;45337:13;45330:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45224:134;:::o;46839:170::-;46917:4;46934:45;46949:10;46961:9;46972:6;46934:14;:45::i;:::-;46997:4;46990:11;;46839:170;;;;:::o;44624:111::-;44680:17;44717:10;;;;;;;;;;;44710:17;;44624:111;:::o;34189:56::-;;;;:::o;41831:1203::-;14699:13;:11;:13::i;:::-;41904:12:::1;;;;;;;;;;;41903:13;41895:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;41963:15;;;;;;;;;;;41962:16;41954:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;42019:57;42035:6;;;;;;;;;;;42051:4;42058:17;42068:6;;;;;;;;;;;42058:9;:17::i;:::-;42019:15;:57::i;:::-;42127:42;42089:16;;:81;;;;;;;;;;;;;;;;;;42181:76;42198:4;42213:16;;;;;;;;;;;42232:24;42250:4;42232:9;:24::i;:::-;42181:8;:76::i;:::-;42300:16;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42282:56;;;42347:4;42354:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42282:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42268:11;;:110;;;;;;;;;;;;;;;;;;42389:16;;;;;;;;;;;:32;;;42429:21;42460:4;42466:24;42484:4;42466:9;:24::i;:::-;42491:1;42493::::0;42495:7:::1;:5;:7::i;:::-;42503:15;42389:130;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42537:11;;;;;;;;;;;42530:27;;;42566:16;;;;;;;;;;;42585:14;42530:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42613:29;42645:15;42613:47;;42673:13;:19;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42703:13;42722:59;;;;;;;;42759:9;42735:21;:33;;;;:::i;:::-;42722:59;;;;42770:4;42722:59;;;;;;42776:4;42722:59;;;;::::0;42703:79:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42793:13;42812:60;;;;;;;;42849:10;42825:21;:34;;;;:::i;:::-;42812:60;;;;42861:4;42812:60;;;;;;42867:4;42812:60;;;;::::0;42793:80:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42884:13;42903:55;;;;;;;;42940:7;42916:21;:31;;;;:::i;:::-;42903:55;;;;42949:3;42903:55;;;;;;42954:3;42903:55;;;;::::0;42884:75:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42987:4;42972:12;;:19;;;;;;;;;;;;;;;;;;43020:4;43002:15;;:22;;;;;;;;;;;;;;;;;;41884:1150;41831:1203::o:0;43932:282::-;14699:13;:11;:13::i;:::-;44070:8:::1;44039:39;;:18;:27;44058:7;44039:27;;;;;;;;;;;;;;;;;;;;;;;;;:39;;::::0;44031:68:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;44140:8;44110:18;:27;44129:7;44110:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;44188:7;44166:40;;;44197:8;44166:40;;;;;;:::i;:::-;;;;;;;;43932:282:::0;;:::o;25189:142::-;25269:7;25296:11;:18;25308:5;25296:18;;;;;;;;;;;;;;;:27;25315:7;25296:27;;;;;;;;;;;;;;;;25289:34;;25189:142;;;;:::o;44377:114::-;44434:18;44472:11;;;;;;;;;;;44465:18;;44377:114;:::o;15746:220::-;14699:13;:11;:13::i;:::-;15851:1:::1;15831:22;;:8;:22;;::::0;15827:93:::1;;15905:1;15877:31;;;;;;;;;;;:::i;:::-;;;;;;;;15827:93;15930:28;15949:8;15930:18;:28::i;:::-;15746:220:::0;:::o;14978:166::-;15049:12;:10;:12::i;:::-;15038:23;;:7;:5;:7::i;:::-;:23;;;15034:103;;15112:12;:10;:12::i;:::-;15085:40;;;;;;;;;;;:::i;:::-;;;;;;;;15034:103;14978:166::o;46488:343::-;46575:14;:21;;;;46551;;:45;46543:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;46633:25;46661:21;;46633:49;;46693:22;46718:14;46733:17;46718:33;;;;;;;;:::i;:::-;;;;;;;;;;;;:40;;;46693:65;;46771:52;46787:7;:5;:7::i;:::-;46796:10;;;;;;;;;;;46808:14;46771:15;:52::i;:::-;46532:299;;46488:343::o;46275:205::-;46338:61;46354:10;;;;;;;;;;;46366:6;;;;;;;;;;;46388:10;:8;:10::i;:::-;46384:2;:14;;;;:::i;:::-;46374:7;:24;;;;:::i;:::-;46338:15;:61::i;:::-;46410:62;46426:10;;;;;;;;;;;46438:6;;;;;;;;;;;46461:10;:8;:10::i;:::-;46457:2;:14;;;;:::i;:::-;46446:8;:25;;;;:::i;:::-;46410:15;:62::i;:::-;46275:205::o;12822:98::-;12875:7;12902:10;12895:17;;12822:98;:::o;30477:130::-;30562:37;30571:5;30578:7;30587:5;30594:4;30562:8;:37::i;:::-;30477:130;;;:::o;47344:1744::-;47453:1;47437:18;;:4;:18;;;47429:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47530:1;47516:16;;:2;:16;;;47508:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;47600:1;47591:6;:10;47583:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;47661:13;47676:14;47694:16;:14;:16::i;:::-;47660:50;;;;47721:17;47765:7;:5;:7::i;:::-;47757:15;;:4;:15;;;;:32;;;;;47782:7;:5;:7::i;:::-;47776:13;;:2;:13;;;;47757:32;:54;;;;;47801:10;;;;;;;;;;;47793:18;;:4;:18;;;;47757:54;:74;;;;;47821:10;;;;;;;;;;;47815:16;;:2;:16;;;;47757:74;:101;;;;;47852:6;;;;;;;;;;;47844:14;;:4;:14;;;;47757:101;:117;;;;;47868:6;;;;;;;;;;;47862:12;;:2;:12;;;;47757:117;:135;;;;;47886:6;;;;;;;;;;;47878:14;;:4;:14;;;;47757:135;:151;;;;;47902:6;;;;;;;;;;;47896:12;;:2;:12;;;;47757:151;:187;;;;;47930:14;;;;;;;;;;;47922:22;;:4;:22;;;;47757:187;:211;;;;;47954:14;;;;;;;;;;;47948:20;;:2;:20;;;;47757:211;:233;;;;;47980:10;;;;;;;;;;;47972:18;;:4;:18;;;;47757:233;:253;;;;;48000:10;;;;;;;;;;;47994:16;;:2;:16;;;;47757:253;47753:1037;;;48053:11;;;;;;;;;;;48045:19;;:4;:19;;;:54;;;;;48082:16;;;;;;;;;;;48068:31;;:2;:31;;;;48045:54;:82;;;;;48105:18;:22;48124:2;48105:22;;;;;;;;;;;;;;;;;;;;;;;;;48103:24;48045:82;48041:142;;;48161:6;48149:18;;;;48041:142;48207:11;;;;;;;;;;;48201:17;;:2;:17;;;:42;;;;;48238:4;48222:21;;:4;:21;;;;48201:42;48197:102;;;48276:7;48264:19;;;;48197:102;48315:28;48346:24;48364:4;48346:9;:24::i;:::-;48315:55;;48390:6;;;;;;;;;;;48389:7;:28;;;;;48406:11;;;;;;;;;;;48400:17;;:2;:17;;;48389:28;:47;;;;;48421:15;;;;;;;;;;;48389:47;:91;;;;;48463:17;;48440:20;:40;48389:91;48385:394;;;48501:69;48518:51;48522:6;48530:38;48534:20;48556:11;;48530:3;:38::i;:::-;48518:3;:51::i;:::-;48501:16;:69::i;:::-;48589:26;48618:21;48589:50;;48683:1;48662:18;:22;48658:106;;;48709:35;48722:21;48709:12;:35::i;:::-;48658:106;48482:297;48385:394;48013:777;47753:1037;48815:1;48803:9;:13;48800:281;;;48833:17;48876:5;48863:9;48854:6;:18;;;;:::i;:::-;48853:28;;;;:::i;:::-;48833:48;;48896:44;48912:4;48918:10;;;;;;;;;;;48930:9;48896:15;:44::i;:::-;48955:48;48971:4;48977:2;48981:21;48992:9;48981:6;:10;;:21;;;;:::i;:::-;48955:15;:48::i;:::-;48818:197;48800:281;;;49036:33;49052:4;49058:2;49062:6;49036:15;:33::i;:::-;48800:281;47418:1670;;;47344:1744;;;:::o;33686:190::-;33772:7;33805:1;33800;:6;;33808:12;33792:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;33832:9;33848:1;33844;:5;;;;:::i;:::-;33832:17;;33867:1;33860:8;;;33686:190;;;;;:::o;27052:308::-;27152:1;27136:18;;:4;:18;;;27132:88;;27205:1;27178:30;;;;;;;;;;;:::i;:::-;;;;;;;;27132:88;27248:1;27234:16;;:2;:16;;;27230:88;;27303:1;27274:32;;;;;;;;;;;:::i;:::-;;;;;;;;27230:88;27328:24;27336:4;27342:2;27346:5;27328:7;:24::i;:::-;27052:308;;;:::o;49096:486::-;34854:4;34845:6;;:13;;;;;;;;;;;;;;;;;;49174:21:::1;49212:1;49198:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49174:40;;49243:4;49225;49230:1;49225:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;49269:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49259:4;49264:1;49259:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;::::0;::::1;49303:63;49320:4;49335:16;;;;;;;;;;;49354:11;49303:8;:63::i;:::-;49377:16;;;;;;;;;;;:67;;;49459:11;49485:1;49501:4;49528;49548:15;49377:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;49163:419;34890:5:::0;34881:6;;:14;;;;;;;;;;;;;;;;;;49096:486;:::o;49590:92::-;49647:10;;;;;;;;;;;:19;;:27;49667:6;49647:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49590:92;:::o;16126:191::-;16200:16;16219:6;;;;;;;;;;;16200:25;;16245:8;16236:6;;:17;;;;;;;;;;;;;;;;;;16300:8;16269:40;;16290:8;16269:40;;;;;;;;;;;;16189:128;16126:191;:::o;31458:443::-;31588:1;31571:19;;:5;:19;;;31567:91;;31643:1;31614:32;;;;;;;;;;;:::i;:::-;;;;;;;;31567:91;31691:1;31672:21;;:7;:21;;;31668:92;;31745:1;31717:31;;;;;;;;;;;:::i;:::-;;;;;;;;31668:92;31800:5;31770:11;:18;31782:5;31770:18;;;;;;;;;;;;;;;:27;31789:7;31770:27;;;;;;;;;;;;;;;:35;;;;31820:9;31816:78;;;31867:7;31851:31;;31860:5;31851:31;;;31876:5;31851:31;;;;;;:::i;:::-;;;;;;;;31816:78;31458:443;;;;:::o;49690:98::-;49747:7;49774:1;49772;:3;49771:9;;49779:1;49771:9;;;49777:1;49771:9;49764:16;;49690:98;;;;:::o;33542:136::-;33600:7;33627:43;33631:1;33634;33627:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;33620:50;;33542:136;;;;:::o;27684:1135::-;27790:1;27774:18;;:4;:18;;;27770:552;;27928:5;27912:12;;:21;;;;;;;:::i;:::-;;;;;;;;27770:552;;;27966:19;27988:9;:15;27998:4;27988:15;;;;;;;;;;;;;;;;27966:37;;28036:5;28022:11;:19;28018:117;;;28094:4;28100:11;28113:5;28069:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;28018:117;28290:5;28276:11;:19;28258:9;:15;28268:4;28258:15;;;;;;;;;;;;;;;:37;;;;27951:371;27770:552;28352:1;28338:16;;:2;:16;;;28334:435;;28520:5;28504:12;;:21;;;;;;;;;;;28334:435;;;28737:5;28720:9;:13;28730:2;28720:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;28334:435;28801:2;28786:25;;28795:4;28786:25;;;28805:5;28786:25;;;;;;:::i;:::-;;;;;;;;27684:1135;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:89::-;3482:7;3522:6;3515:5;3511:18;3500:29;;3446:89;;;:::o;3541:115::-;3626:23;3643:5;3626:23;:::i;:::-;3621:3;3614:36;3541:115;;:::o;3662:324::-;3779:4;3817:2;3806:9;3802:18;3794:26;;3830:69;3896:1;3885:9;3881:17;3872:6;3830:69;:::i;:::-;3909:70;3975:2;3964:9;3960:18;3951:6;3909:70;:::i;:::-;3662:324;;;;;:::o;3992:118::-;4079:24;4097:5;4079:24;:::i;:::-;4074:3;4067:37;3992:118;;:::o;4116:222::-;4209:4;4247:2;4236:9;4232:18;4224:26;;4260:71;4328:1;4317:9;4313:17;4304:6;4260:71;:::i;:::-;4116:222;;;;:::o;4344:619::-;4421:6;4429;4437;4486:2;4474:9;4465:7;4461:23;4457:32;4454:119;;;4492:79;;:::i;:::-;4454:119;4612:1;4637:53;4682:7;4673:6;4662:9;4658:22;4637:53;:::i;:::-;4627:63;;4583:117;4739:2;4765:53;4810:7;4801:6;4790:9;4786:22;4765:53;:::i;:::-;4755:63;;4710:118;4867:2;4893:53;4938:7;4929:6;4918:9;4914:22;4893:53;:::i;:::-;4883:63;;4838:118;4344:619;;;;;:::o;4969:86::-;5004:7;5044:4;5037:5;5033:16;5022:27;;4969:86;;;:::o;5061:112::-;5144:22;5160:5;5144:22;:::i;:::-;5139:3;5132:35;5061:112;;:::o;5179:214::-;5268:4;5306:2;5295:9;5291:18;5283:26;;5319:67;5383:1;5372:9;5368:17;5359:6;5319:67;:::i;:::-;5179:214;;;;:::o;5399:116::-;5469:21;5484:5;5469:21;:::i;:::-;5462:5;5459:32;5449:60;;5505:1;5502;5495:12;5449:60;5399:116;:::o;5521:133::-;5564:5;5602:6;5589:20;5580:29;;5618:30;5642:5;5618:30;:::i;:::-;5521:133;;;;:::o;5660:323::-;5716:6;5765:2;5753:9;5744:7;5740:23;5736:32;5733:119;;;5771:79;;:::i;:::-;5733:119;5891:1;5916:50;5958:7;5949:6;5938:9;5934:22;5916:50;:::i;:::-;5906:60;;5862:114;5660:323;;;;:::o;5989:329::-;6048:6;6097:2;6085:9;6076:7;6072:23;6068:32;6065:119;;;6103:79;;:::i;:::-;6065:119;6223:1;6248:53;6293:7;6284:6;6273:9;6269:22;6248:53;:::i;:::-;6238:63;;6194:117;5989:329;;;;:::o;6324:117::-;6433:1;6430;6423:12;6447:180;6495:77;6492:1;6485:88;6592:4;6589:1;6582:15;6616:4;6613:1;6606:15;6633:281;6716:27;6738:4;6716:27;:::i;:::-;6708:6;6704:40;6846:6;6834:10;6831:22;6810:18;6798:10;6795:34;6792:62;6789:88;;;6857:18;;:::i;:::-;6789:88;6897:10;6893:2;6886:22;6676:238;6633:281;;:::o;6920:129::-;6954:6;6981:20;;:::i;:::-;6971:30;;7010:33;7038:4;7030:6;7010:33;:::i;:::-;6920:129;;;:::o;7055:311::-;7132:4;7222:18;7214:6;7211:30;7208:56;;;7244:18;;:::i;:::-;7208:56;7294:4;7286:6;7282:17;7274:25;;7354:4;7348;7344:15;7336:23;;7055:311;;;:::o;7372:117::-;7481:1;7478;7471:12;7512:710;7608:5;7633:81;7649:64;7706:6;7649:64;:::i;:::-;7633:81;:::i;:::-;7624:90;;7734:5;7763:6;7756:5;7749:21;7797:4;7790:5;7786:16;7779:23;;7850:4;7842:6;7838:17;7830:6;7826:30;7879:3;7871:6;7868:15;7865:122;;;7898:79;;:::i;:::-;7865:122;8013:6;7996:220;8030:6;8025:3;8022:15;7996:220;;;8105:3;8134:37;8167:3;8155:10;8134:37;:::i;:::-;8129:3;8122:50;8201:4;8196:3;8192:14;8185:21;;8072:144;8056:4;8051:3;8047:14;8040:21;;7996:220;;;8000:21;7614:608;;7512:710;;;;;:::o;8245:370::-;8316:5;8365:3;8358:4;8350:6;8346:17;8342:27;8332:122;;8373:79;;:::i;:::-;8332:122;8490:6;8477:20;8515:94;8605:3;8597:6;8590:4;8582:6;8578:17;8515:94;:::i;:::-;8506:103;;8322:293;8245:370;;;;:::o;8621:311::-;8698:4;8788:18;8780:6;8777:30;8774:56;;;8810:18;;:::i;:::-;8774:56;8860:4;8852:6;8848:17;8840:25;;8920:4;8914;8910:15;8902:23;;8621:311;;;:::o;8955:710::-;9051:5;9076:81;9092:64;9149:6;9092:64;:::i;:::-;9076:81;:::i;:::-;9067:90;;9177:5;9206:6;9199:5;9192:21;9240:4;9233:5;9229:16;9222:23;;9293:4;9285:6;9281:17;9273:6;9269:30;9322:3;9314:6;9311:15;9308:122;;;9341:79;;:::i;:::-;9308:122;9456:6;9439:220;9473:6;9468:3;9465:15;9439:220;;;9548:3;9577:37;9610:3;9598:10;9577:37;:::i;:::-;9572:3;9565:50;9644:4;9639:3;9635:14;9628:21;;9515:144;9499:4;9494:3;9490:14;9483:21;;9439:220;;;9443:21;9057:608;;8955:710;;;;;:::o;9688:370::-;9759:5;9808:3;9801:4;9793:6;9789:17;9785:27;9775:122;;9816:79;;:::i;:::-;9775:122;9933:6;9920:20;9958:94;10048:3;10040:6;10033:4;10025:6;10021:17;9958:94;:::i;:::-;9949:103;;9765:293;9688:370;;;;:::o;10064:1039::-;10191:6;10199;10207;10256:2;10244:9;10235:7;10231:23;10227:32;10224:119;;;10262:79;;:::i;:::-;10224:119;10382:1;10407:53;10452:7;10443:6;10432:9;10428:22;10407:53;:::i;:::-;10397:63;;10353:117;10537:2;10526:9;10522:18;10509:32;10568:18;10560:6;10557:30;10554:117;;;10590:79;;:::i;:::-;10554:117;10695:78;10765:7;10756:6;10745:9;10741:22;10695:78;:::i;:::-;10685:88;;10480:303;10850:2;10839:9;10835:18;10822:32;10881:18;10873:6;10870:30;10867:117;;;10903:79;;:::i;:::-;10867:117;11008:78;11078:7;11069:6;11058:9;11054:22;11008:78;:::i;:::-;10998:88;;10793:303;10064:1039;;;;;:::o;11109:118::-;11196:24;11214:5;11196:24;:::i;:::-;11191:3;11184:37;11109:118;;:::o;11233:222::-;11326:4;11364:2;11353:9;11349:18;11341:26;;11377:71;11445:1;11434:9;11430:17;11421:6;11377:71;:::i;:::-;11233:222;;;;:::o;11461:143::-;11557:6;11591:5;11585:12;11575:22;;11461:143;;;:::o;11610:213::-;11738:11;11772:6;11767:3;11760:19;11812:4;11807:3;11803:14;11788:29;;11610:213;;;;:::o;11829:161::-;11925:4;11948:3;11940:11;;11978:4;11973:3;11969:14;11961:22;;11829:161;;;:::o;11996:108::-;12073:24;12091:5;12073:24;:::i;:::-;12068:3;12061:37;11996:108;;:::o;12110:105::-;12185:23;12202:5;12185:23;:::i;:::-;12180:3;12173:36;12110:105;;:::o;12295:685::-;12440:4;12435:3;12431:14;12532:4;12525:5;12521:16;12515:23;12551:63;12608:4;12603:3;12599:14;12585:12;12551:63;:::i;:::-;12455:169;12708:4;12701:5;12697:16;12691:23;12727:61;12782:4;12777:3;12773:14;12759:12;12727:61;:::i;:::-;12634:164;12883:4;12876:5;12872:16;12866:23;12902:61;12957:4;12952:3;12948:14;12934:12;12902:61;:::i;:::-;12808:165;12409:571;12295:685;;:::o;12986:295::-;13113:10;13134:104;13234:3;13226:6;13134:104;:::i;:::-;13270:4;13265:3;13261:14;13247:28;;12986:295;;;;:::o;13287:142::-;13386:4;13418;13413:3;13409:14;13401:22;;13287:142;;;:::o;13513:964::-;13690:3;13719:83;13796:5;13719:83;:::i;:::-;13818:115;13926:6;13921:3;13818:115;:::i;:::-;13811:122;;13957:85;14036:5;13957:85;:::i;:::-;14065:7;14096:1;14081:371;14106:6;14103:1;14100:13;14081:371;;;14182:6;14176:13;14209:121;14326:3;14311:13;14209:121;:::i;:::-;14202:128;;14353:89;14435:6;14353:89;:::i;:::-;14343:99;;14141:311;14128:1;14125;14121:9;14116:14;;14081:371;;;14085:14;14468:3;14461:10;;13695:782;;;13513:964;;;;:::o;14483:489::-;14684:4;14722:2;14711:9;14707:18;14699:26;;14771:9;14765:4;14761:20;14757:1;14746:9;14742:17;14735:47;14799:166;14960:4;14951:6;14799:166;:::i;:::-;14791:174;;14483:489;;;;:::o;14978:468::-;15043:6;15051;15100:2;15088:9;15079:7;15075:23;15071:32;15068:119;;;15106:79;;:::i;:::-;15068:119;15226:1;15251:53;15296:7;15287:6;15276:9;15272:22;15251:53;:::i;:::-;15241:63;;15197:117;15353:2;15379:50;15421:7;15412:6;15401:9;15397:22;15379:50;:::i;:::-;15369:60;;15324:115;14978:468;;;;;:::o;15452:474::-;15520:6;15528;15577:2;15565:9;15556:7;15552:23;15548:32;15545:119;;;15583:79;;:::i;:::-;15545:119;15703:1;15728:53;15773:7;15764:6;15753:9;15749:22;15728:53;:::i;:::-;15718:63;;15674:117;15830:2;15856:53;15901:7;15892:6;15881:9;15877:22;15856:53;:::i;:::-;15846:63;;15801:118;15452:474;;;;;:::o;15932:180::-;15980:77;15977:1;15970:88;16077:4;16074:1;16067:15;16101:4;16098:1;16091:15;16118:320;16162:6;16199:1;16193:4;16189:12;16179:22;;16246:1;16240:4;16236:12;16267:18;16257:81;;16323:4;16315:6;16311:17;16301:27;;16257:81;16385:2;16377:6;16374:14;16354:18;16351:38;16348:84;;16404:18;;:::i;:::-;16348:84;16169:269;16118:320;;;:::o;16444:180::-;16492:77;16489:1;16482:88;16589:4;16586:1;16579:15;16613:4;16610:1;16603:15;16630:194;16670:4;16690:20;16708:1;16690:20;:::i;:::-;16685:25;;16724:20;16742:1;16724:20;:::i;:::-;16719:25;;16768:1;16765;16761:9;16753:17;;16792:1;16786:4;16783:11;16780:37;;;16797:18;;:::i;:::-;16780:37;16630:194;;;;:::o;16830:179::-;16970:31;16966:1;16958:6;16954:14;16947:55;16830:179;:::o;17015:366::-;17157:3;17178:67;17242:2;17237:3;17178:67;:::i;:::-;17171:74;;17254:93;17343:3;17254:93;:::i;:::-;17372:2;17367:3;17363:12;17356:19;;17015:366;;;:::o;17387:419::-;17553:4;17591:2;17580:9;17576:18;17568:26;;17640:9;17634:4;17630:20;17626:1;17615:9;17611:17;17604:47;17668:131;17794:4;17668:131;:::i;:::-;17660:139;;17387:419;;;:::o;17812:233::-;17851:3;17874:24;17892:5;17874:24;:::i;:::-;17865:33;;17920:66;17913:5;17910:77;17907:103;;17990:18;;:::i;:::-;17907:103;18037:1;18030:5;18026:13;18019:20;;17812:233;;;:::o;18051:180::-;18099:77;18096:1;18089:88;18196:4;18193:1;18186:15;18220:4;18217:1;18210:15;18237:182;18377:34;18373:1;18365:6;18361:14;18354:58;18237:182;:::o;18425:366::-;18567:3;18588:67;18652:2;18647:3;18588:67;:::i;:::-;18581:74;;18664:93;18753:3;18664:93;:::i;:::-;18782:2;18777:3;18773:12;18766:19;;18425:366;;;:::o;18797:419::-;18963:4;19001:2;18990:9;18986:18;18978:26;;19050:9;19044:4;19040:20;19036:1;19025:9;19021:17;19014:47;19078:131;19204:4;19078:131;:::i;:::-;19070:139;;18797:419;;;:::o;19222:173::-;19362:25;19358:1;19350:6;19346:14;19339:49;19222:173;:::o;19401:366::-;19543:3;19564:67;19628:2;19623:3;19564:67;:::i;:::-;19557:74;;19640:93;19729:3;19640:93;:::i;:::-;19758:2;19753:3;19749:12;19742:19;;19401:366;;;:::o;19773:419::-;19939:4;19977:2;19966:9;19962:18;19954:26;;20026:9;20020:4;20016:20;20012:1;20001:9;19997:17;19990:47;20054:131;20180:4;20054:131;:::i;:::-;20046:139;;19773:419;;;:::o;20198:176::-;20338:28;20334:1;20326:6;20322:14;20315:52;20198:176;:::o;20380:366::-;20522:3;20543:67;20607:2;20602:3;20543:67;:::i;:::-;20536:74;;20619:93;20708:3;20619:93;:::i;:::-;20737:2;20732:3;20728:12;20721:19;;20380:366;;;:::o;20752:419::-;20918:4;20956:2;20945:9;20941:18;20933:26;;21005:9;20999:4;20995:20;20991:1;20980:9;20976:17;20969:47;21033:131;21159:4;21033:131;:::i;:::-;21025:139;;20752:419;;;:::o;21177:143::-;21234:5;21265:6;21259:13;21250:22;;21281:33;21308:5;21281:33;:::i;:::-;21177:143;;;;:::o;21326:351::-;21396:6;21445:2;21433:9;21424:7;21420:23;21416:32;21413:119;;;21451:79;;:::i;:::-;21413:119;21571:1;21596:64;21652:7;21643:6;21632:9;21628:22;21596:64;:::i;:::-;21586:74;;21542:128;21326:351;;;;:::o;21683:332::-;21804:4;21842:2;21831:9;21827:18;21819:26;;21855:71;21923:1;21912:9;21908:17;21899:6;21855:71;:::i;:::-;21936:72;22004:2;21993:9;21989:18;21980:6;21936:72;:::i;:::-;21683:332;;;;;:::o;22021:85::-;22066:7;22095:5;22084:16;;22021:85;;;:::o;22112:60::-;22140:3;22161:5;22154:12;;22112:60;;;:::o;22178:158::-;22236:9;22269:61;22287:42;22296:32;22322:5;22296:32;:::i;:::-;22287:42;:::i;:::-;22269:61;:::i;:::-;22256:74;;22178:158;;;:::o;22342:147::-;22437:45;22476:5;22437:45;:::i;:::-;22432:3;22425:58;22342:147;;:::o;22495:807::-;22744:4;22782:3;22771:9;22767:19;22759:27;;22796:71;22864:1;22853:9;22849:17;22840:6;22796:71;:::i;:::-;22877:72;22945:2;22934:9;22930:18;22921:6;22877:72;:::i;:::-;22959:80;23035:2;23024:9;23020:18;23011:6;22959:80;:::i;:::-;23049;23125:2;23114:9;23110:18;23101:6;23049:80;:::i;:::-;23139:73;23207:3;23196:9;23192:19;23183:6;23139:73;:::i;:::-;23222;23290:3;23279:9;23275:19;23266:6;23222:73;:::i;:::-;22495:807;;;;;;;;;:::o;23308:143::-;23365:5;23396:6;23390:13;23381:22;;23412:33;23439:5;23412:33;:::i;:::-;23308:143;;;;:::o;23457:663::-;23545:6;23553;23561;23610:2;23598:9;23589:7;23585:23;23581:32;23578:119;;;23616:79;;:::i;:::-;23578:119;23736:1;23761:64;23817:7;23808:6;23797:9;23793:22;23761:64;:::i;:::-;23751:74;;23707:128;23874:2;23900:64;23956:7;23947:6;23936:9;23932:22;23900:64;:::i;:::-;23890:74;;23845:129;24013:2;24039:64;24095:7;24086:6;24075:9;24071:22;24039:64;:::i;:::-;24029:74;;23984:129;23457:663;;;;;:::o;24126:332::-;24247:4;24285:2;24274:9;24270:18;24262:26;;24298:71;24366:1;24355:9;24351:17;24342:6;24298:71;:::i;:::-;24379:72;24447:2;24436:9;24432:18;24423:6;24379:72;:::i;:::-;24126:332;;;;;:::o;24464:137::-;24518:5;24549:6;24543:13;24534:22;;24565:30;24589:5;24565:30;:::i;:::-;24464:137;;;;:::o;24607:345::-;24674:6;24723:2;24711:9;24702:7;24698:23;24694:32;24691:119;;;24729:79;;:::i;:::-;24691:119;24849:1;24874:61;24927:7;24918:6;24907:9;24903:22;24874:61;:::i;:::-;24864:71;;24820:125;24607:345;;;;:::o;24958:180::-;25006:77;25003:1;24996:88;25103:4;25100:1;25093:15;25127:4;25124:1;25117:15;25144:191;25184:3;25203:20;25221:1;25203:20;:::i;:::-;25198:25;;25237:20;25255:1;25237:20;:::i;:::-;25232:25;;25280:1;25277;25273:9;25266:16;;25301:3;25298:1;25295:10;25292:36;;;25308:18;;:::i;:::-;25292:36;25144:191;;;;:::o;25341:166::-;25481:18;25477:1;25469:6;25465:14;25458:42;25341:166;:::o;25513:366::-;25655:3;25676:67;25740:2;25735:3;25676:67;:::i;:::-;25669:74;;25752:93;25841:3;25752:93;:::i;:::-;25870:2;25865:3;25861:12;25854:19;;25513:366;;;:::o;25885:419::-;26051:4;26089:2;26078:9;26074:18;26066:26;;26138:9;26132:4;26128:20;26124:1;26113:9;26109:17;26102:47;26166:131;26292:4;26166:131;:::i;:::-;26158:139;;25885:419;;;:::o;26310:169::-;26450:21;26446:1;26438:6;26434:14;26427:45;26310:169;:::o;26485:366::-;26627:3;26648:67;26712:2;26707:3;26648:67;:::i;:::-;26641:74;;26724:93;26813:3;26724:93;:::i;:::-;26842:2;26837:3;26833:12;26826:19;;26485:366;;;:::o;26857:419::-;27023:4;27061:2;27050:9;27046:18;27038:26;;27110:9;27104:4;27100:20;27096:1;27085:9;27081:17;27074:47;27138:131;27264:4;27138:131;:::i;:::-;27130:139;;26857:419;;;:::o;27282:102::-;27324:8;27371:5;27368:1;27364:13;27343:34;;27282:102;;;:::o;27390:848::-;27451:5;27458:4;27482:6;27473:15;;27506:5;27497:14;;27520:712;27541:1;27531:8;27528:15;27520:712;;;27636:4;27631:3;27627:14;27621:4;27618:24;27615:50;;;27645:18;;:::i;:::-;27615:50;27695:1;27685:8;27681:16;27678:451;;;28110:4;28103:5;28099:16;28090:25;;27678:451;28160:4;28154;28150:15;28142:23;;28190:32;28213:8;28190:32;:::i;:::-;28178:44;;27520:712;;;27390:848;;;;;;;:::o;28244:1073::-;28298:5;28489:8;28479:40;;28510:1;28501:10;;28512:5;;28479:40;28538:4;28528:36;;28555:1;28546:10;;28557:5;;28528:36;28624:4;28672:1;28667:27;;;;28708:1;28703:191;;;;28617:277;;28667:27;28685:1;28676:10;;28687:5;;;28703:191;28748:3;28738:8;28735:17;28732:43;;;28755:18;;:::i;:::-;28732:43;28804:8;28801:1;28797:16;28788:25;;28839:3;28832:5;28829:14;28826:40;;;28846:18;;:::i;:::-;28826:40;28879:5;;;28617:277;;29003:2;28993:8;28990:16;28984:3;28978:4;28975:13;28971:36;28953:2;28943:8;28940:16;28935:2;28929:4;28926:12;28922:35;28906:111;28903:246;;;29059:8;29053:4;29049:19;29040:28;;29094:3;29087:5;29084:14;29081:40;;;29101:18;;:::i;:::-;29081:40;29134:5;;28903:246;29174:42;29212:3;29202:8;29196:4;29193:1;29174:42;:::i;:::-;29159:57;;;;29248:4;29243:3;29239:14;29232:5;29229:25;29226:51;;;29257:18;;:::i;:::-;29226:51;29306:4;29299:5;29295:16;29286:25;;28244:1073;;;;;;:::o;29323:281::-;29381:5;29405:23;29423:4;29405:23;:::i;:::-;29397:31;;29449:25;29465:8;29449:25;:::i;:::-;29437:37;;29493:104;29530:66;29520:8;29514:4;29493:104;:::i;:::-;29484:113;;29323:281;;;;:::o;29610:410::-;29650:7;29673:20;29691:1;29673:20;:::i;:::-;29668:25;;29707:20;29725:1;29707:20;:::i;:::-;29702:25;;29762:1;29759;29755:9;29784:30;29802:11;29784:30;:::i;:::-;29773:41;;29963:1;29954:7;29950:15;29947:1;29944:22;29924:1;29917:9;29897:83;29874:139;;29993:18;;:::i;:::-;29874:139;29658:362;29610:410;;;;:::o;30026:224::-;30166:34;30162:1;30154:6;30150:14;30143:58;30235:7;30230:2;30222:6;30218:15;30211:32;30026:224;:::o;30256:366::-;30398:3;30419:67;30483:2;30478:3;30419:67;:::i;:::-;30412:74;;30495:93;30584:3;30495:93;:::i;:::-;30613:2;30608:3;30604:12;30597:19;;30256:366;;;:::o;30628:419::-;30794:4;30832:2;30821:9;30817:18;30809:26;;30881:9;30875:4;30871:20;30867:1;30856:9;30852:17;30845:47;30909:131;31035:4;30909:131;:::i;:::-;30901:139;;30628:419;;;:::o;31053:222::-;31193:34;31189:1;31181:6;31177:14;31170:58;31262:5;31257:2;31249:6;31245:15;31238:30;31053:222;:::o;31281:366::-;31423:3;31444:67;31508:2;31503:3;31444:67;:::i;:::-;31437:74;;31520:93;31609:3;31520:93;:::i;:::-;31638:2;31633:3;31629:12;31622:19;;31281:366;;;:::o;31653:419::-;31819:4;31857:2;31846:9;31842:18;31834:26;;31906:9;31900:4;31896:20;31892:1;31881:9;31877:17;31870:47;31934:131;32060:4;31934:131;:::i;:::-;31926:139;;31653:419;;;:::o;32078:228::-;32218:34;32214:1;32206:6;32202:14;32195:58;32287:11;32282:2;32274:6;32270:15;32263:36;32078:228;:::o;32312:366::-;32454:3;32475:67;32539:2;32534:3;32475:67;:::i;:::-;32468:74;;32551:93;32640:3;32551:93;:::i;:::-;32669:2;32664:3;32660:12;32653:19;;32312:366;;;:::o;32684:419::-;32850:4;32888:2;32877:9;32873:18;32865:26;;32937:9;32931:4;32927:20;32923:1;32912:9;32908:17;32901:47;32965:131;33091:4;32965:131;:::i;:::-;32957:139;;32684:419;;;:::o;33109:180::-;33157:77;33154:1;33147:88;33254:4;33251:1;33244:15;33278:4;33275:1;33268:15;33295:185;33335:1;33352:20;33370:1;33352:20;:::i;:::-;33347:25;;33386:20;33404:1;33386:20;:::i;:::-;33381:25;;33425:1;33415:35;;33430:18;;:::i;:::-;33415:35;33472:1;33469;33465:9;33460:14;;33295:185;;;;:::o;33486:114::-;33553:6;33587:5;33581:12;33571:22;;33486:114;;;:::o;33606:184::-;33705:11;33739:6;33734:3;33727:19;33779:4;33774:3;33770:14;33755:29;;33606:184;;;;:::o;33796:132::-;33863:4;33886:3;33878:11;;33916:4;33911:3;33907:14;33899:22;;33796:132;;;:::o;33934:108::-;34011:24;34029:5;34011:24;:::i;:::-;34006:3;33999:37;33934:108;;:::o;34048:179::-;34117:10;34138:46;34180:3;34172:6;34138:46;:::i;:::-;34216:4;34211:3;34207:14;34193:28;;34048:179;;;;:::o;34233:113::-;34303:4;34335;34330:3;34326:14;34318:22;;34233:113;;;:::o;34382:732::-;34501:3;34530:54;34578:5;34530:54;:::i;:::-;34600:86;34679:6;34674:3;34600:86;:::i;:::-;34593:93;;34710:56;34760:5;34710:56;:::i;:::-;34789:7;34820:1;34805:284;34830:6;34827:1;34824:13;34805:284;;;34906:6;34900:13;34933:63;34992:3;34977:13;34933:63;:::i;:::-;34926:70;;35019:60;35072:6;35019:60;:::i;:::-;35009:70;;34865:224;34852:1;34849;34845:9;34840:14;;34805:284;;;34809:14;35105:3;35098:10;;34506:608;;;34382:732;;;;:::o;35120:831::-;35383:4;35421:3;35410:9;35406:19;35398:27;;35435:71;35503:1;35492:9;35488:17;35479:6;35435:71;:::i;:::-;35516:80;35592:2;35581:9;35577:18;35568:6;35516:80;:::i;:::-;35643:9;35637:4;35633:20;35628:2;35617:9;35613:18;35606:48;35671:108;35774:4;35765:6;35671:108;:::i;:::-;35663:116;;35789:72;35857:2;35846:9;35842:18;35833:6;35789:72;:::i;:::-;35871:73;35939:3;35928:9;35924:19;35915:6;35871:73;:::i;:::-;35120:831;;;;;;;;:::o;35957:442::-;36106:4;36144:2;36133:9;36129:18;36121:26;;36157:71;36225:1;36214:9;36210:17;36201:6;36157:71;:::i;:::-;36238:72;36306:2;36295:9;36291:18;36282:6;36238:72;:::i;:::-;36320;36388:2;36377:9;36373:18;36364:6;36320:72;:::i;:::-;35957:442;;;;;;:::o

Swarm Source

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