ETH Price: $3,309.97 (-2.99%)
Gas: 16 Gwei

Token

Shikage (SHKG)
 

Overview

Max Total Supply

1,000,000,000 SHKG

Holders

703 (0.00%)

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

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:
Shikage

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-09
*/

/*
Shikage SHKG

Telegram: https://t.me/shikageofficial
Website: https://shikage.space/
Facebook: https://www.facebook.com/Shikage.ETH/
Instagram: https://www.instagram.com/shikage_token/
Twitter: https://twitter.com/ShikageEth
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.11;


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

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

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

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

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

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

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

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

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

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

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

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

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

interface IAntiSnipe {
  function setTokenOwner(address owner) external;

  function onPreTransferCheck(
    address from,
    address to,
    uint256 amount
  ) external returns (bool checked);
}

contract Shikage is IERC20, Ownable {
    using Address for address;
    
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "Shikage";
    string constant _symbol = "SHKG";
    uint8 constant _decimals = 9;

    uint256 constant _totalSupply = 1_000_000_000 * (10 ** _decimals);
    uint256 public _maxTxAmount = (_totalSupply * 1) / 200;
    uint256 public _maxWalletSize = (_totalSupply * 1) / 100;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => uint256) lastBuy;

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;

    uint256 liquidityFee = 20;
    uint256 marketingFee = 50;
    uint256 devFee = 30;
    uint256 totalFee = 100;
    uint256 sellBias = 0;
    uint256 sellPercent = 250;
    uint256 sellPeriod = 72 hours;
    uint256 feeDenominator = 1000;

    address public constant liquidityReceiver = 0x51FE1EDbC149556eF2867115E58616428aA2C19A;
    address payable public constant marketingReceiver = payable(0x51FE1EDbC149556eF2867115E58616428aA2C19A);
    address payable public constant devReceiver = payable(0x592Ab8ED942c7Eb84cB27616f1Dcb57669DFD901);

    uint256 targetLiquidity = 40;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public immutable router;
    
    address constant routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    mapping (address => bool) liquidityPools;
    mapping (address => bool) liquidityProviders;

    address public immutable pair;

    uint256 public launchedAt;
    uint256 public launchedTime;
    bool public pauseDisabled = false;
    
    IAntiSnipe public antisnipe;
    bool public protectionEnabled = true;
    bool public protectionDisabled = false;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 400;
    uint256 public swapMinimum = _totalSupply / 10000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () {
        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        liquidityPools[pair] = true;
        _allowances[owner()][routerAddress] = type(uint256).max;
        _allowances[address(this)][routerAddress] = type(uint256).max;
        
        isFeeExempt[owner()] = true;
        liquidityProviders[msg.sender] = true;

        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[routerAddress] = true;

        _balances[owner()] = _totalSupply;
        emit Transfer(address(0), owner(), _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external pure override returns (uint256) { return _totalSupply; }
    function decimals() external pure returns (uint8) { return _decimals; }
    function symbol() external pure returns (string memory) { return _symbol; }
    function name() external pure returns (string memory) { return _name; }
    function getOwner() external view returns (address) { return owner(); }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(msg.sender, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    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);
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function setProtection(bool _protect) external onlyOwner {
        if (_protect)
            require(!protectionDisabled);
        protectionEnabled = _protect;
    }
    
    function setProtection(address _protection, bool _call) external onlyOwner {
        if (_protection != address(antisnipe)){
            require(!protectionDisabled);
            antisnipe = IAntiSnipe(_protection);
        }
        if (_call)
            antisnipe.setTokenOwner(msg.sender);
    }
    
    function disableProtection() external onlyOwner {
        protectionDisabled = true;
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(_balances[sender] >= amount, "Insufficient balance");
        require(amount > 0, "Zero amount transferred");

        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        checkTxLimit(sender, amount);
        
        if (!liquidityPools[recipient] && recipient != DEAD) {
            if (!isTxLimitExempt[recipient]) checkWalletLimit(recipient, amount);
        }

        if(!launched()){ require(liquidityProviders[sender] || liquidityProviders[recipient], "Contract not launched yet."); }

        _balances[sender] -= amount;

        uint256 amountReceived = shouldTakeFee(sender) && shouldTakeFee(recipient) ? takeFee(sender, recipient, amount) : amount;
        
        if(shouldSwapBack(recipient)){ if (amount > 0) swapBack(amount); }
        
        _balances[recipient] += amountReceived;
            
        if(launched() && protectionEnabled)
            antisnipe.onPreTransferCheck(sender, recipient, amount);

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }
    
    function checkWalletLimit(address recipient, uint256 amount) internal view {
        uint256 walletLimit = _maxWalletSize;
        require(_balances[recipient] + amount <= walletLimit, "Transfer amount exceeds the bag size.");
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }
    
    function setLiquidityProvider(address _provider) external onlyOwner {
        isFeeExempt[_provider] = true;
        liquidityProviders[_provider] = true;
        isTxLimitExempt[_provider] = true;
    }

    function getTotalFee(bool selling, bool inHighPeriod) public view returns (uint256) {
        if(launchedAt + 1 > block.number){ return feeDenominator - 1; }
        if (selling) return inHighPeriod ? (totalFee * sellPercent) / 100 : totalFee + sellBias;
        return inHighPeriod ? (totalFee * sellPercent) / 100 : totalFee - sellBias;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = (amount * getTotalFee(liquidityPools[recipient], !liquidityPools[sender] && lastBuy[sender] + sellPeriod > block.timestamp)) / feeDenominator;
        
        if (liquidityPools[sender] && lastBuy[recipient] == 0)
            lastBuy[recipient] = block.timestamp;

        _balances[address(this)] += feeAmount;
        emit Transfer(sender, address(this), feeAmount);

        return amount - feeAmount;
    }

    function shouldSwapBack(address recipient) internal view returns (bool) {
        return !liquidityPools[msg.sender]
        && !isFeeExempt[msg.sender]
        && !inSwap
        && swapEnabled
        && liquidityPools[recipient]
        && _balances[address(this)] >= swapMinimum &&
        totalFee > 0;
    }

    function swapBack(uint256 amount) internal swapping {
        uint256 amountToSwap = amount < swapThreshold ? amount : swapThreshold;
        if (_balances[address(this)] < amountToSwap) amountToSwap = _balances[address(this)];
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = ((amountToSwap * dynamicLiquidityFee) / totalFee) / 2;
        amountToSwap -= amountToLiquify;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 contractBalance = address(this).balance;
        uint256 totalETHFee = totalFee - dynamicLiquidityFee / 2;

        uint256 amountLiquidity = (contractBalance * dynamicLiquidityFee) / totalETHFee / 2;
        uint256 amountMarketing = (contractBalance * marketingFee) / totalETHFee;
        uint256 amountDev = contractBalance - (amountLiquidity + amountMarketing);

        if(amountToLiquify > 0) {
            router.addLiquidityETH{value: amountLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                liquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountLiquidity, amountToLiquify);
        }
        
        if (amountMarketing > 0)
            marketingReceiver.transfer(amountMarketing);
            
        if (amountDev > 0)
            devReceiver.transfer(amountDev);

    }

    function setSellPeriod(uint256 _sellPercentIncrease, uint256 _period) external onlyOwner {
        require((totalFee * _sellPercentIncrease) / 100 <= 400, "Sell tax too high");
        require(_period <= 7 days, "Sell period too long");
        sellPercent = _sellPercentIncrease;
        sellPeriod = _period;
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() external onlyOwner {
        require (launchedAt == 0);
        launchedAt = block.number;
        launchedTime = block.timestamp;
    }

    function setTxLimit(uint256 numerator, uint256 divisor) external onlyOwner {
        require(numerator > 0 && divisor > 0 && (numerator * 1000) / divisor >= 5);
        _maxTxAmount = (_totalSupply * numerator) / divisor;
    }
    
    function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner() {
        require(divisor > 0 && divisor <= 10000);
        _maxWalletSize = (_totalSupply * numerator) / divisor;
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }

    function setFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _devFee, uint256 _sellBias, uint256 _feeDenominator) external onlyOwner {
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
        devFee = _devFee;
        sellBias = _sellBias;
        totalFee = _liquidityFee + _marketingFee + _devFee;
        feeDenominator = _feeDenominator;
        require(totalFee <= feeDenominator / 4);
        require(sellBias <= totalFee);
    }

    function setSwapBackSettings(bool _enabled, uint256 _denominator, uint256 _denominatorMin) external onlyOwner {
        require(_denominator > 0 && _denominatorMin > 0);
        swapEnabled = _enabled;
        swapMinimum = _totalSupply / _denominatorMin;
        swapThreshold = _totalSupply / _denominator;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply - (balanceOf(DEAD) + balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return (accuracy * balanceOf(pair)) / getCirculatingSupply();
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

    function addLiquidityPool(address _pool, bool _enabled) external onlyOwner {
        liquidityPools[_pool] = _enabled;
    }

	function airdrop(address[] calldata _addresses, uint256[] calldata _amount) external onlyOwner
    {
        require(_addresses.length == _amount.length);
        bool previousSwap = swapEnabled;
        swapEnabled = false;
        //This function may run out of gas intentionally to prevent partial airdrops
        for (uint256 i = 0; i < _addresses.length; i++) {
            require(!liquidityPools[_addresses[i]]);
            _transferFrom(msg.sender, _addresses[i], _amount[i] * (10 ** _decimals));
        }
        swapEnabled = previousSwap;
    }

    event AutoLiquify(uint256 amount, uint256 amountToken);
    //C U ON THE MOON
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"AutoLiquify","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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"addLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antisnipe","outputs":[{"internalType":"contract IAntiSnipe","name":"","type":"address"}],"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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":[],"name":"devReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"},{"internalType":"bool","name":"inHighPeriod","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_sellBias","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_provider","type":"address"}],"name":"setLiquidityProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_protect","type":"bool"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_protection","type":"address"},{"internalType":"bool","name":"_call","type":"bool"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellPercentIncrease","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"setSellPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_denominator","type":"uint256"},{"internalType":"uint256","name":"_denominatorMin","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMinimum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405260c8620000146009600a62000646565b6200002490633b9aca006200065e565b620000319060016200065e565b6200003d919062000680565b6001556064620000506009600a62000646565b6200006090633b9aca006200065e565b6200006d9060016200065e565b62000079919062000680565b600255601460085560326009908155601e600a9081556064600b8190556000600c5560fa600d556203f480600e556103e8600f5560286010556011556016805460ff62ffffff60a81b0119166201000160a81b17905561019091620000de9162000646565b620000ee90633b9aca006200065e565b620000fa919062000680565b6017556127106200010e6009600a62000646565b6200011e90633b9aca006200065e565b6200012a919062000680565b6018553480156200013a57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d60808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f89190620006a3565b6001600160a01b031663c9c653966080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000247573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026d9190620006a3565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620002ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e09190620006a3565b6001600160a01b031660a08190526000908152601260205260408120805460ff1916600117905560001990600490620003216000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d80835290845282822094909455308152600483528181209381529290915281206000199055600190600690620003926000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055338152601383528181208054851660019081179091553082526007938490529181208054909416821790935591620003fe6000546001600160a01b031690565b6001600160a01b031681526020808201929092526040016000908120805493151560ff19948516179055737a250d5630b4cf539739df2c5dacb4c659f2488d9052600790527ffd21a1ac9a14dff647460ce8ad2ccecb794a59a4cfbb8678b1f9900a6a99551f805490911660011790556200047c6009600a62000646565b6200048c90633b9aca006200065e565b60036000620004a36000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620004d06000546001600160a01b031690565b6001600160a01b031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200050a6009600a62000646565b6200051a90633b9aca006200065e565b60405190815260200160405180910390a3620006ce565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005885781600019048211156200056c576200056c62000531565b808516156200057a57918102915b93841c93908002906200054c565b509250929050565b600082620005a15750600162000640565b81620005b05750600062000640565b8160018114620005c95760028114620005d457620005f4565b600191505062000640565b60ff841115620005e857620005e862000531565b50506001821b62000640565b5060208310610133831016604e8410600b841016171562000619575081810a62000640565b62000625838362000547565b80600019048211156200063c576200063c62000531565b0290505b92915050565b60006200065760ff84168362000590565b9392505050565b60008160001904831182151516156200067b576200067b62000531565b500290565b6000826200069e57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620006b657600080fd5b81516001600160a01b03811681146200065757600080fd5b60805160a0516129186200071060003960008181610771015261138c01526000818161095201528181611fd00152818161208801526121c401526129186000f3fe6080604052600436106102e85760003560e01c806370a0823111610190578063abe57e70116100dc578063d5d035f511610095578063f2fde38b1161006f578063f2fde38b146108ea578063f84ba65d1461090a578063f8821a621461092a578063f887ea401461094057600080fd5b8063d5d035f514610864578063dd62ed3e14610884578063e624c4bc146108ca57600080fd5b8063abe57e70146107b3578063b9576244146107d3578063bf56b371146107ed578063c5363caa14610803578063d088935814610824578063d51ed1c81461084457600080fd5b80638da5cb5b11610149578063a457c2d711610123578063a457c2d71461073f578063a5949bcf14610472578063a8aa1b311461075f578063a9059cbb1461079357600080fd5b80638da5cb5b146106de5780638f9a55c0146106fc57806395d89b411461071257600080fd5b806370a0823114610637578063715018a61461066d5780637516baec146106825780637d1db4a5146106a3578063882cfb3f146106b9578063893d20e8146106de57600080fd5b80632b112e491161024f5780635804f1e411610208578063659b1c7c116101e2578063659b1c7c146105ae57806367243482146105ce5780636ddd1713146105ee5780636f9a880e1461060f57600080fd5b80635804f1e4146105585780636419b6f91461056e578063658d4b7f1461058e57600080fd5b80632b112e49146104b2578063313ce567146104c757806339509351146104e3578063421dd7c714610503578063492a937b14610518578063571ac8b01461053857600080fd5b80631161ae39116102a15780631161ae39146103dd57806318160ddd146103fd5780631faf723b14610412578063201e79911461043257806323b872dd14610452578063264d26dd1461047257600080fd5b806301339c21146102f45780630445b6671461030b57806304a66b481461033457806306fdde0314610354578063095ea7b31461038d5780630f4f7bfe146103bd57600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b50610309610974565b005b34801561031757600080fd5b5061032160175481565b6040519081526020015b60405180910390f35b34801561034057600080fd5b5061030961034f366004612320565b6109be565b34801561036057600080fd5b506040805180820190915260078152665368696b61676560c81b60208201525b60405161032b919061235b565b34801561039957600080fd5b506103ad6103a83660046123c8565b610a4a565b604051901515815260200161032b565b3480156103c957600080fd5b506103096103d83660046123f4565b610ab7565b3480156103e957600080fd5b506103ad6103f83660046123f4565b610b95565b34801561040957600080fd5b50610321610ba9565b34801561041e57600080fd5b5061030961042d3660046123f4565b610bca565b34801561043e57600080fd5b5061030961044d3660046123f4565b610c67565b34801561045e57600080fd5b506103ad61046d366004612416565b610c9c565b34801561047e57600080fd5b5061049a7351fe1edbc149556ef2867115e58616428aa2c19a81565b6040516001600160a01b03909116815260200161032b565b3480156104be57600080fd5b50610321610d31565b3480156104d357600080fd5b506040516009815260200161032b565b3480156104ef57600080fd5b506103ad6104fe3660046123c8565b610db1565b34801561050f57600080fd5b50610309610df6565b34801561052457600080fd5b50610309610533366004612465565b610e35565b34801561054457600080fd5b506103ad61055336600461249e565b610e8a565b34801561056457600080fd5b5061032160155481565b34801561057a57600080fd5b506103216105893660046124bb565b610e98565b34801561059a57600080fd5b506103096105a9366004612465565b610f38565b3480156105ba57600080fd5b506103096105c93660046124d9565b610f8d565b3480156105da57600080fd5b506103096105e9366004612542565b610ff2565b3480156105fa57600080fd5b506016546103ad90600160b81b900460ff1681565b34801561061b57600080fd5b5061049a73592ab8ed942c7eb84cb27616f1dcb57669dfd90181565b34801561064357600080fd5b5061032161065236600461249e565b6001600160a01b031660009081526003602052604090205490565b34801561067957600080fd5b50610309611133565b34801561068e57600080fd5b506016546103ad90600160a81b900460ff1681565b3480156106af57600080fd5b5061032160015481565b3480156106c557600080fd5b5060165461049a9061010090046001600160a01b031681565b3480156106ea57600080fd5b506000546001600160a01b031661049a565b34801561070857600080fd5b5061032160025481565b34801561071e57600080fd5b5060408051808201909152600481526353484b4760e01b6020820152610380565b34801561074b57600080fd5b506103ad61075a3660046123c8565b6111a7565b34801561076b57600080fd5b5061049a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561079f57600080fd5b506103ad6107ae3660046123c8565b611240565b3480156107bf57600080fd5b506103096107ce3660046123f4565b61124d565b3480156107df57600080fd5b506016546103ad9060ff1681565b3480156107f957600080fd5b5061032160145481565b34801561080f57600080fd5b506016546103ad90600160b01b900460ff1681565b34801561083057600080fd5b5061030961083f3660046125ae565b6112c9565b34801561085057600080fd5b5061032161085f3660046125e3565b611378565b34801561087057600080fd5b5061030961087f366004612465565b6113cf565b34801561089057600080fd5b5061032161089f3660046125fc565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156108d657600080fd5b506103096108e536600461249e565b6114b7565b3480156108f657600080fd5b5061030961090536600461249e565b61152c565b34801561091657600080fd5b50610309610925366004612465565b611616565b34801561093657600080fd5b5061032160185481565b34801561094c57600080fd5b5061049a7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031633146109a75760405162461bcd60e51b815260040161099e9061262a565b60405180910390fd5b601454156109b457600080fd5b4360145542601555565b6000546001600160a01b031633146109e85760405162461bcd60e51b815260040161099e9061262a565b60088590556009849055600a839055600c82905582610a078587612675565b610a119190612675565b600b55600f819055610a2460048261268d565b600b541115610a3257600080fd5b600b54600c541115610a4357600080fd5b5050505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610aa59086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610ae15760405162461bcd60e51b815260040161099e9061262a565b610190606483600b54610af491906126af565b610afe919061268d565b1115610b405760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840e8c2f040e8dede40d0d2ced607b1b604482015260640161099e565b62093a80811115610b8a5760405162461bcd60e51b815260206004820152601460248201527353656c6c20706572696f6420746f6f206c6f6e6760601b604482015260640161099e565b600d91909155600e55565b600082610ba183611378565b119392505050565b6000610bb76009600a6127b2565b610bc590633b9aca006126af565b905090565b6000546001600160a01b03163314610bf45760405162461bcd60e51b815260040161099e9061262a565b600082118015610c045750600081115b8015610c275750600581610c1a846103e86126af565b610c24919061268d565b10155b610c3057600080fd5b8082610c3e6009600a6127b2565b610c4c90633b9aca006126af565b610c5691906126af565b610c60919061268d565b6001555050565b6000546001600160a01b03163314610c915760405162461bcd60e51b815260040161099e9061262a565b601091909155601155565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610d1c576001600160a01b0384166000908152600460209081526040808320338452909152902054610cf79083906127c1565b6001600160a01b03851660009081526004602090815260408083203384529091529020555b610d2784848461166b565b90505b9392505050565b60036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5461dead60009081527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c549091610d8d91612675565b610d996009600a6127b2565b610da790633b9aca006126af565b610bc591906127c1565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610ded918590610de8908690612675565b611a04565b50600192915050565b6000546001600160a01b03163314610e205760405162461bcd60e51b815260040161099e9061262a565b6016805460ff60b01b1916600160b01b179055565b6000546001600160a01b03163314610e5f5760405162461bcd60e51b815260040161099e9061262a565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000610ab182600019610a4a565b6000436014546001610eaa9190612675565b1115610ec6576001600f54610ebf91906127c1565b9050610ab1565b8215610f025781610ee657600c54600b54610ee19190612675565b610ebf565b6064600d54600b54610ef891906126af565b610ebf919061268d565b81610f1c57600c54600b54610f1791906127c1565b610d2a565b6064600d54600b54610f2e91906126af565b610d2a919061268d565b6000546001600160a01b03163314610f625760405162461bcd60e51b815260040161099e9061262a565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610fb75760405162461bcd60e51b815260040161099e9061262a565b8015610fd457601654600160b01b900460ff1615610fd457600080fd5b60168054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b0316331461101c5760405162461bcd60e51b815260040161099e9061262a565b82811461102857600080fd5b6016805460ff60b81b198116909155600160b81b900460ff1660005b848110156111105760126000878784818110611062576110626127d8565b9050602002016020810190611077919061249e565b6001600160a01b0316815260208101919091526040016000205460ff161561109e57600080fd5b6110fd338787848181106110b4576110b46127d8565b90506020020160208101906110c9919061249e565b6110d56009600a6127b2565b8787868181106110e7576110e76127d8565b905060200201356110f891906126af565b61166b565b5080611108816127ee565b915050611044565b5060168054911515600160b81b0260ff60b81b1990921691909117905550505050565b6000546001600160a01b0316331461115d5760405162461bcd60e51b815260040161099e9061262a565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b3360009081526004602090815260408083206001600160a01b0386168452909152812054828110156112295760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161099e565b6112363385858403611a04565b5060019392505050565b6000610d2a33848461166b565b6000546001600160a01b031633146112775760405162461bcd60e51b815260040161099e9061262a565b60008111801561128957506127108111155b61129257600080fd5b80826112a06009600a6127b2565b6112ae90633b9aca006126af565b6112b891906126af565b6112c2919061268d565b6002555050565b6000546001600160a01b031633146112f35760405162461bcd60e51b815260040161099e9061262a565b6000821180156113035750600081115b61130c57600080fd5b6016805460ff60b81b1916600160b81b85151502179055806113306009600a6127b2565b61133e90633b9aca006126af565b611348919061268d565b601855816113586009600a6127b2565b61136690633b9aca006126af565b611370919061268d565b601755505050565b6000611382610d31565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166000908152600360205260409020546113c590846126af565b610ab1919061268d565b6000546001600160a01b031633146113f95760405162461bcd60e51b815260040161099e9061262a565b6016546001600160a01b03838116610100909204161461144b57601654600160b01b900460ff161561142a57600080fd5b60168054610100600160a81b0319166101006001600160a01b038516021790555b80156114b3576016546040516318e02bd960e01b81523360048201526101009091046001600160a01b0316906318e02bd990602401600060405180830381600087803b15801561149a57600080fd5b505af11580156114ae573d6000803e3d6000fd5b505050505b5050565b6000546001600160a01b031633146114e15760405162461bcd60e51b815260040161099e9061262a565b6001600160a01b031660009081526006602090815260408083208054600160ff1991821681179092556013845282852080548216831790556007909352922080549091169091179055565b6000546001600160a01b031633146115565760405162461bcd60e51b815260040161099e9061262a565b6001600160a01b0381166115bb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161099e565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116405760405162461bcd60e51b815260040161099e9061262a565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b0383166000908152600360205260408120548211156116ca5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161099e565b6000821161171a5760405162461bcd60e51b815260206004820152601760248201527f5a65726f20616d6f756e74207472616e73666572726564000000000000000000604482015260640161099e565b60195460ff161561173757611730848484611b28565b9050610d2a565b6117418483611bdd565b6001600160a01b03831660009081526012602052604090205460ff1615801561177557506001600160a01b03831661dead14155b156117a4576001600160a01b03831660009081526007602052604090205460ff166117a4576117a48383611c46565b601454611836576001600160a01b03841660009081526013602052604090205460ff16806117ea57506001600160a01b03831660009081526013602052604090205460ff165b6118365760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e000000000000604482015260640161099e565b6001600160a01b0384166000908152600360205260408120805484929061185e9084906127c1565b90915550506001600160a01b03841660009081526006602052604081205460ff161580156118a557506001600160a01b03841660009081526006602052604090205460ff16155b6118af57826118ba565b6118ba858585611cd0565b90506118c584611e29565b156118d95782156118d9576118d983611ed1565b6001600160a01b03841660009081526003602052604081208054839290611901908490612675565b9091555050601454151580156119205750601654600160a81b900460ff165b156119ac5760165460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052610100909204909116906348760858906064016020604051808303816000875af1158015611986573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119aa9190612809565b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119f191815260200190565b60405180910390a3506001949350505050565b6001600160a01b038316611a665760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161099e565b6001600160a01b038216611ac75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161099e565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316600090815260036020526040812080548391908390611b529084906127c1565b90915550506001600160a01b03831660009081526003602052604081208054849290611b7f908490612675565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bcb91815260200190565b60405180910390a35060019392505050565b60015481111580611c0657506001600160a01b03821660009081526007602052604090205460ff165b6114b35760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161099e565b6002546001600160a01b0383166000908152600360205260409020548190611c6f908490612675565b1115611ccb5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b606482015260840161099e565b505050565b600f546001600160a01b03808416600090815260126020526040808220549287168252812054909283929091611d3c9160ff90811691161580156105895750600e546001600160a01b0389166000908152600560205260409020544291611d3691612675565b11610e98565b611d4690856126af565b611d50919061268d565b6001600160a01b03861660009081526012602052604090205490915060ff168015611d9157506001600160a01b038416600090815260056020526040902054155b15611db2576001600160a01b03841660009081526005602052604090204290555b3060009081526003602052604081208054839290611dd1908490612675565b909155505060405181815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3611e2081846127c1565b95945050505050565b3360009081526012602052604081205460ff16158015611e5957503360009081526006602052604090205460ff16155b8015611e68575060195460ff16155b8015611e7d5750601654600160b81b900460ff165b8015611ea157506001600160a01b03821660009081526012602052604090205460ff165b8015611ebe57506018543060009081526003602052604090205410155b8015610ab157506000600b541192915050565b6019805460ff191660011790556017546000908210611ef257601754611ef4565b815b30600090815260036020526040902054909150811115611f205750306000908152600360205260409020545b6000611f30601054601154610b95565b611f3c57600854611f3f565b60005b905060006002600b548385611f5491906126af565b611f5e919061268d565b611f68919061268d565b9050611f7481846127c1565b60408051600280825260608201835292955060009290916020830190803683370190505090503081600081518110611fae57611fae6127d8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561202c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120509190612826565b81600181518110612063576120636127d8565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac947906120c8908790600090869030904290600401612843565b600060405180830381600087803b1580156120e257600080fd5b505af11580156120f6573d6000803e3d6000fd5b504792506000915061210b905060028661268d565b600b5461211891906127c1565b9050600060028261212988866126af565b612133919061268d565b61213d919061268d565b90506000826009548561215091906126af565b61215a919061268d565b905060006121688284612675565b61217290866127c1565b905086156122785760405163f305d71960e01b81523060048201526024810188905260006044820181905260648201527351fe1edbc149556ef2867115e58616428aa2c19a60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990859060c40160606040518083038185885af1158015612216573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061223b91906128b4565b505060408051858152602081018a90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b81156122c1576040517351fe1edbc149556ef2867115e58616428aa2c19a9083156108fc029084906000818181858888f193505050501580156122bf573d6000803e3d6000fd5b505b801561230a5760405173592ab8ed942c7eb84cb27616f1dcb57669dfd9019082156108fc029083906000818181858888f19350505050158015612308573d6000803e3d6000fd5b505b50506019805460ff191690555050505050505050565b600080600080600060a0868803121561233857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b818110156123885785810183015185820160400152820161236c565b8181111561239a576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146123c557600080fd5b50565b600080604083850312156123db57600080fd5b82356123e6816123b0565b946020939093013593505050565b6000806040838503121561240757600080fd5b50508035926020909101359150565b60008060006060848603121561242b57600080fd5b8335612436816123b0565b92506020840135612446816123b0565b929592945050506040919091013590565b80151581146123c557600080fd5b6000806040838503121561247857600080fd5b8235612483816123b0565b9150602083013561249381612457565b809150509250929050565b6000602082840312156124b057600080fd5b8135610d2a816123b0565b600080604083850312156124ce57600080fd5b823561248381612457565b6000602082840312156124eb57600080fd5b8135610d2a81612457565b60008083601f84011261250857600080fd5b50813567ffffffffffffffff81111561252057600080fd5b6020830191508360208260051b850101111561253b57600080fd5b9250929050565b6000806000806040858703121561255857600080fd5b843567ffffffffffffffff8082111561257057600080fd5b61257c888389016124f6565b9096509450602087013591508082111561259557600080fd5b506125a2878288016124f6565b95989497509550505050565b6000806000606084860312156125c357600080fd5b83356125ce81612457565b95602085013595506040909401359392505050565b6000602082840312156125f557600080fd5b5035919050565b6000806040838503121561260f57600080fd5b823561261a816123b0565b91506020830135612493816123b0565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156126885761268861265f565b500190565b6000826126aa57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156126c9576126c961265f565b500290565b600181815b808511156127095781600019048211156126ef576126ef61265f565b808516156126fc57918102915b93841c93908002906126d3565b509250929050565b60008261272057506001610ab1565b8161272d57506000610ab1565b8160018114612743576002811461274d57612769565b6001915050610ab1565b60ff84111561275e5761275e61265f565b50506001821b610ab1565b5060208310610133831016604e8410600b841016171561278c575081810a610ab1565b61279683836126ce565b80600019048211156127aa576127aa61265f565b029392505050565b6000610d2a60ff841683612711565b6000828210156127d3576127d361265f565b500390565b634e487b7160e01b600052603260045260246000fd5b60006000198214156128025761280261265f565b5060010190565b60006020828403121561281b57600080fd5b8151610d2a81612457565b60006020828403121561283857600080fd5b8151610d2a816123b0565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128935784516001600160a01b03168352938301939183019160010161286e565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156128c957600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f0e0c7301ced57b800e899ddf6cd968da182a8c48f78f3df02de80d9cd43d49264736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106102e85760003560e01c806370a0823111610190578063abe57e70116100dc578063d5d035f511610095578063f2fde38b1161006f578063f2fde38b146108ea578063f84ba65d1461090a578063f8821a621461092a578063f887ea401461094057600080fd5b8063d5d035f514610864578063dd62ed3e14610884578063e624c4bc146108ca57600080fd5b8063abe57e70146107b3578063b9576244146107d3578063bf56b371146107ed578063c5363caa14610803578063d088935814610824578063d51ed1c81461084457600080fd5b80638da5cb5b11610149578063a457c2d711610123578063a457c2d71461073f578063a5949bcf14610472578063a8aa1b311461075f578063a9059cbb1461079357600080fd5b80638da5cb5b146106de5780638f9a55c0146106fc57806395d89b411461071257600080fd5b806370a0823114610637578063715018a61461066d5780637516baec146106825780637d1db4a5146106a3578063882cfb3f146106b9578063893d20e8146106de57600080fd5b80632b112e491161024f5780635804f1e411610208578063659b1c7c116101e2578063659b1c7c146105ae57806367243482146105ce5780636ddd1713146105ee5780636f9a880e1461060f57600080fd5b80635804f1e4146105585780636419b6f91461056e578063658d4b7f1461058e57600080fd5b80632b112e49146104b2578063313ce567146104c757806339509351146104e3578063421dd7c714610503578063492a937b14610518578063571ac8b01461053857600080fd5b80631161ae39116102a15780631161ae39146103dd57806318160ddd146103fd5780631faf723b14610412578063201e79911461043257806323b872dd14610452578063264d26dd1461047257600080fd5b806301339c21146102f45780630445b6671461030b57806304a66b481461033457806306fdde0314610354578063095ea7b31461038d5780630f4f7bfe146103bd57600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b50610309610974565b005b34801561031757600080fd5b5061032160175481565b6040519081526020015b60405180910390f35b34801561034057600080fd5b5061030961034f366004612320565b6109be565b34801561036057600080fd5b506040805180820190915260078152665368696b61676560c81b60208201525b60405161032b919061235b565b34801561039957600080fd5b506103ad6103a83660046123c8565b610a4a565b604051901515815260200161032b565b3480156103c957600080fd5b506103096103d83660046123f4565b610ab7565b3480156103e957600080fd5b506103ad6103f83660046123f4565b610b95565b34801561040957600080fd5b50610321610ba9565b34801561041e57600080fd5b5061030961042d3660046123f4565b610bca565b34801561043e57600080fd5b5061030961044d3660046123f4565b610c67565b34801561045e57600080fd5b506103ad61046d366004612416565b610c9c565b34801561047e57600080fd5b5061049a7351fe1edbc149556ef2867115e58616428aa2c19a81565b6040516001600160a01b03909116815260200161032b565b3480156104be57600080fd5b50610321610d31565b3480156104d357600080fd5b506040516009815260200161032b565b3480156104ef57600080fd5b506103ad6104fe3660046123c8565b610db1565b34801561050f57600080fd5b50610309610df6565b34801561052457600080fd5b50610309610533366004612465565b610e35565b34801561054457600080fd5b506103ad61055336600461249e565b610e8a565b34801561056457600080fd5b5061032160155481565b34801561057a57600080fd5b506103216105893660046124bb565b610e98565b34801561059a57600080fd5b506103096105a9366004612465565b610f38565b3480156105ba57600080fd5b506103096105c93660046124d9565b610f8d565b3480156105da57600080fd5b506103096105e9366004612542565b610ff2565b3480156105fa57600080fd5b506016546103ad90600160b81b900460ff1681565b34801561061b57600080fd5b5061049a73592ab8ed942c7eb84cb27616f1dcb57669dfd90181565b34801561064357600080fd5b5061032161065236600461249e565b6001600160a01b031660009081526003602052604090205490565b34801561067957600080fd5b50610309611133565b34801561068e57600080fd5b506016546103ad90600160a81b900460ff1681565b3480156106af57600080fd5b5061032160015481565b3480156106c557600080fd5b5060165461049a9061010090046001600160a01b031681565b3480156106ea57600080fd5b506000546001600160a01b031661049a565b34801561070857600080fd5b5061032160025481565b34801561071e57600080fd5b5060408051808201909152600481526353484b4760e01b6020820152610380565b34801561074b57600080fd5b506103ad61075a3660046123c8565b6111a7565b34801561076b57600080fd5b5061049a7f0000000000000000000000002df01770daa4f1aefdd6e140064c4a7f06f8d00181565b34801561079f57600080fd5b506103ad6107ae3660046123c8565b611240565b3480156107bf57600080fd5b506103096107ce3660046123f4565b61124d565b3480156107df57600080fd5b506016546103ad9060ff1681565b3480156107f957600080fd5b5061032160145481565b34801561080f57600080fd5b506016546103ad90600160b01b900460ff1681565b34801561083057600080fd5b5061030961083f3660046125ae565b6112c9565b34801561085057600080fd5b5061032161085f3660046125e3565b611378565b34801561087057600080fd5b5061030961087f366004612465565b6113cf565b34801561089057600080fd5b5061032161089f3660046125fc565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156108d657600080fd5b506103096108e536600461249e565b6114b7565b3480156108f657600080fd5b5061030961090536600461249e565b61152c565b34801561091657600080fd5b50610309610925366004612465565b611616565b34801561093657600080fd5b5061032160185481565b34801561094c57600080fd5b5061049a7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000546001600160a01b031633146109a75760405162461bcd60e51b815260040161099e9061262a565b60405180910390fd5b601454156109b457600080fd5b4360145542601555565b6000546001600160a01b031633146109e85760405162461bcd60e51b815260040161099e9061262a565b60088590556009849055600a839055600c82905582610a078587612675565b610a119190612675565b600b55600f819055610a2460048261268d565b600b541115610a3257600080fd5b600b54600c541115610a4357600080fd5b5050505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610aa59086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610ae15760405162461bcd60e51b815260040161099e9061262a565b610190606483600b54610af491906126af565b610afe919061268d565b1115610b405760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840e8c2f040e8dede40d0d2ced607b1b604482015260640161099e565b62093a80811115610b8a5760405162461bcd60e51b815260206004820152601460248201527353656c6c20706572696f6420746f6f206c6f6e6760601b604482015260640161099e565b600d91909155600e55565b600082610ba183611378565b119392505050565b6000610bb76009600a6127b2565b610bc590633b9aca006126af565b905090565b6000546001600160a01b03163314610bf45760405162461bcd60e51b815260040161099e9061262a565b600082118015610c045750600081115b8015610c275750600581610c1a846103e86126af565b610c24919061268d565b10155b610c3057600080fd5b8082610c3e6009600a6127b2565b610c4c90633b9aca006126af565b610c5691906126af565b610c60919061268d565b6001555050565b6000546001600160a01b03163314610c915760405162461bcd60e51b815260040161099e9061262a565b601091909155601155565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610d1c576001600160a01b0384166000908152600460209081526040808320338452909152902054610cf79083906127c1565b6001600160a01b03851660009081526004602090815260408083203384529091529020555b610d2784848461166b565b90505b9392505050565b60036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5461dead60009081527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c549091610d8d91612675565b610d996009600a6127b2565b610da790633b9aca006126af565b610bc591906127c1565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610ded918590610de8908690612675565b611a04565b50600192915050565b6000546001600160a01b03163314610e205760405162461bcd60e51b815260040161099e9061262a565b6016805460ff60b01b1916600160b01b179055565b6000546001600160a01b03163314610e5f5760405162461bcd60e51b815260040161099e9061262a565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000610ab182600019610a4a565b6000436014546001610eaa9190612675565b1115610ec6576001600f54610ebf91906127c1565b9050610ab1565b8215610f025781610ee657600c54600b54610ee19190612675565b610ebf565b6064600d54600b54610ef891906126af565b610ebf919061268d565b81610f1c57600c54600b54610f1791906127c1565b610d2a565b6064600d54600b54610f2e91906126af565b610d2a919061268d565b6000546001600160a01b03163314610f625760405162461bcd60e51b815260040161099e9061262a565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610fb75760405162461bcd60e51b815260040161099e9061262a565b8015610fd457601654600160b01b900460ff1615610fd457600080fd5b60168054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b0316331461101c5760405162461bcd60e51b815260040161099e9061262a565b82811461102857600080fd5b6016805460ff60b81b198116909155600160b81b900460ff1660005b848110156111105760126000878784818110611062576110626127d8565b9050602002016020810190611077919061249e565b6001600160a01b0316815260208101919091526040016000205460ff161561109e57600080fd5b6110fd338787848181106110b4576110b46127d8565b90506020020160208101906110c9919061249e565b6110d56009600a6127b2565b8787868181106110e7576110e76127d8565b905060200201356110f891906126af565b61166b565b5080611108816127ee565b915050611044565b5060168054911515600160b81b0260ff60b81b1990921691909117905550505050565b6000546001600160a01b0316331461115d5760405162461bcd60e51b815260040161099e9061262a565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b3360009081526004602090815260408083206001600160a01b0386168452909152812054828110156112295760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161099e565b6112363385858403611a04565b5060019392505050565b6000610d2a33848461166b565b6000546001600160a01b031633146112775760405162461bcd60e51b815260040161099e9061262a565b60008111801561128957506127108111155b61129257600080fd5b80826112a06009600a6127b2565b6112ae90633b9aca006126af565b6112b891906126af565b6112c2919061268d565b6002555050565b6000546001600160a01b031633146112f35760405162461bcd60e51b815260040161099e9061262a565b6000821180156113035750600081115b61130c57600080fd5b6016805460ff60b81b1916600160b81b85151502179055806113306009600a6127b2565b61133e90633b9aca006126af565b611348919061268d565b601855816113586009600a6127b2565b61136690633b9aca006126af565b611370919061268d565b601755505050565b6000611382610d31565b6001600160a01b037f0000000000000000000000002df01770daa4f1aefdd6e140064c4a7f06f8d001166000908152600360205260409020546113c590846126af565b610ab1919061268d565b6000546001600160a01b031633146113f95760405162461bcd60e51b815260040161099e9061262a565b6016546001600160a01b03838116610100909204161461144b57601654600160b01b900460ff161561142a57600080fd5b60168054610100600160a81b0319166101006001600160a01b038516021790555b80156114b3576016546040516318e02bd960e01b81523360048201526101009091046001600160a01b0316906318e02bd990602401600060405180830381600087803b15801561149a57600080fd5b505af11580156114ae573d6000803e3d6000fd5b505050505b5050565b6000546001600160a01b031633146114e15760405162461bcd60e51b815260040161099e9061262a565b6001600160a01b031660009081526006602090815260408083208054600160ff1991821681179092556013845282852080548216831790556007909352922080549091169091179055565b6000546001600160a01b031633146115565760405162461bcd60e51b815260040161099e9061262a565b6001600160a01b0381166115bb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161099e565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116405760405162461bcd60e51b815260040161099e9061262a565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b0383166000908152600360205260408120548211156116ca5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161099e565b6000821161171a5760405162461bcd60e51b815260206004820152601760248201527f5a65726f20616d6f756e74207472616e73666572726564000000000000000000604482015260640161099e565b60195460ff161561173757611730848484611b28565b9050610d2a565b6117418483611bdd565b6001600160a01b03831660009081526012602052604090205460ff1615801561177557506001600160a01b03831661dead14155b156117a4576001600160a01b03831660009081526007602052604090205460ff166117a4576117a48383611c46565b601454611836576001600160a01b03841660009081526013602052604090205460ff16806117ea57506001600160a01b03831660009081526013602052604090205460ff165b6118365760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e000000000000604482015260640161099e565b6001600160a01b0384166000908152600360205260408120805484929061185e9084906127c1565b90915550506001600160a01b03841660009081526006602052604081205460ff161580156118a557506001600160a01b03841660009081526006602052604090205460ff16155b6118af57826118ba565b6118ba858585611cd0565b90506118c584611e29565b156118d95782156118d9576118d983611ed1565b6001600160a01b03841660009081526003602052604081208054839290611901908490612675565b9091555050601454151580156119205750601654600160a81b900460ff165b156119ac5760165460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052610100909204909116906348760858906064016020604051808303816000875af1158015611986573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119aa9190612809565b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119f191815260200190565b60405180910390a3506001949350505050565b6001600160a01b038316611a665760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161099e565b6001600160a01b038216611ac75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161099e565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316600090815260036020526040812080548391908390611b529084906127c1565b90915550506001600160a01b03831660009081526003602052604081208054849290611b7f908490612675565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bcb91815260200190565b60405180910390a35060019392505050565b60015481111580611c0657506001600160a01b03821660009081526007602052604090205460ff165b6114b35760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161099e565b6002546001600160a01b0383166000908152600360205260409020548190611c6f908490612675565b1115611ccb5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b606482015260840161099e565b505050565b600f546001600160a01b03808416600090815260126020526040808220549287168252812054909283929091611d3c9160ff90811691161580156105895750600e546001600160a01b0389166000908152600560205260409020544291611d3691612675565b11610e98565b611d4690856126af565b611d50919061268d565b6001600160a01b03861660009081526012602052604090205490915060ff168015611d9157506001600160a01b038416600090815260056020526040902054155b15611db2576001600160a01b03841660009081526005602052604090204290555b3060009081526003602052604081208054839290611dd1908490612675565b909155505060405181815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3611e2081846127c1565b95945050505050565b3360009081526012602052604081205460ff16158015611e5957503360009081526006602052604090205460ff16155b8015611e68575060195460ff16155b8015611e7d5750601654600160b81b900460ff165b8015611ea157506001600160a01b03821660009081526012602052604090205460ff165b8015611ebe57506018543060009081526003602052604090205410155b8015610ab157506000600b541192915050565b6019805460ff191660011790556017546000908210611ef257601754611ef4565b815b30600090815260036020526040902054909150811115611f205750306000908152600360205260409020545b6000611f30601054601154610b95565b611f3c57600854611f3f565b60005b905060006002600b548385611f5491906126af565b611f5e919061268d565b611f68919061268d565b9050611f7481846127c1565b60408051600280825260608201835292955060009290916020830190803683370190505090503081600081518110611fae57611fae6127d8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561202c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120509190612826565b81600181518110612063576120636127d8565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac947906120c8908790600090869030904290600401612843565b600060405180830381600087803b1580156120e257600080fd5b505af11580156120f6573d6000803e3d6000fd5b504792506000915061210b905060028661268d565b600b5461211891906127c1565b9050600060028261212988866126af565b612133919061268d565b61213d919061268d565b90506000826009548561215091906126af565b61215a919061268d565b905060006121688284612675565b61217290866127c1565b905086156122785760405163f305d71960e01b81523060048201526024810188905260006044820181905260648201527351fe1edbc149556ef2867115e58616428aa2c19a60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990859060c40160606040518083038185885af1158015612216573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061223b91906128b4565b505060408051858152602081018a90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b81156122c1576040517351fe1edbc149556ef2867115e58616428aa2c19a9083156108fc029084906000818181858888f193505050501580156122bf573d6000803e3d6000fd5b505b801561230a5760405173592ab8ed942c7eb84cb27616f1dcb57669dfd9019082156108fc029083906000818181858888f19350505050158015612308573d6000803e3d6000fd5b505b50506019805460ff191690555050505050505050565b600080600080600060a0868803121561233857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b818110156123885785810183015185820160400152820161236c565b8181111561239a576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146123c557600080fd5b50565b600080604083850312156123db57600080fd5b82356123e6816123b0565b946020939093013593505050565b6000806040838503121561240757600080fd5b50508035926020909101359150565b60008060006060848603121561242b57600080fd5b8335612436816123b0565b92506020840135612446816123b0565b929592945050506040919091013590565b80151581146123c557600080fd5b6000806040838503121561247857600080fd5b8235612483816123b0565b9150602083013561249381612457565b809150509250929050565b6000602082840312156124b057600080fd5b8135610d2a816123b0565b600080604083850312156124ce57600080fd5b823561248381612457565b6000602082840312156124eb57600080fd5b8135610d2a81612457565b60008083601f84011261250857600080fd5b50813567ffffffffffffffff81111561252057600080fd5b6020830191508360208260051b850101111561253b57600080fd5b9250929050565b6000806000806040858703121561255857600080fd5b843567ffffffffffffffff8082111561257057600080fd5b61257c888389016124f6565b9096509450602087013591508082111561259557600080fd5b506125a2878288016124f6565b95989497509550505050565b6000806000606084860312156125c357600080fd5b83356125ce81612457565b95602085013595506040909401359392505050565b6000602082840312156125f557600080fd5b5035919050565b6000806040838503121561260f57600080fd5b823561261a816123b0565b91506020830135612493816123b0565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156126885761268861265f565b500190565b6000826126aa57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156126c9576126c961265f565b500290565b600181815b808511156127095781600019048211156126ef576126ef61265f565b808516156126fc57918102915b93841c93908002906126d3565b509250929050565b60008261272057506001610ab1565b8161272d57506000610ab1565b8160018114612743576002811461274d57612769565b6001915050610ab1565b60ff84111561275e5761275e61265f565b50506001821b610ab1565b5060208310610133831016604e8410600b841016171561278c575081810a610ab1565b61279683836126ce565b80600019048211156127aa576127aa61265f565b029392505050565b6000610d2a60ff841683612711565b6000828210156127d3576127d361265f565b500390565b634e487b7160e01b600052603260045260246000fd5b60006000198214156128025761280261265f565b5060010190565b60006020828403121561281b57600080fd5b8151610d2a81612457565b60006020828403121561283857600080fd5b8151610d2a816123b0565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128935784516001600160a01b03168352938301939183019160010161286e565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156128c957600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f0e0c7301ced57b800e899ddf6cd968da182a8c48f78f3df02de80d9cd43d49264736f6c634300080b0033

Deployed Bytecode Sourcemap

13247:14842:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24946:158;;;;;;;;;;;;;:::i;:::-;;15229:49;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;15229:49:0;;;;;;;;25826:481;;;;;;;;;;-1:-1:-1;25826:481:0;;;;;:::i;:::-;;:::i;16395:71::-;;;;;;;;;;-1:-1:-1;16458:5:0;;;;;;;;;;;;-1:-1:-1;;;16458:5:0;;;;16395:71;;;;;;;:::i;16801:216::-;;;;;;;;;;-1:-1:-1;16801:216:0;;;;;:::i;:::-;;:::i;:::-;;;1878:14:1;;1871:22;1853:41;;1841:2;1826:18;16801:216:0;1713:187:1;24519:321:0;;;;;;;;;;-1:-1:-1;24519:321:0;;;;;:::i;:::-;;:::i;27142:150::-;;;;;;;;;;-1:-1:-1;27142:150:0;;;;;:::i;:::-;;:::i;16143:88::-;;;;;;;;;;;;;:::i;25112:230::-;;;;;;;;;;-1:-1:-1;25112:230:0;;;;;:::i;:::-;;:::i;26642:182::-;;;;;;;;;;-1:-1:-1;26642:182:0;;;;;:::i;:::-;;:::i;18943:341::-;;;;;;;;;;-1:-1:-1;18943:341:0;;;;;:::i;:::-;;:::i;14294:86::-;;;;;;;;;;;;14338:42;14294:86;;;;;-1:-1:-1;;;;;2783:32:1;;;2765:51;;2753:2;2738:18;14294:86:0;2619:203:1;26832:138:0;;;;;;;;;;;;;:::i;16237:71::-;;;;;;;;;;-1:-1:-1;16237:71:0;;13582:1;2969:36:1;;2957:2;2942:18;16237:71:0;2827:184:1;17025:211:0;;;;;;;;;;-1:-1:-1;17025:211:0;;;;;:::i;:::-;;:::i;18679:92::-;;;;;;;;;;;;;:::i;27300:126::-;;;;;;;;;;-1:-1:-1;27300:126:0;;;;;:::i;:::-;;:::i;18049:122::-;;;;;;;;;;-1:-1:-1;18049:122:0;;;;;:::i;:::-;;:::i;14988:27::-;;;;;;;;;;;;;;;;21507:348;;;;;;;;;;-1:-1:-1;21507:348:0;;;;;:::i;:::-;;:::i;25564:119::-;;;;;;;;;;-1:-1:-1;25564:119:0;;;;;:::i;:::-;;:::i;18179:170::-;;;;;;;;;;-1:-1:-1;18179:170:0;;;;;:::i;:::-;;:::i;27431:569::-;;;;;;;;;;-1:-1:-1;27431:569:0;;;;;:::i;:::-;;:::i;15192:30::-;;;;;;;;;;-1:-1:-1;15192:30:0;;;;-1:-1:-1;;;15192:30:0;;;;;;14497:97;;;;;;;;;;;;14551:42;14497:97;;16549:105;;;;;;;;;;-1:-1:-1;16549:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;16633:18:0;16615:7;16633:18;;;:9;:18;;;;;;;16549:105;12485:148;;;;;;;;;;;;;:::i;15102:36::-;;;;;;;;;;-1:-1:-1;15102:36:0;;;;-1:-1:-1;;;15102:36:0;;;;;;13664:54;;;;;;;;;;;;;;;;15068:27;;;;;;;;;;-1:-1:-1;15068:27:0;;;;;;;-1:-1:-1;;;;;15068:27:0;;;16472:71;;;;;;;;;;-1:-1:-1;16515:7:0;11909:6;-1:-1:-1;;;;;11909:6:0;16472:71;16143:88;13725:56;;;;;;;;;;;;;;;;16314:75;;;;;;;;;;-1:-1:-1;16379:7:0;;;;;;;;;;;;-1:-1:-1;;;16379:7:0;;;;16314:75;;17244:409;;;;;;;;;;-1:-1:-1;17244:409:0;;;;;:::i;:::-;;:::i;14918:29::-;;;;;;;;;;;;;;;18779:156;;;;;;;;;;-1:-1:-1;18779:156:0;;;;;:::i;:::-;;:::i;25354:202::-;;;;;;;;;;-1:-1:-1;25354:202:0;;;;;:::i;:::-;;:::i;15022:33::-;;;;;;;;;;-1:-1:-1;15022:33:0;;;;;;;;14956:25;;;;;;;;;;;;;;;;15145:38;;;;;;;;;;-1:-1:-1;15145:38:0;;;;-1:-1:-1;;;15145:38:0;;;;;;26315:319;;;;;;;;;;-1:-1:-1;26315:319:0;;;;;:::i;:::-;;:::i;26978:156::-;;;;;;;;;;-1:-1:-1;26978:156:0;;;;;:::i;:::-;;:::i;18361:306::-;;;;;;;;;;-1:-1:-1;18361:306:0;;;;;:::i;:::-;;:::i;16660:133::-;;;;;;;;;;-1:-1:-1;16660:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;16762:19:0;;;16744:7;16762:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;16660:133;21292:207;;;;;;;;;;-1:-1:-1;21292:207:0;;;;;:::i;:::-;;:::i;12788:244::-;;;;;;;;;;-1:-1:-1;12788:244:0;;;;;:::i;:::-;;:::i;25691:127::-;;;;;;;;;;-1:-1:-1;25691:127:0;;;;;:::i;:::-;;:::i;15285:49::-;;;;;;;;;;;;;;;;14687:34;;;;;;;;;;;;;;;24946:158;12056:6;;-1:-1:-1;;;;;12056:6:0;6546:10;12056:22;12048:67;;;;-1:-1:-1;;;12048:67:0;;;;;;;:::i;:::-;;;;;;;;;25003:10:::1;::::0;:15;24994:25:::1;;;::::0;::::1;;25043:12;25030:10;:25:::0;25081:15:::1;25066:12;:30:::0;24946:158::o;25826:481::-;12056:6;;-1:-1:-1;;;;;12056:6:0;6546:10;12056:22;12048:67;;;;-1:-1:-1;;;12048:67:0;;;;;;;:::i;:::-;25980:12:::1;:28:::0;;;26019:12:::1;:28:::0;;;26058:6:::1;:16:::0;;;26085:8:::1;:20:::0;;;26067:7;26127:29:::1;26034:13:::0;25995;26127:29:::1;:::i;:::-;:39;;;;:::i;:::-;26116:8;:50:::0;26177:14:::1;:32:::0;;;26240:18:::1;26257:1;26194:15:::0;26240:18:::1;:::i;:::-;26228:8;;:30;;26220:39;;;::::0;::::1;;26290:8;;26278;;:20;;26270:29;;;::::0;::::1;;25826:481:::0;;;;;:::o;16801:216::-;16905:10;16876:4;16893:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;16893:32:0;;;;;;;;;;:41;;;16950:37;16876:4;;16893:32;;16950:37;;;;16928:6;160:25:1;;148:2;133:18;;14:177;16950:37:0;;;;;;;;-1:-1:-1;17005:4:0;16801:216;;;;;:::o;24519:321::-;12056:6;;-1:-1:-1;;;;;12056:6:0;6546:10;12056:22;12048:67;;;;-1:-1:-1;;;12048:67:0;;;;;;;:::i;:::-;24670:3:::1;24663;24639:20;24628:8;;:31;;;;:::i;:::-;24627:39;;;;:::i;:::-;:46;;24619:76;;;::::0;-1:-1:-1;;;24619:76:0;;8414:2:1;24619:76:0::1;::::0;::::1;8396:21:1::0;8453:2;8433:18;;;8426:30;-1:-1:-1;;;8472:18:1;;;8465:47;8529:18;;24619:76:0::1;8212:341:1::0;24619:76:0::1;24725:6;24714:7;:17;;24706:50;;;::::0;-1:-1:-1;;;24706:50:0;;8760:2:1;24706:50:0::1;::::0;::::1;8742:21:1::0;8799:2;8779:18;;;8772:30;-1:-1:-1;;;8818:18:1;;;8811:50;8878:18;;24706:50:0::1;8558:344:1::0;24706:50:0::1;24767:11;:34:::0;;;;24812:10:::1;:20:::0;24519:321::o;27142:150::-;27222:4;27278:6;27246:29;27266:8;27246:19;:29::i;:::-;:38;;27142:150;-1:-1:-1;;;27142:150:0:o;16143:88::-;16198:7;13641:15;13582:1;13641:2;:15;:::i;:::-;13624:33;;:13;:33;:::i;:::-;16209:19;;16143:88;:::o;25112:230::-;12056:6;;-1:-1:-1;;;;;12056:6:0;6546:10;12056:22;12048:67;;;;-1:-1:-1;;;12048:67:0;;;;;;;:::i;:::-;25218:1:::1;25206:9;:13;:28;;;;;25233:1;25223:7;:11;25206:28;:65;;;;-1:-1:-1::0;25270:1:0::1;25259:7:::0;25239:16:::1;:9:::0;25251:4:::1;25239:16;:::i;:::-;25238:28;;;;:::i;:::-;:33;;25206:65;25198:74;;;::::0;::::1;;25327:7:::0;25314:9;13641:15:::1;13582:1;13641:2;:15;:::i;:::-;13624:33;::::0;:13:::1;:33;:::i;:::-;25299:24;;;;:::i;:::-;25298:36;;;;:::i;:::-;25283:12;:51:::0;-1:-1:-1;;25112:230:0:o;26642:182::-;12056:6;;-1:-1:-1;;;;;12056:6:0;6546:10;12056:22;12048:67;;;;-1:-1:-1;;;12048:67:0;;;;;;;:::i;:::-;26739:15:::1;:25:::0;;;;26775:26:::1;:41:::0;26642:182::o;18943:341::-;-1:-1:-1;;;;;19063:19:0;;19043:4;19063:19;;;:11;:19;;;;;;;;19083:10;19063:31;;;;;;;;-1:-1:-1;;19063:52:0;19060:157;;-1:-1:-1;;;;;19165:19:0;;;;;;:11;:19;;;;;;;;19185:10;19165:31;;;;;;;;:40;;19199:6;;19165:40;:::i;:::-;-1:-1:-1;;;;;19131:19:0;;;;;;:11;:19;;;;;;;;19151:10;19131:31;;;;;;;:74;19060:157;19236:40;19250:6;19258:9;19269:6;19236:13;:40::i;:::-;19229:47;;18943:341;;;;;;:::o;26832:138::-;16633:9;:18;;;;13352:42;26885:7;16633:18;;;;;26885:7;;26928:33;;;:::i;:::-;13641:15;13582:1;13641:2;:15;:::i;:::-;13624:33;;:13;:33;:::i;:::-;26912:50;;;;:::i;17025:211::-;17139:10;17113:4;17160:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17160:32:0;;;;;;;;;;17113:4;;17130:76;;17151:7;;17160:45;;17195:10;;17160:45;:::i;:::-;17130:8;:76::i;:::-;-1:-1:-1;17224:4:0;17025:211;;;;:::o;18679:92::-;12056:6;;-1:-1:-1;;;;;12056:6:0;6546:10;12056:22;12048:67;;;;-1:-1:-1;;;12048:67:0;;;;;;;:::i;:::-;18738:18:::1;:25:::0;;-1:-1:-1;;;;18738:25:0::1;-1:-1:-1::0;;;18738:25:0::1;::::0;;18679:92::o;27300:126::-;12056:6;;-1:-1:-1;;;;;12056:6:0;6546:10;12056:22;12048:67;;;;-1:-1:-1;;;12048:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27386:21:0;;;::::1;;::::0;;;:14:::1;:21;::::0;;;;:32;;-1:-1:-1;;27386:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27300:126::o;18049:122::-;18104:4;18128:35;18136:7;-1:-1:-1;;18128:7:0;:35::i;21507:348::-;21582:7;21622:12;21605:10;;21618:1;21605:14;;;;:::i;:::-;:29;21602:63;;;21661:1;21644:14;;:18;;;;:::i;:::-;21637:25;;;;21602:63;21679:7;21675:87;;;21695:12;:67;;21754:8;;21743;;:19;;;;:::i;:::-;21695:67;;;21737:3;21722:11;;21711:8;;:22;;;;:::i;:::-;21710:30;;;;:::i;21675:87::-;21780:12;:67;;21839:8;;21828;;:19;;;;:::i;:::-;21780:67;;;21822:3;21807:11;;21796:8;;:22;;;;:::i;:::-;21795:30;;;;:::i;25564:119::-;12056:6;;-1:-1:-1;;;;;12056:6:0;6546:10;12056:22;12048:67;;;;-1:-1:-1;;;12048:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25647:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;25647:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25564:119::o;18179:170::-;12056:6;;-1:-1:-1;;;;;12056:6:0;6546:10;12056:22;12048:67;;;;-1:-1:-1;;;12048:67:0;;;;;;;:::i;:::-;18251:8:::1;18247:55;;;18283:18;::::0;-1:-1:-1;;;18283:18:0;::::1;;;18282:19;18274:28;;;::::0;::::1;;18313:17;:28:::0;;;::::1;;-1:-1:-1::0;;;18313:28:0::1;-1:-1:-1::0;;;;18313:28:0;;::::1;::::0;;;::::1;::::0;;18179:170::o;27431:569::-;12056:6;;-1:-1:-1;;;;;12056:6:0;6546:10;12056:22;12048:67;;;;-1:-1:-1;;;12048:67:0;;;;;;;:::i;:::-;27550:35;;::::1;27542:44;;;::::0;::::1;;27617:11;::::0;;-1:-1:-1;;;;27639:19:0;::::1;::::0;;;-1:-1:-1;;;27617:11:0;::::1;;;-1:-1:-1::0;27755:201:0::1;27775:21:::0;;::::1;27755:201;;;27827:14;:29;27842:10;;27853:1;27842:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27827:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;27827:29:0;;::::1;;27826:30;27818:39;;;::::0;::::1;;27872:72;27886:10;27898;;27909:1;27898:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;27927:15;13582:1;27927:2;:15;:::i;:::-;27913:7;;27921:1;27913:10;;;;;;;:::i;:::-;;;;;;;:30;;;;:::i;:::-;27872:13;:72::i;:::-;-1:-1:-1::0;27798:3:0;::::1;::::0;::::1;:::i;:::-;;;;27755:201;;;-1:-1:-1::0;27966:11:0::1;:26:::0;;;::::1;;-1:-1:-1::0;;;27966:26:0::1;-1:-1:-1::0;;;;27966:26:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;27431:569:0:o;12485:148::-;12056:6;;-1:-1:-1;;;;;12056:6:0;6546:10;12056:22;12048:67;;;;-1:-1:-1;;;12048:67:0;;;;;;;:::i;:::-;12592:1:::1;12576:6:::0;;12555:40:::1;::::0;-1:-1:-1;;;;;12576:6:0;;::::1;::::0;12555:40:::1;::::0;12592:1;;12555:40:::1;12623:1;12606:19:::0;;-1:-1:-1;;;;;;12606:19:0::1;::::0;;12485:148::o;17244:409::-;17393:10;17337:4;17381:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17381:32:0;;;;;;;;;;17432:35;;;;17424:85;;;;-1:-1:-1;;;17424:85:0;;10894:2:1;17424:85:0;;;10876:21:1;10933:2;10913:18;;;10906:30;10972:34;10952:18;;;10945:62;-1:-1:-1;;;11023:18:1;;;11016:35;11068:19;;17424:85:0;10692:401:1;17424:85:0;17545:65;17554:10;17566:7;17594:15;17575:16;:34;17545:8;:65::i;:::-;-1:-1:-1;17641:4:0;;17244:409;-1:-1:-1;;;17244:409:0:o;18779:156::-;18859:4;18883:44;18897:10;18909:9;18920:6;18883:13;:44::i;25354:202::-;12056:6;;-1:-1:-1;;;;;12056:6:0;6546:10;12056:22;12048:67;;;;-1:-1:-1;;;12048:67:0;;;;;;;:::i;:::-;25462:1:::1;25452:7;:11;:31;;;;;25478:5;25467:7;:16;;25452:31;25444:40;;;::::0;::::1;;25541:7:::0;25528:9;13641:15:::1;13582:1;13641:2;:15;:::i;:::-;13624:33;::::0;:13:::1;:33;:::i;:::-;25513:24;;;;:::i;:::-;25512:36;;;;:::i;:::-;25495:14;:53:::0;-1:-1:-1;;25354:202:0:o;26315:319::-;12056:6;;-1:-1:-1;;;;;12056:6:0;6546:10;12056:22;12048:67;;;;-1:-1:-1;;;12048:67:0;;;;;;;:::i;:::-;26459:1:::1;26444:12;:16;:39;;;;;26482:1;26464:15;:19;26444:39;26436:48;;;::::0;::::1;;26495:11;:22:::0;;-1:-1:-1;;;;26495:22:0::1;-1:-1:-1::0;;;26495:22:0;::::1;;;;::::0;;26557:15;13641::::1;13582:1;13641:2;:15;:::i;:::-;13624:33;::::0;:13:::1;:33;:::i;:::-;26542:30;;;;:::i;:::-;26528:11;:44:::0;26614:12;13641:15:::1;13582:1;13641:2;:15;:::i;:::-;13624:33;::::0;:13:::1;:33;:::i;:::-;26599:27;;;;:::i;:::-;26583:13;:43:::0;-1:-1:-1;;;26315:319:0:o;26978:156::-;27046:7;27104:22;:20;:22::i;:::-;-1:-1:-1;;;;;27095:4:0;16633:18;16615:7;16633:18;;;:9;:18;;;;;;27074:26;;:8;:26;:::i;:::-;27073:53;;;;:::i;18361:306::-;12056:6;;-1:-1:-1;;;;;12056:6:0;6546:10;12056:22;12048:67;;;;-1:-1:-1;;;12048:67:0;;;;;;;:::i;:::-;18474:9:::1;::::0;-1:-1:-1;;;;;18451:33:0;;::::1;18474:9;::::0;;::::1;;18451:33;18447:143;;18509:18;::::0;-1:-1:-1;;;18509:18:0;::::1;;;18508:19;18500:28;;;::::0;::::1;;18543:9;:35:::0;;-1:-1:-1;;;;;;18543:35:0::1;;-1:-1:-1::0;;;;;18543:35:0;::::1;;;::::0;;18447:143:::1;18604:5;18600:59;;;18624:9;::::0;:35:::1;::::0;-1:-1:-1;;;18624:35:0;;18648:10:::1;18624:35;::::0;::::1;2765:51:1::0;18624:9:0::1;::::0;;::::1;-1:-1:-1::0;;;;;18624:9:0::1;::::0;:23:::1;::::0;2738:18:1;;18624:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18600:59;18361:306:::0;;:::o;21292:207::-;12056:6;;-1:-1:-1;;;;;12056:6:0;6546:10;12056:22;12048:67;;;;-1:-1:-1;;;12048:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21371:22:0::1;;::::0;;;:11:::1;:22;::::0;;;;;;;:29;;21396:4:::1;-1:-1:-1::0;;21371:29:0;;::::1;::::0;::::1;::::0;;;21411:18:::1;:29:::0;;;;;:36;;;::::1;::::0;::::1;::::0;;21458:15:::1;:26:::0;;;;;:33;;;;::::1;::::0;;::::1;::::0;;21292:207::o;12788:244::-;12056:6;;-1:-1:-1;;;;;12056:6:0;6546:10;12056:22;12048:67;;;;-1:-1:-1;;;12048:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12877:22:0;::::1;12869:73;;;::::0;-1:-1:-1;;;12869:73:0;;11300:2:1;12869:73:0::1;::::0;::::1;11282:21:1::0;11339:2;11319:18;;;11312:30;11378:34;11358:18;;;11351:62;-1:-1:-1;;;11429:18:1;;;11422:36;11475:19;;12869:73:0::1;11098:402:1::0;12869:73:0::1;12979:6;::::0;;12958:38:::1;::::0;-1:-1:-1;;;;;12958:38:0;;::::1;::::0;12979:6;::::1;::::0;12958:38:::1;::::0;::::1;13007:6;:17:::0;;-1:-1:-1;;;;;;13007:17:0::1;-1:-1:-1::0;;;;;13007:17:0;;;::::1;::::0;;;::::1;::::0;;12788:244::o;25691:127::-;12056:6;;-1:-1:-1;;;;;12056:6:0;6546:10;12056:22;12048:67;;;;-1:-1:-1;;;12048:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25778:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;25778:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25691:127::o;19292:1178::-;-1:-1:-1;;;;;19409:17:0;;19384:4;19409:17;;;:9;:17;;;;;;:27;-1:-1:-1;19409:27:0;19401:60;;;;-1:-1:-1;;;19401:60:0;;11707:2:1;19401:60:0;;;11689:21:1;11746:2;11726:18;;;11719:30;-1:-1:-1;;;11765:18:1;;;11758:50;11825:18;;19401:60:0;11505:344:1;19401:60:0;19489:1;19480:6;:10;19472:46;;;;-1:-1:-1;;;19472:46:0;;12056:2:1;19472:46:0;;;12038:21:1;12095:2;12075:18;;;12068:30;12134:25;12114:18;;;12107:53;12177:18;;19472:46:0;11854:347:1;19472:46:0;19534:6;;;;19531:63;;;19550:41;19565:6;19573:9;19584:6;19550:14;:41::i;:::-;19543:48;;;;19531:63;19606:28;19619:6;19627;19606:12;:28::i;:::-;-1:-1:-1;;;;;19660:25:0;;;;;;:14;:25;;;;;;;;19659:26;:47;;;;-1:-1:-1;;;;;;19689:17:0;;13352:42;19689:17;;19659:47;19655:148;;;-1:-1:-1;;;;;19728:26:0;;;;;;:15;:26;;;;;;;;19723:68;;19756:35;19773:9;19784:6;19756:16;:35::i;:::-;24915:10;;19815:118;;-1:-1:-1;;;;;19840:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;19870:29:0;;;;;;:18;:29;;;;;;;;19840:59;19832:98;;;;-1:-1:-1;;;19832:98:0;;12408:2:1;19832:98:0;;;12390:21:1;12447:2;12427:18;;;12420:30;12486:28;12466:18;;;12459:56;12532:18;;19832:98:0;12206:350:1;19832:98:0;-1:-1:-1;;;;;19945:17:0;;;;;;:9;:17;;;;;:27;;19966:6;;19945:17;:27;;19966:6;;19945:27;:::i;:::-;;;;-1:-1:-1;;;;;;;21253:19:0;;19985:22;21253:19;;;:11;:19;;;;;;;;21252:20;20010:49;;;;-1:-1:-1;;;;;;21253:19:0;;21228:4;21253:19;;;:11;:19;;;;;;;;21252:20;20035:24;20010:95;;20099:6;20010:95;;;20062:34;20070:6;20078:9;20089:6;20062:7;:34::i;:::-;19985:120;;20129:25;20144:9;20129:14;:25::i;:::-;20126:66;;;20161:10;;20157:32;;20173:16;20182:6;20173:8;:16::i;:::-;-1:-1:-1;;;;;20212:20:0;;;;;;:9;:20;;;;;:38;;20236:14;;20212:20;:38;;20236:14;;20212:38;:::i;:::-;;;;-1:-1:-1;;24915:10:0;;:15;;20278:31;;;;-1:-1:-1;20292:17:0;;-1:-1:-1;;;20292:17:0;;;;20278:31;20275:104;;;20324:9;;:55;;-1:-1:-1;;;20324:55:0;;-1:-1:-1;;;;;12819:15:1;;;20324:55:0;;;12801:34:1;12871:15;;;12851:18;;;12844:43;12903:18;;;12896:34;;;20324:9:0;;;;;;;;:28;;12736:18:1;;20324:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20275:104;20414:9;-1:-1:-1;;;;;20397:43:0;20406:6;-1:-1:-1;;;;;20397:43:0;;20425:14;20397:43;;;;160:25:1;;148:2;133:18;;14:177;20397:43:0;;;;;;;;-1:-1:-1;20458:4:0;;19292:1178;-1:-1:-1;;;;19292:1178:0:o;17661:380::-;-1:-1:-1;;;;;17797:19:0;;17789:68;;;;-1:-1:-1;;;17789:68:0;;13393:2:1;17789:68:0;;;13375:21:1;13432:2;13412:18;;;13405:30;13471:34;13451:18;;;13444:62;-1:-1:-1;;;13522:18:1;;;13515:34;13566:19;;17789:68:0;13191:400:1;17789:68:0;-1:-1:-1;;;;;17876:21:0;;17868:68;;;;-1:-1:-1;;;17868:68:0;;13798:2:1;17868:68:0;;;13780:21:1;13837:2;13817:18;;;13810:30;13876:34;13856:18;;;13849:62;-1:-1:-1;;;13927:18:1;;;13920:32;13969:19;;17868:68:0;13596:398:1;17868:68:0;-1:-1:-1;;;;;17949:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18001:32;;160:25:1;;;18001:32:0;;133:18:1;18001:32:0;;;;;;;17661:380;;;:::o;20478:259::-;-1:-1:-1;;;;;20588:17:0;;20571:4;20588:17;;;:9;:17;;;;;:27;;20609:6;;20588:17;20571:4;;20588:27;;20609:6;;20588:27;:::i;:::-;;;;-1:-1:-1;;;;;;;20626:20:0;;;;;;:9;:20;;;;;:30;;20650:6;;20626:20;:30;;20650:6;;20626:30;:::i;:::-;;;;;;;;20689:9;-1:-1:-1;;;;;20672:35:0;20681:6;-1:-1:-1;;;;;20672:35:0;;20700:6;20672:35;;;;160:25:1;;148:2;133:18;;14:177;20672:35:0;;;;;;;;-1:-1:-1;20725:4:0;20478:259;;;;;:::o;20992:166::-;21089:12;;21079:6;:22;;:49;;;-1:-1:-1;;;;;;21105:23:0;;;;;;:15;:23;;;;;;;;21079:49;21071:79;;;;-1:-1:-1;;;21071:79:0;;14201:2:1;21071:79:0;;;14183:21:1;14240:2;14220:18;;;14213:30;-1:-1:-1;;;14259:18:1;;;14252:47;14316:18;;21071:79:0;13999:341:1;20749:235:0;20857:14;;-1:-1:-1;;;;;20890:20:0;;20835:19;20890:20;;;:9;:20;;;;;;20857:14;;20890:29;;20913:6;;20890:29;:::i;:::-;:44;;20882:94;;;;-1:-1:-1;;;20882:94:0;;14547:2:1;20882:94:0;;;14529:21:1;14586:2;14566:18;;;14559:30;14625:34;14605:18;;;14598:62;-1:-1:-1;;;14676:18:1;;;14669:35;14721:19;;20882:94:0;14345:401:1;20882:94:0;20824:160;20749:235;;:::o;21863:546::-;22116:14;;-1:-1:-1;;;;;22011:25:0;;;21949:7;22011:25;;;:14;:25;;;;;;;22039:22;;;;;;;;21949:7;;;;22116:14;;21999:113;;22011:25;;;;;22039:22;22038:23;:73;;;;-1:-1:-1;22083:10:0;;-1:-1:-1;;;;;22065:15:0;;;;;;:7;:15;;;;;;22096;;22065:28;;;:::i;:::-;:46;21999:11;:113::i;:::-;21990:122;;:6;:122;:::i;:::-;21989:141;;;;:::i;:::-;-1:-1:-1;;;;;22155:22:0;;;;;;:14;:22;;;;;;21969:161;;-1:-1:-1;22155:22:0;;:49;;;;-1:-1:-1;;;;;;22181:18:0;;;;;;:7;:18;;;;;;:23;22155:49;22151:104;;;-1:-1:-1;;;;;22219:18:0;;;;;;:7;:18;;;;;22240:15;22219:36;;22151:104;22286:4;22268:24;;;;:9;:24;;;;;:37;;22296:9;;22268:24;:37;;22296:9;;22268:37;:::i;:::-;;;;-1:-1:-1;;22321:42:0;;160:25:1;;;22346:4:0;;-1:-1:-1;;;;;22321:42:0;;;;;148:2:1;133:18;22321:42:0;;;;;;;22383:18;22392:9;22383:6;:18;:::i;:::-;22376:25;21863:546;-1:-1:-1;;;;;21863:546:0:o;22417:321::-;22523:10;22483:4;22508:26;;;:14;:26;;;;;;;;22507:27;:64;;;;-1:-1:-1;22560:10:0;22548:23;;;;:11;:23;;;;;;;;22547:24;22507:64;:84;;;;-1:-1:-1;22585:6:0;;;;22584:7;22507:84;:108;;;;-1:-1:-1;22604:11:0;;-1:-1:-1;;;22604:11:0;;;;22507:108;:146;;;;-1:-1:-1;;;;;;22628:25:0;;;;;;:14;:25;;;;;;;;22507:146;:198;;;;-1:-1:-1;22694:11:0;;22684:4;22666:24;;;;:9;:24;;;;;;:39;;22507:198;:223;;;;;22729:1;22718:8;;:12;22500:230;22417:321;-1:-1:-1;;22417:321:0:o;22746:1765::-;15381:6;:13;;-1:-1:-1;;15381:13:0;15390:4;15381:13;;;22841::::1;::::0;15381:6;;22832:22;::::1;:47;;22866:13;;22832:47;;;22857:6;22832:47;22912:4;22894:24;::::0;;;:9:::1;:24;::::0;;;;;22809:70;;-1:-1:-1;22894:39:0;-1:-1:-1;22890:84:0::1;;;-1:-1:-1::0;22968:4:0::1;22950:24;::::0;;;:9:::1;:24;::::0;;;;;22890:84:::1;22985:27;23015:60;23031:15;;23048:26;;23015:15;:60::i;:::-;:79;;23082:12;;23015:79;;;23078:1;23015:79;22985:109;;23105:23;23183:1;23171:8;;23148:19;23133:12;:34;;;;:::i;:::-;23132:47;;;;:::i;:::-;23131:53;;;;:::i;:::-;23105:79:::0;-1:-1:-1;23195:31:0::1;23105:79:::0;23195:31;::::1;:::i;:::-;23263:16;::::0;;23277:1:::1;23263:16:::0;;;;;::::1;::::0;;23195:31;;-1:-1:-1;23239:21:0::1;::::0;23263:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;23263:16:0::1;23239:40;;23308:4;23290;23295:1;23290:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;23290:23:0::1;;;-1:-1:-1::0;;;;;23290:23:0::1;;;::::0;::::1;23334:6;-1:-1:-1::0;;;;;23334:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23324:4;23329:1;23324:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23324:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;23368:188:::1;::::0;-1:-1:-1;;;23368:188:0;;:6:::1;:57:::0;;::::1;::::0;::::1;::::0;:188:::1;::::0;23440:12;;23467:1:::1;::::0;23483:4;;23510::::1;::::0;23530:15:::1;::::0;23368:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;23595:21:0::1;::::0;-1:-1:-1;23569:23:0::1;::::0;-1:-1:-1;23660:23:0::1;::::0;-1:-1:-1;23682:1:0::1;23660:19:::0;:23:::1;:::i;:::-;23649:8;;:34;;;;:::i;:::-;23627:56:::0;-1:-1:-1;23696:23:0::1;23778:1;23627:56:::0;23723:37:::1;23741:19:::0;23723:15;:37:::1;:::i;:::-;23722:53;;;;:::i;:::-;:57;;;;:::i;:::-;23696:83;;23790:23;23851:11;23835:12;;23817:15;:30;;;;:::i;:::-;23816:46;;;;:::i;:::-;23790:72:::0;-1:-1:-1;23873:17:0::1;23912:33;23790:72:::0;23912:15;:33:::1;:::i;:::-;23893:53;::::0;:15;:53:::1;:::i;:::-;23873:73:::0;-1:-1:-1;23962:19:0;;23959:353:::1;;23998:237;::::0;-1:-1:-1;;;23998:237:0;;24071:4:::1;23998:237;::::0;::::1;16465:34:1::0;16515:18;;;16508:34;;;24129:1:0::1;16558:18:1::0;;;16551:34;;;16601:18;;;16594:34;14338:42:0::1;16644:19:1::0;;;16637:44;24205:15:0::1;16697:19:1::0;;;16690:35;23998:6:0::1;-1:-1:-1::0;;;;;23998:22:0::1;::::0;::::1;::::0;24028:15;;16399:19:1;;23998:237:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;24255:45:0::1;::::0;;17221:25:1;;;17277:2;17262:18;;17255:34;;;24255:45:0::1;::::0;-1:-1:-1;17194:18:1;24255:45:0::1;;;;;;;23959:353;24336:19:::0;;24332:81:::1;;24370:43;::::0;14447:42:::1;::::0;24370:43;::::1;;;::::0;24397:15;;24370:43:::1;::::0;;;24397:15;14447:42;24370:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24332:81;24442:13:::0;;24438:63:::1;;24470:31;::::0;14551:42:::1;::::0;24470:31;::::1;;;::::0;24491:9;;24470:31:::1;::::0;;;24491:9;14551:42;24470:31;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24438:63;-1:-1:-1::0;;15399:6:0;:14;;-1:-1:-1;;15399:14:0;;;-1:-1:-1;;;;;;;;22746:1765:0:o;196:454:1:-;291:6;299;307;315;323;376:3;364:9;355:7;351:23;347:33;344:53;;;393:1;390;383:12;344:53;-1:-1:-1;;416:23:1;;;486:2;471:18;;458:32;;-1:-1:-1;537:2:1;522:18;;509:32;;588:2;573:18;;560:32;;-1:-1:-1;639:3:1;624:19;611:33;;-1:-1:-1;196:454:1;-1:-1:-1;196:454:1:o;655:597::-;767:4;796:2;825;814:9;807:21;857:6;851:13;900:6;895:2;884:9;880:18;873:34;925:1;935:140;949:6;946:1;943:13;935:140;;;1044:14;;;1040:23;;1034:30;1010:17;;;1029:2;1006:26;999:66;964:10;;935:140;;;1093:6;1090:1;1087:13;1084:91;;;1163:1;1158:2;1149:6;1138:9;1134:22;1130:31;1123:42;1084:91;-1:-1:-1;1236:2:1;1215:15;-1:-1:-1;;1211:29:1;1196:45;;;;1243:2;1192:54;;655:597;-1:-1:-1;;;655:597:1:o;1257:131::-;-1:-1:-1;;;;;1332:31:1;;1322:42;;1312:70;;1378:1;1375;1368:12;1312:70;1257:131;:::o;1393:315::-;1461:6;1469;1522:2;1510:9;1501:7;1497:23;1493:32;1490:52;;;1538:1;1535;1528:12;1490:52;1577:9;1564:23;1596:31;1621:5;1596:31;:::i;:::-;1646:5;1698:2;1683:18;;;;1670:32;;-1:-1:-1;;;1393:315:1:o;1905:248::-;1973:6;1981;2034:2;2022:9;2013:7;2009:23;2005:32;2002:52;;;2050:1;2047;2040:12;2002:52;-1:-1:-1;;2073:23:1;;;2143:2;2128:18;;;2115:32;;-1:-1:-1;1905:248:1:o;2158:456::-;2235:6;2243;2251;2304:2;2292:9;2283:7;2279:23;2275:32;2272:52;;;2320:1;2317;2310:12;2272:52;2359:9;2346:23;2378:31;2403:5;2378:31;:::i;:::-;2428:5;-1:-1:-1;2485:2:1;2470:18;;2457:32;2498:33;2457:32;2498:33;:::i;:::-;2158:456;;2550:7;;-1:-1:-1;;;2604:2:1;2589:18;;;;2576:32;;2158:456::o;3016:118::-;3102:5;3095:13;3088:21;3081:5;3078:32;3068:60;;3124:1;3121;3114:12;3139:382;3204:6;3212;3265:2;3253:9;3244:7;3240:23;3236:32;3233:52;;;3281:1;3278;3271:12;3233:52;3320:9;3307:23;3339:31;3364:5;3339:31;:::i;:::-;3389:5;-1:-1:-1;3446:2:1;3431:18;;3418:32;3459:30;3418:32;3459:30;:::i;:::-;3508:7;3498:17;;;3139:382;;;;;:::o;3526:247::-;3585:6;3638:2;3626:9;3617:7;3613:23;3609:32;3606:52;;;3654:1;3651;3644:12;3606:52;3693:9;3680:23;3712:31;3737:5;3712:31;:::i;3778:376::-;3840:6;3848;3901:2;3889:9;3880:7;3876:23;3872:32;3869:52;;;3917:1;3914;3907:12;3869:52;3956:9;3943:23;3975:28;3997:5;3975:28;:::i;4159:241::-;4215:6;4268:2;4256:9;4247:7;4243:23;4239:32;4236:52;;;4284:1;4281;4274:12;4236:52;4323:9;4310:23;4342:28;4364:5;4342:28;:::i;4405:367::-;4468:8;4478:6;4532:3;4525:4;4517:6;4513:17;4509:27;4499:55;;4550:1;4547;4540:12;4499:55;-1:-1:-1;4573:20:1;;4616:18;4605:30;;4602:50;;;4648:1;4645;4638:12;4602:50;4685:4;4677:6;4673:17;4661:29;;4745:3;4738:4;4728:6;4725:1;4721:14;4713:6;4709:27;4705:38;4702:47;4699:67;;;4762:1;4759;4752:12;4699:67;4405:367;;;;;:::o;4777:773::-;4899:6;4907;4915;4923;4976:2;4964:9;4955:7;4951:23;4947:32;4944:52;;;4992:1;4989;4982:12;4944:52;5032:9;5019:23;5061:18;5102:2;5094:6;5091:14;5088:34;;;5118:1;5115;5108:12;5088:34;5157:70;5219:7;5210:6;5199:9;5195:22;5157:70;:::i;:::-;5246:8;;-1:-1:-1;5131:96:1;-1:-1:-1;5334:2:1;5319:18;;5306:32;;-1:-1:-1;5350:16:1;;;5347:36;;;5379:1;5376;5369:12;5347:36;;5418:72;5482:7;5471:8;5460:9;5456:24;5418:72;:::i;:::-;4777:773;;;;-1:-1:-1;5509:8:1;-1:-1:-1;;;;4777:773:1:o;6005:377::-;6079:6;6087;6095;6148:2;6136:9;6127:7;6123:23;6119:32;6116:52;;;6164:1;6161;6154:12;6116:52;6203:9;6190:23;6222:28;6244:5;6222:28;:::i;:::-;6269:5;6321:2;6306:18;;6293:32;;-1:-1:-1;6372:2:1;6357:18;;;6344:32;;6005:377;-1:-1:-1;;;6005:377:1:o;6387:180::-;6446:6;6499:2;6487:9;6478:7;6474:23;6470:32;6467:52;;;6515:1;6512;6505:12;6467:52;-1:-1:-1;6538:23:1;;6387:180;-1:-1:-1;6387:180:1:o;6572:388::-;6640:6;6648;6701:2;6689:9;6680:7;6676:23;6672:32;6669:52;;;6717:1;6714;6707:12;6669:52;6756:9;6743:23;6775:31;6800:5;6775:31;:::i;:::-;6825:5;-1:-1:-1;6882:2:1;6867:18;;6854:32;6895:33;6854:32;6895:33;:::i;7191:356::-;7393:2;7375:21;;;7412:18;;;7405:30;7471:34;7466:2;7451:18;;7444:62;7538:2;7523:18;;7191:356::o;7552:127::-;7613:10;7608:3;7604:20;7601:1;7594:31;7644:4;7641:1;7634:15;7668:4;7665:1;7658:15;7684:128;7724:3;7755:1;7751:6;7748:1;7745:13;7742:39;;;7761:18;;:::i;:::-;-1:-1:-1;7797:9:1;;7684:128::o;7817:217::-;7857:1;7883;7873:132;;7927:10;7922:3;7918:20;7915:1;7908:31;7962:4;7959:1;7952:15;7990:4;7987:1;7980:15;7873:132;-1:-1:-1;8019:9:1;;7817:217::o;8039:168::-;8079:7;8145:1;8141;8137:6;8133:14;8130:1;8127:21;8122:1;8115:9;8108:17;8104:45;8101:71;;;8152:18;;:::i;:::-;-1:-1:-1;8192:9:1;;8039:168::o;8907:422::-;8996:1;9039:5;8996:1;9053:270;9074:7;9064:8;9061:21;9053:270;;;9133:4;9129:1;9125:6;9121:17;9115:4;9112:27;9109:53;;;9142:18;;:::i;:::-;9192:7;9182:8;9178:22;9175:55;;;9212:16;;;;9175:55;9291:22;;;;9251:15;;;;9053:270;;;9057:3;8907:422;;;;;:::o;9334:806::-;9383:5;9413:8;9403:80;;-1:-1:-1;9454:1:1;9468:5;;9403:80;9502:4;9492:76;;-1:-1:-1;9539:1:1;9553:5;;9492:76;9584:4;9602:1;9597:59;;;;9670:1;9665:130;;;;9577:218;;9597:59;9627:1;9618:10;;9641:5;;;9665:130;9702:3;9692:8;9689:17;9686:43;;;9709:18;;:::i;:::-;-1:-1:-1;;9765:1:1;9751:16;;9780:5;;9577:218;;9879:2;9869:8;9866:16;9860:3;9854:4;9851:13;9847:36;9841:2;9831:8;9828:16;9823:2;9817:4;9814:12;9810:35;9807:77;9804:159;;;-1:-1:-1;9916:19:1;;;9948:5;;9804:159;9995:34;10020:8;10014:4;9995:34;:::i;:::-;10065:6;10061:1;10057:6;10053:19;10044:7;10041:32;10038:58;;;10076:18;;:::i;:::-;10114:20;;9334:806;-1:-1:-1;;;9334:806:1:o;10145:140::-;10203:5;10232:47;10273:4;10263:8;10259:19;10253:4;10232:47;:::i;10290:125::-;10330:4;10358:1;10355;10352:8;10349:34;;;10363:18;;:::i;:::-;-1:-1:-1;10400:9:1;;10290:125::o;10420:127::-;10481:10;10476:3;10472:20;10469:1;10462:31;10512:4;10509:1;10502:15;10536:4;10533:1;10526:15;10552:135;10591:3;-1:-1:-1;;10612:17:1;;10609:43;;;10632:18;;:::i;:::-;-1:-1:-1;10679:1:1;10668:13;;10552:135::o;12941:245::-;13008:6;13061:2;13049:9;13040:7;13036:23;13032:32;13029:52;;;13077:1;13074;13067:12;13029:52;13109:9;13103:16;13128:28;13150:5;13128:28;:::i;14883:251::-;14953:6;15006:2;14994:9;14985:7;14981:23;14977:32;14974:52;;;15022:1;15019;15012:12;14974:52;15054:9;15048:16;15073:31;15098:5;15073:31;:::i;15139:980::-;15401:4;15449:3;15438:9;15434:19;15480:6;15469:9;15462:25;15506:2;15544:6;15539:2;15528:9;15524:18;15517:34;15587:3;15582:2;15571:9;15567:18;15560:31;15611:6;15646;15640:13;15677:6;15669;15662:22;15715:3;15704:9;15700:19;15693:26;;15754:2;15746:6;15742:15;15728:29;;15775:1;15785:195;15799:6;15796:1;15793:13;15785:195;;;15864:13;;-1:-1:-1;;;;;15860:39:1;15848:52;;15955:15;;;;15920:12;;;;15896:1;15814:9;15785:195;;;-1:-1:-1;;;;;;;16036:32:1;;;;16031:2;16016:18;;16009:60;-1:-1:-1;;;16100:3:1;16085:19;16078:35;15997:3;15139:980;-1:-1:-1;;;15139:980:1:o;16736:306::-;16824:6;16832;16840;16893:2;16881:9;16872:7;16868:23;16864:32;16861:52;;;16909:1;16906;16899:12;16861:52;16938:9;16932:16;16922:26;;16988:2;16977:9;16973:18;16967:25;16957:35;;17032:2;17021:9;17017:18;17011:25;17001:35;;16736:306;;;;;:::o

Swarm Source

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