ETH Price: $3,128.44 (-0.26%)

Token

Thor Inu (TIO)
 

Overview

Max Total Supply

100,000,000 TIO

Holders

102

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
649,018.167635756384984298 TIO

Value
$0.00
0xb82e1d74f07909778332a8ffa3b4d3ac7869b4ad
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
TIO

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-06-26
*/

// SPDX-License-Identifier: Unlicensed

/**
   #Thor Inu
   
   5% fee auto distribute to all holders
   5% fee auto add to the liquidity pool
   5% auto moved to the Marketing wallet

 */

pragma solidity ^0.8.3;


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

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

    /**
     * @dev Moves `amount` tokens from the caller's account to `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);
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function _msgData() internal view virtual returns (bytes calldata) {
        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) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

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

        // 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");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

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

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

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

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

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

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

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

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

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

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

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

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

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

contract TIO is Context, IERC20, Ownable {
    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;

    address private _charityWalletAddress = 0xE53AaF266243eF95dE2E370d278DD28172BB043f;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 100 * 10**6 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;


    string private _name = "Thor Inu";
    string private _symbol = "TIO";
    uint8 private _decimals = 18;
    
    uint256 public _taxFee = 5;
    
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _charityFee = 5;

    uint256 private _previousCharityFee = _charityFee;
    uint256 public _liquidityFee = 5;

    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    uint256 public _maxTxAmount = 5 * 10**6 * 10**18;
    uint256 private numTokensSellToAddToLiquidity = 10 * 10**6 * 10**18;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[owner()] = _rTotal;
        
        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 and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        emit Transfer(address(0), owner(), _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 rAmount,,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

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

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

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }
    
    function setRouterAddress(address newRouter) public onlyOwner() {
        IUniswapV2Router02 _newUniSwapRouter = IUniswapV2Router02(newRouter);
        uniswapV2Pair = IUniswapV2Factory(_newUniSwapRouter.factory()).createPair(address(this), _newUniSwapRouter.WETH());
        uniswapV2Router = _newUniSwapRouter;
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already included");
        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 _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _takeCharity(tCharity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
        function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }

    function setCharityFeePercent(uint256 charityFee) external onlyOwner() {
        _charityFee = charityFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }
   
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

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

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

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

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

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rCharity = tCharity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rCharity);
        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 _takeCharity(uint256 tCharity) private {
        uint256 currentRate =  _getRate();
        uint256 rCharity = tCharity.mul(currentRate);
        _rOwned[_charityWalletAddress] = _rOwned[_charityWalletAddress].add(rCharity);
        if(_isExcluded[_charityWalletAddress])
            _tOwned[_charityWalletAddress] = _tOwned[_charityWalletAddress].add(tCharity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateCharityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_charityFee).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;
        
        _previousTaxFee = _taxFee;
        _previousCharityFee = _charityFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _charityFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _charityFee = _previousCharityFee;
        _liquidityFee = _previousLiquidityFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

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

    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);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

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

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

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _takeCharity(tCharity);
        _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":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_charityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","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":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"charityFee","type":"uint256"}],"name":"setCharityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273e53aaf266243ef95de2e370d278dd28172bb043f600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506a52b7d2dcc80cd2e40000006008556008546000196200007a91906200087d565b600019620000899190620007ce565b6009556040518060400160405280600881526020017f54686f7220496e75000000000000000000000000000000000000000000000000815250600b9080519060200190620000d99291906200066f565b506040518060400160405280600381526020017f54494f0000000000000000000000000000000000000000000000000000000000815250600c9080519060200190620001279291906200066f565b506012600d60006101000a81548160ff021916908360ff1602179055506005600e55600e54600f556005601055601054601155600560125560125460135560016015806101000a81548160ff0219169083151502179055506a0422ca8b0a00a4250000006016556a084595161401484a000000601755348015620001aa57600080fd5b506000620001bd6200063e60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060095460016000620002926200064660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033057600080fd5b505afa15801562000345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036b919062000736565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003ce57600080fd5b505afa158015620003e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000409919062000736565b6040518363ffffffff1660e01b81526004016200042892919062000784565b602060405180830381600087803b1580156200044357600080fd5b505af115801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e919062000736565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160046000620005156200064660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005ce6200064660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040516200062f9190620007b1565b60405180910390a3506200095c565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200067d9062000847565b90600052602060002090601f016020900481019282620006a15760008555620006ed565b82601f10620006bc57805160ff1916838001178555620006ed565b82800160010185558215620006ed579182015b82811115620006ec578251825591602001919060010190620006cf565b5b509050620006fc919062000700565b5090565b5b808211156200071b57600081600090555060010162000701565b5090565b600081519050620007308162000942565b92915050565b6000602082840312156200074957600080fd5b600062000759848285016200071f565b91505092915050565b6200076d8162000809565b82525050565b6200077e816200083d565b82525050565b60006040820190506200079b600083018562000762565b620007aa602083018462000762565b9392505050565b6000602082019050620007c8600083018462000773565b92915050565b6000620007db826200083d565b9150620007e8836200083d565b925082821015620007fe57620007fd620008b5565b5b828203905092915050565b600062000816826200081d565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200086057607f821691505b6020821081141562000877576200087662000913565b5b50919050565b60006200088a826200083d565b915062000897836200083d565b925082620008aa57620008a9620008e4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6200094d8162000809565b81146200095957600080fd5b50565b61543d806200096c6000396000f3fe60806040526004361061021e5760003560e01c80634a74bb02116101235780638ee88c53116100ab578063c49b9a801161006f578063c49b9a801461081a578063d543dbeb14610843578063dd62ed3e1461086c578063ea2f0b37146108a9578063f2fde38b146108d257610225565b80638ee88c531461072357806395d89b411461074c578063a457c2d714610777578063a9059cbb146107b4578063af41063b146107f157610225565b806370a08231116100f257806370a082311461063c578063715018a6146106795780637d1db4a51461069057806388f82020146106bb5780638da5cb5b146106f857610225565b80634a74bb021461058057806352390c02146105ab5780635342acb4146105d45780636bc87c3a1461061157610225565b80633685d419116101a657806340f8007a1161017557806340f8007a1461049b57806341cb87fc146104c6578063437823ec146104ef5780634549b0391461051857806349bd5a5e1461055557610225565b80633685d419146103e1578063395093511461040a5780633b124fe7146104475780633bd5d1731461047257610225565b80631694505e116101ed5780631694505e146102e657806318160ddd1461031157806323b872dd1461033c5780632d83811914610379578063313ce567146103b657610225565b8063061c82d01461022a57806306fdde0314610253578063095ea7b31461027e57806313114a9d146102bb57610225565b3661022557005b600080fd5b34801561023657600080fd5b50610251600480360381019061024c91906145d2565b6108fb565b005b34801561025f57600080fd5b50610268610981565b6040516102759190614a40565b60405180910390f35b34801561028a57600080fd5b506102a560048036038101906102a0919061456d565b610a13565b6040516102b29190614a0a565b60405180910390f35b3480156102c757600080fd5b506102d0610a31565b6040516102dd9190614c02565b60405180910390f35b3480156102f257600080fd5b506102fb610a3b565b6040516103089190614a25565b60405180910390f35b34801561031d57600080fd5b50610326610a61565b6040516103339190614c02565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e919061451e565b610a6b565b6040516103709190614a0a565b60405180910390f35b34801561038557600080fd5b506103a0600480360381019061039b91906145d2565b610b44565b6040516103ad9190614c02565b60405180910390f35b3480156103c257600080fd5b506103cb610bb2565b6040516103d89190614cae565b60405180910390f35b3480156103ed57600080fd5b5061040860048036038101906104039190614490565b610bc9565b005b34801561041657600080fd5b50610431600480360381019061042c919061456d565b610f97565b60405161043e9190614a0a565b60405180910390f35b34801561045357600080fd5b5061045c61104a565b6040516104699190614c02565b60405180910390f35b34801561047e57600080fd5b50610499600480360381019061049491906145d2565b611050565b005b3480156104a757600080fd5b506104b06111cc565b6040516104bd9190614c02565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190614490565b6111d2565b005b3480156104fb57600080fd5b5061051660048036038101906105119190614490565b61145f565b005b34801561052457600080fd5b5061053f600480360381019061053a91906145fb565b611536565b60405161054c9190614c02565b60405180910390f35b34801561056157600080fd5b5061056a6115bc565b6040516105779190614965565b60405180910390f35b34801561058c57600080fd5b506105956115e2565b6040516105a29190614a0a565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd9190614490565b6115f3565b005b3480156105e057600080fd5b506105fb60048036038101906105f69190614490565b61188e565b6040516106089190614a0a565b60405180910390f35b34801561061d57600080fd5b506106266118e4565b6040516106339190614c02565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190614490565b6118ea565b6040516106709190614c02565b60405180910390f35b34801561068557600080fd5b5061068e6119d5565b005b34801561069c57600080fd5b506106a5611b0f565b6040516106b29190614c02565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd9190614490565b611b15565b6040516106ef9190614a0a565b60405180910390f35b34801561070457600080fd5b5061070d611b6b565b60405161071a9190614965565b60405180910390f35b34801561072f57600080fd5b5061074a600480360381019061074591906145d2565b611b94565b005b34801561075857600080fd5b50610761611c1a565b60405161076e9190614a40565b60405180910390f35b34801561078357600080fd5b5061079e6004803603810190610799919061456d565b611cac565b6040516107ab9190614a0a565b60405180910390f35b3480156107c057600080fd5b506107db60048036038101906107d6919061456d565b611d79565b6040516107e89190614a0a565b60405180910390f35b3480156107fd57600080fd5b50610818600480360381019061081391906145d2565b611d97565b005b34801561082657600080fd5b50610841600480360381019061083c91906145a9565b611e1d565b005b34801561084f57600080fd5b5061086a600480360381019061086591906145d2565b611eec565b005b34801561087857600080fd5b50610893600480360381019061088e91906144e2565b611f99565b6040516108a09190614c02565b60405180910390f35b3480156108b557600080fd5b506108d060048036038101906108cb9190614490565b612020565b005b3480156108de57600080fd5b506108f960048036038101906108f49190614490565b6120f7565b005b6109036122a0565b73ffffffffffffffffffffffffffffffffffffffff16610921611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614610977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096e90614b62565b60405180910390fd5b80600e8190555050565b6060600b805461099090614ef1565b80601f01602080910402602001604051908101604052809291908181526020018280546109bc90614ef1565b8015610a095780601f106109de57610100808354040283529160200191610a09565b820191906000526020600020905b8154815290600101906020018083116109ec57829003601f168201915b5050505050905090565b6000610a27610a206122a0565b84846122a8565b6001905092915050565b6000600a54905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600854905090565b6000610a78848484612473565b610b3984610a846122a0565b610b34856040518060600160405280602881526020016153bb60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aea6122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e09092919063ffffffff16565b6122a8565b600190509392505050565b6000600954821115610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8290614a82565b60405180910390fd5b6000610b95612835565b9050610baa818461286090919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b610bd16122a0565b73ffffffffffffffffffffffffffffffffffffffff16610bef611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c90614b62565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc890614b02565b60405180910390fd5b60005b600680549050811015610f93578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610d32577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f805760066001600680549050610d8d9190614dff565b81548110610dc4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610e29577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610f46577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610f93565b8080610f8b90614f23565b915050610cd4565b5050565b6000611040610fa46122a0565b8461103b8560036000610fb56122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b6122a8565b6001905092915050565b600e5481565b600061105a6122a0565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614be2565b60405180910390fd5b60006110f48361288c565b505050505050905061114e81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111a6816009546128f490919063ffffffff16565b6009819055506111c183600a5461287690919063ffffffff16565b600a81905550505050565b60105481565b6111da6122a0565b73ffffffffffffffffffffffffffffffffffffffff166111f8611b6b565b73ffffffffffffffffffffffffffffffffffffffff161461124e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124590614b62565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561129957600080fd5b505afa1580156112ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d191906144b9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561133357600080fd5b505afa158015611347573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136b91906144b9565b6040518363ffffffff1660e01b8152600401611388929190614980565b602060405180830381600087803b1580156113a257600080fd5b505af11580156113b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113da91906144b9565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6114676122a0565b73ffffffffffffffffffffffffffffffffffffffff16611485611b6b565b73ffffffffffffffffffffffffffffffffffffffff16146114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d290614b62565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060085483111561157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490614b22565b60405180910390fd5b8161159e57600061158d8461288c565b5050505050509050809150506115b6565b60006115a98461288c565b5050505050915050809150505b92915050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60158054906101000a900460ff1681565b6115fb6122a0565b73ffffffffffffffffffffffffffffffffffffffff16611619611b6b565b73ffffffffffffffffffffffffffffffffffffffff161461166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690614b62565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f390614ae2565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156117d05761178c600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b44565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561198557600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506119d0565b6119cd600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b44565b90505b919050565b6119dd6122a0565b73ffffffffffffffffffffffffffffffffffffffff166119fb611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4890614b62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60165481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b9c6122a0565b73ffffffffffffffffffffffffffffffffffffffff16611bba611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0790614b62565b60405180910390fd5b8060128190555050565b6060600c8054611c2990614ef1565b80601f0160208091040260200160405190810160405280929190818152602001828054611c5590614ef1565b8015611ca25780601f10611c7757610100808354040283529160200191611ca2565b820191906000526020600020905b815481529060010190602001808311611c8557829003601f168201915b5050505050905090565b6000611d6f611cb96122a0565b84611d6a856040518060600160405280602581526020016153e36025913960036000611ce36122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e09092919063ffffffff16565b6122a8565b6001905092915050565b6000611d8d611d866122a0565b8484612473565b6001905092915050565b611d9f6122a0565b73ffffffffffffffffffffffffffffffffffffffff16611dbd611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a90614b62565b60405180910390fd5b8060108190555050565b611e256122a0565b73ffffffffffffffffffffffffffffffffffffffff16611e43611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9090614b62565b60405180910390fd5b806015806101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611ee19190614a0a565b60405180910390a150565b611ef46122a0565b73ffffffffffffffffffffffffffffffffffffffff16611f12611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5f90614b62565b60405180910390fd5b611f906064611f828360085461290a90919063ffffffff16565b61286090919063ffffffff16565b60168190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120286122a0565b73ffffffffffffffffffffffffffffffffffffffff16612046611b6b565b73ffffffffffffffffffffffffffffffffffffffff161461209c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209390614b62565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6120ff6122a0565b73ffffffffffffffffffffffffffffffffffffffff1661211d611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614612173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216a90614b62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121da90614aa2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230f90614bc2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614ac2565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124669190614c02565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124da90614ba2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254a90614a62565b60405180910390fd5b60008111612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d90614b82565b60405180910390fd5b61259e611b6b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561260c57506125dc611b6b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561265757601654811115612656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264d90614b42565b60405180910390fd5b5b6000612662306118ea565b905060165481106126735760165490505b600060175482101590508080156126975750601560149054906101000a900460ff16155b80156126f15750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612707575060158054906101000a900460ff165b1561271b57601754915061271a82612920565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127c25750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127cc57600090505b6127d8868686846129f6565b505050505050565b6000838311158290612828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281f9190614a40565b60405180910390fd5b5082840390509392505050565b6000806000612842612d07565b91509150612859818361286090919063ffffffff16565b9250505090565b6000818361286e9190614d74565b905092915050565b600081836128849190614d1e565b905092915050565b60008060008060008060008060008060006128a68c613052565b935093509350935060008060006128c78f8787876128c2612835565b6130d1565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b600081836129029190614dff565b905092915050565b600081836129189190614da5565b905092915050565b6001601560146101000a81548160ff021916908315150217905550600061295160028361286090919063ffffffff16565b9050600061296882846128f490919063ffffffff16565b9050600047905061297883613185565b600061298d82476128f490919063ffffffff16565b90506129998382613449565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516129cc93929190614c77565b60405180910390a1505050506000601560146101000a81548160ff02191690831515021790555050565b80612a0457612a0361353d565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612aa75750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612abc57612ab7848484613591565b612cf3565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b5f5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b7457612b6f8484846137ff565b612cf2565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c185750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c2d57612c28848484613a6d565b612cf1565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ccf5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ce457612cdf848484613c46565b612cf0565b612cef848484613a6d565b5b5b5b5b80612d0157612d00613f49565b5b50505050565b600080600060095490506000600854905060005b60068054905081101561301557826001600060068481548110612d67577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612e7b5750816002600060068481548110612e13577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612e92576009546008549450945050505061304e565b612f486001600060068481548110612ed3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846128f490919063ffffffff16565b92506130006002600060068481548110612f8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836128f490919063ffffffff16565b9150808061300d90614f23565b915050612d1b565b5061302d60085460095461286090919063ffffffff16565b8210156130455760095460085493509350505061304e565b81819350935050505b9091565b600080600080600061306386613f66565b9050600061307087613f97565b9050600061307d88613fc8565b905060006130b8826130aa8561309c888e6128f490919063ffffffff16565b6128f490919063ffffffff16565b6128f490919063ffffffff16565b9050808484849750975097509750505050509193509193565b6000806000806130ea858a61290a90919063ffffffff16565b90506000613101868a61290a90919063ffffffff16565b90506000613118878a61290a90919063ffffffff16565b9050600061312f888a61290a90919063ffffffff16565b9050600061316a8261315c8561314e888a6128f490919063ffffffff16565b6128f490919063ffffffff16565b6128f490919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600267ffffffffffffffff8111156131c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156131f65781602001602082028036833780820191505090505b5090503081600081518110613234577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156132d657600080fd5b505afa1580156132ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330e91906144b9565b81600181518110613348577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133af30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122a8565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613413959493929190614c1d565b600060405180830381600087803b15801561342d57600080fd5b505af1158015613441573d6000803e3d6000fd5b505050505050565b61347630601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122a8565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806134c2611b6b565b426040518863ffffffff1660e01b81526004016134e4969594939291906149a9565b6060604051808303818588803b1580156134fd57600080fd5b505af1158015613511573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135369190614637565b5050505050565b6000600e5414801561355157506000601254145b1561355b5761358f565b600e54600f819055506010546011819055506012546013819055506000600e81905550600060108190555060006012819055505b565b60008060008060008060006135a58861288c565b965096509650965096509650965061360588600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061369a87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061372f86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061377b82613ff9565b6137848161419e565b61378e85846143ed565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516137eb9190614c02565b60405180910390a350505050505050505050565b60008060008060008060006138138861288c565b965096509650965096509650965061387387600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061390884600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061399d86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139e982613ff9565b6139f28161419e565b6139fc85846143ed565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613a599190614c02565b60405180910390a350505050505050505050565b6000806000806000806000613a818861288c565b9650965096509650965096509650613ae187600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b7686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bc282613ff9565b613bcb8161419e565b613bd585846143ed565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613c329190614c02565b60405180910390a350505050505050505050565b6000806000806000806000613c5a8861288c565b9650965096509650965096509650613cba88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d4f87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613de484600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e7986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ec582613ff9565b613ece8161419e565b613ed885846143ed565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613f359190614c02565b60405180910390a350505050505050505050565b600f54600e81905550601154601081905550601354601281905550565b6000613f906064613f82600e548561290a90919063ffffffff16565b61286090919063ffffffff16565b9050919050565b6000613fc16064613fb36012548561290a90919063ffffffff16565b61286090919063ffffffff16565b9050919050565b6000613ff26064613fe46010548561290a90919063ffffffff16565b61286090919063ffffffff16565b9050919050565b6000614003612835565b9050600061401a828461290a90919063ffffffff16565b905061406e81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156141995761415583600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60006141a8612835565b905060006141bf828461290a90919063ffffffff16565b90506142358160016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b60016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156143e8576143828360026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b60026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614402826009546128f490919063ffffffff16565b60098190555061441d81600a5461287690919063ffffffff16565b600a819055505050565b60008135905061443681615375565b92915050565b60008151905061444b81615375565b92915050565b6000813590506144608161538c565b92915050565b600081359050614475816153a3565b92915050565b60008151905061448a816153a3565b92915050565b6000602082840312156144a257600080fd5b60006144b084828501614427565b91505092915050565b6000602082840312156144cb57600080fd5b60006144d98482850161443c565b91505092915050565b600080604083850312156144f557600080fd5b600061450385828601614427565b925050602061451485828601614427565b9150509250929050565b60008060006060848603121561453357600080fd5b600061454186828701614427565b935050602061455286828701614427565b925050604061456386828701614466565b9150509250925092565b6000806040838503121561458057600080fd5b600061458e85828601614427565b925050602061459f85828601614466565b9150509250929050565b6000602082840312156145bb57600080fd5b60006145c984828501614451565b91505092915050565b6000602082840312156145e457600080fd5b60006145f284828501614466565b91505092915050565b6000806040838503121561460e57600080fd5b600061461c85828601614466565b925050602061462d85828601614451565b9150509250929050565b60008060006060848603121561464c57600080fd5b600061465a8682870161447b565b935050602061466b8682870161447b565b925050604061467c8682870161447b565b9150509250925092565b6000614692838361469e565b60208301905092915050565b6146a781614e33565b82525050565b6146b681614e33565b82525050565b60006146c782614cd9565b6146d18185614cfc565b93506146dc83614cc9565b8060005b8381101561470d5781516146f48882614686565b97506146ff83614cef565b9250506001810190506146e0565b5085935050505092915050565b61472381614e45565b82525050565b61473281614e88565b82525050565b61474181614eac565b82525050565b600061475282614ce4565b61475c8185614d0d565b935061476c818560208601614ebe565b61477581614ff9565b840191505092915050565b600061478d602383614d0d565b91506147988261500a565b604082019050919050565b60006147b0602a83614d0d565b91506147bb82615059565b604082019050919050565b60006147d3602683614d0d565b91506147de826150a8565b604082019050919050565b60006147f6602283614d0d565b9150614801826150f7565b604082019050919050565b6000614819601b83614d0d565b915061482482615146565b602082019050919050565b600061483c601b83614d0d565b91506148478261516f565b602082019050919050565b600061485f601f83614d0d565b915061486a82615198565b602082019050919050565b6000614882602883614d0d565b915061488d826151c1565b604082019050919050565b60006148a5602083614d0d565b91506148b082615210565b602082019050919050565b60006148c8602983614d0d565b91506148d382615239565b604082019050919050565b60006148eb602583614d0d565b91506148f682615288565b604082019050919050565b600061490e602483614d0d565b9150614919826152d7565b604082019050919050565b6000614931602c83614d0d565b915061493c82615326565b604082019050919050565b61495081614e71565b82525050565b61495f81614e7b565b82525050565b600060208201905061497a60008301846146ad565b92915050565b600060408201905061499560008301856146ad565b6149a260208301846146ad565b9392505050565b600060c0820190506149be60008301896146ad565b6149cb6020830188614947565b6149d86040830187614738565b6149e56060830186614738565b6149f260808301856146ad565b6149ff60a0830184614947565b979650505050505050565b6000602082019050614a1f600083018461471a565b92915050565b6000602082019050614a3a6000830184614729565b92915050565b60006020820190508181036000830152614a5a8184614747565b905092915050565b60006020820190508181036000830152614a7b81614780565b9050919050565b60006020820190508181036000830152614a9b816147a3565b9050919050565b60006020820190508181036000830152614abb816147c6565b9050919050565b60006020820190508181036000830152614adb816147e9565b9050919050565b60006020820190508181036000830152614afb8161480c565b9050919050565b60006020820190508181036000830152614b1b8161482f565b9050919050565b60006020820190508181036000830152614b3b81614852565b9050919050565b60006020820190508181036000830152614b5b81614875565b9050919050565b60006020820190508181036000830152614b7b81614898565b9050919050565b60006020820190508181036000830152614b9b816148bb565b9050919050565b60006020820190508181036000830152614bbb816148de565b9050919050565b60006020820190508181036000830152614bdb81614901565b9050919050565b60006020820190508181036000830152614bfb81614924565b9050919050565b6000602082019050614c176000830184614947565b92915050565b600060a082019050614c326000830188614947565b614c3f6020830187614738565b8181036040830152614c5181866146bc565b9050614c6060608301856146ad565b614c6d6080830184614947565b9695505050505050565b6000606082019050614c8c6000830186614947565b614c996020830185614947565b614ca66040830184614947565b949350505050565b6000602082019050614cc36000830184614956565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614d2982614e71565b9150614d3483614e71565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d6957614d68614f6c565b5b828201905092915050565b6000614d7f82614e71565b9150614d8a83614e71565b925082614d9a57614d99614f9b565b5b828204905092915050565b6000614db082614e71565b9150614dbb83614e71565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614df457614df3614f6c565b5b828202905092915050565b6000614e0a82614e71565b9150614e1583614e71565b925082821015614e2857614e27614f6c565b5b828203905092915050565b6000614e3e82614e51565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614e9382614e9a565b9050919050565b6000614ea582614e51565b9050919050565b6000614eb782614e71565b9050919050565b60005b83811015614edc578082015181840152602081019050614ec1565b83811115614eeb576000848401525b50505050565b60006002820490506001821680614f0957607f821691505b60208210811415614f1d57614f1c614fca565b5b50919050565b6000614f2e82614e71565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f6157614f60614f6c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b61537e81614e33565b811461538957600080fd5b50565b61539581614e45565b81146153a057600080fd5b50565b6153ac81614e71565b81146153b757600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a54fcf13d90475a62faf51dd52d141bb9f40ab81bb6bd22d5ad7af9ed863e54d64736f6c63430008030033

Deployed Bytecode

0x60806040526004361061021e5760003560e01c80634a74bb02116101235780638ee88c53116100ab578063c49b9a801161006f578063c49b9a801461081a578063d543dbeb14610843578063dd62ed3e1461086c578063ea2f0b37146108a9578063f2fde38b146108d257610225565b80638ee88c531461072357806395d89b411461074c578063a457c2d714610777578063a9059cbb146107b4578063af41063b146107f157610225565b806370a08231116100f257806370a082311461063c578063715018a6146106795780637d1db4a51461069057806388f82020146106bb5780638da5cb5b146106f857610225565b80634a74bb021461058057806352390c02146105ab5780635342acb4146105d45780636bc87c3a1461061157610225565b80633685d419116101a657806340f8007a1161017557806340f8007a1461049b57806341cb87fc146104c6578063437823ec146104ef5780634549b0391461051857806349bd5a5e1461055557610225565b80633685d419146103e1578063395093511461040a5780633b124fe7146104475780633bd5d1731461047257610225565b80631694505e116101ed5780631694505e146102e657806318160ddd1461031157806323b872dd1461033c5780632d83811914610379578063313ce567146103b657610225565b8063061c82d01461022a57806306fdde0314610253578063095ea7b31461027e57806313114a9d146102bb57610225565b3661022557005b600080fd5b34801561023657600080fd5b50610251600480360381019061024c91906145d2565b6108fb565b005b34801561025f57600080fd5b50610268610981565b6040516102759190614a40565b60405180910390f35b34801561028a57600080fd5b506102a560048036038101906102a0919061456d565b610a13565b6040516102b29190614a0a565b60405180910390f35b3480156102c757600080fd5b506102d0610a31565b6040516102dd9190614c02565b60405180910390f35b3480156102f257600080fd5b506102fb610a3b565b6040516103089190614a25565b60405180910390f35b34801561031d57600080fd5b50610326610a61565b6040516103339190614c02565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e919061451e565b610a6b565b6040516103709190614a0a565b60405180910390f35b34801561038557600080fd5b506103a0600480360381019061039b91906145d2565b610b44565b6040516103ad9190614c02565b60405180910390f35b3480156103c257600080fd5b506103cb610bb2565b6040516103d89190614cae565b60405180910390f35b3480156103ed57600080fd5b5061040860048036038101906104039190614490565b610bc9565b005b34801561041657600080fd5b50610431600480360381019061042c919061456d565b610f97565b60405161043e9190614a0a565b60405180910390f35b34801561045357600080fd5b5061045c61104a565b6040516104699190614c02565b60405180910390f35b34801561047e57600080fd5b50610499600480360381019061049491906145d2565b611050565b005b3480156104a757600080fd5b506104b06111cc565b6040516104bd9190614c02565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190614490565b6111d2565b005b3480156104fb57600080fd5b5061051660048036038101906105119190614490565b61145f565b005b34801561052457600080fd5b5061053f600480360381019061053a91906145fb565b611536565b60405161054c9190614c02565b60405180910390f35b34801561056157600080fd5b5061056a6115bc565b6040516105779190614965565b60405180910390f35b34801561058c57600080fd5b506105956115e2565b6040516105a29190614a0a565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd9190614490565b6115f3565b005b3480156105e057600080fd5b506105fb60048036038101906105f69190614490565b61188e565b6040516106089190614a0a565b60405180910390f35b34801561061d57600080fd5b506106266118e4565b6040516106339190614c02565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190614490565b6118ea565b6040516106709190614c02565b60405180910390f35b34801561068557600080fd5b5061068e6119d5565b005b34801561069c57600080fd5b506106a5611b0f565b6040516106b29190614c02565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd9190614490565b611b15565b6040516106ef9190614a0a565b60405180910390f35b34801561070457600080fd5b5061070d611b6b565b60405161071a9190614965565b60405180910390f35b34801561072f57600080fd5b5061074a600480360381019061074591906145d2565b611b94565b005b34801561075857600080fd5b50610761611c1a565b60405161076e9190614a40565b60405180910390f35b34801561078357600080fd5b5061079e6004803603810190610799919061456d565b611cac565b6040516107ab9190614a0a565b60405180910390f35b3480156107c057600080fd5b506107db60048036038101906107d6919061456d565b611d79565b6040516107e89190614a0a565b60405180910390f35b3480156107fd57600080fd5b50610818600480360381019061081391906145d2565b611d97565b005b34801561082657600080fd5b50610841600480360381019061083c91906145a9565b611e1d565b005b34801561084f57600080fd5b5061086a600480360381019061086591906145d2565b611eec565b005b34801561087857600080fd5b50610893600480360381019061088e91906144e2565b611f99565b6040516108a09190614c02565b60405180910390f35b3480156108b557600080fd5b506108d060048036038101906108cb9190614490565b612020565b005b3480156108de57600080fd5b506108f960048036038101906108f49190614490565b6120f7565b005b6109036122a0565b73ffffffffffffffffffffffffffffffffffffffff16610921611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614610977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096e90614b62565b60405180910390fd5b80600e8190555050565b6060600b805461099090614ef1565b80601f01602080910402602001604051908101604052809291908181526020018280546109bc90614ef1565b8015610a095780601f106109de57610100808354040283529160200191610a09565b820191906000526020600020905b8154815290600101906020018083116109ec57829003601f168201915b5050505050905090565b6000610a27610a206122a0565b84846122a8565b6001905092915050565b6000600a54905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600854905090565b6000610a78848484612473565b610b3984610a846122a0565b610b34856040518060600160405280602881526020016153bb60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aea6122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e09092919063ffffffff16565b6122a8565b600190509392505050565b6000600954821115610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8290614a82565b60405180910390fd5b6000610b95612835565b9050610baa818461286090919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b610bd16122a0565b73ffffffffffffffffffffffffffffffffffffffff16610bef611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c90614b62565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc890614b02565b60405180910390fd5b60005b600680549050811015610f93578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610d32577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f805760066001600680549050610d8d9190614dff565b81548110610dc4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610e29577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610f46577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610f93565b8080610f8b90614f23565b915050610cd4565b5050565b6000611040610fa46122a0565b8461103b8560036000610fb56122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b6122a8565b6001905092915050565b600e5481565b600061105a6122a0565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614be2565b60405180910390fd5b60006110f48361288c565b505050505050905061114e81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111a6816009546128f490919063ffffffff16565b6009819055506111c183600a5461287690919063ffffffff16565b600a81905550505050565b60105481565b6111da6122a0565b73ffffffffffffffffffffffffffffffffffffffff166111f8611b6b565b73ffffffffffffffffffffffffffffffffffffffff161461124e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124590614b62565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561129957600080fd5b505afa1580156112ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d191906144b9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561133357600080fd5b505afa158015611347573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136b91906144b9565b6040518363ffffffff1660e01b8152600401611388929190614980565b602060405180830381600087803b1580156113a257600080fd5b505af11580156113b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113da91906144b9565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6114676122a0565b73ffffffffffffffffffffffffffffffffffffffff16611485611b6b565b73ffffffffffffffffffffffffffffffffffffffff16146114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d290614b62565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060085483111561157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490614b22565b60405180910390fd5b8161159e57600061158d8461288c565b5050505050509050809150506115b6565b60006115a98461288c565b5050505050915050809150505b92915050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60158054906101000a900460ff1681565b6115fb6122a0565b73ffffffffffffffffffffffffffffffffffffffff16611619611b6b565b73ffffffffffffffffffffffffffffffffffffffff161461166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690614b62565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f390614ae2565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156117d05761178c600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b44565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561198557600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506119d0565b6119cd600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b44565b90505b919050565b6119dd6122a0565b73ffffffffffffffffffffffffffffffffffffffff166119fb611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4890614b62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60165481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b9c6122a0565b73ffffffffffffffffffffffffffffffffffffffff16611bba611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0790614b62565b60405180910390fd5b8060128190555050565b6060600c8054611c2990614ef1565b80601f0160208091040260200160405190810160405280929190818152602001828054611c5590614ef1565b8015611ca25780601f10611c7757610100808354040283529160200191611ca2565b820191906000526020600020905b815481529060010190602001808311611c8557829003601f168201915b5050505050905090565b6000611d6f611cb96122a0565b84611d6a856040518060600160405280602581526020016153e36025913960036000611ce36122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e09092919063ffffffff16565b6122a8565b6001905092915050565b6000611d8d611d866122a0565b8484612473565b6001905092915050565b611d9f6122a0565b73ffffffffffffffffffffffffffffffffffffffff16611dbd611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a90614b62565b60405180910390fd5b8060108190555050565b611e256122a0565b73ffffffffffffffffffffffffffffffffffffffff16611e43611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9090614b62565b60405180910390fd5b806015806101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611ee19190614a0a565b60405180910390a150565b611ef46122a0565b73ffffffffffffffffffffffffffffffffffffffff16611f12611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5f90614b62565b60405180910390fd5b611f906064611f828360085461290a90919063ffffffff16565b61286090919063ffffffff16565b60168190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120286122a0565b73ffffffffffffffffffffffffffffffffffffffff16612046611b6b565b73ffffffffffffffffffffffffffffffffffffffff161461209c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209390614b62565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6120ff6122a0565b73ffffffffffffffffffffffffffffffffffffffff1661211d611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614612173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216a90614b62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121da90614aa2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230f90614bc2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614ac2565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124669190614c02565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124da90614ba2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254a90614a62565b60405180910390fd5b60008111612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d90614b82565b60405180910390fd5b61259e611b6b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561260c57506125dc611b6b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561265757601654811115612656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264d90614b42565b60405180910390fd5b5b6000612662306118ea565b905060165481106126735760165490505b600060175482101590508080156126975750601560149054906101000a900460ff16155b80156126f15750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612707575060158054906101000a900460ff165b1561271b57601754915061271a82612920565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127c25750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127cc57600090505b6127d8868686846129f6565b505050505050565b6000838311158290612828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281f9190614a40565b60405180910390fd5b5082840390509392505050565b6000806000612842612d07565b91509150612859818361286090919063ffffffff16565b9250505090565b6000818361286e9190614d74565b905092915050565b600081836128849190614d1e565b905092915050565b60008060008060008060008060008060006128a68c613052565b935093509350935060008060006128c78f8787876128c2612835565b6130d1565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b600081836129029190614dff565b905092915050565b600081836129189190614da5565b905092915050565b6001601560146101000a81548160ff021916908315150217905550600061295160028361286090919063ffffffff16565b9050600061296882846128f490919063ffffffff16565b9050600047905061297883613185565b600061298d82476128f490919063ffffffff16565b90506129998382613449565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516129cc93929190614c77565b60405180910390a1505050506000601560146101000a81548160ff02191690831515021790555050565b80612a0457612a0361353d565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612aa75750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612abc57612ab7848484613591565b612cf3565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b5f5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b7457612b6f8484846137ff565b612cf2565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c185750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c2d57612c28848484613a6d565b612cf1565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ccf5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ce457612cdf848484613c46565b612cf0565b612cef848484613a6d565b5b5b5b5b80612d0157612d00613f49565b5b50505050565b600080600060095490506000600854905060005b60068054905081101561301557826001600060068481548110612d67577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612e7b5750816002600060068481548110612e13577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612e92576009546008549450945050505061304e565b612f486001600060068481548110612ed3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846128f490919063ffffffff16565b92506130006002600060068481548110612f8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836128f490919063ffffffff16565b9150808061300d90614f23565b915050612d1b565b5061302d60085460095461286090919063ffffffff16565b8210156130455760095460085493509350505061304e565b81819350935050505b9091565b600080600080600061306386613f66565b9050600061307087613f97565b9050600061307d88613fc8565b905060006130b8826130aa8561309c888e6128f490919063ffffffff16565b6128f490919063ffffffff16565b6128f490919063ffffffff16565b9050808484849750975097509750505050509193509193565b6000806000806130ea858a61290a90919063ffffffff16565b90506000613101868a61290a90919063ffffffff16565b90506000613118878a61290a90919063ffffffff16565b9050600061312f888a61290a90919063ffffffff16565b9050600061316a8261315c8561314e888a6128f490919063ffffffff16565b6128f490919063ffffffff16565b6128f490919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600267ffffffffffffffff8111156131c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156131f65781602001602082028036833780820191505090505b5090503081600081518110613234577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156132d657600080fd5b505afa1580156132ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330e91906144b9565b81600181518110613348577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133af30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122a8565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613413959493929190614c1d565b600060405180830381600087803b15801561342d57600080fd5b505af1158015613441573d6000803e3d6000fd5b505050505050565b61347630601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122a8565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806134c2611b6b565b426040518863ffffffff1660e01b81526004016134e4969594939291906149a9565b6060604051808303818588803b1580156134fd57600080fd5b505af1158015613511573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135369190614637565b5050505050565b6000600e5414801561355157506000601254145b1561355b5761358f565b600e54600f819055506010546011819055506012546013819055506000600e81905550600060108190555060006012819055505b565b60008060008060008060006135a58861288c565b965096509650965096509650965061360588600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061369a87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061372f86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061377b82613ff9565b6137848161419e565b61378e85846143ed565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516137eb9190614c02565b60405180910390a350505050505050505050565b60008060008060008060006138138861288c565b965096509650965096509650965061387387600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061390884600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061399d86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139e982613ff9565b6139f28161419e565b6139fc85846143ed565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613a599190614c02565b60405180910390a350505050505050505050565b6000806000806000806000613a818861288c565b9650965096509650965096509650613ae187600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b7686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bc282613ff9565b613bcb8161419e565b613bd585846143ed565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613c329190614c02565b60405180910390a350505050505050505050565b6000806000806000806000613c5a8861288c565b9650965096509650965096509650613cba88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d4f87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613de484600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e7986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ec582613ff9565b613ece8161419e565b613ed885846143ed565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613f359190614c02565b60405180910390a350505050505050505050565b600f54600e81905550601154601081905550601354601281905550565b6000613f906064613f82600e548561290a90919063ffffffff16565b61286090919063ffffffff16565b9050919050565b6000613fc16064613fb36012548561290a90919063ffffffff16565b61286090919063ffffffff16565b9050919050565b6000613ff26064613fe46010548561290a90919063ffffffff16565b61286090919063ffffffff16565b9050919050565b6000614003612835565b9050600061401a828461290a90919063ffffffff16565b905061406e81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156141995761415583600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60006141a8612835565b905060006141bf828461290a90919063ffffffff16565b90506142358160016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b60016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156143e8576143828360026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b60026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614402826009546128f490919063ffffffff16565b60098190555061441d81600a5461287690919063ffffffff16565b600a819055505050565b60008135905061443681615375565b92915050565b60008151905061444b81615375565b92915050565b6000813590506144608161538c565b92915050565b600081359050614475816153a3565b92915050565b60008151905061448a816153a3565b92915050565b6000602082840312156144a257600080fd5b60006144b084828501614427565b91505092915050565b6000602082840312156144cb57600080fd5b60006144d98482850161443c565b91505092915050565b600080604083850312156144f557600080fd5b600061450385828601614427565b925050602061451485828601614427565b9150509250929050565b60008060006060848603121561453357600080fd5b600061454186828701614427565b935050602061455286828701614427565b925050604061456386828701614466565b9150509250925092565b6000806040838503121561458057600080fd5b600061458e85828601614427565b925050602061459f85828601614466565b9150509250929050565b6000602082840312156145bb57600080fd5b60006145c984828501614451565b91505092915050565b6000602082840312156145e457600080fd5b60006145f284828501614466565b91505092915050565b6000806040838503121561460e57600080fd5b600061461c85828601614466565b925050602061462d85828601614451565b9150509250929050565b60008060006060848603121561464c57600080fd5b600061465a8682870161447b565b935050602061466b8682870161447b565b925050604061467c8682870161447b565b9150509250925092565b6000614692838361469e565b60208301905092915050565b6146a781614e33565b82525050565b6146b681614e33565b82525050565b60006146c782614cd9565b6146d18185614cfc565b93506146dc83614cc9565b8060005b8381101561470d5781516146f48882614686565b97506146ff83614cef565b9250506001810190506146e0565b5085935050505092915050565b61472381614e45565b82525050565b61473281614e88565b82525050565b61474181614eac565b82525050565b600061475282614ce4565b61475c8185614d0d565b935061476c818560208601614ebe565b61477581614ff9565b840191505092915050565b600061478d602383614d0d565b91506147988261500a565b604082019050919050565b60006147b0602a83614d0d565b91506147bb82615059565b604082019050919050565b60006147d3602683614d0d565b91506147de826150a8565b604082019050919050565b60006147f6602283614d0d565b9150614801826150f7565b604082019050919050565b6000614819601b83614d0d565b915061482482615146565b602082019050919050565b600061483c601b83614d0d565b91506148478261516f565b602082019050919050565b600061485f601f83614d0d565b915061486a82615198565b602082019050919050565b6000614882602883614d0d565b915061488d826151c1565b604082019050919050565b60006148a5602083614d0d565b91506148b082615210565b602082019050919050565b60006148c8602983614d0d565b91506148d382615239565b604082019050919050565b60006148eb602583614d0d565b91506148f682615288565b604082019050919050565b600061490e602483614d0d565b9150614919826152d7565b604082019050919050565b6000614931602c83614d0d565b915061493c82615326565b604082019050919050565b61495081614e71565b82525050565b61495f81614e7b565b82525050565b600060208201905061497a60008301846146ad565b92915050565b600060408201905061499560008301856146ad565b6149a260208301846146ad565b9392505050565b600060c0820190506149be60008301896146ad565b6149cb6020830188614947565b6149d86040830187614738565b6149e56060830186614738565b6149f260808301856146ad565b6149ff60a0830184614947565b979650505050505050565b6000602082019050614a1f600083018461471a565b92915050565b6000602082019050614a3a6000830184614729565b92915050565b60006020820190508181036000830152614a5a8184614747565b905092915050565b60006020820190508181036000830152614a7b81614780565b9050919050565b60006020820190508181036000830152614a9b816147a3565b9050919050565b60006020820190508181036000830152614abb816147c6565b9050919050565b60006020820190508181036000830152614adb816147e9565b9050919050565b60006020820190508181036000830152614afb8161480c565b9050919050565b60006020820190508181036000830152614b1b8161482f565b9050919050565b60006020820190508181036000830152614b3b81614852565b9050919050565b60006020820190508181036000830152614b5b81614875565b9050919050565b60006020820190508181036000830152614b7b81614898565b9050919050565b60006020820190508181036000830152614b9b816148bb565b9050919050565b60006020820190508181036000830152614bbb816148de565b9050919050565b60006020820190508181036000830152614bdb81614901565b9050919050565b60006020820190508181036000830152614bfb81614924565b9050919050565b6000602082019050614c176000830184614947565b92915050565b600060a082019050614c326000830188614947565b614c3f6020830187614738565b8181036040830152614c5181866146bc565b9050614c6060608301856146ad565b614c6d6080830184614947565b9695505050505050565b6000606082019050614c8c6000830186614947565b614c996020830185614947565b614ca66040830184614947565b949350505050565b6000602082019050614cc36000830184614956565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614d2982614e71565b9150614d3483614e71565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d6957614d68614f6c565b5b828201905092915050565b6000614d7f82614e71565b9150614d8a83614e71565b925082614d9a57614d99614f9b565b5b828204905092915050565b6000614db082614e71565b9150614dbb83614e71565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614df457614df3614f6c565b5b828202905092915050565b6000614e0a82614e71565b9150614e1583614e71565b925082821015614e2857614e27614f6c565b5b828203905092915050565b6000614e3e82614e51565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614e9382614e9a565b9050919050565b6000614ea582614e51565b9050919050565b6000614eb782614e71565b9050919050565b60005b83811015614edc578082015181840152602081019050614ec1565b83811115614eeb576000848401525b50505050565b60006002820490506001821680614f0957607f821691505b60208210811415614f1d57614f1c614fca565b5b50919050565b6000614f2e82614e71565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f6157614f60614f6c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b61537e81614e33565b811461538957600080fd5b50565b61539581614e45565b81146153a057600080fd5b50565b6153ac81614e71565b81146153b757600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a54fcf13d90475a62faf51dd52d141bb9f40ab81bb6bd22d5ad7af9ed863e54d64736f6c63430008030033

Deployed Bytecode Sourcemap

28861:20067:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36856:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31382:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32309:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33430:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30003:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31674:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32478:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34363:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31583:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35413:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32799:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29712:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33531:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29805:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35083:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36611:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33917:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30051:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30120:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34624:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41779:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29900:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31777:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20344:148;;;;;;;;;;;;;:::i;:::-;;30173:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33302:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19693:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37088:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31488:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33025:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31983:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36962:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37391:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37221:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32158:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36734:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20647:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36856:98;19924:12;:10;:12::i;:::-;19913:23;;:7;:5;:7::i;:::-;:23;;;19905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36940:6:::1;36930:7;:16;;;;36856:98:::0;:::o;31382:83::-;31419:13;31452:5;31445:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31382:83;:::o;32309:161::-;32384:4;32401:39;32410:12;:10;:12::i;:::-;32424:7;32433:6;32401:8;:39::i;:::-;32458:4;32451:11;;32309:161;;;;:::o;33430:87::-;33472:7;33499:10;;33492:17;;33430:87;:::o;30003:41::-;;;;;;;;;;;;;:::o;31674:95::-;31727:7;31754;;31747:14;;31674:95;:::o;32478:313::-;32576:4;32593:36;32603:6;32611:9;32622:6;32593:9;:36::i;:::-;32640:121;32649:6;32657:12;:10;:12::i;:::-;32671:89;32709:6;32671:89;;;;;;;;;;;;;;;;;:11;:19;32683:6;32671:19;;;;;;;;;;;;;;;:33;32691:12;:10;:12::i;:::-;32671:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;32640:8;:121::i;:::-;32779:4;32772:11;;32478:313;;;;;:::o;34363:253::-;34429:7;34468;;34457;:18;;34449:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34533:19;34556:10;:8;:10::i;:::-;34533:33;;34584:24;34596:11;34584:7;:11;;:24;;;;:::i;:::-;34577:31;;;34363:253;;;:::o;31583:83::-;31624:5;31649:9;;;;;;;;;;;31642:16;;31583:83;:::o;35413:479::-;19924:12;:10;:12::i;:::-;19913:23;;:7;:5;:7::i;:::-;:23;;;19905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35495:11:::1;:20;35507:7;35495:20;;;;;;;;;;;;;;;;;;;;;;;;;35487:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35563:9;35558:327;35582:9;:16;;;;35578:1;:20;35558:327;;;35640:7;35624:23;;:9;35634:1;35624:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;35620:254;;;35683:9;35712:1;35693:9;:16;;;;:20;;;;:::i;:::-;35683:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35668:9;35678:1;35668:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35752:1;35733:7;:16;35741:7;35733:16;;;;;;;;;;;;;;;:20;;;;35795:5;35772:11;:20;35784:7;35772:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;35819:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35853:5;;35620:254;35600:3;;;;;:::i;:::-;;;;35558:327;;;;35413:479:::0;:::o;32799:218::-;32887:4;32904:83;32913:12;:10;:12::i;:::-;32927:7;32936:50;32975:10;32936:11;:25;32948:12;:10;:12::i;:::-;32936:25;;;;;;;;;;;;;;;:34;32962:7;32936:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;32904:8;:83::i;:::-;33005:4;32998:11;;32799:218;;;;:::o;29712:26::-;;;;:::o;33531:378::-;33583:14;33600:12;:10;:12::i;:::-;33583:29;;33632:11;:19;33644:6;33632:19;;;;;;;;;;;;;;;;;;;;;;;;;33631:20;33623:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;33712:15;33737:19;33748:7;33737:10;:19::i;:::-;33711:45;;;;;;;;33785:28;33805:7;33785;:15;33793:6;33785:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33767:7;:15;33775:6;33767:15;;;;;;;;;;;;;;;:46;;;;33834:20;33846:7;33834;;:11;;:20;;;;:::i;:::-;33824:7;:30;;;;33878:23;33893:7;33878:10;;:14;;:23;;;;:::i;:::-;33865:10;:36;;;;33531:378;;;:::o;29805:30::-;;;;:::o;35083:322::-;19924:12;:10;:12::i;:::-;19913:23;;:7;:5;:7::i;:::-;:23;;;19905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35158:36:::1;35216:9;35158:68;;35271:17;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35253:57;;;35319:4;35326:17;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35253:98;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35237:13;;:114;;;;;;;;;;;;;;;;;;35380:17;35362:15;;:35;;;;;;;;;;;;;;;;;;19984:1;35083:322:::0;:::o;36611:111::-;19924:12;:10;:12::i;:::-;19913:23;;:7;:5;:7::i;:::-;:23;;;19905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36710:4:::1;36680:18;:27;36699:7;36680:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;36611:111:::0;:::o;33917:438::-;34007:7;34046;;34035;:18;;34027:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34105:17;34100:248;;34140:15;34165:19;34176:7;34165:10;:19::i;:::-;34139:45;;;;;;;;34206:7;34199:14;;;;;34100:248;34248:23;34280:19;34291:7;34280:10;:19::i;:::-;34246:53;;;;;;;;34321:15;34314:22;;;33917:438;;;;;:::o;30051:28::-;;;;;;;;;;;;;:::o;30120:40::-;;;;;;;;;;;;:::o;34624:447::-;19924:12;:10;:12::i;:::-;19913:23;;:7;:5;:7::i;:::-;:23;;;19905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34821:11:::1;:20;34833:7;34821:20;;;;;;;;;;;;;;;;;;;;;;;;;34820:21;34812:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34906:1;34887:7;:16;34895:7;34887:16;;;;;;;;;;;;;;;;:20;34884:108;;;34943:37;34963:7;:16;34971:7;34963:16;;;;;;;;;;;;;;;;34943:19;:37::i;:::-;34924:7;:16;34932:7;34924:16;;;;;;;;;;;;;;;:56;;;;34884:108;35025:4;35002:11;:20;35014:7;35002:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;35040:9;35055:7;35040:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34624:447:::0;:::o;41779:123::-;41843:4;41867:18;:27;41886:7;41867:27;;;;;;;;;;;;;;;;;;;;;;;;;41860:34;;41779:123;;;:::o;29900:32::-;;;;:::o;31777:198::-;31843:7;31867:11;:20;31879:7;31867:20;;;;;;;;;;;;;;;;;;;;;;;;;31863:49;;;31896:7;:16;31904:7;31896:16;;;;;;;;;;;;;;;;31889:23;;;;31863:49;31930:37;31950:7;:16;31958:7;31950:16;;;;;;;;;;;;;;;;31930:19;:37::i;:::-;31923:44;;31777:198;;;;:::o;20344:148::-;19924:12;:10;:12::i;:::-;19913:23;;:7;:5;:7::i;:::-;:23;;;19905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20451:1:::1;20414:40;;20435:6;::::0;::::1;;;;;;;;20414:40;;;;;;;;;;;;20482:1;20465:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;20344:148::o:0;30173:48::-;;;;:::o;33302:120::-;33370:4;33394:11;:20;33406:7;33394:20;;;;;;;;;;;;;;;;;;;;;;;;;33387:27;;33302:120;;;:::o;19693:87::-;19739:7;19766:6;;;;;;;;;;;19759:13;;19693:87;:::o;37088:122::-;19924:12;:10;:12::i;:::-;19913:23;;:7;:5;:7::i;:::-;:23;;;19905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37190:12:::1;37174:13;:28;;;;37088:122:::0;:::o;31488:87::-;31527:13;31560:7;31553:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31488:87;:::o;33025:269::-;33118:4;33135:129;33144:12;:10;:12::i;:::-;33158:7;33167:96;33206:15;33167:96;;;;;;;;;;;;;;;;;:11;:25;33179:12;:10;:12::i;:::-;33167:25;;;;;;;;;;;;;;;:34;33193:7;33167:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;33135:8;:129::i;:::-;33282:4;33275:11;;33025:269;;;;:::o;31983:167::-;32061:4;32078:42;32088:12;:10;:12::i;:::-;32102:9;32113:6;32078:9;:42::i;:::-;32138:4;32131:11;;31983:167;;;;:::o;36962:114::-;19924:12;:10;:12::i;:::-;19913:23;;:7;:5;:7::i;:::-;:23;;;19905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37058:10:::1;37044:11;:24;;;;36962:114:::0;:::o;37391:171::-;19924:12;:10;:12::i;:::-;19913:23;;:7;:5;:7::i;:::-;:23;;;19905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37492:8:::1;37468:21;::::0;:32:::1;;;;;;;;;;;;;;;;;;37516:38;37545:8;37516:38;;;;;;:::i;:::-;;;;;;;;37391:171:::0;:::o;37221:162::-;19924:12;:10;:12::i;:::-;19913:23;;:7;:5;:7::i;:::-;:23;;;19905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37315:60:::1;37359:5;37315:25;37327:12;37315:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;37300:12;:75;;;;37221:162:::0;:::o;32158:143::-;32239:7;32266:11;:18;32278:5;32266:18;;;;;;;;;;;;;;;:27;32285:7;32266:27;;;;;;;;;;;;;;;;32259:34;;32158:143;;;;:::o;36734:110::-;19924:12;:10;:12::i;:::-;19913:23;;:7;:5;:7::i;:::-;:23;;;19905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36831:5:::1;36801:18;:27;36820:7;36801:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;36734:110:::0;:::o;20647:244::-;19924:12;:10;:12::i;:::-;19913:23;;:7;:5;:7::i;:::-;:23;;;19905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20756:1:::1;20736:22;;:8;:22;;;;20728:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20846:8;20817:38;;20838:6;::::0;::::1;;;;;;;;20817:38;;;;;;;;;;;;20875:8;20866:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;20647:244:::0;:::o;10399:98::-;10452:7;10479:10;10472:17;;10399:98;:::o;41910:337::-;42020:1;42003:19;;:5;:19;;;;41995:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42101:1;42082:21;;:7;:21;;;;42074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42185:6;42155:11;:18;42167:5;42155:18;;;;;;;;;;;;;;;:27;42174:7;42155:27;;;;;;;;;;;;;;;:36;;;;42223:7;42207:32;;42216:5;42207:32;;;42232:6;42207:32;;;;;;:::i;:::-;;;;;;;;41910:337;;;:::o;42255:1813::-;42393:1;42377:18;;:4;:18;;;;42369:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42470:1;42456:16;;:2;:16;;;;42448:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42540:1;42531:6;:10;42523:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42609:7;:5;:7::i;:::-;42601:15;;:4;:15;;;;:32;;;;;42626:7;:5;:7::i;:::-;42620:13;;:2;:13;;;;42601:32;42598:125;;;42666:12;;42656:6;:22;;42648:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;42598:125;43018:28;43049:24;43067:4;43049:9;:24::i;:::-;43018:55;;43121:12;;43097:20;:36;43094:112;;43182:12;;43159:35;;43094:112;43226:24;43277:29;;43253:20;:53;;43226:80;;43335:19;:53;;;;;43372:16;;;;;;;;;;;43371:17;43335:53;:91;;;;;43413:13;;;;;;;;;;;43405:21;;:4;:21;;;;43335:91;:129;;;;;43443:21;;;;;;;;;;43335:129;43317:318;;;43514:29;;43491:52;;43587:36;43602:20;43587:14;:36::i;:::-;43317:318;43716:12;43731:4;43716:19;;43843:18;:24;43862:4;43843:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;43871:18;:22;43890:2;43871:22;;;;;;;;;;;;;;;;;;;;;;;;;43843:50;43840:96;;;43919:5;43909:15;;43840:96;44022:38;44037:4;44042:2;44045:6;44052:7;44022:14;:38::i;:::-;42255:1813;;;;;;:::o;7849:206::-;7935:7;7993:1;7988;:6;;7996:12;7980:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8035:1;8031;:5;8024:12;;7849:206;;;;;:::o;39250:163::-;39291:7;39312:15;39329;39348:19;:17;:19::i;:::-;39311:56;;;;39385:20;39397:7;39385;:11;;:20;;;;:::i;:::-;39378:27;;;;39250:163;:::o;6707:98::-;6765:7;6796:1;6792;:5;;;;:::i;:::-;6785:12;;6707:98;;;;:::o;5570:::-;5628:7;5659:1;5655;:5;;;;:::i;:::-;5648:12;;5570:98;;;;:::o;37823:466::-;37882:7;37891;37900;37909;37918;37927;37936;37957:23;37982:12;37996:18;38016:16;38036:20;38048:7;38036:11;:20::i;:::-;37956:100;;;;;;;;38068:15;38085:23;38110:12;38126:60;38138:7;38147:4;38153:10;38165:8;38175:10;:8;:10::i;:::-;38126:11;:60::i;:::-;38067:119;;;;;;38205:7;38214:15;38231:4;38237:15;38254:4;38260:10;38272:8;38197:84;;;;;;;;;;;;;;;;;;;;;37823:466;;;;;;;;;:::o;5951:98::-;6009:7;6040:1;6036;:5;;;;:::i;:::-;6029:12;;5951:98;;;;:::o;6308:::-;6366:7;6397:1;6393;:5;;;;:::i;:::-;6386:12;;6308:98;;;;:::o;44076:985::-;30621:4;30602:16;;:23;;;;;;;;;;;;;;;;;;44212:12:::1;44227:27;44252:1;44227:20;:24;;:27;;;;:::i;:::-;44212:42;;44265:17;44285:30;44310:4;44285:20;:24;;:30;;;;:::i;:::-;44265:50;;44593:22;44618:21;44593:46;;44684:22;44701:4;44684:16;:22::i;:::-;44837:18;44858:41;44884:14;44858:21;:25;;:41;;;;:::i;:::-;44837:62;;44949:35;44962:9;44973:10;44949:12;:35::i;:::-;45010:43;45025:4;45031:10;45043:9;45010:43;;;;;;;;:::i;:::-;;;;;;;;30636:1;;;;30667:5:::0;30648:16;;:24;;;;;;;;;;;;;;;;;;44076:985;:::o;46260:834::-;46371:7;46367:40;;46393:14;:12;:14::i;:::-;46367:40;46432:11;:19;46444:6;46432:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;46456:11;:22;46468:9;46456:22;;;;;;;;;;;;;;;;;;;;;;;;;46455:23;46432:46;46428:597;;;46495:48;46517:6;46525:9;46536:6;46495:21;:48::i;:::-;46428:597;;;46566:11;:19;46578:6;46566:19;;;;;;;;;;;;;;;;;;;;;;;;;46565:20;:46;;;;;46589:11;:22;46601:9;46589:22;;;;;;;;;;;;;;;;;;;;;;;;;46565:46;46561:464;;;46628:46;46648:6;46656:9;46667:6;46628:19;:46::i;:::-;46561:464;;;46697:11;:19;46709:6;46697:19;;;;;;;;;;;;;;;;;;;;;;;;;46696:20;:47;;;;;46721:11;:22;46733:9;46721:22;;;;;;;;;;;;;;;;;;;;;;;;;46720:23;46696:47;46692:333;;;46760:44;46778:6;46786:9;46797:6;46760:17;:44::i;:::-;46692:333;;;46826:11;:19;46838:6;46826:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;46849:11;:22;46861:9;46849:22;;;;;;;;;;;;;;;;;;;;;;;;;46826:45;46822:203;;;46888:48;46910:6;46918:9;46929:6;46888:21;:48::i;:::-;46822:203;;;46969:44;46987:6;46995:9;47006:6;46969:17;:44::i;:::-;46822:203;46692:333;46561:464;46428:597;47049:7;47045:41;;47071:15;:13;:15::i;:::-;47045:41;46260:834;;;;:::o;39421:561::-;39471:7;39480;39500:15;39518:7;;39500:25;;39536:15;39554:7;;39536:25;;39583:9;39578:289;39602:9;:16;;;;39598:1;:20;39578:289;;;39668:7;39644;:21;39652:9;39662:1;39652:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39644:21;;;;;;;;;;;;;;;;:31;:66;;;;39703:7;39679;:21;39687:9;39697:1;39687:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39679:21;;;;;;;;;;;;;;;;:31;39644:66;39640:97;;;39720:7;;39729;;39712:25;;;;;;;;;39640:97;39762:34;39774:7;:21;39782:9;39792:1;39782:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39774:21;;;;;;;;;;;;;;;;39762:7;:11;;:34;;;;:::i;:::-;39752:44;;39821:34;39833:7;:21;39841:9;39851:1;39841:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39833:21;;;;;;;;;;;;;;;;39821:7;:11;;:34;;;;:::i;:::-;39811:44;;39620:3;;;;;:::i;:::-;;;;39578:289;;;;39891:20;39903:7;;39891;;:11;;:20;;;;:::i;:::-;39881:7;:30;39877:61;;;39921:7;;39930;;39913:25;;;;;;;;39877:61;39957:7;39966;39949:25;;;;;;39421:561;;;:::o;38297:421::-;38357:7;38366;38375;38384;38404:12;38419:24;38435:7;38419:15;:24::i;:::-;38404:39;;38454:18;38475:30;38497:7;38475:21;:30::i;:::-;38454:51;;38516:16;38535:28;38555:7;38535:19;:28::i;:::-;38516:47;;38574:23;38600:47;38638:8;38600:33;38622:10;38600:17;38612:4;38600:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:47;;;;:::i;:::-;38574:73;;38666:15;38683:4;38689:10;38701:8;38658:52;;;;;;;;;;;;38297:421;;;;;:::o;38726:516::-;38859:7;38868;38877;38897:15;38915:24;38927:11;38915:7;:11;;:24;;;;:::i;:::-;38897:42;;38950:12;38965:21;38974:11;38965:4;:8;;:21;;;;:::i;:::-;38950:36;;38997:18;39018:27;39033:11;39018:10;:14;;:27;;;;:::i;:::-;38997:48;;39056:16;39075:25;39088:11;39075:8;:12;;:25;;;;:::i;:::-;39056:44;;39111:23;39137:47;39175:8;39137:33;39159:10;39137:17;39149:4;39137:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:47;;;;:::i;:::-;39111:73;;39203:7;39212:15;39229:4;39195:39;;;;;;;;;;;38726:516;;;;;;;;;:::o;45069:589::-;45195:21;45233:1;45219:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45195:40;;45264:4;45246;45251:1;45246:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;45290:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45280:4;45285:1;45280:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;45325:62;45342:4;45357:15;;;;;;;;;;;45375:11;45325:8;:62::i;:::-;45426:15;;;;;;;;;;;:66;;;45507:11;45533:1;45577:4;45604;45624:15;45426:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45069:589;;:::o;45666:513::-;45814:62;45831:4;45846:15;;;;;;;;;;;45864:11;45814:8;:62::i;:::-;45919:15;;;;;;;;;;;:31;;;45958:9;45991:4;46011:11;46037:1;46080;46123:7;:5;:7::i;:::-;46145:15;45919:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;45666:513;;:::o;41266:320::-;41323:1;41312:7;;:12;:34;;;;;41345:1;41328:13;;:18;41312:34;41309:46;;;41348:7;;41309:46;41393:7;;41375:15;:25;;;;41433:11;;41411:19;:33;;;;41479:13;;41455:21;:37;;;;41523:1;41513:7;:11;;;;41549:1;41535:11;:15;;;;41577:1;41561:13;:17;;;;41266:320;:::o;48308:617::-;48411:15;48428:23;48453:12;48467:23;48492:12;48506:18;48526:16;48546:19;48557:7;48546:10;:19::i;:::-;48410:155;;;;;;;;;;;;;;48594:28;48614:7;48594;:15;48602:6;48594:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48576:7;:15;48584:6;48576:15;;;;;;;;;;;;;;;:46;;;;48651:28;48671:7;48651;:15;48659:6;48651:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48633:7;:15;48641:6;48633:15;;;;;;;;;;;;;;;:46;;;;48711:39;48734:15;48711:7;:18;48719:9;48711:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;48690:7;:18;48698:9;48690:18;;;;;;;;;;;;;;;:60;;;;48764:26;48779:10;48764:14;:26::i;:::-;48801:22;48814:8;48801:12;:22::i;:::-;48834:23;48846:4;48852;48834:11;:23::i;:::-;48890:9;48873:44;;48882:6;48873:44;;;48901:15;48873:44;;;;;;:::i;:::-;;;;;;;;48308:617;;;;;;;;;;:::o;47663:637::-;47764:15;47781:23;47806:12;47820:23;47845:12;47859:18;47879:16;47899:19;47910:7;47899:10;:19::i;:::-;47763:155;;;;;;;;;;;;;;47947:28;47967:7;47947;:15;47955:6;47947:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;47929:7;:15;47937:6;47929:15;;;;;;;;;;;;;;;:46;;;;48007:39;48030:15;48007:7;:18;48015:9;48007:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47986:7;:18;47994:9;47986:18;;;;;;;;;;;;;;;:60;;;;48078:39;48101:15;48078:7;:18;48086:9;48078:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;48057:7;:18;48065:9;48057:18;;;;;;;;;;;;;;;:60;;;;48139:26;48154:10;48139:14;:26::i;:::-;48176:22;48189:8;48176:12;:22::i;:::-;48209:23;48221:4;48227;48209:11;:23::i;:::-;48265:9;48248:44;;48257:6;48248:44;;;48276:15;48248:44;;;;;;:::i;:::-;;;;;;;;47663:637;;;;;;;;;;:::o;47102:553::-;47201:15;47218:23;47243:12;47257:23;47282:12;47296:18;47316:16;47336:19;47347:7;47336:10;:19::i;:::-;47200:155;;;;;;;;;;;;;;47384:28;47404:7;47384;:15;47392:6;47384:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;47366:7;:15;47374:6;47366:15;;;;;;;;;;;;;;;:46;;;;47444:39;47467:15;47444:7;:18;47452:9;47444:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47423:7;:18;47431:9;47423:18;;;;;;;;;;;;;;;:60;;;;47494:26;47509:10;47494:14;:26::i;:::-;47531:22;47544:8;47531:12;:22::i;:::-;47564:23;47576:4;47582;47564:11;:23::i;:::-;47620:9;47603:44;;47612:6;47603:44;;;47631:15;47603:44;;;;;;:::i;:::-;;;;;;;;47102:553;;;;;;;;;;:::o;35902:693::-;36005:15;36022:23;36047:12;36061:23;36086:12;36100:18;36120:16;36140:19;36151:7;36140:10;:19::i;:::-;36004:155;;;;;;;;;;;;;;36188:28;36208:7;36188;:15;36196:6;36188:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;36170:7;:15;36178:6;36170:15;;;;;;;;;;;;;;;:46;;;;36245:28;36265:7;36245;:15;36253:6;36245:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;36227:7;:15;36235:6;36227:15;;;;;;;;;;;;;;;:46;;;;36305:39;36328:15;36305:7;:18;36313:9;36305:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36284:7;:18;36292:9;36284:18;;;;;;;;;;;;;;;:60;;;;36376:39;36399:15;36376:7;:18;36384:9;36376:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36355:7;:18;36363:9;36355:18;;;;;;;;;;;;;;;:60;;;;36434:26;36449:10;36434:14;:26::i;:::-;36471:22;36484:8;36471:12;:22::i;:::-;36504:23;36516:4;36522;36504:11;:23::i;:::-;36560:9;36543:44;;36552:6;36543:44;;;36571:15;36543:44;;;;;;:::i;:::-;;;;;;;;35902:693;;;;;;;;;;:::o;41598:169::-;41652:15;;41642:7;:25;;;;41692:19;;41678:11;:33;;;;41738:21;;41722:13;:37;;;;41598:169::o;40756:154::-;40820:7;40847:55;40886:5;40847:20;40859:7;;40847;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;40840:62;;40756:154;;;:::o;41088:166::-;41158:7;41185:61;41230:5;41185:26;41197:13;;41185:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;41178:68;;41088:166;;;:::o;40918:162::-;40986:7;41013:59;41056:5;41013:24;41025:11;;41013:7;:11;;:24;;;;:::i;:::-;:28;;:59;;;;:::i;:::-;41006:66;;40918:162;;;:::o;39994:355::-;40057:19;40080:10;:8;:10::i;:::-;40057:33;;40101:18;40122:27;40137:11;40122:10;:14;;:27;;;;:::i;:::-;40101:48;;40185:38;40212:10;40185:7;:22;40201:4;40185:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;40160:7;:22;40176:4;40160:22;;;;;;;;;;;;;;;:63;;;;40237:11;:26;40257:4;40237:26;;;;;;;;;;;;;;;;;;;;;;;;;40234:107;;;40303:38;40330:10;40303:7;:22;40319:4;40303:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;40278:7;:22;40294:4;40278:22;;;;;;;;;;;;;;;:63;;;;40234:107;39994:355;;;:::o;40361:383::-;40420:19;40443:10;:8;:10::i;:::-;40420:33;;40464:16;40483:25;40496:11;40483:8;:12;;:25;;;;:::i;:::-;40464:44;;40552;40587:8;40552:7;:30;40560:21;;;;;;;;;;;40552:30;;;;;;;;;;;;;;;;:34;;:44;;;;:::i;:::-;40519:7;:30;40527:21;;;;;;;;;;;40519:30;;;;;;;;;;;;;;;:77;;;;40610:11;:34;40622:21;;;;;;;;;;;40610:34;;;;;;;;;;;;;;;;;;;;;;;;;40607:129;;;40692:44;40727:8;40692:7;:30;40700:21;;;;;;;;;;;40692:30;;;;;;;;;;;;;;;;:34;;:44;;;;:::i;:::-;40659:7;:30;40667:21;;;;;;;;;;;40659:30;;;;;;;;;;;;;;;:77;;;;40607:129;40361:383;;;:::o;37668:147::-;37746:17;37758:4;37746:7;;:11;;:17;;;;:::i;:::-;37736:7;:27;;;;37787:20;37802:4;37787:10;;:14;;:20;;;;:::i;:::-;37774:10;:33;;;;37668:147;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:284::-;;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:64;1261:7;1252:6;1241:9;1237:22;1205:64;:::i;:::-;1195:74;;1151:128;1079:207;;;;:::o;1292:407::-;;;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1433:1;1430;1423:12;1385:2;1476:1;1501:53;1546:7;1537:6;1526:9;1522:22;1501:53;:::i;:::-;1491:63;;1447:117;1603:2;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1574:118;1375:324;;;;;:::o;1705:552::-;;;;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;2033:2;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2004:118;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1805:452;;;;;:::o;2263:407::-;;;2388:2;2376:9;2367:7;2363:23;2359:32;2356:2;;;2404:1;2401;2394:12;2356:2;2447:1;2472:53;2517:7;2508:6;2497:9;2493:22;2472:53;:::i;:::-;2462:63;;2418:117;2574:2;2600:53;2645:7;2636:6;2625:9;2621:22;2600:53;:::i;:::-;2590:63;;2545:118;2346:324;;;;;:::o;2676:256::-;;2781:2;2769:9;2760:7;2756:23;2752:32;2749:2;;;2797:1;2794;2787:12;2749:2;2840:1;2865:50;2907:7;2898:6;2887:9;2883:22;2865:50;:::i;:::-;2855:60;;2811:114;2739:193;;;;:::o;2938:262::-;;3046:2;3034:9;3025:7;3021:23;3017:32;3014:2;;;3062:1;3059;3052:12;3014:2;3105:1;3130:53;3175:7;3166:6;3155:9;3151:22;3130:53;:::i;:::-;3120:63;;3076:117;3004:196;;;;:::o;3206:401::-;;;3328:2;3316:9;3307:7;3303:23;3299:32;3296:2;;;3344:1;3341;3334:12;3296:2;3387:1;3412:53;3457:7;3448:6;3437:9;3433:22;3412:53;:::i;:::-;3402:63;;3358:117;3514:2;3540:50;3582:7;3573:6;3562:9;3558:22;3540:50;:::i;:::-;3530:60;;3485:115;3286:321;;;;;:::o;3613:596::-;;;;3766:2;3754:9;3745:7;3741:23;3737:32;3734:2;;;3782:1;3779;3772:12;3734:2;3825:1;3850:64;3906:7;3897:6;3886:9;3882:22;3850:64;:::i;:::-;3840:74;;3796:128;3963:2;3989:64;4045:7;4036:6;4025:9;4021:22;3989:64;:::i;:::-;3979:74;;3934:129;4102:2;4128:64;4184:7;4175:6;4164:9;4160:22;4128:64;:::i;:::-;4118:74;;4073:129;3724:485;;;;;:::o;4215:179::-;;4305:46;4347:3;4339:6;4305:46;:::i;:::-;4383:4;4378:3;4374:14;4360:28;;4295:99;;;;:::o;4400:108::-;4477:24;4495:5;4477:24;:::i;:::-;4472:3;4465:37;4455:53;;:::o;4514:118::-;4601:24;4619:5;4601:24;:::i;:::-;4596:3;4589:37;4579:53;;:::o;4668:732::-;;4816:54;4864:5;4816:54;:::i;:::-;4886:86;4965:6;4960:3;4886:86;:::i;:::-;4879:93;;4996:56;5046:5;4996:56;:::i;:::-;5075:7;5106:1;5091:284;5116:6;5113:1;5110:13;5091:284;;;5192:6;5186:13;5219:63;5278:3;5263:13;5219:63;:::i;:::-;5212:70;;5305:60;5358:6;5305:60;:::i;:::-;5295:70;;5151:224;5138:1;5135;5131:9;5126:14;;5091:284;;;5095:14;5391:3;5384:10;;4792:608;;;;;;;:::o;5406:109::-;5487:21;5502:5;5487:21;:::i;:::-;5482:3;5475:34;5465:50;;:::o;5521:185::-;5635:64;5693:5;5635:64;:::i;:::-;5630:3;5623:77;5613:93;;:::o;5712:147::-;5807:45;5846:5;5807:45;:::i;:::-;5802:3;5795:58;5785:74;;:::o;5865:364::-;;5981:39;6014:5;5981:39;:::i;:::-;6036:71;6100:6;6095:3;6036:71;:::i;:::-;6029:78;;6116:52;6161:6;6156:3;6149:4;6142:5;6138:16;6116:52;:::i;:::-;6193:29;6215:6;6193:29;:::i;:::-;6188:3;6184:39;6177:46;;5957:272;;;;;:::o;6235:366::-;;6398:67;6462:2;6457:3;6398:67;:::i;:::-;6391:74;;6474:93;6563:3;6474:93;:::i;:::-;6592:2;6587:3;6583:12;6576:19;;6381:220;;;:::o;6607:366::-;;6770:67;6834:2;6829:3;6770:67;:::i;:::-;6763:74;;6846:93;6935:3;6846:93;:::i;:::-;6964:2;6959:3;6955:12;6948:19;;6753:220;;;:::o;6979:366::-;;7142:67;7206:2;7201:3;7142:67;:::i;:::-;7135:74;;7218:93;7307:3;7218:93;:::i;:::-;7336:2;7331:3;7327:12;7320:19;;7125:220;;;:::o;7351:366::-;;7514:67;7578:2;7573:3;7514:67;:::i;:::-;7507:74;;7590:93;7679:3;7590:93;:::i;:::-;7708:2;7703:3;7699:12;7692:19;;7497:220;;;:::o;7723:366::-;;7886:67;7950:2;7945:3;7886:67;:::i;:::-;7879:74;;7962:93;8051:3;7962:93;:::i;:::-;8080:2;8075:3;8071:12;8064:19;;7869:220;;;:::o;8095:366::-;;8258:67;8322:2;8317:3;8258:67;:::i;:::-;8251:74;;8334:93;8423:3;8334:93;:::i;:::-;8452:2;8447:3;8443:12;8436:19;;8241:220;;;:::o;8467:366::-;;8630:67;8694:2;8689:3;8630:67;:::i;:::-;8623:74;;8706:93;8795:3;8706:93;:::i;:::-;8824:2;8819:3;8815:12;8808:19;;8613:220;;;:::o;8839:366::-;;9002:67;9066:2;9061:3;9002:67;:::i;:::-;8995:74;;9078:93;9167:3;9078:93;:::i;:::-;9196:2;9191:3;9187:12;9180:19;;8985:220;;;:::o;9211:366::-;;9374:67;9438:2;9433:3;9374:67;:::i;:::-;9367:74;;9450:93;9539:3;9450:93;:::i;:::-;9568:2;9563:3;9559:12;9552:19;;9357:220;;;:::o;9583:366::-;;9746:67;9810:2;9805:3;9746:67;:::i;:::-;9739:74;;9822:93;9911:3;9822:93;:::i;:::-;9940:2;9935:3;9931:12;9924:19;;9729:220;;;:::o;9955:366::-;;10118:67;10182:2;10177:3;10118:67;:::i;:::-;10111:74;;10194:93;10283:3;10194:93;:::i;:::-;10312:2;10307:3;10303:12;10296:19;;10101:220;;;:::o;10327:366::-;;10490:67;10554:2;10549:3;10490:67;:::i;:::-;10483:74;;10566:93;10655:3;10566:93;:::i;:::-;10684:2;10679:3;10675:12;10668:19;;10473:220;;;:::o;10699:366::-;;10862:67;10926:2;10921:3;10862:67;:::i;:::-;10855:74;;10938:93;11027:3;10938:93;:::i;:::-;11056:2;11051:3;11047:12;11040:19;;10845:220;;;:::o;11071:118::-;11158:24;11176:5;11158:24;:::i;:::-;11153:3;11146:37;11136:53;;:::o;11195:112::-;11278:22;11294:5;11278:22;:::i;:::-;11273:3;11266:35;11256:51;;:::o;11313:222::-;;11444:2;11433:9;11429:18;11421:26;;11457:71;11525:1;11514:9;11510:17;11501:6;11457:71;:::i;:::-;11411:124;;;;:::o;11541:332::-;;11700:2;11689:9;11685:18;11677:26;;11713:71;11781:1;11770:9;11766:17;11757:6;11713:71;:::i;:::-;11794:72;11862:2;11851:9;11847:18;11838:6;11794:72;:::i;:::-;11667:206;;;;;:::o;11879:807::-;;12166:3;12155:9;12151:19;12143:27;;12180:71;12248:1;12237:9;12233:17;12224:6;12180:71;:::i;:::-;12261:72;12329:2;12318:9;12314:18;12305:6;12261:72;:::i;:::-;12343:80;12419:2;12408:9;12404:18;12395:6;12343:80;:::i;:::-;12433;12509:2;12498:9;12494:18;12485:6;12433:80;:::i;:::-;12523:73;12591:3;12580:9;12576:19;12567:6;12523:73;:::i;:::-;12606;12674:3;12663:9;12659:19;12650:6;12606:73;:::i;:::-;12133:553;;;;;;;;;:::o;12692:210::-;;12817:2;12806:9;12802:18;12794:26;;12830:65;12892:1;12881:9;12877:17;12868:6;12830:65;:::i;:::-;12784:118;;;;:::o;12908:276::-;;13066:2;13055:9;13051:18;13043:26;;13079:98;13174:1;13163:9;13159:17;13150:6;13079:98;:::i;:::-;13033:151;;;;:::o;13190:313::-;;13341:2;13330:9;13326:18;13318:26;;13390:9;13384:4;13380:20;13376:1;13365:9;13361:17;13354:47;13418:78;13491:4;13482:6;13418:78;:::i;:::-;13410:86;;13308:195;;;;:::o;13509:419::-;;13713:2;13702:9;13698:18;13690:26;;13762:9;13756:4;13752:20;13748:1;13737:9;13733:17;13726:47;13790:131;13916:4;13790:131;:::i;:::-;13782:139;;13680:248;;;:::o;13934:419::-;;14138:2;14127:9;14123:18;14115:26;;14187:9;14181:4;14177:20;14173:1;14162:9;14158:17;14151:47;14215:131;14341:4;14215:131;:::i;:::-;14207:139;;14105:248;;;:::o;14359:419::-;;14563:2;14552:9;14548:18;14540:26;;14612:9;14606:4;14602:20;14598:1;14587:9;14583:17;14576:47;14640:131;14766:4;14640:131;:::i;:::-;14632:139;;14530:248;;;:::o;14784:419::-;;14988:2;14977:9;14973:18;14965:26;;15037:9;15031:4;15027:20;15023:1;15012:9;15008:17;15001:47;15065:131;15191:4;15065:131;:::i;:::-;15057:139;;14955:248;;;:::o;15209:419::-;;15413:2;15402:9;15398:18;15390:26;;15462:9;15456:4;15452:20;15448:1;15437:9;15433:17;15426:47;15490:131;15616:4;15490:131;:::i;:::-;15482:139;;15380:248;;;:::o;15634:419::-;;15838:2;15827:9;15823:18;15815:26;;15887:9;15881:4;15877:20;15873:1;15862:9;15858:17;15851:47;15915:131;16041:4;15915:131;:::i;:::-;15907:139;;15805:248;;;:::o;16059:419::-;;16263:2;16252:9;16248:18;16240:26;;16312:9;16306:4;16302:20;16298:1;16287:9;16283:17;16276:47;16340:131;16466:4;16340:131;:::i;:::-;16332:139;;16230:248;;;:::o;16484:419::-;;16688:2;16677:9;16673:18;16665:26;;16737:9;16731:4;16727:20;16723:1;16712:9;16708:17;16701:47;16765:131;16891:4;16765:131;:::i;:::-;16757:139;;16655:248;;;:::o;16909:419::-;;17113:2;17102:9;17098:18;17090:26;;17162:9;17156:4;17152:20;17148:1;17137:9;17133:17;17126:47;17190:131;17316:4;17190:131;:::i;:::-;17182:139;;17080:248;;;:::o;17334:419::-;;17538:2;17527:9;17523:18;17515:26;;17587:9;17581:4;17577:20;17573:1;17562:9;17558:17;17551:47;17615:131;17741:4;17615:131;:::i;:::-;17607:139;;17505:248;;;:::o;17759:419::-;;17963:2;17952:9;17948:18;17940:26;;18012:9;18006:4;18002:20;17998:1;17987:9;17983:17;17976:47;18040:131;18166:4;18040:131;:::i;:::-;18032:139;;17930:248;;;:::o;18184:419::-;;18388:2;18377:9;18373:18;18365:26;;18437:9;18431:4;18427:20;18423:1;18412:9;18408:17;18401:47;18465:131;18591:4;18465:131;:::i;:::-;18457:139;;18355:248;;;:::o;18609:419::-;;18813:2;18802:9;18798:18;18790:26;;18862:9;18856:4;18852:20;18848:1;18837:9;18833:17;18826:47;18890:131;19016:4;18890:131;:::i;:::-;18882:139;;18780:248;;;:::o;19034:222::-;;19165:2;19154:9;19150:18;19142:26;;19178:71;19246:1;19235:9;19231:17;19222:6;19178:71;:::i;:::-;19132:124;;;;:::o;19262:831::-;;19563:3;19552:9;19548:19;19540:27;;19577:71;19645:1;19634:9;19630:17;19621:6;19577:71;:::i;:::-;19658:80;19734:2;19723:9;19719:18;19710:6;19658:80;:::i;:::-;19785:9;19779:4;19775:20;19770:2;19759:9;19755:18;19748:48;19813:108;19916:4;19907:6;19813:108;:::i;:::-;19805:116;;19931:72;19999:2;19988:9;19984:18;19975:6;19931:72;:::i;:::-;20013:73;20081:3;20070:9;20066:19;20057:6;20013:73;:::i;:::-;19530:563;;;;;;;;:::o;20099:442::-;;20286:2;20275:9;20271:18;20263:26;;20299:71;20367:1;20356:9;20352:17;20343:6;20299:71;:::i;:::-;20380:72;20448:2;20437:9;20433:18;20424:6;20380:72;:::i;:::-;20462;20530:2;20519:9;20515:18;20506:6;20462:72;:::i;:::-;20253:288;;;;;;:::o;20547:214::-;;20674:2;20663:9;20659:18;20651:26;;20687:67;20751:1;20740:9;20736:17;20727:6;20687:67;:::i;:::-;20641:120;;;;:::o;20767:132::-;;20857:3;20849:11;;20887:4;20882:3;20878:14;20870:22;;20839:60;;;:::o;20905:114::-;;21006:5;21000:12;20990:22;;20979:40;;;:::o;21025:99::-;;21111:5;21105:12;21095:22;;21084:40;;;:::o;21130:113::-;;21232:4;21227:3;21223:14;21215:22;;21205:38;;;:::o;21249:184::-;;21382:6;21377:3;21370:19;21422:4;21417:3;21413:14;21398:29;;21360:73;;;;:::o;21439:169::-;;21557:6;21552:3;21545:19;21597:4;21592:3;21588:14;21573:29;;21535:73;;;;:::o;21614:305::-;;21673:20;21691:1;21673:20;:::i;:::-;21668:25;;21707:20;21725:1;21707:20;:::i;:::-;21702:25;;21861:1;21793:66;21789:74;21786:1;21783:81;21780:2;;;21867:18;;:::i;:::-;21780:2;21911:1;21908;21904:9;21897:16;;21658:261;;;;:::o;21925:185::-;;21982:20;22000:1;21982:20;:::i;:::-;21977:25;;22016:20;22034:1;22016:20;:::i;:::-;22011:25;;22055:1;22045:2;;22060:18;;:::i;:::-;22045:2;22102:1;22099;22095:9;22090:14;;21967:143;;;;:::o;22116:348::-;;22179:20;22197:1;22179:20;:::i;:::-;22174:25;;22213:20;22231:1;22213:20;:::i;:::-;22208:25;;22401:1;22333:66;22329:74;22326:1;22323:81;22318:1;22311:9;22304:17;22300:105;22297:2;;;22408:18;;:::i;:::-;22297:2;22456:1;22453;22449:9;22438:20;;22164:300;;;;:::o;22470:191::-;;22530:20;22548:1;22530:20;:::i;:::-;22525:25;;22564:20;22582:1;22564:20;:::i;:::-;22559:25;;22603:1;22600;22597:8;22594:2;;;22608:18;;:::i;:::-;22594:2;22653:1;22650;22646:9;22638:17;;22515:146;;;;:::o;22667:96::-;;22733:24;22751:5;22733:24;:::i;:::-;22722:35;;22712:51;;;:::o;22769:90::-;;22846:5;22839:13;22832:21;22821:32;;22811:48;;;:::o;22865:126::-;;22942:42;22935:5;22931:54;22920:65;;22910:81;;;:::o;22997:77::-;;23063:5;23052:16;;23042:32;;;:::o;23080:86::-;;23155:4;23148:5;23144:16;23133:27;;23123:43;;;:::o;23172:180::-;;23282:64;23340:5;23282:64;:::i;:::-;23269:77;;23259:93;;;:::o;23358:140::-;;23468:24;23486:5;23468:24;:::i;:::-;23455:37;;23445:53;;;:::o;23504:121::-;;23595:24;23613:5;23595:24;:::i;:::-;23582:37;;23572:53;;;:::o;23631:307::-;23699:1;23709:113;23723:6;23720:1;23717:13;23709:113;;;23808:1;23803:3;23799:11;23793:18;23789:1;23784:3;23780:11;23773:39;23745:2;23742:1;23738:10;23733:15;;23709:113;;;23840:6;23837:1;23834:13;23831:2;;;23920:1;23911:6;23906:3;23902:16;23895:27;23831:2;23680:258;;;;:::o;23944:320::-;;24025:1;24019:4;24015:12;24005:22;;24072:1;24066:4;24062:12;24093:18;24083:2;;24149:4;24141:6;24137:17;24127:27;;24083:2;24211;24203:6;24200:14;24180:18;24177:38;24174:2;;;24230:18;;:::i;:::-;24174:2;23995:269;;;;:::o;24270:233::-;;24332:24;24350:5;24332:24;:::i;:::-;24323:33;;24378:66;24371:5;24368:77;24365:2;;;24448:18;;:::i;:::-;24365:2;24495:1;24488:5;24484:13;24477:20;;24313:190;;;:::o;24509:180::-;24557:77;24554:1;24547:88;24654:4;24651:1;24644:15;24678:4;24675:1;24668:15;24695:180;24743:77;24740:1;24733:88;24840:4;24837:1;24830:15;24864:4;24861:1;24854:15;24881:180;24929:77;24926:1;24919:88;25026:4;25023:1;25016:15;25050:4;25047:1;25040:15;25067:102;;25159:2;25155:7;25150:2;25143:5;25139:14;25135:28;25125:38;;25115:54;;;:::o;25175:222::-;25315:34;25311:1;25303:6;25299:14;25292:58;25384:5;25379:2;25371:6;25367:15;25360:30;25281:116;:::o;25403:229::-;25543:34;25539:1;25531:6;25527:14;25520:58;25612:12;25607:2;25599:6;25595:15;25588:37;25509:123;:::o;25638:225::-;25778:34;25774:1;25766:6;25762:14;25755:58;25847:8;25842:2;25834:6;25830:15;25823:33;25744:119;:::o;25869:221::-;26009:34;26005:1;25997:6;25993:14;25986:58;26078:4;26073:2;26065:6;26061:15;26054:29;25975:115;:::o;26096:177::-;26236:29;26232:1;26224:6;26220:14;26213:53;26202:71;:::o;26279:177::-;26419:29;26415:1;26407:6;26403:14;26396:53;26385:71;:::o;26462:181::-;26602:33;26598:1;26590:6;26586:14;26579:57;26568:75;:::o;26649:227::-;26789:34;26785:1;26777:6;26773:14;26766:58;26858:10;26853:2;26845:6;26841:15;26834:35;26755:121;:::o;26882:182::-;27022:34;27018:1;27010:6;27006:14;26999:58;26988:76;:::o;27070:228::-;27210:34;27206:1;27198:6;27194:14;27187:58;27279:11;27274:2;27266:6;27262:15;27255:36;27176:122;:::o;27304:224::-;27444:34;27440:1;27432:6;27428:14;27421:58;27513:7;27508:2;27500:6;27496:15;27489:32;27410:118;:::o;27534:223::-;27674:34;27670:1;27662:6;27658:14;27651:58;27743:6;27738:2;27730:6;27726:15;27719:31;27640:117;:::o;27763:231::-;27903:34;27899:1;27891:6;27887:14;27880:58;27972:14;27967:2;27959:6;27955:15;27948:39;27869:125;:::o;28000:122::-;28073:24;28091:5;28073:24;:::i;:::-;28066:5;28063:35;28053:2;;28112:1;28109;28102:12;28053:2;28043:79;:::o;28128:116::-;28198:21;28213:5;28198:21;:::i;:::-;28191:5;28188:32;28178:2;;28234:1;28231;28224:12;28178:2;28168:76;:::o;28250:122::-;28323:24;28341:5;28323:24;:::i;:::-;28316:5;28313:35;28303:2;;28362:1;28359;28352:12;28303:2;28293:79;:::o

Swarm Source

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