ETH Price: $3,345.05 (-0.96%)

Token

SkyNet AI (SkyNet)
 

Overview

Max Total Supply

29,081,994 SkyNet

Holders

446

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
simnet.eth
Balance
1,542.841472372438318314 SkyNet

Value
$0.00
0x8264e9e0f4cbcbbbb3f8ecaec0a625b590ae790e
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:
SKYNET

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/* SKYNET IS THE WORLD'S FIRST TAX FREE, BUYBACK AND BURN TOKEN
 NEURAL MEME BASED ARTIFICAL INTELLIGENCE

 WEBISTE: https://www.skynettoken.vip/
 TELEGRAM: https://t.me/SkyNet_Portal
 X: https://twitter.com/SkyNetToken


0 TAX
UNISWAP V3 WETH AND USDC POOL, CREATING A FOREVER LASTING ARBITRAGE
*/




// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)



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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


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

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

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

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


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

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

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

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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);
    }

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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



pragma solidity 0.8.19;



library TransferHelper {
    function safeApprove(
        address token,
        address to,
        uint256 value
    ) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.approve.selector, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'SA');
    }
}

interface IV3SwapRouter {
    struct ExactInputSingleParams {
        address tokenIn;
        address tokenOut;
        uint24 fee;
        address recipient;
        uint256 deadline;
        uint256 amountIn;
        uint256 amountOutMinimum;
        uint160 sqrtPriceLimitX96;
    }

    function exactInputSingle(ExactInputSingleParams calldata params) external returns (uint256 amountOut);
}

interface INonfungiblePositionManager {
    struct MintParams {
        address token0;
        address token1;
        uint24 fee;
        int24 tickLower;
        int24 tickUpper;
        uint256 amount0Desired;
        uint256 amount1Desired;
        uint256 amount0Min;
        uint256 amount1Min;
        address recipient;
        uint256 deadline;
    }
    function mint(MintParams calldata params) external payable returns (
        uint256 tokenId,
        uint128 liquidity,
        uint256 amount0,
        uint256 amount1
    );
    function createAndInitializePoolIfNecessary(
        address token0,
        address token1,
        uint24 fee,
        uint160 sqrtPriceX96
    ) external payable returns (address pool);
}

interface IUniCryptCollect {
    function collect(
        uint256 lockId,
        address recipient,
        uint128 amount0Max,
        uint128 amount1Max
    ) external returns (uint256 amount0, uint256 amount1);
}

interface IFactory {
	function createPool(address _tokenA, address _tokenB, uint24 _fee) external returns (address);
}


contract SKYNET is ERC20, Ownable {

     INonfungiblePositionManager public Posman;
    IFactory private Factory; 
    address private UniCryptCollect;
    address private V3SwapRouter;
    address public weth;
    address public usdc;
    address private externalAddress;
    address private smartRouter;

    uint256 private wethPortion = 10;
    uint256 private lockWETH;
    uint256 private lockUSDC;
    uint256 private supply = 29_081_994 * 10 ** 18;
    uint24  private feePoolWeth = 10000;
    uint24  private feePoolUsdc = 10000;
    uint128 constant MAX_UINT128 = type(uint128).max;
    uint256 constant MAX_UINT256 = type(uint256).max;
    bool    public maxWalletEnforced = false;
    bool    private liquidityAdded = false;
    uint256 public maxWalletAmountTier1;
    uint256 public maxWalletAmountTier2;
    uint256 public maxWalletTimeTier1 = 3 minutes;
    uint256 public maxWalletTimeTier2 = 7 minutes;
    uint256 public tradingStartTime;
    uint256 public lastCollectTimePoolWeth;
    uint256 public lastCollectTimePoolUsdc;  
    uint256 public collectInterval = 15 minutes;
    uint256 public buyBackInterval = 69 seconds;
    address public poolWETH;
    address public poolUSDC;
    address public constant DEAD = 0x000000000000000000000000000000000000dEaD;
    uint256 public lastWethBuyBackTime;
    uint256 public lastUsdcBuyBackTime;
    uint256 public WethBought;
    uint256 public UsdcBought;
    bool    public LPLocked = false;
    uint256 public lastManualCollectWeth;
    uint256 public lastManualCollectUsdc;
    uint256 public lastManualBuyBackWeth;
    uint256 public lastManualBuyBackUsdc;
    bool    public PoolCreated = false;
    bool    public tradingEnabled = false;
   

    
    mapping(address => bool) private excludedFromMaxWallet;
    

constructor(address _uniCryptCollect, address _factory, address _v3SwapRouter, address _posman, address _weth, address _usdc, address _externalAddress, address _smartRouter) ERC20("SkyNet AI", "SkyNet") { 
        _mint(msg.sender, supply);
        
        Factory = IFactory(_factory);
        UniCryptCollect = _uniCryptCollect;
        V3SwapRouter = _v3SwapRouter;
        Posman = INonfungiblePositionManager(_posman);
        weth = _weth;
        usdc = _usdc;
        externalAddress = _externalAddress;
        smartRouter = _smartRouter;

        maxWalletAmountTier1 = (supply * 25) / 10000;  // .25%
        maxWalletAmountTier2= (supply * 75) / 10000;  // .75%

        excludedFromMaxWallet[address(this)] = true;  
        excludedFromMaxWallet[msg.sender] = true;
        excludedFromMaxWallet[address(Posman)] = true;
        excludedFromMaxWallet[address(V3SwapRouter)] = true;
        excludedFromMaxWallet[address(UniCryptCollect)] = true;
        excludedFromMaxWallet[address(smartRouter)] = true;
    }

    function addLiquidity() public onlyOwner {
        require(!liquidityAdded, "Liquidity already added!");
        tradingStartTime = block.timestamp;
        lastWethBuyBackTime = block.timestamp;
        lastUsdcBuyBackTime = block.timestamp;
        lastCollectTimePoolWeth = block.timestamp;
        lastCollectTimePoolUsdc = block.timestamp;

         liquidityAdded = true;
         maxWalletEnforced = true;
         tradingEnabled = true;
         
    }

    function createPools() external onlyOwner{
        require(!PoolCreated, "Pools Already Created");
        poolWETH = Factory.createPool(address(this), weth, feePoolWeth);
        poolUSDC = Factory.createPool(address(this), usdc, feePoolUsdc);

        excludedFromMaxWallet[address(poolWETH)] = true;
        excludedFromMaxWallet[address(poolUSDC)] = true;
        PoolCreated = true;
    }

    function PoolIDs(uint256 _lockWETH, uint256 _lockUSDC) external onlyOwner{
        lockWETH =   _lockWETH;
        lockUSDC =   _lockUSDC;

        LPLocked = true;
    }

    

    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

    if(!tradingEnabled) {
        require(from == owner() || to == owner(), "Trading is not enabled yet");
    }
    
    if (maxWalletEnforced) {
        uint256 currentTime = block.timestamp;
        bool isWithinFirstTier = currentTime > tradingStartTime && currentTime <= tradingStartTime + maxWalletTimeTier1;
        bool isWithinSecondTier = currentTime <= tradingStartTime + maxWalletTimeTier2;
        bool isBuyFromPool = (from == poolWETH || from == poolUSDC);
        uint256 maxWalletAmount = isWithinFirstTier ? maxWalletAmountTier1 : maxWalletAmountTier2;

        if ((isWithinFirstTier || isWithinSecondTier) && !excludedFromMaxWallet[to]) {
            // Apply max wallet restriction if it's a buy from the pool or during the first time period
            if (isBuyFromPool || isWithinFirstTier) {
                require(balanceOf(to) + amount <= maxWalletAmount, "Exceeds max wallet amount");
            }
        }

        // Disable max wallet enforcement after the second time period
        if (!isWithinSecondTier) {
            maxWalletEnforced = false;
        }
    }

    // Call collect functions for pool transfers 
    if ((to == poolWETH) && LPLocked) {  
         if (block.timestamp - lastCollectTimePoolUsdc >= collectInterval) {
            _collectForPoolUSDC();
         }
    }    

    if ((to == poolUSDC) && LPLocked) { 
         if (block.timestamp - lastCollectTimePoolWeth >= collectInterval) {
            _collectForPoolWETH();
         }
    }   

    super._transfer(from, to, amount);

    
    if ((from == poolWETH) && LPLocked) {
        if (block.timestamp - buyBackInterval >= lastUsdcBuyBackTime) {
            _buyBackAndBurnUsdc();
        }
    }

    if ((from == poolUSDC) && LPLocked) {
        if (block.timestamp - buyBackInterval >= lastWethBuyBackTime) {
            _buyBackAndBurnWeth();
        }
    }
    

}


function _collectForPoolWETH() internal {
    uint256 wethBalanceBefore = IERC20(weth).balanceOf(address(this)); 
    bool collected = false;

    // Attempt collection from Pool1
    if (block.timestamp - lastCollectTimePoolWeth >= collectInterval) {
        try IUniCryptCollect(UniCryptCollect).collect(lockWETH, address(this), MAX_UINT128, MAX_UINT128) {
            lastCollectTimePoolWeth = block.timestamp;
            collected = true;
        } catch {} // Do nothing if the call fails
    }
    

    if (collected) {
        // Calculate WETH received from the collect
        uint256 wethReceived = IERC20(weth).balanceOf(address(this)) - wethBalanceBefore;

        // Burn tokens equivalent to the contract's balance
        uint256 tokensToBurn = balanceOf(address(this));
        _transfer(address(this), DEAD, tokensToBurn); // This will send the tokens to the dead address, effectively burning them.

        // Send a portion of the WETH to the external address
        uint256 wethToSend = (wethReceived * wethPortion) / 100; // Calculates the portion of WETH to send
        IERC20(weth).transfer(externalAddress, wethToSend);
    }
}

function _collectForPoolUSDC() internal {
    uint256 usdcBalanceBefore = IERC20(usdc).balanceOf(address(this)); 
    bool collected = false;

    
    if (block.timestamp - lastCollectTimePoolUsdc >= collectInterval) {
        try IUniCryptCollect(UniCryptCollect).collect(lockUSDC, address(this), MAX_UINT128, MAX_UINT128) {
            lastCollectTimePoolUsdc = block.timestamp;
            collected = true;
        } catch {} // Do nothing if the call fails
    }
    

    if (collected) {
        // Calculate WETH received from the collect
        uint256 usdcReceived = IERC20(usdc).balanceOf(address(this)) - usdcBalanceBefore;

        // Burn tokens equivalent to the contract's balance
        uint256 tokensToBurn = balanceOf(address(this));
        _transfer(address(this), DEAD, tokensToBurn); // This will send the tokens to the dead address, effectively burning them.

        // Send a portion of the usdc to the external address
        uint256 usdcToSend = (usdcReceived * wethPortion) / 100; // Calculates the portion of WETH to send
        IERC20(usdc).transfer(externalAddress, usdcToSend);
    }
}


