ETH Price: $3,448.35 (+1.46%)

Token

ZINJA (Z)
 

Overview

Max Total Supply

100,000,000 Z

Holders

436 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
vEmpire DDAO: Deployer
Balance
14,109.921135758 Z

Value
$0.00
0x5eFf77571184427f5A9E951597571B5259820b48
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Zinja is an ERC20 project that introduces stakeable NFTs, an IDO launchpad, and a VR game.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Zinja

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-14
*/

/*
ZINJA
Sacrifice, because we must prevail

Website: https://zinja.info
Telegram: https://t.me/ZINJA_ETH
Twitter: https://twitter.com/Zinja_ETH

*/

// SPDX-License-Identifier: None

pragma solidity 0.8.12;


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 IDEXPair {
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

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(0x0000000000000000000000000000000000000000, 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, 0x0000000000000000000000000000000000000000);
        _owner = 0x0000000000000000000000000000000000000000;
    }

    /**
     * @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 != 0x0000000000000000000000000000000000000000, "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IAntiSnipe {
  function setTokenOwner(address owner, address pair) external;

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

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

    string constant _name = "ZINJA";
    string constant _symbol = "Z";
    uint8 constant _decimals = 9;

    uint256 constant _totalSupply = 100_000_000 * (10 ** _decimals);

    //For ease to the end-user these checks do not adjust for burnt tokens and should be set accordingly.
    uint256 public _maxTxAmount = (_totalSupply * 1) / 1000; //0.1%
    uint256 public _maxWalletSize = (_totalSupply * 1) / 500; //0.2%

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

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

    uint256 liquidityFee = 20;
    uint256 marketingFee = 30;
    uint256 devFee = 30;
    uint256 totalFee = 80;
    uint256 sellBias = 0;

    //Higher tax for a period of time from the first purchase on an address
    uint256 sellPercent = 250;
    uint256 sellPeriod = 24 hours;

    uint256 antiDumpTax = 0;
    uint256 antiDumpPeriod = 30 minutes;
    uint256 antiDumpThreshold = 21;
    bool antiDumpReserve0 = true;
    uint256 feeDenominator = 1000;

    address public immutable liquidityReceiver;
    address payable public immutable marketingReceiver;
    address payable public immutable devReceiver;

    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;
 
    IAntiSnipe public antisnipe;
    bool public protectionEnabled = true;
    bool public protectionDisabled = false;

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

    constructor (address _lp, address _marketing, address _dev) {
        //Suggest setting liquidity receiver to DEAD to lock funds in the project and avoid centralization
        liquidityReceiver = _lp;
        marketingReceiver = payable(_marketing);
        devReceiver = payable(_dev);

        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[owner()] = true;

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

        _balances[owner()] = _totalSupply;
        emit Transfer(0x0000000000000000000000000000000000000000, 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) external virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external 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 != 0x0000000000000000000000000000000000000000, "ERC20: approve from the zero address");
        require(spender != 0x0000000000000000000000000000000000000000, "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 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 getTotalFee(bool selling, bool inHighPeriod) public view returns (uint256) {
        if(launchedAt == 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 = 0;
        bool highSellPeriod = !liquidityPools[sender] && lastBuy[sender] + sellPeriod > block.timestamp;
        if(liquidityPools[recipient] && antiDumpTax > 0) {
            (uint112 reserve0, uint112 reserve1,) = IDEXPair(pair).getReserves();
            uint256 impactEstimate = amount * 1000 / ((antiDumpReserve0 ? reserve0 : reserve1) + amount);
            
            if (block.timestamp > lastSell[sender] + antiDumpPeriod) {
                lastSell[sender] = block.timestamp;
                lastSellAmount[sender] = 0;
            }
            
            lastSellAmount[sender] += impactEstimate;
            
            if (lastSellAmount[sender] >= antiDumpThreshold) {
                feeAmount = ((amount * totalFee * antiDumpTax) / 100) / feeDenominator;
            }
        }

        if (feeAmount == 0)
            feeAmount = (amount * getTotalFee(liquidityPools[recipient], highSellPeriod)) / 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();
        
        //Guaranteed swap desired to prevent trade blockages
        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) {
            //Guaranteed swap desired to prevent trade blockages, return values ignored
            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 launched() internal view returns (bool) {
        return launchedAt != 0;
    }

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

    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 transferOwnership(address newOwner) public virtual override onlyOwner {
        isFeeExempt[owner()] = false;
        isTxLimitExempt[owner()] = false;
        liquidityProviders[owner()] = false;
        _allowances[owner()][routerAddress] = 0;
        super.transferOwnership(newOwner);
        isFeeExempt[newOwner] = true;
        isTxLimitExempt[newOwner] = true;
        liquidityProviders[newOwner] = true;
        _allowances[newOwner][routerAddress] = type(uint256).max;
    }

    function renounceOwnership() public virtual override onlyOwner {
        isFeeExempt[owner()] = false;
        isTxLimitExempt[owner()] = false;
        liquidityProviders[owner()] = false;
        _allowances[owner()][routerAddress] = 0;
        super.renounceOwnership();
    }

    function setProtectionEnabled(bool _protect) external onlyOwner {
        if (_protect)
            require(!protectionDisabled, "Protection disabled");
        protectionEnabled = _protect;
        emit ProtectionToggle(_protect);
    }
    
    function setProtection(address _protection, bool _call) external onlyOwner {
        if (_protection != address(antisnipe)){
            require(!protectionDisabled, "Protection disabled");
            antisnipe = IAntiSnipe(_protection);
        }
        if (_call)
            antisnipe.setTokenOwner(address(this), pair);
        
        emit ProtectionSet(_protection);
    }
    
    function disableProtection() external onlyOwner {
        protectionDisabled = true;
        emit ProtectionDisabled();
    }
    
    function setLiquidityProvider(address _provider) external onlyOwner {
        require(_provider != pair && _provider != routerAddress, "Can't alter trading contracts in this manner.");
        isFeeExempt[_provider] = true;
        liquidityProviders[_provider] = true;
        isTxLimitExempt[_provider] = true;
        emit LiquidityProviderSet(_provider);
    }

    function setSellPeriod(uint256 _sellPercentIncrease, uint256 _period) external onlyOwner {
        require((totalFee * _sellPercentIncrease) / 100 <= 400, "Sell tax too high");
        require(_sellPercentIncrease >= 100, "Can't make sells cheaper with this");
        require(antiDumpTax == 0 || _sellPercentIncrease <= antiDumpTax, "High period tax clashes with anti-dump tax");
        require(_period <= 7 days, "Sell period too long");
        sellPercent = _sellPercentIncrease;
        sellPeriod = _period;
        emit SellPeriodSet(_sellPercentIncrease, _period);
    }

    function setAntiDumpTax(uint256 _tax, uint256 _period, uint256 _threshold, bool _reserve0) external onlyOwner {
        require(_threshold >= 10 && _tax <= 400 && (_tax == 0 || _tax >= sellPercent) && _period <= 1 hours, "Parameters out of bounds");
        antiDumpTax = _tax;
        antiDumpPeriod = _period;
        antiDumpThreshold = _threshold;
        antiDumpReserve0 = _reserve0;
        emit AntiDumpTaxSet(_tax, _period, _threshold);
    }

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

    function setTxLimit(uint256 numerator, uint256 divisor) external onlyOwner {
        require(numerator > 0 && divisor > 0 && (numerator * 1000) / divisor >= 5, "Transaction limits too low");
        _maxTxAmount = (_totalSupply * numerator) / divisor;
        emit TransactionLimitSet(_maxTxAmount);
    }
    
    function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner() {
        require(divisor > 0 && divisor <= 10000, "Divisor must be greater than zero");
        _maxWalletSize = (_totalSupply * numerator) / divisor;
        emit MaxWalletSet(_maxWalletSize);
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        require(holder != 0x0000000000000000000000000000000000000000, "Invalid address");
        isFeeExempt[holder] = exempt;
        emit FeeExemptSet(holder, exempt);
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        require(holder != 0x0000000000000000000000000000000000000000, "Invalid address");
        isTxLimitExempt[holder] = exempt;
        emit TrasactionLimitExemptSet(holder, exempt);
    }

    function setFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _devFee, uint256 _sellBias, uint256 _feeDenominator) external onlyOwner {
        require((_liquidityFee / 2) * 2 == _liquidityFee, "Liquidity fee must be an even number due to rounding");
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
        devFee = _devFee;
        sellBias = _sellBias;
        totalFee = _liquidityFee + _marketingFee + _devFee;
        feeDenominator = _feeDenominator;
        require(totalFee <= feeDenominator / 4, "Fees too high");
        require(sellBias <= totalFee, "Incorrect sell bias");
        emit FeesSet(totalFee, feeDenominator, sellBias);
    }

    function setSwapBackSettings(bool _enabled, uint256 _denominator, uint256 _denominatorMin) external onlyOwner {
        require(_denominator > 0 && _denominatorMin > 0, "Denominators must be greater than 0");
        swapEnabled = _enabled;
        swapMinimum = _totalSupply / _denominatorMin;
        swapThreshold = _totalSupply / _denominator;
        emit SwapSettingsSet(swapMinimum, swapThreshold, swapEnabled);
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
        emit TargetLiquiditySet(_target * 100 / _denominator);
    }

    function addLiquidityPool(address _pool, bool _enabled) external onlyOwner {
        require(_pool != 0x0000000000000000000000000000000000000000, "Invalid address");
        liquidityPools[_pool] = _enabled;
        emit LiquidityPoolSet(_pool, _enabled);
    }

	function airdrop(address[] calldata _addresses, uint256[] calldata _amount) external onlyOwner
    {
        require(_addresses.length == _amount.length, "Array lengths don't match");
        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]] && _addresses[i] != 0x0000000000000000000000000000000000000000, "Can't airdrop the liquidity pool or address 0");
            _transferFrom(msg.sender, _addresses[i], _amount[i] * (10 ** _decimals));
            lastBuy[_addresses[i]] = block.timestamp;
        }
        swapEnabled = previousSwap;
        emit AirdropSent(msg.sender);
    }

    event AutoLiquify(uint256 amount, uint256 amountToken);
    event ProtectionSet(address indexed protection);
    event ProtectionDisabled();
    event LiquidityProviderSet(address indexed provider);
    event SellPeriodSet(uint256 percent, uint256 period);
    event TradingLaunched();
    event TransactionLimitSet(uint256 limit);
    event MaxWalletSet(uint256 limit);
    event FeeExemptSet(address indexed wallet, bool isExempt);
    event TrasactionLimitExemptSet(address indexed wallet, bool isExempt);
    event FeesSet(uint256 totalFees, uint256 denominator, uint256 sellBias);
    event SwapSettingsSet(uint256 minimum, uint256 maximum, bool enabled);
    event LiquidityPoolSet(address indexed pool, bool enabled);
    event AirdropSent(address indexed from);
    event AntiDumpTaxSet(uint256 rate, uint256 period, uint256 threshold);
    event TargetLiquiditySet(uint256 percent);
    event ProtectionToggle(bool isEnabled);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_lp","type":"address"},{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_dev","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"}],"name":"AirdropSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"period","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"AntiDumpTaxSet","type":"event"},{"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":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"isExempt","type":"bool"}],"name":"FeeExemptSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"denominator","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellBias","type":"uint256"}],"name":"FeesSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"LiquidityPoolSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"}],"name":"LiquidityProviderSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"limit","type":"uint256"}],"name":"MaxWalletSet","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":[],"name":"ProtectionDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protection","type":"address"}],"name":"ProtectionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isEnabled","type":"bool"}],"name":"ProtectionToggle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"period","type":"uint256"}],"name":"SellPeriodSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minimum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maximum","type":"uint256"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapSettingsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"}],"name":"TargetLiquiditySet","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingLaunched","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"limit","type":"uint256"}],"name":"TransactionLimitSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"isExempt","type":"bool"}],"name":"TrasactionLimitExemptSet","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":"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":"_tax","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"bool","name":"_reserve0","type":"bool"}],"name":"setAntiDumpTax","outputs":[],"stateMutability":"nonpayable","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":"address","name":"_protection","type":"address"},{"internalType":"bool","name":"_call","type":"bool"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_protect","type":"bool"}],"name":"setProtectionEnabled","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"}]

6101206040526103e8620000166009600a620006d8565b62000026906305f5e100620006f0565b62000033906001620006f0565b6200003f919062000712565b6001556101f4620000536009600a620006d8565b62000063906305f5e100620006f0565b62000070906001620006f0565b6200007c919062000712565b6002556014600a818155601e600b819055600c556050600d556000600e81905560fa600f556201518060105560115561070860125560156013819055825460ff19166001179092556103e890915560286016556064601755601c80546201000160a01b62ffffff60a01b1990911617905561019090620000ff90600990620006d8565b6200010f906305f5e100620006f0565b6200011b919062000712565b601d556127106200012f6009600a620006d8565b6200013f906305f5e100620006f0565b6200014b919062000712565b601e553480156200015b57600080fd5b506040516200413a3803806200413a8339810160408190526200017e9162000752565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b0380841660805282811660a052811660c052737a250d5630b4cf539739df2c5dacb4c659f2488d60e08190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200022e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025491906200079c565b6001600160a01b031663c9c6539660e0516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c991906200079c565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000316573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033c91906200079c565b6001600160a01b03166101008190526000908152601860205260408120805460ff19166001179055600019906004906200037e6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d80835290845282822094909455308152600483528181209381529290915281206000199055600190600890620003ef6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600190601990620004336000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600992839052908120805490931660019081179093556200048b6000546001600160a01b031690565b6001600160a01b031681526020808201929092526040016000908120805493151560ff19948516179055737a250d5630b4cf539739df2c5dacb4c659f2488d90526009908190527fbaa441ac52505693dd98c7dd2f5bbf8f9349b7da9de72f9d52e5cac70e7da8ce80549092166001179091556200050b90600a620006d8565b6200051b906305f5e100620006f0565b60036000620005326000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556200055f6000546001600160a01b031690565b6001600160a01b031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620005996009600a620006d8565b620005a9906305f5e100620006f0565b60405190815260200160405180910390a3505050620007ba565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200061a578160001904821115620005fe57620005fe620005c3565b808516156200060c57918102915b93841c9390800290620005de565b509250929050565b6000826200063357506001620006d2565b816200064257506000620006d2565b81600181146200065b5760028114620006665762000686565b6001915050620006d2565b60ff8411156200067a576200067a620005c3565b50506001821b620006d2565b5060208310610133831016604e8410600b8410161715620006ab575081810a620006d2565b620006b78383620005d9565b8060001904821115620006ce57620006ce620005c3565b0290505b92915050565b6000620006e960ff84168362000622565b9392505050565b60008160001904831182151516156200070d576200070d620005c3565b500290565b6000826200073057634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160a01b03811681146200074d57600080fd5b919050565b6000806000606084860312156200076857600080fd5b620007738462000735565b9250620007836020850162000735565b9150620007936040850162000735565b90509250925092565b600060208284031215620007af57600080fd5b620006e98262000735565b60805160a05160c05160e051610100516138f562000845600039600081816107b301528181611c7801528181611d8c01528181611e560152612a3701526000818161099a01528181612e9f01528181612f5701526130a901526000818161062b01526131c601526000818161077f01526131680152600081816104a2015261307b01526138f56000f3fe6080604052600436106102e85760003560e01c806370a0823111610190578063abe57e70116100dc578063d5d035f511610095578063f2fde38b1161006f578063f2fde38b14610932578063f84ba65d14610952578063f8821a6214610972578063f887ea401461098857600080fd5b8063d5d035f5146108ac578063dd62ed3e146108cc578063e624c4bc1461091257600080fd5b8063abe57e70146107f5578063bf56b37114610815578063c5363caa1461082b578063ceafd6da1461084c578063d08893581461086c578063d51ed1c81461088c57600080fd5b80638da5cb5b11610149578063a457c2d711610123578063a457c2d71461074d578063a5949bcf1461076d578063a8aa1b31146107a1578063a9059cbb146107d557600080fd5b80638da5cb5b146106ef5780638f9a55c01461070d57806395d89b411461072357600080fd5b806370a082311461064d578063715018a6146106835780637516baec146106985780637d1db4a5146106b9578063882cfb3f146106cf578063893d20e8146106ef57600080fd5b8063264d26dd1161024f578063571ac8b011610208578063658d4b7f116101e2578063658d4b7f146105b857806367243482146105d85780636ddd1713146105f85780636f9a880e1461061957600080fd5b8063571ac8b0146105625780635804f1e4146105825780636419b6f91461059857600080fd5b8063264d26dd146104905780632b112e49146104dc578063313ce567146104f1578063395093511461050d578063421dd7c71461052d578063492a937b1461054257600080fd5b80630f4f7bfe116102a15780630f4f7bfe146103db5780631161ae39146103fb57806318160ddd1461041b5780631faf723b14610430578063201e79911461045057806323b872dd1461047057600080fd5b806301339c21146102f45780630445b6671461030b57806304a66b481461033457806306fdde0314610354578063095ea7b31461038b5780630e049c54146103bb57600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b506103096109bc565b005b34801561031757600080fd5b50610321601d5481565b6040519081526020015b60405180910390f35b34801561034057600080fd5b5061030961034f366004613227565b610a2f565b34801561036057600080fd5b506040805180820190915260058152645a494e4a4160d81b60208201525b60405161032b9190613262565b34801561039757600080fd5b506103ab6103a63660046132cf565b610bef565b604051901515815260200161032b565b3480156103c757600080fd5b506103096103d6366004613309565b610c5c565b3480156103e757600080fd5b506103096103f636600461334a565b610d6d565b34801561040757600080fd5b506103ab61041636600461334a565b610f54565b34801561042757600080fd5b50610321610f68565b34801561043c57600080fd5b5061030961044b36600461334a565b610f89565b34801561045c57600080fd5b5061030961046b36600461334a565b611097565b34801561047c57600080fd5b506103ab61048b36600461336c565b611110565b34801561049c57600080fd5b506104c47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161032b565b3480156104e857600080fd5b506103216111a5565b3480156104fd57600080fd5b506040516009815260200161032b565b34801561051957600080fd5b506103ab6105283660046132cf565b611225565b34801561053957600080fd5b5061030961126a565b34801561054e57600080fd5b5061030961055d3660046133ad565b6112d2565b34801561056e57600080fd5b506103ab61057d3660046133e6565b611382565b34801561058e57600080fd5b50610321601b5481565b3480156105a457600080fd5b506103216105b3366004613403565b611390565b3480156105c457600080fd5b506103096105d33660046133ad565b611424565b3480156105e457600080fd5b506103096105f336600461346d565b6114cc565b34801561060457600080fd5b50601c546103ab90600160b01b900460ff1681565b34801561062557600080fd5b506104c47f000000000000000000000000000000000000000000000000000000000000000081565b34801561065957600080fd5b506103216106683660046133e6565b6001600160a01b031660009081526003602052604090205490565b34801561068f57600080fd5b50610309611750565b3480156106a457600080fd5b50601c546103ab90600160a01b900460ff1681565b3480156106c557600080fd5b5061032160015481565b3480156106db57600080fd5b50601c546104c4906001600160a01b031681565b3480156106fb57600080fd5b506000546001600160a01b03166104c4565b34801561071957600080fd5b5061032160025481565b34801561072f57600080fd5b506040805180820190915260018152602d60f91b602082015261037e565b34801561075957600080fd5b506103ab6107683660046132cf565b61189d565b34801561077957600080fd5b506104c47f000000000000000000000000000000000000000000000000000000000000000081565b3480156107ad57600080fd5b506104c47f000000000000000000000000000000000000000000000000000000000000000081565b3480156107e157600080fd5b506103ab6107f03660046132cf565b611936565b34801561080157600080fd5b5061030961081036600461334a565b611943565b34801561082157600080fd5b50610321601a5481565b34801561083757600080fd5b50601c546103ab90600160a81b900460ff1681565b34801561085857600080fd5b506103096108673660046134d9565b611a3a565b34801561087857600080fd5b506103096108873660046134f6565b611b12565b34801561089857600080fd5b506103216108a736600461352b565b611c64565b3480156108b857600080fd5b506103096108c73660046133ad565b611cbb565b3480156108d857600080fd5b506103216108e7366004613544565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561091e57600080fd5b5061030961092d3660046133e6565b611e2a565b34801561093e57600080fd5b5061030961094d3660046133e6565b611f87565b34801561095e57600080fd5b5061030961096d3660046133ad565b612146565b34801561097e57600080fd5b50610321601e5481565b34801561099457600080fd5b506104c47f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031633146109ef5760405162461bcd60e51b81526004016109e690613572565b60405180910390fd5b601a54156109fc57600080fd5b43601a5542601b556040517fdd6364d871cb6036ca605660d590886ab96eb55b7dbb0051be1901a75794641590600090a1565b6000546001600160a01b03163314610a595760405162461bcd60e51b81526004016109e690613572565b84610a656002826135bd565b610a709060026135df565b14610ada5760405162461bcd60e51b815260206004820152603460248201527f4c697175696469747920666565206d75737420626520616e206576656e206e756044820152736d6265722064756520746f20726f756e64696e6760601b60648201526084016109e6565b600a859055600b849055600c839055600e82905582610af985876135fe565b610b0391906135fe565b600d556015819055610b166004826135bd565b600d541115610b575760405162461bcd60e51b815260206004820152600d60248201526c08ccacae640e8dede40d0d2ced609b1b60448201526064016109e6565b600d54600e541115610ba15760405162461bcd60e51b8152602060048201526013602482015272496e636f72726563742073656c6c206269617360681b60448201526064016109e6565b600d54601554600e5460408051938452602084019290925282820152517f01bae858246c904512695a3f6d48ab88abb7a0192fdd7c53b043e60317795f459181900360600190a15050505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c4a9086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610c865760405162461bcd60e51b81526004016109e690613572565b600a8210158015610c9957506101908411155b8015610caf5750831580610caf5750600f548410155b8015610cbd5750610e108311155b610d095760405162461bcd60e51b815260206004820152601860248201527f506172616d6574657273206f7574206f6620626f756e6473000000000000000060448201526064016109e6565b6011849055601283905560138290556014805460ff191682151517905560408051858152602081018590529081018390527fafe6c6a9d14f1da6e5642b5fa6236c37e9783e34bfe9c08cee0529af4c17bce59060600160405180910390a150505050565b6000546001600160a01b03163314610d975760405162461bcd60e51b81526004016109e690613572565b610190606483600d54610daa91906135df565b610db491906135bd565b1115610df65760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840e8c2f040e8dede40d0d2ced607b1b60448201526064016109e6565b6064821015610e525760405162461bcd60e51b815260206004820152602260248201527f43616e2774206d616b652073656c6c7320636865617065722077697468207468604482015261697360f01b60648201526084016109e6565b6011541580610e6357506011548211155b610ec25760405162461bcd60e51b815260206004820152602a60248201527f4869676820706572696f642074617820636c6173686573207769746820616e746044820152690d25ac8eadae040e8c2f60b31b60648201526084016109e6565b62093a80811115610f0c5760405162461bcd60e51b815260206004820152601460248201527353656c6c20706572696f6420746f6f206c6f6e6760601b60448201526064016109e6565b600f829055601081905560408051838152602081018390527fb45fbcb6061be03b34994516d5d8d4e38b21641de36e23c8f81217f153a4dbd891015b60405180910390a15050565b600082610f6083611c64565b119392505050565b6000610f766009600a6136fa565b610f84906305f5e1006135df565b905090565b6000546001600160a01b03163314610fb35760405162461bcd60e51b81526004016109e690613572565b600082118015610fc35750600081115b8015610fe65750600581610fd9846103e86135df565b610fe391906135bd565b10155b6110325760405162461bcd60e51b815260206004820152601a60248201527f5472616e73616374696f6e206c696d69747320746f6f206c6f7700000000000060448201526064016109e6565b80826110406009600a6136fa565b61104e906305f5e1006135df565b61105891906135df565b61106291906135bd565b60018190556040519081527f87d6222e218f03ac3f7ce8a320052f10fc0c196c444a04e403ccc4bbfb6a362490602001610f48565b6000546001600160a01b031633146110c15760405162461bcd60e51b81526004016109e690613572565b601682905560178190557fcbbf6bb708b8b7c4daa8d4e1088db9965d8167c3fcb6bc1a21147bbca33c12cf816110f88460646135df565b61110291906135bd565b604051908152602001610f48565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611190576001600160a01b038416600090815260046020908152604080832033845290915290205461116b908390613709565b6001600160a01b03851660009081526004602090815260408083203384529091529020555b61119b8484846121ee565b90505b9392505050565b60036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5461dead60009081527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c549091611201916135fe565b61120d6009600a6136fa565b61121b906305f5e1006135df565b610f849190613709565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161126191859061125c9086906135fe565b612581565b50600192915050565b6000546001600160a01b031633146112945760405162461bcd60e51b81526004016109e690613572565b601c805460ff60a81b1916600160a81b1790556040517fdd849d4f0ff64ab5cfef73f22ec29822c2713550b40bcded093282cc28f86c6090600090a1565b6000546001600160a01b031633146112fc5760405162461bcd60e51b81526004016109e690613572565b6001600160a01b0382166113225760405162461bcd60e51b81526004016109e690613720565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527ffa4a2b2457d2065452473bed7d55c8fa2f65fc4a1eff1ebdaf14a1b7281e777391015b60405180910390a25050565b6000610c5682600019610bef565b600043601a5414156113b25760016015546113ab9190613709565b9050610c56565b82156113ee57816113d257600e54600d546113cd91906135fe565b6113ab565b6064600f54600d546113e491906135df565b6113ab91906135bd565b8161140857600e54600d546114039190613709565b61119e565b6064600f54600d5461141a91906135df565b61119e91906135bd565b6000546001600160a01b0316331461144e5760405162461bcd60e51b81526004016109e690613572565b6001600160a01b0382166114745760405162461bcd60e51b81526004016109e690613720565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f5a8cf666a272afd6dec6788d33967c676fffa92e289eee1b38172982c4b4914d9101611376565b6000546001600160a01b031633146114f65760405162461bcd60e51b81526004016109e690613572565b8281146115455760405162461bcd60e51b815260206004820152601960248201527f4172726179206c656e6774687320646f6e2774206d617463680000000000000060448201526064016109e6565b601c805460ff60b01b198116909155600160b01b900460ff1660005b84811015611706576018600087878481811061157f5761157f613749565b905060200201602081019061159491906133e6565b6001600160a01b0316815260208101919091526040016000205460ff161580156115ec57508585828181106115cb576115cb613749565b90506020020160208101906115e091906133e6565b6001600160a01b031615155b61164e5760405162461bcd60e51b815260206004820152602d60248201527f43616e27742061697264726f7020746865206c697175696469747920706f6f6c60448201526c0206f722061646472657373203609c1b60648201526084016109e6565b6116ad3387878481811061166457611664613749565b905060200201602081019061167991906133e6565b6116856009600a6136fa565b87878681811061169757611697613749565b905060200201356116a891906135df565b6121ee565b5042600560008888858181106116c5576116c5613749565b90506020020160208101906116da91906133e6565b6001600160a01b03168152602081019190915260400160002055806116fe8161375f565b915050611561565b50601c805460ff60b01b1916600160b01b8315150217905560405133907faf1f3c8f96bb5b6a68b1ca0c51b6ba0250cf4a56f5d088071f5fcf710707727390600090a25050505050565b6000546001600160a01b0316331461177a5760405162461bcd60e51b81526004016109e690613572565b6000600860006117926000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556009816117d46000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556019816118166000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556004816118586000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d825290925290205561189b6126a5565b565b3360009081526004602090815260408083206001600160a01b03861684529091528120548281101561191f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109e6565b61192c3385858403612581565b5060019392505050565b600061119e3384846121ee565b6000546001600160a01b0316331461196d5760405162461bcd60e51b81526004016109e690613572565b60008111801561197f57506127108111155b6119d55760405162461bcd60e51b815260206004820152602160248201527f44697669736f72206d7573742062652067726561746572207468616e207a65726044820152606f60f81b60648201526084016109e6565b80826119e36009600a6136fa565b6119f1906305f5e1006135df565b6119fb91906135df565b611a0591906135bd565b60028190556040519081527fee4f0b388531b3b3cbe9a0fc02e17997304dcde94d38db4c65a1e896f7aca78890602001610f48565b6000546001600160a01b03163314611a645760405162461bcd60e51b81526004016109e690613572565b8015611aba57601c54600160a81b900460ff1615611aba5760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b60448201526064016109e6565b601c8054821515600160a01b0260ff60a01b199091161790556040517f96b2bfe55fa5f4032b9b4d922bd97bb17a7f025fce7fcecaefc955fd0111a96690611b0790831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611b3c5760405162461bcd60e51b81526004016109e690613572565b600082118015611b4c5750600081115b611ba45760405162461bcd60e51b815260206004820152602360248201527f44656e6f6d696e61746f7273206d75737420626520677265617465722074686160448201526206e20360ec1b60648201526084016109e6565b601c805460ff60b01b1916600160b01b8515150217905580611bc86009600a6136fa565b611bd6906305f5e1006135df565b611be091906135bd565b601e5581611bf06009600a6136fa565b611bfe906305f5e1006135df565b611c0891906135bd565b601d819055601e54601c5460408051928352602083019390935260ff600160b01b9091041615158183015290517faa199f5aab08ad4ddee0140c8e7d13a4bebb822550aeb3d16e5f7bc485fba0f99181900360600190a1505050565b6000611c6e6111a5565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260036020526040902054611cb190846135df565b610c5691906135bd565b6000546001600160a01b03163314611ce55760405162461bcd60e51b81526004016109e690613572565b601c546001600160a01b03838116911614611d6657601c54600160a81b900460ff1615611d4a5760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b60448201526064016109e6565b601c80546001600160a01b0319166001600160a01b0384161790555b8015611df257601c546040516366812dbb60e11b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301529091169063cd025b7690604401600060405180830381600087803b158015611dd957600080fd5b505af1158015611ded573d6000803e3d6000fd5b505050505b6040516001600160a01b038316907f1ccf813789899d0a52466f1f5c4cabc2820e6818ad4eaca73837528653d00c3c90600090a25050565b6000546001600160a01b03163314611e545760405162461bcd60e51b81526004016109e690613572565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614158015611eb357506001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d14155b611f155760405162461bcd60e51b815260206004820152602d60248201527f43616e277420616c7465722074726164696e6720636f6e74726163747320696e60448201526c103a3434b99036b0b73732b91760991b60648201526084016109e6565b6001600160a01b03811660008181526008602090815260408083208054600160ff1991821681179092556019845282852080548216831790556009909352818420805490931617909155517f96aa4fc7394e306de889dcb1b2730f2ff39e53b54dd11275bf141447c97802299190a250565b6000546001600160a01b03163314611fb15760405162461bcd60e51b81526004016109e690613572565b600060086000611fc96000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff199093169290921790915560098161200b6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff199093169290921790915560198161204d6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff199093169290921790915560048161208f6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d82529092529020556120d381612719565b6001600160a01b031660009081526008602090815260408083208054600160ff199182168117909255600984528285208054821683179055601984528285208054909116909117905560048252808320737a250d5630b4cf539739df2c5dacb4c659f2488d845290915290206000199055565b6000546001600160a01b031633146121705760405162461bcd60e51b81526004016109e690613572565b6001600160a01b0382166121965760405162461bcd60e51b81526004016109e690613720565b6001600160a01b038216600081815260096020908152604091829020805460ff191685151590811790915591519182527fe00fbc488e0ecd4458af11cf15f84d29b2cf621662aa8f46a48f3d29de95123d9101611376565b6001600160a01b03831660009081526003602052604081205482111561224d5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016109e6565b6000821161229d5760405162461bcd60e51b815260206004820152601760248201527f5a65726f20616d6f756e74207472616e7366657272656400000000000000000060448201526064016109e6565b601f5460ff16156122ba576122b3848484612803565b905061119e565b6122c484836128b8565b6001600160a01b03831660009081526018602052604090205460ff161580156122f857506001600160a01b03831661dead14155b15612327576001600160a01b03831660009081526009602052604090205460ff16612327576123278383612925565b601a546123b9576001600160a01b03841660009081526019602052604090205460ff168061236d57506001600160a01b03831660009081526019602052604090205460ff165b6123b95760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e00000000000060448201526064016109e6565b6001600160a01b038416600090815260036020526040812080548492906123e1908490613709565b90915550506001600160a01b03841660009081526008602052604081205460ff1615801561242857506001600160a01b03841660009081526008602052604090205460ff16155b612432578261243d565b61243d8585856129af565b905061244884612cf8565b1561245c57821561245c5761245c83612da0565b6001600160a01b038416600090815260036020526040812080548392906124849084906135fe565b9091555050601a54151580156124a35750601c54600160a01b900460ff165b1561252957601c5460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052909116906348760858906064016020604051808303816000875af1158015612503573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612527919061377a565b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161256e91815260200190565b60405180910390a3506001949350505050565b6001600160a01b0383166125e35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109e6565b6001600160a01b0382166126445760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109e6565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031633146126cf5760405162461bcd60e51b81526004016109e690613572565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146127435760405162461bcd60e51b81526004016109e690613572565b6001600160a01b0381166127a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e6565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831660009081526003602052604081208054839190839061282d908490613709565b90915550506001600160a01b0383166000908152600360205260408120805484929061285a9084906135fe565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128a691815260200190565b60405180910390a35060019392505050565b600154811115806128e157506001600160a01b03821660009081526009602052604090205460ff165b6129215760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016109e6565b5050565b6002546001600160a01b038316600090815260036020526040902054819061294e9084906135fe565b11156129aa5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b60648201526084016109e6565b505050565b6001600160a01b0383166000908152601860205260408120548190819060ff16158015612a0057506010546001600160a01b03871660009081526005602052604090205442916129fe916135fe565b115b6001600160a01b03861660009081526018602052604090205490915060ff168015612a2d57506000601154115b15612bdc576000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab791906137b3565b506014549193509150600090879060ff16612ad25782612ad4565b835b6001600160701b0316612ae791906135fe565b612af3886103e86135df565b612afd91906135bd565b6012546001600160a01b038b16600090815260066020526040902054919250612b25916135fe565b421115612b53576001600160a01b038916600090815260066020908152604080832042905560079091528120555b6001600160a01b03891660009081526007602052604081208054839290612b7b9084906135fe565b90915550506013546001600160a01b038a1660009081526007602052604090205410612bd8576015546064601154600d548a612bb791906135df565b612bc191906135df565b612bcb91906135bd565b612bd591906135bd565b94505b5050505b81612c21576015546001600160a01b038616600090815260186020526040902054612c0a9060ff1683611390565b612c1490866135df565b612c1e91906135bd565b91505b6001600160a01b03861660009081526018602052604090205460ff168015612c5f57506001600160a01b038516600090815260056020526040902054155b15612c80576001600160a01b03851660009081526005602052604090204290555b3060009081526003602052604081208054849290612c9f9084906135fe565b909155505060405182815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3612cee8285613709565b9695505050505050565b3360009081526018602052604081205460ff16158015612d2857503360009081526008602052604090205460ff16155b8015612d375750601f5460ff16155b8015612d4c5750601c54600160b01b900460ff165b8015612d7057506001600160a01b03821660009081526018602052604090205460ff165b8015612d8d5750601e543060009081526003602052604090205410155b8015610c5657506000600d541192915050565b601f805460ff19166001179055601d546000908210612dc157601d54612dc3565b815b30600090815260036020526040902054909150811115612def5750306000908152600360205260409020545b6000612dff601654601754610f54565b612e0b57600a54612e0e565b60005b905060006002600d548385612e2391906135df565b612e2d91906135bd565b612e3791906135bd565b9050612e438184613709565b60408051600280825260608201835292955060009290916020830190803683370190505090503081600081518110612e7d57612e7d613749565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612efb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1f9190613803565b81600181518110612f3257612f32613749565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac94790612f97908790600090869030904290600401613820565b600060405180830381600087803b158015612fb157600080fd5b505af1158015612fc5573d6000803e3d6000fd5b5047925060009150612fda90506002866135bd565b600d54612fe79190613709565b90506000600282612ff888866135df565b61300291906135bd565b61300c91906135bd565b9050600082600b548561301f91906135df565b61302991906135bd565b9050600061303782846135fe565b6130419086613709565b905086156131555760405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660848301524260a48301527f0000000000000000000000000000000000000000000000000000000000000000169063f305d71990859060c40160606040518083038185885af11580156130f3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131189190613891565b505060408051858152602081018a90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b81156131b3576040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169083156108fc029084906000818181858888f193505050501580156131b1573d6000803e3d6000fd5b505b8015613211576040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169082156108fc029083906000818181858888f1935050505015801561320f573d6000803e3d6000fd5b505b5050601f805460ff191690555050505050505050565b600080600080600060a0868803121561323f57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b8181101561328f57858101830151858201604001528201613273565b818111156132a1576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146132cc57600080fd5b50565b600080604083850312156132e257600080fd5b82356132ed816132b7565b946020939093013593505050565b80151581146132cc57600080fd5b6000806000806080858703121561331f57600080fd5b843593506020850135925060408501359150606085013561333f816132fb565b939692955090935050565b6000806040838503121561335d57600080fd5b50508035926020909101359150565b60008060006060848603121561338157600080fd5b833561338c816132b7565b9250602084013561339c816132b7565b929592945050506040919091013590565b600080604083850312156133c057600080fd5b82356133cb816132b7565b915060208301356133db816132fb565b809150509250929050565b6000602082840312156133f857600080fd5b813561119e816132b7565b6000806040838503121561341657600080fd5b82356133cb816132fb565b60008083601f84011261343357600080fd5b50813567ffffffffffffffff81111561344b57600080fd5b6020830191508360208260051b850101111561346657600080fd5b9250929050565b6000806000806040858703121561348357600080fd5b843567ffffffffffffffff8082111561349b57600080fd5b6134a788838901613421565b909650945060208701359150808211156134c057600080fd5b506134cd87828801613421565b95989497509550505050565b6000602082840312156134eb57600080fd5b813561119e816132fb565b60008060006060848603121561350b57600080fd5b8335613516816132fb565b95602085013595506040909401359392505050565b60006020828403121561353d57600080fd5b5035919050565b6000806040838503121561355757600080fd5b8235613562816132b7565b915060208301356133db816132b7565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000826135da57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156135f9576135f96135a7565b500290565b60008219821115613611576136116135a7565b500190565b600181815b80851115613651578160001904821115613637576136376135a7565b8085161561364457918102915b93841c939080029061361b565b509250929050565b60008261366857506001610c56565b8161367557506000610c56565b816001811461368b5760028114613695576136b1565b6001915050610c56565b60ff8411156136a6576136a66135a7565b50506001821b610c56565b5060208310610133831016604e8410600b84101617156136d4575081810a610c56565b6136de8383613616565b80600019048211156136f2576136f26135a7565b029392505050565b600061119e60ff841683613659565b60008282101561371b5761371b6135a7565b500390565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415613773576137736135a7565b5060010190565b60006020828403121561378c57600080fd5b815161119e816132fb565b80516001600160701b03811681146137ae57600080fd5b919050565b6000806000606084860312156137c857600080fd5b6137d184613797565b92506137df60208501613797565b9150604084015163ffffffff811681146137f857600080fd5b809150509250925092565b60006020828403121561381557600080fd5b815161119e816132b7565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138705784516001600160a01b03168352938301939183019160010161384b565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156138a657600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212209a3bdba98ea6d67f725b8fb579e4f47c58249b420a7095150a10d9cd8d84ff0e64736f6c634300080c003300000000000000000000000073fa606806bb025a70f93a863b0c0fe07aac487600000000000000000000000073fa606806bb025a70f93a863b0c0fe07aac48760000000000000000000000003002f1fcd7872abde7589916244b8999d726ecb1

Deployed Bytecode

0x6080604052600436106102e85760003560e01c806370a0823111610190578063abe57e70116100dc578063d5d035f511610095578063f2fde38b1161006f578063f2fde38b14610932578063f84ba65d14610952578063f8821a6214610972578063f887ea401461098857600080fd5b8063d5d035f5146108ac578063dd62ed3e146108cc578063e624c4bc1461091257600080fd5b8063abe57e70146107f5578063bf56b37114610815578063c5363caa1461082b578063ceafd6da1461084c578063d08893581461086c578063d51ed1c81461088c57600080fd5b80638da5cb5b11610149578063a457c2d711610123578063a457c2d71461074d578063a5949bcf1461076d578063a8aa1b31146107a1578063a9059cbb146107d557600080fd5b80638da5cb5b146106ef5780638f9a55c01461070d57806395d89b411461072357600080fd5b806370a082311461064d578063715018a6146106835780637516baec146106985780637d1db4a5146106b9578063882cfb3f146106cf578063893d20e8146106ef57600080fd5b8063264d26dd1161024f578063571ac8b011610208578063658d4b7f116101e2578063658d4b7f146105b857806367243482146105d85780636ddd1713146105f85780636f9a880e1461061957600080fd5b8063571ac8b0146105625780635804f1e4146105825780636419b6f91461059857600080fd5b8063264d26dd146104905780632b112e49146104dc578063313ce567146104f1578063395093511461050d578063421dd7c71461052d578063492a937b1461054257600080fd5b80630f4f7bfe116102a15780630f4f7bfe146103db5780631161ae39146103fb57806318160ddd1461041b5780631faf723b14610430578063201e79911461045057806323b872dd1461047057600080fd5b806301339c21146102f45780630445b6671461030b57806304a66b481461033457806306fdde0314610354578063095ea7b31461038b5780630e049c54146103bb57600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b506103096109bc565b005b34801561031757600080fd5b50610321601d5481565b6040519081526020015b60405180910390f35b34801561034057600080fd5b5061030961034f366004613227565b610a2f565b34801561036057600080fd5b506040805180820190915260058152645a494e4a4160d81b60208201525b60405161032b9190613262565b34801561039757600080fd5b506103ab6103a63660046132cf565b610bef565b604051901515815260200161032b565b3480156103c757600080fd5b506103096103d6366004613309565b610c5c565b3480156103e757600080fd5b506103096103f636600461334a565b610d6d565b34801561040757600080fd5b506103ab61041636600461334a565b610f54565b34801561042757600080fd5b50610321610f68565b34801561043c57600080fd5b5061030961044b36600461334a565b610f89565b34801561045c57600080fd5b5061030961046b36600461334a565b611097565b34801561047c57600080fd5b506103ab61048b36600461336c565b611110565b34801561049c57600080fd5b506104c47f00000000000000000000000073fa606806bb025a70f93a863b0c0fe07aac487681565b6040516001600160a01b03909116815260200161032b565b3480156104e857600080fd5b506103216111a5565b3480156104fd57600080fd5b506040516009815260200161032b565b34801561051957600080fd5b506103ab6105283660046132cf565b611225565b34801561053957600080fd5b5061030961126a565b34801561054e57600080fd5b5061030961055d3660046133ad565b6112d2565b34801561056e57600080fd5b506103ab61057d3660046133e6565b611382565b34801561058e57600080fd5b50610321601b5481565b3480156105a457600080fd5b506103216105b3366004613403565b611390565b3480156105c457600080fd5b506103096105d33660046133ad565b611424565b3480156105e457600080fd5b506103096105f336600461346d565b6114cc565b34801561060457600080fd5b50601c546103ab90600160b01b900460ff1681565b34801561062557600080fd5b506104c47f0000000000000000000000003002f1fcd7872abde7589916244b8999d726ecb181565b34801561065957600080fd5b506103216106683660046133e6565b6001600160a01b031660009081526003602052604090205490565b34801561068f57600080fd5b50610309611750565b3480156106a457600080fd5b50601c546103ab90600160a01b900460ff1681565b3480156106c557600080fd5b5061032160015481565b3480156106db57600080fd5b50601c546104c4906001600160a01b031681565b3480156106fb57600080fd5b506000546001600160a01b03166104c4565b34801561071957600080fd5b5061032160025481565b34801561072f57600080fd5b506040805180820190915260018152602d60f91b602082015261037e565b34801561075957600080fd5b506103ab6107683660046132cf565b61189d565b34801561077957600080fd5b506104c47f00000000000000000000000073fa606806bb025a70f93a863b0c0fe07aac487681565b3480156107ad57600080fd5b506104c47f000000000000000000000000bcb24a73e352fbbdf37a4bd7053289d2131f3ec481565b3480156107e157600080fd5b506103ab6107f03660046132cf565b611936565b34801561080157600080fd5b5061030961081036600461334a565b611943565b34801561082157600080fd5b50610321601a5481565b34801561083757600080fd5b50601c546103ab90600160a81b900460ff1681565b34801561085857600080fd5b506103096108673660046134d9565b611a3a565b34801561087857600080fd5b506103096108873660046134f6565b611b12565b34801561089857600080fd5b506103216108a736600461352b565b611c64565b3480156108b857600080fd5b506103096108c73660046133ad565b611cbb565b3480156108d857600080fd5b506103216108e7366004613544565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561091e57600080fd5b5061030961092d3660046133e6565b611e2a565b34801561093e57600080fd5b5061030961094d3660046133e6565b611f87565b34801561095e57600080fd5b5061030961096d3660046133ad565b612146565b34801561097e57600080fd5b50610321601e5481565b34801561099457600080fd5b506104c47f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000546001600160a01b031633146109ef5760405162461bcd60e51b81526004016109e690613572565b60405180910390fd5b601a54156109fc57600080fd5b43601a5542601b556040517fdd6364d871cb6036ca605660d590886ab96eb55b7dbb0051be1901a75794641590600090a1565b6000546001600160a01b03163314610a595760405162461bcd60e51b81526004016109e690613572565b84610a656002826135bd565b610a709060026135df565b14610ada5760405162461bcd60e51b815260206004820152603460248201527f4c697175696469747920666565206d75737420626520616e206576656e206e756044820152736d6265722064756520746f20726f756e64696e6760601b60648201526084016109e6565b600a859055600b849055600c839055600e82905582610af985876135fe565b610b0391906135fe565b600d556015819055610b166004826135bd565b600d541115610b575760405162461bcd60e51b815260206004820152600d60248201526c08ccacae640e8dede40d0d2ced609b1b60448201526064016109e6565b600d54600e541115610ba15760405162461bcd60e51b8152602060048201526013602482015272496e636f72726563742073656c6c206269617360681b60448201526064016109e6565b600d54601554600e5460408051938452602084019290925282820152517f01bae858246c904512695a3f6d48ab88abb7a0192fdd7c53b043e60317795f459181900360600190a15050505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c4a9086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610c865760405162461bcd60e51b81526004016109e690613572565b600a8210158015610c9957506101908411155b8015610caf5750831580610caf5750600f548410155b8015610cbd5750610e108311155b610d095760405162461bcd60e51b815260206004820152601860248201527f506172616d6574657273206f7574206f6620626f756e6473000000000000000060448201526064016109e6565b6011849055601283905560138290556014805460ff191682151517905560408051858152602081018590529081018390527fafe6c6a9d14f1da6e5642b5fa6236c37e9783e34bfe9c08cee0529af4c17bce59060600160405180910390a150505050565b6000546001600160a01b03163314610d975760405162461bcd60e51b81526004016109e690613572565b610190606483600d54610daa91906135df565b610db491906135bd565b1115610df65760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840e8c2f040e8dede40d0d2ced607b1b60448201526064016109e6565b6064821015610e525760405162461bcd60e51b815260206004820152602260248201527f43616e2774206d616b652073656c6c7320636865617065722077697468207468604482015261697360f01b60648201526084016109e6565b6011541580610e6357506011548211155b610ec25760405162461bcd60e51b815260206004820152602a60248201527f4869676820706572696f642074617820636c6173686573207769746820616e746044820152690d25ac8eadae040e8c2f60b31b60648201526084016109e6565b62093a80811115610f0c5760405162461bcd60e51b815260206004820152601460248201527353656c6c20706572696f6420746f6f206c6f6e6760601b60448201526064016109e6565b600f829055601081905560408051838152602081018390527fb45fbcb6061be03b34994516d5d8d4e38b21641de36e23c8f81217f153a4dbd891015b60405180910390a15050565b600082610f6083611c64565b119392505050565b6000610f766009600a6136fa565b610f84906305f5e1006135df565b905090565b6000546001600160a01b03163314610fb35760405162461bcd60e51b81526004016109e690613572565b600082118015610fc35750600081115b8015610fe65750600581610fd9846103e86135df565b610fe391906135bd565b10155b6110325760405162461bcd60e51b815260206004820152601a60248201527f5472616e73616374696f6e206c696d69747320746f6f206c6f7700000000000060448201526064016109e6565b80826110406009600a6136fa565b61104e906305f5e1006135df565b61105891906135df565b61106291906135bd565b60018190556040519081527f87d6222e218f03ac3f7ce8a320052f10fc0c196c444a04e403ccc4bbfb6a362490602001610f48565b6000546001600160a01b031633146110c15760405162461bcd60e51b81526004016109e690613572565b601682905560178190557fcbbf6bb708b8b7c4daa8d4e1088db9965d8167c3fcb6bc1a21147bbca33c12cf816110f88460646135df565b61110291906135bd565b604051908152602001610f48565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611190576001600160a01b038416600090815260046020908152604080832033845290915290205461116b908390613709565b6001600160a01b03851660009081526004602090815260408083203384529091529020555b61119b8484846121ee565b90505b9392505050565b60036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5461dead60009081527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c549091611201916135fe565b61120d6009600a6136fa565b61121b906305f5e1006135df565b610f849190613709565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161126191859061125c9086906135fe565b612581565b50600192915050565b6000546001600160a01b031633146112945760405162461bcd60e51b81526004016109e690613572565b601c805460ff60a81b1916600160a81b1790556040517fdd849d4f0ff64ab5cfef73f22ec29822c2713550b40bcded093282cc28f86c6090600090a1565b6000546001600160a01b031633146112fc5760405162461bcd60e51b81526004016109e690613572565b6001600160a01b0382166113225760405162461bcd60e51b81526004016109e690613720565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527ffa4a2b2457d2065452473bed7d55c8fa2f65fc4a1eff1ebdaf14a1b7281e777391015b60405180910390a25050565b6000610c5682600019610bef565b600043601a5414156113b25760016015546113ab9190613709565b9050610c56565b82156113ee57816113d257600e54600d546113cd91906135fe565b6113ab565b6064600f54600d546113e491906135df565b6113ab91906135bd565b8161140857600e54600d546114039190613709565b61119e565b6064600f54600d5461141a91906135df565b61119e91906135bd565b6000546001600160a01b0316331461144e5760405162461bcd60e51b81526004016109e690613572565b6001600160a01b0382166114745760405162461bcd60e51b81526004016109e690613720565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f5a8cf666a272afd6dec6788d33967c676fffa92e289eee1b38172982c4b4914d9101611376565b6000546001600160a01b031633146114f65760405162461bcd60e51b81526004016109e690613572565b8281146115455760405162461bcd60e51b815260206004820152601960248201527f4172726179206c656e6774687320646f6e2774206d617463680000000000000060448201526064016109e6565b601c805460ff60b01b198116909155600160b01b900460ff1660005b84811015611706576018600087878481811061157f5761157f613749565b905060200201602081019061159491906133e6565b6001600160a01b0316815260208101919091526040016000205460ff161580156115ec57508585828181106115cb576115cb613749565b90506020020160208101906115e091906133e6565b6001600160a01b031615155b61164e5760405162461bcd60e51b815260206004820152602d60248201527f43616e27742061697264726f7020746865206c697175696469747920706f6f6c60448201526c0206f722061646472657373203609c1b60648201526084016109e6565b6116ad3387878481811061166457611664613749565b905060200201602081019061167991906133e6565b6116856009600a6136fa565b87878681811061169757611697613749565b905060200201356116a891906135df565b6121ee565b5042600560008888858181106116c5576116c5613749565b90506020020160208101906116da91906133e6565b6001600160a01b03168152602081019190915260400160002055806116fe8161375f565b915050611561565b50601c805460ff60b01b1916600160b01b8315150217905560405133907faf1f3c8f96bb5b6a68b1ca0c51b6ba0250cf4a56f5d088071f5fcf710707727390600090a25050505050565b6000546001600160a01b0316331461177a5760405162461bcd60e51b81526004016109e690613572565b6000600860006117926000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556009816117d46000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556019816118166000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556004816118586000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d825290925290205561189b6126a5565b565b3360009081526004602090815260408083206001600160a01b03861684529091528120548281101561191f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109e6565b61192c3385858403612581565b5060019392505050565b600061119e3384846121ee565b6000546001600160a01b0316331461196d5760405162461bcd60e51b81526004016109e690613572565b60008111801561197f57506127108111155b6119d55760405162461bcd60e51b815260206004820152602160248201527f44697669736f72206d7573742062652067726561746572207468616e207a65726044820152606f60f81b60648201526084016109e6565b80826119e36009600a6136fa565b6119f1906305f5e1006135df565b6119fb91906135df565b611a0591906135bd565b60028190556040519081527fee4f0b388531b3b3cbe9a0fc02e17997304dcde94d38db4c65a1e896f7aca78890602001610f48565b6000546001600160a01b03163314611a645760405162461bcd60e51b81526004016109e690613572565b8015611aba57601c54600160a81b900460ff1615611aba5760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b60448201526064016109e6565b601c8054821515600160a01b0260ff60a01b199091161790556040517f96b2bfe55fa5f4032b9b4d922bd97bb17a7f025fce7fcecaefc955fd0111a96690611b0790831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611b3c5760405162461bcd60e51b81526004016109e690613572565b600082118015611b4c5750600081115b611ba45760405162461bcd60e51b815260206004820152602360248201527f44656e6f6d696e61746f7273206d75737420626520677265617465722074686160448201526206e20360ec1b60648201526084016109e6565b601c805460ff60b01b1916600160b01b8515150217905580611bc86009600a6136fa565b611bd6906305f5e1006135df565b611be091906135bd565b601e5581611bf06009600a6136fa565b611bfe906305f5e1006135df565b611c0891906135bd565b601d819055601e54601c5460408051928352602083019390935260ff600160b01b9091041615158183015290517faa199f5aab08ad4ddee0140c8e7d13a4bebb822550aeb3d16e5f7bc485fba0f99181900360600190a1505050565b6000611c6e6111a5565b6001600160a01b037f000000000000000000000000bcb24a73e352fbbdf37a4bd7053289d2131f3ec416600090815260036020526040902054611cb190846135df565b610c5691906135bd565b6000546001600160a01b03163314611ce55760405162461bcd60e51b81526004016109e690613572565b601c546001600160a01b03838116911614611d6657601c54600160a81b900460ff1615611d4a5760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b60448201526064016109e6565b601c80546001600160a01b0319166001600160a01b0384161790555b8015611df257601c546040516366812dbb60e11b81523060048201526001600160a01b037f000000000000000000000000bcb24a73e352fbbdf37a4bd7053289d2131f3ec4811660248301529091169063cd025b7690604401600060405180830381600087803b158015611dd957600080fd5b505af1158015611ded573d6000803e3d6000fd5b505050505b6040516001600160a01b038316907f1ccf813789899d0a52466f1f5c4cabc2820e6818ad4eaca73837528653d00c3c90600090a25050565b6000546001600160a01b03163314611e545760405162461bcd60e51b81526004016109e690613572565b7f000000000000000000000000bcb24a73e352fbbdf37a4bd7053289d2131f3ec46001600160a01b0316816001600160a01b031614158015611eb357506001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d14155b611f155760405162461bcd60e51b815260206004820152602d60248201527f43616e277420616c7465722074726164696e6720636f6e74726163747320696e60448201526c103a3434b99036b0b73732b91760991b60648201526084016109e6565b6001600160a01b03811660008181526008602090815260408083208054600160ff1991821681179092556019845282852080548216831790556009909352818420805490931617909155517f96aa4fc7394e306de889dcb1b2730f2ff39e53b54dd11275bf141447c97802299190a250565b6000546001600160a01b03163314611fb15760405162461bcd60e51b81526004016109e690613572565b600060086000611fc96000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff199093169290921790915560098161200b6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff199093169290921790915560198161204d6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff199093169290921790915560048161208f6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d82529092529020556120d381612719565b6001600160a01b031660009081526008602090815260408083208054600160ff199182168117909255600984528285208054821683179055601984528285208054909116909117905560048252808320737a250d5630b4cf539739df2c5dacb4c659f2488d845290915290206000199055565b6000546001600160a01b031633146121705760405162461bcd60e51b81526004016109e690613572565b6001600160a01b0382166121965760405162461bcd60e51b81526004016109e690613720565b6001600160a01b038216600081815260096020908152604091829020805460ff191685151590811790915591519182527fe00fbc488e0ecd4458af11cf15f84d29b2cf621662aa8f46a48f3d29de95123d9101611376565b6001600160a01b03831660009081526003602052604081205482111561224d5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016109e6565b6000821161229d5760405162461bcd60e51b815260206004820152601760248201527f5a65726f20616d6f756e74207472616e7366657272656400000000000000000060448201526064016109e6565b601f5460ff16156122ba576122b3848484612803565b905061119e565b6122c484836128b8565b6001600160a01b03831660009081526018602052604090205460ff161580156122f857506001600160a01b03831661dead14155b15612327576001600160a01b03831660009081526009602052604090205460ff16612327576123278383612925565b601a546123b9576001600160a01b03841660009081526019602052604090205460ff168061236d57506001600160a01b03831660009081526019602052604090205460ff165b6123b95760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e00000000000060448201526064016109e6565b6001600160a01b038416600090815260036020526040812080548492906123e1908490613709565b90915550506001600160a01b03841660009081526008602052604081205460ff1615801561242857506001600160a01b03841660009081526008602052604090205460ff16155b612432578261243d565b61243d8585856129af565b905061244884612cf8565b1561245c57821561245c5761245c83612da0565b6001600160a01b038416600090815260036020526040812080548392906124849084906135fe565b9091555050601a54151580156124a35750601c54600160a01b900460ff165b1561252957601c5460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052909116906348760858906064016020604051808303816000875af1158015612503573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612527919061377a565b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161256e91815260200190565b60405180910390a3506001949350505050565b6001600160a01b0383166125e35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109e6565b6001600160a01b0382166126445760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109e6565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031633146126cf5760405162461bcd60e51b81526004016109e690613572565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146127435760405162461bcd60e51b81526004016109e690613572565b6001600160a01b0381166127a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e6565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831660009081526003602052604081208054839190839061282d908490613709565b90915550506001600160a01b0383166000908152600360205260408120805484929061285a9084906135fe565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128a691815260200190565b60405180910390a35060019392505050565b600154811115806128e157506001600160a01b03821660009081526009602052604090205460ff165b6129215760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016109e6565b5050565b6002546001600160a01b038316600090815260036020526040902054819061294e9084906135fe565b11156129aa5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b60648201526084016109e6565b505050565b6001600160a01b0383166000908152601860205260408120548190819060ff16158015612a0057506010546001600160a01b03871660009081526005602052604090205442916129fe916135fe565b115b6001600160a01b03861660009081526018602052604090205490915060ff168015612a2d57506000601154115b15612bdc576000807f000000000000000000000000bcb24a73e352fbbdf37a4bd7053289d2131f3ec46001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab791906137b3565b506014549193509150600090879060ff16612ad25782612ad4565b835b6001600160701b0316612ae791906135fe565b612af3886103e86135df565b612afd91906135bd565b6012546001600160a01b038b16600090815260066020526040902054919250612b25916135fe565b421115612b53576001600160a01b038916600090815260066020908152604080832042905560079091528120555b6001600160a01b03891660009081526007602052604081208054839290612b7b9084906135fe565b90915550506013546001600160a01b038a1660009081526007602052604090205410612bd8576015546064601154600d548a612bb791906135df565b612bc191906135df565b612bcb91906135bd565b612bd591906135bd565b94505b5050505b81612c21576015546001600160a01b038616600090815260186020526040902054612c0a9060ff1683611390565b612c1490866135df565b612c1e91906135bd565b91505b6001600160a01b03861660009081526018602052604090205460ff168015612c5f57506001600160a01b038516600090815260056020526040902054155b15612c80576001600160a01b03851660009081526005602052604090204290555b3060009081526003602052604081208054849290612c9f9084906135fe565b909155505060405182815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3612cee8285613709565b9695505050505050565b3360009081526018602052604081205460ff16158015612d2857503360009081526008602052604090205460ff16155b8015612d375750601f5460ff16155b8015612d4c5750601c54600160b01b900460ff165b8015612d7057506001600160a01b03821660009081526018602052604090205460ff165b8015612d8d5750601e543060009081526003602052604090205410155b8015610c5657506000600d541192915050565b601f805460ff19166001179055601d546000908210612dc157601d54612dc3565b815b30600090815260036020526040902054909150811115612def5750306000908152600360205260409020545b6000612dff601654601754610f54565b612e0b57600a54612e0e565b60005b905060006002600d548385612e2391906135df565b612e2d91906135bd565b612e3791906135bd565b9050612e438184613709565b60408051600280825260608201835292955060009290916020830190803683370190505090503081600081518110612e7d57612e7d613749565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612efb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1f9190613803565b81600181518110612f3257612f32613749565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac94790612f97908790600090869030904290600401613820565b600060405180830381600087803b158015612fb157600080fd5b505af1158015612fc5573d6000803e3d6000fd5b5047925060009150612fda90506002866135bd565b600d54612fe79190613709565b90506000600282612ff888866135df565b61300291906135bd565b61300c91906135bd565b9050600082600b548561301f91906135df565b61302991906135bd565b9050600061303782846135fe565b6130419086613709565b905086156131555760405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b037f00000000000000000000000073fa606806bb025a70f93a863b0c0fe07aac4876811660848301524260a48301527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063f305d71990859060c40160606040518083038185885af11580156130f3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131189190613891565b505060408051858152602081018a90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b81156131b3576040516001600160a01b037f00000000000000000000000073fa606806bb025a70f93a863b0c0fe07aac4876169083156108fc029084906000818181858888f193505050501580156131b1573d6000803e3d6000fd5b505b8015613211576040516001600160a01b037f0000000000000000000000003002f1fcd7872abde7589916244b8999d726ecb1169082156108fc029083906000818181858888f1935050505015801561320f573d6000803e3d6000fd5b505b5050601f805460ff191690555050505050505050565b600080600080600060a0868803121561323f57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b8181101561328f57858101830151858201604001528201613273565b818111156132a1576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146132cc57600080fd5b50565b600080604083850312156132e257600080fd5b82356132ed816132b7565b946020939093013593505050565b80151581146132cc57600080fd5b6000806000806080858703121561331f57600080fd5b843593506020850135925060408501359150606085013561333f816132fb565b939692955090935050565b6000806040838503121561335d57600080fd5b50508035926020909101359150565b60008060006060848603121561338157600080fd5b833561338c816132b7565b9250602084013561339c816132b7565b929592945050506040919091013590565b600080604083850312156133c057600080fd5b82356133cb816132b7565b915060208301356133db816132fb565b809150509250929050565b6000602082840312156133f857600080fd5b813561119e816132b7565b6000806040838503121561341657600080fd5b82356133cb816132fb565b60008083601f84011261343357600080fd5b50813567ffffffffffffffff81111561344b57600080fd5b6020830191508360208260051b850101111561346657600080fd5b9250929050565b6000806000806040858703121561348357600080fd5b843567ffffffffffffffff8082111561349b57600080fd5b6134a788838901613421565b909650945060208701359150808211156134c057600080fd5b506134cd87828801613421565b95989497509550505050565b6000602082840312156134eb57600080fd5b813561119e816132fb565b60008060006060848603121561350b57600080fd5b8335613516816132fb565b95602085013595506040909401359392505050565b60006020828403121561353d57600080fd5b5035919050565b6000806040838503121561355757600080fd5b8235613562816132b7565b915060208301356133db816132b7565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000826135da57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156135f9576135f96135a7565b500290565b60008219821115613611576136116135a7565b500190565b600181815b80851115613651578160001904821115613637576136376135a7565b8085161561364457918102915b93841c939080029061361b565b509250929050565b60008261366857506001610c56565b8161367557506000610c56565b816001811461368b5760028114613695576136b1565b6001915050610c56565b60ff8411156136a6576136a66135a7565b50506001821b610c56565b5060208310610133831016604e8410600b84101617156136d4575081810a610c56565b6136de8383613616565b80600019048211156136f2576136f26135a7565b029392505050565b600061119e60ff841683613659565b60008282101561371b5761371b6135a7565b500390565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415613773576137736135a7565b5060010190565b60006020828403121561378c57600080fd5b815161119e816132fb565b80516001600160701b03811681146137ae57600080fd5b919050565b6000806000606084860312156137c857600080fd5b6137d184613797565b92506137df60208501613797565b9150604084015163ffffffff811681146137f857600080fd5b809150509250925092565b60006020828403121561381557600080fd5b815161119e816132b7565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138705784516001600160a01b03168352938301939183019160010161384b565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156138a657600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212209a3bdba98ea6d67f725b8fb579e4f47c58249b420a7095150a10d9cd8d84ff0e64736f6c634300080c0033

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

00000000000000000000000073fa606806bb025a70f93a863b0c0fe07aac487600000000000000000000000073fa606806bb025a70f93a863b0c0fe07aac48760000000000000000000000003002f1fcd7872abde7589916244b8999d726ecb1

-----Decoded View---------------
Arg [0] : _lp (address): 0x73fA606806BB025a70f93A863b0c0Fe07AAC4876
Arg [1] : _marketing (address): 0x73fA606806BB025a70f93A863b0c0Fe07AAC4876
Arg [2] : _dev (address): 0x3002f1Fcd7872ABde7589916244B8999D726ecB1

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000073fa606806bb025a70f93a863b0c0fe07aac4876
Arg [1] : 00000000000000000000000073fa606806bb025a70f93a863b0c0fe07aac4876
Arg [2] : 0000000000000000000000003002f1fcd7872abde7589916244b8999d726ecb1


Deployed Bytecode Sourcemap

13443:20372:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29028:191;;;;;;;;;;;;;:::i;:::-;;15592:49;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;15592:49:0;;;;;;;;30383:696;;;;;;;;;;-1:-1:-1;30383:696:0;;;;;:::i;:::-;;:::i;17080:71::-;;;;;;;;;;-1:-1:-1;17143:5:0;;;;;;;;;;;;-1:-1:-1;;;17143:5:0;;;;17080:71;;;;;;;:::i;17486:216::-;;;;;;;;;;-1:-1:-1;17486:216:0;;;;;:::i;:::-;;:::i;:::-;;;1878:14:1;;1871:22;1853:41;;1841:2;1826:18;17486:216:0;1713:187:1;28562:458:0;;;;;;;;;;-1:-1:-1;28562:458:0;;;;;:::i;:::-;;:::i;27967:587::-;;;;;;;;;;-1:-1:-1;27967:587:0;;;;;:::i;:::-;;:::i;25830:150::-;;;;;;;;;;-1:-1:-1;25830:150:0;;;;;:::i;:::-;;:::i;16828:88::-;;;;;;;;;;;;;:::i;29227:309::-;;;;;;;;;;-1:-1:-1;29227:309:0;;;;;:::i;:::-;;:::i;31525:246::-;;;;;;;;;;-1:-1:-1;31525:246:0;;;;;:::i;:::-;;:::i;19062:341::-;;;;;;;;;;-1:-1:-1;19062:341:0;;;;;:::i;:::-;;:::i;14850:42::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3357:32:1;;;3339:51;;3327:2;3312:18;14850:42:0;3193:203:1;25482:176:0;;;;;;;;;;;;;:::i;16922:71::-;;;;;;;;;;-1:-1:-1;16922:71:0;;13698:1;3543:36:1;;3531:2;3516:18;16922:71:0;3401:184:1;17710:213:0;;;;;;;;;;-1:-1:-1;17710:213:0;;;;;:::i;:::-;;:::i;27449:128::-;;;;;;;;;;;;;:::i;31779:265::-;;;;;;;;;;-1:-1:-1;31779:265:0;;;;;:::i;:::-;;:::i;18768:122::-;;;;;;;;;;-1:-1:-1;18768:122:0;;;;;:::i;:::-;;:::i;15394:27::-;;;;;;;;;;;;;;;;21407:345;;;;;;;;;;-1:-1:-1;21407:345:0;;;;;:::i;:::-;;:::i;29839:254::-;;;;;;;;;;-1:-1:-1;29839:254:0;;;;;:::i;:::-;;:::i;32049:804::-;;;;;;;;;;-1:-1:-1;32049:804:0;;;;;:::i;:::-;;:::i;15555:30::-;;;;;;;;;;-1:-1:-1;15555:30:0;;;;-1:-1:-1;;;15555:30:0;;;;;;14956:44;;;;;;;;;;;;;;;17234:105;;;;;;;;;;-1:-1:-1;17234:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;17318:18:0;17300:7;17318:18;;;:9;:18;;;;;;;17234:105;26500:285;;;;;;;;;;;;;:::i;15465:36::-;;;;;;;;;;-1:-1:-1;15465:36:0;;;;-1:-1:-1;;;15465:36:0;;;;;;13887:55;;;;;;;;;;;;;;;;15431:27;;;;;;;;;;-1:-1:-1;15431:27:0;;;;-1:-1:-1;;;;;15431:27:0;;;17157:71;;;;;;;;;;-1:-1:-1;17200:7:0;11995:6;-1:-1:-1;;;;;11995:6:0;17157:71;16828:88;13956:56;;;;;;;;;;;;;;;;16999:75;;;;;;;;;;-1:-1:-1;17064:7:0;;;;;;;;;;;;-1:-1:-1;;;17064:7:0;;;;16999:75;;17931:411;;;;;;;;;;-1:-1:-1;17931:411:0;;;;;:::i;:::-;;:::i;14899:50::-;;;;;;;;;;;;;;;15324:29;;;;;;;;;;;;;;;18898:156;;;;;;;;;;-1:-1:-1;18898:156:0;;;;;:::i;:::-;;:::i;29548:283::-;;;;;;;;;;-1:-1:-1;29548:283:0;;;;;:::i;:::-;;:::i;15362:25::-;;;;;;;;;;;;;;;;15508:38;;;;;;;;;;-1:-1:-1;15508:38:0;;;;-1:-1:-1;;;15508:38:0;;;;;;26793:242;;;;;;;;;;-1:-1:-1;26793:242:0;;;;;:::i;:::-;;:::i;31087:430::-;;;;;;;;;;-1:-1:-1;31087:430:0;;;;;:::i;:::-;;:::i;25666:156::-;;;;;;;;;;-1:-1:-1;25666:156:0;;;;;:::i;:::-;;:::i;27047:390::-;;;;;;;;;;-1:-1:-1;27047:390:0;;;;;:::i;:::-;;:::i;17345:133::-;;;;;;;;;;-1:-1:-1;17345:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;17447:19:0;;;17429:7;17447:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17345:133;27589:370;;;;;;;;;;-1:-1:-1;27589:370:0;;;;;:::i;:::-;;:::i;25988:504::-;;;;;;;;;;-1:-1:-1;25988:504:0;;;;;:::i;:::-;;:::i;30101:274::-;;;;;;;;;;-1:-1:-1;30101:274:0;;;;;:::i;:::-;;:::i;15656:49::-;;;;;;;;;;;;;;;;15093:34;;;;;;;;;;;;;;;29028:191;12142:6;;-1:-1:-1;;;;;12142:6:0;6458:10;12142:22;12134:67;;;;-1:-1:-1;;;12134:67:0;;;;;;;:::i;:::-;;;;;;;;;29085:10:::1;::::0;:15;29076:25:::1;;;::::0;::::1;;29125:12;29112:10;:25:::0;29163:15:::1;29148:12;:30:::0;29194:17:::1;::::0;::::1;::::0;-1:-1:-1;;29194:17:0::1;29028:191::o:0;30383:696::-;12142:6;;-1:-1:-1;;;;;12142:6:0;6458:10;12142:22;12134:67;;;;-1:-1:-1;;;12134:67:0;;;;;;;:::i;:::-;30572:13;30546:17:::1;30562:1;30572:13:::0;30546:17:::1;:::i;:::-;30545:23;::::0;30567:1:::1;30545:23;:::i;:::-;:40;30537:105;;;::::0;-1:-1:-1;;;30537:105:0;;8732:2:1;30537:105:0::1;::::0;::::1;8714:21:1::0;8771:2;8751:18;;;8744:30;8810:34;8790:18;;;8783:62;-1:-1:-1;;;8861:18:1;;;8854:50;8921:19;;30537:105:0::1;8530:416:1::0;30537:105:0::1;30653:12;:28:::0;;;30692:12:::1;:28:::0;;;30731:6:::1;:16:::0;;;30758:8:::1;:20:::0;;;30740:7;30800:29:::1;30707:13:::0;30668;30800:29:::1;:::i;:::-;:39;;;;:::i;:::-;30789:8;:50:::0;30850:14:::1;:32:::0;;;30913:18:::1;30930:1;30867:15:::0;30913:18:::1;:::i;:::-;30901:8;;:30;;30893:56;;;::::0;-1:-1:-1;;;30893:56:0;;9286:2:1;30893:56:0::1;::::0;::::1;9268:21:1::0;9325:2;9305:18;;;9298:30;-1:-1:-1;;;9344:18:1;;;9337:43;9397:18;;30893:56:0::1;9084:337:1::0;30893:56:0::1;30980:8;;30968;;:20;;30960:52;;;::::0;-1:-1:-1;;;30960:52:0;;9628:2:1;30960:52:0::1;::::0;::::1;9610:21:1::0;9667:2;9647:18;;;9640:30;-1:-1:-1;;;9686:18:1;;;9679:49;9745:18;;30960:52:0::1;9426:343:1::0;30960:52:0::1;31036:8;::::0;31046:14:::1;::::0;31062:8:::1;::::0;31028:43:::1;::::0;;9976:25:1;;;10032:2;10017:18;;10010:34;;;;10060:18;;;10053:34;31028:43:0;::::1;::::0;;;;9964:2:1;31028:43:0;;::::1;30383:696:::0;;;;;:::o;17486:216::-;17590:10;17561:4;17578:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17578:32:0;;;;;;;;;;:41;;;17635:37;17561:4;;17578:32;;17635:37;;;;17613:6;160:25:1;;148:2;133:18;;14:177;17635:37:0;;;;;;;;-1:-1:-1;17690:4:0;17486:216;;;;;:::o;28562:458::-;12142:6;;-1:-1:-1;;;;;12142:6:0;6458:10;12142:22;12134:67;;;;-1:-1:-1;;;12134:67:0;;;;;;;:::i;:::-;28705:2:::1;28691:10;:16;;:31;;;;;28719:3;28711:4;:11;;28691:31;:69;;;;-1:-1:-1::0;28727:9:0;;;:32:::1;;;28748:11;;28740:4;:19;;28727:32;28691:91;;;;;28775:7;28764;:18;;28691:91;28683:128;;;::::0;-1:-1:-1;;;28683:128:0;;10300:2:1;28683:128:0::1;::::0;::::1;10282:21:1::0;10339:2;10319:18;;;10312:30;10378:26;10358:18;;;10351:54;10422:18;;28683:128:0::1;10098:348:1::0;28683:128:0::1;28822:11;:18:::0;;;28851:14:::1;:24:::0;;;28886:17:::1;:30:::0;;;28927:16:::1;:28:::0;;-1:-1:-1;;28927:28:0::1;::::0;::::1;;;::::0;;28971:41:::1;::::0;;9976:25:1;;;10032:2;10017:18;;10010:34;;;10060:18;;;10053:34;;;28971:41:0::1;::::0;9964:2:1;9949:18;28971:41:0::1;;;;;;;28562:458:::0;;;;:::o;27967:587::-;12142:6;;-1:-1:-1;;;;;12142:6:0;6458:10;12142:22;12134:67;;;;-1:-1:-1;;;12134:67:0;;;;;;;:::i;:::-;28118:3:::1;28111;28087:20;28076:8;;:31;;;;:::i;:::-;28075:39;;;;:::i;:::-;:46;;28067:76;;;::::0;-1:-1:-1;;;28067:76:0;;10653:2:1;28067:76:0::1;::::0;::::1;10635:21:1::0;10692:2;10672:18;;;10665:30;-1:-1:-1;;;10711:18:1;;;10704:47;10768:18;;28067:76:0::1;10451:341:1::0;28067:76:0::1;28186:3;28162:20;:27;;28154:74;;;::::0;-1:-1:-1;;;28154:74:0;;10999:2:1;28154:74:0::1;::::0;::::1;10981:21:1::0;11038:2;11018:18;;;11011:30;11077:34;11057:18;;;11050:62;-1:-1:-1;;;11128:18:1;;;11121:32;11170:19;;28154:74:0::1;10797:398:1::0;28154:74:0::1;28247:11;::::0;:16;;:55:::1;;;28291:11;;28267:20;:35;;28247:55;28239:110;;;::::0;-1:-1:-1;;;28239:110:0;;11402:2:1;28239:110:0::1;::::0;::::1;11384:21:1::0;11441:2;11421:18;;;11414:30;11480:34;11460:18;;;11453:62;-1:-1:-1;;;11531:18:1;;;11524:40;11581:19;;28239:110:0::1;11200:406:1::0;28239:110:0::1;28379:6;28368:7;:17;;28360:50;;;::::0;-1:-1:-1;;;28360:50:0;;11813:2:1;28360:50:0::1;::::0;::::1;11795:21:1::0;11852:2;11832:18;;;11825:30;-1:-1:-1;;;11871:18:1;;;11864:50;11931:18;;28360:50:0::1;11611:344:1::0;28360:50:0::1;28421:11;:34:::0;;;28466:10:::1;:20:::0;;;28502:44:::1;::::0;;12134:25:1;;;12190:2;12175:18;;12168:34;;;28502:44:0::1;::::0;12107:18:1;28502:44:0::1;;;;;;;;27967:587:::0;;:::o;25830:150::-;25910:4;25966:6;25934:29;25954:8;25934:19;:29::i;:::-;:38;;25830:150;-1:-1:-1;;;25830:150:0:o;16828:88::-;16883:7;13755:15;13698:1;13755:2;:15;:::i;:::-;13740:31;;:11;:31;:::i;:::-;16894:19;;16828:88;:::o;29227:309::-;12142:6;;-1:-1:-1;;;;;12142:6:0;6458:10;12142:22;12134:67;;;;-1:-1:-1;;;12134:67:0;;;;;;;:::i;:::-;29333:1:::1;29321:9;:13;:28;;;;;29348:1;29338:7;:11;29321:28;:65;;;;-1:-1:-1::0;29385:1:0::1;29374:7:::0;29354:16:::1;:9:::0;29366:4:::1;29354:16;:::i;:::-;29353:28;;;;:::i;:::-;:33;;29321:65;29313:104;;;::::0;-1:-1:-1;;;29313:104:0;;13798:2:1;29313:104:0::1;::::0;::::1;13780:21:1::0;13837:2;13817:18;;;13810:30;13876:28;13856:18;;;13849:56;13922:18;;29313:104:0::1;13596:350:1::0;29313:104:0::1;29472:7:::0;29459:9;13755:15:::1;13698:1;13755:2;:15;:::i;:::-;13740:31;::::0;:11:::1;:31;:::i;:::-;29444:24;;;;:::i;:::-;29443:36;;;;:::i;:::-;29428:12;:51:::0;;;29495:33:::1;::::0;160:25:1;;;29495:33:0::1;::::0;148:2:1;133:18;29495:33:0::1;14:177:1::0;31525:246:0;12142:6;;-1:-1:-1;;;;;12142:6:0;6458:10;12142:22;12134:67;;;;-1:-1:-1;;;12134:67:0;;;;;;;:::i;:::-;31622:15:::1;:25:::0;;;31658:26:::1;:41:::0;;;31715:48:::1;31687:12:::0;31734:13:::1;31640:7:::0;31744:3:::1;31734:13;:::i;:::-;:28;;;;:::i;:::-;31715:48;::::0;160:25:1;;;148:2;133:18;31715:48:0::1;14:177:1::0;19062:341:0;-1:-1:-1;;;;;19182:19:0;;19162:4;19182:19;;;:11;:19;;;;;;;;19202:10;19182:31;;;;;;;;-1:-1:-1;;19182:52:0;19179:157;;-1:-1:-1;;;;;19284:19:0;;;;;;:11;:19;;;;;;;;19304:10;19284:31;;;;;;;;:40;;19318:6;;19284:40;:::i;:::-;-1:-1:-1;;;;;19250:19:0;;;;;;:11;:19;;;;;;;;19270:10;19250:31;;;;;;;:74;19179:157;19355:40;19369:6;19377:9;19388:6;19355:13;:40::i;:::-;19348:47;;19062:341;;;;;;:::o;25482:176::-;17318:9;:18;;;;13546:42;25535:7;17318:18;;;;;25535:7;;25578:71;;;:::i;:::-;13755:15;13698:1;13755:2;:15;:::i;:::-;13740:31;;:11;:31;:::i;:::-;25562:88;;;;:::i;17710:213::-;17826:10;17800:4;17847:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17847:32:0;;;;;;;;;;17800:4;;17817:76;;17838:7;;17847:45;;17882:10;;17847:45;:::i;:::-;17817:8;:76::i;:::-;-1:-1:-1;17911:4:0;17710:213;;;;:::o;27449:128::-;12142:6;;-1:-1:-1;;;;;12142:6:0;6458:10;12142:22;12134:67;;;;-1:-1:-1;;;12134:67:0;;;;;;;:::i;:::-;27508:18:::1;:25:::0;;-1:-1:-1;;;;27508:25:0::1;-1:-1:-1::0;;;27508:25:0::1;::::0;;27549:20:::1;::::0;::::1;::::0;27508:25;;27549:20:::1;27449:128::o:0;31779:265::-;12142:6;;-1:-1:-1;;;;;12142:6:0;6458:10;12142:22;12134:67;;;;-1:-1:-1;;;12134:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31873:51:0;::::1;31865:79;;;;-1:-1:-1::0;;;31865:79:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31955:21:0;::::1;;::::0;;;:14:::1;:21;::::0;;;;;;;;:32;;-1:-1:-1;;31955:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32003:33;;1853:41:1;;;32003:33:0::1;::::0;1826:18:1;32003:33:0::1;;;;;;;;31779:265:::0;;:::o;18768:122::-;18823:4;18847:35;18855:7;-1:-1:-1;;18847:7:0;:35::i;21407:345::-;21482:7;21519:12;21505:10;;:26;21502:60;;;21558:1;21541:14;;:18;;;;:::i;:::-;21534:25;;;;21502:60;21576:7;21572:87;;;21592:12;:67;;21651:8;;21640;;:19;;;;:::i;:::-;21592:67;;;21634:3;21619:11;;21608:8;;:22;;;;:::i;:::-;21607:30;;;;:::i;21572:87::-;21677:12;:67;;21736:8;;21725;;:19;;;;:::i;:::-;21677:67;;;21719:3;21704:11;;21693:8;;:22;;;;:::i;:::-;21692:30;;;;:::i;29839:254::-;12142:6;;-1:-1:-1;;;;;12142:6:0;6458:10;12142:22;12134:67;;;;-1:-1:-1;;;12134:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29930:52:0;::::1;29922:80;;;;-1:-1:-1::0;;;29922:80:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30013:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;;;;:28;;-1:-1:-1;;30013:28:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30057;;1853:41:1;;;30057:28:0::1;::::0;1826:18:1;30057:28:0::1;1713:187:1::0;32049:804:0;12142:6;;-1:-1:-1;;;;;12142:6:0;6458:10;12142:22;12134:67;;;;-1:-1:-1;;;12134:67:0;;;;;;;:::i;:::-;32168:35;;::::1;32160:73;;;::::0;-1:-1:-1;;;32160:73:0;;14627:2:1;32160:73:0::1;::::0;::::1;14609:21:1::0;14666:2;14646:18;;;14639:30;14705:27;14685:18;;;14678:55;14750:18;;32160:73:0::1;14425:349:1::0;32160:73:0::1;32264:11;::::0;;-1:-1:-1;;;;32286:19:0;::::1;::::0;;;-1:-1:-1;;;32264:11:0;::::1;;;-1:-1:-1::0;32402:368:0::1;32422:21:::0;;::::1;32402:368;;;32474:14;:29;32489:10;;32500:1;32489:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32474:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;32474:29:0;;::::1;;32473:30;:93:::0;::::1;;;;32507:10;;32518:1;32507:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32507:59:0::1;::::0;::::1;32473:93;32465:151;;;::::0;-1:-1:-1;;;32465:151:0;;15113:2:1;32465:151:0::1;::::0;::::1;15095:21:1::0;15152:2;15132:18;;;15125:30;15191:34;15171:18;;;15164:62;-1:-1:-1;;;15242:18:1;;;15235:43;15295:19;;32465:151:0::1;14911:409:1::0;32465:151:0::1;32631:72;32645:10;32657;;32668:1;32657:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;32686:15;13698:1;32686:2;:15;:::i;:::-;32672:7;;32680:1;32672:10;;;;;;;:::i;:::-;;;;;;;:30;;;;:::i;:::-;32631:13;:72::i;:::-;;32743:15;32718:7;:22;32726:10;;32737:1;32726:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32718:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;32718:22:0;:40;32445:3;::::1;::::0;::::1;:::i;:::-;;;;32402:368;;;-1:-1:-1::0;32780:11:0::1;:26:::0;;-1:-1:-1;;;;32780:26:0::1;-1:-1:-1::0;;;32780:26:0;::::1;;;;::::0;;32822:23:::1;::::0;32834:10:::1;::::0;32822:23:::1;::::0;-1:-1:-1;;32822:23:0::1;32149:704;32049:804:::0;;;;:::o;26500:285::-;12142:6;;-1:-1:-1;;;;;12142:6:0;6458:10;12142:22;12134:67;;;;-1:-1:-1;;;12134:67:0;;;;;;;:::i;:::-;26597:5:::1;26574:11;:20;26586:7;11968::::0;11995:6;-1:-1:-1;;;;;11995:6:0;;11930:79;26586:7:::1;-1:-1:-1::0;;;;;26574:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26574:20:0;;;:28;;;::::1;;-1:-1:-1::0;;26574:28:0;;::::1;::::0;;;::::1;::::0;;;26613:15:::1;-1:-1:-1::0;26629:7:0::1;11968::::0;11995:6;-1:-1:-1;;;;;11995:6:0;;11930:79;26629:7:::1;-1:-1:-1::0;;;;;26613:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26613:24:0;;;:32;;;::::1;;-1:-1:-1::0;;26613:32:0;;::::1;::::0;;;::::1;::::0;;;26656:18:::1;-1:-1:-1::0;26675:7:0::1;11968::::0;11995:6;-1:-1:-1;;;;;11995:6:0;;11930:79;26675:7:::1;-1:-1:-1::0;;;;;26656:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26656:27:0;;;:35;;;::::1;;-1:-1:-1::0;;26656:35:0;;::::1;::::0;;;::::1;::::0;;;26702:11:::1;-1:-1:-1::0;26714:7:0::1;11968::::0;11995:6;-1:-1:-1;;;;;11995:6:0;;11930:79;26714:7:::1;-1:-1:-1::0;;;;;26702:20:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;26702:20:0;;;15173:42:::1;26702:35:::0;;;;;;;:39;26752:25:::1;:23;:25::i;:::-;26500:285::o:0;17931:411::-;18082:10;18026:4;18070:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;18070:32:0;;;;;;;;;;18121:35;;;;18113:85;;;;-1:-1:-1;;;18113:85:0;;15667:2:1;18113:85:0;;;15649:21:1;15706:2;15686:18;;;15679:30;15745:34;15725:18;;;15718:62;-1:-1:-1;;;15796:18:1;;;15789:35;15841:19;;18113:85:0;15465:401:1;18113:85:0;18234:65;18243:10;18255:7;18283:15;18264:16;:34;18234:8;:65::i;:::-;-1:-1:-1;18330:4:0;;17931:411;-1:-1:-1;;;17931:411:0:o;18898:156::-;18978:4;19002:44;19016:10;19028:9;19039:6;19002:13;:44::i;29548:283::-;12142:6;;-1:-1:-1;;;;;12142:6:0;6458:10;12142:22;12134:67;;;;-1:-1:-1;;;12134:67:0;;;;;;;:::i;:::-;29656:1:::1;29646:7;:11;:31;;;;;29672:5;29661:7;:16;;29646:31;29638:77;;;::::0;-1:-1:-1;;;29638:77:0;;16073:2:1;29638:77:0::1;::::0;::::1;16055:21:1::0;16112:2;16092:18;;;16085:30;16151:34;16131:18;;;16124:62;-1:-1:-1;;;16202:18:1;;;16195:31;16243:19;;29638:77:0::1;15871:397:1::0;29638:77:0::1;29772:7:::0;29759:9;13755:15:::1;13698:1;13755:2;:15;:::i;:::-;13740:31;::::0;:11:::1;:31;:::i;:::-;29744:24;;;;:::i;:::-;29743:36;;;;:::i;:::-;29726:14;:53:::0;;;29795:28:::1;::::0;160:25:1;;;29795:28:0::1;::::0;148:2:1;133:18;29795:28:0::1;14:177:1::0;26793:242:0;12142:6;;-1:-1:-1;;;;;12142:6:0;6458:10;12142:22;12134:67;;;;-1:-1:-1;;;12134:67:0;;;;;;;:::i;:::-;26872:8:::1;26868:78;;;26904:18;::::0;-1:-1:-1;;;26904:18:0;::::1;;;26903:19;26895:51;;;::::0;-1:-1:-1;;;26895:51:0;;16475:2:1;26895:51:0::1;::::0;::::1;16457:21:1::0;16514:2;16494:18;;;16487:30;-1:-1:-1;;;16533:18:1;;;16526:49;16592:18;;26895:51:0::1;16273:343:1::0;26895:51:0::1;26957:17;:28:::0;;;::::1;;-1:-1:-1::0;;;26957:28:0::1;-1:-1:-1::0;;;;26957:28:0;;::::1;;::::0;;27001:26:::1;::::0;::::1;::::0;::::1;::::0;26977:8;1878:14:1;1871:22;1853:41;;1841:2;1826:18;;1713:187;27001:26:0::1;;;;;;;;26793:242:::0;:::o;31087:430::-;12142:6;;-1:-1:-1;;;;;12142:6:0;6458:10;12142:22;12134:67;;;;-1:-1:-1;;;12134:67:0;;;;;;;:::i;:::-;31231:1:::1;31216:12;:16;:39;;;;;31254:1;31236:15;:19;31216:39;31208:87;;;::::0;-1:-1:-1;;;31208:87:0;;16823:2:1;31208:87:0::1;::::0;::::1;16805:21:1::0;16862:2;16842:18;;;16835:30;16901:34;16881:18;;;16874:62;-1:-1:-1;;;16952:18:1;;;16945:33;16995:19;;31208:87:0::1;16621:399:1::0;31208:87:0::1;31306:11;:22:::0;;-1:-1:-1;;;;31306:22:0::1;-1:-1:-1::0;;;31306:22:0;::::1;;;;::::0;;31368:15;13755::::1;13698:1;13755:2;:15;:::i;:::-;13740:31;::::0;:11:::1;:31;:::i;:::-;31353:30;;;;:::i;:::-;31339:11;:44:::0;31425:12;13755:15:::1;13698:1;13755:2;:15;:::i;:::-;13740:31;::::0;:11:::1;:31;:::i;:::-;31410:27;;;;:::i;:::-;31394:13;:43:::0;;;31469:11:::1;::::0;31497::::1;::::0;31453:56:::1;::::0;;17221:25:1;;;17277:2;17262:18;;17255:34;;;;31497:11:0::1;-1:-1:-1::0;;;31497:11:0;;::::1;;17332:14:1::0;17325:22;17305:18;;;17298:50;31453:56:0;;::::1;::::0;;;;17209:2:1;31453:56:0;;::::1;31087:430:::0;;;:::o;25666:156::-;25734:7;25792:22;:20;:22::i;:::-;-1:-1:-1;;;;;25783:4:0;17318:18;17300:7;17318:18;;;:9;:18;;;;;;25762:26;;:8;:26;:::i;:::-;25761:53;;;;:::i;27047:390::-;12142:6;;-1:-1:-1;;;;;12142:6:0;6458:10;12142:22;12134:67;;;;-1:-1:-1;;;12134:67:0;;;;;;;:::i;:::-;27160:9:::1;::::0;-1:-1:-1;;;;;27137:33:0;;::::1;27160:9:::0;::::1;27137:33;27133:166;;27195:18;::::0;-1:-1:-1;;;27195:18:0;::::1;;;27194:19;27186:51;;;::::0;-1:-1:-1;;;27186:51:0;;16475:2:1;27186:51:0::1;::::0;::::1;16457:21:1::0;16514:2;16494:18;;;16487:30;-1:-1:-1;;;16533:18:1;;;16526:49;16592:18;;27186:51:0::1;16273:343:1::0;27186:51:0::1;27252:9;:35:::0;;-1:-1:-1;;;;;;27252:35:0::1;-1:-1:-1::0;;;;;27252:35:0;::::1;;::::0;;27133:166:::1;27313:5;27309:68;;;27333:9;::::0;:44:::1;::::0;-1:-1:-1;;;27333:44:0;;27365:4:::1;27333:44;::::0;::::1;17571:34:1::0;-1:-1:-1;;;;;27372:4:0::1;17641:15:1::0;;17621:18;;;17614:43;27333:9:0;;::::1;::::0;:23:::1;::::0;17506:18:1;;27333:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27309:68;27403:26;::::0;-1:-1:-1;;;;;27403:26:0;::::1;::::0;::::1;::::0;;;::::1;27047:390:::0;;:::o;27589:370::-;12142:6;;-1:-1:-1;;;;;12142:6:0;6458:10;12142:22;12134:67;;;;-1:-1:-1;;;12134:67:0;;;;;;;:::i;:::-;27689:4:::1;-1:-1:-1::0;;;;;27676:17:0::1;:9;-1:-1:-1::0;;;;;27676:17:0::1;;;:47;;;;-1:-1:-1::0;;;;;;27697:26:0;::::1;15173:42;27697:26;;27676:47;27668:105;;;::::0;-1:-1:-1;;;27668:105:0;;17870:2:1;27668:105:0::1;::::0;::::1;17852:21:1::0;17909:2;17889:18;;;17882:30;17948:34;17928:18;;;17921:62;-1:-1:-1;;;17999:18:1;;;17992:43;18052:19;;27668:105:0::1;17668:409:1::0;27668:105:0::1;-1:-1:-1::0;;;;;27784:22:0;::::1;;::::0;;;:11:::1;:22;::::0;;;;;;;:29;;27809:4:::1;-1:-1:-1::0;;27784:29:0;;::::1;::::0;::::1;::::0;;;27824:18:::1;:29:::0;;;;;:36;;;::::1;::::0;::::1;::::0;;27871:15:::1;:26:::0;;;;;;:33;;;;::::1;;::::0;;;27920:31;::::1;::::0;27784:22;27920:31:::1;27589:370:::0;:::o;25988:504::-;12142:6;;-1:-1:-1;;;;;12142:6:0;6458:10;12142:22;12134:67;;;;-1:-1:-1;;;12134:67:0;;;;;;;:::i;:::-;26101:5:::1;26078:11;:20;26090:7;11968::::0;11995:6;-1:-1:-1;;;;;11995:6:0;;11930:79;26090:7:::1;-1:-1:-1::0;;;;;26078:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26078:20:0;;;:28;;;::::1;;-1:-1:-1::0;;26078:28:0;;::::1;::::0;;;::::1;::::0;;;26117:15:::1;-1:-1:-1::0;26133:7:0::1;11968::::0;11995:6;-1:-1:-1;;;;;11995:6:0;;11930:79;26133:7:::1;-1:-1:-1::0;;;;;26117:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26117:24:0;;;:32;;;::::1;;-1:-1:-1::0;;26117:32:0;;::::1;::::0;;;::::1;::::0;;;26160:18:::1;-1:-1:-1::0;26179:7:0::1;11968::::0;11995:6;-1:-1:-1;;;;;11995:6:0;;11930:79;26179:7:::1;-1:-1:-1::0;;;;;26160:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26160:27:0;;;:35;;;::::1;;-1:-1:-1::0;;26160:35:0;;::::1;::::0;;;::::1;::::0;;;26206:11:::1;-1:-1:-1::0;26218:7:0::1;11968::::0;11995:6;-1:-1:-1;;;;;11995:6:0;;11930:79;26218:7:::1;-1:-1:-1::0;;;;;26206:20:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;26206:20:0;;;15173:42:::1;26206:35:::0;;;;;;;:39;26256:33:::1;26280:8:::0;26256:23:::1;:33::i;:::-;-1:-1:-1::0;;;;;26300:21:0::1;;::::0;;;:11:::1;:21;::::0;;;;;;;:28;;26324:4:::1;-1:-1:-1::0;;26300:28:0;;::::1;::::0;::::1;::::0;;;26339:15:::1;:25:::0;;;;;:32;;;::::1;::::0;::::1;::::0;;26382:18:::1;:28:::0;;;;;:35;;;;::::1;::::0;;::::1;::::0;;26428:11:::1;:21:::0;;;;;15173:42:::1;26428:36:::0;;;;;;;-1:-1:-1;;26428:56:0;;25988:504::o;30101:274::-;12142:6;;-1:-1:-1;;;;;12142:6:0;6458:10;12142:22;12134:67;;;;-1:-1:-1;;;12134:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30196:52:0;::::1;30188:80;;;;-1:-1:-1::0;;;30188:80:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30279:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;;:32;;-1:-1:-1;;30279:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30327:40;;1853:41:1;;;30327:40:0::1;::::0;1826:18:1;30327:40:0::1;1713:187:1::0;19411:1178:0;-1:-1:-1;;;;;19528:17:0;;19503:4;19528:17;;;:9;:17;;;;;;:27;-1:-1:-1;19528:27:0;19520:60;;;;-1:-1:-1;;;19520:60:0;;18284:2:1;19520:60:0;;;18266:21:1;18323:2;18303:18;;;18296:30;-1:-1:-1;;;18342:18:1;;;18335:50;18402:18;;19520:60:0;18082:344:1;19520:60:0;19608:1;19599:6;:10;19591:46;;;;-1:-1:-1;;;19591:46:0;;18633:2:1;19591:46:0;;;18615:21:1;18672:2;18652:18;;;18645:30;18711:25;18691:18;;;18684:53;18754:18;;19591:46:0;18431:347:1;19591:46:0;19653:6;;;;19650:63;;;19669:41;19684:6;19692:9;19703:6;19669:14;:41::i;:::-;19662:48;;;;19650:63;19725:28;19738:6;19746;19725:12;:28::i;:::-;-1:-1:-1;;;;;19779:25:0;;;;;;:14;:25;;;;;;;;19778:26;:47;;;;-1:-1:-1;;;;;;19808:17:0;;13546:42;19808:17;;19778:47;19774:148;;;-1:-1:-1;;;;;19847:26:0;;;;;;:15;:26;;;;;;;;19842:68;;19875:35;19892:9;19903:6;19875:16;:35::i;:::-;25451:10;;19934:118;;-1:-1:-1;;;;;19959:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;19989:29:0;;;;;;:18;:29;;;;;;;;19959:59;19951:98;;;;-1:-1:-1;;;19951:98:0;;18985:2:1;19951:98:0;;;18967:21:1;19024:2;19004:18;;;18997:30;19063:28;19043:18;;;19036:56;19109:18;;19951:98:0;18783:350:1;19951:98:0;-1:-1:-1;;;;;20064:17:0;;;;;;:9;:17;;;;;:27;;20085:6;;20064:17;:27;;20085:6;;20064:27;:::i;:::-;;;;-1:-1:-1;;;;;;;21372:19:0;;20104:22;21372:19;;;:11;:19;;;;;;;;21371:20;20129:49;;;;-1:-1:-1;;;;;;21372:19:0;;21347:4;21372:19;;;:11;:19;;;;;;;;21371:20;20154:24;20129:95;;20218:6;20129:95;;;20181:34;20189:6;20197:9;20208:6;20181:7;:34::i;:::-;20104:120;;20248:25;20263:9;20248:14;:25::i;:::-;20245:66;;;20280:10;;20276:32;;20292:16;20301:6;20292:8;:16::i;:::-;-1:-1:-1;;;;;20331:20:0;;;;;;:9;:20;;;;;:38;;20355:14;;20331:20;:38;;20355:14;;20331:38;:::i;:::-;;;;-1:-1:-1;;25451:10:0;;:15;;20397:31;;;;-1:-1:-1;20411:17:0;;-1:-1:-1;;;20411:17:0;;;;20397:31;20394:104;;;20443:9;;:55;;-1:-1:-1;;;20443:55:0;;-1:-1:-1;;;;;19396:15:1;;;20443:55:0;;;19378:34:1;19448:15;;;19428:18;;;19421:43;19480:18;;;19473:34;;;20443:9:0;;;;:28;;19313:18:1;;20443:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20394:104;20533:9;-1:-1:-1;;;;;20516:43:0;20525:6;-1:-1:-1;;;;;20516:43:0;;20544:14;20516:43;;;;160:25:1;;148:2;133:18;;14:177;20516:43:0;;;;;;;;-1:-1:-1;20577:4:0;;19411:1178;-1:-1:-1;;;;19411:1178:0:o;18350:410::-;-1:-1:-1;;;;;18452:51:0;;18444:100;;;;-1:-1:-1;;;18444:100:0;;19970:2:1;18444:100:0;;;19952:21:1;20009:2;19989:18;;;19982:30;20048:34;20028:18;;;20021:62;-1:-1:-1;;;20099:18:1;;;20092:34;20143:19;;18444:100:0;19768:400:1;18444:100:0;-1:-1:-1;;;;;18563:53:0;;18555:100;;;;-1:-1:-1;;;18555:100:0;;20375:2:1;18555:100:0;;;20357:21:1;20414:2;20394:18;;;20387:30;20453:34;20433:18;;;20426:62;-1:-1:-1;;;20504:18:1;;;20497:32;20546:19;;18555:100:0;20173:398:1;18555:100:0;-1:-1:-1;;;;;18668:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18720:32;;160:25:1;;;18720:32:0;;133:18:1;18720:32:0;;;;;;;18350:410;;;:::o;12571:212::-;12142:6;;-1:-1:-1;;;;;12142:6:0;6458:10;12142:22;12134:67;;;;-1:-1:-1;;;12134:67:0;;;;;;;:::i;:::-;12670:42:::1;12662:6:::0;;12641:72:::1;::::0;-1:-1:-1;;;;;12662:6:0;;::::1;::::0;12641:72:::1;::::0;12670:42;;12641:72:::1;12733:42;12724:51:::0;;-1:-1:-1;;;;;;12724:51:0::1;::::0;;12571:212::o;12938:276::-;12142:6;;-1:-1:-1;;;;;12142:6:0;6458:10;12142:22;12134:67;;;;-1:-1:-1;;;12134:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13027:54:0;::::1;13019:105;;;::::0;-1:-1:-1;;;13019:105:0;;20778:2:1;13019:105:0::1;::::0;::::1;20760:21:1::0;20817:2;20797:18;;;20790:30;20856:34;20836:18;;;20829:62;-1:-1:-1;;;20907:18:1;;;20900:36;20953:19;;13019:105:0::1;20576:402:1::0;13019:105:0::1;13161:6;::::0;;13140:38:::1;::::0;-1:-1:-1;;;;;13140:38:0;;::::1;::::0;13161:6;::::1;::::0;13140:38:::1;::::0;::::1;13189:6;:17:::0;;-1:-1:-1;;;;;;13189:17:0::1;-1:-1:-1::0;;;;;13189:17:0;;;::::1;::::0;;;::::1;::::0;;12938:276::o;20597:259::-;-1:-1:-1;;;;;20707:17:0;;20690:4;20707:17;;;:9;:17;;;;;:27;;20728:6;;20707:17;20690:4;;20707:27;;20728:6;;20707:27;:::i;:::-;;;;-1:-1:-1;;;;;;;20745:20:0;;;;;;:9;:20;;;;;:30;;20769:6;;20745:20;:30;;20769:6;;20745:30;:::i;:::-;;;;;;;;20808:9;-1:-1:-1;;;;;20791:35:0;20800:6;-1:-1:-1;;;;;20791:35:0;;20819:6;20791:35;;;;160:25:1;;148:2;133:18;;14:177;20791:35:0;;;;;;;;-1:-1:-1;20844:4:0;20597:259;;;;;:::o;21111:166::-;21208:12;;21198:6;:22;;:49;;;-1:-1:-1;;;;;;21224:23:0;;;;;;:15;:23;;;;;;;;21198:49;21190:79;;;;-1:-1:-1;;;21190:79:0;;21185:2:1;21190:79:0;;;21167:21:1;21224:2;21204:18;;;21197:30;-1:-1:-1;;;21243:18:1;;;21236:47;21300:18;;21190:79:0;20983:341:1;21190:79:0;21111:166;;:::o;20868:235::-;20976:14;;-1:-1:-1;;;;;21009:20:0;;20954:19;21009:20;;;:9;:20;;;;;;20976:14;;21009:29;;21032:6;;21009:29;:::i;:::-;:44;;21001:94;;;;-1:-1:-1;;;21001:94:0;;21531:2:1;21001:94:0;;;21513:21:1;21570:2;21550:18;;;21543:30;21609:34;21589:18;;;21582:62;-1:-1:-1;;;21660:18:1;;;21653:35;21705:19;;21001:94:0;21329:401:1;21001:94:0;20943:160;20868:235;;:::o;21760:1363::-;-1:-1:-1;;;;;21921:22:0;;21846:7;21921:22;;;:14;:22;;;;;;21846:7;;;;21921:22;;21920:23;:73;;;;-1:-1:-1;21965:10:0;;-1:-1:-1;;;;;21947:15:0;;;;;;:7;:15;;;;;;21978;;21947:28;;;:::i;:::-;:46;21920:73;-1:-1:-1;;;;;22007:25:0;;;;;;:14;:25;;;;;;21898:95;;-1:-1:-1;22007:25:0;;:44;;;;;22050:1;22036:11;;:15;22007:44;22004:701;;;22069:16;22087;22117:4;-1:-1:-1;;;;;22108:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22194:16:0;;22068:68;;-1:-1:-1;22068:68:0;-1:-1:-1;22151:22:0;;22236:6;;22194:16;;:38;;22224:8;22194:38;;;22213:8;22194:38;-1:-1:-1;;;;;22193:49:0;;;;;:::i;:::-;22176:13;:6;22185:4;22176:13;:::i;:::-;:67;;;;:::i;:::-;22313:14;;-1:-1:-1;;;;;22294:16:0;;;;;;:8;:16;;;;;;22151:92;;-1:-1:-1;22294:33:0;;;:::i;:::-;22276:15;:51;22272:171;;;-1:-1:-1;;;;;22348:16:0;;;;;;:8;:16;;;;;;;;22367:15;22348:34;;22401:14;:22;;;;;:26;22272:171;-1:-1:-1;;;;;22471:22:0;;;;;;:14;:22;;;;;:40;;22497:14;;22471:22;:40;;22497:14;;22471:40;:::i;:::-;;;;-1:-1:-1;;22570:17:0;;-1:-1:-1;;;;;22544:22:0;;;;;;:14;:22;;;;;;:43;22540:154;;22664:14;;22657:3;22642:11;;22631:8;;22622:6;:17;;;;:::i;:::-;:31;;;;:::i;:::-;22621:39;;;;:::i;:::-;22620:58;;;;:::i;:::-;22608:70;;22540:154;22053:652;;;22004:701;22721:14;22717:127;;22830:14;;-1:-1:-1;;;;;22784:25:0;;;;;;:14;:25;;;;;;22772:54;;22784:25;;22811:14;22772:11;:54::i;:::-;22763:63;;:6;:63;:::i;:::-;22762:82;;;;:::i;:::-;22750:94;;22717:127;-1:-1:-1;;;;;22869:22:0;;;;;;:14;:22;;;;;;;;:49;;;;-1:-1:-1;;;;;;22895:18:0;;;;;;:7;:18;;;;;;:23;22869:49;22865:104;;;-1:-1:-1;;;;;22933:18:0;;;;;;:7;:18;;;;;22954:15;22933:36;;22865:104;23000:4;22982:24;;;;:9;:24;;;;;:37;;23010:9;;22982:24;:37;;23010:9;;22982:37;:::i;:::-;;;;-1:-1:-1;;23035:42:0;;160:25:1;;;23060:4:0;;-1:-1:-1;;;;;23035:42:0;;;;;148:2:1;133:18;23035:42:0;;;;;;;23097:18;23106:9;23097:6;:18;:::i;:::-;23090:25;21760:1363;-1:-1:-1;;;;;;21760:1363:0:o;23131:321::-;23237:10;23197:4;23222:26;;;:14;:26;;;;;;;;23221:27;:64;;;;-1:-1:-1;23274:10:0;23262:23;;;;:11;:23;;;;;;;;23261:24;23221:64;:84;;;;-1:-1:-1;23299:6:0;;;;23298:7;23221:84;:108;;;;-1:-1:-1;23318:11:0;;-1:-1:-1;;;23318:11:0;;;;23221:108;:146;;;;-1:-1:-1;;;;;;23342:25:0;;;;;;:14;:25;;;;;;;;23221:146;:198;;;;-1:-1:-1;23408:11:0;;23398:4;23380:24;;;;:9;:24;;;;;;:39;;23221:198;:223;;;;;23443:1;23432:8;;:12;23214:230;23131:321;-1:-1:-1;;23131:321:0:o;23460:1916::-;15760:6;:13;;-1:-1:-1;;15760:13:0;15769:4;15760:13;;;23555::::1;::::0;15760:6;;23546:22;::::1;:47;;23580:13;;23546:47;;;23571:6;23546:47;23626:4;23608:24;::::0;;;:9:::1;:24;::::0;;;;;23523:70;;-1:-1:-1;23608:39:0;-1:-1:-1;23604:84:0::1;;;-1:-1:-1::0;23682:4:0::1;23664:24;::::0;;;:9:::1;:24;::::0;;;;;23604:84:::1;23699:27;23729:60;23745:15;;23762:26;;23729:15;:60::i;:::-;:79;;23796:12;;23729:79;;;23792:1;23729:79;23699:109;;23819:23;23897:1;23885:8;;23862:19;23847:12;:34;;;;:::i;:::-;23846:47;;;;:::i;:::-;23845:53;;;;:::i;:::-;23819:79:::0;-1:-1:-1;23909:31:0::1;23819:79:::0;23909:31;::::1;:::i;:::-;23977:16;::::0;;23991:1:::1;23977:16:::0;;;;;::::1;::::0;;23909:31;;-1:-1:-1;23953:21:0::1;::::0;23977:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;23977:16:0::1;23953:40;;24022:4;24004;24009:1;24004:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;24004:23:0::1;;;-1:-1:-1::0;;;;;24004:23:0::1;;;::::0;::::1;24048:6;-1:-1:-1::0;;;;;24048:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24038:4;24043:1;24038:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24038:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;24144:188:::1;::::0;-1:-1:-1;;;24144:188:0;;:6:::1;:57:::0;;::::1;::::0;::::1;::::0;:188:::1;::::0;24216:12;;24243:1:::1;::::0;24259:4;;24286::::1;::::0;24306:15:::1;::::0;24144:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;24371:21:0::1;::::0;-1:-1:-1;24345:23:0::1;::::0;-1:-1:-1;24436:23:0::1;::::0;-1:-1:-1;24458:1:0::1;24436:19:::0;:23:::1;:::i;:::-;24425:8;;:34;;;;:::i;:::-;24403:56:::0;-1:-1:-1;24472:23:0::1;24554:1;24403:56:::0;24499:37:::1;24517:19:::0;24499:15;:37:::1;:::i;:::-;24498:53;;;;:::i;:::-;:57;;;;:::i;:::-;24472:83;;24566:23;24627:11;24611:12;;24593:15;:30;;;;:::i;:::-;24592:46;;;;:::i;:::-;24566:72:::0;-1:-1:-1;24649:17:0::1;24688:33;24566:72:::0;24688:15;:33:::1;:::i;:::-;24669:53;::::0;:15;:53:::1;:::i;:::-;24649:73:::0;-1:-1:-1;24738:19:0;;24735:442:::1;;24863:237;::::0;-1:-1:-1;;;24863:237:0;;24936:4:::1;24863:237;::::0;::::1;24097:34:1::0;24147:18;;;24140:34;;;-1:-1:-1;24190:18:1;;;24183:34;;;24233:18;;;24226:34;-1:-1:-1;;;;;25034:17:0::1;24297:15:1::0;;24276:19;;;24269:44;25070:15:0::1;24329:19:1::0;;;24322:35;24863:6:0::1;:22;::::0;::::1;::::0;24893:15;;24031:19:1;;24863:237:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;25120:45:0::1;::::0;;12134:25:1;;;12190:2;12175:18;;12168:34;;;25120:45:0::1;::::0;-1:-1:-1;12107:18:1;25120:45:0::1;;;;;;;24735:442;25201:19:::0;;25197:81:::1;;25235:43;::::0;-1:-1:-1;;;;;25235:17:0::1;:26;::::0;:43;::::1;;;::::0;25262:15;;25235:43:::1;::::0;;;25262:15;25235:26;:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25197:81;25307:13:::0;;25303:63:::1;;25335:31;::::0;-1:-1:-1;;;;;25335:11:0::1;:20;::::0;:31;::::1;;;::::0;25356:9;;25335:31:::1;::::0;;;25356:9;25335:20;:31;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25303:63;-1:-1:-1::0;;15778:6:0;:14;;-1:-1:-1;;15778:14:0;;;-1:-1:-1;;;;;;;;23460:1916: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:118::-;1991:5;1984:13;1977:21;1970:5;1967:32;1957:60;;2013:1;2010;2003:12;2028:446;2111:6;2119;2127;2135;2188:3;2176:9;2167:7;2163:23;2159:33;2156:53;;;2205:1;2202;2195:12;2156:53;2241:9;2228:23;2218:33;;2298:2;2287:9;2283:18;2270:32;2260:42;;2349:2;2338:9;2334:18;2321:32;2311:42;;2403:2;2392:9;2388:18;2375:32;2416:28;2438:5;2416:28;:::i;:::-;2028:446;;;;-1:-1:-1;2028:446:1;;-1:-1:-1;;2028:446:1:o;2479:248::-;2547:6;2555;2608:2;2596:9;2587:7;2583:23;2579:32;2576:52;;;2624:1;2621;2614:12;2576:52;-1:-1:-1;;2647:23:1;;;2717:2;2702:18;;;2689:32;;-1:-1:-1;2479:248:1:o;2732:456::-;2809:6;2817;2825;2878:2;2866:9;2857:7;2853:23;2849:32;2846:52;;;2894:1;2891;2884:12;2846:52;2933:9;2920:23;2952:31;2977:5;2952:31;:::i;:::-;3002:5;-1:-1:-1;3059:2:1;3044:18;;3031:32;3072:33;3031:32;3072:33;:::i;:::-;2732:456;;3124:7;;-1:-1:-1;;;3178:2:1;3163:18;;;;3150:32;;2732:456::o;3590:382::-;3655:6;3663;3716:2;3704:9;3695:7;3691:23;3687:32;3684:52;;;3732:1;3729;3722:12;3684:52;3771:9;3758:23;3790:31;3815:5;3790:31;:::i;:::-;3840:5;-1:-1:-1;3897:2:1;3882:18;;3869:32;3910:30;3869:32;3910:30;:::i;:::-;3959:7;3949:17;;;3590:382;;;;;:::o;3977:247::-;4036:6;4089:2;4077:9;4068:7;4064:23;4060:32;4057:52;;;4105:1;4102;4095:12;4057:52;4144:9;4131:23;4163:31;4188:5;4163:31;:::i;4229:376::-;4291:6;4299;4352:2;4340:9;4331:7;4327:23;4323:32;4320:52;;;4368:1;4365;4358:12;4320:52;4407:9;4394:23;4426:28;4448:5;4426:28;:::i;4610:367::-;4673:8;4683:6;4737:3;4730:4;4722:6;4718:17;4714:27;4704:55;;4755:1;4752;4745:12;4704:55;-1:-1:-1;4778:20:1;;4821:18;4810:30;;4807:50;;;4853:1;4850;4843:12;4807:50;4890:4;4882:6;4878:17;4866:29;;4950:3;4943:4;4933:6;4930:1;4926:14;4918:6;4914:27;4910:38;4907:47;4904:67;;;4967:1;4964;4957:12;4904:67;4610:367;;;;;:::o;4982:773::-;5104:6;5112;5120;5128;5181:2;5169:9;5160:7;5156:23;5152:32;5149:52;;;5197:1;5194;5187:12;5149:52;5237:9;5224:23;5266:18;5307:2;5299:6;5296:14;5293:34;;;5323:1;5320;5313:12;5293:34;5362:70;5424:7;5415:6;5404:9;5400:22;5362:70;:::i;:::-;5451:8;;-1:-1:-1;5336:96:1;-1:-1:-1;5539:2:1;5524:18;;5511:32;;-1:-1:-1;5555:16:1;;;5552:36;;;5584:1;5581;5574:12;5552:36;;5623:72;5687:7;5676:8;5665:9;5661:24;5623:72;:::i;:::-;4982:773;;;;-1:-1:-1;5714:8:1;-1:-1:-1;;;;4982:773:1:o;6210:241::-;6266:6;6319:2;6307:9;6298:7;6294:23;6290:32;6287:52;;;6335:1;6332;6325:12;6287:52;6374:9;6361:23;6393:28;6415:5;6393:28;:::i;6456:377::-;6530:6;6538;6546;6599:2;6587:9;6578:7;6574:23;6570:32;6567:52;;;6615:1;6612;6605:12;6567:52;6654:9;6641:23;6673:28;6695:5;6673:28;:::i;:::-;6720:5;6772:2;6757:18;;6744:32;;-1:-1:-1;6823:2:1;6808:18;;;6795:32;;6456:377;-1:-1:-1;;;6456:377:1:o;6838:180::-;6897:6;6950:2;6938:9;6929:7;6925:23;6921:32;6918:52;;;6966:1;6963;6956:12;6918:52;-1:-1:-1;6989:23:1;;6838:180;-1:-1:-1;6838:180:1:o;7023:388::-;7091:6;7099;7152:2;7140:9;7131:7;7127:23;7123:32;7120:52;;;7168:1;7165;7158:12;7120:52;7207:9;7194:23;7226:31;7251:5;7226:31;:::i;:::-;7276:5;-1:-1:-1;7333:2:1;7318:18;;7305:32;7346:33;7305:32;7346:33;:::i;7642:356::-;7844:2;7826:21;;;7863:18;;;7856:30;7922:34;7917:2;7902:18;;7895:62;7989:2;7974:18;;7642:356::o;8003:127::-;8064:10;8059:3;8055:20;8052:1;8045:31;8095:4;8092:1;8085:15;8119:4;8116:1;8109:15;8135:217;8175:1;8201;8191:132;;8245:10;8240:3;8236:20;8233:1;8226:31;8280:4;8277:1;8270:15;8308:4;8305:1;8298:15;8191:132;-1:-1:-1;8337:9:1;;8135:217::o;8357:168::-;8397:7;8463:1;8459;8455:6;8451:14;8448:1;8445:21;8440:1;8433:9;8426:17;8422:45;8419:71;;;8470:18;;:::i;:::-;-1:-1:-1;8510:9:1;;8357:168::o;8951:128::-;8991:3;9022:1;9018:6;9015:1;9012:13;9009:39;;;9028:18;;:::i;:::-;-1:-1:-1;9064:9:1;;8951:128::o;12213:422::-;12302:1;12345:5;12302:1;12359:270;12380:7;12370:8;12367:21;12359:270;;;12439:4;12435:1;12431:6;12427:17;12421:4;12418:27;12415:53;;;12448:18;;:::i;:::-;12498:7;12488:8;12484:22;12481:55;;;12518:16;;;;12481:55;12597:22;;;;12557:15;;;;12359:270;;;12363:3;12213:422;;;;;:::o;12640:806::-;12689:5;12719:8;12709:80;;-1:-1:-1;12760:1:1;12774:5;;12709:80;12808:4;12798:76;;-1:-1:-1;12845:1:1;12859:5;;12798:76;12890:4;12908:1;12903:59;;;;12976:1;12971:130;;;;12883:218;;12903:59;12933:1;12924:10;;12947:5;;;12971:130;13008:3;12998:8;12995:17;12992:43;;;13015:18;;:::i;:::-;-1:-1:-1;;13071:1:1;13057:16;;13086:5;;12883:218;;13185:2;13175:8;13172:16;13166:3;13160:4;13157:13;13153:36;13147:2;13137:8;13134:16;13129:2;13123:4;13120:12;13116:35;13113:77;13110:159;;;-1:-1:-1;13222:19:1;;;13254:5;;13110:159;13301:34;13326:8;13320:4;13301:34;:::i;:::-;13371:6;13367:1;13363:6;13359:19;13350:7;13347:32;13344:58;;;13382:18;;:::i;:::-;13420:20;;12640:806;-1:-1:-1;;;12640:806:1:o;13451:140::-;13509:5;13538:47;13579:4;13569:8;13565:19;13559:4;13538:47;:::i;13951:125::-;13991:4;14019:1;14016;14013:8;14010:34;;;14024:18;;:::i;:::-;-1:-1:-1;14061:9:1;;13951:125::o;14081:339::-;14283:2;14265:21;;;14322:2;14302:18;;;14295:30;-1:-1:-1;;;14356:2:1;14341:18;;14334:45;14411:2;14396:18;;14081:339::o;14779:127::-;14840:10;14835:3;14831:20;14828:1;14821:31;14871:4;14868:1;14861:15;14895:4;14892:1;14885:15;15325:135;15364:3;-1:-1:-1;;15385:17:1;;15382:43;;;15405:18;;:::i;:::-;-1:-1:-1;15452:1:1;15441:13;;15325:135::o;19518:245::-;19585:6;19638:2;19626:9;19617:7;19613:23;19609:32;19606:52;;;19654:1;19651;19644:12;19606:52;19686:9;19680:16;19705:28;19727:5;19705:28;:::i;21735:188::-;21814:13;;-1:-1:-1;;;;;21856:42:1;;21846:53;;21836:81;;21913:1;21910;21903:12;21836:81;21735:188;;;:::o;21928:450::-;22015:6;22023;22031;22084:2;22072:9;22063:7;22059:23;22055:32;22052:52;;;22100:1;22097;22090:12;22052:52;22123:40;22153:9;22123:40;:::i;:::-;22113:50;;22182:49;22227:2;22216:9;22212:18;22182:49;:::i;:::-;22172:59;;22274:2;22263:9;22259:18;22253:25;22318:10;22311:5;22307:22;22300:5;22297:33;22287:61;;22344:1;22341;22334:12;22287:61;22367:5;22357:15;;;21928:450;;;;;:::o;22515:251::-;22585:6;22638:2;22626:9;22617:7;22613:23;22609:32;22606:52;;;22654:1;22651;22644:12;22606:52;22686:9;22680:16;22705:31;22730:5;22705:31;:::i;22771:980::-;23033:4;23081:3;23070:9;23066:19;23112:6;23101:9;23094:25;23138:2;23176:6;23171:2;23160:9;23156:18;23149:34;23219:3;23214:2;23203:9;23199:18;23192:31;23243:6;23278;23272:13;23309:6;23301;23294:22;23347:3;23336:9;23332:19;23325:26;;23386:2;23378:6;23374:15;23360:29;;23407:1;23417:195;23431:6;23428:1;23425:13;23417:195;;;23496:13;;-1:-1:-1;;;;;23492:39:1;23480:52;;23587:15;;;;23552:12;;;;23528:1;23446:9;23417:195;;;-1:-1:-1;;;;;;;23668:32:1;;;;23663:2;23648:18;;23641:60;-1:-1:-1;;;23732:3:1;23717:19;23710:35;23629:3;22771:980;-1:-1:-1;;;22771:980:1:o;24368:306::-;24456:6;24464;24472;24525:2;24513:9;24504:7;24500:23;24496:32;24493:52;;;24541:1;24538;24531:12;24493:52;24570:9;24564:16;24554:26;;24620:2;24609:9;24605:18;24599:25;24589:35;;24664:2;24653:9;24649:18;24643:25;24633:35;;24368:306;;;;;:::o

Swarm Source

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