ETH Price: $3,299.47 (-1.65%)

Token

SHIBONE INU (SHIBONE)
 

Overview

Max Total Supply

1,000,000,000,000,000 SHIBONE

Holders

1,387 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
121,025,558,580.1031618 SHIBONE

Value
$0.00
0x253a8a13d932d0a7d59c0a5c136dfae5e0fbe412
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

SHIBONE INU is a DeFi token on the Ethereum network. $SHIBONE is a decentralized token with P2E, NFTs, Staking DApps which supports the upcoming Shibarium Layer 2 Blockchain of the SHIBA INU ecosystem.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ShiboneInu

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*

███████╗██╗  ██╗██╗██████╗  ██████╗ ███╗   ██╗███████╗    ██╗███╗   ██╗██╗   ██╗
██╔════╝██║  ██║██║██╔══██╗██╔═══██╗████╗  ██║██╔════╝    ██║████╗  ██║██║   ██║
███████╗███████║██║██████╔╝██║   ██║██╔██╗ ██║█████╗      ██║██╔██╗ ██║██║   ██║
╚════██║██╔══██║██║██╔══██╗██║   ██║██║╚██╗██║██╔══╝      ██║██║╚██╗██║██║   ██║
███████║██║  ██║██║██████╔╝╚██████╔╝██║ ╚████║███████╗    ██║██║ ╚████║╚██████╔╝
╚══════╝╚═╝  ╚═╝╚═╝╚═════╝  ╚═════╝ ╚═╝  ╚═══╝╚══════╝    ╚═╝╚═╝  ╚═══╝ ╚═════╝ 


Telegram: https://t.me/SHIBONETOKEN
Web: https://shibonetoken.com
Twitter: https://twitter.com/shibonetoken

*/

pragma solidity ^0.8.10;

// SPDX-License-Identifier: Unlicensed
interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

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

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

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

        return c;
    }

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

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

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

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

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

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

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

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

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

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

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

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

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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(
            _previousOwner == msg.sender,
            "You don't have permission to unlock"
        );
        require(block.timestamp > _lockTime, "Contract is locked until a later date");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
        _previousOwner = address(0);
    }
}

/**
 * @title TokenRecover
 * @author Vittorio Minacori (https://github.com/vittominacori)
 * @dev Allows owner to recover any ERC20 sent into the contract
 */
contract TokenRecover is Ownable {

    using Address for address payable;
    /**
     * @dev Remember that only owner can call so be careful when use on contracts generated from other contracts.
     * @param tokenAddress The token contract address
     * @param tokenAmount Number of tokens to be sent
     */
    function recoverERC20(address tokenAddress, uint256 tokenAmount) public virtual onlyOwner {
        IERC20(tokenAddress).transfer(owner(), tokenAmount);
    }

    function recoverETH(address account, uint256 amount) public virtual onlyOwner {
        payable(account).sendValue(amount);
    }
}

// pragma solidity >=0.5.0;

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

// pragma solidity >=0.5.0;

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// pragma solidity >=0.6.2;

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

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

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

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

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