function _buyBackAndBurnWeth() internal {
    uint256 wethBalance = IERC20(weth).balanceOf(address(this));

    if (wethBalance == 0) {
        return; // Exit the function early if no WETH is available for buyback
    }

    uint256 buyBackAmount = (wethBalance * 10) / 100; // 10% of WETH balance

    if (buyBackAmount > 0) {

        TransferHelper.safeApprove(weth, address(V3SwapRouter), buyBackAmount);
        // Define the swap params
        IV3SwapRouter.ExactInputSingleParams memory params = IV3SwapRouter.ExactInputSingleParams({
            tokenIn: weth,
            tokenOut: address(this),
            fee: feePoolWeth, 
            recipient: DEAD,
            deadline: block.timestamp,
            amountIn: buyBackAmount,
            amountOutMinimum: 0,  // Accept any amount of tokens out
            sqrtPriceLimitX96: 0  // No price limit
        });

        // Attempt the swap
         try IV3SwapRouter(V3SwapRouter).exactInputSingle(params) {
             WethBought += buyBackAmount;
             lastWethBuyBackTime = block.timestamp;
         } catch {}   
        }
    
    
} 

function _buyBackAndBurnUsdc() internal {
    uint256 usdcBalance = IERC20(usdc).balanceOf(address(this));

    if (usdcBalance == 0) {
        return; // Exit the function early if no Usdc is available for buyback
    }

    uint256 buyBackAmount = (usdcBalance * 10) / 100; // 10% of Usdc balance

    if (buyBackAmount > 0) {
                TransferHelper.safeApprove(usdc, address(V3SwapRouter), buyBackAmount);

        // Define the swap params
        IV3SwapRouter.ExactInputSingleParams memory params = IV3SwapRouter.ExactInputSingleParams({
            tokenIn: usdc,
            tokenOut: address(this),
            fee: feePoolUsdc, 
            recipient: DEAD,
            deadline: block.timestamp,
            amountIn: buyBackAmount,
            amountOutMinimum: 0,  // Accept any amount of tokens out
            sqrtPriceLimitX96: 0  // No price limit
        });

        // Attempt the swap
         try IV3SwapRouter(V3SwapRouter).exactInputSingle(params) {
             UsdcBought += buyBackAmount;
             lastUsdcBuyBackTime = block.timestamp;
         } catch {}   
        }
        
     
    
} 

function changeBuyBackInterval(uint256 _timeSeconds) external onlyOwner {
    buyBackInterval = _timeSeconds;
}


function rescue(address token) external onlyOwner {
        require(token != address(this));
        if (token == address(0x0)) {
            payable(msg.sender).transfer(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

// Public function that anyone can call every 7 days in the event collect needs to happen
function manualCollectWeth() public {
    require (block.timestamp > lastManualCollectWeth + 15 minutes, "Must wait  to call ManualCollect");
    _collectForPoolWETH();
    lastManualCollectWeth = block.timestamp;
    }

function manualCollectUsdc() public {
    require (block.timestamp > lastManualCollectUsdc + 15 minutes, "Must wait  to call ManualCollect");
    _collectForPoolUSDC();
    lastManualCollectUsdc = block.timestamp;
    }    

 //Public function to buyback and burn a random amount every 36 hours
function manualBuyBackWeth()  public {
    require (block.timestamp > lastManualBuyBackWeth + 690 seconds, "Must wait");
    _buyBackAndBurnWeth();
    lastManualBuyBackWeth = block.timestamp;
   }

function manualBuyBackUsdc()  public {
    require (block.timestamp > lastManualBuyBackUsdc + 690 seconds, "Must wait");
    _buyBackAndBurnUsdc();
    lastManualBuyBackUsdc = block.timestamp;
   }

function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external onlyOwner {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]);
            super._transfer(msg.sender , accounts[i], amounts[i]*10**18);
        }
    }
  

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_uniCryptCollect","type":"address"},{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_v3SwapRouter","type":"address"},{"internalType":"address","name":"_posman","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_usdc","type":"address"},{"internalType":"address","name":"_externalAddress","type":"address"},{"internalType":"address","name":"_smartRouter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LPLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PoolCreated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lockWETH","type":"uint256"},{"internalType":"uint256","name":"_lockUSDC","type":"uint256"}],"name":"PoolIDs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Posman","outputs":[{"internalType":"contract INonfungiblePositionManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UsdcBought","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WethBought","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidity","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":"buyBackInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timeSeconds","type":"uint256"}],"name":"changeBuyBackInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collectInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createPools","outputs":[],"stateMutability":"nonpayable","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":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastCollectTimePoolUsdc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastCollectTimePoolWeth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualBuyBackUsdc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualBuyBackWeth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualCollectUsdc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualCollectWeth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUsdcBuyBackTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastWethBuyBackTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBuyBackUsdc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualBuyBackWeth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualCollectUsdc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualCollectWeth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWalletAmountTier1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmountTier2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletEnforced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletTimeTier1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletTimeTier2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolUSDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolWETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"rescue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"usdc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

