ETH Price: $2,639.06 (-0.29%)

Token

Utsukushii (UTSU)
 

Overview

Max Total Supply

1,000,000,000 UTSU

Holders

30

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
10,561,997.750593998 UTSU

Value
$0.00
0x47d11da502d5d1606cdee4715611f945f1a6f999
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:
UTSUKUSHII

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-20
*/

/**

@utsukushii_portal

*/
// File: Utsukushii.sol
// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.10;

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

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

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

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

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

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

        return c;
    }

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

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

        return c;
    }

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

        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

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

        return c;
    }

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

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

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

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

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

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

contract UTSUKUSHII 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;

    mapping(address => bool) private _isExcludedFromLimit;

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

    address payable public _marketingAddress = payable(address(0xb4De41a3102817e6F275a8c23Da342d349a17E3B));
    address private _burnAddress = 0x000000000000000000000000000000000000dEaD;

    string private _name = "Utsukushii";
    string private _symbol = "UTSU";
    uint8 private _decimals = 9;

    struct BuyFee {
        uint8 buyback;
        uint8 liquidity;
        uint8 marketing;
        uint8 burn;
    }

    struct SellFee {
        uint8 buyback;
        uint8 liquidity;
        uint8 marketing;
        uint8 burn;
    }

    BuyFee public buyFee;
    SellFee public sellFee;

    uint8 private _buybackFee;
    uint8 private _liquidityFee;
    uint8 private _marketingFee;
    uint8 private _burnFee;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public _maxTxAmount = _tTotal.div(1000).mul(10); //1%
    uint256 private numTokensSellToAddToLiquidity = _tTotal.div(1000).mul(10); //1%
    uint256 public _maxWalletSize = _tTotal.div(1000).mul(20); //2%

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

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

    uint256 public launchedAt = 0;
    bool tradingOpen = false;

    mapping (address => uint256) public _lastUtsu;

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

        buyFee.buyback = 1;
        buyFee.liquidity = 1;
        buyFee.marketing = 1;
        buyFee.burn = 2;

        sellFee.buyback = 1;
        sellFee.liquidity = 1;
        sellFee.marketing = 1;
        sellFee.burn = 2;

        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;
        _isExcludedFromFee[_marketingAddress] = true;

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

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

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromBuyback(_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 burnAddress() public view returns (address) {
        return _burnAddress;
    }

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

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

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

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

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

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

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


    function updateMarketingWallet(address payable newAddress) external onlyOwner {
        _marketingAddress = newAddress;
    }

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

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

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

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

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

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

    function setSellFee(
        uint8 buyback,
        uint8 liquidity,
        uint8 marketing,
        uint8 burn
    ) external onlyOwner {
        sellFee.buyback = buyback;
        sellFee.marketing = marketing;
        sellFee.liquidity = liquidity;
        sellFee.burn = burn;
    }

    function setBuyFee(
        uint8 buyback,
        uint8 liquidity,
        uint8 marketing,
        uint8 burn
    ) external onlyOwner {
        buyFee.buyback = buyback;
        buyFee.marketing = marketing;
        buyFee.liquidity = liquidity;
        buyFee.burn = burn;
    }

    function setBothFees(
        uint8 buy_buyback,
        uint8 buy_liquidity,
        uint8 buy_marketing,
        uint8 buy_burn,
        uint8 sell_buyback,
        uint8 sell_liquidity,
        uint8 sell_marketing,
        uint8 sell_burn

    ) external onlyOwner {
        buyFee.buyback = buy_buyback;
        buyFee.marketing = buy_marketing;
        buyFee.liquidity = buy_liquidity;
        
        buyFee.burn = buy_burn;

        sellFee.buyback = sell_buyback;
        sellFee.marketing = sell_marketing;
        sellFee.liquidity = sell_liquidity;
  
        sellFee.burn = sell_burn;
    }

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

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

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

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

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

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

    function _getTValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = calculateBuybackFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tWallet = calculateMarketingFee(tAmount);
        uint256 tBurn = calculateBurnFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        tTransferAmount = tTransferAmount.sub(tWallet);
        tTransferAmount = tTransferAmount.sub(tBurn);

        return (tTransferAmount, tFee, tLiquidity, tWallet, tBurn);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tLiquidity,
        uint256 tWallet,
        uint256 tBurn,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rWallet = tWallet.mul(currentRate);
        uint256 rBurn = tBurn.mul(currentRate);
        uint256 rTransferAmount = rAmount
            .sub(rFee)
            .sub(rLiquidity)
            .sub(rWallet)
            .sub(rBurn);
        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 _takeWalletFee(uint256 tWallet) private {
        uint256 currentRate = _getRate();
        uint256 rWallet = tWallet.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rWallet);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tWallet);
    }

    function _takeBurnFee(uint256 tBurn) private {
        uint256 currentRate = _getRate();
        uint256 rBurn = tBurn.mul(currentRate);
        _rOwned[_burnAddress] = _rOwned[_burnAddress].add(rBurn);
        if (_isExcluded[_burnAddress])
            _tOwned[_burnAddress] = _tOwned[_burnAddress].add(
                tBurn
            );
    }

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

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

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

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

   
    function removeAllFee() private {
        _buybackFee = 0;
        _liquidityFee = 0;
        _marketingFee = 0;
        _burnFee = 0;
     
    }

    function setBuy() private {
        _buybackFee = buyFee.buyback;
        _liquidityFee = buyFee.liquidity;
        _marketingFee = buyFee.marketing;
        _burnFee = buyFee.burn;
      
    }

    function setSell() private {
        _buybackFee = sellFee.buyback;
        _liquidityFee = sellFee.liquidity;
        _marketingFee = sellFee.marketing;
        _burnFee = sellFee.burn;
      
    }

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

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

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        if ( from != owner() && to != owner() ) require(tradingOpen, "Trading not yet enabled."); //transfers disabled before openTrading

        // 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;
        }
        if (takeFee) {
            if (!_isExcludedFromLimit[from] && !_isExcludedFromLimit[to]) {
                require(
                    amount <= _maxTxAmount,
                    "Transfer amount exceeds the maxTxAmount."
                );
                if (to != uniswapV2Pair) {
                    require(
                        amount + balanceOf(to) <= _maxWalletSize,
                        "Recipient exceeds max wallet size."
                    );
                }

              
            }
        }

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

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        // Split the contract balance into halves
        uint256 denominator = (buyFee.liquidity + sellFee.liquidity + buyFee.marketing + sellFee.marketing) * 2;
        uint256 tokensToAddLiquidityWith = (tokens * (buyFee.liquidity + sellFee.liquidity)) / denominator;
        uint256 toSwap = tokens - tokensToAddLiquidityWith;

        uint256 initialBalance = address(this).balance;

        swapTokensForEth(toSwap);

        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 unitBalance = deltaBalance / (denominator - (buyFee.liquidity + sellFee.liquidity));
        uint256 ethToAddLiquidityWith = unitBalance * (buyFee.liquidity + sellFee.liquidity);

        if (ethToAddLiquidityWith > 0) {
            // Add liquidity to uniswap
            addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
        }

        // Send ETH to marketing
        uint256 marketingAmt = unitBalance * 2 * (buyFee.marketing + sellFee.marketing);
       

        if (marketingAmt > 0) {
            payable(_marketingAddress).transfer(marketingAmt);
        }

    
    }

    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
            address(this),
            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 (sender == uniswapV2Pair) {
                setBuy();
            }
            if (recipient == uniswapV2Pair) {
                setSell();
            }
        }

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

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

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


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

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

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

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

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

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

    function LFG(bool _status) external onlyOwner() {
        tradingOpen = _status;
        excludeFromReward(address(this));
        excludeFromReward(uniswapV2Pair);
    }
}

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":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"LFG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lastUtsu","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"_setMaxWalletSizePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint8","name":"buyback","type":"uint8"},{"internalType":"uint8","name":"liquidity","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"buybackFromToken","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":"excludeFromLimit","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":"includeInLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint8","name":"buyback","type":"uint8"},{"internalType":"uint8","name":"liquidity","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"buy_buyback","type":"uint8"},{"internalType":"uint8","name":"buy_liquidity","type":"uint8"},{"internalType":"uint8","name":"buy_marketing","type":"uint8"},{"internalType":"uint8","name":"buy_burn","type":"uint8"},{"internalType":"uint8","name":"sell_buyback","type":"uint8"},{"internalType":"uint8","name":"sell_liquidity","type":"uint8"},{"internalType":"uint8","name":"sell_marketing","type":"uint8"},{"internalType":"uint8","name":"sell_burn","type":"uint8"}],"name":"setBothFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"buyback","type":"uint8"},{"internalType":"uint8","name":"liquidity","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"buyback","type":"uint8"},{"internalType":"uint8","name":"liquidity","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"newAddress","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052670de0b6b3a76400006009819055620000209060001962000694565b6200002e90600019620006c1565b600a908155600c80546001600160a01b031990811673b4de41a3102817e6f275a8c23da342d349a17e3b17909155600d805490911661dead1790556040805180820190915281815269557473756b757368696960b01b60209091019081526200009b91600e9190620005d8565b50604080518082019091526004808252635554535560e01b6020909201918252620000c991600f91620005d8565b506010805460ff191660099081179091556013805460ff60281b191665010000000000179055546200012990600a9062000115906103e8620016f7620004be602090811b91909117901c565b6200051160201b620017391790919060201c565b60145562000150600a620001156103e8600954620004be60201b620016f71790919060201c565b601555620001776014620001156103e8600954620004be60201b620016f71790919060201c565b60165560006017556018805460ff191690553480156200019657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a54336000908152600260209081526040918290209290925560118054630201010163ffffffff199182168117909255601280549091169091179055805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480830193928290030181865afa15801562000262573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002889190620006db565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fc9190620006db565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200034a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003709190620006db565b6001600160a01b0390811660a05281166080526001600560006200039c6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260058452828120805486166001908117909155600c8054841683528483208054881683179055549092168152600893849052918220805490941681179093556200041f6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526008909252902080549091166001179055620004673390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620004af91815260200190565b60405180910390a350620007d4565b60006200050883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200059c60201b60201c565b90505b92915050565b60008262000522575060006200050b565b600062000530838562000706565b9050826200053f858362000728565b14620005085760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b60008183620005c05760405162461bcd60e51b81526004016200059391906200073f565b506000620005cf848662000728565b95945050505050565b828054620005e69062000797565b90600052602060002090601f0160209004810192826200060a576000855562000655565b82601f106200062557805160ff191683800117855562000655565b8280016001018555821562000655579182015b828111156200065557825182559160200191906001019062000638565b506200066392915062000667565b5090565b5b8082111562000663576000815560010162000668565b634e487b7160e01b600052601260045260246000fd5b600082620006a657620006a66200067e565b500690565b634e487b7160e01b600052601160045260246000fd5b600082821015620006d657620006d6620006ab565b500390565b600060208284031215620006ee57600080fd5b81516001600160a01b03811681146200050857600080fd5b6000816000190483118215151615620007235762000723620006ab565b500290565b6000826200073a576200073a6200067e565b500490565b600060208083528351808285015260005b818110156200076e5785810183015185820160400152820162000750565b8181111562000781576000604083870101525b50601f01601f1916929092016040019392505050565b600181811c90821680620007ac57607f821691505b60208210811415620007ce57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516131df6200084060003960008181610542015281816114a801528181611bdd01528181611d39015281816122fd0152612388015260008181610346015281816125d40152818161268d015281816126c90152818161273b015261279701526131df6000f3fe60806040526004361061028c5760003560e01c806370d5ae051161015a578063bf56b371116100c1578063d94160e01161007a578063d94160e01461086e578063dd62ed3e146108a7578063ea2f0b37146108ed578063f0f165af1461090d578063f2fde38b1461092d578063fe63178f1461094d57600080fd5b8063bf56b371146107b8578063c49b9a80146107ce578063c896bea4146107ee578063ca8439ab1461080e578063caac79341461082e578063d543dbeb1461084e57600080fd5b806391d919a91161011357806391d919a91461070357806395d89b4114610723578063a457c2d714610738578063a9059cbb14610758578063aacebbe314610778578063af2ce6141461079857600080fd5b806370d5ae051461064d578063715018a61461066b5780637d1db4a51461068057806388f82020146106965780638da5cb5b146106cf5780638f9a55c0146106ed57600080fd5b80633685d419116101fe5780634a74bb02116101b75780634a74bb02146105645780634dcc5b061461058757806350d4e15f146105b457806352390c02146105d45780635342acb4146105f457806370a082311461062d57600080fd5b80633685d4191461047a578063395093511461049a5780633bd5d173146104ba578063437823ec146104da57806347062402146104fa57806349bd5a5e1461053057600080fd5b806318160ddd1161025057806318160ddd14610380578063182a7d3e146103955780631f8d2779146103b557806323b872dd146103d55780632b14ca56146103f5578063313ce5671461045857600080fd5b806306fdde0314610298578063095ea7b3146102c35780630bd3a7f9146102f357806313114a9d146103155780631694505e1461033457600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102ad61096d565b6040516102ba9190612c77565b60405180910390f35b3480156102cf57600080fd5b506102e36102de366004612ce1565b6109ff565b60405190151581526020016102ba565b3480156102ff57600080fd5b5061031361030e366004612d0d565b610a16565b005b34801561032157600080fd5b50600b545b6040519081526020016102ba565b34801561034057600080fd5b506103687f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102ba565b34801561038c57600080fd5b50600954610326565b3480156103a157600080fd5b506103266103b0366004612d3f565b610a6d565b3480156103c157600080fd5b506103136103d0366004612d7c565b610b15565b3480156103e157600080fd5b506102e36103f0366004612dd0565b610b8e565b34801561040157600080fd5b5060125461042b9060ff808216916101008104821691620100008204811691630100000090041684565b6040805160ff958616815293851660208501529184169183019190915290911660608201526080016102ba565b34801561046457600080fd5b5060105460405160ff90911681526020016102ba565b34801561048657600080fd5b50610313610495366004612d0d565b610bf7565b3480156104a657600080fd5b506102e36104b5366004612ce1565b610dae565b3480156104c657600080fd5b506103136104d5366004612e11565b610de4565b3480156104e657600080fd5b506103136104f5366004612d0d565b610eed565b34801561050657600080fd5b5060115461042b9060ff808216916101008104821691620100008204811691630100000090041684565b34801561053c57600080fd5b506103687f000000000000000000000000000000000000000000000000000000000000000081565b34801561057057600080fd5b506013546102e39065010000000000900460ff1681565b34801561059357600080fd5b506103266105a2366004612d0d565b60196020526000908152604090205481565b3480156105c057600080fd5b506103136105cf366004612e2a565b610f3b565b3480156105e057600080fd5b506103136105ef366004612d0d565b610fe2565b34801561060057600080fd5b506102e361060f366004612d0d565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561063957600080fd5b50610326610648366004612d0d565b611135565b34801561065957600080fd5b50600d546001600160a01b0316610368565b34801561067757600080fd5b50610313611194565b34801561068c57600080fd5b5061032660145481565b3480156106a257600080fd5b506102e36106b1366004612d0d565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106db57600080fd5b506000546001600160a01b0316610368565b3480156106f957600080fd5b5061032660165481565b34801561070f57600080fd5b5061031361071e366004612d0d565b611208565b34801561072f57600080fd5b506102ad611253565b34801561074457600080fd5b506102e3610753366004612ce1565b611262565b34801561076457600080fd5b506102e3610773366004612ce1565b6112b1565b34801561078457600080fd5b50610313610793366004612d0d565b6112be565b3480156107a457600080fd5b506103136107b3366004612e11565b61130a565b3480156107c457600080fd5b5061032660175481565b3480156107da57600080fd5b506103136107e9366004612ec1565b61135b565b3480156107fa57600080fd5b50610326610809366004612e11565b6113e1565b34801561081a57600080fd5b50610313610829366004612ec1565b611462565b34801561083a57600080fd5b50600c54610368906001600160a01b031681565b34801561085a57600080fd5b50610313610869366004612e11565b6114cf565b34801561087a57600080fd5b506102e3610889366004612d0d565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156108b357600080fd5b506103266108c2366004612edc565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156108f957600080fd5b50610313610908366004612d0d565b61151a565b34801561091957600080fd5b50610313610928366004612e11565b611565565b34801561093957600080fd5b50610313610948366004612d0d565b611594565b34801561095957600080fd5b50610313610968366004612d7c565b61167e565b6060600e805461097c90612f15565b80601f01602080910402602001604051908101604052809291908181526020018280546109a890612f15565b80156109f55780601f106109ca576101008083540402835291602001916109f5565b820191906000526020600020905b8154815290600101906020018083116109d857829003601f168201915b5050505050905090565b6000610a0c3384846117b8565b5060015b92915050565b6000546001600160a01b03163314610a495760405162461bcd60e51b8152600401610a4090612f50565b60405180910390fd5b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000600954831115610ac15760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a40565b600080600080610ad0876118dc565b945094509450945050600080610af18987878787610aec611958565b61197b565b509150915087610b0857509450610a109350505050565b9550610a10945050505050565b6000546001600160a01b03163314610b3f5760405162461bcd60e51b8152600401610a4090612f50565b6012805460ff92831663010000000263ff00000019958416610100029590951663ff00ff0019948416620100000262ff00ff199092169390961692909217919091179190911692909217179055565b6000610b9b8484846119ef565b610bed8433610be88560405180606001604052806028815260200161315d602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190611df3565b6117b8565b5060019392505050565b6000546001600160a01b03163314610c215760405162461bcd60e51b8152600401610a4090612f50565b6001600160a01b03811660009081526006602052604090205460ff16610c895760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610a40565b60005b600754811015610daa57816001600160a01b031660078281548110610cb357610cb3612f85565b6000918252602090912001546001600160a01b03161415610d985760078054610cde90600190612fb1565b81548110610cee57610cee612f85565b600091825260209091200154600780546001600160a01b039092169183908110610d1a57610d1a612f85565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600382526040808220829055600690925220805460ff191690556007805480610d7257610d72612fc8565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610da281612fde565b915050610c8c565b5050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610a0c918590610be89086611e2d565b3360008181526006602052604090205460ff1615610e595760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610a40565b600080600080610e68866118dc565b9450945094509450506000610e838786868686610aec611958565b50506001600160a01b038716600090815260026020526040902054909150610eab9082611e8c565b6001600160a01b038716600090815260026020526040902055600a54610ed19082611e8c565b600a55600b54610ee19088611e2d565b600b5550505050505050565b6000546001600160a01b03163314610f175760405162461bcd60e51b8152600401610a4090612f50565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000546001600160a01b03163314610f655760405162461bcd60e51b8152600401610a4090612f50565b6011805460ff998a1662ff00ff199182161762010000988b1689021763ff00ff00199081166101009a8c168b0263ff00000019908116919091176301000000998d168a021790935560128054978c169790921696909617938a16909702929092179093169187169095029094169390931792909316909202179055565b6000546001600160a01b0316331461100c5760405162461bcd60e51b8152600401610a4090612f50565b6001600160a01b03811660009081526006602052604090205460ff16156110755760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a40565b6001600160a01b038116600090815260026020526040902054156110cf576001600160a01b0381166000908152600260205260409020546110b5906113e1565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6001600160a01b03811660009081526006602052604081205460ff161561117257506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610a10906113e1565b6000546001600160a01b031633146111be5760405162461bcd60e51b8152600401610a4090612f50565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112325760405162461bcd60e51b8152600401610a4090612f50565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6060600f805461097c90612f15565b6000610a0c3384610be885604051806060016040528060258152602001613185602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190611df3565b6000610a0c3384846119ef565b6000546001600160a01b031633146112e85760405162461bcd60e51b8152600401610a4090612f50565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113345760405162461bcd60e51b8152600401610a4090612f50565b6113556103e861134f8360095461173990919063ffffffff16565b906116f7565b60165550565b6000546001600160a01b031633146113855760405162461bcd60e51b8152600401610a4090612f50565b60138054821515650100000000000265ff0000000000199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906113d690831515815260200190565b60405180910390a150565b6000600a548211156114455760405162461bcd60e51b815260206004820152602760248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c206260448201526675796261636b7360c81b6064820152608401610a40565b600061144f611958565b905061145b83826116f7565b9392505050565b6000546001600160a01b0316331461148c5760405162461bcd60e51b8152600401610a4090612f50565b6018805460ff19168215151790556114a330610fe2565b6114cc7f0000000000000000000000000000000000000000000000000000000000000000610fe2565b50565b6000546001600160a01b031633146114f95760405162461bcd60e51b8152600401610a4090612f50565b6115146103e861134f8360095461173990919063ffffffff16565b60145550565b6000546001600160a01b031633146115445760405162461bcd60e51b8152600401610a4090612f50565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b0316331461158f5760405162461bcd60e51b8152600401610a4090612f50565b601555565b6000546001600160a01b031633146115be5760405162461bcd60e51b8152600401610a4090612f50565b6001600160a01b0381166116235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a40565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116a85760405162461bcd60e51b8152600401610a4090612f50565b6011805460ff92831663010000000263ff00000019958416610100029590951663ff00ff0019948416620100000262ff00ff199092169390961692909217919091179190911692909217179055565b600061145b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ece565b60008261174857506000610a10565b60006117548385612ff9565b9050826117618583613018565b1461145b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a40565b6001600160a01b03831661181a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a40565b6001600160a01b03821661187b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a40565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806000806000806118ee87611efc565b905060006118fb88611f17565b9050600061190889611f37565b905060006119158a611f58565b9050600061192d846119278d88611e8c565b90611e8c565b90506119398184611e8c565b90506119458183611e8c565b9b949a5092985090965094509092505050565b6000806000611965611f7a565b909250905061197482826116f7565b9250505090565b600080808061198a8a86611739565b905060006119988a87611739565b905060006119a68a88611739565b905060006119b48a89611739565b905060006119c28a8a611739565b905060006119d882611927858188818c8c611e8c565b959f959e50939c50939a5050505050505050505050565b6001600160a01b038316611a535760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a40565b6001600160a01b038216611ab55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a40565b60008111611b175760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a40565b6000546001600160a01b03848116911614801590611b4357506000546001600160a01b03838116911614155b15611b9a5760185460ff16611b9a5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610a40565b6000611ba530611135565b90506014548110611bb557506014545b60155481108015908190611bd45750601354640100000000900460ff16155b8015611c1257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611c29575060135465010000000000900460ff165b15611c3c576015549150611c3c826120fc565b6001600160a01b03851660009081526005602052604090205460019060ff1680611c7e57506001600160a01b03851660009081526005602052604090205460ff165b15611c87575060005b8015611ddf576001600160a01b03861660009081526008602052604090205460ff16158015611ccf57506001600160a01b03851660009081526008602052604090205460ff16155b15611ddf57601454841115611d375760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a40565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614611ddf57601654611d7c86611135565b611d86908661303a565b1115611ddf5760405162461bcd60e51b815260206004820152602260248201527f526563697069656e742065786365656473206d61782077616c6c65742073697a604482015261329760f11b6064820152608401610a40565b611deb868686846122e3565b505050505050565b60008184841115611e175760405162461bcd60e51b8152600401610a409190612c77565b506000611e248486612fb1565b95945050505050565b600080611e3a838561303a565b90508381101561145b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a40565b600061145b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611df3565b60008183611eef5760405162461bcd60e51b8152600401610a409190612c77565b506000611e248486613018565b601354600090610a109060649061134f90859060ff16611739565b601354600090610a109060649061134f908590610100900460ff16611739565b601354600090610a109060649061134f90859062010000900460ff16611739565b601354600090610a109060649061134f9085906301000000900460ff16611739565b600a546009546000918291825b6007548110156120cc57826002600060078481548110611fa957611fa9612f85565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806120145750816003600060078481548110611fed57611fed612f85565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561202a57600a54600954945094505050509091565b612070600260006007848154811061204457612044612f85565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611e8c565b92506120b8600360006007848154811061208c5761208c612f85565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611e8c565b9150806120c481612fde565b915050611f87565b50600954600a546120dc916116f7565b8210156120f357600a546009549350935050509091565b90939092509050565b6013805464ff0000000019166401000000001790556012546011546000916201000080820460ff90811693918204811692612144926101009182900483169291900416613052565b61214e9190613052565b6121589190613052565b612163906002613077565b60125460115460ff9283169350600092849261218c926101009182900483169291900416613052565b6121999060ff1685612ff9565b6121a39190613018565b905060006121b18285612fb1565b9050476121bd8261257d565b60006121c98247612fb1565b6012546011549192506000916121ef9160ff610100918290048116929190910416613052565b6121fc9060ff1687612fb1565b6122069083613018565b60125460115491925060009161222c9160ff610100918290048116929190910416613052565b6122399060ff1683612ff9565b9050801561224b5761224b8682612735565b60125460115460009161226e9160ff620100009283900481169290910416613052565b60ff1661227c846002612ff9565b6122869190612ff9565b905080156122ca57600c546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156122c8573d6000803e3d6000fd5b505b50506013805464ff000000001916905550505050505050565b8015612411576122fb6013805463ffffffff19169055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161415612386576011546013805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff000000191617630100000093849004919091169092029190911790555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161415612411576012546013805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff000000191617630100000093849004919091169092029190911790555b6001600160a01b03841660009081526006602052604090205460ff16801561245257506001600160a01b03831660009081526006602052604090205460ff16155b1561246757612462848484612815565b612565565b6001600160a01b03841660009081526006602052604090205460ff161580156124a857506001600160a01b03831660009081526006602052604090205460ff165b156124b857612462848484612966565b6001600160a01b03841660009081526006602052604090205460ff161580156124fa57506001600160a01b03831660009081526006602052604090205460ff16155b1561250a57612462848484612a26565b6001600160a01b03841660009081526006602052604090205460ff16801561254a57506001600160a01b03831660009081526006602052604090205460ff165b1561255a57612462848484612a81565b612565848484612a26565b6125776013805463ffffffff19169055565b50505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106125b2576125b2612f85565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612630573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265491906130a0565b8160018151811061266757612667612f85565b60200260200101906001600160a01b031690816001600160a01b0316815250506126b2307f0000000000000000000000000000000000000000000000000000000000000000846117b8565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906127079085906000908690309042906004016130bd565b600060405180830381600087803b15801561272157600080fd5b505af1158015611deb573d6000803e3d6000fd5b612760307f0000000000000000000000000000000000000000000000000000000000000000846117b8565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af11580156127e9573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061280e919061312e565b5050505050565b6000806000806000612826866118dc565b9450945094509450945060008060006128458988888888610aec611958565b6001600160a01b038e166000908152600360205260409020549295509093509150612870908a611e8c565b6001600160a01b038c1660009081526003602090815260408083209390935560029052205461289f9084611e8c565b6001600160a01b03808d1660009081526002602052604080822093909355908c16815220546128ce9083611e2d565b6001600160a01b038b166000908152600260205260409020556128f086612b0b565b6128f985612b0b565b61290284612b94565b61290c8188612c53565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a60405161295191815260200190565b60405180910390a35050505050505050505050565b6000806000806000612977866118dc565b9450945094509450945060008060006129968988888888610aec611958565b6001600160a01b038e1660009081526002602052604090205492955090935091506129c19084611e8c565b6001600160a01b03808d16600090815260026020908152604080832094909455918d168152600390915220546129f79089611e2d565b6001600160a01b038b166000908152600360209081526040808320939093556002905220546128ce9083611e2d565b6000806000806000612a37866118dc565b945094509450945094506000806000612a568988888888610aec611958565b6001600160a01b038e16600090815260026020526040902054929550909350915061289f9084611e8c565b6000806000806000612a92866118dc565b945094509450945094506000806000612ab18988888888610aec611958565b6001600160a01b038e166000908152600360205260409020549295509093509150612adc908a611e8c565b6001600160a01b038c166000908152600360209081526040808320939093556002905220546129c19084611e8c565b6000612b15611958565b90506000612b238383611739565b30600090815260026020526040902054909150612b409082611e2d565b3060009081526002602090815260408083209390935560069052205460ff1615612b8f5730600090815260036020526040902054612b7e9084611e2d565b306000908152600360205260409020555b505050565b6000612b9e611958565b90506000612bac8383611739565b600d546001600160a01b0316600090815260026020526040902054909150612bd49082611e2d565b600d80546001600160a01b03908116600090815260026020908152604080832095909555925490911681526006909152205460ff1615612b8f57600d546001600160a01b0316600090815260036020526040902054612c339084611e2d565b600d546001600160a01b0316600090815260036020526040902055505050565b600a54612c609083611e8c565b600a55600b54612c709082611e2d565b600b555050565b600060208083528351808285015260005b81811015612ca457858101830151858201604001528201612c88565b81811115612cb6576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146114cc57600080fd5b60008060408385031215612cf457600080fd5b8235612cff81612ccc565b946020939093013593505050565b600060208284031215612d1f57600080fd5b813561145b81612ccc565b80358015158114612d3a57600080fd5b919050565b60008060408385031215612d5257600080fd5b82359150612d6260208401612d2a565b90509250929050565b803560ff81168114612d3a57600080fd5b60008060008060808587031215612d9257600080fd5b612d9b85612d6b565b9350612da960208601612d6b565b9250612db760408601612d6b565b9150612dc560608601612d6b565b905092959194509250565b600080600060608486031215612de557600080fd5b8335612df081612ccc565b92506020840135612e0081612ccc565b929592945050506040919091013590565b600060208284031215612e2357600080fd5b5035919050565b600080600080600080600080610100898b031215612e4757600080fd5b612e5089612d6b565b9750612e5e60208a01612d6b565b9650612e6c60408a01612d6b565b9550612e7a60608a01612d6b565b9450612e8860808a01612d6b565b9350612e9660a08a01612d6b565b9250612ea460c08a01612d6b565b9150612eb260e08a01612d6b565b90509295985092959890939650565b600060208284031215612ed357600080fd5b61145b82612d2a565b60008060408385031215612eef57600080fd5b8235612efa81612ccc565b91506020830135612f0a81612ccc565b809150509250929050565b600181811c90821680612f2957607f821691505b60208210811415612f4a57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015612fc357612fc3612f9b565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612ff257612ff2612f9b565b5060010190565b600081600019048311821515161561301357613013612f9b565b500290565b60008261303557634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561304d5761304d612f9b565b500190565b600060ff821660ff84168060ff0382111561306f5761306f612f9b565b019392505050565b600060ff821660ff84168160ff048111821515161561309857613098612f9b565b029392505050565b6000602082840312156130b257600080fd5b815161145b81612ccc565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561310d5784516001600160a01b0316835293830193918301916001016130e8565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561314357600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201b056c4e44691edf65ad836cbdf6c0e679387cc53f89885d2dd1894e578cdc9364736f6c634300080a0033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c806370d5ae051161015a578063bf56b371116100c1578063d94160e01161007a578063d94160e01461086e578063dd62ed3e146108a7578063ea2f0b37146108ed578063f0f165af1461090d578063f2fde38b1461092d578063fe63178f1461094d57600080fd5b8063bf56b371146107b8578063c49b9a80146107ce578063c896bea4146107ee578063ca8439ab1461080e578063caac79341461082e578063d543dbeb1461084e57600080fd5b806391d919a91161011357806391d919a91461070357806395d89b4114610723578063a457c2d714610738578063a9059cbb14610758578063aacebbe314610778578063af2ce6141461079857600080fd5b806370d5ae051461064d578063715018a61461066b5780637d1db4a51461068057806388f82020146106965780638da5cb5b146106cf5780638f9a55c0146106ed57600080fd5b80633685d419116101fe5780634a74bb02116101b75780634a74bb02146105645780634dcc5b061461058757806350d4e15f146105b457806352390c02146105d45780635342acb4146105f457806370a082311461062d57600080fd5b80633685d4191461047a578063395093511461049a5780633bd5d173146104ba578063437823ec146104da57806347062402146104fa57806349bd5a5e1461053057600080fd5b806318160ddd1161025057806318160ddd14610380578063182a7d3e146103955780631f8d2779146103b557806323b872dd146103d55780632b14ca56146103f5578063313ce5671461045857600080fd5b806306fdde0314610298578063095ea7b3146102c35780630bd3a7f9146102f357806313114a9d146103155780631694505e1461033457600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102ad61096d565b6040516102ba9190612c77565b60405180910390f35b3480156102cf57600080fd5b506102e36102de366004612ce1565b6109ff565b60405190151581526020016102ba565b3480156102ff57600080fd5b5061031361030e366004612d0d565b610a16565b005b34801561032157600080fd5b50600b545b6040519081526020016102ba565b34801561034057600080fd5b506103687f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102ba565b34801561038c57600080fd5b50600954610326565b3480156103a157600080fd5b506103266103b0366004612d3f565b610a6d565b3480156103c157600080fd5b506103136103d0366004612d7c565b610b15565b3480156103e157600080fd5b506102e36103f0366004612dd0565b610b8e565b34801561040157600080fd5b5060125461042b9060ff808216916101008104821691620100008204811691630100000090041684565b6040805160ff958616815293851660208501529184169183019190915290911660608201526080016102ba565b34801561046457600080fd5b5060105460405160ff90911681526020016102ba565b34801561048657600080fd5b50610313610495366004612d0d565b610bf7565b3480156104a657600080fd5b506102e36104b5366004612ce1565b610dae565b3480156104c657600080fd5b506103136104d5366004612e11565b610de4565b3480156104e657600080fd5b506103136104f5366004612d0d565b610eed565b34801561050657600080fd5b5060115461042b9060ff808216916101008104821691620100008204811691630100000090041684565b34801561053c57600080fd5b506103687f00000000000000000000000054f847e9e76d057e560c6e4aa3b29db34efa92ab81565b34801561057057600080fd5b506013546102e39065010000000000900460ff1681565b34801561059357600080fd5b506103266105a2366004612d0d565b60196020526000908152604090205481565b3480156105c057600080fd5b506103136105cf366004612e2a565b610f3b565b3480156105e057600080fd5b506103136105ef366004612d0d565b610fe2565b34801561060057600080fd5b506102e361060f366004612d0d565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561063957600080fd5b50610326610648366004612d0d565b611135565b34801561065957600080fd5b50600d546001600160a01b0316610368565b34801561067757600080fd5b50610313611194565b34801561068c57600080fd5b5061032660145481565b3480156106a257600080fd5b506102e36106b1366004612d0d565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106db57600080fd5b506000546001600160a01b0316610368565b3480156106f957600080fd5b5061032660165481565b34801561070f57600080fd5b5061031361071e366004612d0d565b611208565b34801561072f57600080fd5b506102ad611253565b34801561074457600080fd5b506102e3610753366004612ce1565b611262565b34801561076457600080fd5b506102e3610773366004612ce1565b6112b1565b34801561078457600080fd5b50610313610793366004612d0d565b6112be565b3480156107a457600080fd5b506103136107b3366004612e11565b61130a565b3480156107c457600080fd5b5061032660175481565b3480156107da57600080fd5b506103136107e9366004612ec1565b61135b565b3480156107fa57600080fd5b50610326610809366004612e11565b6113e1565b34801561081a57600080fd5b50610313610829366004612ec1565b611462565b34801561083a57600080fd5b50600c54610368906001600160a01b031681565b34801561085a57600080fd5b50610313610869366004612e11565b6114cf565b34801561087a57600080fd5b506102e3610889366004612d0d565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156108b357600080fd5b506103266108c2366004612edc565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156108f957600080fd5b50610313610908366004612d0d565b61151a565b34801561091957600080fd5b50610313610928366004612e11565b611565565b34801561093957600080fd5b50610313610948366004612d0d565b611594565b34801561095957600080fd5b50610313610968366004612d7c565b61167e565b6060600e805461097c90612f15565b80601f01602080910402602001604051908101604052809291908181526020018280546109a890612f15565b80156109f55780601f106109ca576101008083540402835291602001916109f5565b820191906000526020600020905b8154815290600101906020018083116109d857829003601f168201915b5050505050905090565b6000610a0c3384846117b8565b5060015b92915050565b6000546001600160a01b03163314610a495760405162461bcd60e51b8152600401610a4090612f50565b60405180910390fd5b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000600954831115610ac15760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a40565b600080600080610ad0876118dc565b945094509450945050600080610af18987878787610aec611958565b61197b565b509150915087610b0857509450610a109350505050565b9550610a10945050505050565b6000546001600160a01b03163314610b3f5760405162461bcd60e51b8152600401610a4090612f50565b6012805460ff92831663010000000263ff00000019958416610100029590951663ff00ff0019948416620100000262ff00ff199092169390961692909217919091179190911692909217179055565b6000610b9b8484846119ef565b610bed8433610be88560405180606001604052806028815260200161315d602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190611df3565b6117b8565b5060019392505050565b6000546001600160a01b03163314610c215760405162461bcd60e51b8152600401610a4090612f50565b6001600160a01b03811660009081526006602052604090205460ff16610c895760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610a40565b60005b600754811015610daa57816001600160a01b031660078281548110610cb357610cb3612f85565b6000918252602090912001546001600160a01b03161415610d985760078054610cde90600190612fb1565b81548110610cee57610cee612f85565b600091825260209091200154600780546001600160a01b039092169183908110610d1a57610d1a612f85565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600382526040808220829055600690925220805460ff191690556007805480610d7257610d72612fc8565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610da281612fde565b915050610c8c565b5050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610a0c918590610be89086611e2d565b3360008181526006602052604090205460ff1615610e595760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610a40565b600080600080610e68866118dc565b9450945094509450506000610e838786868686610aec611958565b50506001600160a01b038716600090815260026020526040902054909150610eab9082611e8c565b6001600160a01b038716600090815260026020526040902055600a54610ed19082611e8c565b600a55600b54610ee19088611e2d565b600b5550505050505050565b6000546001600160a01b03163314610f175760405162461bcd60e51b8152600401610a4090612f50565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000546001600160a01b03163314610f655760405162461bcd60e51b8152600401610a4090612f50565b6011805460ff998a1662ff00ff199182161762010000988b1689021763ff00ff00199081166101009a8c168b0263ff00000019908116919091176301000000998d168a021790935560128054978c169790921696909617938a16909702929092179093169187169095029094169390931792909316909202179055565b6000546001600160a01b0316331461100c5760405162461bcd60e51b8152600401610a4090612f50565b6001600160a01b03811660009081526006602052604090205460ff16156110755760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a40565b6001600160a01b038116600090815260026020526040902054156110cf576001600160a01b0381166000908152600260205260409020546110b5906113e1565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6001600160a01b03811660009081526006602052604081205460ff161561117257506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610a10906113e1565b6000546001600160a01b031633146111be5760405162461bcd60e51b8152600401610a4090612f50565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112325760405162461bcd60e51b8152600401610a4090612f50565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6060600f805461097c90612f15565b6000610a0c3384610be885604051806060016040528060258152602001613185602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190611df3565b6000610a0c3384846119ef565b6000546001600160a01b031633146112e85760405162461bcd60e51b8152600401610a4090612f50565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113345760405162461bcd60e51b8152600401610a4090612f50565b6113556103e861134f8360095461173990919063ffffffff16565b906116f7565b60165550565b6000546001600160a01b031633146113855760405162461bcd60e51b8152600401610a4090612f50565b60138054821515650100000000000265ff0000000000199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906113d690831515815260200190565b60405180910390a150565b6000600a548211156114455760405162461bcd60e51b815260206004820152602760248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c206260448201526675796261636b7360c81b6064820152608401610a40565b600061144f611958565b905061145b83826116f7565b9392505050565b6000546001600160a01b0316331461148c5760405162461bcd60e51b8152600401610a4090612f50565b6018805460ff19168215151790556114a330610fe2565b6114cc7f00000000000000000000000054f847e9e76d057e560c6e4aa3b29db34efa92ab610fe2565b50565b6000546001600160a01b031633146114f95760405162461bcd60e51b8152600401610a4090612f50565b6115146103e861134f8360095461173990919063ffffffff16565b60145550565b6000546001600160a01b031633146115445760405162461bcd60e51b8152600401610a4090612f50565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b0316331461158f5760405162461bcd60e51b8152600401610a4090612f50565b601555565b6000546001600160a01b031633146115be5760405162461bcd60e51b8152600401610a4090612f50565b6001600160a01b0381166116235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a40565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116a85760405162461bcd60e51b8152600401610a4090612f50565b6011805460ff92831663010000000263ff00000019958416610100029590951663ff00ff0019948416620100000262ff00ff199092169390961692909217919091179190911692909217179055565b600061145b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ece565b60008261174857506000610a10565b60006117548385612ff9565b9050826117618583613018565b1461145b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a40565b6001600160a01b03831661181a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a40565b6001600160a01b03821661187b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a40565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806000806000806118ee87611efc565b905060006118fb88611f17565b9050600061190889611f37565b905060006119158a611f58565b9050600061192d846119278d88611e8c565b90611e8c565b90506119398184611e8c565b90506119458183611e8c565b9b949a5092985090965094509092505050565b6000806000611965611f7a565b909250905061197482826116f7565b9250505090565b600080808061198a8a86611739565b905060006119988a87611739565b905060006119a68a88611739565b905060006119b48a89611739565b905060006119c28a8a611739565b905060006119d882611927858188818c8c611e8c565b959f959e50939c50939a5050505050505050505050565b6001600160a01b038316611a535760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a40565b6001600160a01b038216611ab55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a40565b60008111611b175760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a40565b6000546001600160a01b03848116911614801590611b4357506000546001600160a01b03838116911614155b15611b9a5760185460ff16611b9a5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610a40565b6000611ba530611135565b90506014548110611bb557506014545b60155481108015908190611bd45750601354640100000000900460ff16155b8015611c1257507f00000000000000000000000054f847e9e76d057e560c6e4aa3b29db34efa92ab6001600160a01b0316856001600160a01b031614155b8015611c29575060135465010000000000900460ff165b15611c3c576015549150611c3c826120fc565b6001600160a01b03851660009081526005602052604090205460019060ff1680611c7e57506001600160a01b03851660009081526005602052604090205460ff165b15611c87575060005b8015611ddf576001600160a01b03861660009081526008602052604090205460ff16158015611ccf57506001600160a01b03851660009081526008602052604090205460ff16155b15611ddf57601454841115611d375760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a40565b7f00000000000000000000000054f847e9e76d057e560c6e4aa3b29db34efa92ab6001600160a01b0316856001600160a01b031614611ddf57601654611d7c86611135565b611d86908661303a565b1115611ddf5760405162461bcd60e51b815260206004820152602260248201527f526563697069656e742065786365656473206d61782077616c6c65742073697a604482015261329760f11b6064820152608401610a40565b611deb868686846122e3565b505050505050565b60008184841115611e175760405162461bcd60e51b8152600401610a409190612c77565b506000611e248486612fb1565b95945050505050565b600080611e3a838561303a565b90508381101561145b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a40565b600061145b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611df3565b60008183611eef5760405162461bcd60e51b8152600401610a409190612c77565b506000611e248486613018565b601354600090610a109060649061134f90859060ff16611739565b601354600090610a109060649061134f908590610100900460ff16611739565b601354600090610a109060649061134f90859062010000900460ff16611739565b601354600090610a109060649061134f9085906301000000900460ff16611739565b600a546009546000918291825b6007548110156120cc57826002600060078481548110611fa957611fa9612f85565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806120145750816003600060078481548110611fed57611fed612f85565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561202a57600a54600954945094505050509091565b612070600260006007848154811061204457612044612f85565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611e8c565b92506120b8600360006007848154811061208c5761208c612f85565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611e8c565b9150806120c481612fde565b915050611f87565b50600954600a546120dc916116f7565b8210156120f357600a546009549350935050509091565b90939092509050565b6013805464ff0000000019166401000000001790556012546011546000916201000080820460ff90811693918204811692612144926101009182900483169291900416613052565b61214e9190613052565b6121589190613052565b612163906002613077565b60125460115460ff9283169350600092849261218c926101009182900483169291900416613052565b6121999060ff1685612ff9565b6121a39190613018565b905060006121b18285612fb1565b9050476121bd8261257d565b60006121c98247612fb1565b6012546011549192506000916121ef9160ff610100918290048116929190910416613052565b6121fc9060ff1687612fb1565b6122069083613018565b60125460115491925060009161222c9160ff610100918290048116929190910416613052565b6122399060ff1683612ff9565b9050801561224b5761224b8682612735565b60125460115460009161226e9160ff620100009283900481169290910416613052565b60ff1661227c846002612ff9565b6122869190612ff9565b905080156122ca57600c546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156122c8573d6000803e3d6000fd5b505b50506013805464ff000000001916905550505050505050565b8015612411576122fb6013805463ffffffff19169055565b7f00000000000000000000000054f847e9e76d057e560c6e4aa3b29db34efa92ab6001600160a01b0316846001600160a01b03161415612386576011546013805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff000000191617630100000093849004919091169092029190911790555b7f00000000000000000000000054f847e9e76d057e560c6e4aa3b29db34efa92ab6001600160a01b0316836001600160a01b03161415612411576012546013805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff000000191617630100000093849004919091169092029190911790555b6001600160a01b03841660009081526006602052604090205460ff16801561245257506001600160a01b03831660009081526006602052604090205460ff16155b1561246757612462848484612815565b612565565b6001600160a01b03841660009081526006602052604090205460ff161580156124a857506001600160a01b03831660009081526006602052604090205460ff165b156124b857612462848484612966565b6001600160a01b03841660009081526006602052604090205460ff161580156124fa57506001600160a01b03831660009081526006602052604090205460ff16155b1561250a57612462848484612a26565b6001600160a01b03841660009081526006602052604090205460ff16801561254a57506001600160a01b03831660009081526006602052604090205460ff165b1561255a57612462848484612a81565b612565848484612a26565b6125776013805463ffffffff19169055565b50505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106125b2576125b2612f85565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612630573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265491906130a0565b8160018151811061266757612667612f85565b60200260200101906001600160a01b031690816001600160a01b0316815250506126b2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846117b8565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906127079085906000908690309042906004016130bd565b600060405180830381600087803b15801561272157600080fd5b505af1158015611deb573d6000803e3d6000fd5b612760307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846117b8565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af11580156127e9573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061280e919061312e565b5050505050565b6000806000806000612826866118dc565b9450945094509450945060008060006128458988888888610aec611958565b6001600160a01b038e166000908152600360205260409020549295509093509150612870908a611e8c565b6001600160a01b038c1660009081526003602090815260408083209390935560029052205461289f9084611e8c565b6001600160a01b03808d1660009081526002602052604080822093909355908c16815220546128ce9083611e2d565b6001600160a01b038b166000908152600260205260409020556128f086612b0b565b6128f985612b0b565b61290284612b94565b61290c8188612c53565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a60405161295191815260200190565b60405180910390a35050505050505050505050565b6000806000806000612977866118dc565b9450945094509450945060008060006129968988888888610aec611958565b6001600160a01b038e1660009081526002602052604090205492955090935091506129c19084611e8c565b6001600160a01b03808d16600090815260026020908152604080832094909455918d168152600390915220546129f79089611e2d565b6001600160a01b038b166000908152600360209081526040808320939093556002905220546128ce9083611e2d565b6000806000806000612a37866118dc565b945094509450945094506000806000612a568988888888610aec611958565b6001600160a01b038e16600090815260026020526040902054929550909350915061289f9084611e8c565b6000806000806000612a92866118dc565b945094509450945094506000806000612ab18988888888610aec611958565b6001600160a01b038e166000908152600360205260409020549295509093509150612adc908a611e8c565b6001600160a01b038c166000908152600360209081526040808320939093556002905220546129c19084611e8c565b6000612b15611958565b90506000612b238383611739565b30600090815260026020526040902054909150612b409082611e2d565b3060009081526002602090815260408083209390935560069052205460ff1615612b8f5730600090815260036020526040902054612b7e9084611e2d565b306000908152600360205260409020555b505050565b6000612b9e611958565b90506000612bac8383611739565b600d546001600160a01b0316600090815260026020526040902054909150612bd49082611e2d565b600d80546001600160a01b03908116600090815260026020908152604080832095909555925490911681526006909152205460ff1615612b8f57600d546001600160a01b0316600090815260036020526040902054612c339084611e2d565b600d546001600160a01b0316600090815260036020526040902055505050565b600a54612c609083611e8c565b600a55600b54612c709082611e2d565b600b555050565b600060208083528351808285015260005b81811015612ca457858101830151858201604001528201612c88565b81811115612cb6576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146114cc57600080fd5b60008060408385031215612cf457600080fd5b8235612cff81612ccc565b946020939093013593505050565b600060208284031215612d1f57600080fd5b813561145b81612ccc565b80358015158114612d3a57600080fd5b919050565b60008060408385031215612d5257600080fd5b82359150612d6260208401612d2a565b90509250929050565b803560ff81168114612d3a57600080fd5b60008060008060808587031215612d9257600080fd5b612d9b85612d6b565b9350612da960208601612d6b565b9250612db760408601612d6b565b9150612dc560608601612d6b565b905092959194509250565b600080600060608486031215612de557600080fd5b8335612df081612ccc565b92506020840135612e0081612ccc565b929592945050506040919091013590565b600060208284031215612e2357600080fd5b5035919050565b600080600080600080600080610100898b031215612e4757600080fd5b612e5089612d6b565b9750612e5e60208a01612d6b565b9650612e6c60408a01612d6b565b9550612e7a60608a01612d6b565b9450612e8860808a01612d6b565b9350612e9660a08a01612d6b565b9250612ea460c08a01612d6b565b9150612eb260e08a01612d6b565b90509295985092959890939650565b600060208284031215612ed357600080fd5b61145b82612d2a565b60008060408385031215612eef57600080fd5b8235612efa81612ccc565b91506020830135612f0a81612ccc565b809150509250929050565b600181811c90821680612f2957607f821691505b60208210811415612f4a57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015612fc357612fc3612f9b565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612ff257612ff2612f9b565b5060010190565b600081600019048311821515161561301357613013612f9b565b500290565b60008261303557634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561304d5761304d612f9b565b500190565b600060ff821660ff84168060ff0382111561306f5761306f612f9b565b019392505050565b600060ff821660ff84168160ff048111821515161561309857613098612f9b565b029392505050565b6000602082840312156130b257600080fd5b815161145b81612ccc565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561310d5784516001600160a01b0316835293830193918301916001016130e8565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561314357600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201b056c4e44691edf65ad836cbdf6c0e679387cc53f89885d2dd1894e578cdc9364736f6c634300080a0033

Deployed Bytecode Sourcemap

25186:26603:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28673:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29655:193;;;;;;;;;;-1:-1:-1;29655:193:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;29655:193:0;1072:187:1;34346:115:0;;;;;;;;;;-1:-1:-1;34346:115:0;;;;;:::i;:::-;;:::i;:::-;;31154:87;;;;;;;;;;-1:-1:-1;31223:10:0;;31154:87;;;1662:25:1;;;1650:2;1635:18;31154:87:0;1516:177:1;26636:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1889:32:1;;;1871:51;;1859:2;1844:18;26636:51:0;1698:230:1;28950:95:0;;;;;;;;;;-1:-1:-1;29030:7:0;;28950:95;;32087:735;;;;;;;;;;-1:-1:-1;32087:735:0;;;;;:::i;:::-;;:::i;34591:297::-;;;;;;;;;;-1:-1:-1;34591:297:0;;;;;:::i;:::-;;:::i;29856:446::-;;;;;;;;;;-1:-1:-1;29856:446:0;;;;;:::i;:::-;;:::i;26474:22::-;;;;;;;;;;-1:-1:-1;26474:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3616:4:1;3604:17;;;3586:36;;3658:17;;;3653:2;3638:18;;3631:45;3712:17;;;3692:18;;;3685:45;;;;3766:17;;;3761:2;3746:18;;3739:45;3573:3;3558:19;26474:22:0;3371:419:1;28859:83:0;;;;;;;;;;-1:-1:-1;28925:9:0;;28859:83;;28925:9;;;;3937:36:1;;3925:2;3910:18;28859:83:0;3795:184:1;33628:473:0;;;;;;;;;;-1:-1:-1;33628:473:0;;;;;:::i;:::-;;:::i;30310:300::-;;;;;;;;;;-1:-1:-1;30310:300:0;;;;;:::i;:::-;;:::i;31348:731::-;;;;;;;;;;-1:-1:-1;31348:731:0;;;;;:::i;:::-;;:::i;34109:111::-;;;;;;;;;;-1:-1:-1;34109:111:0;;;;;:::i;:::-;;:::i;26447:20::-;;;;;;;;;;-1:-1:-1;26447:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;26694:38;;;;;;;;;;;;;;;26769:40;;;;;;;;;;-1:-1:-1;26769:40:0;;;;;;;;;;;27488:45;;;;;;;;;;-1:-1:-1;27488:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;35196:627;;;;;;;;;;-1:-1:-1;35196:627:0;;;;;:::i;:::-;;:::i;33291:329::-;;;;;;;;;;-1:-1:-1;33291:329:0;;;;;:::i;:::-;;:::i;41361:124::-;;;;;;;;;;-1:-1:-1;41361:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;41450:27:0;41426:4;41450:27;;;:18;:27;;;;;;;;;41361:124;29053:195;;;;;;;;;;-1:-1:-1;29053:195:0;;;;;:::i;:::-;;:::i;31249:91::-;;;;;;;;;;-1:-1:-1;31320:12:0;;-1:-1:-1;;;;;31320:12:0;31249:91;;15250:148;;;;;;;;;;;;;:::i;26818:55::-;;;;;;;;;;;;;;;;31026:120;;;;;;;;;;-1:-1:-1;31026:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;31118:20:0;31094:4;31118:20;;;:11;:20;;;;;;;;;31026:120;14608:79;;;;;;;;;;-1:-1:-1;14646:7:0;14673:6;-1:-1:-1;;;;;14673:6:0;14608:79;;26970:57;;;;;;;;;;;;;;;;34469:114;;;;;;;;;;-1:-1:-1;34469:114:0;;;;;:::i;:::-;;:::i;28764:87::-;;;;;;;;;;;;;:::i;30618:400::-;;;;;;;;;;-1:-1:-1;30618:400:0;;;;;:::i;:::-;;:::i;29256:199::-;;;;;;;;;;-1:-1:-1;29256:199:0;;;;;:::i;:::-;;:::i;33156:127::-;;;;;;;;;;-1:-1:-1;33156:127:0;;;;;:::i;:::-;;:::i;36123:172::-;;;;;;;;;;-1:-1:-1;36123:172:0;;;;;:::i;:::-;;:::i;27419:29::-;;;;;;;;;;;;;;;;36303:171;;;;;;;;;;-1:-1:-1;36303:171:0;;;;;:::i;:::-;;:::i;32830:316::-;;;;;;;;;;-1:-1:-1;32830:316:0;;;;;:::i;:::-;;:::i;51612:174::-;;;;;;;;;;-1:-1:-1;51612:174:0;;;;;:::i;:::-;;:::i;25884:103::-;;;;;;;;;;-1:-1:-1;25884:103:0;;;;-1:-1:-1;;;;;25884:103:0;;;35979:136;;;;;;;;;;-1:-1:-1;35979:136:0;;;;;:::i;:::-;;:::i;41493:128::-;;;;;;;;;;-1:-1:-1;41493:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;41584:29:0;41560:4;41584:29;;;:20;:29;;;;;;;;;41493:128;29463:184;;;;;;;;;;-1:-1:-1;29463:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;29612:18:0;;;29580:7;29612:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29463:184;34228:110;;;;;;;;;;-1:-1:-1;34228:110:0;;;;;:::i;:::-;;:::i;35831:140::-;;;;;;;;;;-1:-1:-1;35831:140:0;;;;;:::i;:::-;;:::i;15553:281::-;;;;;;;;;;-1:-1:-1;15553:281:0;;;;;:::i;:::-;;:::i;34896:292::-;;;;;;;;;;-1:-1:-1;34896:292:0;;;;;:::i;:::-;;:::i;28673:83::-;28710:13;28743:5;28736:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28673:83;:::o;29655:193::-;29757:4;29779:39;7452:10;29802:7;29811:6;29779:8;:39::i;:::-;-1:-1:-1;29836:4:0;29655:193;;;;;:::o;34346:115::-;14820:6;;-1:-1:-1;;;;;14820:6:0;7452:10;14820:22;14812:67;;;;-1:-1:-1;;;14812:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;34417:29:0::1;;::::0;;;:20:::1;:29;::::0;;;;:36;;-1:-1:-1;;34417:36:0::1;34449:4;34417:36;::::0;;34346:115::o;32087:735::-;32202:7;32246;;32235;:18;;32227:62;;;;-1:-1:-1;;;32227:62:0;;7069:2:1;32227:62:0;;;7051:21:1;7108:2;7088:18;;;7081:30;7147:33;7127:18;;;7120:61;7198:18;;32227:62:0;6867:355:1;32227:62:0;32332:12;32359:18;32392:15;32422:13;32449:20;32461:7;32449:11;:20::i;:::-;32302:167;;;;;;;;;32481:15;32498:23;32527:155;32553:7;32575:4;32594:10;32619:7;32641:5;32661:10;:8;:10::i;:::-;32527:11;:155::i;:::-;32480:202;;;;;32700:17;32695:120;;-1:-1:-1;32741:7:0;-1:-1:-1;32734:14:0;;-1:-1:-1;;;;32734:14:0;32695:120;32788:15;-1:-1:-1;32781:22:0;;-1:-1:-1;;;;;32781:22:0;34591:297;14820:6;;-1:-1:-1;;;;;14820:6:0;7452:10;14820:22;14812:67;;;;-1:-1:-1;;;14812:67:0;;;;;;;:::i;:::-;34745:7:::1;:25:::0;;::::1;34861:19:::0;;::::1;::::0;::::1;-1:-1:-1::0;;34821:29:0;;::::1;34745:25;34821:29;34861:19:::0;;;;-1:-1:-1;;34781:29:0;;::::1;::::0;::::1;-1:-1:-1::0;;34781:29:0;;;34745:25;;;::::1;34781:29:::0;;;;;;;::::1;34861:19:::0;;;;;;;;::::1;::::0;;34591:297::o;29856:446::-;29988:4;30005:36;30015:6;30023:9;30034:6;30005:9;:36::i;:::-;30052:220;30075:6;7452:10;30123:138;30179:6;30123:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30123:19:0;;;;;;:11;:19;;;;;;;;7452:10;30123:33;;;;;;;;;;:37;:138::i;:::-;30052:8;:220::i;:::-;-1:-1:-1;30290:4:0;29856:446;;;;;:::o;33628:473::-;14820:6;;-1:-1:-1;;;;;14820:6:0;7452:10;14820:22;14812:67;;;;-1:-1:-1;;;14812:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33708:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;33700:56;;;::::0;-1:-1:-1;;;33700:56:0;;7429:2:1;33700:56:0::1;::::0;::::1;7411:21:1::0;7468:2;7448:18;;;7441:30;7507:25;7487:18;;;7480:53;7550:18;;33700:56:0::1;7227:347:1::0;33700:56:0::1;33772:9;33767:327;33791:9;:16:::0;33787:20;::::1;33767:327;;;33849:7;-1:-1:-1::0;;;;;33833:23:0::1;:9;33843:1;33833:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;33833:12:0::1;:23;33829:254;;;33892:9;33902:16:::0;;:20:::1;::::0;33921:1:::1;::::0;33902:20:::1;:::i;:::-;33892:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;33877:9:::1;:12:::0;;-1:-1:-1;;;;;33892:31:0;;::::1;::::0;33887:1;;33877:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;33877:46:0::1;-1:-1:-1::0;;;;;33877:46:0;;::::1;;::::0;;33942:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;33981:11:::1;:20:::0;;;;:28;;-1:-1:-1;;33981:28:0::1;::::0;;34028:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;34028:15:0;;;;;-1:-1:-1;;;;;;34028:15:0::1;::::0;;;;;33767:327:::1;33628:473:::0;:::o;33829:254::-:1;33809:3:::0;::::1;::::0;::::1;:::i;:::-;;;;33767:327;;;;33628:473:::0;:::o;30310:300::-;7452:10;30425:4;30519:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;30519:34:0;;;;;;;;;;30425:4;;30447:133;;30497:7;;30519:50;;30558:10;30519:38;:50::i;31348:731::-;7452:10;31400:14;31463:19;;;:11;:19;;;;;;;;31462:20;31440:114;;;;-1:-1:-1;;;31440:114:0;;8447:2:1;31440:114:0;;;8429:21:1;8486:2;8466:18;;;8459:30;8525:34;8505:18;;;8498:62;-1:-1:-1;;;8576:18:1;;;8569:42;8628:19;;31440:114:0;8245:408:1;31440:114:0;31597:12;31624:18;31657:15;31687:13;31714:20;31726:7;31714:11;:20::i;:::-;31567:167;;;;;;;;;31746:15;31769:155;31795:7;31817:4;31836:10;31861:7;31883:5;31903:10;:8;:10::i;31769:155::-;-1:-1:-1;;;;;;;31955:15:0;;;;;;:7;:15;;;;;;31745:179;;-1:-1:-1;31955:28:0;;31745:179;31955:19;:28::i;:::-;-1:-1:-1;;;;;31937:15:0;;;;;;:7;:15;;;;;:46;32004:7;;:20;;32016:7;32004:11;:20::i;:::-;31994:7;:30;32048:10;;:23;;32063:7;32048:14;:23::i;:::-;32035:10;:36;-1:-1:-1;;;;;;;31348:731:0:o;34109:111::-;14820:6;;-1:-1:-1;;;;;14820:6:0;7452:10;14820:22;14812:67;;;;-1:-1:-1;;;14812:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34178:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;34178:34:0::1;34208:4;34178:34;::::0;;34109:111::o;35196:627::-;14820:6;;-1:-1:-1;;;;;14820:6:0;7452:10;14820:22;14812:67;;;;-1:-1:-1;;;14812:67:0;;;;;;;:::i;:::-;35486:6:::1;:28:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;35525:32:0;;;;;;;::::1;::::0;::::1;;-1:-1:-1::0;;35621:22:0;;;35486:28:::1;35568:32:::0;;::::1;::::0;::::1;-1:-1:-1::0;;35621:22:0;;;;;;;;;;::::1;::::0;::::1;;::::0;;;35656:7:::1;:30:::0;;;;::::1;35697:34:::0;;;;;;;;;;::::1;::::0;;::::1;::::0;;;::::1;35791:24:::0;;;35742:34;;::::1;::::0;;::::1;35791:24:::0;;;;;;;;;;::::1;::::0;;::::1;;::::0;;35196:627::o;33291:329::-;14820:6;;-1:-1:-1;;;;;14820:6:0;7452:10;14820:22;14812:67;;;;-1:-1:-1;;;14812:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33372:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;33371:21;33363:61;;;::::0;-1:-1:-1;;;33363:61:0;;8860:2:1;33363:61:0::1;::::0;::::1;8842:21:1::0;8899:2;8879:18;;;8872:30;8938:29;8918:18;;;8911:57;8985:18;;33363:61:0::1;8658:351:1::0;33363:61:0::1;-1:-1:-1::0;;;;;33439:16:0;::::1;33458:1;33439:16:::0;;;:7:::1;:16;::::0;;;;;:20;33435:106:::1;;-1:-1:-1::0;;;;;33512:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;33495:34:::1;::::0;:16:::1;:34::i;:::-;-1:-1:-1::0;;;;;33476:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:53;33435:106:::1;-1:-1:-1::0;;;;;33551:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;33551:27:0::1;33574:4;33551:27:::0;;::::1;::::0;;;33589:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;33589:23:0::1;::::0;;::::1;::::0;;33291:329::o;29053:195::-;-1:-1:-1;;;;;29143:20:0;;29119:7;29143:20;;;:11;:20;;;;;;;;29139:49;;;-1:-1:-1;;;;;;29172:16:0;;;;;:7;:16;;;;;;;29053:195::o;29139:49::-;-1:-1:-1;;;;;29223:16:0;;;;;;:7;:16;;;;;;29206:34;;:16;:34::i;15250:148::-;14820:6;;-1:-1:-1;;;;;14820:6:0;7452:10;14820:22;14812:67;;;;-1:-1:-1;;;14812:67:0;;;;;;;:::i;:::-;15357:1:::1;15341:6:::0;;15320:40:::1;::::0;-1:-1:-1;;;;;15341:6:0;;::::1;::::0;15320:40:::1;::::0;15357:1;;15320:40:::1;15388:1;15371:19:::0;;-1:-1:-1;;;;;;15371:19:0::1;::::0;;15250:148::o;34469:114::-;14820:6;;-1:-1:-1;;;;;14820:6:0;7452:10;14820:22;14812:67;;;;-1:-1:-1;;;14812:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34538:29:0::1;34570:5;34538:29:::0;;;:20:::1;:29;::::0;;;;:37;;-1:-1:-1;;34538:37:0::1;::::0;;34469:114::o;28764:87::-;28803:13;28836:7;28829:14;;;;;:::i;30618:400::-;30738:4;30760:228;7452:10;30810:7;30832:145;30889:15;30832:145;;;;;;;;;;;;;;;;;7452:10;30832:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;30832:34:0;;;;;;;;;;;;:38;:145::i;29256:199::-;29361:4;29383:42;7452:10;29407:9;29418:6;29383:9;:42::i;33156:127::-;14820:6;;-1:-1:-1;;;;;14820:6:0;7452:10;14820:22;14812:67;;;;-1:-1:-1;;;14812:67:0;;;;;;;:::i;:::-;33245:17:::1;:30:::0;;-1:-1:-1;;;;;;33245:30:0::1;-1:-1:-1::0;;;;;33245:30:0;;;::::1;::::0;;;::::1;::::0;;33156:127::o;36123:172::-;14820:6;;-1:-1:-1;;;;;14820:6:0;7452:10;14820:22;14812:67;;;;-1:-1:-1;;;14812:67:0;;;;;;;:::i;:::-;36250:37:::1;36281:5;36250:26;36262:13;36250:7;;:11;;:26;;;;:::i;:::-;:30:::0;::::1;:37::i;:::-;36233:14;:54:::0;-1:-1:-1;36123:172:0:o;36303:171::-;14820:6;;-1:-1:-1;;;;;14820:6:0;7452:10;14820:22;14812:67;;;;-1:-1:-1;;;14812:67:0;;;;;;;:::i;:::-;36380:21:::1;:32:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36380:32:0;;::::1;;::::0;;36428:38:::1;::::0;::::1;::::0;::::1;::::0;36404:8;1237:14:1;1230:22;1212:41;;1200:2;1185:18;;1072:187;36428:38:0::1;;;;;;;;36303:171:::0;:::o;32830:316::-;32921:7;32979;;32968;:18;;32946:107;;;;-1:-1:-1;;;32946:107:0;;9216:2:1;32946:107:0;;;9198:21:1;9255:2;9235:18;;;9228:30;9294:34;9274:18;;;9267:62;-1:-1:-1;;;9345:18:1;;;9338:37;9392:19;;32946:107:0;9014:403:1;32946:107:0;33064:19;33086:10;:8;:10::i;:::-;33064:32;-1:-1:-1;33114:24:0;:7;33064:32;33114:11;:24::i;:::-;33107:31;32830:316;-1:-1:-1;;;32830:316:0:o;51612:174::-;14820:6;;-1:-1:-1;;;;;14820:6:0;7452:10;14820:22;14812:67;;;;-1:-1:-1;;;14812:67:0;;;;;;;:::i;:::-;51671:11:::1;:21:::0;;-1:-1:-1;;51671:21:0::1;::::0;::::1;;;::::0;;51703:32:::1;51729:4;51703:17;:32::i;:::-;51746;51764:13;51746:17;:32::i;:::-;51612:174:::0;:::o;35979:136::-;14820:6;;-1:-1:-1;;;;;14820:6:0;7452:10;14820:22;14812:67;;;;-1:-1:-1;;;14812:67:0;;;;;;;:::i;:::-;36071:36:::1;36101:5;36071:25;36083:12;36071:7;;:11;;:25;;;;:::i;:36::-;36056:12;:51:::0;-1:-1:-1;35979:136:0:o;34228:110::-;14820:6;;-1:-1:-1;;;;;14820:6:0;7452:10;14820:22;14812:67;;;;-1:-1:-1;;;14812:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34295:27:0::1;34325:5;34295:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;34295:35:0::1;::::0;;34228:110::o;35831:140::-;14820:6;;-1:-1:-1;;;;;14820:6:0;7452:10;14820:22;14812:67;;;;-1:-1:-1;;;14812:67:0;;;;;;;:::i;:::-;35922:29:::1;:41:::0;35831:140::o;15553:281::-;14820:6;;-1:-1:-1;;;;;14820:6:0;7452:10;14820:22;14812:67;;;;-1:-1:-1;;;14812:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15656:22:0;::::1;15634:110;;;::::0;-1:-1:-1;;;15634:110:0;;9624:2:1;15634:110:0::1;::::0;::::1;9606:21:1::0;9663:2;9643:18;;;9636:30;9702:34;9682:18;;;9675:62;-1:-1:-1;;;9753:18:1;;;9746:36;9799:19;;15634:110:0::1;9422:402:1::0;15634:110:0::1;15781:6;::::0;;15760:38:::1;::::0;-1:-1:-1;;;;;15760:38:0;;::::1;::::0;15781:6;::::1;::::0;15760:38:::1;::::0;::::1;15809:6;:17:::0;;-1:-1:-1;;;;;;15809:17:0::1;-1:-1:-1::0;;;;;15809:17:0;;;::::1;::::0;;;::::1;::::0;;15553:281::o;34896:292::-;14820:6;;-1:-1:-1;;;;;14820:6:0;7452:10;14820:22;14812:67;;;;-1:-1:-1;;;14812:67:0;;;;;;;:::i;:::-;35049:6:::1;:24:::0;;::::1;35162:18:::0;;::::1;::::0;::::1;-1:-1:-1::0;;35123:28:0;;::::1;35049:24;35123:28;35162:18:::0;;;;-1:-1:-1;;35084:28:0;;::::1;::::0;::::1;-1:-1:-1::0;;35084:28:0;;;35049:24;;;::::1;35084:28:::0;;;;;;;::::1;35162:18:::0;;;;;;;;::::1;::::0;;34896:292::o;5096:132::-;5154:7;5181:39;5185:1;5188;5181:39;;;;;;;;;;;;;;;;;:3;:39::i;4601:252::-;4659:7;4685:6;4681:47;;-1:-1:-1;4715:1:0;4708:8;;4681:47;4740:9;4752:5;4756:1;4752;:5;:::i;:::-;4740:17;-1:-1:-1;4785:1:0;4776:5;4780:1;4740:17;4776:5;:::i;:::-;:10;4768:56;;;;-1:-1:-1;;;4768:56:0;;10426:2:1;4768:56:0;;;10408:21:1;10465:2;10445:18;;;10438:30;10504:34;10484:18;;;10477:62;-1:-1:-1;;;10555:18:1;;;10548:31;10596:19;;4768:56:0;10224:397:1;41629:371:0;-1:-1:-1;;;;;41756:19:0;;41748:68;;;;-1:-1:-1;;;41748:68:0;;10828:2:1;41748:68:0;;;10810:21:1;10867:2;10847:18;;;10840:30;10906:34;10886:18;;;10879:62;-1:-1:-1;;;10957:18:1;;;10950:34;11001:19;;41748:68:0;10626:400:1;41748:68:0;-1:-1:-1;;;;;41835:21:0;;41827:68;;;;-1:-1:-1;;;41827:68:0;;11233:2:1;41827:68:0;;;11215:21:1;11272:2;11252:18;;;11245:30;11311:34;11291:18;;;11284:62;-1:-1:-1;;;11362:18:1;;;11355:32;11404:19;;41827:68:0;11031:398:1;41827:68:0;-1:-1:-1;;;;;41908:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;41960:32;;1662:25:1;;;41960:32:0;;1635:18:1;41960:32:0;;;;;;;41629:371;;;:::o;36731:701::-;36832:7;36854;36876;36898;36920;36955:12;36970:28;36990:7;36970:19;:28::i;:::-;36955:43;;37009:18;37030:30;37052:7;37030:21;:30::i;:::-;37009:51;;37071:15;37089:30;37111:7;37089:21;:30::i;:::-;37071:48;;37130:13;37146:25;37163:7;37146:16;:25::i;:::-;37130:41;-1:-1:-1;37182:23:0;37208:33;37230:10;37208:17;:7;37220:4;37208:11;:17::i;:::-;:21;;:33::i;:::-;37182:59;-1:-1:-1;37270:28:0;37182:59;37290:7;37270:19;:28::i;:::-;37252:46;-1:-1:-1;37327:26:0;37252:46;37347:5;37327:19;:26::i;:::-;37309:44;37391:4;;-1:-1:-1;37397:10:0;;-1:-1:-1;37409:7:0;;-1:-1:-1;37397:10:0;-1:-1:-1;36731:701:0;;-1:-1:-1;;;36731:701:0:o;38234:164::-;38276:7;38297:15;38314;38333:19;:17;:19::i;:::-;38296:56;;-1:-1:-1;38296:56:0;-1:-1:-1;38370:20:0;38296:56;;38370:11;:20::i;:::-;38363:27;;;;38234:164;:::o;37440:786::-;37689:7;;;;37786:24;:7;37798:11;37786;:24::i;:::-;37768:42;-1:-1:-1;37821:12:0;37836:21;:4;37845:11;37836:8;:21::i;:::-;37821:36;-1:-1:-1;37868:18:0;37889:27;:10;37904:11;37889:14;:27::i;:::-;37868:48;-1:-1:-1;37927:15:0;37945:24;:7;37957:11;37945;:24::i;:::-;37927:42;-1:-1:-1;37980:13:0;37996:22;:5;38006:11;37996:9;:22::i;:::-;37980:38;-1:-1:-1;38029:23:0;38055:113;37980:38;38055:88;38135:7;38055:88;38105:10;38055:88;:7;38081:4;38055:25;:31::i;:113::-;38187:7;;;;-1:-1:-1;38213:4:0;;-1:-1:-1;37440:786:0;;-1:-1:-1;;;;;;;;;;;37440:786:0:o;42008:2346::-;-1:-1:-1;;;;;42130:18:0;;42122:68;;;;-1:-1:-1;;;42122:68:0;;11636:2:1;42122:68:0;;;11618:21:1;11675:2;11655:18;;;11648:30;11714:34;11694:18;;;11687:62;-1:-1:-1;;;11765:18:1;;;11758:35;11810:19;;42122:68:0;11434:401:1;42122:68:0;-1:-1:-1;;;;;42209:16:0;;42201:64;;;;-1:-1:-1;;;42201:64:0;;12042:2:1;42201:64:0;;;12024:21:1;12081:2;12061:18;;;12054:30;12120:34;12100:18;;;12093:62;-1:-1:-1;;;12171:18:1;;;12164:33;12214:19;;42201:64:0;11840:399:1;42201:64:0;42293:1;42284:6;:10;42276:64;;;;-1:-1:-1;;;42276:64:0;;12446:2:1;42276:64:0;;;12428:21:1;12485:2;12465:18;;;12458:30;12524:34;12504:18;;;12497:62;-1:-1:-1;;;12575:18:1;;;12568:39;12624:19;;42276:64:0;12244:405:1;42276:64:0;14646:7;14673:6;-1:-1:-1;;;;;42366:15:0;;;14673:6;;42366:15;;;;:32;;-1:-1:-1;14646:7:0;14673:6;-1:-1:-1;;;;;42385:13:0;;;14673:6;;42385:13;;42366:32;42361:88;;;42409:11;;;;42401:48;;;;-1:-1:-1;;;42401:48:0;;12856:2:1;42401:48:0;;;12838:21:1;12895:2;12875:18;;;12868:30;12934:26;12914:18;;;12907:54;12978:18;;42401:48:0;12654:348:1;42401:48:0;42784:28;42815:24;42833:4;42815:9;:24::i;:::-;42784:55;;42880:12;;42856:20;:36;42852:104;;-1:-1:-1;42932:12:0;;42852:104;43032:29;;42995:66;;;;;;;43090:53;;-1:-1:-1;43127:16:0;;;;;;;43126:17;43090:53;:91;;;;;43168:13;-1:-1:-1;;;;;43160:21:0;:4;-1:-1:-1;;;;;43160:21:0;;;43090:91;:129;;;;-1:-1:-1;43198:21:0;;;;;;;43090:129;43072:318;;;43269:29;;43246:52;;43342:36;43357:20;43342:14;:36::i;:::-;-1:-1:-1;;;;;43583:24:0;;43463:12;43583:24;;;:18;:24;;;;;;43478:4;;43583:24;;;:50;;-1:-1:-1;;;;;;43611:22:0;;;;;;:18;:22;;;;;;;;43583:50;43579:98;;;-1:-1:-1;43660:5:0;43579:98;43691:7;43687:536;;;-1:-1:-1;;;;;43720:26:0;;;;;;:20;:26;;;;;;;;43719:27;:56;;;;-1:-1:-1;;;;;;43751:24:0;;;;;;:20;:24;;;;;;;;43750:25;43719:56;43715:497;;;43836:12;;43826:6;:22;;43796:136;;;;-1:-1:-1;;;43796:136:0;;13209:2:1;43796:136:0;;;13191:21:1;13248:2;13228:18;;;13221:30;13287:34;13267:18;;;13260:62;-1:-1:-1;;;13338:18:1;;;13331:38;13386:19;;43796:136:0;13007:404:1;43796:136:0;43961:13;-1:-1:-1;;;;;43955:19:0;:2;-1:-1:-1;;;;;43955:19:0;;43951:228;;44059:14;;44042:13;44052:2;44042:9;:13::i;:::-;44033:22;;:6;:22;:::i;:::-;:40;;43999:160;;;;-1:-1:-1;;;43999:160:0;;13751:2:1;43999:160:0;;;13733:21:1;13790:2;13770:18;;;13763:30;13829:34;13809:18;;;13802:62;-1:-1:-1;;;13880:18:1;;;13873:32;13922:19;;43999:160:0;13549:398:1;43999:160:0;44305:41;44320:4;44326:2;44330:6;44338:7;44305:14;:41::i;:::-;42111:2243;;;42008:2346;;;:::o;4116:226::-;4236:7;4272:12;4264:6;;;;4256:29;;;;-1:-1:-1;;;4256:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4296:9:0;4308:5;4312:1;4308;:5;:::i;:::-;4296:17;4116:226;-1:-1:-1;;;;;4116:226:0:o;3213:181::-;3271:7;;3303:5;3307:1;3303;:5;:::i;:::-;3291:17;;3332:1;3327;:6;;3319:46;;;;-1:-1:-1;;;3319:46:0;;14154:2:1;3319:46:0;;;14136:21:1;14193:2;14173:18;;;14166:30;14232:29;14212:18;;;14205:57;14279:18;;3319:46:0;13952:351:1;3677:136:0;3735:7;3762:43;3766:1;3769;3762:43;;;;;;;;;;;;;;;;;:3;:43::i;5724:312::-;5844:7;5879:12;5872:5;5864:28;;;;-1:-1:-1;;;5864:28:0;;;;;;;;:::i;:::-;-1:-1:-1;5903:9:0;5915:5;5919:1;5915;:5;:::i;40093:138::-;40200:11;;40161:7;;40188:35;;40217:5;;40188:24;;:7;;40200:11;;40188;:24::i;40239:174::-;40380:13;;40336:7;;40368:37;;40399:5;;40368:26;;:7;;40380:13;;;;;40368:11;:26::i;40421:174::-;40562:13;;40518:7;;40550:37;;40581:5;;40550:26;;:7;;40562:13;;;;;40550:11;:26::i;40603:164::-;40739:8;;40695:7;;40727:32;;40753:5;;40727:21;;:7;;40739:8;;;;;40727:11;:21::i;38406:605::-;38504:7;;38540;;38457;;;;;38558:338;38582:9;:16;38578:20;;38558:338;;;38666:7;38642;:21;38650:9;38660:1;38650:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38650:12:0;38642:21;;;;;;;;;;;;;:31;;:83;;;38718:7;38694;:21;38702:9;38712:1;38702:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38702:12:0;38694:21;;;;;;;;;;;;;:31;38642:83;38620:146;;;38749:7;;38758;;38741:25;;;;;;;38406:605;;:::o;38620:146::-;38791:34;38803:7;:21;38811:9;38821:1;38811:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38811:12:0;38803:21;;;;;;;;;;;;;38791:7;;:11;:34::i;:::-;38781:44;;38850:34;38862:7;:21;38870:9;38880:1;38870:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38870:12:0;38862:21;;;;;;;;;;;;;38850:7;;:11;:34::i;:::-;38840:44;-1:-1:-1;38600:3:0;;;;:::i;:::-;;;;38558:338;;;-1:-1:-1;38932:7:0;;38920;;:20;;:11;:20::i;:::-;38910:7;:30;38906:61;;;38950:7;;38959;;38942:25;;;;;;38406:605;;:::o;38906:61::-;38986:7;;38995;;-1:-1:-1;38406:605:0;-1:-1:-1;38406:605:0:o;44362:1195::-;27333:16;:23;;-1:-1:-1;;27333:23:0;;;;;44565:7:::1;:17:::0;44546:6:::1;:16:::0;27333:23;;44565:17;;;::::1;27333:23:::0;44565:17;;::::1;::::0;44546:16;;::::1;::::0;::::1;::::0;44507:36:::1;::::0;27333:23;44526:17;;;::::1;::::0;::::1;::::0;44507:16;;::::1;;:36;:::i;:::-;:55;;;;:::i;:::-;:75;;;;:::i;:::-;44506:81;::::0;44586:1:::1;44506:81;:::i;:::-;44663:7;:17:::0;44644:6:::1;:16:::0;44484:103:::1;::::0;;::::1;::::0;-1:-1:-1;44598:32:0::1;::::0;44484:103;;44644:36:::1;::::0;44663:17:::1;::::0;;;::::1;::::0;::::1;::::0;44644:16;;::::1;;:36;:::i;:::-;44634:47;::::0;::::1;;:6:::0;:47:::1;:::i;:::-;44633:63;;;;:::i;:::-;44598:98:::0;-1:-1:-1;44707:14:0::1;44724:33;44598:98:::0;44724:6;:33:::1;:::i;:::-;44707:50:::0;-1:-1:-1;44795:21:0::1;44829:24;44707:50:::0;44829:16:::1;:24::i;:::-;44866:20;44889:38;44913:14:::0;44889:21:::1;:38;:::i;:::-;45010:7;:17:::0;44991:6:::1;:16:::0;44866:61;;-1:-1:-1;44938:19:0::1;::::0;44991:36:::1;::::0;45010:17:::1;;::::0;;;::::1;::::0;::::1;::::0;44991:16;;;::::1;;:36;:::i;:::-;44976:52;::::0;::::1;;:11:::0;:52:::1;:::i;:::-;44960:69;::::0;:12;:69:::1;:::i;:::-;45106:7;:17:::0;45087:6:::1;:16:::0;44938:91;;-1:-1:-1;45040:29:0::1;::::0;45087:36:::1;::::0;45106:17:::1;;::::0;;;::::1;::::0;::::1;::::0;45087:16;;;::::1;;:36;:::i;:::-;45072:52;::::0;::::1;;:11:::0;:52:::1;:::i;:::-;45040:84:::0;-1:-1:-1;45141:25:0;;45137:160:::1;;45224:61;45237:24;45263:21;45224:12;:61::i;:::-;45404:7;:17:::0;45385:6:::1;:16:::0;45343:20:::1;::::0;45385:36:::1;::::0;45404:17:::1;::::0;;;;::::1;::::0;::::1;::::0;45385:16;;::::1;;:36;:::i;:::-;45366:56;;:15;:11:::0;45380:1:::1;45366:15;:::i;:::-;:56;;;;:::i;:::-;45343:79:::0;-1:-1:-1;45448:16:0;;45444:98:::1;;45489:17;::::0;45481:49:::1;::::0;-1:-1:-1;;;;;45489:17:0;;::::1;::::0;45481:49;::::1;;;::::0;45517:12;;45489:17:::1;45481:49:::0;45489:17;45481:49;45517:12;45489:17;45481:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;45444:98;-1:-1:-1::0;;27379:16:0;:24;;-1:-1:-1;;27379:24:0;;;-1:-1:-1;;;;;;;44362:1195:0:o;46762:1022::-;46917:7;46913:230;;;46941:14;40823:11;:15;;-1:-1:-1;;40905:12:0;;;40780:152;46941:14;46984:13;-1:-1:-1;;;;;46974:23:0;:6;-1:-1:-1;;;;;46974:23:0;;46970:72;;;40991:6;:14;40977:11;:28;;40991:14;;;;-1:-1:-1;;41016:32:0;;;;;;;40991:14;41032:16;;;;;41016:32;;-1:-1:-1;;41102:22:0;41075:16;;;;;;41059:32;-1:-1:-1;;41102:22:0;;41113:11;;;;;;;;;41102:22;;;;;;;;;47018:8;47073:13;-1:-1:-1;;;;;47060:26:0;:9;-1:-1:-1;;;;;47060:26:0;;47056:76;;;41200:7;:15;41186:11;:29;;41200:15;;;;-1:-1:-1;;41226:33:0;;;;;;;41200:15;41242:17;;;;;41226:33;;-1:-1:-1;;41314:23:0;41286:17;;;;;;41270:33;-1:-1:-1;;41314:23:0;;41325:12;;;;;;;;;41314:23;;;;;;;;;47107:9;-1:-1:-1;;;;;47159:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;47183:22:0;;;;;;:11;:22;;;;;;;;47182:23;47159:46;47155:597;;;47222:48;47244:6;47252:9;47263:6;47222:21;:48::i;:::-;47155:597;;;-1:-1:-1;;;;;47293:19:0;;;;;;:11;:19;;;;;;;;47292:20;:46;;;;-1:-1:-1;;;;;;47316:22:0;;;;;;:11;:22;;;;;;;;47292:46;47288:464;;;47355:46;47375:6;47383:9;47394:6;47355:19;:46::i;47288:464::-;-1:-1:-1;;;;;47424:19:0;;;;;;:11;:19;;;;;;;;47423:20;:47;;;;-1:-1:-1;;;;;;47448:22:0;;;;;;:11;:22;;;;;;;;47447:23;47423:47;47419:333;;;47487:44;47505:6;47513:9;47524:6;47487:17;:44::i;47419:333::-;-1:-1:-1;;;;;47553:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;47576:22:0;;;;;;:11;:22;;;;;;;;47553:45;47549:203;;;47615:48;47637:6;47645:9;47656:6;47615:21;:48::i;47549:203::-;47696:44;47714:6;47722:9;47733:6;47696:17;:44::i;:::-;47762:14;40823:11;:15;;-1:-1:-1;;40905:12:0;;;40780:152;47762:14;46762:1022;;;;:::o;45565:589::-;45715:16;;;45729:1;45715:16;;;;;;;;45691:21;;45715:16;;;;;;;;;;-1:-1:-1;45715:16:0;45691:40;;45760:4;45742;45747:1;45742:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;45742:23:0;;;-1:-1:-1;;;;;45742:23:0;;;;;45786:15;-1:-1:-1;;;;;45786:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45776:4;45781:1;45776:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;45776:32:0;;;-1:-1:-1;;;;;45776:32:0;;;;;45821:62;45838:4;45853:15;45871:11;45821:8;:62::i;:::-;45922:224;;-1:-1:-1;;;45922:224:0;;-1:-1:-1;;;;;45922:15:0;:66;;;;:224;;46003:11;;46029:1;;46073:4;;46100;;46120:15;;45922:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46162:519;46310:62;46327:4;46342:15;46360:11;46310:8;:62::i;:::-;46415:258;;-1:-1:-1;;;46415:258:0;;46487:4;46415:258;;;16474:34:1;;;16524:18;;;16517:34;;;46533:1:0;16567:18:1;;;16560:34;;;16610:18;;;16603:34;16653:19;;;16646:44;46647:15:0;16706:19:1;;;16699:35;46415:15:0;-1:-1:-1;;;;;46415:31:0;;;;46454:9;;16408:19:1;;46415:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46162:519;;:::o;49643:941::-;49794:23;49832:12;49859:18;49892:15;49922:13;49949:20;49961:7;49949:11;:20::i;:::-;49779:190;;;;;;;;;;49981:15;49998:23;50023:12;50039:155;50065:7;50087:4;50106:10;50131:7;50153:5;50173:10;:8;:10::i;50039:155::-;-1:-1:-1;;;;;50225:15:0;;;;;;:7;:15;;;;;;49980:214;;-1:-1:-1;49980:214:0;;-1:-1:-1;49980:214:0;-1:-1:-1;50225:28:0;;50245:7;50225:19;:28::i;:::-;-1:-1:-1;;;;;50207:15:0;;;;;;:7;:15;;;;;;;;:46;;;;50282:7;:15;;;;:28;;50302:7;50282:19;:28::i;:::-;-1:-1:-1;;;;;50264:15:0;;;;;;;:7;:15;;;;;;:46;;;;50342:18;;;;;;;:39;;50365:15;50342:22;:39::i;:::-;-1:-1:-1;;;;;50321:18:0;;;;;;:7;:18;;;;;:60;50392:26;50407:10;50392:14;:26::i;:::-;50429:23;50444:7;50429:14;:23::i;:::-;50463:19;50476:5;50463:12;:19::i;:::-;50493:23;50505:4;50511;50493:11;:23::i;:::-;50549:9;-1:-1:-1;;;;;50532:44:0;50541:6;-1:-1:-1;;;;;50532:44:0;;50560:15;50532:44;;;;1662:25:1;;1650:2;1635:18;;1516:177;50532:44:0;;;;;;;;49768:816;;;;;;;;49643:941;;;:::o;48682:953::-;48831:23;48869:12;48896:18;48929:15;48959:13;48986:20;48998:7;48986:11;:20::i;:::-;48816:190;;;;;;;;;;49018:15;49035:23;49060:12;49076:155;49102:7;49124:4;49143:10;49168:7;49190:5;49210:10;:8;:10::i;49076:155::-;-1:-1:-1;;;;;49262:15:0;;;;;;:7;:15;;;;;;49017:214;;-1:-1:-1;49017:214:0;;-1:-1:-1;49017:214:0;-1:-1:-1;49262:28:0;;49017:214;49262:19;:28::i;:::-;-1:-1:-1;;;;;49244:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;49322:18;;;;;:7;:18;;;;;:39;;49345:15;49322:22;:39::i;:::-;-1:-1:-1;;;;;49301:18:0;;;;;;:7;:18;;;;;;;;:60;;;;49393:7;:18;;;;:39;;49416:15;49393:22;:39::i;47792:880::-;47939:23;47977:12;48004:18;48037:15;48067:13;48094:20;48106:7;48094:11;:20::i;:::-;47924:190;;;;;;;;;;48126:15;48143:23;48168:12;48184:155;48210:7;48232:4;48251:10;48276:7;48298:5;48318:10;:8;:10::i;48184:155::-;-1:-1:-1;;;;;48370:15:0;;;;;;:7;:15;;;;;;48125:214;;-1:-1:-1;48125:214:0;;-1:-1:-1;48125:214:0;-1:-1:-1;48370:28:0;;48125:214;48370:19;:28::i;50592:1012::-;50743:23;50781:12;50808:18;50841:15;50871:13;50898:20;50910:7;50898:11;:20::i;:::-;50728:190;;;;;;;;;;50930:15;50947:23;50972:12;50988:155;51014:7;51036:4;51055:10;51080:7;51102:5;51122:10;:8;:10::i;50988:155::-;-1:-1:-1;;;;;51174:15:0;;;;;;:7;:15;;;;;;50929:214;;-1:-1:-1;50929:214:0;;-1:-1:-1;50929:214:0;-1:-1:-1;51174:28:0;;51194:7;51174:19;:28::i;:::-;-1:-1:-1;;;;;51156:15:0;;;;;;:7;:15;;;;;;;;:46;;;;51231:7;:15;;;;:28;;51251:7;51231:19;:28::i;39019:355::-;39082:19;39104:10;:8;:10::i;:::-;39082:32;-1:-1:-1;39125:18:0;39146:27;:10;39082:32;39146:14;:27::i;:::-;39225:4;39209:22;;;;:7;:22;;;;;;39125:48;;-1:-1:-1;39209:38:0;;39125:48;39209:26;:38::i;:::-;39200:4;39184:22;;;;:7;:22;;;;;;;;:63;;;;39262:11;:26;;;;;;39258:108;;;39344:4;39328:22;;;;:7;:22;;;;;;:38;;39355:10;39328:26;:38::i;:::-;39319:4;39303:22;;;;:7;:22;;;;;:63;39258:108;39071:303;;39019:355;:::o;39730:::-;39786:19;39808:10;:8;:10::i;:::-;39786:32;-1:-1:-1;39829:13:0;39845:22;:5;39786:32;39845:9;:22::i;:::-;39910:12;;-1:-1:-1;;;;;39910:12:0;39902:21;;;;:7;:21;;;;;;39829:38;;-1:-1:-1;39902:32:0;;39829:38;39902:25;:32::i;:::-;39886:12;;;-1:-1:-1;;;;;39886:12:0;;;39878:21;;;;:7;:21;;;;;;;;:56;;;;39961:12;;;;;39949:25;;:11;:25;;;;;;;39945:132;;;40021:12;;-1:-1:-1;;;;;40021:12:0;40013:21;;;;:7;:21;;;;;;:64;;40057:5;40013:25;:64::i;:::-;39997:12;;-1:-1:-1;;;;;39997:12:0;39989:21;;;;:7;:21;;;;;:88;39775:310;;39730:355;:::o;36576:147::-;36654:7;;:17;;36666:4;36654:11;:17::i;:::-;36644:7;:27;36695:10;;:20;;36710:4;36695:14;:20::i;:::-;36682:10;:33;-1:-1:-1;;36576:147:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1264:247::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;1431:9;1418:23;1450:31;1475:5;1450:31;:::i;1933:160::-;1998:20;;2054:13;;2047:21;2037:32;;2027:60;;2083:1;2080;2073:12;2027:60;1933:160;;;:::o;2098:248::-;2163:6;2171;2224:2;2212:9;2203:7;2199:23;2195:32;2192:52;;;2240:1;2237;2230:12;2192:52;2276:9;2263:23;2253:33;;2305:35;2336:2;2325:9;2321:18;2305:35;:::i;:::-;2295:45;;2098:248;;;;;:::o;2351:156::-;2417:20;;2477:4;2466:16;;2456:27;;2446:55;;2497:1;2494;2487:12;2512:393;2590:6;2598;2606;2614;2667:3;2655:9;2646:7;2642:23;2638:33;2635:53;;;2684:1;2681;2674:12;2635:53;2707:27;2724:9;2707:27;:::i;:::-;2697:37;;2753:36;2785:2;2774:9;2770:18;2753:36;:::i;:::-;2743:46;;2808:36;2840:2;2829:9;2825:18;2808:36;:::i;:::-;2798:46;;2863:36;2895:2;2884:9;2880:18;2863:36;:::i;:::-;2853:46;;2512:393;;;;;;;:::o;2910:456::-;2987:6;2995;3003;3056:2;3044:9;3035:7;3031:23;3027:32;3024:52;;;3072:1;3069;3062:12;3024:52;3111:9;3098:23;3130:31;3155:5;3130:31;:::i;:::-;3180:5;-1:-1:-1;3237:2:1;3222:18;;3209:32;3250:33;3209:32;3250:33;:::i;:::-;2910:456;;3302:7;;-1:-1:-1;;;3356:2:1;3341:18;;;;3328:32;;2910:456::o;3984:180::-;4043:6;4096:2;4084:9;4075:7;4071:23;4067:32;4064:52;;;4112:1;4109;4102:12;4064:52;-1:-1:-1;4135:23:1;;3984:180;-1:-1:-1;3984:180:1:o;4377:677::-;4483:6;4491;4499;4507;4515;4523;4531;4539;4592:3;4580:9;4571:7;4567:23;4563:33;4560:53;;;4609:1;4606;4599:12;4560:53;4632:27;4649:9;4632:27;:::i;:::-;4622:37;;4678:36;4710:2;4699:9;4695:18;4678:36;:::i;:::-;4668:46;;4733:36;4765:2;4754:9;4750:18;4733:36;:::i;:::-;4723:46;;4788:36;4820:2;4809:9;4805:18;4788:36;:::i;:::-;4778:46;;4843:37;4875:3;4864:9;4860:19;4843:37;:::i;:::-;4833:47;;4899:37;4931:3;4920:9;4916:19;4899:37;:::i;:::-;4889:47;;4955:37;4987:3;4976:9;4972:19;4955:37;:::i;:::-;4945:47;;5011:37;5043:3;5032:9;5028:19;5011:37;:::i;:::-;5001:47;;4377:677;;;;;;;;;;;:::o;5319:180::-;5375:6;5428:2;5416:9;5407:7;5403:23;5399:32;5396:52;;;5444:1;5441;5434:12;5396:52;5467:26;5483:9;5467:26;:::i;5728:388::-;5796:6;5804;5857:2;5845:9;5836:7;5832:23;5828:32;5825:52;;;5873:1;5870;5863:12;5825:52;5912:9;5899:23;5931:31;5956:5;5931:31;:::i;:::-;5981:5;-1:-1:-1;6038:2:1;6023:18;;6010:32;6051:33;6010:32;6051:33;:::i;:::-;6103:7;6093:17;;;5728:388;;;;;:::o;6121:380::-;6200:1;6196:12;;;;6243;;;6264:61;;6318:4;6310:6;6306:17;6296:27;;6264:61;6371:2;6363:6;6360:14;6340:18;6337:38;6334:161;;;6417:10;6412:3;6408:20;6405:1;6398:31;6452:4;6449:1;6442:15;6480:4;6477:1;6470:15;6334:161;;6121:380;;;:::o;6506:356::-;6708:2;6690:21;;;6727:18;;;6720:30;6786:34;6781:2;6766:18;;6759:62;6853:2;6838:18;;6506:356::o;7579:127::-;7640:10;7635:3;7631:20;7628:1;7621:31;7671:4;7668:1;7661:15;7695:4;7692:1;7685:15;7711:127;7772:10;7767:3;7763:20;7760:1;7753:31;7803:4;7800:1;7793:15;7827:4;7824:1;7817:15;7843:125;7883:4;7911:1;7908;7905:8;7902:34;;;7916:18;;:::i;:::-;-1:-1:-1;7953:9:1;;7843:125::o;7973:127::-;8034:10;8029:3;8025:20;8022:1;8015:31;8065:4;8062:1;8055:15;8089:4;8086:1;8079:15;8105:135;8144:3;-1:-1:-1;;8165:17:1;;8162:43;;;8185:18;;:::i;:::-;-1:-1:-1;8232:1:1;8221:13;;8105:135::o;9829:168::-;9869:7;9935:1;9931;9927:6;9923:14;9920:1;9917:21;9912:1;9905:9;9898:17;9894:45;9891:71;;;9942:18;;:::i;:::-;-1:-1:-1;9982:9:1;;9829:168::o;10002:217::-;10042:1;10068;10058:132;;10112:10;10107:3;10103:20;10100:1;10093:31;10147:4;10144:1;10137:15;10175:4;10172:1;10165:15;10058:132;-1:-1:-1;10204:9:1;;10002:217::o;13416:128::-;13456:3;13487:1;13483:6;13480:1;13477:13;13474:39;;;13493:18;;:::i;:::-;-1:-1:-1;13529:9:1;;13416:128::o;14308:204::-;14346:3;14382:4;14379:1;14375:12;14414:4;14411:1;14407:12;14449:3;14443:4;14439:14;14434:3;14431:23;14428:49;;;14457:18;;:::i;:::-;14493:13;;14308:204;-1:-1:-1;;;14308:204:1:o;14517:238::-;14555:7;14595:4;14592:1;14588:12;14627:4;14624:1;14620:12;14687:3;14681:4;14677:14;14672:3;14669:23;14662:3;14655:11;14648:19;14644:49;14641:75;;;14696:18;;:::i;:::-;14736:13;;14517:238;-1:-1:-1;;;14517:238:1:o;14892:251::-;14962:6;15015:2;15003:9;14994:7;14990:23;14986:32;14983:52;;;15031:1;15028;15021:12;14983:52;15063:9;15057:16;15082:31;15107:5;15082:31;:::i;15148:980::-;15410:4;15458:3;15447:9;15443:19;15489:6;15478:9;15471:25;15515:2;15553:6;15548:2;15537:9;15533:18;15526:34;15596:3;15591:2;15580:9;15576:18;15569:31;15620:6;15655;15649:13;15686:6;15678;15671:22;15724:3;15713:9;15709:19;15702:26;;15763:2;15755:6;15751:15;15737:29;;15784:1;15794:195;15808:6;15805:1;15802:13;15794:195;;;15873:13;;-1:-1:-1;;;;;15869:39:1;15857:52;;15964:15;;;;15929:12;;;;15905:1;15823:9;15794:195;;;-1:-1:-1;;;;;;;16045:32:1;;;;16040:2;16025:18;;16018:60;-1:-1:-1;;;16109:3:1;16094:19;16087:35;16006:3;15148:980;-1:-1:-1;;;15148:980:1:o;16745:306::-;16833:6;16841;16849;16902:2;16890:9;16881:7;16877:23;16873:32;16870:52;;;16918:1;16915;16908:12;16870:52;16947:9;16941:16;16931:26;;16997:2;16986:9;16982:18;16976:25;16966:35;;17041:2;17030:9;17026:18;17020:25;17010:35;;16745:306;;;;;:::o

Swarm Source

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