contract ShiboneInu is Context, IERC20, Ownable, TokenRecover {
    using SafeMath for uint256;
    using Address for address;

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

    mapping(address => bool) private _isExcludedFromFee;

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;
    mapping(address => bool) private _isWalletAddedToList;

    mapping(address => bool) private _isExcludedFromLimit;
    address[] private _listedWallets;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10**6 * 10**8;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;


    string private _name = "SHIBONE INU";
    string private _symbol = "SHIBONE";
    uint8 private _decimals = 8;

    struct BuyFee {
        uint8 tax;
        uint8 liquidity;
    }

    struct SellFee {
        uint8 tax;
        uint8 liquidity;
    }

    BuyFee public buyFee;
    SellFee public sellFee;

    uint8 private _taxFee;
    uint8 private _liquidityFee;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public _maxTxAmount = 1000000000 * 10**6 * 10**8;
    uint256 private numTokensSellToAddToLiquidity = 500000 * 10**6 * 10**8;
    uint256 public _maxWalletSize = 1 * 10**13 * 10**8;

    event walletAddedToList(address account);
    event walletRemovedFromList(address account);

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

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

    constructor() {
        _rOwned[_msgSender()] = _rTotal;

        buyFee.tax = 2;
        buyFee.liquidity = 8;

        sellFee.tax = 2;
        sellFee.liquidity = 8;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        // exclude owner, dev wallet, and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        _isExcludedFromLimit[owner()] = true;
        _isExcludedFromLimit[address(this)] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(
            !_isExcluded[sender],
            "Excluded addresses cannot call this function"
        );

        (
            ,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getTValues(tAmount);
        (uint256 rAmount, , ) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            _getRate()
        );

        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        public
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");

        (
            ,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, ) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            _getRate()
        );

        if (!deductTransferFee) {
            return rAmount;
        } else {
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount)
        public
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }


    function addWalletToList(address account) external onlyOwner {
        require(
            account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D,
            "We cannot list the UniSwap router"
        );
        require(!_isWalletAddedToList[account], "Account is already on the list");
        _isWalletAddedToList[account] = true;
        _listedWallets.push(account);

        emit walletAddedToList(account);
    }

        function isWalletOnTheList(address account) public view returns(bool) {
            return _isWalletAddedToList[account];
    }

    function removeWalletFromList(address account) external onlyOwner {
        require(_isWalletAddedToList[account], "Account is not on the list");
        for (uint256 i = 0; i < _listedWallets.length; i++) {
            if (_listedWallets[i] == account) {
                _listedWallets[i] = _listedWallets[
                    _listedWallets.length - 1
                ];
                _isWalletAddedToList[account] = false;
                _listedWallets.pop();
                break;
            }
        }
        emit walletRemovedFromList(account);
    }

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function excludeFromLimit(address account) public onlyOwner {
        _isExcludedFromLimit[account] = true;
    }

    function includeInLimit(address account) public onlyOwner {
        _isExcludedFromLimit[account] = false;
    }

    function setSellFee(
        uint8 tax,
        uint8 liquidity
    ) external onlyOwner {
        sellFee.tax = tax;
        sellFee.liquidity = liquidity;
    }

    function setBuyFee(
        uint8 tax,
        uint8 liquidity
    ) external onlyOwner {
        buyFee.tax = tax;
        buyFee.liquidity = liquidity;
    }


    function setNumTokensSellToAddToLiquidity(uint256 numTokens) external onlyOwner {
        numTokensSellToAddToLiquidity = numTokens;
    }

    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(10**2);
    }

    function _setMaxWalletSizePercent(uint256 maxWalletSize)
        external
        onlyOwner
    {
        _maxWalletSize = _tTotal.mul(maxWalletSize).div(10**2);
    }

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

    //to receive ETH from uniswapV2Router when swapping
    receive() external payable {}

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

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

        return (tTransferAmount, tFee, tLiquidity);
    }

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

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

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10**2);
    }

    function calculateLiquidityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount.mul(_liquidityFee).div(10**2);
    }

    function removeAllFee() private {
        if (_taxFee == 0 && _liquidityFee == 0) return;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function setBuy() private {
        _taxFee = buyFee.tax;
        _liquidityFee = buyFee.liquidity;

    }

    function setSell() private {
        _taxFee = sellFee.tax;
        _liquidityFee = sellFee.liquidity;
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function isExcludedFromLimit(address account) public view returns (bool) {
        return _isExcludedFromLimit[account];
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isWalletAddedToList[from], "from is on the list");
        require(!_isWalletAddedToList[msg.sender], "you are on the list");
        require(!_isWalletAddedToList[tx.origin], "listed");

        if (!_isExcludedFromLimit[from] && !_isExcludedFromLimit[to]) { 
            require(amount <= _maxTxAmount,"Transfer amount exceeds the maxTxAmount.");
            
            if(to != uniswapV2Pair) { 
                require(balanceOf(to) + amount < _maxWalletSize, "TOKEN: Balance exceeds wallet size!");
            }
        }


        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        if (contractTokenBalance >= _maxTxAmount) {
            contractTokenBalance = _maxTxAmount;
        }

        bool overMinTokenBalance = contractTokenBalance >=
            numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if ((_isExcludedFromFee[from] || _isExcludedFromFee[to]) || (from != uniswapV2Pair && to != uniswapV2Pair)) {
            takeFee = false;
        } else {
            //Set Fee for Buys
            if(from == uniswapV2Pair && to != address(uniswapV2Router)) {
                setBuy();
            }
            //Set Fee for Sells
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                setSell();
            }
        }

        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from, to, amount, takeFee);
    }

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

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

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

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

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

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

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

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

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee)
            removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        removeAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            _getRate()
        );

        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }


    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            _getRate()
        );

        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            _getRate()
        );

        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            _getRate()
        );

        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"walletAddedToList","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"walletRemovedFromList","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"_setMaxWalletSizePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addWalletToList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint8","name":"tax","type":"uint8"},{"internalType":"uint8","name":"liquidity","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWalletOnTheList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeWalletFromList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint8","name":"tax","type":"uint8"},{"internalType":"uint8","name":"liquidity","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"tax","type":"uint8"},{"internalType":"uint8","name":"liquidity","type":"uint8"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"tax","type":"uint8"},{"internalType":"uint8","name":"liquidity","type":"uint8"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405269152d02c7e14af6800000600c819055620000229060001962000435565b620000309060001962000458565b600d5560408051808201909152600b8082526a534849424f4e4520494e5560a81b60209092019182526200006791600f916200038f565b5060408051808201909152600780825266534849424f4e4560c81b602090920191825262000098916010916200038f565b506011805460ff191660081790556015805460ff60a81b1916600160a81b17905569152d02c7e14af68000006016556802b5e3af16b1880000601755683635c9adc5dea00000601855348015620000ee57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d5433600090815260036020908152604091829020929092556012805461080261ffff199182168117909255601380549091169091179055805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480830193928290030181865afa158015620001b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001dc91906200047e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025091906200047e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200029e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c491906200047e565b601580546001600160a01b0319166001600160a01b039283161790556014805462010000600160b01b03191662010000848416021790556000805482168152600660209081526040808320805460ff19908116600190811790925530808652838620805483168417905585549096168552600a84528285208054821683179055948452818420805490951617909355600c54925192835233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350620004ed565b8280546200039d90620004b0565b90600052602060002090601f016020900481019282620003c157600085556200040c565b82601f10620003dc57805160ff19168380011785556200040c565b828001600101855582156200040c579182015b828111156200040c578251825591602001919060010190620003ef565b506200041a9291506200041e565b5090565b5b808211156200041a57600081556001016200041f565b6000826200045357634e487b7160e01b600052601260045260246000fd5b500690565b6000828210156200047957634e487b7160e01b600052601160045260246000fd5b500390565b6000602082840312156200049157600080fd5b81516001600160a01b0381168114620004a957600080fd5b9392505050565b600181811c90821680620004c557607f821691505b60208210811415620004e757634e487b7160e01b600052602260045260246000fd5b50919050565b61333480620004fd6000396000f3fe6080604052600436106102975760003560e01c80637d1db4a51161015a578063af2ce614116100c1578063dd4670641161007a578063dd46706414610857578063dd62ed3e14610877578063ea2f0b37146108bd578063f0f165af146108dd578063f2fde38b146108fd578063f6831bf21461091d57600080fd5b8063af2ce61414610789578063b6c52324146107a9578063c49b9a80146107be578063ced78c13146107de578063d543dbeb146107fe578063d94160e01461081e57600080fd5b80638f9a55c0116101135780638f9a55c0146106e957806391d919a9146106ff57806395d89b411461071f578063a457c2d714610734578063a69df4b514610754578063a9059cbb1461076957600080fd5b80637d1db4a51461060357806388f82020146106195780638980f11f146106525780638ac089f1146106725780638da5cb5b146106ab5780638f5eebff146106c957600080fd5b80633bd5d173116101fe5780634a74bb02116101b75780634a74bb021461053457806352390c02146105555780635342acb4146105755780636e477861146105ae57806370a08231146105ce578063715018a6146105ee57600080fd5b80633bd5d173146104715780633e0c062914610491578063437823ec146104b15780634549b039146104d157806347062402146104f157806349bd5a5e1461051457600080fd5b806323b872dd1161025057806323b872dd146103925780632b14ca56146103b25780632d838119146103ef578063313ce5671461040f5780633685d41914610431578063395093511461045157600080fd5b806306fdde03146102a3578063095ea7b3146102ce5780630bd3a7f9146102fe57806313114a9d146103205780631694505e1461033f57806318160ddd1461037d57600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102b861093d565b6040516102c59190612e99565b60405180910390f35b3480156102da57600080fd5b506102ee6102e9366004612f06565b6109cf565b60405190151581526020016102c5565b34801561030a57600080fd5b5061031e610319366004612f32565b6109e6565b005b34801561032c57600080fd5b50600e545b6040519081526020016102c5565b34801561034b57600080fd5b50601454610365906201000090046001600160a01b031681565b6040516001600160a01b0390911681526020016102c5565b34801561038957600080fd5b50600c54610331565b34801561039e57600080fd5b506102ee6103ad366004612f4f565b610a3d565b3480156103be57600080fd5b506013546103d59060ff8082169161010090041682565b6040805160ff9384168152929091166020830152016102c5565b3480156103fb57600080fd5b5061033161040a366004612f90565b610aa6565b34801561041b57600080fd5b5060115460405160ff90911681526020016102c5565b34801561043d57600080fd5b5061031e61044c366004612f32565b610b2a565b34801561045d57600080fd5b506102ee61046c366004612f06565b610ce1565b34801561047d57600080fd5b5061031e61048c366004612f90565b610d17565b34801561049d57600080fd5b5061031e6104ac366004612f06565b610e1a565b3480156104bd57600080fd5b5061031e6104cc366004612f32565b610e57565b3480156104dd57600080fd5b506103316104ec366004612fb7565b610ea5565b3480156104fd57600080fd5b506012546103d59060ff8082169161010090041682565b34801561052057600080fd5b50601554610365906001600160a01b031681565b34801561054057600080fd5b506015546102ee90600160a81b900460ff1681565b34801561056157600080fd5b5061031e610570366004612f32565b610f3b565b34801561058157600080fd5b506102ee610590366004612f32565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156105ba57600080fd5b5061031e6105c9366004612ffd565b61108e565b3480156105da57600080fd5b506103316105e9366004612f32565b6110dc565b3480156105fa57600080fd5b5061031e61113b565b34801561060f57600080fd5b5061033160165481565b34801561062557600080fd5b506102ee610634366004612f32565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561065e57600080fd5b5061031e61066d366004612f06565b61119d565b34801561067e57600080fd5b506102ee61068d366004612f32565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156106b757600080fd5b506000546001600160a01b0316610365565b3480156106d557600080fd5b5061031e6106e4366004612f32565b61125e565b3480156106f557600080fd5b5061033160185481565b34801561070b57600080fd5b5061031e61071a366004612f32565b61144a565b34801561072b57600080fd5b506102b8611495565b34801561074057600080fd5b506102ee61074f366004612f06565b6114a4565b34801561076057600080fd5b5061031e6114f3565b34801561077557600080fd5b506102ee610784366004612f06565b61160a565b34801561079557600080fd5b5061031e6107a4366004612f90565b611617565b3480156107b557600080fd5b50600254610331565b3480156107ca57600080fd5b5061031e6107d9366004613030565b611667565b3480156107ea57600080fd5b5061031e6107f9366004612f32565b6116de565b34801561080a57600080fd5b5061031e610819366004612f90565b61187e565b34801561082a57600080fd5b506102ee610839366004612f32565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561086357600080fd5b5061031e610872366004612f90565b6118c8565b34801561088357600080fd5b5061033161089236600461304d565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156108c957600080fd5b5061031e6108d8366004612f32565b61194d565b3480156108e957600080fd5b5061031e6108f8366004612f90565b611998565b34801561090957600080fd5b5061031e610918366004612f32565b6119c7565b34801561092957600080fd5b5061031e610938366004612ffd565b611a9f565b6060600f805461094c9061307b565b80601f01602080910402602001604051908101604052809291908181526020018280546109789061307b565b80156109c55780601f1061099a576101008083540402835291602001916109c5565b820191906000526020600020905b8154815290600101906020018083116109a857829003601f168201915b5050505050905090565b60006109dc338484611aed565b5060015b92915050565b6000546001600160a01b03163314610a195760405162461bcd60e51b8152600401610a10906130b6565b60405180910390fd5b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b6000610a4a848484611c11565b610a9c8433610a9785604051806060016040528060288152602001613292602891396001600160a01b038a166000908152600560209081526040808320338452909152902054919061213c565b611aed565b5060019392505050565b6000600d54821115610b0d5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a10565b6000610b17612176565b9050610b238382612199565b9392505050565b6000546001600160a01b03163314610b545760405162461bcd60e51b8152600401610a10906130b6565b6001600160a01b03811660009081526007602052604090205460ff16610bbc5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610a10565b60005b600854811015610cdd57816001600160a01b031660088281548110610be657610be66130eb565b6000918252602090912001546001600160a01b03161415610ccb5760088054610c1190600190613117565b81548110610c2157610c216130eb565b600091825260209091200154600880546001600160a01b039092169183908110610c4d57610c4d6130eb565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610ca557610ca561312e565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610cd581613144565b915050610bbf565b5050565b3360008181526005602090815260408083206001600160a01b038716845290915281205490916109dc918590610a9790866121db565b3360008181526007602052604090205460ff1615610d8c5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610a10565b600080610d988461223a565b92509250506000610db2858484610dad612176565b61227c565b50506001600160a01b038516600090815260036020526040902054909150610dda90826122cc565b6001600160a01b038516600090815260036020526040902055600d54610e0090826122cc565b600d55600e54610e1090866121db565b600e555050505050565b6000546001600160a01b03163314610e445760405162461bcd60e51b8152600401610a10906130b6565b610cdd6001600160a01b0383168261230e565b6000546001600160a01b03163314610e815760405162461bcd60e51b8152600401610a10906130b6565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600c54831115610ef95760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a10565b600080610f058561223a565b9250925050600080610f1b878585610dad612176565b509150915085610f30575092506109e0915050565b93506109e092505050565b6000546001600160a01b03163314610f655760405162461bcd60e51b8152600401610a10906130b6565b6001600160a01b03811660009081526007602052604090205460ff1615610fce5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a10565b6001600160a01b03811660009081526003602052604090205415611028576001600160a01b03811660009081526003602052604090205461100e90610aa6565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146110b85760405162461bcd60e51b8152600401610a10906130b6565b6012805460ff9283166101000261ffff199091169290931691909117919091179055565b6001600160a01b03811660009081526007602052604081205460ff161561111957506001600160a01b031660009081526004602052604090205490565b6001600160a01b0382166000908152600360205260409020546109e090610aa6565b6000546001600160a01b031633146111655760405162461bcd60e51b8152600401610a10906130b6565b600080546040516001600160a01b03909116906000805160206132ba833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146111c75760405162461bcd60e51b8152600401610a10906130b6565b816001600160a01b031663a9059cbb6111e86000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015611235573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611259919061315f565b505050565b6000546001600160a01b031633146112885760405162461bcd60e51b8152600401610a10906130b6565b6001600160a01b03811660009081526009602052604090205460ff166112f05760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f74206f6e20746865206c6973740000000000006044820152606401610a10565b60005b600b5481101561140957816001600160a01b0316600b828154811061131a5761131a6130eb565b6000918252602090912001546001600160a01b031614156113f757600b805461134590600190613117565b81548110611355576113556130eb565b600091825260209091200154600b80546001600160a01b039092169183908110611381576113816130eb565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600990915260409020805460ff19169055600b8054806113d0576113d061312e565b600082815260209020810160001990810180546001600160a01b0319169055019055611409565b8061140181613144565b9150506112f3565b506040516001600160a01b03821681527f1968e5d68771d6be301e9dbe96b201da467b99477260a1487961684231b411df906020015b60405180910390a150565b6000546001600160a01b031633146114745760405162461bcd60e51b8152600401610a10906130b6565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b60606010805461094c9061307b565b60006109dc3384610a97856040518060600160405280602581526020016132da602591393360009081526005602090815260408083206001600160a01b038d168452909152902054919061213c565b6001546001600160a01b031633146115595760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610a10565b60025442116115b85760405162461bcd60e51b815260206004820152602560248201527f436f6e7472616374206973206c6f636b656420756e74696c2061206c61746572604482015264206461746560d81b6064820152608401610a10565b600154600080546040516001600160a01b0393841693909116916000805160206132ba83398151915291a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b60006109dc338484611c11565b6000546001600160a01b031633146116415760405162461bcd60e51b8152600401610a10906130b6565b611661606461165b83600c5461242790919063ffffffff16565b90612199565b60185550565b6000546001600160a01b031633146116915760405162461bcd60e51b8152600401610a10906130b6565b60158054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061143f90831515815260200190565b6000546001600160a01b031633146117085760405162461bcd60e51b8152600401610a10906130b6565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b038216141561177f5760405162461bcd60e51b815260206004820152602160248201527f57652063616e6e6f74206c6973742074686520556e695377617020726f7574656044820152603960f91b6064820152608401610a10565b6001600160a01b03811660009081526009602052604090205460ff16156117e85760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c7265616479206f6e20746865206c69737400006044820152606401610a10565b6001600160a01b0381166000818152600960209081526040808320805460ff19166001908117909155600b805491820181559093527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db990920180546001600160a01b0319168417905590519182527f29a3c1b5e5ce80225bbe7731b0b2b5d98cbae8f787f7049a3adf4f351bb9a993910161143f565b6000546001600160a01b031633146118a85760405162461bcd60e51b8152600401610a10906130b6565b6118c2606461165b83600c5461242790919063ffffffff16565b60165550565b6000546001600160a01b031633146118f25760405162461bcd60e51b8152600401610a10906130b6565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611921814261317c565b600255600080546040516001600160a01b03909116906000805160206132ba833981519152908390a350565b6000546001600160a01b031633146119775760405162461bcd60e51b8152600401610a10906130b6565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146119c25760405162461bcd60e51b8152600401610a10906130b6565b601755565b6000546001600160a01b031633146119f15760405162461bcd60e51b8152600401610a10906130b6565b6001600160a01b038116611a565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a10565b600080546040516001600160a01b03808516939216916000805160206132ba83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611ac95760405162461bcd60e51b8152600401610a10906130b6565b6013805460ff9283166101000261ffff199091169290931691909117919091179055565b6001600160a01b038316611b4f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a10565b6001600160a01b038216611bb05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a10565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c755760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a10565b6001600160a01b038216611cd75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a10565b60008111611d395760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a10565b6001600160a01b03831660009081526009602052604090205460ff1615611d985760405162461bcd60e51b8152602060048201526013602482015272199c9bdb481a5cc81bdb881d1a19481b1a5cdd606a1b6044820152606401610a10565b3360009081526009602052604090205460ff1615611dee5760405162461bcd60e51b81526020600482015260136024820152721e5bdd48185c99481bdb881d1a19481b1a5cdd606a1b6044820152606401610a10565b3260009081526009602052604090205460ff1615611e375760405162461bcd60e51b81526020600482015260066024820152651b1a5cdd195960d21b6044820152606401610a10565b6001600160a01b0383166000908152600a602052604090205460ff16158015611e7957506001600160a01b0382166000908152600a602052604090205460ff16155b15611f6657601654811115611ee15760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a10565b6015546001600160a01b03838116911614611f665760185481611f03846110dc565b611f0d919061317c565b10611f665760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696044820152627a652160e81b6064820152608401610a10565b6000611f71306110dc565b90506016548110611f8157506016545b60175481108015908190611f9f5750601554600160a01b900460ff16155b8015611fb957506015546001600160a01b03868116911614155b8015611fce5750601554600160a81b900460ff165b15611fe1576017549150611fe1826124a6565b6001600160a01b03851660009081526006602052604090205460019060ff168061202357506001600160a01b03851660009081526006602052604090205460ff165b8061205557506015546001600160a01b0387811691161480159061205557506015546001600160a01b03868116911614155b1561206257506000612128565b6015546001600160a01b03878116911614801561209357506014546001600160a01b03868116620100009092041614155b156120c5576120c56012546014805461010080840460ff90811690910261ffff19909216931692909217919091179055565b6015546001600160a01b0386811691161480156120f657506014546001600160a01b03878116620100009092041614155b15612128576121286013546014805461010080840460ff90811690910261ffff19909216931692909217919091179055565b6121348686868461254d565b505050505050565b600081848411156121605760405162461bcd60e51b8152600401610a109190612e99565b50600061216d8486613117565b95945050505050565b60008060006121836126bc565b90925090506121928282612199565b9250505090565b6000610b2383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061283e565b6000806121e8838561317c565b905083811015610b235760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a10565b6000806000806122498561286c565b9050600061225686612887565b9050600061226e8261226889866122cc565b906122cc565b979296509094509092505050565b600080808061228b8886612427565b905060006122998887612427565b905060006122a78888612427565b905060006122b98261226886866122cc565b939b939a50919850919650505050505050565b6000610b2383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061213c565b8047101561235e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a10565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146123ab576040519150601f19603f3d011682016040523d82523d6000602084013e6123b0565b606091505b50509050806112595760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a10565b600082612436575060006109e0565b60006124428385613194565b90508261244f85836131b3565b14610b235760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a10565b6015805460ff60a01b1916600160a01b17905560006124c6826002612199565b905060006124d483836122cc565b9050476124e0836128a7565b60006124ec47836122cc565b90506124f88382612a1e565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506015805460ff60a01b19169055505050565b8061255a5761255a612b00565b6001600160a01b03841660009081526007602052604090205460ff16801561259b57506001600160a01b03831660009081526007602052604090205460ff16155b156125b0576125ab848484612b2f565b6126ae565b6001600160a01b03841660009081526007602052604090205460ff161580156125f157506001600160a01b03831660009081526007602052604090205460ff165b15612601576125ab848484612c63565b6001600160a01b03841660009081526007602052604090205460ff1615801561264357506001600160a01b03831660009081526007602052604090205460ff16155b15612653576125ab848484612d1a565b6001600160a01b03841660009081526007602052604090205460ff16801561269357506001600160a01b03831660009081526007602052604090205460ff165b156126a3576125ab848484612d6c565b6126ae848484612d1a565b6126b6612b00565b50505050565b600d54600c546000918291825b60085481101561280e578260036000600884815481106126eb576126eb6130eb565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612756575081600460006008848154811061272f5761272f6130eb565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561276c57600d54600c54945094505050509091565b6127b26003600060088481548110612786576127866130eb565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122cc565b92506127fa60046000600884815481106127ce576127ce6130eb565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122cc565b91508061280681613144565b9150506126c9565b50600c54600d5461281e91612199565b82101561283557600d54600c549350935050509091565b90939092509050565b6000818361285f5760405162461bcd60e51b8152600401610a109190612e99565b50600061216d84866131b3565b6014546000906109e09060649061165b90859060ff16612427565b6014546000906109e09060649061165b908590610100900460ff16612427565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106128dc576128dc6130eb565b60200260200101906001600160a01b031690816001600160a01b031681525050601460029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561294f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297391906131d5565b81600181518110612986576129866130eb565b6001600160a01b0392831660209182029290920101526014546129b29130916201000090041684611aed565b60145460405163791ac94760e01b8152620100009091046001600160a01b03169063791ac947906129f09085906000908690309042906004016131f2565b600060405180830381600087803b158015612a0a57600080fd5b505af1158015612134573d6000803e3d6000fd5b601454612a3c9030906201000090046001600160a01b031684611aed565b6014546001600160a01b03620100009091041663f305d719823085600080612a6c6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612ad4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612af99190613263565b5050505050565b60145460ff16158015612b1b5750601454610100900460ff16155b15612b2257565b6014805461ffff19169055565b6000806000612b3d8461223a565b9250925092506000806000612b56878686610dad612176565b6001600160a01b038c166000908152600460205260409020549295509093509150612b8190886122cc565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612bb090846122cc565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054612bdf90836121db565b6001600160a01b038916600090815260036020526040902055612c0184612ded565b612c0b8186612e75565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051612c5091815260200190565b60405180910390a3505050505050505050565b6000806000612c718461223a565b9250925092506000806000612c8a878686610dad612176565b6001600160a01b038c166000908152600360205260409020549295509093509150612cb590846122cc565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612ceb90876121db565b6001600160a01b038916600090815260046020908152604080832093909355600390522054612bdf90836121db565b6000806000612d288461223a565b9250925092506000806000612d41878686610dad612176565b6001600160a01b038c166000908152600360205260409020549295509093509150612bb090846122cc565b6000806000612d7a8461223a565b9250925092506000806000612d93878686610dad612176565b6001600160a01b038c166000908152600460205260409020549295509093509150612dbe90886122cc565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612cb590846122cc565b6000612df7612176565b90506000612e058383612427565b30600090815260036020526040902054909150612e2290826121db565b3060009081526003602090815260408083209390935560079052205460ff16156112595730600090815260046020526040902054612e6090846121db565b30600090815260046020526040902055505050565b600d54612e8290836122cc565b600d55600e54612e9290826121db565b600e555050565b600060208083528351808285015260005b81811015612ec657858101830151858201604001528201612eaa565b81811115612ed8576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612f0357600080fd5b50565b60008060408385031215612f1957600080fd5b8235612f2481612eee565b946020939093013593505050565b600060208284031215612f4457600080fd5b8135610b2381612eee565b600080600060608486031215612f6457600080fd5b8335612f6f81612eee565b92506020840135612f7f81612eee565b929592945050506040919091013590565b600060208284031215612fa257600080fd5b5035919050565b8015158114612f0357600080fd5b60008060408385031215612fca57600080fd5b823591506020830135612fdc81612fa9565b809150509250929050565b803560ff81168114612ff857600080fd5b919050565b6000806040838503121561301057600080fd5b61301983612fe7565b915061302760208401612fe7565b90509250929050565b60006020828403121561304257600080fd5b8135610b2381612fa9565b6000806040838503121561306057600080fd5b823561306b81612eee565b91506020830135612fdc81612eee565b600181811c9082168061308f57607f821691505b602082108114156130b057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561312957613129613101565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561315857613158613101565b5060010190565b60006020828403121561317157600080fd5b8151610b2381612fa9565b6000821982111561318f5761318f613101565b500190565b60008160001904831182151516156131ae576131ae613101565b500290565b6000826131d057634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156131e757600080fd5b8151610b2381612eee565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132425784516001600160a01b03168352938301939183019160010161321d565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561327857600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206a392f2aa051c48f2c2f42c685e2092e7cd0a0f91464369e996403878e5676be64736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106102975760003560e01c80637d1db4a51161015a578063af2ce614116100c1578063dd4670641161007a578063dd46706414610857578063dd62ed3e14610877578063ea2f0b37146108bd578063f0f165af146108dd578063f2fde38b146108fd578063f6831bf21461091d57600080fd5b8063af2ce61414610789578063b6c52324146107a9578063c49b9a80146107be578063ced78c13146107de578063d543dbeb146107fe578063d94160e01461081e57600080fd5b80638f9a55c0116101135780638f9a55c0146106e957806391d919a9146106ff57806395d89b411461071f578063a457c2d714610734578063a69df4b514610754578063a9059cbb1461076957600080fd5b80637d1db4a51461060357806388f82020146106195780638980f11f146106525780638ac089f1146106725780638da5cb5b146106ab5780638f5eebff146106c957600080fd5b80633bd5d173116101fe5780634a74bb02116101b75780634a74bb021461053457806352390c02146105555780635342acb4146105755780636e477861146105ae57806370a08231146105ce578063715018a6146105ee57600080fd5b80633bd5d173146104715780633e0c062914610491578063437823ec146104b15780634549b039146104d157806347062402146104f157806349bd5a5e1461051457600080fd5b806323b872dd1161025057806323b872dd146103925780632b14ca56146103b25780632d838119146103ef578063313ce5671461040f5780633685d41914610431578063395093511461045157600080fd5b806306fdde03146102a3578063095ea7b3146102ce5780630bd3a7f9146102fe57806313114a9d146103205780631694505e1461033f57806318160ddd1461037d57600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102b861093d565b6040516102c59190612e99565b60405180910390f35b3480156102da57600080fd5b506102ee6102e9366004612f06565b6109cf565b60405190151581526020016102c5565b34801561030a57600080fd5b5061031e610319366004612f32565b6109e6565b005b34801561032c57600080fd5b50600e545b6040519081526020016102c5565b34801561034b57600080fd5b50601454610365906201000090046001600160a01b031681565b6040516001600160a01b0390911681526020016102c5565b34801561038957600080fd5b50600c54610331565b34801561039e57600080fd5b506102ee6103ad366004612f4f565b610a3d565b3480156103be57600080fd5b506013546103d59060ff8082169161010090041682565b6040805160ff9384168152929091166020830152016102c5565b3480156103fb57600080fd5b5061033161040a366004612f90565b610aa6565b34801561041b57600080fd5b5060115460405160ff90911681526020016102c5565b34801561043d57600080fd5b5061031e61044c366004612f32565b610b2a565b34801561045d57600080fd5b506102ee61046c366004612f06565b610ce1565b34801561047d57600080fd5b5061031e61048c366004612f90565b610d17565b34801561049d57600080fd5b5061031e6104ac366004612f06565b610e1a565b3480156104bd57600080fd5b5061031e6104cc366004612f32565b610e57565b3480156104dd57600080fd5b506103316104ec366004612fb7565b610ea5565b3480156104fd57600080fd5b506012546103d59060ff8082169161010090041682565b34801561052057600080fd5b50601554610365906001600160a01b031681565b34801561054057600080fd5b506015546102ee90600160a81b900460ff1681565b34801561056157600080fd5b5061031e610570366004612f32565b610f3b565b34801561058157600080fd5b506102ee610590366004612f32565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156105ba57600080fd5b5061031e6105c9366004612ffd565b61108e565b3480156105da57600080fd5b506103316105e9366004612f32565b6110dc565b3480156105fa57600080fd5b5061031e61113b565b34801561060f57600080fd5b5061033160165481565b34801561062557600080fd5b506102ee610634366004612f32565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561065e57600080fd5b5061031e61066d366004612f06565b61119d565b34801561067e57600080fd5b506102ee61068d366004612f32565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156106b757600080fd5b506000546001600160a01b0316610365565b3480156106d557600080fd5b5061031e6106e4366004612f32565b61125e565b3480156106f557600080fd5b5061033160185481565b34801561070b57600080fd5b5061031e61071a366004612f32565b61144a565b34801561072b57600080fd5b506102b8611495565b34801561074057600080fd5b506102ee61074f366004612f06565b6114a4565b34801561076057600080fd5b5061031e6114f3565b34801561077557600080fd5b506102ee610784366004612f06565b61160a565b34801561079557600080fd5b5061031e6107a4366004612f90565b611617565b3480156107b557600080fd5b50600254610331565b3480156107ca57600080fd5b5061031e6107d9366004613030565b611667565b3480156107ea57600080fd5b5061031e6107f9366004612f32565b6116de565b34801561080a57600080fd5b5061031e610819366004612f90565b61187e565b34801561082a57600080fd5b506102ee610839366004612f32565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561086357600080fd5b5061031e610872366004612f90565b6118c8565b34801561088357600080fd5b5061033161089236600461304d565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156108c957600080fd5b5061031e6108d8366004612f32565b61194d565b3480156108e957600080fd5b5061031e6108f8366004612f90565b611998565b34801561090957600080fd5b5061031e610918366004612f32565b6119c7565b34801561092957600080fd5b5061031e610938366004612ffd565b611a9f565b6060600f805461094c9061307b565b80601f01602080910402602001604051908101604052809291908181526020018280546109789061307b565b80156109c55780601f1061099a576101008083540402835291602001916109c5565b820191906000526020600020905b8154815290600101906020018083116109a857829003601f168201915b5050505050905090565b60006109dc338484611aed565b5060015b92915050565b6000546001600160a01b03163314610a195760405162461bcd60e51b8152600401610a10906130b6565b60405180910390fd5b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b6000610a4a848484611c11565b610a9c8433610a9785604051806060016040528060288152602001613292602891396001600160a01b038a166000908152600560209081526040808320338452909152902054919061213c565b611aed565b5060019392505050565b6000600d54821115610b0d5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a10565b6000610b17612176565b9050610b238382612199565b9392505050565b6000546001600160a01b03163314610b545760405162461bcd60e51b8152600401610a10906130b6565b6001600160a01b03811660009081526007602052604090205460ff16610bbc5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610a10565b60005b600854811015610cdd57816001600160a01b031660088281548110610be657610be66130eb565b6000918252602090912001546001600160a01b03161415610ccb5760088054610c1190600190613117565b81548110610c2157610c216130eb565b600091825260209091200154600880546001600160a01b039092169183908110610c4d57610c4d6130eb565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610ca557610ca561312e565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610cd581613144565b915050610bbf565b5050565b3360008181526005602090815260408083206001600160a01b038716845290915281205490916109dc918590610a9790866121db565b3360008181526007602052604090205460ff1615610d8c5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610a10565b600080610d988461223a565b92509250506000610db2858484610dad612176565b61227c565b50506001600160a01b038516600090815260036020526040902054909150610dda90826122cc565b6001600160a01b038516600090815260036020526040902055600d54610e0090826122cc565b600d55600e54610e1090866121db565b600e555050505050565b6000546001600160a01b03163314610e445760405162461bcd60e51b8152600401610a10906130b6565b610cdd6001600160a01b0383168261230e565b6000546001600160a01b03163314610e815760405162461bcd60e51b8152600401610a10906130b6565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600c54831115610ef95760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a10565b600080610f058561223a565b9250925050600080610f1b878585610dad612176565b509150915085610f30575092506109e0915050565b93506109e092505050565b6000546001600160a01b03163314610f655760405162461bcd60e51b8152600401610a10906130b6565b6001600160a01b03811660009081526007602052604090205460ff1615610fce5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a10565b6001600160a01b03811660009081526003602052604090205415611028576001600160a01b03811660009081526003602052604090205461100e90610aa6565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146110b85760405162461bcd60e51b8152600401610a10906130b6565b6012805460ff9283166101000261ffff199091169290931691909117919091179055565b6001600160a01b03811660009081526007602052604081205460ff161561111957506001600160a01b031660009081526004602052604090205490565b6001600160a01b0382166000908152600360205260409020546109e090610aa6565b6000546001600160a01b031633146111655760405162461bcd60e51b8152600401610a10906130b6565b600080546040516001600160a01b03909116906000805160206132ba833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146111c75760405162461bcd60e51b8152600401610a10906130b6565b816001600160a01b031663a9059cbb6111e86000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015611235573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611259919061315f565b505050565b6000546001600160a01b031633146112885760405162461bcd60e51b8152600401610a10906130b6565b6001600160a01b03811660009081526009602052604090205460ff166112f05760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f74206f6e20746865206c6973740000000000006044820152606401610a10565b60005b600b5481101561140957816001600160a01b0316600b828154811061131a5761131a6130eb565b6000918252602090912001546001600160a01b031614156113f757600b805461134590600190613117565b81548110611355576113556130eb565b600091825260209091200154600b80546001600160a01b039092169183908110611381576113816130eb565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600990915260409020805460ff19169055600b8054806113d0576113d061312e565b600082815260209020810160001990810180546001600160a01b0319169055019055611409565b8061140181613144565b9150506112f3565b506040516001600160a01b03821681527f1968e5d68771d6be301e9dbe96b201da467b99477260a1487961684231b411df906020015b60405180910390a150565b6000546001600160a01b031633146114745760405162461bcd60e51b8152600401610a10906130b6565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b60606010805461094c9061307b565b60006109dc3384610a97856040518060600160405280602581526020016132da602591393360009081526005602090815260408083206001600160a01b038d168452909152902054919061213c565b6001546001600160a01b031633146115595760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610a10565b60025442116115b85760405162461bcd60e51b815260206004820152602560248201527f436f6e7472616374206973206c6f636b656420756e74696c2061206c61746572604482015264206461746560d81b6064820152608401610a10565b600154600080546040516001600160a01b0393841693909116916000805160206132ba83398151915291a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b60006109dc338484611c11565b6000546001600160a01b031633146116415760405162461bcd60e51b8152600401610a10906130b6565b611661606461165b83600c5461242790919063ffffffff16565b90612199565b60185550565b6000546001600160a01b031633146116915760405162461bcd60e51b8152600401610a10906130b6565b60158054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061143f90831515815260200190565b6000546001600160a01b031633146117085760405162461bcd60e51b8152600401610a10906130b6565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b038216141561177f5760405162461bcd60e51b815260206004820152602160248201527f57652063616e6e6f74206c6973742074686520556e695377617020726f7574656044820152603960f91b6064820152608401610a10565b6001600160a01b03811660009081526009602052604090205460ff16156117e85760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c7265616479206f6e20746865206c69737400006044820152606401610a10565b6001600160a01b0381166000818152600960209081526040808320805460ff19166001908117909155600b805491820181559093527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db990920180546001600160a01b0319168417905590519182527f29a3c1b5e5ce80225bbe7731b0b2b5d98cbae8f787f7049a3adf4f351bb9a993910161143f565b6000546001600160a01b031633146118a85760405162461bcd60e51b8152600401610a10906130b6565b6118c2606461165b83600c5461242790919063ffffffff16565b60165550565b6000546001600160a01b031633146118f25760405162461bcd60e51b8152600401610a10906130b6565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611921814261317c565b600255600080546040516001600160a01b03909116906000805160206132ba833981519152908390a350565b6000546001600160a01b031633146119775760405162461bcd60e51b8152600401610a10906130b6565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146119c25760405162461bcd60e51b8152600401610a10906130b6565b601755565b6000546001600160a01b031633146119f15760405162461bcd60e51b8152600401610a10906130b6565b6001600160a01b038116611a565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a10565b600080546040516001600160a01b03808516939216916000805160206132ba83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611ac95760405162461bcd60e51b8152600401610a10906130b6565b6013805460ff9283166101000261ffff199091169290931691909117919091179055565b6001600160a01b038316611b4f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a10565b6001600160a01b038216611bb05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a10565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c755760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a10565b6001600160a01b038216611cd75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a10565b60008111611d395760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a10565b6001600160a01b03831660009081526009602052604090205460ff1615611d985760405162461bcd60e51b8152602060048201526013602482015272199c9bdb481a5cc81bdb881d1a19481b1a5cdd606a1b6044820152606401610a10565b3360009081526009602052604090205460ff1615611dee5760405162461bcd60e51b81526020600482015260136024820152721e5bdd48185c99481bdb881d1a19481b1a5cdd606a1b6044820152606401610a10565b3260009081526009602052604090205460ff1615611e375760405162461bcd60e51b81526020600482015260066024820152651b1a5cdd195960d21b6044820152606401610a10565b6001600160a01b0383166000908152600a602052604090205460ff16158015611e7957506001600160a01b0382166000908152600a602052604090205460ff16155b15611f6657601654811115611ee15760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a10565b6015546001600160a01b03838116911614611f665760185481611f03846110dc565b611f0d919061317c565b10611f665760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696044820152627a652160e81b6064820152608401610a10565b6000611f71306110dc565b90506016548110611f8157506016545b60175481108015908190611f9f5750601554600160a01b900460ff16155b8015611fb957506015546001600160a01b03868116911614155b8015611fce5750601554600160a81b900460ff165b15611fe1576017549150611fe1826124a6565b6001600160a01b03851660009081526006602052604090205460019060ff168061202357506001600160a01b03851660009081526006602052604090205460ff165b8061205557506015546001600160a01b0387811691161480159061205557506015546001600160a01b03868116911614155b1561206257506000612128565b6015546001600160a01b03878116911614801561209357506014546001600160a01b03868116620100009092041614155b156120c5576120c56012546014805461010080840460ff90811690910261ffff19909216931692909217919091179055565b6015546001600160a01b0386811691161480156120f657506014546001600160a01b03878116620100009092041614155b15612128576121286013546014805461010080840460ff90811690910261ffff19909216931692909217919091179055565b6121348686868461254d565b505050505050565b600081848411156121605760405162461bcd60e51b8152600401610a109190612e99565b50600061216d8486613117565b95945050505050565b60008060006121836126bc565b90925090506121928282612199565b9250505090565b6000610b2383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061283e565b6000806121e8838561317c565b905083811015610b235760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a10565b6000806000806122498561286c565b9050600061225686612887565b9050600061226e8261226889866122cc565b906122cc565b979296509094509092505050565b600080808061228b8886612427565b905060006122998887612427565b905060006122a78888612427565b905060006122b98261226886866122cc565b939b939a50919850919650505050505050565b6000610b2383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061213c565b8047101561235e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a10565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146123ab576040519150601f19603f3d011682016040523d82523d6000602084013e6123b0565b606091505b50509050806112595760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a10565b600082612436575060006109e0565b60006124428385613194565b90508261244f85836131b3565b14610b235760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a10565b6015805460ff60a01b1916600160a01b17905560006124c6826002612199565b905060006124d483836122cc565b9050476124e0836128a7565b60006124ec47836122cc565b90506124f88382612a1e565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506015805460ff60a01b19169055505050565b8061255a5761255a612b00565b6001600160a01b03841660009081526007602052604090205460ff16801561259b57506001600160a01b03831660009081526007602052604090205460ff16155b156125b0576125ab848484612b2f565b6126ae565b6001600160a01b03841660009081526007602052604090205460ff161580156125f157506001600160a01b03831660009081526007602052604090205460ff165b15612601576125ab848484612c63565b6001600160a01b03841660009081526007602052604090205460ff1615801561264357506001600160a01b03831660009081526007602052604090205460ff16155b15612653576125ab848484612d1a565b6001600160a01b03841660009081526007602052604090205460ff16801561269357506001600160a01b03831660009081526007602052604090205460ff165b156126a3576125ab848484612d6c565b6126ae848484612d1a565b6126b6612b00565b50505050565b600d54600c546000918291825b60085481101561280e578260036000600884815481106126eb576126eb6130eb565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612756575081600460006008848154811061272f5761272f6130eb565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561276c57600d54600c54945094505050509091565b6127b26003600060088481548110612786576127866130eb565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122cc565b92506127fa60046000600884815481106127ce576127ce6130eb565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122cc565b91508061280681613144565b9150506126c9565b50600c54600d5461281e91612199565b82101561283557600d54600c549350935050509091565b90939092509050565b6000818361285f5760405162461bcd60e51b8152600401610a109190612e99565b50600061216d84866131b3565b6014546000906109e09060649061165b90859060ff16612427565b6014546000906109e09060649061165b908590610100900460ff16612427565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106128dc576128dc6130eb565b60200260200101906001600160a01b031690816001600160a01b031681525050601460029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561294f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297391906131d5565b81600181518110612986576129866130eb565b6001600160a01b0392831660209182029290920101526014546129b29130916201000090041684611aed565b60145460405163791ac94760e01b8152620100009091046001600160a01b03169063791ac947906129f09085906000908690309042906004016131f2565b600060405180830381600087803b158015612a0a57600080fd5b505af1158015612134573d6000803e3d6000fd5b601454612a3c9030906201000090046001600160a01b031684611aed565b6014546001600160a01b03620100009091041663f305d719823085600080612a6c6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612ad4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612af99190613263565b5050505050565b60145460ff16158015612b1b5750601454610100900460ff16155b15612b2257565b6014805461ffff19169055565b6000806000612b3d8461223a565b9250925092506000806000612b56878686610dad612176565b6001600160a01b038c166000908152600460205260409020549295509093509150612b8190886122cc565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612bb090846122cc565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054612bdf90836121db565b6001600160a01b038916600090815260036020526040902055612c0184612ded565b612c0b8186612e75565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051612c5091815260200190565b60405180910390a3505050505050505050565b6000806000612c718461223a565b9250925092506000806000612c8a878686610dad612176565b6001600160a01b038c166000908152600360205260409020549295509093509150612cb590846122cc565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612ceb90876121db565b6001600160a01b038916600090815260046020908152604080832093909355600390522054612bdf90836121db565b6000806000612d288461223a565b9250925092506000806000612d41878686610dad612176565b6001600160a01b038c166000908152600360205260409020549295509093509150612bb090846122cc565b6000806000612d7a8461223a565b9250925092506000806000612d93878686610dad612176565b6001600160a01b038c166000908152600460205260409020549295509093509150612dbe90886122cc565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612cb590846122cc565b6000612df7612176565b90506000612e058383612427565b30600090815260036020526040902054909150612e2290826121db565b3060009081526003602090815260408083209390935560079052205460ff16156112595730600090815260046020526040902054612e6090846121db565b30600090815260046020526040902055505050565b600d54612e8290836122cc565b600d55600e54612e9290826121db565b600e555050565b600060208083528351808285015260005b81811015612ec657858101830151858201604001528201612eaa565b81811115612ed8576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612f0357600080fd5b50565b60008060408385031215612f1957600080fd5b8235612f2481612eee565b946020939093013593505050565b600060208284031215612f4457600080fd5b8135610b2381612eee565b600080600060608486031215612f6457600080fd5b8335612f6f81612eee565b92506020840135612f7f81612eee565b929592945050506040919091013590565b600060208284031215612fa257600080fd5b5035919050565b8015158114612f0357600080fd5b60008060408385031215612fca57600080fd5b823591506020830135612fdc81612fa9565b809150509250929050565b803560ff81168114612ff857600080fd5b919050565b6000806040838503121561301057600080fd5b61301983612fe7565b915061302760208401612fe7565b90509250929050565b60006020828403121561304257600080fd5b8135610b2381612fa9565b6000806040838503121561306057600080fd5b823561306b81612eee565b91506020830135612fdc81612eee565b600181811c9082168061308f57607f821691505b602082108114156130b057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561312957613129613101565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561315857613158613101565b5060010190565b60006020828403121561317157600080fd5b8151610b2381612fa9565b6000821982111561318f5761318f613101565b500190565b60008160001904831182151516156131ae576131ae613101565b500290565b6000826131d057634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156131e757600080fd5b8151610b2381612eee565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132425784516001600160a01b03168352938301939183019160010161321d565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561327857600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206a392f2aa051c48f2c2f42c685e2092e7cd0a0f91464369e996403878e5676be64736f6c634300080a0033

Deployed Bytecode Sourcemap

29998:23179:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32979:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33964:193;;;;;;;;;;-1:-1:-1;33964:193:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;33964:193:0;1072:187:1;39396:115:0;;;;;;;;;;-1:-1:-1;39396:115:0;;;;;:::i;:::-;;:::i;:::-;;35463:87;;;;;;;;;;-1:-1:-1;35532:10:0;;35463:87;;;1662:25:1;;;1650:2;1635:18;35463:87:0;1516:177:1;31214:41:0;;;;;;;;;;-1:-1:-1;31214:41:0;;;;;;;-1:-1:-1;;;;;31214:41:0;;;;;;-1:-1:-1;;;;;1889:32:1;;;1871:51;;1859:2;1844:18;31214:41:0;1698:230:1;33256:95:0;;;;;;;;;;-1:-1:-1;33336:7:0;;33256:95;;34165:446;;;;;;;;;;-1:-1:-1;34165:446:0;;;;;:::i;:::-;;:::i;31119:22::-;;;;;;;;;;-1:-1:-1;31119:22:0;;;;;;;;;;;;;;;;;;;2590:4:1;2578:17;;;2560:36;;2632:17;;;;2627:2;2612:18;;2605:45;2533:18;31119:22:0;2394:262:1;36843:322:0;;;;;;;;;;-1:-1:-1;36843:322:0;;;;;:::i;:::-;;:::i;33165:83::-;;;;;;;;;;-1:-1:-1;33231:9:0;;33165:83;;33231:9;;;;2988:36:1;;2976:2;2961:18;33165:83:0;2846:184:1;38678:473:0;;;;;;;;;;-1:-1:-1;38678:473:0;;;;;:::i;:::-;;:::i;34619:300::-;;;;;;;;;;-1:-1:-1;34619:300:0;;;;;:::i;:::-;;:::i;35558:631::-;;;;;;;;;;-1:-1:-1;35558:631:0;;;;;:::i;:::-;;:::i;20393:131::-;;;;;;;;;;-1:-1:-1;20393:131:0;;;;;:::i;:::-;;:::i;39159:111::-;;;;;;;;;;-1:-1:-1;39159:111:0;;;;;:::i;:::-;;:::i;36197:638::-;;;;;;;;;;-1:-1:-1;36197:638:0;;;;;:::i;:::-;;:::i;31092:20::-;;;;;;;;;;-1:-1:-1;31092:20:0;;;;;;;;;;;;;;;31262:28;;;;;;;;;;-1:-1:-1;31262:28:0;;;;-1:-1:-1;;;;;31262:28:0;;;31327:40;;;;;;;;;;-1:-1:-1;31327:40:0;;;;-1:-1:-1;;;31327:40:0;;;;;;38338:332;;;;;;;;;;-1:-1:-1;38338:332:0;;;;;:::i;:::-;;:::i;43766:124::-;;;;;;;;;;-1:-1:-1;43766:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;43855:27:0;43831:4;43855:27;;;:18;:27;;;;;;;;;43766:124;39817:165;;;;;;;;;;-1:-1:-1;39817:165:0;;;;;:::i;:::-;;:::i;33359:198::-;;;;;;;;;;-1:-1:-1;33359:198:0;;;;;:::i;:::-;;:::i;18288:148::-;;;;;;;;;;;;;:::i;31376:56::-;;;;;;;;;;;;;;;;35335:120;;;;;;;;;;-1:-1:-1;35335:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;35427:20:0;35403:4;35427:20;;;:11;:20;;;;;;;;;35335:120;20225:160;;;;;;;;;;-1:-1:-1;20225:160:0;;;;;:::i;:::-;;:::i;37617:129::-;;;;;;;;;;-1:-1:-1;37617:129:0;;;;;:::i;:::-;-1:-1:-1;;;;;37709:29:0;37681:4;37709:29;;;:20;:29;;;;;;;;;37617:129;17646:79;;;;;;;;;;-1:-1:-1;17684:7:0;17711:6;-1:-1:-1;;;;;17711:6:0;17646:79;;37754:576;;;;;;;;;;-1:-1:-1;37754:576:0;;;;;:::i;:::-;;:::i;31516:50::-;;;;;;;;;;;;;;;;39519:114;;;;;;;;;;-1:-1:-1;39519:114:0;;;;;:::i;:::-;;:::i;33070:87::-;;;;;;;;;;;;;:::i;34927:400::-;;;;;;;;;;-1:-1:-1;34927:400:0;;;;;:::i;:::-;;:::i;19343:385::-;;;;;;;;;;;;;:::i;33565:199::-;;;;;;;;;;-1:-1:-1;33565:199:0;;;;;:::i;:::-;;:::i;40284:172::-;;;;;;;;;;-1:-1:-1;40284:172:0;;;;;:::i;:::-;;:::i;18880:89::-;;;;;;;;;;-1:-1:-1;18952:9:0;;18880:89;;40464:171;;;;;;;;;;-1:-1:-1;40464:171:0;;;;;:::i;:::-;;:::i;37175:430::-;;;;;;;;;;-1:-1:-1;37175:430:0;;;;;:::i;:::-;;:::i;40140:136::-;;;;;;;;;;-1:-1:-1;40140:136:0;;;;;:::i;:::-;;:::i;43898:128::-;;;;;;;;;;-1:-1:-1;43898:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;43989:29:0;43965:4;43989:29;;;:20;:29;;;;;;;;;43898:128;19045:226;;;;;;;;;;-1:-1:-1;19045:226:0;;;;;:::i;:::-;;:::i;33772:184::-;;;;;;;;;;-1:-1:-1;33772:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;33921:18:0;;;33889:7;33921:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;33772:184;39278:110;;;;;;;;;;-1:-1:-1;39278:110:0;;;;;:::i;:::-;;:::i;39992:140::-;;;;;;;;;;-1:-1:-1;39992:140:0;;;;;:::i;:::-;;:::i;18591:281::-;;;;;;;;;;-1:-1:-1;18591:281:0;;;;;:::i;:::-;;:::i;39641:168::-;;;;;;;;;;-1:-1:-1;39641:168:0;;;;;:::i;:::-;;:::i;32979:83::-;33016:13;33049:5;33042:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32979:83;:::o;33964:193::-;34066:4;34088:39;9700:10;34111:7;34120:6;34088:8;:39::i;:::-;-1:-1:-1;34145:4:0;33964:193;;;;;:::o;39396:115::-;17858:6;;-1:-1:-1;;;;;17858:6:0;9700:10;17858:22;17850:67;;;;-1:-1:-1;;;17850:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;39467:29:0::1;;::::0;;;:20:::1;:29;::::0;;;;:36;;-1:-1:-1;;39467:36:0::1;39499:4;39467:36;::::0;;39396:115::o;34165:446::-;34297:4;34314:36;34324:6;34332:9;34343:6;34314:9;:36::i;:::-;34361:220;34384:6;9700:10;34432:138;34488:6;34432:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34432:19:0;;;;;;:11;:19;;;;;;;;9700:10;34432:33;;;;;;;;;;:37;:138::i;:::-;34361:8;:220::i;:::-;-1:-1:-1;34599:4:0;34165:446;;;;;:::o;36843:322::-;36937:7;36995;;36984;:18;;36962:110;;;;-1:-1:-1;;;36962:110:0;;5685:2:1;36962:110:0;;;5667:21:1;5724:2;5704:18;;;5697:30;5763:34;5743:18;;;5736:62;-1:-1:-1;;;5814:18:1;;;5807:40;5864:19;;36962:110:0;5483:406:1;36962:110:0;37083:19;37105:10;:8;:10::i;:::-;37083:32;-1:-1:-1;37133:24:0;:7;37083:32;37133:11;:24::i;:::-;37126:31;36843:322;-1:-1:-1;;;36843:322:0:o;38678:473::-;17858:6;;-1:-1:-1;;;;;17858:6:0;9700:10;17858:22;17850:67;;;;-1:-1:-1;;;17850:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38758:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;38750:56;;;::::0;-1:-1:-1;;;38750:56:0;;6096:2:1;38750:56:0::1;::::0;::::1;6078:21:1::0;6135:2;6115:18;;;6108:30;6174:25;6154:18;;;6147:53;6217:18;;38750:56:0::1;5894:347:1::0;38750:56:0::1;38822:9;38817:327;38841:9;:16:::0;38837:20;::::1;38817:327;;;38899:7;-1:-1:-1::0;;;;;38883:23:0::1;:9;38893:1;38883:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;38883:12:0::1;:23;38879:254;;;38942:9;38952:16:::0;;:20:::1;::::0;38971:1:::1;::::0;38952:20:::1;:::i;:::-;38942:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;38927:9:::1;:12:::0;;-1:-1:-1;;;;;38942:31:0;;::::1;::::0;38937:1;;38927:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;38927:46:0::1;-1:-1:-1::0;;;;;38927:46:0;;::::1;;::::0;;38992:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;39031:11:::1;:20:::0;;;;:28;;-1:-1:-1;;39031:28:0::1;::::0;;39078:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;39078:15:0;;;;;-1:-1:-1;;;;;;39078:15:0::1;::::0;;;;;38817:327:::1;38678:473:::0;:::o;38879:254::-:1;38859:3:::0;::::1;::::0;::::1;:::i;:::-;;;;38817:327;;;;38678:473:::0;:::o;34619:300::-;9700:10;34734:4;34828:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;34828:34:0;;;;;;;;;;34734:4;;34756:133;;34806:7;;34828:50;;34867:10;34828:38;:50::i;35558:631::-;9700:10;35610:14;35673:19;;;:11;:19;;;;;;;;35672:20;35650:114;;;;-1:-1:-1;;;35650:114:0;;7114:2:1;35650:114:0;;;7096:21:1;7153:2;7133:18;;;7126:30;7192:34;7172:18;;;7165:62;-1:-1:-1;;;7243:18:1;;;7236:42;7295:19;;35650:114:0;6912:408:1;35650:114:0;35807:12;35834:18;35866:20;35878:7;35866:11;:20::i;:::-;35777:109;;;;;35898:15;35921:113;35947:7;35969:4;35988:10;36013;:8;:10::i;:::-;35921:11;:113::i;:::-;-1:-1:-1;;;;;;;36065:15:0;;;;;;:7;:15;;;;;;35897:137;;-1:-1:-1;36065:28:0;;35897:137;36065:19;:28::i;:::-;-1:-1:-1;;;;;36047:15:0;;;;;;:7;:15;;;;;:46;36114:7;;:20;;36126:7;36114:11;:20::i;:::-;36104:7;:30;36158:10;;:23;;36173:7;36158:14;:23::i;:::-;36145:10;:36;-1:-1:-1;;;;;35558:631:0:o;20393:131::-;17858:6;;-1:-1:-1;;;;;17858:6:0;9700:10;17858:22;17850:67;;;;-1:-1:-1;;;17850:67:0;;;;;;;:::i;:::-;20482:34:::1;-1:-1:-1::0;;;;;20482:26:0;::::1;20509:6:::0;20482:26:::1;:34::i;39159:111::-:0;17858:6;;-1:-1:-1;;;;;17858:6:0;9700:10;17858:22;17850:67;;;;-1:-1:-1;;;17850:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39228:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;39228:34:0::1;39258:4;39228:34;::::0;;39159:111::o;36197:638::-;36315:7;36359;;36348;:18;;36340:62;;;;-1:-1:-1;;;36340:62:0;;7527:2:1;36340:62:0;;;7509:21:1;7566:2;7546:18;;;7539:30;7605:33;7585:18;;;7578:61;7656:18;;36340:62:0;7325:355:1;36340:62:0;36445:12;36472:18;36504:20;36516:7;36504:11;:20::i;:::-;36415:109;;;;;36536:15;36553:23;36582:113;36608:7;36630:4;36649:10;36674;:8;:10::i;36582:113::-;36535:160;;;;;36713:17;36708:120;;-1:-1:-1;36754:7:0;-1:-1:-1;36747:14:0;;-1:-1:-1;;36747:14:0;36708:120;36801:15;-1:-1:-1;36794:22:0;;-1:-1:-1;;;36794:22:0;38338:332;17858:6;;-1:-1:-1;;;;;17858:6:0;9700:10;17858:22;17850:67;;;;-1:-1:-1;;;17850:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38419:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;38418:21;38410:61;;;::::0;-1:-1:-1;;;38410:61:0;;7887:2:1;38410:61:0::1;::::0;::::1;7869:21:1::0;7926:2;7906:18;;;7899:30;7965:29;7945:18;;;7938:57;8012:18;;38410:61:0::1;7685:351:1::0;38410:61:0::1;-1:-1:-1::0;;;;;38486:16:0;::::1;38505:1;38486:16:::0;;;:7:::1;:16;::::0;;;;;:20;38482:109:::1;;-1:-1:-1::0;;;;;38562:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;38542:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;38523:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;38482:109:::1;-1:-1:-1::0;;;;;38601:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;38601:27:0::1;38624:4;38601:27:::0;;::::1;::::0;;;38639:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;38639:23:0::1;::::0;;::::1;::::0;;38338:332::o;39817:165::-;17858:6;;-1:-1:-1;;;;;17858:6:0;9700:10;17858:22;17850:67;;;;-1:-1:-1;;;17850:67:0;;;;;;;:::i;:::-;39919:6:::1;:16:::0;;::::1;39946:28:::0;;::::1;39919:16;39946:28;-1:-1:-1::0;;39946:28:0;;;39919:16;;;::::1;39946:28:::0;;;;;;;::::1;::::0;;39817:165::o;33359:198::-;-1:-1:-1;;;;;33449:20:0;;33425:7;33449:20;;;:11;:20;;;;;;;;33445:49;;;-1:-1:-1;;;;;;33478:16:0;;;;;:7;:16;;;;;;;33359:198::o;33445:49::-;-1:-1:-1;;;;;33532:16:0;;;;;;:7;:16;;;;;;33512:37;;:19;:37::i;18288:148::-;17858:6;;-1:-1:-1;;;;;17858:6:0;9700:10;17858:22;17850:67;;;;-1:-1:-1;;;17850:67:0;;;;;;;:::i;:::-;18395:1:::1;18379:6:::0;;18358:40:::1;::::0;-1:-1:-1;;;;;18379:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;18358:40:0;18395:1;;18358:40:::1;18426:1;18409:19:::0;;-1:-1:-1;;;;;;18409:19:0::1;::::0;;18288:148::o;20225:160::-;17858:6;;-1:-1:-1;;;;;17858:6:0;9700:10;17858:22;17850:67;;;;-1:-1:-1;;;17850:67:0;;;;;;;:::i;:::-;20333:12:::1;-1:-1:-1::0;;;;;20326:29:0::1;;20356:7;17684::::0;17711:6;-1:-1:-1;;;;;17711:6:0;;17646:79;20356:7:::1;20326:51;::::0;-1:-1:-1;;;;;;20326:51:0::1;::::0;;;;;;-1:-1:-1;;;;;8233:32:1;;;20326:51:0::1;::::0;::::1;8215::1::0;8282:18;;;8275:34;;;8188:18;;20326:51:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20225:160:::0;;:::o;37754:576::-;17858:6;;-1:-1:-1;;;;;17858:6:0;9700:10;17858:22;17850:67;;;;-1:-1:-1;;;17850:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37839:29:0;::::1;;::::0;;;:20:::1;:29;::::0;;;;;::::1;;37831:68;;;::::0;-1:-1:-1;;;37831:68:0;;8772:2:1;37831:68:0::1;::::0;::::1;8754:21:1::0;8811:2;8791:18;;;8784:30;8850:28;8830:18;;;8823:56;8896:18;;37831:68:0::1;8570:350:1::0;37831:68:0::1;37915:9;37910:367;37934:14;:21:::0;37930:25;::::1;37910:367;;;38002:7;-1:-1:-1::0;;;;;37981:28:0::1;:14;37996:1;37981:17;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;37981:17:0::1;:28;37977:289;;;38050:14;38087:21:::0;;:25:::1;::::0;38111:1:::1;::::0;38087:25:::1;:::i;:::-;38050:81;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;38030:14:::1;:17:::0;;-1:-1:-1;;;;;38050:81:0;;::::1;::::0;38045:1;;38030:17;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:101:::0;;-1:-1:-1;;;;;;38030:101:0::1;-1:-1:-1::0;;;;;38030:101:0;;::::1;;::::0;;38150:29;;::::1;::::0;;:20:::1;:29:::0;;;;;;:37;;-1:-1:-1;;38150:37:0::1;::::0;;38206:14:::1;:20:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;38206:20:0;;;;;-1:-1:-1;;;;;;38206:20:0::1;::::0;;;;;38245:5:::1;;37977:289;37957:3:::0;::::1;::::0;::::1;:::i;:::-;;;;37910:367;;;-1:-1:-1::0;38292:30:0::1;::::0;-1:-1:-1;;;;;1889:32:1;;1871:51;;38292:30:0::1;::::0;1859:2:1;1844:18;38292:30:0::1;;;;;;;;37754:576:::0;:::o;39519:114::-;17858:6;;-1:-1:-1;;;;;17858:6:0;9700:10;17858:22;17850:67;;;;-1:-1:-1;;;17850:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39588:29:0::1;39620:5;39588:29:::0;;;:20:::1;:29;::::0;;;;:37;;-1:-1:-1;;39588:37:0::1;::::0;;39519:114::o;33070:87::-;33109:13;33142:7;33135:14;;;;;:::i;34927:400::-;35047:4;35069:228;9700:10;35119:7;35141:145;35198:15;35141:145;;;;;;;;;;;;;;;;;9700:10;35141:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;35141:34:0;;;;;;;;;;;;:38;:145::i;19343:385::-;19409:14;;-1:-1:-1;;;;;19409:14:0;19427:10;19409:28;19387:113;;;;-1:-1:-1;;;19387:113:0;;9127:2:1;19387:113:0;;;9109:21:1;9166:2;9146:18;;;9139:30;9205:34;9185:18;;;9178:62;-1:-1:-1;;;9256:18:1;;;9249:33;9299:19;;19387:113:0;8925:399:1;19387:113:0;19537:9;;19519:15;:27;19511:77;;;;-1:-1:-1;;;19511:77:0;;9531:2:1;19511:77:0;;;9513:21:1;9570:2;9550:18;;;9543:30;9609:34;9589:18;;;9582:62;-1:-1:-1;;;9660:18:1;;;9653:35;9705:19;;19511:77:0;9329:401:1;19511:77:0;19633:14;;;19625:6;;19604:44;;-1:-1:-1;;;;;19633:14:0;;;;19625:6;;;;-1:-1:-1;;;;;;;;;;;19604:44:0;;19668:14;;;;19659:23;;-1:-1:-1;;;;;;19659:23:0;;;-1:-1:-1;;;;;19668:14:0;;19659:23;;;;19693:27;;;19343:385::o;33565:199::-;33670:4;33692:42;9700:10;33716:9;33727:6;33692:9;:42::i;40284:172::-;17858:6;;-1:-1:-1;;;;;17858:6:0;9700:10;17858:22;17850:67;;;;-1:-1:-1;;;17850:67:0;;;;;;;:::i;:::-;40411:37:::1;40442:5;40411:26;40423:13;40411:7;;:11;;:26;;;;:::i;:::-;:30:::0;::::1;:37::i;:::-;40394:14;:54:::0;-1:-1:-1;40284:172:0:o;40464:171::-;17858:6;;-1:-1:-1;;;;;17858:6:0;9700:10;17858:22;17850:67;;;;-1:-1:-1;;;17850:67:0;;;;;;;:::i;:::-;40541:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;40541:32:0::1;-1:-1:-1::0;;;;40541:32:0;;::::1;;::::0;;40589:38:::1;::::0;::::1;::::0;::::1;::::0;40565:8;1237:14:1;1230:22;1212:41;;1200:2;1185:18;;1072:187;37175:430:0;17858:6;;-1:-1:-1;;;;;17858:6:0;9700:10;17858:22;17850:67;;;;-1:-1:-1;;;17850:67:0;;;;;;;:::i;:::-;37280:42:::1;-1:-1:-1::0;;;;;37269:53:0;::::1;;;37247:136;;;::::0;-1:-1:-1;;;37247:136:0;;9937:2:1;37247:136:0::1;::::0;::::1;9919:21:1::0;9976:2;9956:18;;;9949:30;10015:34;9995:18;;;9988:62;-1:-1:-1;;;10066:18:1;;;10059:31;10107:19;;37247:136:0::1;9735:397:1::0;37247:136:0::1;-1:-1:-1::0;;;;;37403:29:0;::::1;;::::0;;;:20:::1;:29;::::0;;;;;::::1;;37402:30;37394:73;;;::::0;-1:-1:-1;;;37394:73:0;;10339:2:1;37394:73:0::1;::::0;::::1;10321:21:1::0;10378:2;10358:18;;;10351:30;10417:32;10397:18;;;10390:60;10467:18;;37394:73:0::1;10137:354:1::0;37394:73:0::1;-1:-1:-1::0;;;;;37478:29:0;::::1;;::::0;;;:20:::1;:29;::::0;;;;;;;:36;;-1:-1:-1;;37478:36:0::1;37510:4;37478:36:::0;;::::1;::::0;;;37525:14:::1;:28:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;37525:28:0::1;::::0;::::1;::::0;;37571:26;;1871:51:1;;;37571:26:0::1;::::0;1844:18:1;37571:26:0::1;1698:230:1::0;40140:136:0;17858:6;;-1:-1:-1;;;;;17858:6:0;9700:10;17858:22;17850:67;;;;-1:-1:-1;;;17850:67:0;;;;;;;:::i;:::-;40232:36:::1;40262:5;40232:25;40244:12;40232:7;;:11;;:25;;;;:::i;:36::-;40217:12;:51:::0;-1:-1:-1;40140:136:0:o;19045:226::-;17858:6;;-1:-1:-1;;;;;17858:6:0;9700:10;17858:22;17850:67;;;;-1:-1:-1;;;17850:67:0;;;;;;;:::i;:::-;19126:6:::1;::::0;;;19109:23;;-1:-1:-1;;;;;;19109:23:0;;::::1;-1:-1:-1::0;;;;;19126:6:0;::::1;19109:23;::::0;;;19143:19:::1;::::0;;19185:22:::1;19203:4:::0;19185:15:::1;:22;:::i;:::-;19173:9;:34:::0;19260:1:::1;19244:6:::0;;19223:40:::1;::::0;-1:-1:-1;;;;;19244:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;19223:40:0;19260:1;;19223:40:::1;19045:226:::0;:::o;39278:110::-;17858:6;;-1:-1:-1;;;;;17858:6:0;9700:10;17858:22;17850:67;;;;-1:-1:-1;;;17850:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39345:27:0::1;39375:5;39345:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;39345:35:0::1;::::0;;39278:110::o;39992:140::-;17858:6;;-1:-1:-1;;;;;17858:6:0;9700:10;17858:22;17850:67;;;;-1:-1:-1;;;17850:67:0;;;;;;;:::i;:::-;40083:29:::1;:41:::0;39992:140::o;18591:281::-;17858:6;;-1:-1:-1;;;;;17858:6:0;9700:10;17858:22;17850:67;;;;-1:-1:-1;;;17850:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18694:22:0;::::1;18672:110;;;::::0;-1:-1:-1;;;18672:110:0;;10831:2:1;18672:110:0::1;::::0;::::1;10813:21:1::0;10870:2;10850:18;;;10843:30;10909:34;10889:18;;;10882:62;-1:-1:-1;;;10960:18:1;;;10953:36;11006:19;;18672:110:0::1;10629:402:1::0;18672:110:0::1;18819:6;::::0;;18798:38:::1;::::0;-1:-1:-1;;;;;18798:38:0;;::::1;::::0;18819:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;18798:38:0;::::1;18847:6;:17:::0;;-1:-1:-1;;;;;;18847:17:0::1;-1:-1:-1::0;;;;;18847:17:0;;;::::1;::::0;;;::::1;::::0;;18591:281::o;39641:168::-;17858:6;;-1:-1:-1;;;;;17858:6:0;9700:10;17858:22;17850:67;;;;-1:-1:-1;;;17850:67:0;;;;;;;:::i;:::-;39744:7:::1;:17:::0;;::::1;39772:29:::0;;::::1;39744:17;39772:29;-1:-1:-1::0;;39772:29:0;;;39744:17;;;::::1;39772:29:::0;;;;;;;::::1;::::0;;39641:168::o;44034:371::-;-1:-1:-1;;;;;44161:19:0;;44153:68;;;;-1:-1:-1;;;44153:68:0;;11238:2:1;44153:68:0;;;11220:21:1;11277:2;11257:18;;;11250:30;11316:34;11296:18;;;11289:62;-1:-1:-1;;;11367:18:1;;;11360:34;11411:19;;44153:68:0;11036:400:1;44153:68:0;-1:-1:-1;;;;;44240:21:0;;44232:68;;;;-1:-1:-1;;;44232:68:0;;11643:2:1;44232:68:0;;;11625:21:1;11682:2;11662:18;;;11655:30;11721:34;11701:18;;;11694:62;-1:-1:-1;;;11772:18:1;;;11765:32;11814:19;;44232:68:0;11441:398:1;44232:68:0;-1:-1:-1;;;;;44313:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;44365:32;;1662:25:1;;;44365:32:0;;1635:18:1;44365:32:0;;;;;;;44034:371;;;:::o;44413:2579::-;-1:-1:-1;;;;;44535:18:0;;44527:68;;;;-1:-1:-1;;;44527:68:0;;12046:2:1;44527:68:0;;;12028:21:1;12085:2;12065:18;;;12058:30;12124:34;12104:18;;;12097:62;-1:-1:-1;;;12175:18:1;;;12168:35;12220:19;;44527:68:0;11844:401:1;44527:68:0;-1:-1:-1;;;;;44614:16:0;;44606:64;;;;-1:-1:-1;;;44606:64:0;;12452:2:1;44606:64:0;;;12434:21:1;12491:2;12471:18;;;12464:30;12530:34;12510:18;;;12503:62;-1:-1:-1;;;12581:18:1;;;12574:33;12624:19;;44606:64:0;12250:399:1;44606:64:0;44698:1;44689:6;:10;44681:64;;;;-1:-1:-1;;;44681:64:0;;12856:2:1;44681:64:0;;;12838:21:1;12895:2;12875:18;;;12868:30;12934:34;12914:18;;;12907:62;-1:-1:-1;;;12985:18:1;;;12978:39;13034:19;;44681:64:0;12654:405:1;44681:64:0;-1:-1:-1;;;;;44765:26:0;;;;;;:20;:26;;;;;;;;44764:27;44756:59;;;;-1:-1:-1;;;44756:59:0;;13266:2:1;44756:59:0;;;13248:21:1;13305:2;13285:18;;;13278:30;-1:-1:-1;;;13324:18:1;;;13317:49;13383:18;;44756:59:0;13064:343:1;44756:59:0;44856:10;44835:32;;;;:20;:32;;;;;;;;44834:33;44826:65;;;;-1:-1:-1;;;44826:65:0;;13614:2:1;44826:65:0;;;13596:21:1;13653:2;13633:18;;;13626:30;-1:-1:-1;;;13672:18:1;;;13665:49;13731:18;;44826:65:0;13412:343:1;44826:65:0;44932:9;44911:31;;;;:20;:31;;;;;;;;44910:32;44902:51;;;;-1:-1:-1;;;44902:51:0;;13962:2:1;44902:51:0;;;13944:21:1;14001:1;13981:18;;;13974:29;-1:-1:-1;;;14019:18:1;;;14012:36;14065:18;;44902:51:0;13760:329:1;44902:51:0;-1:-1:-1;;;;;44971:26:0;;;;;;:20;:26;;;;;;;;44970:27;:56;;;;-1:-1:-1;;;;;;45002:24:0;;;;;;:20;:24;;;;;;;;45001:25;44970:56;44966:339;;;45062:12;;45052:6;:22;;45044:74;;;;-1:-1:-1;;;45044:74:0;;14296:2:1;45044:74:0;;;14278:21:1;14335:2;14315:18;;;14308:30;14374:34;14354:18;;;14347:62;-1:-1:-1;;;14425:18:1;;;14418:38;14473:19;;45044:74:0;14094:404:1;45044:74:0;45156:13;;-1:-1:-1;;;;;45150:19:0;;;45156:13;;45150:19;45147:147;;45224:14;;45215:6;45199:13;45209:2;45199:9;:13::i;:::-;:22;;;;:::i;:::-;:39;45191:87;;;;-1:-1:-1;;;45191:87:0;;14705:2:1;45191:87:0;;;14687:21:1;14744:2;14724:18;;;14717:30;14783:34;14763:18;;;14756:62;-1:-1:-1;;;14834:18:1;;;14827:33;14877:19;;45191:87:0;14503:399:1;45191:87:0;45601:28;45632:24;45650:4;45632:9;:24::i;:::-;45601:55;;45697:12;;45673:20;:36;45669:104;;-1:-1:-1;45749:12:0;;45669:104;45849:29;;45812:66;;;;;;;45907:53;;-1:-1:-1;45944:16:0;;-1:-1:-1;;;45944:16:0;;;;45943:17;45907:53;:91;;;;-1:-1:-1;45985:13:0;;-1:-1:-1;;;;;45977:21:0;;;45985:13;;45977:21;;45907:91;:129;;;;-1:-1:-1;46015:21:0;;-1:-1:-1;;;46015:21:0;;;;45907:129;45889:318;;;46086:29;;46063:52;;46159:36;46174:20;46159:14;:36::i;:::-;-1:-1:-1;;;;;46401:24:0;;46280:12;46401:24;;;:18;:24;;;;;;46295:4;;46401:24;;;:50;;-1:-1:-1;;;;;;46429:22:0;;;;;;:18;:22;;;;;;;;46401:50;46400:102;;;-1:-1:-1;46465:13:0;;-1:-1:-1;;;;;46457:21:0;;;46465:13;;46457:21;;;;:44;;-1:-1:-1;46488:13:0;;-1:-1:-1;;;;;46482:19:0;;;46488:13;;46482:19;;46457:44;46396:469;;;-1:-1:-1;46529:5:0;46396:469;;;46610:13;;-1:-1:-1;;;;;46602:21:0;;;46610:13;;46602:21;:55;;;;-1:-1:-1;46641:15:0;;-1:-1:-1;;;;;46627:30:0;;;46641:15;;;;;46627:30;;46602:55;46599:103;;;46678:8;43576:6;:10;43566:7;:20;;43576:10;43613:16;;;43576:10;43613:16;;;43597:32;;;-1:-1:-1;;43597:32:0;;;43576:10;;43597:32;;;;;;;;;;43529:110;46678:8;46759:13;;-1:-1:-1;;;;;46753:19:0;;;46759:13;;46753:19;:55;;;;-1:-1:-1;46792:15:0;;-1:-1:-1;;;;;46776:32:0;;;46792:15;;;;;46776:32;;46753:55;46749:105;;;46829:9;43695:7;:11;43685:7;:21;;43695:11;43733:17;;;43695:11;43733:17;;;43717:33;;;-1:-1:-1;;43717:33:0;;;43695:11;;43717:33;;;;;;;;;;43647:111;46829:9;46943:41;46958:4;46964:2;46968:6;46976:7;46943:14;:41::i;:::-;44516:2476;;;44413:2579;;;:::o;5912:226::-;6032:7;6068:12;6060:6;;;;6052:29;;;;-1:-1:-1;;;6052:29:0;;;;;;;;:::i;:::-;-1:-1:-1;6092:9:0;6104:5;6108:1;6104;:5;:::i;:::-;6092:17;5912:226;-1:-1:-1;;;;;5912:226:0:o;41904:164::-;41946:7;41967:15;41984;42003:19;:17;:19::i;:::-;41966:56;;-1:-1:-1;41966:56:0;-1:-1:-1;42040:20:0;41966:56;;42040:11;:20::i;:::-;42033:27;;;;41904:164;:::o;7344:132::-;7402:7;7429:39;7433:1;7436;7429:39;;;;;;;;;;;;;;;;;:3;:39::i;5009:181::-;5067:7;;5099:5;5103:1;5099;:5;:::i;:::-;5087:17;;5128:1;5123;:6;;5115:46;;;;-1:-1:-1;;;5115:46:0;;15109:2:1;5115:46:0;;;15091:21:1;15148:2;15128:18;;;15121:30;15187:29;15167:18;;;15160:57;15234:18;;5115:46:0;14907:351:1;40892:414:0;40993:7;41015;41037;41072:12;41087:24;41103:7;41087:15;:24::i;:::-;41072:39;;41122:18;41143:30;41165:7;41143:21;:30::i;:::-;41122:51;-1:-1:-1;41184:23:0;41210:33;41122:51;41210:17;:7;41222:4;41210:11;:17::i;:::-;:21;;:33::i;:::-;41184:59;41281:4;;-1:-1:-1;41287:10:0;;-1:-1:-1;40892:414:0;;-1:-1:-1;;;40892:414:0:o;41314:582::-;41513:7;;;;41610:24;:7;41622:11;41610;:24::i;:::-;41592:42;-1:-1:-1;41645:12:0;41660:21;:4;41669:11;41660:8;:21::i;:::-;41645:36;-1:-1:-1;41692:18:0;41713:27;:10;41728:11;41713:14;:27::i;:::-;41692:48;-1:-1:-1;41751:23:0;41777:61;41692:48;41777:31;:7;41803:4;41777:25;:31::i;:61::-;41857:7;;;;-1:-1:-1;41883:4:0;;-1:-1:-1;41314:582:0;;-1:-1:-1;;;;;;;41314:582:0:o;5473:136::-;5531:7;5558:43;5562:1;5565;5558:43;;;;;;;;;;;;;;;;;:3;:43::i;12224:469::-;12353:6;12328:21;:31;;12306:110;;;;-1:-1:-1;;;12306:110:0;;15465:2:1;12306:110:0;;;15447:21:1;15504:2;15484:18;;;15477:30;15543:31;15523:18;;;15516:59;15592:18;;12306:110:0;15263:353:1;12306:110:0;12508:12;12526:9;-1:-1:-1;;;;;12526:14:0;12548:6;12526:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12507:52;;;12592:7;12570:115;;;;-1:-1:-1;;;12570:115:0;;16033:2:1;12570:115:0;;;16015:21:1;16072:2;16052:18;;;16045:30;16111:34;16091:18;;;16084:62;16182:28;16162:18;;;16155:56;16228:19;;12570:115:0;15831:422:1;6397:471:0;6455:7;6700:6;6696:47;;-1:-1:-1;6730:1:0;6723:8;;6696:47;6755:9;6767:5;6771:1;6767;:5;:::i;:::-;6755:17;-1:-1:-1;6800:1:0;6791:5;6795:1;6755:17;6791:5;:::i;:::-;:10;6783:56;;;;-1:-1:-1;;;6783:56:0;;16855:2:1;6783:56:0;;;16837:21:1;16894:2;16874:18;;;16867:30;16933:34;16913:18;;;16906:62;-1:-1:-1;;;16984:18:1;;;16977:31;17025:19;;6783:56:0;16653:397:1;47000:977:0;31989:16;:23;;-1:-1:-1;;;;31989:23:0;-1:-1:-1;;;31989:23:0;;;;47151:27:::1;:20:::0;47176:1:::1;47151:24;:27::i;:::-;47136:42:::0;-1:-1:-1;47189:17:0::1;47209:30;:20:::0;47136:42;47209:24:::1;:30::i;:::-;47189:50:::0;-1:-1:-1;47542:21:0::1;47608:22;47625:4:::0;47608:16:::1;:22::i;:::-;47761:18;47782:41;:21;47808:14:::0;47782:25:::1;:41::i;:::-;47761:62;;47873:35;47886:9;47897:10;47873:12;:35::i;:::-;47926:43;::::0;;17257:25:1;;;17313:2;17298:18;;17291:34;;;17341:18;;;17334:34;;;47926:43:0::1;::::0;17245:2:1;17230:18;47926:43:0::1;;;;;;;-1:-1:-1::0;;32035:16:0;:24;;-1:-1:-1;;;;32035:24:0;;;-1:-1:-1;;;47000:977:0:o;49176:834::-;49332:7;49327:41;;49354:14;:12;:14::i;:::-;-1:-1:-1;;;;;49385:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;49409:22:0;;;;;;:11;:22;;;;;;;;49408:23;49385:46;49381:597;;;49448:48;49470:6;49478:9;49489:6;49448:21;:48::i;:::-;49381:597;;;-1:-1:-1;;;;;49519:19:0;;;;;;:11;:19;;;;;;;;49518:20;:46;;;;-1:-1:-1;;;;;;49542:22:0;;;;;;:11;:22;;;;;;;;49518:46;49514:464;;;49581:46;49601:6;49609:9;49620:6;49581:19;:46::i;49514:464::-;-1:-1:-1;;;;;49650:19:0;;;;;;:11;:19;;;;;;;;49649:20;:47;;;;-1:-1:-1;;;;;;49674:22:0;;;;;;:11;:22;;;;;;;;49673:23;49649:47;49645:333;;;49713:44;49731:6;49739:9;49750:6;49713:17;:44::i;49645:333::-;-1:-1:-1;;;;;49779:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;49802:22:0;;;;;;:11;:22;;;;;;;;49779:45;49775:203;;;49841:48;49863:6;49871:9;49882:6;49841:21;:48::i;49775:203::-;49922:44;49940:6;49948:9;49959:6;49922:17;:44::i;:::-;49988:14;:12;:14::i;:::-;49176:834;;;;:::o;42076:605::-;42174:7;;42210;;42127;;;;;42228:338;42252:9;:16;42248:20;;42228:338;;;42336:7;42312;:21;42320:9;42330:1;42320:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42320:12:0;42312:21;;;;;;;;;;;;;:31;;:83;;;42388:7;42364;:21;42372:9;42382:1;42372:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42372:12:0;42364:21;;;;;;;;;;;;;:31;42312:83;42290:146;;;42419:7;;42428;;42411:25;;;;;;;42076:605;;:::o;42290:146::-;42461:34;42473:7;:21;42481:9;42491:1;42481:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42481:12:0;42473:21;;;;;;;;;;;;;42461:7;;:11;:34::i;:::-;42451:44;;42520:34;42532:7;:21;42540:9;42550:1;42540:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42540:12:0;42532:21;;;;;;;;;;;;;42520:7;;:11;:34::i;:::-;42510:44;-1:-1:-1;42270:3:0;;;;:::i;:::-;;;;42228:338;;;-1:-1:-1;42602:7:0;;42590;;:20;;:11;:20::i;:::-;42580:7;:30;42576:61;;;42620:7;;42629;;42612:25;;;;;;42076:605;;:::o;42576:61::-;42656:7;;42665;;-1:-1:-1;42076:605:0;-1:-1:-1;42076:605:0:o;7972:312::-;8092:7;8127:12;8120:5;8112:28;;;;-1:-1:-1;;;8112:28:0;;;;;;;;:::i;:::-;-1:-1:-1;8151:9:0;8163:5;8167:1;8163;:5;:::i;43052:130::-;43155:7;;43116;;43143:31;;43168:5;;43143:20;;:7;;43155;;43143:11;:20::i;43190:174::-;43331:13;;43287:7;;43319:37;;43350:5;;43319:26;;:7;;43331:13;;;;;43319:11;:26::i;47985:589::-;48135:16;;;48149:1;48135:16;;;;;;;;48111:21;;48135:16;;;;;;;;;;-1:-1:-1;48135:16:0;48111:40;;48180:4;48162;48167:1;48162:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;48162:23:0;;;-1:-1:-1;;;;;48162:23:0;;;;;48206:15;;;;;;;;;-1:-1:-1;;;;;48206:15:0;-1:-1:-1;;;;;48206:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48196:4;48201:1;48196:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48196:32:0;;;:7;;;;;;;;;:32;48273:15;;48241:62;;48258:4;;48273:15;;;;48291:11;48241:8;:62::i;:::-;48342:15;;:224;;-1:-1:-1;;;48342:224:0;;:15;;;;-1:-1:-1;;;;;48342:15:0;;:66;;:224;;48423:11;;48449:1;;48493:4;;48520;;48540:15;;48342:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48582:513;48762:15;;48730:62;;48747:4;;48762:15;;;-1:-1:-1;;;;;48762:15:0;48780:11;48730:8;:62::i;:::-;48835:15;;-1:-1:-1;;;;;48835:15:0;;;;;:31;48874:9;48907:4;48927:11;48953:1;;49039:7;17684;17711:6;-1:-1:-1;;;;;17711:6:0;;17646:79;49039:7;48835:252;;;;;;-1:-1:-1;;;;;;48835:252:0;;;-1:-1:-1;;;;;19111:15:1;;;48835:252:0;;;19093:34:1;19143:18;;;19136:34;;;;19186:18;;;19179:34;;;;19229:18;;;19222:34;19293:15;;;19272:19;;;19265:44;49061:15:0;19325:19:1;;;19318:35;19027:19;;48835:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;48582:513;;:::o;43372:149::-;43419:7;;;;:12;:34;;;;-1:-1:-1;43435:13:0;;;;;;;:18;43419:34;43415:47;;;43372:149::o;43415:47::-;43474:7;:11;;-1:-1:-1;;43496:17:0;;;43372:149::o;51541:777::-;51692:23;51730:12;51757:18;51789:20;51801:7;51789:11;:20::i;:::-;51677:132;;;;;;51821:15;51838:23;51863:12;51879:113;51905:7;51927:4;51946:10;51971;:8;:10::i;51879:113::-;-1:-1:-1;;;;;52023:15:0;;;;;;:7;:15;;;;;;51820:172;;-1:-1:-1;51820:172:0;;-1:-1:-1;51820:172:0;-1:-1:-1;52023:28:0;;52043:7;52023:19;:28::i;:::-;-1:-1:-1;;;;;52005:15:0;;;;;;:7;:15;;;;;;;;:46;;;;52080:7;:15;;;;:28;;52100:7;52080:19;:28::i;:::-;-1:-1:-1;;;;;52062:15:0;;;;;;;:7;:15;;;;;;:46;;;;52140:18;;;;;;;:39;;52163:15;52140:22;:39::i;:::-;-1:-1:-1;;;;;52119:18:0;;;;;;:7;:18;;;;;:60;52190:26;52205:10;52190:14;:26::i;:::-;52227:23;52239:4;52245;52227:11;:23::i;:::-;52283:9;-1:-1:-1;;;;;52266:44:0;52275:6;-1:-1:-1;;;;;52266:44:0;;52294:15;52266:44;;;;1662:25:1;;1650:2;1635:18;;1516:177;52266:44:0;;;;;;;;51666:652;;;;;;51541:777;;;:::o;50744:789::-;50893:23;50931:12;50958:18;50990:20;51002:7;50990:11;:20::i;:::-;50878:132;;;;;;51022:15;51039:23;51064:12;51080:113;51106:7;51128:4;51147:10;51172;:8;:10::i;51080:113::-;-1:-1:-1;;;;;51224:15:0;;;;;;:7;:15;;;;;;51021:172;;-1:-1:-1;51021:172:0;;-1:-1:-1;51021:172:0;-1:-1:-1;51224:28:0;;51021:172;51224:19;:28::i;:::-;-1:-1:-1;;;;;51206:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;51284:18;;;;;:7;:18;;;;;:39;;51307:15;51284:22;:39::i;:::-;-1:-1:-1;;;;;51263:18:0;;;;;;:7;:18;;;;;;;;:60;;;;51355:7;:18;;;;:39;;51378:15;51355:22;:39::i;50018:716::-;50165:23;50203:12;50230:18;50262:20;50274:7;50262:11;:20::i;:::-;50150:132;;;;;;50294:15;50311:23;50336:12;50352:113;50378:7;50400:4;50419:10;50444;:8;:10::i;50352:113::-;-1:-1:-1;;;;;50496:15:0;;;;;;:7;:15;;;;;;50293:172;;-1:-1:-1;50293:172:0;;-1:-1:-1;50293:172:0;-1:-1:-1;50496:28:0;;50293:172;50496:19;:28::i;52326:848::-;52477:23;52515:12;52542:18;52574:20;52586:7;52574:11;:20::i;:::-;52462:132;;;;;;52606:15;52623:23;52648:12;52664:113;52690:7;52712:4;52731:10;52756;:8;:10::i;52664:113::-;-1:-1:-1;;;;;52808:15:0;;;;;;:7;:15;;;;;;52605:172;;-1:-1:-1;52605:172:0;;-1:-1:-1;52605:172:0;-1:-1:-1;52808:28:0;;52828:7;52808:19;:28::i;:::-;-1:-1:-1;;;;;52790:15:0;;;;;;:7;:15;;;;;;;;:46;;;;52865:7;:15;;;;:28;;52885:7;52865:19;:28::i;42689:355::-;42752:19;42774:10;:8;:10::i;:::-;42752:32;-1:-1:-1;42795:18:0;42816:27;:10;42752:32;42816:14;:27::i;:::-;42895:4;42879:22;;;;:7;:22;;;;;;42795:48;;-1:-1:-1;42879:38:0;;42795:48;42879:26;:38::i;:::-;42870:4;42854:22;;;;:7;:22;;;;;;;;:63;;;;42932:11;:26;;;;;;42928:108;;;43014:4;42998:22;;;;:7;:22;;;;;;:38;;43025:10;42998:26;:38::i;:::-;42989:4;42973:22;;;;:7;:22;;;;;:63;42741:303;;42689:355;:::o;40737:147::-;40815:7;;:17;;40827:4;40815:11;:17::i;:::-;40805:7;:27;40856:10;;:20;;40871:4;40856:14;:20::i;:::-;40843:10;:33;-1:-1:-1;;40737:147:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;671:70;616:131;:::o;752:315::-;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1264:247::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;1431:9;1418:23;1450:31;1475:5;1450:31;:::i;1933:456::-;2010:6;2018;2026;2079:2;2067:9;2058:7;2054:23;2050:32;2047:52;;;2095:1;2092;2085:12;2047:52;2134:9;2121:23;2153:31;2178:5;2153:31;:::i;:::-;2203:5;-1:-1:-1;2260:2:1;2245:18;;2232:32;2273:33;2232:32;2273:33;:::i;:::-;1933:456;;2325:7;;-1:-1:-1;;;2379:2:1;2364:18;;;;2351:32;;1933:456::o;2661:180::-;2720:6;2773:2;2761:9;2752:7;2748:23;2744:32;2741:52;;;2789:1;2786;2779:12;2741:52;-1:-1:-1;2812:23:1;;2661:180;-1:-1:-1;2661:180:1:o;3035:118::-;3121:5;3114:13;3107:21;3100:5;3097:32;3087:60;;3143:1;3140;3133:12;3158:309;3223:6;3231;3284:2;3272:9;3263:7;3259:23;3255:32;3252:52;;;3300:1;3297;3290:12;3252:52;3336:9;3323:23;3313:33;;3396:2;3385:9;3381:18;3368:32;3409:28;3431:5;3409:28;:::i;:::-;3456:5;3446:15;;;3158:309;;;;;:::o;3680:156::-;3746:20;;3806:4;3795:16;;3785:27;;3775:55;;3826:1;3823;3816:12;3775:55;3680:156;;;:::o;3841:252::-;3905:6;3913;3966:2;3954:9;3945:7;3941:23;3937:32;3934:52;;;3982:1;3979;3972:12;3934:52;4005:27;4022:9;4005:27;:::i;:::-;3995:37;;4051:36;4083:2;4072:9;4068:18;4051:36;:::i;:::-;4041:46;;3841:252;;;;;:::o;4098:241::-;4154:6;4207:2;4195:9;4186:7;4182:23;4178:32;4175:52;;;4223:1;4220;4213:12;4175:52;4262:9;4249:23;4281:28;4303:5;4281:28;:::i;4344:388::-;4412:6;4420;4473:2;4461:9;4452:7;4448:23;4444:32;4441:52;;;4489:1;4486;4479:12;4441:52;4528:9;4515:23;4547:31;4572:5;4547:31;:::i;:::-;4597:5;-1:-1:-1;4654:2:1;4639:18;;4626:32;4667:33;4626:32;4667:33;:::i;4737:380::-;4816:1;4812:12;;;;4859;;;4880:61;;4934:4;4926:6;4922:17;4912:27;;4880:61;4987:2;4979:6;4976:14;4956:18;4953:38;4950:161;;;5033:10;5028:3;5024:20;5021:1;5014:31;5068:4;5065:1;5058:15;5096:4;5093:1;5086:15;4950:161;;4737:380;;;:::o;5122:356::-;5324:2;5306:21;;;5343:18;;;5336:30;5402:34;5397:2;5382:18;;5375:62;5469:2;5454:18;;5122:356::o;6246:127::-;6307:10;6302:3;6298:20;6295:1;6288:31;6338:4;6335:1;6328:15;6362:4;6359:1;6352:15;6378:127;6439:10;6434:3;6430:20;6427:1;6420:31;6470:4;6467:1;6460:15;6494:4;6491:1;6484:15;6510:125;6550:4;6578:1;6575;6572:8;6569:34;;;6583:18;;:::i;:::-;-1:-1:-1;6620:9:1;;6510:125::o;6640:127::-;6701:10;6696:3;6692:20;6689:1;6682:31;6732:4;6729:1;6722:15;6756:4;6753:1;6746:15;6772:135;6811:3;-1:-1:-1;;6832:17:1;;6829:43;;;6852:18;;:::i;:::-;-1:-1:-1;6899:1:1;6888:13;;6772:135::o;8320:245::-;8387:6;8440:2;8428:9;8419:7;8415:23;8411:32;8408:52;;;8456:1;8453;8446:12;8408:52;8488:9;8482:16;8507:28;8529:5;8507:28;:::i;10496:128::-;10536:3;10567:1;10563:6;10560:1;10557:13;10554:39;;;10573:18;;:::i;:::-;-1:-1:-1;10609:9:1;;10496:128::o;16258:168::-;16298:7;16364:1;16360;16356:6;16352:14;16349:1;16346:21;16341:1;16334:9;16327:17;16323:45;16320:71;;;16371:18;;:::i;:::-;-1:-1:-1;16411:9:1;;16258:168::o;16431:217::-;16471:1;16497;16487:132;;16541:10;16536:3;16532:20;16529:1;16522:31;16576:4;16573:1;16566:15;16604:4;16601:1;16594:15;16487:132;-1:-1:-1;16633:9:1;;16431:217::o;17511:251::-;17581:6;17634:2;17622:9;17613:7;17609:23;17605:32;17602:52;;;17650:1;17647;17640:12;17602:52;17682:9;17676:16;17701:31;17726:5;17701:31;:::i;17767:980::-;18029:4;18077:3;18066:9;18062:19;18108:6;18097:9;18090:25;18134:2;18172:6;18167:2;18156:9;18152:18;18145:34;18215:3;18210:2;18199:9;18195:18;18188:31;18239:6;18274;18268:13;18305:6;18297;18290:22;18343:3;18332:9;18328:19;18321:26;;18382:2;18374:6;18370:15;18356:29;;18403:1;18413:195;18427:6;18424:1;18421:13;18413:195;;;18492:13;;-1:-1:-1;;;;;18488:39:1;18476:52;;18583:15;;;;18548:12;;;;18524:1;18442:9;18413:195;;;-1:-1:-1;;;;;;;18664:32:1;;;;18659:2;18644:18;;18637:60;-1:-1:-1;;;18728:3:1;18713:19;18706:35;18625:3;17767:980;-1:-1:-1;;;17767:980:1:o;19364:306::-;19452:6;19460;19468;19521:2;19509:9;19500:7;19496:23;19492:32;19489:52;;;19537:1;19534;19527:12;19489:52;19566:9;19560:16;19550:26;;19616:2;19605:9;19601:18;19595:25;19585:35;;19660:2;19649:9;19645:18;19639:25;19629:35;;19364:306;;;;;:::o

Swarm Source

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