6080604052600a600e556a180e5a0dc298169fe80000601155601280546001600160401b03191664271000271017905560b46015556101a4601655610384601a556045601b556022805460ff191690556027805461ffff191690553480156200006757600080fd5b5060405162002a1238038062002a128339810160408190526200008a91620003a9565b60405180604001604052806009815260200168536b794e657420414960b81b8152506040518060400160405280600681526020016514dade53995d60d21b8152508160039081620000dc9190620004f5565b506004620000eb8282620004f5565b50505062000108620001026200026b60201b60201c565b6200026f565b6200011c33601154620002c160201b60201c565b600780546001600160a01b03199081166001600160a01b038a8116919091179092556008805482168b8416179055600980548216898416179055600680548216888416179055600a80548216878416179055600b80548216868416179055600c80548216858416179055600d805490911691831691909117905560115461271090620001aa906019620005d7565b620001b69190620005f7565b60135560115461271090620001cd90604b620005d7565b620001d99190620005f7565b6014555050306000908152602860205260408082208054600160ff19918216811790925533845282842080548216831790556006546001600160a01b0390811685528385208054831684179055600954811685528385208054831684179055600854811685528385208054831684179055600d5416845291909220805490911690911790555062000630945050505050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166200031c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200033091906200061a565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b80516001600160a01b0381168114620003a457600080fd5b919050565b600080600080600080600080610100898b031215620003c757600080fd5b620003d2896200038c565b9750620003e260208a016200038c565b9650620003f260408a016200038c565b95506200040260608a016200038c565b94506200041260808a016200038c565b93506200042260a08a016200038c565b92506200043260c08a016200038c565b91506200044260e08a016200038c565b90509295985092959890939650565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200047c57607f821691505b6020821081036200049d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200038757600081815260208120601f850160051c81016020861015620004cc5750805b601f850160051c820191505b81811015620004ed57828155600101620004d8565b505050505050565b81516001600160401b0381111562000511576200051162000451565b620005298162000522845462000467565b84620004a3565b602080601f831160018114620005615760008415620005485750858301515b600019600386901b1c1916600185901b178555620004ed565b600085815260208120601f198616915b82811015620005925788860151825594840194600190910190840162000571565b5085821015620005b15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620005f157620005f1620005c1565b92915050565b6000826200061557634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620005f157620005f1620005c1565b6123d280620006406000396000f3fe608060405234801561001057600080fd5b50600436106102f05760003560e01c8063715018a61161019d578063adc279d7116100e9578063e6a25385116100a2578063f11b219c1161007c578063f11b219c146105c0578063f21bcd9f146105c8578063f2fde38b146105d1578063f84192f9146105e457600080fd5b8063e6a25385146105a2578063e8078d94146105af578063e970cd9f146105b757600080fd5b8063adc279d71461054e578063bd5553fe14610561578063cb370f1a1461056a578063cbb805b014610573578063dd62ed3e14610586578063e330599e1461059957600080fd5b80639148801711610156578063a109d0a111610130578063a109d0a114610517578063a457c2d714610520578063a73a696214610533578063a9059cbb1461053b57600080fd5b806391488017146104f357806395d89b41146105065780639b3b0bba1461050e57600080fd5b8063715018a61461049f5780637440af05146104a757806377bab1e8146104be578063818cec38146104c7578063839006f2146104cf5780638da5cb5b146104e257600080fd5b80633e413bee1161025c5780634e0dff131161021557806360a046b6116101ef57806360a046b61461045b57806362c648521461046457806370a082311461046d57806370b7b80c1461049657600080fd5b80634e0dff131461043757806353e2a8671461043f57806355e613e91461044857600080fd5b80633e413bee146103e05780633fc8cef3146103f3578063411f4f4b146104065780634196df551461040f578063482e2b1c1461041c5780634ada218b1461042557600080fd5b806318160ddd116102ae57806318160ddd1461038757806323b872dd1461038f5780632610eaca146103a25780632e0f1868146103b5578063313ce567146103be57806339509351146103cd57600080fd5b806202f4b0146102f557806303fd2a451461032557806306fdde031461032e578063095ea7b314610343578063105213151461036657806312e2bda21461037d575b600080fd5b601d54610308906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61030861dead81565b6103366105ed565b60405161031c9190611e1a565b610356610351366004611e62565b61067f565b604051901515815260200161031c565b61036f60255481565b60405190815260200161031c565b610385610699565b005b60025461036f565b61035661039d366004611e8e565b610877565b6103856103b0366004611fa5565b61089b565b61036f60245481565b6040516012815260200161031c565b6103566103db366004611e62565b6109af565b600b54610308906001600160a01b031681565b600a54610308906001600160a01b031681565b61036f60145481565b6027546103569060ff1681565b61036f60265481565b60275461035690610100900460ff1681565b6103856109d1565b61036f60205481565b600654610308906001600160a01b031681565b61036f60155481565b61036f601b5481565b61036f61047b366004612067565b6001600160a01b031660009081526020819052604090205490565b61036f60175481565b610385610a28565b601254610356906601000000000000900460ff1681565b61036f601e5481565b610385610a3c565b6103856104dd366004612067565b610aa7565b6005546001600160a01b0316610308565b61038561050136600461208b565b610bea565b610336610c0a565b61036f60215481565b61036f60165481565b61035661052e366004611e62565b610c19565b610385610c94565b610356610549366004611e62565b610cff565b601c54610308906001600160a01b031681565b61036f60185481565b61036f601a5481565b6103856105813660046120ad565b610d0d565b61036f6105943660046120c6565b610d1a565b61036f601f5481565b6022546103569060ff1681565b610385610d45565b61036f60235481565b610385610df1565b61036f60135481565b6103856105df366004612067565b610e48565b61036f60195481565b6060600380546105fc906120ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610628906120ff565b80156106755780601f1061064a57610100808354040283529160200191610675565b820191906000526020600020905b81548152906001019060200180831161065857829003601f168201915b5050505050905090565b60003361068d818585610ebe565b60019150505b92915050565b6106a1610fe2565b60275460ff16156106f15760405162461bcd60e51b8152602060048201526015602482015274141bdbdb1cc8105b1c9958591e4810dc99585d1959605a1b60448201526064015b60405180910390fd5b600754600a5460125460405163a167129560e01b81523060048201526001600160a01b03928316602482015262ffffff909116604482015291169063a1671295906064016020604051808303816000875af1158015610754573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107789190612139565b601c80546001600160a01b0319166001600160a01b03928316179055600754600b5460125460405163a167129560e01b815230600482015291841660248301526301000000900462ffffff16604482015291169063a1671295906064016020604051808303816000875af11580156107f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108189190612139565b601d80546001600160a01b0319166001600160a01b03928316178155601c548216600090815260286020526040808220805460ff1990811660019081179092559354909416825290208054821683179055602780549091169091179055565b60003361088585828561103c565b6108908585856110b0565b506001949350505050565b6108a3610fe2565b80518251146108ec5760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b60448201526064016106e8565b60005b82518160ff1610156109aa57818160ff168151811061091057610910612156565b6020026020010151610937336001600160a01b031660009081526020819052604090205490565b101561094257600080fd5b61099833848360ff168151811061095b5761095b612156565b6020026020010151848460ff168151811061097857610978612156565b6020026020010151670de0b6b3a76400006109939190612182565b6113fc565b806109a281612199565b9150506108ef565b505050565b60003361068d8185856109c28383610d1a565b6109cc91906121b8565b610ebe565b6026546109e0906102b26121b8565b4211610a1a5760405162461bcd60e51b8152602060048201526009602482015268135d5cdd081dd85a5d60ba1b60448201526064016106e8565b610a22611526565b42602655565b610a30610fe2565b610a3a60006116bd565b565b602454610a4b906103846121b8565b4211610a995760405162461bcd60e51b815260206004820181905260248201527f4d75737420776169742020746f2063616c6c204d616e75616c436f6c6c65637460448201526064016106e8565b610aa161170f565b42602455565b610aaf610fe2565b306001600160a01b03821603610ac457600080fd5b6001600160a01b038116610b025760405133904780156108fc02916000818181858888f19350505050158015610afe573d6000803e3d6000fd5b5050565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6f91906121cb565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be391906121e4565b5050505b50565b610bf2610fe2565b600f919091556010556022805460ff19166001179055565b6060600480546105fc906120ff565b60003381610c278286610d1a565b905083811015610c875760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106e8565b6108908286868403610ebe565b602354610ca3906103846121b8565b4211610cf15760405162461bcd60e51b815260206004820181905260248201527f4d75737420776169742020746f2063616c6c204d616e75616c436f6c6c65637460448201526064016106e8565b610cf961195e565b42602355565b60003361068d8185856110b0565b610d15610fe2565b601b55565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610d4d610fe2565b601254670100000000000000900460ff1615610dab5760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920616c726561647920616464656421000000000000000060448201526064016106e8565b426017819055601e819055601f81905560188190556019556012805467010100000000000067ffff000000000000199091161790556027805461ff001916610100179055565b602554610e00906102b26121b8565b4211610e3a5760405162461bcd60e51b8152602060048201526009602482015268135d5cdd081dd85a5d60ba1b60448201526064016106e8565b610e42611b66565b42602555565b610e50610fe2565b6001600160a01b038116610eb55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106e8565b610be7816116bd565b6001600160a01b038316610f205760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106e8565b6001600160a01b038216610f815760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106e8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610a3a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106e8565b60006110488484610d1a565b90506000198114610be357818110156110a35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106e8565b610be38484848403610ebe565b6001600160a01b0383166110d65760405162461bcd60e51b81526004016106e890612206565b6001600160a01b0382166110fc5760405162461bcd60e51b81526004016106e89061224b565b602754610100900460ff16611180576005546001600160a01b038481169116148061113457506005546001600160a01b038381169116145b6111805760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420656e61626c65642079657400000000000060448201526064016106e8565b6012546601000000000000900460ff16156112ed576017544290600090821180156111ba57506015546017546111b691906121b8565b8211155b905060006016546017546111ce91906121b8565b601c549084111591506000906001600160a01b03888116911614806112005750601d546001600160a01b038881169116145b905060008361121157601454611215565b6013545b905083806112205750825b801561124557506001600160a01b03871660009081526028602052604090205460ff16155b156112d15781806112535750835b156112d1578086611279896001600160a01b031660009081526020819052604090205490565b61128391906121b8565b11156112d15760405162461bcd60e51b815260206004820152601960248201527f45786365656473206d61782077616c6c657420616d6f756e740000000000000060448201526064016106e8565b826112e7576012805466ff000000000000191690555b50505050505b601c546001600160a01b03838116911614801561130c575060225460ff165b1561132e57601a54601954611321904261228e565b1061132e5761132e61170f565b601d546001600160a01b03838116911614801561134d575060225460ff165b1561136f57601a54601854611362904261228e565b1061136f5761136f61195e565b61137a8383836113fc565b601c546001600160a01b038481169116148015611399575060225460ff165b156113bb57601f54601b546113ae904261228e565b106113bb576113bb611526565b601d546001600160a01b0384811691161480156113da575060225460ff165b156109aa57601e54601b546113ef904261228e565b106109aa576109aa611b66565b6001600160a01b0383166114225760405162461bcd60e51b81526004016106e890612206565b6001600160a01b0382166114485760405162461bcd60e51b81526004016106e89061224b565b6001600160a01b038316600090815260208190526040902054818110156114c05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106e8565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610be3565b600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561156f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159391906121cb565b9050806000036115a05750565b600060646115af83600a612182565b6115b991906122a1565b90508015610afe57600b546009546115de916001600160a01b03908116911683611cf6565b6040805161010081018252600b546001600160a01b0390811682523060208301526012546301000000900462ffffff168284015261dead606083015242608083015260a08201849052600060c0830181905260e0830152600954925163414bf38960e01b81529192169063414bf3899061165c9084906004016122c3565b6020604051808303816000875af1925050508015611697575060408051601f3d908101601f19168201909252611694918101906121cb565b60015b156109aa575081602160008282546116af91906121b8565b909155505042601f55505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c91906121cb565b90506000601a5460195442611791919061228e565b1061181d57600854601054604051630260e12b60e41b81526001600160a01b039092169163260e12b0916117d49130906001600160801b0390819060040161232c565b60408051808303816000875af192505050801561180e575060408051601f3d908101601f1916820190925261180b9181019061235c565b60015b1561181d575050426019555060015b8015610afe57600b546040516370a0823160e01b815230600482015260009184916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611870573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189491906121cb565b61189e919061228e565b306000818152602081905260409020549192506118be9061dead836110b0565b60006064600e54846118d09190612182565b6118da91906122a1565b600b54600c5460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101849052929350169063a9059cbb906044015b6020604051808303816000875af1158015611932573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195691906121e4565b505050505050565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156119a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cb91906121cb565b90506000601a54601854426119e0919061228e565b10611a6c57600854600f54604051630260e12b60e41b81526001600160a01b039092169163260e12b091611a239130906001600160801b0390819060040161232c565b60408051808303816000875af1925050508015611a5d575060408051601f3d908101601f19168201909252611a5a9181019061235c565b60015b15611a6c575050426018555060015b8015610afe57600a546040516370a0823160e01b815230600482015260009184916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611abf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae391906121cb565b611aed919061228e565b30600081815260208190526040902054919250611b0d9061dead836110b0565b60006064600e5484611b1f9190612182565b611b2991906122a1565b600a54600c5460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101849052929350169063a9059cbb90604401611913565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd391906121cb565b905080600003611be05750565b60006064611bef83600a612182565b611bf991906122a1565b90508015610afe57600a54600954611c1e916001600160a01b03908116911683611cf6565b6040805161010081018252600a546001600160a01b03908116825230602083015260125462ffffff168284015261dead606083015242608083015260a08201849052600060c0830181905260e0830152600954925163414bf38960e01b81529192169063414bf38990611c959084906004016122c3565b6020604051808303816000875af1925050508015611cd0575060408051601f3d908101601f19168201909252611ccd918101906121cb565b60015b156109aa57508160206000828254611ce891906121b8565b909155505042601e55505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b1790529151600092839290871691611d529190612380565b6000604051808303816000865af19150503d8060008114611d8f576040519150601f19603f3d011682016040523d82523d6000602084013e611d94565b606091505b5091509150818015611dbe575080511580611dbe575080806020019051810190611dbe91906121e4565b611def5760405162461bcd60e51b8152602060048201526002602482015261534160f01b60448201526064016106e8565b5050505050565b60005b83811015611e11578181015183820152602001611df9565b50506000910152565b6020815260008251806020840152611e39816040850160208701611df6565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610be757600080fd5b60008060408385031215611e7557600080fd5b8235611e8081611e4d565b946020939093013593505050565b600080600060608486031215611ea357600080fd5b8335611eae81611e4d565b92506020840135611ebe81611e4d565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611f0e57611f0e611ecf565b604052919050565b600067ffffffffffffffff821115611f3057611f30611ecf565b5060051b60200190565b600082601f830112611f4b57600080fd5b81356020611f60611f5b83611f16565b611ee5565b82815260059290921b84018101918181019086841115611f7f57600080fd5b8286015b84811015611f9a5780358352918301918301611f83565b509695505050505050565b60008060408385031215611fb857600080fd5b823567ffffffffffffffff80821115611fd057600080fd5b818501915085601f830112611fe457600080fd5b81356020611ff4611f5b83611f16565b82815260059290921b8401810191818101908984111561201357600080fd5b948201945b8386101561203a57853561202b81611e4d565b82529482019490820190612018565b9650508601359250508082111561205057600080fd5b5061205d85828601611f3a565b9150509250929050565b60006020828403121561207957600080fd5b813561208481611e4d565b9392505050565b6000806040838503121561209e57600080fd5b50508035926020909101359150565b6000602082840312156120bf57600080fd5b5035919050565b600080604083850312156120d957600080fd5b82356120e481611e4d565b915060208301356120f481611e4d565b809150509250929050565b600181811c9082168061211357607f821691505b60208210810361213357634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561214b57600080fd5b815161208481611e4d565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176106935761069361216c565b600060ff821660ff81036121af576121af61216c565b60010192915050565b808201808211156106935761069361216c565b6000602082840312156121dd57600080fd5b5051919050565b6000602082840312156121f657600080fd5b8151801515811461208457600080fd5b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156106935761069361216c565b6000826122be57634e487b7160e01b600052601260045260246000fd5b500490565b81516001600160a01b03908116825260208084015182169083015260408084015162ffffff16908301526060808401518216908301526080808401519083015260a0838101519083015260c0808401519083015260e09283015116918101919091526101000190565b9384526001600160a01b039290921660208401526001600160801b03908116604084015216606082015260800190565b6000806040838503121561236f57600080fd5b505080516020909101519092909150565b60008251612392818460208701611df6565b919091019291505056fea26469706673582212202d2a40dcdee416572dbb74942c836c7a1dbeff335cbbe0e289a642b021c5bc2c64736f6c634300081300330000000000000000000000007f5c649856f900d15c83741f45ae46f5c68582340000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f984000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000256aee4a011b3160b8bd39c41477d93fd29b86cb00000000000000000000000068b3465833fb72a70ecdf485e0e4c7bd8665fc45

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102f05760003560e01c8063715018a61161019d578063adc279d7116100e9578063e6a25385116100a2578063f11b219c1161007c578063f11b219c146105c0578063f21bcd9f146105c8578063f2fde38b146105d1578063f84192f9146105e457600080fd5b8063e6a25385146105a2578063e8078d94146105af578063e970cd9f146105b757600080fd5b8063adc279d71461054e578063bd5553fe14610561578063cb370f1a1461056a578063cbb805b014610573578063dd62ed3e14610586578063e330599e1461059957600080fd5b80639148801711610156578063a109d0a111610130578063a109d0a114610517578063a457c2d714610520578063a73a696214610533578063a9059cbb1461053b57600080fd5b806391488017146104f357806395d89b41146105065780639b3b0bba1461050e57600080fd5b8063715018a61461049f5780637440af05146104a757806377bab1e8146104be578063818cec38146104c7578063839006f2146104cf5780638da5cb5b146104e257600080fd5b80633e413bee1161025c5780634e0dff131161021557806360a046b6116101ef57806360a046b61461045b57806362c648521461046457806370a082311461046d57806370b7b80c1461049657600080fd5b80634e0dff131461043757806353e2a8671461043f57806355e613e91461044857600080fd5b80633e413bee146103e05780633fc8cef3146103f3578063411f4f4b146104065780634196df551461040f578063482e2b1c1461041c5780634ada218b1461042557600080fd5b806318160ddd116102ae57806318160ddd1461038757806323b872dd1461038f5780632610eaca146103a25780632e0f1868146103b5578063313ce567146103be57806339509351146103cd57600080fd5b806202f4b0146102f557806303fd2a451461032557806306fdde031461032e578063095ea7b314610343578063105213151461036657806312e2bda21461037d575b600080fd5b601d54610308906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61030861dead81565b6103366105ed565b60405161031c9190611e1a565b610356610351366004611e62565b61067f565b604051901515815260200161031c565b61036f60255481565b60405190815260200161031c565b610385610699565b005b60025461036f565b61035661039d366004611e8e565b610877565b6103856103b0366004611fa5565b61089b565b61036f60245481565b6040516012815260200161031c565b6103566103db366004611e62565b6109af565b600b54610308906001600160a01b031681565b600a54610308906001600160a01b031681565b61036f60145481565b6027546103569060ff1681565b61036f60265481565b60275461035690610100900460ff1681565b6103856109d1565b61036f60205481565b600654610308906001600160a01b031681565b61036f60155481565b61036f601b5481565b61036f61047b366004612067565b6001600160a01b031660009081526020819052604090205490565b61036f60175481565b610385610a28565b601254610356906601000000000000900460ff1681565b61036f601e5481565b610385610a3c565b6103856104dd366004612067565b610aa7565b6005546001600160a01b0316610308565b61038561050136600461208b565b610bea565b610336610c0a565b61036f60215481565b61036f60165481565b61035661052e366004611e62565b610c19565b610385610c94565b610356610549366004611e62565b610cff565b601c54610308906001600160a01b031681565b61036f60185481565b61036f601a5481565b6103856105813660046120ad565b610d0d565b61036f6105943660046120c6565b610d1a565b61036f601f5481565b6022546103569060ff1681565b610385610d45565b61036f60235481565b610385610df1565b61036f60135481565b6103856105df366004612067565b610e48565b61036f60195481565b6060600380546105fc906120ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610628906120ff565b80156106755780601f1061064a57610100808354040283529160200191610675565b820191906000526020600020905b81548152906001019060200180831161065857829003601f168201915b5050505050905090565b60003361068d818585610ebe565b60019150505b92915050565b6106a1610fe2565b60275460ff16156106f15760405162461bcd60e51b8152602060048201526015602482015274141bdbdb1cc8105b1c9958591e4810dc99585d1959605a1b60448201526064015b60405180910390fd5b600754600a5460125460405163a167129560e01b81523060048201526001600160a01b03928316602482015262ffffff909116604482015291169063a1671295906064016020604051808303816000875af1158015610754573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107789190612139565b601c80546001600160a01b0319166001600160a01b03928316179055600754600b5460125460405163a167129560e01b815230600482015291841660248301526301000000900462ffffff16604482015291169063a1671295906064016020604051808303816000875af11580156107f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108189190612139565b601d80546001600160a01b0319166001600160a01b03928316178155601c548216600090815260286020526040808220805460ff1990811660019081179092559354909416825290208054821683179055602780549091169091179055565b60003361088585828561103c565b6108908585856110b0565b506001949350505050565b6108a3610fe2565b80518251146108ec5760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b60448201526064016106e8565b60005b82518160ff1610156109aa57818160ff168151811061091057610910612156565b6020026020010151610937336001600160a01b031660009081526020819052604090205490565b101561094257600080fd5b61099833848360ff168151811061095b5761095b612156565b6020026020010151848460ff168151811061097857610978612156565b6020026020010151670de0b6b3a76400006109939190612182565b6113fc565b806109a281612199565b9150506108ef565b505050565b60003361068d8185856109c28383610d1a565b6109cc91906121b8565b610ebe565b6026546109e0906102b26121b8565b4211610a1a5760405162461bcd60e51b8152602060048201526009602482015268135d5cdd081dd85a5d60ba1b60448201526064016106e8565b610a22611526565b42602655565b610a30610fe2565b610a3a60006116bd565b565b602454610a4b906103846121b8565b4211610a995760405162461bcd60e51b815260206004820181905260248201527f4d75737420776169742020746f2063616c6c204d616e75616c436f6c6c65637460448201526064016106e8565b610aa161170f565b42602455565b610aaf610fe2565b306001600160a01b03821603610ac457600080fd5b6001600160a01b038116610b025760405133904780156108fc02916000818181858888f19350505050158015610afe573d6000803e3d6000fd5b5050565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6f91906121cb565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be391906121e4565b5050505b50565b610bf2610fe2565b600f919091556010556022805460ff19166001179055565b6060600480546105fc906120ff565b60003381610c278286610d1a565b905083811015610c875760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106e8565b6108908286868403610ebe565b602354610ca3906103846121b8565b4211610cf15760405162461bcd60e51b815260206004820181905260248201527f4d75737420776169742020746f2063616c6c204d616e75616c436f6c6c65637460448201526064016106e8565b610cf961195e565b42602355565b60003361068d8185856110b0565b610d15610fe2565b601b55565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610d4d610fe2565b601254670100000000000000900460ff1615610dab5760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920616c726561647920616464656421000000000000000060448201526064016106e8565b426017819055601e819055601f81905560188190556019556012805467010100000000000067ffff000000000000199091161790556027805461ff001916610100179055565b602554610e00906102b26121b8565b4211610e3a5760405162461bcd60e51b8152602060048201526009602482015268135d5cdd081dd85a5d60ba1b60448201526064016106e8565b610e42611b66565b42602555565b610e50610fe2565b6001600160a01b038116610eb55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106e8565b610be7816116bd565b6001600160a01b038316610f205760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106e8565b6001600160a01b038216610f815760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106e8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610a3a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106e8565b60006110488484610d1a565b90506000198114610be357818110156110a35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106e8565b610be38484848403610ebe565b6001600160a01b0383166110d65760405162461bcd60e51b81526004016106e890612206565b6001600160a01b0382166110fc5760405162461bcd60e51b81526004016106e89061224b565b602754610100900460ff16611180576005546001600160a01b038481169116148061113457506005546001600160a01b038381169116145b6111805760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420656e61626c65642079657400000000000060448201526064016106e8565b6012546601000000000000900460ff16156112ed576017544290600090821180156111ba57506015546017546111b691906121b8565b8211155b905060006016546017546111ce91906121b8565b601c549084111591506000906001600160a01b03888116911614806112005750601d546001600160a01b038881169116145b905060008361121157601454611215565b6013545b905083806112205750825b801561124557506001600160a01b03871660009081526028602052604090205460ff16155b156112d15781806112535750835b156112d1578086611279896001600160a01b031660009081526020819052604090205490565b61128391906121b8565b11156112d15760405162461bcd60e51b815260206004820152601960248201527f45786365656473206d61782077616c6c657420616d6f756e740000000000000060448201526064016106e8565b826112e7576012805466ff000000000000191690555b50505050505b601c546001600160a01b03838116911614801561130c575060225460ff165b1561132e57601a54601954611321904261228e565b1061132e5761132e61170f565b601d546001600160a01b03838116911614801561134d575060225460ff165b1561136f57601a54601854611362904261228e565b1061136f5761136f61195e565b61137a8383836113fc565b601c546001600160a01b038481169116148015611399575060225460ff165b156113bb57601f54601b546113ae904261228e565b106113bb576113bb611526565b601d546001600160a01b0384811691161480156113da575060225460ff165b156109aa57601e54601b546113ef904261228e565b106109aa576109aa611b66565b6001600160a01b0383166114225760405162461bcd60e51b81526004016106e890612206565b6001600160a01b0382166114485760405162461bcd60e51b81526004016106e89061224b565b6001600160a01b038316600090815260208190526040902054818110156114c05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106e8565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610be3565b600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561156f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159391906121cb565b9050806000036115a05750565b600060646115af83600a612182565b6115b991906122a1565b90508015610afe57600b546009546115de916001600160a01b03908116911683611cf6565b6040805161010081018252600b546001600160a01b0390811682523060208301526012546301000000900462ffffff168284015261dead606083015242608083015260a08201849052600060c0830181905260e0830152600954925163414bf38960e01b81529192169063414bf3899061165c9084906004016122c3565b6020604051808303816000875af1925050508015611697575060408051601f3d908101601f19168201909252611694918101906121cb565b60015b156109aa575081602160008282546116af91906121b8565b909155505042601f55505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c91906121cb565b90506000601a5460195442611791919061228e565b1061181d57600854601054604051630260e12b60e41b81526001600160a01b039092169163260e12b0916117d49130906001600160801b0390819060040161232c565b60408051808303816000875af192505050801561180e575060408051601f3d908101601f1916820190925261180b9181019061235c565b60015b1561181d575050426019555060015b8015610afe57600b546040516370a0823160e01b815230600482015260009184916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611870573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189491906121cb565b61189e919061228e565b306000818152602081905260409020549192506118be9061dead836110b0565b60006064600e54846118d09190612182565b6118da91906122a1565b600b54600c5460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101849052929350169063a9059cbb906044015b6020604051808303816000875af1158015611932573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195691906121e4565b505050505050565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156119a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cb91906121cb565b90506000601a54601854426119e0919061228e565b10611a6c57600854600f54604051630260e12b60e41b81526001600160a01b039092169163260e12b091611a239130906001600160801b0390819060040161232c565b60408051808303816000875af1925050508015611a5d575060408051601f3d908101601f19168201909252611a5a9181019061235c565b60015b15611a6c575050426018555060015b8015610afe57600a546040516370a0823160e01b815230600482015260009184916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611abf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae391906121cb565b611aed919061228e565b30600081815260208190526040902054919250611b0d9061dead836110b0565b60006064600e5484611b1f9190612182565b611b2991906122a1565b600a54600c5460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101849052929350169063a9059cbb90604401611913565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd391906121cb565b905080600003611be05750565b60006064611bef83600a612182565b611bf991906122a1565b90508015610afe57600a54600954611c1e916001600160a01b03908116911683611cf6565b6040805161010081018252600a546001600160a01b03908116825230602083015260125462ffffff168284015261dead606083015242608083015260a08201849052600060c0830181905260e0830152600954925163414bf38960e01b81529192169063414bf38990611c959084906004016122c3565b6020604051808303816000875af1925050508015611cd0575060408051601f3d908101601f19168201909252611ccd918101906121cb565b60015b156109aa57508160206000828254611ce891906121b8565b909155505042601e55505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b1790529151600092839290871691611d529190612380565b6000604051808303816000865af19150503d8060008114611d8f576040519150601f19603f3d011682016040523d82523d6000602084013e611d94565b606091505b5091509150818015611dbe575080511580611dbe575080806020019051810190611dbe91906121e4565b611def5760405162461bcd60e51b8152602060048201526002602482015261534160f01b60448201526064016106e8565b5050505050565b60005b83811015611e11578181015183820152602001611df9565b50506000910152565b6020815260008251806020840152611e39816040850160208701611df6565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610be757600080fd5b60008060408385031215611e7557600080fd5b8235611e8081611e4d565b946020939093013593505050565b600080600060608486031215611ea357600080fd5b8335611eae81611e4d565b92506020840135611ebe81611e4d565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611f0e57611f0e611ecf565b604052919050565b600067ffffffffffffffff821115611f3057611f30611ecf565b5060051b60200190565b600082601f830112611f4b57600080fd5b81356020611f60611f5b83611f16565b611ee5565b82815260059290921b84018101918181019086841115611f7f57600080fd5b8286015b84811015611f9a5780358352918301918301611f83565b509695505050505050565b60008060408385031215611fb857600080fd5b823567ffffffffffffffff80821115611fd057600080fd5b818501915085601f830112611fe457600080fd5b81356020611ff4611f5b83611f16565b82815260059290921b8401810191818101908984111561201357600080fd5b948201945b8386101561203a57853561202b81611e4d565b82529482019490820190612018565b9650508601359250508082111561205057600080fd5b5061205d85828601611f3a565b9150509250929050565b60006020828403121561207957600080fd5b813561208481611e4d565b9392505050565b6000806040838503121561209e57600080fd5b50508035926020909101359150565b6000602082840312156120bf57600080fd5b5035919050565b600080604083850312156120d957600080fd5b82356120e481611e4d565b915060208301356120f481611e4d565b809150509250929050565b600181811c9082168061211357607f821691505b60208210810361213357634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561214b57600080fd5b815161208481611e4d565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176106935761069361216c565b600060ff821660ff81036121af576121af61216c565b60010192915050565b808201808211156106935761069361216c565b6000602082840312156121dd57600080fd5b5051919050565b6000602082840312156121f657600080fd5b8151801515811461208457600080fd5b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156106935761069361216c565b6000826122be57634e487b7160e01b600052601260045260246000fd5b500490565b81516001600160a01b03908116825260208084015182169083015260408084015162ffffff16908301526060808401518216908301526080808401519083015260a0838101519083015260c0808401519083015260e09283015116918101919091526101000190565b9384526001600160a01b039290921660208401526001600160801b03908116604084015216606082015260800190565b6000806040838503121561236f57600080fd5b505080516020909101519092909150565b60008251612392818460208701611df6565b919091019291505056fea26469706673582212202d2a40dcdee416572dbb74942c836c7a1dbeff335cbbe0e289a642b021c5bc2c64736f6c63430008130033

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

0000000000000000000000007f5c649856f900d15c83741f45ae46f5c68582340000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f984000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000256aee4a011b3160b8bd39c41477d93fd29b86cb00000000000000000000000068b3465833fb72a70ecdf485e0e4c7bd8665fc45

-----Decoded View---------------
Arg [0] : _uniCryptCollect (address): 0x7f5C649856F900d15C83741f45AE46f5C6858234
Arg [1] : _factory (address): 0x1F98431c8aD98523631AE4a59f267346ea31F984
Arg [2] : _v3SwapRouter (address): 0xE592427A0AEce92De3Edee1F18E0157C05861564
Arg [3] : _posman (address): 0xC36442b4a4522E871399CD717aBDD847Ab11FE88
Arg [4] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [5] : _usdc (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [6] : _externalAddress (address): 0x256aee4a011b3160B8BD39C41477d93Fd29B86cB
Arg [7] : _smartRouter (address): 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000007f5c649856f900d15c83741f45ae46f5c6858234
Arg [1] : 0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f984
Arg [2] : 000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564
Arg [3] : 000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88
Arg [4] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [5] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [6] : 000000000000000000000000256aee4a011b3160b8bd39c41477d93fd29b86cb
Arg [7] : 00000000000000000000000068b3465833fb72a70ecdf485e0e4c7bd8665fc45


Deployed Bytecode Sourcemap

22753:12751:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23964:23;;;;;-1:-1:-1;;;;;23964:23:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;23964:23:0;;;;;;;;23994:73;;24025:42;23994:73;;6945:100;;;:::i;:::-;;;;;;;:::i;9296:201::-;;;;;;:::i;:::-;;:::i;:::-;;;1499:14:1;;1492:22;1474:41;;1462:2;1447:18;9296:201:0;1334:187:1;24344:36:0;;;;;;;;;1672:25:1;;;1660:2;1645:18;24344:36:0;1526:177:1;26128:401:0;;;:::i;:::-;;8065:108;8153:12;;8065:108;;10077:295;;;;;;:::i;:::-;;:::i;35112:383::-;;;;;;:::i;:::-;;:::i;24301:36::-;;;;;;7907:93;;;7990:2;4798:36:1;;4786:2;4771:18;7907:93:0;4656:184:1;10781:238:0;;;;;;:::i;:::-;;:::i;22976:19::-;;;;;-1:-1:-1;;;;;22976:19:0;;;22950;;;;;-1:-1:-1;;;;;22950:19:0;;;23558:35;;;;;;24430:34;;;;;;;;;24387:36;;;;;;24471:37;;;;;;;;;;;;34907:201;;;:::i;24156:25::-;;;;;;22797:41;;;;;-1:-1:-1;;;;;22797:41:0;;;23600:45;;;;;;23884:43;;;;;;8236:127;;;;;;:::i;:::-;-1:-1:-1;;;;;8337:18:0;8310:7;8337:18;;;;;;;;;;;;8236:127;23704:31;;;;;;20016:103;;;:::i;23424:40::-;;;;;;;;;;;;24074:34;;;;;;34400:223;;;:::i;33683:395::-;;;;;;:::i;:::-;;:::i;19368:87::-;19441:6;;-1:-1:-1;;;;;19441:6:0;19368:87;;26537:175;;;;;;:::i;:::-;;:::i;7164:104::-;;;:::i;24188:25::-;;;;;;23652:45;;;;;;11522:436;;;;;;:::i;:::-;;:::i;34173:223::-;;;:::i;8569:193::-;;;;;;:::i;:::-;;:::i;23934:23::-;;;;;-1:-1:-1;;;;;23934:23:0;;;23742:38;;;;;;23834:43;;;;;;33564:113;;;;;;:::i;:::-;;:::i;8825:151::-;;;;;;:::i;:::-;;:::i;24115:34::-;;;;;;24220:31;;;;;;;;;25648:472;;;:::i;24258:36::-;;;;;;34702:201;;;:::i;23516:35::-;;;;;;20274:201;;;;;;:::i;:::-;;:::i;23787:38::-;;;;;;6945:100;6999:13;7032:5;7025:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6945:100;:::o;9296:201::-;9379:4;4667:10;9435:32;4667:10;9451:7;9460:6;9435:8;:32::i;:::-;9485:4;9478:11;;;9296:201;;;;;:::o;26128:401::-;19254:13;:11;:13::i;:::-;26189:11:::1;::::0;::::1;;26188:12;26180:46;;;::::0;-1:-1:-1;;;26180:46:0;;6758:2:1;26180:46:0::1;::::0;::::1;6740:21:1::0;6797:2;6777:18;;;6770:30;-1:-1:-1;;;6816:18:1;;;6809:51;6877:18;;26180:46:0::1;;;;;;;;;26248:7;::::0;26282:4:::1;::::0;26288:11:::1;::::0;26248:52:::1;::::0;-1:-1:-1;;;26248:52:0;;26275:4:::1;26248:52;::::0;::::1;7144:34:1::0;-1:-1:-1;;;;;26282:4:0;;::::1;7194:18:1::0;;;7187:43;26288:11:0::1;::::0;;::::1;7246:18:1::0;;;7239:49;26248:7:0;::::1;::::0;:18:::1;::::0;7079::1;;26248:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26237:8;:63:::0;;-1:-1:-1;;;;;;26237:63:0::1;-1:-1:-1::0;;;;;26237:63:0;;::::1;;::::0;;26322:7:::1;::::0;26356:4:::1;::::0;26362:11:::1;::::0;26322:52:::1;::::0;-1:-1:-1;;;26322:52:0;;26349:4:::1;26322:52;::::0;::::1;7144:34:1::0;26356:4:0;;::::1;7194:18:1::0;;;7187:43;26362:11:0;;::::1;;;7246:18:1::0;;;7239:49;26322:7:0;::::1;::::0;:18:::1;::::0;7079::1;;26322:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26311:8;:63:::0;;-1:-1:-1;;;;;;26311:63:0::1;-1:-1:-1::0;;;;;26311:63:0;;::::1;;::::0;;26417:8:::1;::::0;;::::1;-1:-1:-1::0;26387:40:0;;;:21:::1;:40;::::0;;;;;:47;;-1:-1:-1;;26387:47:0;;::::1;-1:-1:-1::0;26387:47:0;;::::1;::::0;;;26475:8;;;;::::1;26445:40:::0;;;;:47;;;::::1;::::0;::::1;::::0;;26503:11:::1;:18:::0;;;;::::1;::::0;;::::1;::::0;;26128:401::o;10077:295::-;10208:4;4667:10;10266:38;10282:4;4667:10;10297:6;10266:15;:38::i;:::-;10315:27;10325:4;10331:2;10335:6;10315:9;:27::i;:::-;-1:-1:-1;10360:4:0;;10077:295;-1:-1:-1;;;;10077:295:0:o;35112:383::-;19254:13;:11;:13::i;:::-;35247:7:::1;:14;35228:8;:15;:33;35220:67;;;::::0;-1:-1:-1;;;35220:67:0;;7757:2:1;35220:67:0::1;::::0;::::1;7739:21:1::0;7796:2;7776:18;;;7769:30;-1:-1:-1;;;7815:18:1;;;7808:51;7876:18;;35220:67:0::1;7555:345:1::0;35220:67:0::1;35303:7;35298:190;35320:8;:15;35316:1;:19;;;35298:190;;;35390:7;35398:1;35390:10;;;;;;;;;;:::i;:::-;;;;;;;35365:21;35375:10;-1:-1:-1::0;;;;;8337:18:0;8310:7;8337:18;;;;;;;;;;;;8236:127;35365:21:::1;:35;;35357:44;;;::::0;::::1;;35416:60;35432:10;35445:8;35454:1;35445:11;;;;;;;;;;:::i;:::-;;;;;;;35458:7;35466:1;35458:10;;;;;;;;;;:::i;:::-;;;;;;;35469:6;35458:17;;;;:::i;:::-;35416:15;:60::i;:::-;35337:3:::0;::::1;::::0;::::1;:::i;:::-;;;;35298:190;;;;35112:383:::0;;:::o;10781:238::-;10869:4;4667:10;10925:64;4667:10;10941:7;10978:10;10950:25;4667:10;10941:7;10950:9;:25::i;:::-;:38;;;;:::i;:::-;10925:8;:64::i;34907:201::-;34978:21;;:35;;35002:11;34978:35;:::i;:::-;34960:15;:53;34951:76;;;;-1:-1:-1;;;34951:76:0;;8854:2:1;34951:76:0;;;8836:21:1;8893:1;8873:18;;;8866:29;-1:-1:-1;;;8911:18:1;;;8904:39;8960:18;;34951:76:0;8652:332:1;34951:76:0;35034:21;:19;:21::i;:::-;35086:15;35062:21;:39;34907:201::o;20016:103::-;19254:13;:11;:13::i;:::-;20081:30:::1;20108:1;20081:18;:30::i;:::-;20016:103::o:0;34400:223::-;34470:21;;:34;;34494:10;34470:34;:::i;:::-;34452:15;:52;34443:98;;;;-1:-1:-1;;;34443:98:0;;9191:2:1;34443:98:0;;;9173:21:1;;;9210:18;;;9203:30;9269:34;9249:18;;;9242:62;9321:18;;34443:98:0;8989:356:1;34443:98:0;34548:21;:19;:21::i;:::-;34600:15;34576:21;:39;34400:223::o;33683:395::-;19254:13;:11;:13::i;:::-;33769:4:::1;-1:-1:-1::0;;;;;33752:22:0;::::1;::::0;33744:31:::1;;;::::0;::::1;;-1:-1:-1::0;;;;;33790:21:0;::::1;33786:126;;33828:51;::::0;33836:10:::1;::::0;33857:21:::1;33828:51:::0;::::1;;;::::0;::::1;::::0;;;33857:21;33836:10;33828:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;33683:395:::0;:::o;33786:126::-:1;33984:35;::::0;-1:-1:-1;;;33984:35:0;;34013:4:::1;33984:35;::::0;::::1;160:51:1::0;33949:5:0;;33922:17:::1;::::0;-1:-1:-1;;;;;33984:20:0;::::1;::::0;::::1;::::0;133:18:1;;33984:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34030:40;::::0;-1:-1:-1;;;34030:40:0;;34050:10:::1;34030:40;::::0;::::1;9713:51:1::0;9780:18;;;9773:34;;;33966:53:0;;-1:-1:-1;;;;;;34030:19:0;::::1;::::0;::::1;::::0;9686:18:1;;34030:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33733:345;;19278:1;33683:395:::0;:::o;26537:175::-;19254:13;:11;:13::i;:::-;26621:8:::1;:22:::0;;;;26654:8:::1;:22:::0;26689:8:::1;:15:::0;;-1:-1:-1;;26689:15:0::1;26700:4;26689:15;::::0;;26537:175::o;7164:104::-;7220:13;7253:7;7246:14;;;;;:::i;11522:436::-;11615:4;4667:10;11615:4;11698:25;4667:10;11715:7;11698:9;:25::i;:::-;11671:52;;11762:15;11742:16;:35;;11734:85;;;;-1:-1:-1;;;11734:85:0;;10302:2:1;11734:85:0;;;10284:21:1;10341:2;10321:18;;;10314:30;10380:34;10360:18;;;10353:62;-1:-1:-1;;;10431:18:1;;;10424:35;10476:19;;11734:85:0;10100:401:1;11734:85:0;11855:60;11864:5;11871:7;11899:15;11880:16;:34;11855:8;:60::i;34173:223::-;34243:21;;:34;;34267:10;34243:34;:::i;:::-;34225:15;:52;34216:98;;;;-1:-1:-1;;;34216:98:0;;9191:2:1;34216:98:0;;;9173:21:1;;;9210:18;;;9203:30;9269:34;9249:18;;;9242:62;9321:18;;34216:98:0;8989:356:1;34216:98:0;34321:21;:19;:21::i;:::-;34373:15;34349:21;:39;34173:223::o;8569:193::-;8648:4;4667:10;8704:28;4667:10;8721:2;8725:6;8704:9;:28::i;33564:113::-;19254:13;:11;:13::i;:::-;33643:15:::1;:30:::0;33564:113::o;8825:151::-;-1:-1:-1;;;;;8941:18:0;;;8914:7;8941:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8825:151::o;25648:472::-;19254:13;:11;:13::i;:::-;25709:14:::1;::::0;;;::::1;;;25708:15;25700:52;;;::::0;-1:-1:-1;;;25700:52:0;;10708:2:1;25700:52:0::1;::::0;::::1;10690:21:1::0;10747:2;10727:18;;;10720:30;10786:26;10766:18;;;10759:54;10830:18;;25700:52:0::1;10506:348:1::0;25700:52:0::1;25782:15;25763:16;:34:::0;;;25808:19:::1;:37:::0;;;25856:19:::1;:37:::0;;;25904:23:::1;:41:::0;;;25956:23:::1;:41:::0;26011:14:::1;:21:::0;;26044:24;-1:-1:-1;;26044:24:0;;;;;;26080:14:::1;:21:::0;;-1:-1:-1;;26080:21:0::1;26011;26080;::::0;;25648:472::o;34702:201::-;34773:21;;:35;;34797:11;34773:35;:::i;:::-;34755:15;:53;34746:76;;;;-1:-1:-1;;;34746:76:0;;8854:2:1;34746:76:0;;;8836:21:1;8893:1;8873:18;;;8866:29;-1:-1:-1;;;8911:18:1;;;8904:39;8960:18;;34746:76:0;8652:332:1;34746:76:0;34829:21;:19;:21::i;:::-;34881:15;34857:21;:39;34702:201::o;20274:::-;19254:13;:11;:13::i;:::-;-1:-1:-1;;;;;20363:22:0;::::1;20355:73;;;::::0;-1:-1:-1;;;20355:73:0;;11061:2:1;20355:73:0::1;::::0;::::1;11043:21:1::0;11100:2;11080:18;;;11073:30;11139:34;11119:18;;;11112:62;-1:-1:-1;;;11190:18:1;;;11183:36;11236:19;;20355:73:0::1;10859:402:1::0;20355:73:0::1;20439:28;20458:8;20439:18;:28::i;15549:380::-:0;-1:-1:-1;;;;;15685:19:0;;15677:68;;;;-1:-1:-1;;;15677:68:0;;11468:2:1;15677:68:0;;;11450:21:1;11507:2;11487:18;;;11480:30;11546:34;11526:18;;;11519:62;-1:-1:-1;;;11597:18:1;;;11590:34;11641:19;;15677:68:0;11266:400:1;15677:68:0;-1:-1:-1;;;;;15764:21:0;;15756:68;;;;-1:-1:-1;;;15756:68:0;;11873:2:1;15756:68:0;;;11855:21:1;11912:2;11892:18;;;11885:30;11951:34;11931:18;;;11924:62;-1:-1:-1;;;12002:18:1;;;11995:32;12044:19;;15756:68:0;11671:398:1;15756:68:0;-1:-1:-1;;;;;15837:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15889:32;;1672:25:1;;;15889:32:0;;1645:18:1;15889:32:0;;;;;;;15549:380;;;:::o;19533:132::-;19441:6;;-1:-1:-1;;;;;19441:6:0;4667:10;19597:23;19589:68;;;;-1:-1:-1;;;19589:68:0;;12276:2:1;19589:68:0;;;12258:21:1;;;12295:18;;;12288:30;12354:34;12334:18;;;12327:62;12406:18;;19589:68:0;12074:356:1;16220:453:0;16355:24;16382:25;16392:5;16399:7;16382:9;:25::i;:::-;16355:52;;-1:-1:-1;;16422:16:0;:37;16418:248;;16504:6;16484:16;:26;;16476:68;;;;-1:-1:-1;;;16476:68:0;;12637:2:1;16476:68:0;;;12619:21:1;12676:2;12656:18;;;12649:30;12715:31;12695:18;;;12688:59;12764:18;;16476:68:0;12435:353:1;16476:68:0;16588:51;16597:5;16604:7;16632:6;16613:16;:25;16588:8;:51::i;26728:2175::-;-1:-1:-1;;;;;26826:18:0;;26818:68;;;;-1:-1:-1;;;26818:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26905:16:0;;26897:64;;;;-1:-1:-1;;;26897:64:0;;;;;;;:::i;:::-;26974:14;;;;;;;26970:110;;19441:6;;-1:-1:-1;;;;;27009:15:0;;;19441:6;;27009:15;;:32;;-1:-1:-1;19441:6:0;;-1:-1:-1;;;;;27028:13:0;;;19441:6;;27028:13;27009:32;27001:71;;;;-1:-1:-1;;;27001:71:0;;13805:2:1;27001:71:0;;;13787:21:1;13844:2;13824:18;;;13817:30;13883:28;13863:18;;;13856:56;13929:18;;27001:71:0;13603:350:1;27001:71:0;27096:17;;;;;;;27092:995;;;27213:16;;27148:15;;27126:19;;27199:30;;:86;;;;;27267:18;;27248:16;;:37;;;;:::i;:::-;27233:11;:52;;27199:86;27174:111;;27296:23;27356:18;;27337:16;;:37;;;;:::i;:::-;27415:8;;27322:52;;;;;-1:-1:-1;27385:18:0;;-1:-1:-1;;;;;27407:16:0;;;27415:8;;27407:16;;:36;;-1:-1:-1;27435:8:0;;-1:-1:-1;;;;;27427:16:0;;;27435:8;;27427:16;27407:36;27385:59;;27455:23;27481:17;:63;;27524:20;;27481:63;;;27501:20;;27481:63;27455:89;;27562:17;:39;;;;27583:18;27562:39;27561:71;;;;-1:-1:-1;;;;;;27607:25:0;;;;;;:21;:25;;;;;;;;27606:26;27561:71;27557:362;;;27758:13;:34;;;;27775:17;27758:34;27754:154;;;27847:15;27837:6;27821:13;27831:2;-1:-1:-1;;;;;8337:18:0;8310:7;8337:18;;;;;;;;;;;;8236:127;27821:13;:22;;;;:::i;:::-;:41;;27813:79;;;;-1:-1:-1;;;27813:79:0;;14160:2:1;27813:79:0;;;14142:21:1;14199:2;14179:18;;;14172:30;14238:27;14218:18;;;14211:55;14283:18;;27813:79:0;13958:349:1;27813:79:0;28008:18;28003:77;;28043:17;:25;;-1:-1:-1;;28043:25:0;;;28003:77;27115:972;;;;;27092:995;28157:8;;-1:-1:-1;;;;;28151:14:0;;;28157:8;;28151:14;28150:28;;;;-1:-1:-1;28170:8:0;;;;28150:28;28146:170;;;28243:15;;28216:23;;28198:41;;:15;:41;:::i;:::-;:60;28194:115;;28275:21;:19;:21::i;:::-;28339:8;;-1:-1:-1;;;;;28333:14:0;;;28339:8;;28333:14;28332:28;;;;-1:-1:-1;28352:8:0;;;;28332:28;28328:169;;;28424:15;;28397:23;;28379:41;;:15;:41;:::i;:::-;:60;28375:115;;28456:21;:19;:21::i;:::-;28508:33;28524:4;28530:2;28534:6;28508:15;:33::i;:::-;28569:8;;-1:-1:-1;;;;;28561:16:0;;;28569:8;;28561:16;28560:30;;;;-1:-1:-1;28582:8:0;;;;28560:30;28556:164;;;28644:19;;28625:15;;28607:33;;:15;:33;:::i;:::-;:56;28603:110;;28680:21;:19;:21::i;:::-;28741:8;;-1:-1:-1;;;;;28733:16:0;;;28741:8;;28733:16;28732:30;;;;-1:-1:-1;28754:8:0;;;;28732:30;28728:164;;;28816:19;;28797:15;;28779:33;;:15;:33;:::i;:::-;:56;28775:110;;28852:21;:19;:21::i;12428:840::-;-1:-1:-1;;;;;12559:18:0;;12551:68;;;;-1:-1:-1;;;12551:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12638:16:0;;12630:64;;;;-1:-1:-1;;;12630:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12780:15:0;;12758:19;12780:15;;;;;;;;;;;12814:21;;;;12806:72;;;;-1:-1:-1;;;12806:72:0;;14647:2:1;12806:72:0;;;14629:21:1;14686:2;14666:18;;;14659:30;14725:34;14705:18;;;14698:62;-1:-1:-1;;;14776:18:1;;;14769:36;14822:19;;12806:72:0;14445:402:1;12806:72:0;-1:-1:-1;;;;;12914:15:0;;;:9;:15;;;;;;;;;;;12932:20;;;12914:38;;13132:13;;;;;;;;;;:23;;;;;;13184:26;;1672:25:1;;;13132:13:0;;13184:26;;1645:18:1;13184:26:0;;;;;;;13223:37;35112:383;32396:1163;32472:4;;32465:37;;-1:-1:-1;;;32465:37:0;;32496:4;32465:37;;;160:51:1;32443:19:0;;-1:-1:-1;;;;;32472:4:0;;32465:22;;133:18:1;;32465:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32443:59;;32515:11;32530:1;32515:16;32511:110;;32544:7;32396:1163::o;32511:110::-;32629:21;32674:3;32654:16;:11;32668:2;32654:16;:::i;:::-;32653:24;;;;:::i;:::-;32629:48;-1:-1:-1;32713:17:0;;32709:824;;32778:4;;32792:12;;32751:70;;-1:-1:-1;;;;;32778:4:0;;;;32792:12;32807:13;32751:26;:70::i;:::-;32922:379;;;;;;;;32983:4;;-1:-1:-1;;;;;32983:4:0;;;32922:379;;33020:4;32922:379;;;;33045:11;;;;;;;32922:379;;;;24025:42;32922:379;;;;33112:15;32922:379;;;;;;;;;;-1:-1:-1;32922:379:0;;;;;;;;;;33362:12;;33348:52;;-1:-1:-1;;;33348:52:0;;32922:379;;33362:12;;33348:44;;:52;;32922:379;;33348:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33348:52:0;;;;;;;;-1:-1:-1;;33348:52:0;;;;;;;;;;;;:::i;:::-;;;33344:175;;;;33431:13;33417:10;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;33482:15:0;33460:19;:37;32732:801;32436:1123;;32396:1163::o;20635:191::-;20728:6;;;-1:-1:-1;;;;;20745:17:0;;;-1:-1:-1;;;;;;20745:17:0;;;;;;;20778:40;;20728:6;;;20745:17;20728:6;;20778:40;;20709:16;;20778:40;20698:128;20635:191;:::o;30093:1148::-;30175:4;;30168:37;;-1:-1:-1;;;30168:37:0;;30199:4;30168:37;;;160:51:1;30140:25:0;;-1:-1:-1;;;;;30175:4:0;;30168:22;;133:18:1;;30168:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30140:65;;30213:14;30299:15;;30272:23;;30254:15;:41;;;;:::i;:::-;:60;30250:321;;30348:15;;30373:8;;30331:92;;-1:-1:-1;;;30331:92:0;;-1:-1:-1;;;;;30348:15:0;;;;30331:41;;:92;;30391:4;;-1:-1:-1;;;;;23345:17:0;;;30331:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30331:92:0;;;;;;;;-1:-1:-1;;30331:92:0;;;;;;;;;;;;:::i;:::-;;;30327:205;;;-1:-1:-1;;30465:15:0;30439:23;:41;-1:-1:-1;30507:4:0;30327:205;30589:9;30585:653;;;30694:4;;30687:37;;-1:-1:-1;;;30687:37:0;;30718:4;30687:37;;;160:51:1;30664:20:0;;30727:17;;-1:-1:-1;;;;;30694:4:0;;;;30687:22;;133:18:1;;30687:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;;;:::i;:::-;30859:4;30818:20;8337:18;;;;;;;;;;;30664:80;;-1:-1:-1;30876:44:0;;24025:42;8337:18;30876:9;:44::i;:::-;31072:18;31124:3;31109:11;;31094:12;:26;;;;:::i;:::-;31093:34;;;;:::i;:::-;31187:4;;31202:15;;31180:50;;-1:-1:-1;;;31180:50:0;;-1:-1:-1;;;;;31202:15:0;;;31180:50;;;9713:51:1;9780:18;;;9773:34;;;31072:55:0;;-1:-1:-1;31187:4:0;;31180:21;;9686:18:1;;31180:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30600:638;;;30133:1108;;30093:1148::o;28909:1180::-;28991:4;;28984:37;;-1:-1:-1;;;28984:37:0;;29015:4;28984:37;;;160:51:1;28956:25:0;;-1:-1:-1;;;;;28991:4:0;;28984:22;;133:18:1;;28984:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28956:65;;29029:14;29147:15;;29120:23;;29102:15;:41;;;;:::i;:::-;:60;29098:321;;29196:15;;29221:8;;29179:92;;-1:-1:-1;;;29179:92:0;;-1:-1:-1;;;;;29196:15:0;;;;29179:41;;:92;;29239:4;;-1:-1:-1;;;;;23345:17:0;;;29179:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29179:92:0;;;;;;;;-1:-1:-1;;29179:92:0;;;;;;;;;;;;:::i;:::-;;;29175:205;;;-1:-1:-1;;29313:15:0;29287:23;:41;-1:-1:-1;29355:4:0;29175:205;29437:9;29433:653;;;29542:4;;29535:37;;-1:-1:-1;;;29535:37:0;;29566:4;29535:37;;;160:51:1;29512:20:0;;29575:17;;-1:-1:-1;;;;;29542:4:0;;;;29535:22;;133:18:1;;29535:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;;;:::i;:::-;29707:4;29666:20;8337:18;;;;;;;;;;;29512:80;;-1:-1:-1;29724:44:0;;24025:42;8337:18;29724:9;:44::i;:::-;29920:18;29972:3;29957:11;;29942:12;:26;;;;:::i;:::-;29941:34;;;;:::i;:::-;30035:4;;30050:15;;30028:50;;-1:-1:-1;;;30028:50:0;;-1:-1:-1;;;;;30050:15:0;;;30028:50;;;9713:51:1;9780:18;;;9773:34;;;29920:55:0;;-1:-1:-1;30035:4:0;;30028:21;;9686:18:1;;30028:50:0;9539:274:1;31247:1144:0;31323:4;;31316:37;;-1:-1:-1;;;31316:37:0;;31347:4;31316:37;;;160:51:1;31294:19:0;;-1:-1:-1;;;;;31323:4:0;;31316:22;;133:18:1;;31316:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31294:59;;31366:11;31381:1;31366:16;31362:110;;31395:7;31247:1144::o;31362:110::-;31480:21;31525:3;31505:16;:11;31519:2;31505:16;:::i;:::-;31504:24;;;;:::i;:::-;31480:48;-1:-1:-1;31564:17:0;;31560:816;;31623:4;;31637:12;;31596:70;;-1:-1:-1;;;;;31623:4:0;;;;31637:12;31652:13;31596:26;:70::i;:::-;31765:379;;;;;;;;31826:4;;-1:-1:-1;;;;;31826:4:0;;;31765:379;;31863:4;31765:379;;;;31888:11;;;;31765:379;;;;24025:42;31765:379;;;;31955:15;31765:379;;;;;;;;;;31712:50;31765:379;;;;;;;;;;32205:12;;32191:52;;-1:-1:-1;;;32191:52:0;;31765:379;;32205:12;;32191:44;;:52;;31765:379;;32191:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32191:52:0;;;;;;;;-1:-1:-1;;32191:52:0;;;;;;;;;;;;:::i;:::-;;;32187:175;;;;32274:13;32260:10;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;32325:15:0;32303:19;:37;31583:793;31287:1104;;31247:1144::o;20898:314::-;21062:58;;;-1:-1:-1;;;;;9731:32:1;;;21062:58:0;;;9713:51:1;9780:18;;;;9773:34;;;21062:58:0;;;;;;;;;;9686:18:1;;;;21062:58:0;;;;;;;-1:-1:-1;;;;;21062:58:0;-1:-1:-1;;;21062:58:0;;;21051:70;;-1:-1:-1;;;;21051:10:0;;;;:70;;21062:58;21051:70;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21015:106;;;;21140:7;:57;;;;-1:-1:-1;21152:11:0;;:16;;:44;;;21183:4;21172:24;;;;;;;;;;;;:::i;:::-;21132:72;;;;-1:-1:-1;;;21132:72:0;;17109:2:1;21132:72:0;;;17091:21:1;17148:1;17128:18;;;17121:29;-1:-1:-1;;;17166:18:1;;;17159:32;17208:18;;21132:72:0;16907:325:1;21132:72:0;21004:208;;20898:314;;;:::o;222:250:1:-;307:1;317:113;331:6;328:1;325:13;317:113;;;407:11;;;401:18;388:11;;;381:39;353:2;346:10;317:113;;;-1:-1:-1;;464:1:1;446:16;;439:27;222:250::o;477:396::-;626:2;615:9;608:21;589:4;658:6;652:13;701:6;696:2;685:9;681:18;674:34;717:79;789:6;784:2;773:9;769:18;764:2;756:6;752:15;717:79;:::i;:::-;857:2;836:15;-1:-1:-1;;832:29:1;817:45;;;;864:2;813:54;;477:396;-1:-1:-1;;477:396:1:o;878:131::-;-1:-1:-1;;;;;953:31:1;;943:42;;933:70;;999:1;996;989:12;1014:315;1082:6;1090;1143:2;1131:9;1122:7;1118:23;1114:32;1111:52;;;1159:1;1156;1149:12;1111:52;1198:9;1185:23;1217:31;1242:5;1217:31;:::i;:::-;1267:5;1319:2;1304:18;;;;1291:32;;-1:-1:-1;;;1014:315:1:o;1708:456::-;1785:6;1793;1801;1854:2;1842:9;1833:7;1829:23;1825:32;1822:52;;;1870:1;1867;1860:12;1822:52;1909:9;1896:23;1928:31;1953:5;1928:31;:::i;:::-;1978:5;-1:-1:-1;2035:2:1;2020:18;;2007:32;2048:33;2007:32;2048:33;:::i;:::-;1708:456;;2100:7;;-1:-1:-1;;;2154:2:1;2139:18;;;;2126:32;;1708:456::o;2169:127::-;2230:10;2225:3;2221:20;2218:1;2211:31;2261:4;2258:1;2251:15;2285:4;2282:1;2275:15;2301:275;2372:2;2366:9;2437:2;2418:13;;-1:-1:-1;;2414:27:1;2402:40;;2472:18;2457:34;;2493:22;;;2454:62;2451:88;;;2519:18;;:::i;:::-;2555:2;2548:22;2301:275;;-1:-1:-1;2301:275:1:o;2581:183::-;2641:4;2674:18;2666:6;2663:30;2660:56;;;2696:18;;:::i;:::-;-1:-1:-1;2741:1:1;2737:14;2753:4;2733:25;;2581:183::o;2769:662::-;2823:5;2876:3;2869:4;2861:6;2857:17;2853:27;2843:55;;2894:1;2891;2884:12;2843:55;2930:6;2917:20;2956:4;2980:60;2996:43;3036:2;2996:43;:::i;:::-;2980:60;:::i;:::-;3074:15;;;3160:1;3156:10;;;;3144:23;;3140:32;;;3105:12;;;;3184:15;;;3181:35;;;3212:1;3209;3202:12;3181:35;3248:2;3240:6;3236:15;3260:142;3276:6;3271:3;3268:15;3260:142;;;3342:17;;3330:30;;3380:12;;;;3293;;3260:142;;;-1:-1:-1;3420:5:1;2769:662;-1:-1:-1;;;;;;2769:662:1:o;3436:1215::-;3554:6;3562;3615:2;3603:9;3594:7;3590:23;3586:32;3583:52;;;3631:1;3628;3621:12;3583:52;3671:9;3658:23;3700:18;3741:2;3733:6;3730:14;3727:34;;;3757:1;3754;3747:12;3727:34;3795:6;3784:9;3780:22;3770:32;;3840:7;3833:4;3829:2;3825:13;3821:27;3811:55;;3862:1;3859;3852:12;3811:55;3898:2;3885:16;3920:4;3944:60;3960:43;4000:2;3960:43;:::i;3944:60::-;4038:15;;;4120:1;4116:10;;;;4108:19;;4104:28;;;4069:12;;;;4144:19;;;4141:39;;;4176:1;4173;4166:12;4141:39;4200:11;;;;4220:217;4236:6;4231:3;4228:15;4220:217;;;4316:3;4303:17;4333:31;4358:5;4333:31;:::i;:::-;4377:18;;4253:12;;;;4415;;;;4220:217;;;4456:5;-1:-1:-1;;4499:18:1;;4486:32;;-1:-1:-1;;4530:16:1;;;4527:36;;;4559:1;4556;4549:12;4527:36;;4582:63;4637:7;4626:8;4615:9;4611:24;4582:63;:::i;:::-;4572:73;;;3436:1215;;;;;:::o;5088:247::-;5147:6;5200:2;5188:9;5179:7;5175:23;5171:32;5168:52;;;5216:1;5213;5206:12;5168:52;5255:9;5242:23;5274:31;5299:5;5274:31;:::i;:::-;5324:5;5088:247;-1:-1:-1;;;5088:247:1:o;5340:248::-;5408:6;5416;5469:2;5457:9;5448:7;5444:23;5440:32;5437:52;;;5485:1;5482;5475:12;5437:52;-1:-1:-1;;5508:23:1;;;5578:2;5563:18;;;5550:32;;-1:-1:-1;5340:248:1:o;5593:180::-;5652:6;5705:2;5693:9;5684:7;5680:23;5676:32;5673:52;;;5721:1;5718;5711:12;5673:52;-1:-1:-1;5744:23:1;;5593:180;-1:-1:-1;5593:180:1:o;5778:388::-;5846:6;5854;5907:2;5895:9;5886:7;5882:23;5878:32;5875:52;;;5923:1;5920;5913:12;5875:52;5962:9;5949:23;5981:31;6006:5;5981:31;:::i;:::-;6031:5;-1:-1:-1;6088:2:1;6073:18;;6060:32;6101:33;6060:32;6101:33;:::i;:::-;6153:7;6143:17;;;5778:388;;;;;:::o;6171:380::-;6250:1;6246:12;;;;6293;;;6314:61;;6368:4;6360:6;6356:17;6346:27;;6314:61;6421:2;6413:6;6410:14;6390:18;6387:38;6384:161;;6467:10;6462:3;6458:20;6455:1;6448:31;6502:4;6499:1;6492:15;6530:4;6527:1;6520:15;6384:161;;6171:380;;;:::o;7299:251::-;7369:6;7422:2;7410:9;7401:7;7397:23;7393:32;7390:52;;;7438:1;7435;7428:12;7390:52;7470:9;7464:16;7489:31;7514:5;7489:31;:::i;7905:127::-;7966:10;7961:3;7957:20;7954:1;7947:31;7997:4;7994:1;7987:15;8021:4;8018:1;8011:15;8037:127;8098:10;8093:3;8089:20;8086:1;8079:31;8129:4;8126:1;8119:15;8153:4;8150:1;8143:15;8169:168;8242:9;;;8273;;8290:15;;;8284:22;;8270:37;8260:71;;8311:18;;:::i;8342:175::-;8379:3;8423:4;8416:5;8412:16;8452:4;8443:7;8440:17;8437:43;;8460:18;;:::i;:::-;8509:1;8496:15;;8342:175;-1:-1:-1;;8342:175:1:o;8522:125::-;8587:9;;;8608:10;;;8605:36;;;8621:18;;:::i;9350:184::-;9420:6;9473:2;9461:9;9452:7;9448:23;9444:32;9441:52;;;9489:1;9486;9479:12;9441:52;-1:-1:-1;9512:16:1;;9350:184;-1:-1:-1;9350:184:1:o;9818:277::-;9885:6;9938:2;9926:9;9917:7;9913:23;9909:32;9906:52;;;9954:1;9951;9944:12;9906:52;9986:9;9980:16;10039:5;10032:13;10025:21;10018:5;10015:32;10005:60;;10061:1;10058;10051:12;12793:401;12995:2;12977:21;;;13034:2;13014:18;;;13007:30;13073:34;13068:2;13053:18;;13046:62;-1:-1:-1;;;13139:2:1;13124:18;;13117:35;13184:3;13169:19;;12793:401::o;13199:399::-;13401:2;13383:21;;;13440:2;13420:18;;;13413:30;13479:34;13474:2;13459:18;;13452:62;-1:-1:-1;;;13545:2:1;13530:18;;13523:33;13588:3;13573:19;;13199:399::o;14312:128::-;14379:9;;;14400:11;;;14397:37;;;14414:18;;:::i;14852:217::-;14892:1;14918;14908:132;;14962:10;14957:3;14953:20;14950:1;14943:31;14997:4;14994:1;14987:15;15025:4;15022:1;15015:15;14908:132;-1:-1:-1;15054:9:1;;14852:217::o;15074:793::-;15359:13;;-1:-1:-1;;;;;15355:22:1;;;15337:41;;15438:4;15426:17;;;15420:24;15416:33;;15394:20;;;15387:63;15510:4;15498:17;;;15492:24;15518:8;15488:39;15466:20;;;15459:69;15588:4;15576:17;;;15570:24;15566:33;;15544:20;;;15537:63;15656:4;15644:17;;;15638:24;15616:20;;;15609:54;15317:3;15707:17;;;15701:24;15679:20;;;15672:54;15782:4;15770:17;;;15764:24;15742:20;;;15735:54;15849:4;15837:17;;;15831:24;15827:33;15805:20;;;15798:63;;;;15286:3;15271:19;;15074:793::o;15872:488::-;16103:25;;;-1:-1:-1;;;;;16164:32:1;;;;16159:2;16144:18;;16137:60;-1:-1:-1;;;;;16286:15:1;;;16281:2;16266:18;;16259:43;16338:15;16333:2;16318:18;;16311:43;16090:3;16075:19;;15872:488::o;16365:245::-;16444:6;16452;16505:2;16493:9;16484:7;16480:23;16476:32;16473:52;;;16521:1;16518;16511:12;16473:52;-1:-1:-1;;16544:16:1;;16600:2;16585:18;;;16579:25;16544:16;;16579:25;;-1:-1:-1;16365:245:1:o;16615:287::-;16744:3;16782:6;16776:13;16798:66;16857:6;16852:3;16845:4;16837:6;16833:17;16798:66;:::i;:::-;16880:16;;;;;16615:287;-1:-1:-1;;16615:287:1:o

Swarm Source

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