ETH Price: $2,525.29 (+0.01%)

Token

😮🏷🏷☹️&#128... (EPEPE)
 

Overview

Max Total Supply

1,000,000,000,000,000 EPEPE

Holders

112

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
685,195,969,827.840961397594511706 EPEPE

Value
$0.00
0x6954d11f97545c3d0146cfa73e2d816229d10005
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Moon

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-25
*/

/**
Telegram: Https://t.me/emojipepeportal
Twitter: Twitter.com/EmojiPepeERC
Website: Https://emojipepe.com
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

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


/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20Upgradeable {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/od/ai/nu/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);
}

library Address {
    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);
    }

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

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }


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

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

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

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

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

contract Moon is Context, IERC20Upgradeable {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply;

    string private _name;
    string private _symbol;

    uint256 public _reflectFee = 0;
    uint256 public _liquidityFee = 0;
    uint256 public _marketingFee = 1500;

    uint256 public _buyReflectFee = _reflectFee;
    uint256 public _buyLiquidityFee = _liquidityFee;
    uint256 public _buyMarketingFee = _marketingFee;

    uint256 public _sellReflectFee = 0;
    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 3000;
    
    uint256 public _transferReflectFee = 0;
    uint256 public _transferLiquidityFee = 0;
    uint256 public _transferMarketingFee = 0;
    
    uint256 private maxReflectFee = 1000;
    uint256 private maxLiquidityFee = 1000;
    uint256 private maxMarketingFee = 6200;

    uint256 public _liquidityRatio = 0;
    uint256 public _marketingRatio = 6000;

    uint256 private masterTaxDivisor = 10000;

    uint256 public MarketShare = 3;
    uint256 public DevShare = 3;
    uint256 public ValueDivisor = 6;

    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals;
    uint256 private _decimalsMul;
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    // UNI ROUTER
    address public _routerAddress;

    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    address public ZERO = 0x0000000000000000000000000000000000000000;
    address payable private _devWallet;
    address payable private _marketWallet;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 private _maxTxAmount;
    uint256 public maxTxAmountUI;

    uint256 private _maxWalletSize;
    uint256 public maxWalletSizeUI;

    uint256 private swapThreshold;
    uint256 private swapAmount;

    bool tradingEnabled = false;

    bool public _hasLiqBeenAdded = false;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    bool private sameBlockActive = true;
    mapping (address => uint256) private lastTrade;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    uint256 Launched;
    
    bool contractInitialized = false;
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    constructor () payable {
        // Set the owner.
        _owner = msg.sender;

        if (block.chainid == 56) {
            _routerAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else if (block.chainid == 97) {
            _routerAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 5) {
            _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            revert();
        }

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _liquidityHolders[owner()] = true;

        _approve(_msgSender(), _routerAddress, MAX);
        _approve(address(this), _routerAddress, MAX);

    }

    receive() external payable {}

    function LaunchToken(address payable setMarketWallet, address payable setDevWallet, string memory _tokenname, string memory _tokensymbol) external onlyOwner {
        require(!contractInitialized);

        _marketWallet = payable(setMarketWallet);
        _devWallet = payable(setDevWallet);

        _name = _tokenname;
        _symbol = _tokensymbol;
        startingSupply = 1_000_000_000_000_000;
        if (startingSupply < 100000000000000000) {
            _decimals = 18;
            _decimalsMul = _decimals;
        } else {
            _decimals = 9;
            _decimalsMul = _decimals;
        }
        _tTotal = startingSupply * (10**_decimalsMul);
        _rTotal = (MAX - (MAX % _tTotal));

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        
        _maxTxAmount = (_tTotal * 20) / 1000;
        maxTxAmountUI = (startingSupply * 20) / 1000;
        _maxWalletSize = (_tTotal * 20) / 1000;
        maxWalletSizeUI = (startingSupply * 20) / 1000;
        swapThreshold = (_tTotal * 5) / 100000;
        swapAmount = (_tTotal * 5) / 10000;

        approve(_routerAddress, type(uint256).max);

        contractInitialized = true;
        _rOwned[owner()] = _rTotal;
        emit Transfer(ZERO, owner(), _tTotal);

        _approve(address(this), address(dexRouter), type(uint256).max);

        _transfer(owner(), address(this), balanceOf(owner()));

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, 
            0, 
            owner(),
            block.timestamp
        );
        Launched = block.number;

        require(!tradingEnabled, "Trading already enabled!");
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(lpPair, true);

        tradingEnabled = true;
        swapAndLiquifyEnabled = true;
    }

    function enableTrade() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(lpPair, true);

        tradingEnabled = true;
        swapAndLiquifyEnabled = true;
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and recnouncements.
    // This allows for removal of ownership privelages from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwner(address newOwner) external onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFee(_owner, false);
        setExcludedFromFee(newOwner, true);
        setExcludedFromReward(newOwner, true);
        
        if (_devWallet == payable(_owner))
            _devWallet = payable(newOwner);
        
        _allowances[_owner][newOwner] = balanceOf(_owner);
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

    function renounceOwnership() public virtual onlyOwner() {
        setExcludedFromFee(_owner, false);
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function setNewRouter(address newRouter) external onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), newRouter, MAX);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 1 weeks, "Cannot set a new pair this week!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
        }
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

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

    function setTaxBuy(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 4900);
        _buyReflectFee = reflect;
        _buyLiquidityFee = liquidity;
        _buyMarketingFee = marketing;
    }

    function setTaxSell(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 6900);
        _sellReflectFee = reflect;
        _sellLiquidityFee = liquidity;
        _sellMarketingFee = marketing;
    }

    function setTaxesTransfer(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 4900);
        _transferReflectFee = reflect;
        _transferLiquidityFee = liquidity;
        _transferMarketingFee = marketing;
    }

    function setShareValues(uint256 ms, uint256 ds, uint256 vd) external onlyOwner {
        MarketShare = ms;
        DevShare = ds;
        ValueDivisor = vd;
    }

    function setLiqandMarketRatios(uint256 liquidity, uint256 marketing) external onlyOwner {
        _liquidityRatio = liquidity;
        _marketingRatio = marketing;
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% of total supply.");
        _maxTxAmount = check;
        maxTxAmountUI = (startingSupply * percent) / divisor;
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Max Wallet amt must be above 0.1% of total supply.");
        _maxWalletSize = check;
        maxWalletSizeUI = (startingSupply * percent) / divisor;
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
    }

    function setMarketWalletNew(address payable newWallet) external onlyOwner {
        require(_marketWallet != newWallet, "Wallet already set!");
        _marketWallet = payable(newWallet);
    }

    function setDevWalletNew(address payable newWallet) external onlyOwner {
        require(_devWallet != newWallet, "Wallet already set!");
        _devWallet = payable(newWallet);
    }
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setExcludedFromFee(address account, bool enabled) public onlyOwner {
        _isExcludedFromFee[account] = enabled;
    }

    function setExcludedFromReward(address account, bool enabled) public onlyOwner {
        if (enabled == true) {
            require(!_isExcluded[account], "Account is already excluded.");
            if(_rOwned[account] > 0) {
                _tOwned[account] = tokenFromReflection(_rOwned[account]);
            }
            _isExcluded[account] = true;
            _excluded.push(account);
        } else if (enabled == false) {
            require(_isExcluded[account], "Account is already included.");
            for (uint256 i = 0; i < _excluded.length; i++) {
                if (_excluded[i] == account) {
                    _excluded[i] = _excluded[_excluded.length - 1];
                    _tOwned[account] = 0;
                    _isExcluded[account] = false;
                    _excluded.pop();
                    break;
                }
            }
        }
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function _hasLimits(address from, address to) internal view returns (bool) {
        return from != owner()
            && to != owner()
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount / currentRate;
    }
    
    function _approve(address sender, address spender, uint256 amount) internal {
        require(sender != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if (sameBlockActive) {
                if (lpPairs[from]){
                    require(lastTrade[to] != block.number);
                    lastTrade[to] = block.number;
                } else {
                    require(lastTrade[from] != block.number);
                    lastTrade[from] = block.number;
                }
            }
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            if(to != _routerAddress && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
            }
        }
        bool takeFee = true;
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }

        if (lpPairs[to]) {
            if (!inSwapAndLiquify
                && swapAndLiquifyEnabled
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    swapAndLiquify(contractTokenBalance);
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) internal lockTheSwap {
        if (_liquidityRatio + _marketingRatio == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * _liquidityRatio) / (_liquidityRatio + _marketingRatio)) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            toSwapForEth,
            0,
            path,
            address(this),
            block.timestamp
        );


        uint256 liquidityBalance = ((address(this).balance * _liquidityRatio) / (_liquidityRatio + _marketingRatio)) / 2;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0, 
                0, 
                DEAD,
                block.timestamp
            );
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {

            uint256 OperationsFee = (address(this).balance);
            uint256 marketFee = OperationsFee/(ValueDivisor)*(MarketShare);
            uint256 devfeeshare = OperationsFee/(ValueDivisor)*(DevShare);
            _marketWallet.transfer(marketFee);
            _devWallet.transfer(devfeeshare);            

        }
    }

    

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            _liqAddStamp = block.timestamp;

            swapAndLiquifyEnabled = true;
            emit SwapAndLiquifyEnabledUpdated(true);
        }
    }

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tLiquidity;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

    function _finalizeTransfer(address from, address to, uint256 tAmount, bool takeFee) internal returns (bool) {


        if (!_hasLiqBeenAdded) {
                _checkLiquidityAdd(from, to);
                if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                    revert("Only owner can transfer at this time.");
                }
        }
        
        ExtraValues memory values = _getValues(from, to, tAmount, takeFee);

        _rOwned[from] = _rOwned[from] - values.rAmount;
        _rOwned[to] = _rOwned[to] + values.rTransferAmount;

        if (_isExcluded[from] && !_isExcluded[to]) {
            _tOwned[from] = _tOwned[from] - tAmount;
        } else if (!_isExcluded[from] && _isExcluded[to]) {
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;  
        } else if (_isExcluded[from] && _isExcluded[to]) {
            _tOwned[from] = _tOwned[from] - tAmount;
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;
        }

        if (values.tLiquidity > 0)
            _takeLiquidity(from, values.tLiquidity);
        if (values.rFee > 0 || values.tFee > 0)
            _takeReflect(values.rFee, values.tFee);

        emit Transfer(from, to, values.tTransferAmount);
        return true;
    }

    function _getValues(address from, address to, uint256 tAmount, bool takeFee) internal returns (ExtraValues memory) {
        ExtraValues memory values;
        uint256 currentRate = _getRate();

        values.rAmount = tAmount * currentRate;

        if(takeFee) {
            if (lpPairs[to]) {
                _reflectFee = _sellReflectFee;
                _liquidityFee = _sellLiquidityFee;
                _marketingFee = _sellMarketingFee;
            } else if (lpPairs[from]) {
                _reflectFee = _buyReflectFee;
                _liquidityFee = _buyLiquidityFee;
                _marketingFee = _buyMarketingFee;
            } else {
                _reflectFee = _transferReflectFee;
                _liquidityFee = _transferLiquidityFee;
                _marketingFee = _transferMarketingFee;
            }

            values.tFee = (tAmount * _reflectFee) / masterTaxDivisor;
            values.tLiquidity = (tAmount * (_liquidityFee + _marketingFee)) / masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tLiquidity);

            values.rFee = values.tFee * currentRate;
        } else {
            values.tFee = 0;
            values.tLiquidity = 0;
            values.tTransferAmount = tAmount;

            values.rFee = 0;
        }

        values.rTransferAmount = values.rAmount - (values.rFee + (values.tLiquidity * currentRate));
        return values;
    }

    function _getRate() internal view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / tSupply;
    }

    function _getCurrentSupply() internal view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeReflect(uint256 rFee, uint256 tFee) internal {
        _rTotal = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }

    function recoverETH() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }
    
    function _takeLiquidity(address sender, uint256 tLiquidity) internal {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity * currentRate;
        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
        emit Transfer(sender, address(this), tLiquidity); 
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DevShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"setMarketWallet","type":"address"},{"internalType":"address payable","name":"setDevWallet","type":"address"},{"internalType":"string","name":"_tokenname","type":"string"},{"internalType":"string","name":"_tokensymbol","type":"string"}],"name":"LaunchToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MarketShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ValueDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setDevWalletNew","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setLiqandMarketRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setMarketWalletNew","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ms","type":"uint256"},{"internalType":"uint256","name":"ds","type":"uint256"},{"internalType":"uint256","name":"vd","type":"uint256"}],"name":"setShareValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260006004819055600d819055600e8190556105dc600f8190556010829055601182905560125560138190556014819055610bb86015556016819055601781905560188190556103e86019819055601a55611838601b55601c819055611770601d55612710601e556003601f8190556020556006602155602a80546001600160a01b031990811661dead17909155602b805482169055602d805460ff60a81b191690556034805461ffff19169055603582905560368290556037805460ff19908116600117909155603a805490911690558154163317905560384614156200011157602980546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e1790556200019a565b46606114156200014757602980546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c31790556200019a565b4660011480620001575750466004145b80620001635750466005145b156200019557602980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556200019a565b600080fd5b600160066000620001b36000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260069092528120805490921660019081179092556009906200020c6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905562000255620002403390565b6029546001600160a01b031660001962000277565b602954620002719030906001600160a01b031660001962000277565b620003a3565b6001600160a01b038316620002df5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620003425760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620002d6565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b613f4c80620003b36000396000f3fe6080604052600436106103c65760003560e01c806364038409116101f2578063a9059cbb1161010d578063d9e66460116100a0578063eafb5a3c1161006f578063eafb5a3c14610ad3578063f6540ec714610af3578063f749cee214610b09578063fb78680d14610b2957600080fd5b8063d9e6646014610a41578063dc44b6a014610a61578063dd62ed3e14610a77578063ea08d30b14610abd57600080fd5b8063c49b9a80116100dc578063c49b9a80146109df578063c5d24189146109ff578063c860795214610a15578063d038b07e14610a2b57600080fd5b8063a9059cbb14610969578063b17b945a14610989578063bbcea6bf146109a9578063bf9e1464146109bf57600080fd5b806388790a681161018557806395d89b411161015457806395d89b41146108f45780639616aa321461090957806398dada8714610929578063a457c2d71461094957600080fd5b806388790a681461088757806388f820201461089d578063893d20e8146108d65780638da5cb5b146108d657600080fd5b806370a08231116101c157806370a082311461081c578063715018a61461083c57806371e078d51461085157806380c581d11461086757600080fd5b806364038409146107ba5780636612e66f146107d05780636bc87c3a146107f05780636cbdd5e31461080657600080fd5b8063313ce567116102e25780634eeaf458116102755780635342acb4116102445780635342acb414610721578063571ac8b01461075a578063575f18e51461077a57806358fa63ca1461079a57600080fd5b80634eeaf458146106ac5780634ef3cce5146106cc5780634fb2e45d146106e257806350a8e0161461070257600080fd5b806343b127a6116102b157806343b127a614610635578063452ed4f11461065557806345e8c85c146106755780634a74bb021461068b57600080fd5b8063313ce567146105bd578063384f6b51146105df57806339509351146105f55780633f3cf56c1461061557600080fd5b806313e461921161035a57806322976e0d1161032957806322976e0d1461054757806323b872dd1461055d578063260039571461057d5780632d8381191461059d57600080fd5b806313e46192146104e657806315639c1b1461050657806317eade331461051c57806318160ddd1461053257600080fd5b80630758d924116103965780630758d9241461045d578063095ea7b31461047d5780630e954d8e146104ad57806313114a9d146104d157600080fd5b806299d386146103d257806303fd2a45146103e95780630614117a1461042657806306fdde031461043b57600080fd5b366103cd57005b600080fd5b3480156103de57600080fd5b506103e7610b49565b005b3480156103f557600080fd5b50602a54610409906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561043257600080fd5b506103e7610c0e565b34801561044757600080fd5b50610450610c75565b60405161041d9190613822565b34801561046957600080fd5b50602754610409906001600160a01b031681565b34801561048957600080fd5b5061049d61049836600461388c565b610d07565b604051901515815260200161041d565b3480156104b957600080fd5b506104c360205481565b60405190815260200161041d565b3480156104dd57600080fd5b506026546104c3565b3480156104f257600080fd5b506103e76105013660046138cd565b610d1e565b34801561051257600080fd5b506104c3600d5481565b34801561052857600080fd5b506104c360215481565b34801561053e57600080fd5b506024546104c3565b34801561055357600080fd5b506104c3600f5481565b34801561056957600080fd5b5061049d610578366004613902565b611012565b34801561058957600080fd5b506103e7610598366004613943565b611065565b3480156105a957600080fd5b506104c36105b8366004613965565b61114d565b3480156105c957600080fd5b5060225460405160ff909116815260200161041d565b3480156105eb57600080fd5b506104c3601c5481565b34801561060157600080fd5b5061049d61061036600461388c565b6111d1565b34801561062157600080fd5b506103e7610630366004613943565b611208565b34801561064157600080fd5b506103e761065036600461397e565b6112fb565b34801561066157600080fd5b50602854610409906001600160a01b031681565b34801561068157600080fd5b506104c360165481565b34801561069757600080fd5b50602d5461049d90600160a81b900460ff1681565b3480156106b857600080fd5b506103e76106c736600461397e565b611381565b3480156106d857600080fd5b506104c3601d5481565b3480156106ee57600080fd5b506103e76106fd3660046139aa565b611407565b34801561070e57600080fd5b5060345461049d90610100900460ff1681565b34801561072d57600080fd5b5061049d61073c3660046139aa565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561076657600080fd5b5061049d6107753660046139aa565b6115a9565b34801561078657600080fd5b506103e761079536600461397e565b6115b7565b3480156107a657600080fd5b50602b54610409906001600160a01b031681565b3480156107c657600080fd5b506104c3602f5481565b3480156107dc57600080fd5b506103e76107eb3660046138cd565b61163d565b3480156107fc57600080fd5b506104c3600e5481565b34801561081257600080fd5b506104c360185481565b34801561082857600080fd5b506104c36108373660046139aa565b611692565b34801561084857600080fd5b506103e76116f1565b34801561085d57600080fd5b506104c3601f5481565b34801561087357600080fd5b506103e76108823660046138cd565b611770565b34801561089357600080fd5b506104c360145481565b3480156108a957600080fd5b5061049d6108b83660046139aa565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108e257600080fd5b506000546001600160a01b0316610409565b34801561090057600080fd5b50610450611853565b34801561091557600080fd5b506103e76109243660046139aa565b611862565b34801561093557600080fd5b506103e761094436600461397e565b611902565b34801561095557600080fd5b5061049d61096436600461388c565b61193a565b34801561097557600080fd5b5061049d61098436600461388c565b611971565b34801561099557600080fd5b506103e76109a4366004613a6a565b61197e565b3480156109b557600080fd5b506104c360135481565b3480156109cb57600080fd5b506103e76109da366004613943565b611f5a565b3480156109eb57600080fd5b506103e76109fa366004613af3565b611f8f565b348015610a0b57600080fd5b506104c360125481565b348015610a2157600080fd5b506104c360155481565b348015610a3757600080fd5b506104c360105481565b348015610a4d57600080fd5b50602954610409906001600160a01b031681565b348015610a6d57600080fd5b506104c360115481565b348015610a8357600080fd5b506104c3610a92366004613b0e565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610ac957600080fd5b506104c360175481565b348015610adf57600080fd5b506103e7610aee3660046139aa565b612011565b348015610aff57600080fd5b506104c360315481565b348015610b1557600080fd5b506103e7610b243660046139aa565b61239b565b348015610b3557600080fd5b506103e7610b44366004613b47565b61243b565b6000546001600160a01b03163314610b7c5760405162461bcd60e51b8152600401610b7390613b79565b60405180910390fd5b60345460ff1615610bca5760405162461bcd60e51b815260206004820152601860248201527754726164696e6720616c726561647920656e61626c65642160401b6044820152606401610b73565b610bd5306001610d1e565b602854610bec906001600160a01b03166001610d1e565b6034805460ff19166001179055602d805460ff60a81b1916600160a81b179055565b6000546001600160a01b03163314610c385760405162461bcd60e51b8152600401610b7390613b79565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610c72573d6000803e3d6000fd5b50565b6060600b8054610c8490613bae565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb090613bae565b8015610cfd5780601f10610cd257610100808354040283529160200191610cfd565b820191906000526020600020905b815481529060010190602001808311610ce057829003601f168201915b5050505050905090565b6000610d143384846124a4565b5060015b92915050565b6000546001600160a01b03163314610d485760405162461bcd60e51b8152600401610b7390613b79565b60018115151415610e7d576001600160a01b03821660009081526007602052604090205460ff1615610dbc5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610b73565b6001600160a01b03821660009081526001602052604090205415610e16576001600160a01b038216600090815260016020526040902054610dfc9061114d565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b8061100e576001600160a01b03821660009081526007602052604090205460ff16610eea5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610b73565b60005b60085481101561100c57826001600160a01b031660088281548110610f1457610f14613be9565b6000918252602090912001546001600160a01b03161415610ffa5760088054610f3f90600190613c15565b81548110610f4f57610f4f613be9565b600091825260209091200154600880546001600160a01b039092169183908110610f7b57610f7b613be9565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480610fd357610fd3613c2c565b600082815260209020810160001990810180546001600160a01b031916905501905561100c565b8061100481613c42565b915050610eed565b505b5050565b600061101f8484846125c8565b506001600160a01b03841660009081526005602090815260408083203380855292529091205461105b918691611056908690613c15565b6124a4565b5060019392505050565b6000546001600160a01b0316331461108f5760405162461bcd60e51b8152600401610b7390613b79565b600081836024546110a09190613c5d565b6110aa9190613c92565b90506103e86024546110bc9190613c92565b8110156111265760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e31604482015271129037b3103a37ba30b61039bab838363c9760711b6064820152608401610b73565b6030819055600a54829061113b908590613c5d565b6111459190613c92565b603155505050565b60006025548211156111b45760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b73565b60006111be6129f4565b90506111ca8184613c92565b9392505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d14918590611056908690613ca6565b6000546001600160a01b031633146112325760405162461bcd60e51b8152600401610b7390613b79565b600081836024546112439190613c5d565b61124d9190613c92565b90506103e860245461125f9190613c92565b8110156112d45760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610b73565b602e819055600a5482906112e9908590613c5d565b6112f39190613c92565b602f55505050565b6000546001600160a01b031633146113255760405162461bcd60e51b8152600401610b7390613b79565b60195483111580156113395750601a548211155b80156113475750601b548111155b61135057600080fd5b6113248161135e8486613ca6565b6113689190613ca6565b111561137357600080fd5b601092909255601155601255565b6000546001600160a01b031633146113ab5760405162461bcd60e51b8152600401610b7390613b79565b60195483111580156113bf5750601a548211155b80156113cd5750601b548111155b6113d657600080fd5b611af4816113e48486613ca6565b6113ee9190613ca6565b11156113f957600080fd5b601392909255601455601555565b6000546001600160a01b031633146114315760405162461bcd60e51b8152600401610b7390613b79565b6001600160a01b0381166114575760405162461bcd60e51b8152600401610b7390613cbe565b602a546001600160a01b03828116911614156114855760405162461bcd60e51b8152600401610b7390613cbe565b6000805461149e916001600160a01b039091169061163d565b6114a981600161163d565b6114b4816001610d1e565b600054602c546001600160a01b03908116911614156114e957602c80546001600160a01b0319166001600160a01b0383161790555b6000546114fe906001600160a01b0316611692565b600080546001600160a01b0390811682526005602090815260408084208684168552909152822092909255805490916115379116611692565b111561155e5760005461155c906001600160a01b03168261155782611692565b6125c8565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610d1882600019610d07565b6000546001600160a01b031633146115e15760405162461bcd60e51b8152600401610b7390613b79565b60195483111580156115f55750601a548211155b80156116035750601b548111155b61160c57600080fd5b6113248161161a8486613ca6565b6116249190613ca6565b111561162f57600080fd5b601692909255601755601855565b6000546001600160a01b031633146116675760405162461bcd60e51b8152600401610b7390613b79565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b03811660009081526007602052604081205460ff16156116cf57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610d189061114d565b6000546001600160a01b0316331461171b5760405162461bcd60e51b8152600401610b7390613b79565b60008054611734916001600160a01b039091169061163d565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331461179a5760405162461bcd60e51b8152600401610b7390613b79565b806117c157506001600160a01b03166000908152600360205260409020805460ff19169055565b600454156118285762093a80600454426117db9190613c15565b116118285760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610b73565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6060600c8054610c8490613bae565b6000546001600160a01b0316331461188c5760405162461bcd60e51b8152600401610b7390613b79565b602c546001600160a01b03828116911614156118e05760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610b73565b602c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461192c5760405162461bcd60e51b8152600401610b7390613b79565b601f92909255602055602155565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d14918590611056908690613c15565b600061105b3384846125c8565b6000546001600160a01b031633146119a85760405162461bcd60e51b8152600401610b7390613b79565b603a5460ff16156119b857600080fd5b602d80546001600160a01b038087166001600160a01b031992831617909255602c80549286169290911691909117905581516119fb90600b906020850190613789565b508051611a0f90600c906020840190613789565b5066038d7ea4c68000600a556022805460ff19166012908117909155602355602354611a3c90600a613dff565b600a54611a499190613c5d565b6024819055611a5a90600019613e0b565b611a6690600019613c15565b602555602954602780546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b158015611ac057600080fd5b505afa158015611ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af89190613e1f565b6001600160a01b031663c9c65396602760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b5457600080fd5b505afa158015611b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8c9190613e1f565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b158015611bd357600080fd5b505af1158015611be7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0b9190613e1f565b602880546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff191660011790553083526005825280832060275490941683529290522060001990556024546103e890611c73906014613c5d565b611c7d9190613c92565b602e55600a546103e890611c92906014613c5d565b611c9c9190613c92565b602f556024546103e890611cb1906014613c5d565b611cbb9190613c92565b603055600a546103e890611cd0906014613c5d565b611cda9190613c92565b603155602454620186a090611cf0906005613c5d565b611cfa9190613c92565b60325560245461271090611d0f906005613c5d565b611d199190613c92565b603355602954611d34906001600160a01b0316600019610d07565b50603a805460ff19166001908117909155602554906000611d5d6000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611d896000546001600160a01b031690565b602b546024546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3602754611dec9030906001600160a01b03166000196124a4565b611e17611e016000546001600160a01b031690565b306115576108376000546001600160a01b031690565b506027546001600160a01b031663f305d7194730611e3481611692565b600080611e496000546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611e6b96959493929190613e3c565b6060604051808303818588803b158015611e8457600080fd5b505af1158015611e98573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ebd9190613e77565b5050436039555060345460ff1615611f125760405162461bcd60e51b815260206004820152601860248201527754726164696e6720616c726561647920656e61626c65642160401b6044820152606401610b73565b611f1d306001610d1e565b602854611f34906001600160a01b03166001610d1e565b50506034805460ff191660011790555050602d805460ff60a81b1916600160a81b179055565b6000546001600160a01b03163314611f845760405162461bcd60e51b8152600401610b7390613b79565b601c91909155601d55565b6000546001600160a01b03163314611fb95760405162461bcd60e51b8152600401610b7390613b79565b602d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061200690831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461203b5760405162461bcd60e51b8152600401610b7390613b79565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b39190613e1f565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156120fb57600080fd5b505afa15801561210f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121339190613e1f565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561217957600080fd5b505afa15801561218d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b19190613e1f565b90506001600160a01b03811661235757816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156121fa57600080fd5b505afa15801561220e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122329190613e1f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561227a57600080fd5b505afa15801561228e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b29190613e1f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156122fa57600080fd5b505af115801561230e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123329190613e1f565b602880546001600160a01b0319166001600160a01b0392909216919091179055612373565b602880546001600160a01b0319166001600160a01b0383161790555b602780546001600160a01b0319166001600160a01b03841617905561100c30846000196124a4565b6000546001600160a01b031633146123c55760405162461bcd60e51b8152600401610b7390613b79565b602d546001600160a01b03828116911614156124195760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610b73565b602d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146124655760405162461bcd60e51b8152600401610b7390613b79565b82846024546124749190613c5d565b61247e9190613c92565b6032556024548190612491908490613c5d565b61249b9190613c92565b60335550505050565b6001600160a01b0383166125065760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b73565b6001600160a01b0382166125675760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b73565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661262e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b73565b6001600160a01b0383166126905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b73565b600082116126f25760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b73565b6126fc8484612a17565b1561291c5760345460ff166127535760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b73565b60375460ff1615612805576001600160a01b03841660009081526003602052604090205460ff16156127c4576001600160a01b0383166000908152603860205260409020544314156127a457600080fd5b6001600160a01b0383166000908152603860205260409020439055612805565b6001600160a01b0384166000908152603860205260409020544314156127e957600080fd5b6001600160a01b03841660009081526038602052604090204390555b602e548211156128685760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b73565b6029546001600160a01b0384811691161480159061289f57506001600160a01b03831660009081526003602052604090205460ff16155b1561291c57603054826128b185611692565b6128bb9190613ca6565b111561291c5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610b73565b6001600160a01b03841660009081526006602052604090205460019060ff168061295e57506001600160a01b03841660009081526006602052604090205460ff165b15612967575060005b6001600160a01b03841660009081526003602052604090205460ff16156129df57602d54600160a01b900460ff161580156129ab5750602d54600160a81b900460ff165b156129df5760006129bb30611692565b905060325481106129dd5760335481106129d457506033545b6129dd81612ad7565b505b6129eb85858584612e8b565b95945050505050565b6000806000612a0161320c565b9092509050612a108183613c92565b9250505090565b600080546001600160a01b03848116911614801590612a4457506000546001600160a01b03838116911614155b8015612a6957506001600160a01b03821660009081526009602052604090205460ff16155b8015612a8e57506001600160a01b03831660009081526009602052604090205460ff16155b8015612aa85750602a546001600160a01b03838116911614155b8015612abc57506001600160a01b03821615155b80156111ca57506001600160a01b0383163014159392505050565b602d805460ff60a01b1916600160a01b179055601d54601c54612afa9190613ca6565b612b0357612e7b565b60006002601d54601c54612b179190613ca6565b601c54612b249085613c5d565b612b2e9190613c92565b612b389190613c92565b90506000612b468284613c15565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612b8057612b80613be9565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612bd457600080fd5b505afa158015612be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0c9190613e1f565b81600181518110612c1f57612c1f613be9565b6001600160a01b03928316602091820292909201015260275460405163791ac94760e01b815291169063791ac94790612c65908590600090869030904290600401613ea5565b600060405180830381600087803b158015612c7f57600080fd5b505af1158015612c93573d6000803e3d6000fd5b5050505060006002601d54601c54612cab9190613ca6565b601c54612cb89047613c5d565b612cc29190613c92565b612ccc9190613c92565b90508315612dab57602754602a5460405163f305d71960e01b81526001600160a01b039283169263f305d719928592612d149230928b92600092839216904290600401613e3c565b6060604051808303818588803b158015612d2d57600080fd5b505af1158015612d41573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d669190613e77565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000612db78587613c15565b1115612e7657601f546021544791600091612dd29084613c92565b612ddc9190613c5d565b9050600060205460215484612df19190613c92565b612dfb9190613c5d565b602d546040519192506001600160a01b03169083156108fc029084906000818181858888f19350505050158015612e36573d6000803e3d6000fd5b50602c546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612e71573d6000803e3d6000fd5b505050505b505050505b50602d805460ff60a01b19169055565b603454600090610100900460ff16612f1f57612ea7858561338f565b603454610100900460ff16158015612ec45750612ec48585612a17565b15612f1f5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610b73565b6000612f2d868686866134a9565b60808101516001600160a01b038816600090815260016020526040902054919250612f5791613c15565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054612f8e9190613ca6565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff168015612fe257506001600160a01b03851660009081526007602052604090205460ff16155b15613029576001600160a01b03861660009081526002602052604090205461300b908590613c15565b6001600160a01b038716600090815260026020526040902055613169565b6001600160a01b03861660009081526007602052604090205460ff1615801561306a57506001600160a01b03851660009081526007602052604090205460ff165b156130b25780516001600160a01b0386166000908152600260205260409020546130949190613ca6565b6001600160a01b038616600090815260026020526040902055613169565b6001600160a01b03861660009081526007602052604090205460ff1680156130f257506001600160a01b03851660009081526007602052604090205460ff165b15613169576001600160a01b03861660009081526002602052604090205461311b908590613c15565b6001600160a01b038088166000908152600260205260408082209390935583519188168152919091205461314f9190613ca6565b6001600160a01b0386166000908152600260205260409020555b60408101511561318157613181868260400151613697565b60008160a001511180613198575060008160200151115b156131af576131af8160a001518260200151613763565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83600001516040516131f891815260200190565b60405180910390a350600195945050505050565b6025546024546000918291825b60085481101561335e5782600160006008848154811061323b5761323b613be9565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806132a6575081600260006008848154811061327f5761327f613be9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156132bc57602554602454945094505050509091565b60016000600883815481106132d3576132d3613be9565b60009182526020808320909101546001600160a01b031683528201929092526040019020546133029084613c15565b9250600260006008838154811061331b5761331b613be9565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461334a9083613c15565b91508061335681613c42565b915050613219565b5060245460255461336f9190613c92565b821015613386576025546024549350935050509091565b90939092509050565b603454610100900460ff16156133f35760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610b73565b6133fd8282612a17565b15801561341757506028546001600160a01b038281169116145b1561100e576001600160a01b03821660009081526009602052604090819020805460ff191660019081179091556034805461ff00191661010017905542603655602d805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161349d91901515815260200190565b60405180910390a15050565b6134e26040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61351b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006135256129f4565b90506135318186613c5d565b60808301528315613641576001600160a01b03861660009081526003602052604090205460ff161561357457601354600d55601454600e55601554600f556135bf565b6001600160a01b03871660009081526003602052604090205460ff16156135ac57601054600d55601154600e55601254600f556135bf565b601654600d55601754600e55601854600f555b601e54600d546135cf9087613c5d565b6135d99190613c92565b6020830152601e54600f54600e546135f19190613ca6565b6135fb9087613c5d565b6136059190613c92565b60408301819052602083015161361b9190613ca6565b6136259086613c15565b82526020820151613637908290613c5d565b60a083015261365a565b6000602083018190526040830181905285835260a08301525b80826040015161366a9190613c5d565b8260a001516136799190613ca6565b82608001516136889190613c15565b60608301525095945050505050565b60006136a16129f4565b905060006136af8284613c5d565b306000908152600160205260409020549091506136cd908290613ca6565b3060009081526001602090815260408083209390935560079052205460ff161561371d573060009081526002602052604090205461370c908490613ca6565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b816025546137719190613c15565b602555602654613782908290613ca6565b6026555050565b82805461379590613bae565b90600052602060002090601f0160209004810192826137b757600085556137fd565b82601f106137d057805160ff19168380011785556137fd565b828001600101855582156137fd579182015b828111156137fd5782518255916020019190600101906137e2565b5061380992915061380d565b5090565b5b80821115613809576000815560010161380e565b600060208083528351808285015260005b8181101561384f57858101830151858201604001528201613833565b81811115613861576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610c7257600080fd5b6000806040838503121561389f57600080fd5b82356138aa81613877565b946020939093013593505050565b803580151581146138c857600080fd5b919050565b600080604083850312156138e057600080fd5b82356138eb81613877565b91506138f9602084016138b8565b90509250929050565b60008060006060848603121561391757600080fd5b833561392281613877565b9250602084013561393281613877565b929592945050506040919091013590565b6000806040838503121561395657600080fd5b50508035926020909101359150565b60006020828403121561397757600080fd5b5035919050565b60008060006060848603121561399357600080fd5b505081359360208301359350604090920135919050565b6000602082840312156139bc57600080fd5b81356111ca81613877565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126139ee57600080fd5b813567ffffffffffffffff80821115613a0957613a096139c7565b604051601f8301601f19908116603f01168101908282118183101715613a3157613a316139c7565b81604052838152866020858801011115613a4a57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060808587031215613a8057600080fd5b8435613a8b81613877565b93506020850135613a9b81613877565b9250604085013567ffffffffffffffff80821115613ab857600080fd5b613ac4888389016139dd565b93506060870135915080821115613ada57600080fd5b50613ae7878288016139dd565b91505092959194509250565b600060208284031215613b0557600080fd5b6111ca826138b8565b60008060408385031215613b2157600080fd5b8235613b2c81613877565b91506020830135613b3c81613877565b809150509250929050565b60008060008060808587031215613b5d57600080fd5b5050823594602084013594506040840135936060013592509050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680613bc257607f821691505b60208210811415613be357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613c2757613c27613bff565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613c5657613c56613bff565b5060010190565b6000816000190483118215151615613c7757613c77613bff565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613ca157613ca1613c7c565b500490565b60008219821115613cb957613cb9613bff565b500190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b600181815b80851115613d56578160001904821115613d3c57613d3c613bff565b80851615613d4957918102915b93841c9390800290613d20565b509250929050565b600082613d6d57506001610d18565b81613d7a57506000610d18565b8160018114613d905760028114613d9a57613db6565b6001915050610d18565b60ff841115613dab57613dab613bff565b50506001821b610d18565b5060208310610133831016604e8410600b8410161715613dd9575081810a610d18565b613de38383613d1b565b8060001904821115613df757613df7613bff565b029392505050565b60006111ca8383613d5e565b600082613e1a57613e1a613c7c565b500690565b600060208284031215613e3157600080fd5b81516111ca81613877565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613e8c57600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613ef55784516001600160a01b031683529383019391830191600101613ed0565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122099a0eb5023a41561f116362f81a395be11f18062a7d92301c8a002abc6d32a7364736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103c65760003560e01c806364038409116101f2578063a9059cbb1161010d578063d9e66460116100a0578063eafb5a3c1161006f578063eafb5a3c14610ad3578063f6540ec714610af3578063f749cee214610b09578063fb78680d14610b2957600080fd5b8063d9e6646014610a41578063dc44b6a014610a61578063dd62ed3e14610a77578063ea08d30b14610abd57600080fd5b8063c49b9a80116100dc578063c49b9a80146109df578063c5d24189146109ff578063c860795214610a15578063d038b07e14610a2b57600080fd5b8063a9059cbb14610969578063b17b945a14610989578063bbcea6bf146109a9578063bf9e1464146109bf57600080fd5b806388790a681161018557806395d89b411161015457806395d89b41146108f45780639616aa321461090957806398dada8714610929578063a457c2d71461094957600080fd5b806388790a681461088757806388f820201461089d578063893d20e8146108d65780638da5cb5b146108d657600080fd5b806370a08231116101c157806370a082311461081c578063715018a61461083c57806371e078d51461085157806380c581d11461086757600080fd5b806364038409146107ba5780636612e66f146107d05780636bc87c3a146107f05780636cbdd5e31461080657600080fd5b8063313ce567116102e25780634eeaf458116102755780635342acb4116102445780635342acb414610721578063571ac8b01461075a578063575f18e51461077a57806358fa63ca1461079a57600080fd5b80634eeaf458146106ac5780634ef3cce5146106cc5780634fb2e45d146106e257806350a8e0161461070257600080fd5b806343b127a6116102b157806343b127a614610635578063452ed4f11461065557806345e8c85c146106755780634a74bb021461068b57600080fd5b8063313ce567146105bd578063384f6b51146105df57806339509351146105f55780633f3cf56c1461061557600080fd5b806313e461921161035a57806322976e0d1161032957806322976e0d1461054757806323b872dd1461055d578063260039571461057d5780632d8381191461059d57600080fd5b806313e46192146104e657806315639c1b1461050657806317eade331461051c57806318160ddd1461053257600080fd5b80630758d924116103965780630758d9241461045d578063095ea7b31461047d5780630e954d8e146104ad57806313114a9d146104d157600080fd5b806299d386146103d257806303fd2a45146103e95780630614117a1461042657806306fdde031461043b57600080fd5b366103cd57005b600080fd5b3480156103de57600080fd5b506103e7610b49565b005b3480156103f557600080fd5b50602a54610409906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561043257600080fd5b506103e7610c0e565b34801561044757600080fd5b50610450610c75565b60405161041d9190613822565b34801561046957600080fd5b50602754610409906001600160a01b031681565b34801561048957600080fd5b5061049d61049836600461388c565b610d07565b604051901515815260200161041d565b3480156104b957600080fd5b506104c360205481565b60405190815260200161041d565b3480156104dd57600080fd5b506026546104c3565b3480156104f257600080fd5b506103e76105013660046138cd565b610d1e565b34801561051257600080fd5b506104c3600d5481565b34801561052857600080fd5b506104c360215481565b34801561053e57600080fd5b506024546104c3565b34801561055357600080fd5b506104c3600f5481565b34801561056957600080fd5b5061049d610578366004613902565b611012565b34801561058957600080fd5b506103e7610598366004613943565b611065565b3480156105a957600080fd5b506104c36105b8366004613965565b61114d565b3480156105c957600080fd5b5060225460405160ff909116815260200161041d565b3480156105eb57600080fd5b506104c3601c5481565b34801561060157600080fd5b5061049d61061036600461388c565b6111d1565b34801561062157600080fd5b506103e7610630366004613943565b611208565b34801561064157600080fd5b506103e761065036600461397e565b6112fb565b34801561066157600080fd5b50602854610409906001600160a01b031681565b34801561068157600080fd5b506104c360165481565b34801561069757600080fd5b50602d5461049d90600160a81b900460ff1681565b3480156106b857600080fd5b506103e76106c736600461397e565b611381565b3480156106d857600080fd5b506104c3601d5481565b3480156106ee57600080fd5b506103e76106fd3660046139aa565b611407565b34801561070e57600080fd5b5060345461049d90610100900460ff1681565b34801561072d57600080fd5b5061049d61073c3660046139aa565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561076657600080fd5b5061049d6107753660046139aa565b6115a9565b34801561078657600080fd5b506103e761079536600461397e565b6115b7565b3480156107a657600080fd5b50602b54610409906001600160a01b031681565b3480156107c657600080fd5b506104c3602f5481565b3480156107dc57600080fd5b506103e76107eb3660046138cd565b61163d565b3480156107fc57600080fd5b506104c3600e5481565b34801561081257600080fd5b506104c360185481565b34801561082857600080fd5b506104c36108373660046139aa565b611692565b34801561084857600080fd5b506103e76116f1565b34801561085d57600080fd5b506104c3601f5481565b34801561087357600080fd5b506103e76108823660046138cd565b611770565b34801561089357600080fd5b506104c360145481565b3480156108a957600080fd5b5061049d6108b83660046139aa565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108e257600080fd5b506000546001600160a01b0316610409565b34801561090057600080fd5b50610450611853565b34801561091557600080fd5b506103e76109243660046139aa565b611862565b34801561093557600080fd5b506103e761094436600461397e565b611902565b34801561095557600080fd5b5061049d61096436600461388c565b61193a565b34801561097557600080fd5b5061049d61098436600461388c565b611971565b34801561099557600080fd5b506103e76109a4366004613a6a565b61197e565b3480156109b557600080fd5b506104c360135481565b3480156109cb57600080fd5b506103e76109da366004613943565b611f5a565b3480156109eb57600080fd5b506103e76109fa366004613af3565b611f8f565b348015610a0b57600080fd5b506104c360125481565b348015610a2157600080fd5b506104c360155481565b348015610a3757600080fd5b506104c360105481565b348015610a4d57600080fd5b50602954610409906001600160a01b031681565b348015610a6d57600080fd5b506104c360115481565b348015610a8357600080fd5b506104c3610a92366004613b0e565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610ac957600080fd5b506104c360175481565b348015610adf57600080fd5b506103e7610aee3660046139aa565b612011565b348015610aff57600080fd5b506104c360315481565b348015610b1557600080fd5b506103e7610b243660046139aa565b61239b565b348015610b3557600080fd5b506103e7610b44366004613b47565b61243b565b6000546001600160a01b03163314610b7c5760405162461bcd60e51b8152600401610b7390613b79565b60405180910390fd5b60345460ff1615610bca5760405162461bcd60e51b815260206004820152601860248201527754726164696e6720616c726561647920656e61626c65642160401b6044820152606401610b73565b610bd5306001610d1e565b602854610bec906001600160a01b03166001610d1e565b6034805460ff19166001179055602d805460ff60a81b1916600160a81b179055565b6000546001600160a01b03163314610c385760405162461bcd60e51b8152600401610b7390613b79565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610c72573d6000803e3d6000fd5b50565b6060600b8054610c8490613bae565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb090613bae565b8015610cfd5780601f10610cd257610100808354040283529160200191610cfd565b820191906000526020600020905b815481529060010190602001808311610ce057829003601f168201915b5050505050905090565b6000610d143384846124a4565b5060015b92915050565b6000546001600160a01b03163314610d485760405162461bcd60e51b8152600401610b7390613b79565b60018115151415610e7d576001600160a01b03821660009081526007602052604090205460ff1615610dbc5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610b73565b6001600160a01b03821660009081526001602052604090205415610e16576001600160a01b038216600090815260016020526040902054610dfc9061114d565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b8061100e576001600160a01b03821660009081526007602052604090205460ff16610eea5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610b73565b60005b60085481101561100c57826001600160a01b031660088281548110610f1457610f14613be9565b6000918252602090912001546001600160a01b03161415610ffa5760088054610f3f90600190613c15565b81548110610f4f57610f4f613be9565b600091825260209091200154600880546001600160a01b039092169183908110610f7b57610f7b613be9565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480610fd357610fd3613c2c565b600082815260209020810160001990810180546001600160a01b031916905501905561100c565b8061100481613c42565b915050610eed565b505b5050565b600061101f8484846125c8565b506001600160a01b03841660009081526005602090815260408083203380855292529091205461105b918691611056908690613c15565b6124a4565b5060019392505050565b6000546001600160a01b0316331461108f5760405162461bcd60e51b8152600401610b7390613b79565b600081836024546110a09190613c5d565b6110aa9190613c92565b90506103e86024546110bc9190613c92565b8110156111265760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e31604482015271129037b3103a37ba30b61039bab838363c9760711b6064820152608401610b73565b6030819055600a54829061113b908590613c5d565b6111459190613c92565b603155505050565b60006025548211156111b45760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b73565b60006111be6129f4565b90506111ca8184613c92565b9392505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d14918590611056908690613ca6565b6000546001600160a01b031633146112325760405162461bcd60e51b8152600401610b7390613b79565b600081836024546112439190613c5d565b61124d9190613c92565b90506103e860245461125f9190613c92565b8110156112d45760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610b73565b602e819055600a5482906112e9908590613c5d565b6112f39190613c92565b602f55505050565b6000546001600160a01b031633146113255760405162461bcd60e51b8152600401610b7390613b79565b60195483111580156113395750601a548211155b80156113475750601b548111155b61135057600080fd5b6113248161135e8486613ca6565b6113689190613ca6565b111561137357600080fd5b601092909255601155601255565b6000546001600160a01b031633146113ab5760405162461bcd60e51b8152600401610b7390613b79565b60195483111580156113bf5750601a548211155b80156113cd5750601b548111155b6113d657600080fd5b611af4816113e48486613ca6565b6113ee9190613ca6565b11156113f957600080fd5b601392909255601455601555565b6000546001600160a01b031633146114315760405162461bcd60e51b8152600401610b7390613b79565b6001600160a01b0381166114575760405162461bcd60e51b8152600401610b7390613cbe565b602a546001600160a01b03828116911614156114855760405162461bcd60e51b8152600401610b7390613cbe565b6000805461149e916001600160a01b039091169061163d565b6114a981600161163d565b6114b4816001610d1e565b600054602c546001600160a01b03908116911614156114e957602c80546001600160a01b0319166001600160a01b0383161790555b6000546114fe906001600160a01b0316611692565b600080546001600160a01b0390811682526005602090815260408084208684168552909152822092909255805490916115379116611692565b111561155e5760005461155c906001600160a01b03168261155782611692565b6125c8565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610d1882600019610d07565b6000546001600160a01b031633146115e15760405162461bcd60e51b8152600401610b7390613b79565b60195483111580156115f55750601a548211155b80156116035750601b548111155b61160c57600080fd5b6113248161161a8486613ca6565b6116249190613ca6565b111561162f57600080fd5b601692909255601755601855565b6000546001600160a01b031633146116675760405162461bcd60e51b8152600401610b7390613b79565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b03811660009081526007602052604081205460ff16156116cf57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610d189061114d565b6000546001600160a01b0316331461171b5760405162461bcd60e51b8152600401610b7390613b79565b60008054611734916001600160a01b039091169061163d565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331461179a5760405162461bcd60e51b8152600401610b7390613b79565b806117c157506001600160a01b03166000908152600360205260409020805460ff19169055565b600454156118285762093a80600454426117db9190613c15565b116118285760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610b73565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6060600c8054610c8490613bae565b6000546001600160a01b0316331461188c5760405162461bcd60e51b8152600401610b7390613b79565b602c546001600160a01b03828116911614156118e05760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610b73565b602c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461192c5760405162461bcd60e51b8152600401610b7390613b79565b601f92909255602055602155565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d14918590611056908690613c15565b600061105b3384846125c8565b6000546001600160a01b031633146119a85760405162461bcd60e51b8152600401610b7390613b79565b603a5460ff16156119b857600080fd5b602d80546001600160a01b038087166001600160a01b031992831617909255602c80549286169290911691909117905581516119fb90600b906020850190613789565b508051611a0f90600c906020840190613789565b5066038d7ea4c68000600a556022805460ff19166012908117909155602355602354611a3c90600a613dff565b600a54611a499190613c5d565b6024819055611a5a90600019613e0b565b611a6690600019613c15565b602555602954602780546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b158015611ac057600080fd5b505afa158015611ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af89190613e1f565b6001600160a01b031663c9c65396602760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b5457600080fd5b505afa158015611b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8c9190613e1f565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b158015611bd357600080fd5b505af1158015611be7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0b9190613e1f565b602880546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff191660011790553083526005825280832060275490941683529290522060001990556024546103e890611c73906014613c5d565b611c7d9190613c92565b602e55600a546103e890611c92906014613c5d565b611c9c9190613c92565b602f556024546103e890611cb1906014613c5d565b611cbb9190613c92565b603055600a546103e890611cd0906014613c5d565b611cda9190613c92565b603155602454620186a090611cf0906005613c5d565b611cfa9190613c92565b60325560245461271090611d0f906005613c5d565b611d199190613c92565b603355602954611d34906001600160a01b0316600019610d07565b50603a805460ff19166001908117909155602554906000611d5d6000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611d896000546001600160a01b031690565b602b546024546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3602754611dec9030906001600160a01b03166000196124a4565b611e17611e016000546001600160a01b031690565b306115576108376000546001600160a01b031690565b506027546001600160a01b031663f305d7194730611e3481611692565b600080611e496000546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611e6b96959493929190613e3c565b6060604051808303818588803b158015611e8457600080fd5b505af1158015611e98573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ebd9190613e77565b5050436039555060345460ff1615611f125760405162461bcd60e51b815260206004820152601860248201527754726164696e6720616c726561647920656e61626c65642160401b6044820152606401610b73565b611f1d306001610d1e565b602854611f34906001600160a01b03166001610d1e565b50506034805460ff191660011790555050602d805460ff60a81b1916600160a81b179055565b6000546001600160a01b03163314611f845760405162461bcd60e51b8152600401610b7390613b79565b601c91909155601d55565b6000546001600160a01b03163314611fb95760405162461bcd60e51b8152600401610b7390613b79565b602d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061200690831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461203b5760405162461bcd60e51b8152600401610b7390613b79565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b39190613e1f565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156120fb57600080fd5b505afa15801561210f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121339190613e1f565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561217957600080fd5b505afa15801561218d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b19190613e1f565b90506001600160a01b03811661235757816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156121fa57600080fd5b505afa15801561220e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122329190613e1f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561227a57600080fd5b505afa15801561228e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b29190613e1f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156122fa57600080fd5b505af115801561230e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123329190613e1f565b602880546001600160a01b0319166001600160a01b0392909216919091179055612373565b602880546001600160a01b0319166001600160a01b0383161790555b602780546001600160a01b0319166001600160a01b03841617905561100c30846000196124a4565b6000546001600160a01b031633146123c55760405162461bcd60e51b8152600401610b7390613b79565b602d546001600160a01b03828116911614156124195760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610b73565b602d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146124655760405162461bcd60e51b8152600401610b7390613b79565b82846024546124749190613c5d565b61247e9190613c92565b6032556024548190612491908490613c5d565b61249b9190613c92565b60335550505050565b6001600160a01b0383166125065760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b73565b6001600160a01b0382166125675760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b73565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661262e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b73565b6001600160a01b0383166126905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b73565b600082116126f25760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b73565b6126fc8484612a17565b1561291c5760345460ff166127535760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b73565b60375460ff1615612805576001600160a01b03841660009081526003602052604090205460ff16156127c4576001600160a01b0383166000908152603860205260409020544314156127a457600080fd5b6001600160a01b0383166000908152603860205260409020439055612805565b6001600160a01b0384166000908152603860205260409020544314156127e957600080fd5b6001600160a01b03841660009081526038602052604090204390555b602e548211156128685760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b73565b6029546001600160a01b0384811691161480159061289f57506001600160a01b03831660009081526003602052604090205460ff16155b1561291c57603054826128b185611692565b6128bb9190613ca6565b111561291c5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610b73565b6001600160a01b03841660009081526006602052604090205460019060ff168061295e57506001600160a01b03841660009081526006602052604090205460ff165b15612967575060005b6001600160a01b03841660009081526003602052604090205460ff16156129df57602d54600160a01b900460ff161580156129ab5750602d54600160a81b900460ff165b156129df5760006129bb30611692565b905060325481106129dd5760335481106129d457506033545b6129dd81612ad7565b505b6129eb85858584612e8b565b95945050505050565b6000806000612a0161320c565b9092509050612a108183613c92565b9250505090565b600080546001600160a01b03848116911614801590612a4457506000546001600160a01b03838116911614155b8015612a6957506001600160a01b03821660009081526009602052604090205460ff16155b8015612a8e57506001600160a01b03831660009081526009602052604090205460ff16155b8015612aa85750602a546001600160a01b03838116911614155b8015612abc57506001600160a01b03821615155b80156111ca57506001600160a01b0383163014159392505050565b602d805460ff60a01b1916600160a01b179055601d54601c54612afa9190613ca6565b612b0357612e7b565b60006002601d54601c54612b179190613ca6565b601c54612b249085613c5d565b612b2e9190613c92565b612b389190613c92565b90506000612b468284613c15565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612b8057612b80613be9565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612bd457600080fd5b505afa158015612be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0c9190613e1f565b81600181518110612c1f57612c1f613be9565b6001600160a01b03928316602091820292909201015260275460405163791ac94760e01b815291169063791ac94790612c65908590600090869030904290600401613ea5565b600060405180830381600087803b158015612c7f57600080fd5b505af1158015612c93573d6000803e3d6000fd5b5050505060006002601d54601c54612cab9190613ca6565b601c54612cb89047613c5d565b612cc29190613c92565b612ccc9190613c92565b90508315612dab57602754602a5460405163f305d71960e01b81526001600160a01b039283169263f305d719928592612d149230928b92600092839216904290600401613e3c565b6060604051808303818588803b158015612d2d57600080fd5b505af1158015612d41573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d669190613e77565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000612db78587613c15565b1115612e7657601f546021544791600091612dd29084613c92565b612ddc9190613c5d565b9050600060205460215484612df19190613c92565b612dfb9190613c5d565b602d546040519192506001600160a01b03169083156108fc029084906000818181858888f19350505050158015612e36573d6000803e3d6000fd5b50602c546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612e71573d6000803e3d6000fd5b505050505b505050505b50602d805460ff60a01b19169055565b603454600090610100900460ff16612f1f57612ea7858561338f565b603454610100900460ff16158015612ec45750612ec48585612a17565b15612f1f5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610b73565b6000612f2d868686866134a9565b60808101516001600160a01b038816600090815260016020526040902054919250612f5791613c15565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054612f8e9190613ca6565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff168015612fe257506001600160a01b03851660009081526007602052604090205460ff16155b15613029576001600160a01b03861660009081526002602052604090205461300b908590613c15565b6001600160a01b038716600090815260026020526040902055613169565b6001600160a01b03861660009081526007602052604090205460ff1615801561306a57506001600160a01b03851660009081526007602052604090205460ff165b156130b25780516001600160a01b0386166000908152600260205260409020546130949190613ca6565b6001600160a01b038616600090815260026020526040902055613169565b6001600160a01b03861660009081526007602052604090205460ff1680156130f257506001600160a01b03851660009081526007602052604090205460ff165b15613169576001600160a01b03861660009081526002602052604090205461311b908590613c15565b6001600160a01b038088166000908152600260205260408082209390935583519188168152919091205461314f9190613ca6565b6001600160a01b0386166000908152600260205260409020555b60408101511561318157613181868260400151613697565b60008160a001511180613198575060008160200151115b156131af576131af8160a001518260200151613763565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83600001516040516131f891815260200190565b60405180910390a350600195945050505050565b6025546024546000918291825b60085481101561335e5782600160006008848154811061323b5761323b613be9565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806132a6575081600260006008848154811061327f5761327f613be9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156132bc57602554602454945094505050509091565b60016000600883815481106132d3576132d3613be9565b60009182526020808320909101546001600160a01b031683528201929092526040019020546133029084613c15565b9250600260006008838154811061331b5761331b613be9565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461334a9083613c15565b91508061335681613c42565b915050613219565b5060245460255461336f9190613c92565b821015613386576025546024549350935050509091565b90939092509050565b603454610100900460ff16156133f35760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610b73565b6133fd8282612a17565b15801561341757506028546001600160a01b038281169116145b1561100e576001600160a01b03821660009081526009602052604090819020805460ff191660019081179091556034805461ff00191661010017905542603655602d805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161349d91901515815260200190565b60405180910390a15050565b6134e26040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61351b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006135256129f4565b90506135318186613c5d565b60808301528315613641576001600160a01b03861660009081526003602052604090205460ff161561357457601354600d55601454600e55601554600f556135bf565b6001600160a01b03871660009081526003602052604090205460ff16156135ac57601054600d55601154600e55601254600f556135bf565b601654600d55601754600e55601854600f555b601e54600d546135cf9087613c5d565b6135d99190613c92565b6020830152601e54600f54600e546135f19190613ca6565b6135fb9087613c5d565b6136059190613c92565b60408301819052602083015161361b9190613ca6565b6136259086613c15565b82526020820151613637908290613c5d565b60a083015261365a565b6000602083018190526040830181905285835260a08301525b80826040015161366a9190613c5d565b8260a001516136799190613ca6565b82608001516136889190613c15565b60608301525095945050505050565b60006136a16129f4565b905060006136af8284613c5d565b306000908152600160205260409020549091506136cd908290613ca6565b3060009081526001602090815260408083209390935560079052205460ff161561371d573060009081526002602052604090205461370c908490613ca6565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b816025546137719190613c15565b602555602654613782908290613ca6565b6026555050565b82805461379590613bae565b90600052602060002090601f0160209004810192826137b757600085556137fd565b82601f106137d057805160ff19168380011785556137fd565b828001600101855582156137fd579182015b828111156137fd5782518255916020019190600101906137e2565b5061380992915061380d565b5090565b5b80821115613809576000815560010161380e565b600060208083528351808285015260005b8181101561384f57858101830151858201604001528201613833565b81811115613861576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610c7257600080fd5b6000806040838503121561389f57600080fd5b82356138aa81613877565b946020939093013593505050565b803580151581146138c857600080fd5b919050565b600080604083850312156138e057600080fd5b82356138eb81613877565b91506138f9602084016138b8565b90509250929050565b60008060006060848603121561391757600080fd5b833561392281613877565b9250602084013561393281613877565b929592945050506040919091013590565b6000806040838503121561395657600080fd5b50508035926020909101359150565b60006020828403121561397757600080fd5b5035919050565b60008060006060848603121561399357600080fd5b505081359360208301359350604090920135919050565b6000602082840312156139bc57600080fd5b81356111ca81613877565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126139ee57600080fd5b813567ffffffffffffffff80821115613a0957613a096139c7565b604051601f8301601f19908116603f01168101908282118183101715613a3157613a316139c7565b81604052838152866020858801011115613a4a57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060808587031215613a8057600080fd5b8435613a8b81613877565b93506020850135613a9b81613877565b9250604085013567ffffffffffffffff80821115613ab857600080fd5b613ac4888389016139dd565b93506060870135915080821115613ada57600080fd5b50613ae7878288016139dd565b91505092959194509250565b600060208284031215613b0557600080fd5b6111ca826138b8565b60008060408385031215613b2157600080fd5b8235613b2c81613877565b91506020830135613b3c81613877565b809150509250929050565b60008060008060808587031215613b5d57600080fd5b5050823594602084013594506040840135936060013592509050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680613bc257607f821691505b60208210811415613be357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613c2757613c27613bff565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613c5657613c56613bff565b5060010190565b6000816000190483118215151615613c7757613c77613bff565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613ca157613ca1613c7c565b500490565b60008219821115613cb957613cb9613bff565b500190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b600181815b80851115613d56578160001904821115613d3c57613d3c613bff565b80851615613d4957918102915b93841c9390800290613d20565b509250929050565b600082613d6d57506001610d18565b81613d7a57506000610d18565b8160018114613d905760028114613d9a57613db6565b6001915050610d18565b60ff841115613dab57613dab613bff565b50506001821b610d18565b5060208310610133831016604e8410600b8410161715613dd9575081810a610d18565b613de38383613d1b565b8060001904821115613df757613df7613bff565b029392505050565b60006111ca8383613d5e565b600082613e1a57613e1a613c7c565b500690565b600060208284031215613e3157600080fd5b81516111ca81613877565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613e8c57600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613ef55784516001600160a01b031683529383019391830191600101613ed0565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122099a0eb5023a41561f116362f81a395be11f18062a7d92301c8a002abc6d32a7364736f6c63430008090033

Deployed Bytecode Sourcemap

8321:25491:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14795:283;;;;;;;;;;;;;:::i;:::-;;10315:64;;;;;;;;;;-1:-1:-1;10315:64:0;;;;-1:-1:-1;;;;;10315:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;10315:64:0;;;;;;;;33266:108;;;;;;;;;;;;;:::i;17315:71::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10186:35::-;;;;;;;;;;-1:-1:-1;10186:35:0;;;;-1:-1:-1;;;;;10186:35:0;;;17991:161;;;;;;;;;;-1:-1:-1;17991:161:0;;;;;:::i;:::-;;:::i;:::-;;;1679:14:1;;1672:22;1654:41;;1642:2;1627:18;17991:161:0;1514:187:1;9903:27:0;;;;;;;;;;;;;;;;;;;1852:25:1;;;1840:2;1825:18;9903:27:0;1706:177:1;24596:87:0;;;;;;;;;;-1:-1:-1;24665:10:0;;24596:87;;23682:906;;;;;;;;;;-1:-1:-1;23682:906:0;;;;;:::i;:::-;;:::i;9034:30::-;;;;;;;;;;;;;;;;9937:31;;;;;;;;;;;;;;;;17068:83;;;;;;;;;;-1:-1:-1;17141:7:0;;17068:83;;9110:35;;;;;;;;;;;;;;;;18288:266;;;;;;;;;;-1:-1:-1;18288:266:0;;;;;:::i;:::-;;:::i;22321:340::-;;;;;;;;;;-1:-1:-1;22321:340:0;;;;;:::i;:::-;;:::i;25023:250::-;;;;;;;;;;-1:-1:-1;25023:250:0;;;;;:::i;:::-;;:::i;17157:71::-;;;;;;;;;;-1:-1:-1;17216:9:0;;17157:71;;17216:9;;;;3414:36:1;;3402:2;3387:18;17157:71:0;3272:184:1;9730:34:0;;;;;;;;;;;;;;;;18562:215;;;;;;;;;;-1:-1:-1;18562:215:0;;;;;:::i;:::-;;:::i;21973:340::-;;;;;;;;;;-1:-1:-1;21973:340:0;;;;;:::i;:::-;;:::i;20270:433::-;;;;;;;;;;-1:-1:-1;20270:433:0;;;;;:::i;:::-;;:::i;10228:21::-;;;;;;;;;;-1:-1:-1;10228:21:0;;;;-1:-1:-1;;;;;10228:21:0;;;9450:38;;;;;;;;;;;;;;;;10576:41;;;;;;;;;;-1:-1:-1;10576:41:0;;;;-1:-1:-1;;;10576:41:0;;;;;;20711:437;;;;;;;;;;-1:-1:-1;20711:437:0;;;;;:::i;:::-;;:::i;9771:37::-;;;;;;;;;;;;;;;;15718:795;;;;;;;;;;-1:-1:-1;15718:795:0;;;;;:::i;:::-;;:::i;10885:36::-;;;;;;;;;;-1:-1:-1;10885:36:0;;;;;;;;;;;20139:123;;;;;;;;;;-1:-1:-1;20139:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;20227:27:0;20203:4;20227:27;;;:18;:27;;;;;;;;;20139:123;18160:120;;;;;;;;;;-1:-1:-1;18160:120:0;;;;;:::i;:::-;;:::i;21156:455::-;;;;;;;;;;-1:-1:-1;21156:455:0;;;;;:::i;:::-;;:::i;10386:64::-;;;;;;;;;;-1:-1:-1;10386:64:0;;;;-1:-1:-1;;;;;10386:64:0;;;10665:28;;;;;;;;;;;;;;;;23542:132;;;;;;;;;;-1:-1:-1;23542:132:0;;;;;:::i;:::-;;:::i;9071:32::-;;;;;;;;;;;;;;;;9542:40;;;;;;;;;;;;;;;;17610:198;;;;;;;;;;-1:-1:-1;17610:198:0;;;;;:::i;:::-;;:::i;16521:194::-;;;;;;;;;;;;;:::i;9866:30::-;;;;;;;;;;;;;;;;19579:424;;;;;;;;;;-1:-1:-1;19579:424:0;;;;;:::i;:::-;;:::i;9355:36::-;;;;;;;;;;;;;;;;20011:120;;;;;;;;;;-1:-1:-1;20011:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;20103:20:0;20079:4;20103:20;;;:11;:20;;;;;;;;;20011:120;17392:71;;;;;;;;;;-1:-1:-1;17435:7:0;15696:6;-1:-1:-1;;;;;15696:6:0;17392:71;;17234:75;;;;;;;;;;;;;:::i;23170:187::-;;;;;;;;;;-1:-1:-1;23170:187:0;;;;;:::i;:::-;;:::i;21619:166::-;;;;;;;;;;-1:-1:-1;21619:166:0;;;;;:::i;:::-;;:::i;18785:225::-;;;;;;;;;;-1:-1:-1;18785:225:0;;;;;:::i;:::-;;:::i;17816:167::-;;;;;;;;;;-1:-1:-1;17816:167:0;;;;;:::i;:::-;;:::i;12649:2138::-;;;;;;;;;;-1:-1:-1;12649:2138:0;;;;;:::i;:::-;;:::i;9314:34::-;;;;;;;;;;;;;;;;21793:172;;;;;;;;;;-1:-1:-1;21793:172:0;;;;;:::i;:::-;;:::i;23363:171::-;;;;;;;;;;-1:-1:-1;23363:171:0;;;;;:::i;:::-;;:::i;9258:47::-;;;;;;;;;;;;;;;;9398:39;;;;;;;;;;;;;;;;9154:43;;;;;;;;;;;;;;;;10277:29;;;;;;;;;;-1:-1:-1;10277:29:0;;;;-1:-1:-1;;;;;10277:29:0;;;9204:47;;;;;;;;;;;;;;;;17469:133;;;;;;;;;;-1:-1:-1;17469:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;17571:19:0;;;17553:7;17571:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17469:133;9495:40;;;;;;;;;;;;;;;;19018:553;;;;;;;;;;-1:-1:-1;19018:553:0;;;;;:::i;:::-;;:::i;10739:30::-;;;;;;;;;;;;;;;;22966:196;;;;;;;;;;-1:-1:-1;22966:196:0;;;;;:::i;:::-;;:::i;22669:289::-;;;;;;;;;;-1:-1:-1;22669:289:0;;;;;:::i;:::-;;:::i;14795:283::-;11729:6;;-1:-1:-1;;;;;11729:6:0;307:10;11729:22;11721:67;;;;-1:-1:-1;;;11721:67:0;;;;;;;:::i;:::-;;;;;;;;;14855:14:::1;::::0;::::1;;14854:15;14846:52;;;::::0;-1:-1:-1;;;14846:52:0;;7522:2:1;14846:52:0::1;::::0;::::1;7504:21:1::0;7561:2;7541:18;;;7534:30;-1:-1:-1;;;7580:18:1;;;7573:54;7644:18;;14846:52:0::1;7320:348:1::0;14846:52:0::1;14909:42;14939:4;14946;14909:21;:42::i;:::-;14984:6;::::0;14962:35:::1;::::0;-1:-1:-1;;;;;14984:6:0::1;::::0;14962:21:::1;:35::i;:::-;15010:14;:21:::0;;-1:-1:-1;;15010:21:0::1;15027:4;15010:21;::::0;;15042::::1;:28:::0;;-1:-1:-1;;;;15042:28:0::1;-1:-1:-1::0;;;15042:28:0::1;::::0;;14795:283::o;33266:108::-;11729:6;;-1:-1:-1;;;;;11729:6:0;307:10;11729:22;11721:67;;;;-1:-1:-1;;;11721:67:0;;;;;;;:::i;:::-;15669:7;15696:6;;33318:48:::1;::::0;-1:-1:-1;;;;;15696:6:0;;;;33344:21:::1;33318:48:::0;::::1;;;::::0;33344:21;;33318:48;15669:7;33318:48;33344:21;15696:6;33318:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;33266:108::o:0;17315:71::-;17354:13;17378:5;17371:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17315:71;:::o;17991:161::-;18066:4;18083:39;307:10;18106:7;18115:6;18083:8;:39::i;:::-;-1:-1:-1;18140:4:0;17991:161;;;;;:::o;23682:906::-;11729:6;;-1:-1:-1;;;;;11729:6:0;307:10;11729:22;11721:67;;;;-1:-1:-1;;;11721:67:0;;;;;;;:::i;:::-;23787:4:::1;23776:15:::0;::::1;;;23772:809;;;-1:-1:-1::0;;;;;23817:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23816:21;23808:62;;;::::0;-1:-1:-1;;;23808:62:0;;8260:2:1;23808:62:0::1;::::0;::::1;8242:21:1::0;8299:2;8279:18;;;8272:30;8338;8318:18;;;8311:58;8386:18;;23808:62:0::1;8058:352:1::0;23808:62:0::1;-1:-1:-1::0;;;;;23888:16:0;::::1;23907:1;23888:16:::0;;;:7:::1;:16;::::0;;;;;:20;23885:116:::1;;-1:-1:-1::0;;;;;23968:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;23948:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;23929:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;23885:116:::1;-1:-1:-1::0;;;;;;24015:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24015:27:0::1;24038:4;24015:27:::0;;::::1;::::0;;;24057:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24057:23:0::1;::::0;;::::1;::::0;;23682:906::o;23772:809::-:1;24102:16:::0;24098:483:::1;;-1:-1:-1::0;;;;;24143:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24135:61;;;::::0;-1:-1:-1;;;24135:61:0;;8617:2:1;24135:61:0::1;::::0;::::1;8599:21:1::0;8656:2;8636:18;;;8629:30;8695;8675:18;;;8668:58;8743:18;;24135:61:0::1;8415:352:1::0;24135:61:0::1;24216:9;24211:359;24235:9;:16:::0;24231:20;::::1;24211:359;;;24297:7;-1:-1:-1::0;;;;;24281:23:0::1;:9;24291:1;24281:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24281:12:0::1;:23;24277:278;;;24344:9;24354:16:::0;;:20:::1;::::0;24373:1:::1;::::0;24354:20:::1;:::i;:::-;24344:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;24329:9:::1;:12:::0;;-1:-1:-1;;;;;24344:31:0;;::::1;::::0;24339:1;;24329:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;24329:46:0::1;-1:-1:-1::0;;;;;24329:46:0;;::::1;;::::0;;24398:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24441:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24441:28:0::1;::::0;;24492:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24492:15:0;;;;;-1:-1:-1;;;;;;24492:15:0::1;::::0;;;;;24530:5:::1;;24277:278;24253:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24211:359;;;;24098:483;23682:906:::0;;:::o;18288:266::-;18386:4;18403:36;18413:6;18421:9;18432:6;18403:9;:36::i;:::-;-1:-1:-1;;;;;;18481:19:0;;;;;;:11;:19;;;;;;;;307:10;18481:33;;;;;;;;;18450:74;;18459:6;;18481:42;;18517:6;;18481:42;:::i;:::-;18450:8;:74::i;:::-;-1:-1:-1;18542:4:0;18288:266;;;;;:::o;22321:340::-;11729:6;;-1:-1:-1;;;;;11729:6:0;307:10;11729:22;11721:67;;;;-1:-1:-1;;;11721:67:0;;;;;;;:::i;:::-;22411:13:::1;22449:7;22438;22428;;:17;;;;:::i;:::-;22427:29;;;;:::i;:::-;22411:45;;22495:4;22485:7;;:14;;;;:::i;:::-;22475:5;:25;;22467:88;;;::::0;-1:-1:-1;;;22467:88:0;;10070:2:1;22467:88:0::1;::::0;::::1;10052:21:1::0;10109:2;10089:18;;;10082:30;10148:34;10128:18;;;10121:62;-1:-1:-1;;;10199:18:1;;;10192:48;10257:19;;22467:88:0::1;9868:414:1::0;22467:88:0::1;22566:14;:22:::0;;;22618:14:::1;::::0;22646:7;;22618:24:::1;::::0;22635:7;;22618:24:::1;:::i;:::-;22617:36;;;;:::i;:::-;22599:15;:54:::0;-1:-1:-1;;;22321:340:0:o;25023:250::-;25089:7;25128;;25117;:18;;25109:73;;;;-1:-1:-1;;;25109:73:0;;10489:2:1;25109:73:0;;;10471:21:1;10528:2;10508:18;;;10501:30;10567:34;10547:18;;;10540:62;-1:-1:-1;;;10618:18:1;;;10611:40;10668:19;;25109:73:0;10287:406:1;25109:73:0;25193:19;25216:10;:8;:10::i;:::-;25193:33;-1:-1:-1;25244:21:0;25193:33;25244:7;:21;:::i;:::-;25237:28;25023:250;-1:-1:-1;;;25023:250:0:o;18562:215::-;307:10;18650:4;18699:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18699:34:0;;;;;;;;;;18650:4;;18667:80;;18690:7;;18699:47;;18736:10;;18699:47;:::i;21973:340::-;11729:6;;-1:-1:-1;;;;;11729:6:0;307:10;11729:22;11721:67;;;;-1:-1:-1;;;11721:67:0;;;;;;;:::i;:::-;22062:13:::1;22100:7;22089;22079;;:17;;;;:::i;:::-;22078:29;;;;:::i;:::-;22062:45;;22146:4;22136:7;;:14;;;;:::i;:::-;22126:5;:25;;22118:93;;;::::0;-1:-1:-1;;;22118:93:0;;11033:2:1;22118:93:0::1;::::0;::::1;11015:21:1::0;11072:2;11052:18;;;11045:30;11111:34;11091:18;;;11084:62;11182:25;11162:18;;;11155:53;11225:19;;22118:93:0::1;10831:419:1::0;22118:93:0::1;22222:12;:20:::0;;;22270:14:::1;::::0;22298:7;;22270:24:::1;::::0;22287:7;;22270:24:::1;:::i;:::-;22269:36;;;;:::i;:::-;22253:13;:52:::0;-1:-1:-1;;;21973:340:0:o;20270:433::-;11729:6;;-1:-1:-1;;;;;11729:6:0;307:10;11729:22;11721:67;;;;-1:-1:-1;;;11721:67:0;;;;;;;:::i;:::-;20393:13:::1;;20382:7;:24;;:73;;;;;20440:15;;20427:9;:28;;20382:73;:122;;;;;20489:15;;20476:9;:28;;20382:122;20374:149;;;::::0;::::1;;20577:4;20564:9:::0;20542:19:::1;20552:9:::0;20542:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;20534:48;;;::::0;::::1;;20593:14;:24:::0;;;;20628:16:::1;:28:::0;20667:16:::1;:28:::0;20270:433::o;20711:437::-;11729:6;;-1:-1:-1;;;;;11729:6:0;307:10;11729:22;11721:67;;;;-1:-1:-1;;;11721:67:0;;;;;;;:::i;:::-;20835:13:::1;;20824:7;:24;;:73;;;;;20882:15;;20869:9;:28;;20824:73;:122;;;;;20931:15;;20918:9;:28;;20824:122;20816:149;;;::::0;::::1;;21019:4;21006:9:::0;20984:19:::1;20994:9:::0;20984:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;20976:48;;;::::0;::::1;;21035:15;:25:::0;;;;21071:17:::1;:29:::0;21111:17:::1;:29:::0;20711:437::o;15718:795::-;11729:6;;-1:-1:-1;;;;;11729:6:0;307:10;11729:22;11721:67;;;;-1:-1:-1;;;11721:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15799:22:0;::::1;15791:96;;;;-1:-1:-1::0;;;15791:96:0::1;;;;;;;:::i;:::-;15918:4;::::0;-1:-1:-1;;;;;15906:16:0;;::::1;15918:4:::0;::::1;15906:16;;15898:90;;;;-1:-1:-1::0;;;15898:90:0::1;;;;;;;:::i;:::-;16018:6;::::0;;15999:33:::1;::::0;-1:-1:-1;;;;;16018:6:0;;::::1;::::0;15999:18:::1;:33::i;:::-;16043:34;16062:8;16072:4;16043:18;:34::i;:::-;16088:37;16110:8;16120:4;16088:21;:37::i;:::-;16172:6;::::0;16150:10:::1;::::0;-1:-1:-1;;;;;16150:10:0;;::::1;16172:6:::0;::::1;16150:29;16146:78;;;16194:10;:30:::0;;-1:-1:-1;;;;;;16194:30:0::1;-1:-1:-1::0;;;;;16194:30:0;::::1;;::::0;;16146:78:::1;16287:6;::::0;16277:17:::1;::::0;-1:-1:-1;;;;;16287:6:0::1;16277:9;:17::i;:::-;16245:19;16257:6:::0;;-1:-1:-1;;;;;16257:6:0;;::::1;16245:19:::0;;:11:::1;:19;::::0;;;;;;;:29;;::::1;::::0;;;;;;;:49;;;;16318:6;;16245:19;;16308:17:::1;::::0;16318:6:::1;16308:9;:17::i;:::-;:21;16305:99;;;16356:6;::::0;16346:46:::1;::::0;-1:-1:-1;;;;;16356:6:0::1;16364:8:::0;16374:17:::1;16356:6:::0;16374:9:::1;:17::i;:::-;16346:9;:46::i;:::-;;16305:99;16424:6;:17:::0;;-1:-1:-1;;;;;;16424:17:0::1;-1:-1:-1::0;;;;;16424:17:0;::::1;::::0;;::::1;::::0;;16457:38:::1;::::0;16424:17;;;;16457:38:::1;::::0;16424:6;16457:38:::1;15718:795:::0;:::o;18160:120::-;18213:4;18237:35;18245:7;-1:-1:-1;;18237:7:0;:35::i;21156:455::-;11729:6;;-1:-1:-1;;;;;11729:6:0;307:10;11729:22;11721:67;;;;-1:-1:-1;;;11721:67:0;;;;;;;:::i;:::-;21286:13:::1;;21275:7;:24;;:73;;;;;21333:15;;21320:9;:28;;21275:73;:122;;;;;21382:15;;21369:9;:28;;21275:122;21267:149;;;::::0;::::1;;21470:4;21457:9:::0;21435:19:::1;21445:9:::0;21435:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;21427:48;;;::::0;::::1;;21486:19;:29:::0;;;;21526:21:::1;:33:::0;21570:21:::1;:33:::0;21156:455::o;23542:132::-;11729:6;;-1:-1:-1;;;;;11729:6:0;307:10;11729:22;11721:67;;;;-1:-1:-1;;;11721:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23629:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:37;;-1:-1:-1;;23629:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23542:132::o;17610:198::-;-1:-1:-1;;;;;17700:20:0;;17676:7;17700:20;;;:11;:20;;;;;;;;17696:49;;;-1:-1:-1;;;;;;17729:16:0;;;;;:7;:16;;;;;;;17610:198::o;17696:49::-;-1:-1:-1;;;;;17783:16:0;;;;;;:7;:16;;;;;;17763:37;;:19;:37::i;16521:194::-;11729:6;;-1:-1:-1;;;;;11729:6:0;307:10;11729:22;11721:67;;;;-1:-1:-1;;;11721:67:0;;;;;;;:::i;:::-;16607:6:::1;::::0;;16588:33:::1;::::0;-1:-1:-1;;;;;16607:6:0;;::::1;::::0;16588:18:::1;:33::i;:::-;16649:1;16632:19:::0;;-1:-1:-1;;;;;;16632:19:0::1;::::0;;16667:40:::1;::::0;16649:1;;16667:40:::1;::::0;16649:1;;16667:40:::1;16521:194::o:0;19579:424::-;11729:6;;-1:-1:-1;;;;;11729:6:0;307:10;11729:22;11721:67;;;;-1:-1:-1;;;11721:67:0;;;;;;;:::i;:::-;19660:16;19656:340:::1;;-1:-1:-1::0;;;;;;19693:13:0::1;19709:5;19693:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;19693:21:0::1;::::0;;23682:906::o;19656:340::-:1;19751:17;::::0;:22;19747:153:::1;;19840:7;19820:17;;19802:15;:35;;;;:::i;:::-;:45;19794:90;;;::::0;-1:-1:-1;;;19794:90:0;;11887:2:1;19794:90:0::1;::::0;::::1;11869:21:1::0;;;11906:18;;;11899:30;11965:34;11945:18;;;11938:62;12017:18;;19794:90:0::1;11685:356:1::0;19794:90:0::1;-1:-1:-1::0;;;;;19914:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;19914:20:0::1;19930:4;19914:20;::::0;;19969:15:::1;19949:17;:35:::0;19579:424;;:::o;17234:75::-;17275:13;17299:7;17292:14;;;;;:::i;23170:187::-;11729:6;;-1:-1:-1;;;;;11729:6:0;307:10;11729:22;11721:67;;;;-1:-1:-1;;;11721:67:0;;;;;;;:::i;:::-;23260:10:::1;::::0;-1:-1:-1;;;;;23260:23:0;;::::1;:10:::0;::::1;:23;;23252:55;;;::::0;-1:-1:-1;;;23252:55:0;;12248:2:1;23252:55:0::1;::::0;::::1;12230:21:1::0;12287:2;12267:18;;;12260:30;-1:-1:-1;;;12306:18:1;;;12299:49;12365:18;;23252:55:0::1;12046:343:1::0;23252:55:0::1;23318:10;:31:::0;;-1:-1:-1;;;;;;23318:31:0::1;-1:-1:-1::0;;;;;23318:31:0;;;::::1;::::0;;;::::1;::::0;;23170:187::o;21619:166::-;11729:6;;-1:-1:-1;;;;;11729:6:0;307:10;11729:22;11721:67;;;;-1:-1:-1;;;11721:67:0;;;;;;;:::i;:::-;21709:11:::1;:16:::0;;;;21736:8:::1;:13:::0;21760:12:::1;:17:::0;21619:166::o;18785:225::-;307:10;18878:4;18927:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18927:34:0;;;;;;;;;;18878:4;;18895:85;;18918:7;;18927:52;;18964:15;;18927:52;:::i;17816:167::-;17894:4;17911:42;307:10;17935:9;17946:6;17911:9;:42::i;12649:2138::-;11729:6;;-1:-1:-1;;;;;11729:6:0;307:10;11729:22;11721:67;;;;-1:-1:-1;;;11721:67:0;;;;;;;:::i;:::-;12826:19:::1;::::0;::::1;;12825:20;12817:29;;;::::0;::::1;;12859:13;:40:::0;;-1:-1:-1;;;;;12859:40:0;;::::1;-1:-1:-1::0;;;;;;12859:40:0;;::::1;;::::0;;;12910:10:::1;:34:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;12957:18;;::::1;::::0;:5:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;12986:22:0;;::::1;::::0;:7:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;13036:21:0::1;13019:14;:38:::0;13124:9:::1;:14:::0;;-1:-1:-1;;13124:14:0::1;13136:2;13124:14:::0;;::::1;::::0;;;13153:12:::1;:24:::0;13316:12:::1;::::0;13312:16:::1;::::0;:2:::1;:16;:::i;:::-;13294:14;;:35;;;;:::i;:::-;13284:7;:45:::0;;;13358:13:::1;::::0;-1:-1:-1;;13358:13:0::1;:::i;:::-;13351:21;::::0;-1:-1:-1;;13351:21:0::1;:::i;:::-;13340:7;:33:::0;13417:14:::1;::::0;13386:9:::1;:46:::0;;-1:-1:-1;;;;;;13386:46:0::1;-1:-1:-1::0;;;;;13417:14:0;;::::1;13386:46:::0;;::::1;::::0;;13470:19:::1;::::0;;-1:-1:-1;;;13470:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;13417:14;13470:19;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13452:49:0::1;;13502:9;;;;;;;;;-1:-1:-1::0;;;;;13502:9:0::1;-1:-1:-1::0;;;;;13502:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13452:82;::::0;-1:-1:-1;;;;;;13452:82:0::1;::::0;;;;;;-1:-1:-1;;;;;14371:15:1;;;13452:82:0::1;::::0;::::1;14353:34:1::0;13528:4:0::1;14403:18:1::0;;;14396:43;14288:18;;13452:82:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13443:6;:91:::0;;-1:-1:-1;;;;;;13443:91:0::1;-1:-1:-1::0;;;;;13443:91:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;13545:15:0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;13545:22:0::1;-1:-1:-1::0;13545:22:0::1;::::0;;13598:4:::1;13578:26:::0;;:11:::1;:26:::0;;;;;13613:9:::1;::::0;;;::::1;13578:46:::0;;;;;;-1:-1:-1;;13578:66:0;;13681:7:::1;::::0;13697:4:::1;::::0;13681:12:::1;::::0;13691:2:::1;13681:12;:::i;:::-;13680:21;;;;:::i;:::-;13665:12;:36:::0;13729:14:::1;::::0;13752:4:::1;::::0;13729:19:::1;::::0;13746:2:::1;13729:19;:::i;:::-;13728:28;;;;:::i;:::-;13712:13;:44:::0;13785:7:::1;::::0;13801:4:::1;::::0;13785:12:::1;::::0;13795:2:::1;13785:12;:::i;:::-;13784:21;;;;:::i;:::-;13767:14;:38:::0;13835:14:::1;::::0;13858:4:::1;::::0;13835:19:::1;::::0;13852:2:::1;13835:19;:::i;:::-;13834:28;;;;:::i;:::-;13816:15;:46:::0;13890:7:::1;::::0;13905:6:::1;::::0;13890:11:::1;::::0;13900:1:::1;13890:11;:::i;:::-;13889:22;;;;:::i;:::-;13873:13;:38:::0;13936:7:::1;::::0;13951:5:::1;::::0;13936:11:::1;::::0;13946:1:::1;13936:11;:::i;:::-;13935:21;;;;:::i;:::-;13922:10;:34:::0;13977:14:::1;::::0;13969:42:::1;::::0;-1:-1:-1;;;;;13977:14:0::1;-1:-1:-1::0;;13969:7:0::1;:42::i;:::-;-1:-1:-1::0;14024:19:0::1;:26:::0;;-1:-1:-1;;14024:26:0::1;14046:4;14024:26:::0;;::::1;::::0;;;14080:7:::1;::::0;;14024:19:::1;14069:7;15669::::0;15696:6;-1:-1:-1;;;;;15696:6:0;;15631:79;14069:7:::1;-1:-1:-1::0;;;;;14061:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;14061:16:0;:26;14118:7:::1;15669::::0;15696:6;-1:-1:-1;;;;;15696:6:0;;15631:79;14118:7:::1;14112:4;::::0;14127:7:::1;::::0;14103:32:::1;::::0;1852:25:1;;;-1:-1:-1;;;;;14103:32:0;;::::1;::::0;14112:4;;::::1;::::0;14103:32:::1;::::0;1840:2:1;1825:18;14103:32:0::1;;;;;;;14180:9;::::0;14148:62:::1;::::0;14165:4:::1;::::0;-1:-1:-1;;;;;14180:9:0::1;-1:-1:-1::0;;14148:8:0::1;:62::i;:::-;14223:53;14233:7;15669::::0;15696:6;-1:-1:-1;;;;;15696:6:0;;15631:79;14233:7:::1;14250:4;14257:18;14267:7;15669::::0;15696:6;-1:-1:-1;;;;;15696:6:0;;15631:79;14223:53:::1;-1:-1:-1::0;14289:9:0::1;::::0;-1:-1:-1;;;;;14289:9:0::1;:25;14322:21;14367:4;14387:24;14367:4:::0;14387:9:::1;:24::i;:::-;14426:1;14443::::0;14460:7:::1;15669::::0;15696:6;-1:-1:-1;;;;;15696:6:0;;15631:79;14460:7:::1;14482:15;14289:219;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;14530:12:0::1;14519:8;:23:::0;-1:-1:-1;14564:14:0::1;::::0;::::1;;14563:15;14555:52;;;::::0;-1:-1:-1;;;14555:52:0;;7522:2:1;14555:52:0::1;::::0;::::1;7504:21:1::0;7561:2;7541:18;;;7534:30;-1:-1:-1;;;7580:18:1;;;7573:54;7644:18;;14555:52:0::1;7320:348:1::0;14555:52:0::1;14618:42;14648:4;14655;14618:21;:42::i;:::-;14693:6;::::0;14671:35:::1;::::0;-1:-1:-1;;;;;14693:6:0::1;::::0;14671:21:::1;:35::i;:::-;-1:-1:-1::0;;14719:14:0::1;:21:::0;;-1:-1:-1;;14719:21:0::1;14736:4;14719:21;::::0;;-1:-1:-1;;14751:21:0::1;:28:::0;;-1:-1:-1;;;;14751:28:0::1;-1:-1:-1::0;;;14751:28:0::1;::::0;;12649:2138::o;21793:172::-;11729:6;;-1:-1:-1;;;;;11729:6:0;307:10;11729:22;11721:67;;;;-1:-1:-1;;;11721:67:0;;;;;;;:::i;:::-;21892:15:::1;:27:::0;;;;21930:15:::1;:27:::0;21793:172::o;23363:171::-;11729:6;;-1:-1:-1;;;;;11729:6:0;307:10;11729:22;11721:67;;;;-1:-1:-1;;;11721:67:0;;;;;;;:::i;:::-;23440:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;23440:32:0::1;-1:-1:-1::0;;;;23440:32:0;;::::1;;::::0;;23488:38:::1;::::0;::::1;::::0;::::1;::::0;23464:8;1679:14:1;1672:22;1654:41;;1642:2;1627:18;;1514:187;23488:38:0::1;;;;;;;;23363:171:::0;:::o;19018:553::-;11729:6;;-1:-1:-1;;;;;11729:6:0;307:10;11729:22;11721:67;;;;-1:-1:-1;;;11721:67:0;;;;;;;:::i;:::-;19091:29:::1;19142:9;19091:61;;19163:16;19200:10;-1:-1:-1::0;;;;;19200:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19182:47:0::1;;19238:4;19245:10;-1:-1:-1::0;;;;;19245:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19182:81;::::0;-1:-1:-1;;;;;;19182:81:0::1;::::0;;;;;;-1:-1:-1;;;;;14371:15:1;;;19182:81:0::1;::::0;::::1;14353:34:1::0;14423:15;;14403:18;;;14396:43;14288:18;;19182:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19163:100:::0;-1:-1:-1;;;;;;19278:22:0;::::1;19274:207;;19344:10;-1:-1:-1::0;;;;;19344:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19326:50:0::1;;19385:4;19392:10;-1:-1:-1::0;;;;;19392:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19326:84;::::0;-1:-1:-1;;;;;;19326:84:0::1;::::0;;;;;;-1:-1:-1;;;;;14371:15:1;;;19326:84:0::1;::::0;::::1;14353:34:1::0;14423:15;;14403:18;;;14396:43;14288:18;;19326:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19317:6;:93:::0;;-1:-1:-1;;;;;;19317:93:0::1;-1:-1:-1::0;;;;;19317:93:0;;;::::1;::::0;;;::::1;::::0;;19274:207:::1;;;19452:6;:17:::0;;-1:-1:-1;;;;;;19452:17:0::1;-1:-1:-1::0;;;;;19452:17:0;::::1;;::::0;;19274:207:::1;19491:9;:22:::0;;-1:-1:-1;;;;;;19491:22:0::1;-1:-1:-1::0;;;;;19491:22:0;::::1;;::::0;;19524:39:::1;19541:4;19548:9:::0;-1:-1:-1;;19524:8:0::1;:39::i;22966:196::-:0;11729:6;;-1:-1:-1;;;;;11729:6:0;307:10;11729:22;11721:67;;;;-1:-1:-1;;;11721:67:0;;;;;;;:::i;:::-;23059:13:::1;::::0;-1:-1:-1;;;;;23059:26:0;;::::1;:13:::0;::::1;:26;;23051:58;;;::::0;-1:-1:-1;;;23051:58:0;;12248:2:1;23051:58:0::1;::::0;::::1;12230:21:1::0;12287:2;12267:18;;;12260:30;-1:-1:-1;;;12306:18:1;;;12299:49;12365:18;;23051:58:0::1;12046:343:1::0;23051:58:0::1;23120:13;:34:::0;;-1:-1:-1;;;;;;23120:34:0::1;-1:-1:-1::0;;;;;23120:34:0;;;::::1;::::0;;;::::1;::::0;;22966:196::o;22669:289::-;11729:6;;-1:-1:-1;;;;;11729:6:0;307:10;11729:22;11721:67;;;;-1:-1:-1;;;11721:67:0;;;;;;;:::i;:::-;22869:16:::1;22849;22839:7;;:26;;;;:::i;:::-;22838:47;;;;:::i;:::-;22822:13;:63:::0;22910:7:::1;::::0;22937:13;;22910:23:::1;::::0;22920:13;;22910:23:::1;:::i;:::-;22909:41;;;;:::i;:::-;22896:10;:54:::0;-1:-1:-1;;;;22669:289:0:o;25285:342::-;-1:-1:-1;;;;;25380:20:0;;25372:69;;;;-1:-1:-1;;;25372:69:0;;15575:2:1;25372:69:0;;;15557:21:1;15614:2;15594:18;;;15587:30;15653:34;15633:18;;;15626:62;-1:-1:-1;;;15704:18:1;;;15697:34;15748:19;;25372:69:0;15373:400:1;25372:69:0;-1:-1:-1;;;;;25460:21:0;;25452:68;;;;-1:-1:-1;;;25452:68:0;;15980:2:1;25452:68:0;;;15962:21:1;16019:2;15999:18;;;15992:30;16058:34;16038:18;;;16031:62;-1:-1:-1;;;16109:18:1;;;16102:32;16151:19;;25452:68:0;15778:398:1;25452:68:0;-1:-1:-1;;;;;25533:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;25586:33;;1852:25:1;;;25586:33:0;;1825:18:1;25586:33:0;;;;;;;25285:342;;;:::o;25635:1776::-;25714:4;-1:-1:-1;;;;;25739:18:0;;25731:68;;;;-1:-1:-1;;;25731:68:0;;16383:2:1;25731:68:0;;;16365:21:1;16422:2;16402:18;;;16395:30;16461:34;16441:18;;;16434:62;-1:-1:-1;;;16512:18:1;;;16505:35;16557:19;;25731:68:0;16181:401:1;25731:68:0;-1:-1:-1;;;;;25818:16:0;;25810:64;;;;-1:-1:-1;;;25810:64:0;;16789:2:1;25810:64:0;;;16771:21:1;16828:2;16808:18;;;16801:30;16867:34;16847:18;;;16840:62;-1:-1:-1;;;16918:18:1;;;16911:33;16961:19;;25810:64:0;16587:399:1;25810:64:0;25902:1;25893:6;:10;25885:64;;;;-1:-1:-1;;;25885:64:0;;17193:2:1;25885:64:0;;;17175:21:1;17232:2;17212:18;;;17205:30;17271:34;17251:18;;;17244:62;-1:-1:-1;;;17322:18:1;;;17315:39;17371:19;;25885:64:0;16991:405:1;25885:64:0;25963:20;25974:4;25980:2;25963:10;:20::i;:::-;25960:776;;;26004:14;;;;26000:89;;26039:34;;-1:-1:-1;;;26039:34:0;;17603:2:1;26039:34:0;;;17585:21:1;17642:2;17622:18;;;17615:30;17681:26;17661:18;;;17654:54;17725:18;;26039:34:0;17401:348:1;26000:89:0;26107:15;;;;26103:347;;;-1:-1:-1;;;;;26147:13:0;;;;;;:7;:13;;;;;;;;26143:292;;;-1:-1:-1;;;;;26192:13:0;;;;;;:9;:13;;;;;;26209:12;26192:29;;26184:38;;;;;;-1:-1:-1;;;;;26245:13:0;;;;;;:9;:13;;;;;26261:12;26245:28;;26143:292;;;-1:-1:-1;;;;;26330:15:0;;;;;;:9;:15;;;;;;26349:12;26330:31;;26322:40;;;;;;-1:-1:-1;;;;;26385:15:0;;;;;;:9;:15;;;;;26403:12;26385:30;;26143:292;26482:12;;26472:6;:22;;26464:75;;;;-1:-1:-1;;;26464:75:0;;17956:2:1;26464:75:0;;;17938:21:1;17995:2;17975:18;;;17968:30;18034:34;18014:18;;;18007:62;-1:-1:-1;;;18085:18:1;;;18078:38;18133:19;;26464:75:0;17754:404:1;26464:75:0;26563:14;;-1:-1:-1;;;;;26557:20:0;;;26563:14;;26557:20;;;;:36;;-1:-1:-1;;;;;;26582:11:0;;;;;;:7;:11;;;;;;;;26581:12;26557:36;26554:171;;;26648:14;;26638:6;26622:13;26632:2;26622:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;26614:95;;;;-1:-1:-1;;;26614:95:0;;18365:2:1;26614:95:0;;;18347:21:1;18404:2;18384:18;;;18377:30;18443:34;18423:18;;;18416:62;-1:-1:-1;;;18494:18:1;;;18487:40;18544:19;;26614:95:0;18163:406:1;26614:95:0;-1:-1:-1;;;;;26779:24:0;;26746:12;26779:24;;;:18;:24;;;;;;26761:4;;26779:24;;;:50;;-1:-1:-1;;;;;;26807:22:0;;;;;;:18;:22;;;;;;;;26779:50;26776:96;;;-1:-1:-1;26855:5:0;26776:96;-1:-1:-1;;;;;26888:11:0;;;;;;:7;:11;;;;;;;;26884:457;;;26921:16;;-1:-1:-1;;;26921:16:0;;;;26920:17;:59;;;;-1:-1:-1;26958:21:0;;-1:-1:-1;;;26958:21:0;;;;26920:59;26916:408;;;27014:28;27045:24;27063:4;27045:9;:24::i;:::-;27014:55;;27116:13;;27092:20;:37;27088:221;;27181:10;;27157:20;:34;27154:77;;-1:-1:-1;27218:10:0;;27154:77;27253:36;27268:20;27253:14;:36::i;:::-;26995:329;26916:408;27359:44;27377:4;27383:2;27387:6;27395:7;27359:17;:44::i;:::-;27352:51;25635:1776;-1:-1:-1;;;;;25635:1776:0:o;32387:161::-;32429:7;32450:15;32467;32486:19;:17;:19::i;:::-;32449:56;;-1:-1:-1;32449:56:0;-1:-1:-1;32523:17:0;32449:56;;32523:17;:::i;:::-;32516:24;;;;32387:161;:::o;24691:324::-;24760:4;15696:6;;-1:-1:-1;;;;;24784:15:0;;;15696:6;;24784:15;;;;:45;;-1:-1:-1;15669:7:0;15696:6;-1:-1:-1;;;;;24816:13:0;;;15696:6;;24816:13;;24784:45;:84;;;;-1:-1:-1;;;;;;24847:21:0;;;;;;:17;:21;;;;;;;;24846:22;24784:84;:125;;;;-1:-1:-1;;;;;;24886:23:0;;;;;;:17;:23;;;;;;;;24885:24;24784:125;:152;;;;-1:-1:-1;24932:4:0;;-1:-1:-1;;;;;24926:10:0;;;24932:4;;24926:10;;24784:152;:185;;;;-1:-1:-1;;;;;;24953:16:0;;;;24784:185;:223;;;;-1:-1:-1;;;;;;24986:21:0;;25002:4;24986:21;;24777:230;24691:324;-1:-1:-1;;;24691:324:0:o;27419:1541::-;11603:16;:23;;-1:-1:-1;;;;11603:23:0;-1:-1:-1;;;11603:23:0;;;27527:15:::1;::::0;27509::::1;::::0;:33:::1;::::0;27527:15;27509:33:::1;:::i;:::-;27505:64;;27562:7;;27505:64;27579:17;27682:1;27662:15;;27644;;:33;;;;:::i;:::-;27624:15;::::0;27601:38:::1;::::0;:20;:38:::1;:::i;:::-;27600:78;;;;:::i;:::-;27599:84;;;;:::i;:::-;27579:104:::0;-1:-1:-1;27696:20:0::1;27719:32;27579:104:::0;27719:20;:32:::1;:::i;:::-;27788:16;::::0;;27802:1:::1;27788:16:::0;;;;;::::1;::::0;;27696:55;;-1:-1:-1;27764:21:0::1;::::0;27788:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27788:16:0::1;27764:40;;27833:4;27815;27820:1;27815:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27815:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;27859:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;27859:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;27815:7;;27859:16;;;;;:9;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27849:4;27854:1;27849:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27849:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;27888:9:::1;::::0;:191:::1;::::0;-1:-1:-1;;;27888:191:0;;:9;::::1;::::0;:60:::1;::::0;:191:::1;::::0;27963:12;;27888:9:::1;::::0;28006:4;;28033::::1;::::0;28053:15:::1;::::0;27888:191:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28094:24;28205:1;28185:15;;28167;;:33;;;;:::i;:::-;28147:15;::::0;28123:39:::1;::::0;:21:::1;:39;:::i;:::-;28122:79;;;;:::i;:::-;28121:85;;;;:::i;:::-;28094:112:::0;-1:-1:-1;28223:13:0;;28219:344:::1;;28253:9;::::0;28424:4:::1;::::0;28253:224:::1;::::0;-1:-1:-1;;;28253:224:0;;-1:-1:-1;;;;;28253:9:0;;::::1;::::0;:25:::1;::::0;28286:16;;28253:224:::1;::::0;28330:4:::1;::::0;28354:9;;28253::::1;::::0;;;28424:4:::1;::::0;28447:15:::1;::::0;28253:224:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;28497:54:0::1;::::0;;19761:25:1;;;19817:2;19802:18;;19795:34;;;19845:18;;;19838:34;;;28497:54:0::1;::::0;-1:-1:-1;19749:2:1;19734:18;28497:54:0::1;;;;;;;28219:344;28612:1;28577:32;28600:9:::0;28577:20;:32:::1;:::i;:::-;:36;28573:380;;;28744:11;::::0;28729:12:::1;::::0;28657:21:::1;::::0;28632::::1;::::0;28714:28:::1;::::0;28657:21;28714:28:::1;:::i;:::-;:42;;;;:::i;:::-;28694:62;;28771:19;28823:8;;28808:12;;28793:13;:28;;;;:::i;:::-;:39;;;;:::i;:::-;28847:13;::::0;:33:::1;::::0;28771:61;;-1:-1:-1;;;;;;28847:13:0::1;::::0;:33;::::1;;;::::0;28870:9;;28847:13:::1;:33:::0;:13;:33;28870:9;28847:13;:33;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;28895:10:0::1;::::0;:32:::1;::::0;-1:-1:-1;;;;;28895:10:0;;::::1;::::0;:32;::::1;;;::::0;28915:11;;28895:10:::1;:32:::0;:10;:32;28915:11;28895:10;:32;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28615:338;;;28573:380;27494:1466;;;;11637:1;-1:-1:-1::0;11649:16:0;:24;;-1:-1:-1;;;;11649:24:0;;;27419:1541::o;29629:1278::-;29757:16;;29731:4;;29757:16;;;;;29752:237;;29794:28;29813:4;29819:2;29794:18;:28::i;:::-;29846:16;;;;;;;29845:17;:41;;;;;29866:20;29877:4;29883:2;29866:10;:20::i;:::-;29841:137;;;29911:47;;-1:-1:-1;;;29911:47:0;;20085:2:1;29911:47:0;;;20067:21:1;20124:2;20104:18;;;20097:30;20163:34;20143:18;;;20136:62;-1:-1:-1;;;20214:18:1;;;20207:35;20259:19;;29911:47:0;19883:401:1;29841:137:0;30009:25;30037:38;30048:4;30054:2;30058:7;30067;30037:10;:38::i;:::-;30120:14;;;;-1:-1:-1;;;;;30104:13:0;;;;;;:7;:13;;;;;;30009:66;;-1:-1:-1;30104:30:0;;;:::i;:::-;-1:-1:-1;;;;;30088:13:0;;;;;;;:7;:13;;;;;;:46;;;;30173:22;;;;30159:11;;;;;;;;;;:36;;30173:22;30159:36;:::i;:::-;-1:-1:-1;;;;;30145:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;30212:17;;;;;:11;:17;;;;;;;:37;;;;-1:-1:-1;;;;;;30234:15:0;;;;;;:11;:15;;;;;;;;30233:16;30212:37;30208:416;;;-1:-1:-1;;;;;30282:13:0;;;;;;:7;:13;;;;;;:23;;30298:7;;30282:23;:::i;:::-;-1:-1:-1;;;;;30266:13:0;;;;;;:7;:13;;;;;:39;30208:416;;;-1:-1:-1;;;;;30328:17:0;;;;;;:11;:17;;;;;;;;30327:18;:37;;;;-1:-1:-1;;;;;;30349:15:0;;;;;;:11;:15;;;;;;;;30327:37;30323:301;;;30409:22;;-1:-1:-1;;;;;30395:11:0;;30409:22;30395:11;;;:7;:11;;;;;;:36;;30409:22;30395:36;:::i;:::-;-1:-1:-1;;;;;30381:11:0;;;;;;:7;:11;;;;;:50;30323:301;;;-1:-1:-1;;;;;30455:17:0;;;;;;:11;:17;;;;;;;;:36;;;;-1:-1:-1;;;;;;30476:15:0;;;;;;:11;:15;;;;;;;;30455:36;30451:173;;;-1:-1:-1;;;;;30524:13:0;;;;;;:7;:13;;;;;;:23;;30540:7;;30524:23;:::i;:::-;-1:-1:-1;;;;;30508:13:0;;;;;;;:7;:13;;;;;;:39;;;;30590:22;;30576:11;;;;;;;;;;:36;;30590:22;30576:36;:::i;:::-;-1:-1:-1;;;;;30562:11:0;;;;;;:7;:11;;;;;:50;30451:173;30640:17;;;;:21;30636:79;;30676:39;30691:4;30697:6;:17;;;30676:14;:39::i;:::-;30744:1;30730:6;:11;;;:15;:34;;;;30763:1;30749:6;:11;;;:15;30730:34;30726:91;;;30779:38;30792:6;:11;;;30805:6;:11;;;30779:12;:38::i;:::-;30850:2;-1:-1:-1;;;;;30835:42:0;30844:4;-1:-1:-1;;;;;30835:42:0;;30854:6;:22;;;30835:42;;;;1852:25:1;;1840:2;1825:18;;1706:177;30835:42:0;;;;;;;;-1:-1:-1;30895:4:0;;29629:1278;-1:-1:-1;;;;;29629:1278:0:o;32556:547::-;32654:7;;32690;;32607;;;;;32708:283;32732:9;:16;32728:20;;32708:283;;;32798:7;32774;:21;32782:9;32792:1;32782:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32782:12:0;32774:21;;;;;;;;;;;;;:31;;:66;;;32833:7;32809;:21;32817:9;32827:1;32817:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32817:12:0;32809:21;;;;;;;;;;;;;:31;32774:66;32770:97;;;32850:7;;32859;;32842:25;;;;;;;32556:547;;:::o;32770:97::-;32902:7;:21;32910:9;32920:1;32910:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32910:12:0;32902:21;;;;;;;;;;;;;32892:31;;:7;:31;:::i;:::-;32882:41;;32958:7;:21;32966:9;32976:1;32966:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32966:12:0;32958:21;;;;;;;;;;;;;32948:31;;:7;:31;:::i;:::-;32938:41;-1:-1:-1;32750:3:0;;;;:::i;:::-;;;;32708:283;;;;33025:7;;33015;;:17;;;;:::i;:::-;33005:7;:27;33001:58;;;33042:7;;33051;;33034:25;;;;;;32556:547;;:::o;33001:58::-;33078:7;;33087;;-1:-1:-1;32556:547:0;-1:-1:-1;32556:547:0:o;28976:439::-;29059:16;;;;;;;29058:17;29050:65;;;;-1:-1:-1;;;29050:65:0;;20491:2:1;29050:65:0;;;20473:21:1;20530:2;20510:18;;;20503:30;20569:34;20549:18;;;20542:62;-1:-1:-1;;;20620:18:1;;;20613:33;20663:19;;29050:65:0;20289:399:1;29050:65:0;29131:20;29142:4;29148:2;29131:10;:20::i;:::-;29130:21;:37;;;;-1:-1:-1;29161:6:0;;-1:-1:-1;;;;;29155:12:0;;;29161:6;;29155:12;29130:37;29126:282;;;-1:-1:-1;;;;;29184:23:0;;;;;;:17;:23;;;;;;;:30;;-1:-1:-1;;29184:30:0;29210:4;29184:30;;;;;;29229:16;:23;;-1:-1:-1;;29229:23:0;29184:30;29229:23;;;29282:15;29267:12;:30;29314:21;:28;;-1:-1:-1;;;;29314:28:0;-1:-1:-1;;;29314:28:0;;;29362:34;;;;;;1679:14:1;;1672:22;1654:41;;1642:2;1627:18;;1514:187;29362:34:0;;;;;;;;28976:439;;:::o;30915:1464::-;31010:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31010:18:0;31041:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31041:25:0;31077:19;31099:10;:8;:10::i;:::-;31077:32;-1:-1:-1;31139:21:0;31077:32;31139:7;:21;:::i;:::-;31122:14;;;:38;31173:1071;;;;-1:-1:-1;;;;;31204:11:0;;;;;;:7;:11;;;;;;;;31200:561;;;31250:15;;31236:11;:29;31300:17;;31284:13;:33;31352:17;;31336:13;:33;31200:561;;;-1:-1:-1;;;;;31395:13:0;;;;;;:7;:13;;;;;;;;31391:370;;;31443:14;;31429:11;:28;31492:16;;31476:13;:32;31543:16;;31527:13;:32;31391:370;;;31614:19;;31600:11;:33;31668:21;;31652:13;:37;31724:21;;31708:13;:37;31391:370;31817:16;;31802:11;;31792:21;;:7;:21;:::i;:::-;31791:42;;;;:::i;:::-;31777:11;;;:56;31914:16;;31896:13;;31880;;:29;;31896:13;31880:29;:::i;:::-;31869:41;;:7;:41;:::i;:::-;31868:62;;;;:::i;:::-;31848:17;;;:82;;;31981:11;;;;:31;;31848:82;31981:31;:::i;:::-;31970:43;;:7;:43;:::i;:::-;31945:68;;32044:11;;;;:25;;32058:11;;32044:25;:::i;:::-;32030:11;;;:39;31173:1071;;;32116:1;32102:11;;;:15;;;32132:17;;;:21;;;32168:32;;;32217:11;;;:15;31173:1071;32334:11;32314:6;:17;;;:31;;;;:::i;:::-;32299:6;:11;;;:47;;;;:::i;:::-;32281:6;:14;;;:66;;;;:::i;:::-;32256:22;;;:91;-1:-1:-1;32256:22:0;30915:1464;-1:-1:-1;;;;;30915:1464:0:o;33386:423::-;33466:19;33489:10;:8;:10::i;:::-;33466:33;-1:-1:-1;33510:18:0;33531:24;33466:33;33531:10;:24;:::i;:::-;33607:4;33591:22;;;;:7;:22;;;;;;33510:45;;-1:-1:-1;33591:35:0;;33510:45;;33591:35;:::i;:::-;33582:4;33566:22;;;;:7;:22;;;;;;;;:60;;;;33640:11;:26;;;;;;33637:104;;;33722:4;33706:22;;;;:7;:22;;;;;;:35;;33731:10;;33706:35;:::i;:::-;33697:4;33681:22;;;;:7;:22;;;;;:60;33637:104;33757:43;;1852:25:1;;;33782:4:0;;-1:-1:-1;;;;;33757:43:0;;;;;1840:2:1;1825:18;33757:43:0;;;;;;;33455:354;;33386:423;;:::o;33115:143::-;33205:4;33195:7;;:14;;;;:::i;:::-;33185:7;:24;33233:10;;:17;;33246:4;;33233:17;:::i;:::-;33220:10;:30;-1:-1:-1;;33115:143:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;222:597:1;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;660:6;657:1;654:13;651:91;;;730:1;725:2;716:6;705:9;701:22;697:31;690:42;651:91;-1:-1:-1;803:2:1;782:15;-1:-1:-1;;778:29:1;763:45;;;;810:2;759:54;;222:597;-1:-1:-1;;;222:597:1:o;1058:131::-;-1:-1:-1;;;;;1133:31:1;;1123:42;;1113:70;;1179:1;1176;1169:12;1194:315;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:52;;;1339:1;1336;1329:12;1291:52;1378:9;1365:23;1397:31;1422:5;1397:31;:::i;:::-;1447:5;1499:2;1484:18;;;;1471:32;;-1:-1:-1;;;1194:315:1:o;1888:160::-;1953:20;;2009:13;;2002:21;1992:32;;1982:60;;2038:1;2035;2028:12;1982:60;1888:160;;;:::o;2053:315::-;2118:6;2126;2179:2;2167:9;2158:7;2154:23;2150:32;2147:52;;;2195:1;2192;2185:12;2147:52;2234:9;2221:23;2253:31;2278:5;2253:31;:::i;:::-;2303:5;-1:-1:-1;2327:35:1;2358:2;2343:18;;2327:35;:::i;:::-;2317:45;;2053:315;;;;;:::o;2373:456::-;2450:6;2458;2466;2519:2;2507:9;2498:7;2494:23;2490:32;2487:52;;;2535:1;2532;2525:12;2487:52;2574:9;2561:23;2593:31;2618:5;2593:31;:::i;:::-;2643:5;-1:-1:-1;2700:2:1;2685:18;;2672:32;2713:33;2672:32;2713:33;:::i;:::-;2373:456;;2765:7;;-1:-1:-1;;;2819:2:1;2804:18;;;;2791:32;;2373:456::o;2834:248::-;2902:6;2910;2963:2;2951:9;2942:7;2938:23;2934:32;2931:52;;;2979:1;2976;2969:12;2931:52;-1:-1:-1;;3002:23:1;;;3072:2;3057:18;;;3044:32;;-1:-1:-1;2834:248:1:o;3087:180::-;3146:6;3199:2;3187:9;3178:7;3174:23;3170:32;3167:52;;;3215:1;3212;3205:12;3167:52;-1:-1:-1;3238:23:1;;3087:180;-1:-1:-1;3087:180:1:o;3461:316::-;3538:6;3546;3554;3607:2;3595:9;3586:7;3582:23;3578:32;3575:52;;;3623:1;3620;3613:12;3575:52;-1:-1:-1;;3646:23:1;;;3716:2;3701:18;;3688:32;;-1:-1:-1;3767:2:1;3752:18;;;3739:32;;3461:316;-1:-1:-1;3461:316:1:o;3782:247::-;3841:6;3894:2;3882:9;3873:7;3869:23;3865:32;3862:52;;;3910:1;3907;3900:12;3862:52;3949:9;3936:23;3968:31;3993:5;3968:31;:::i;4294:127::-;4355:10;4350:3;4346:20;4343:1;4336:31;4386:4;4383:1;4376:15;4410:4;4407:1;4400:15;4426:719;4469:5;4522:3;4515:4;4507:6;4503:17;4499:27;4489:55;;4540:1;4537;4530:12;4489:55;4576:6;4563:20;4602:18;4639:2;4635;4632:10;4629:36;;;4645:18;;:::i;:::-;4720:2;4714:9;4688:2;4774:13;;-1:-1:-1;;4770:22:1;;;4794:2;4766:31;4762:40;4750:53;;;4818:18;;;4838:22;;;4815:46;4812:72;;;4864:18;;:::i;:::-;4904:10;4900:2;4893:22;4939:2;4931:6;4924:18;4985:3;4978:4;4973:2;4965:6;4961:15;4957:26;4954:35;4951:55;;;5002:1;4999;4992:12;4951:55;5066:2;5059:4;5051:6;5047:17;5040:4;5032:6;5028:17;5015:54;5113:1;5106:4;5101:2;5093:6;5089:15;5085:26;5078:37;5133:6;5124:15;;;;;;4426:719;;;;:::o;5150:836::-;5272:6;5280;5288;5296;5349:3;5337:9;5328:7;5324:23;5320:33;5317:53;;;5366:1;5363;5356:12;5317:53;5405:9;5392:23;5424:31;5449:5;5424:31;:::i;:::-;5474:5;-1:-1:-1;5531:2:1;5516:18;;5503:32;5544:33;5503:32;5544:33;:::i;:::-;5596:7;-1:-1:-1;5654:2:1;5639:18;;5626:32;5677:18;5707:14;;;5704:34;;;5734:1;5731;5724:12;5704:34;5757:50;5799:7;5790:6;5779:9;5775:22;5757:50;:::i;:::-;5747:60;;5860:2;5849:9;5845:18;5832:32;5816:48;;5889:2;5879:8;5876:16;5873:36;;;5905:1;5902;5895:12;5873:36;;5928:52;5972:7;5961:8;5950:9;5946:24;5928:52;:::i;:::-;5918:62;;;5150:836;;;;;;;:::o;5991:180::-;6047:6;6100:2;6088:9;6079:7;6075:23;6071:32;6068:52;;;6116:1;6113;6106:12;6068:52;6139:26;6155:9;6139:26;:::i;6176:388::-;6244:6;6252;6305:2;6293:9;6284:7;6280:23;6276:32;6273:52;;;6321:1;6318;6311:12;6273:52;6360:9;6347:23;6379:31;6404:5;6379:31;:::i;:::-;6429:5;-1:-1:-1;6486:2:1;6471:18;;6458:32;6499:33;6458:32;6499:33;:::i;:::-;6551:7;6541:17;;;6176:388;;;;;:::o;6569:385::-;6655:6;6663;6671;6679;6732:3;6720:9;6711:7;6707:23;6703:33;6700:53;;;6749:1;6746;6739:12;6700:53;-1:-1:-1;;6772:23:1;;;6842:2;6827:18;;6814:32;;-1:-1:-1;6893:2:1;6878:18;;6865:32;;6944:2;6929:18;6916:32;;-1:-1:-1;6569:385:1;-1:-1:-1;6569:385:1:o;6959:356::-;7161:2;7143:21;;;7180:18;;;7173:30;7239:34;7234:2;7219:18;;7212:62;7306:2;7291:18;;6959:356::o;7673:380::-;7752:1;7748:12;;;;7795;;;7816:61;;7870:4;7862:6;7858:17;7848:27;;7816:61;7923:2;7915:6;7912:14;7892:18;7889:38;7886:161;;;7969:10;7964:3;7960:20;7957:1;7950:31;8004:4;8001:1;7994:15;8032:4;8029:1;8022:15;7886:161;;7673:380;;;:::o;8772:127::-;8833:10;8828:3;8824:20;8821:1;8814:31;8864:4;8861:1;8854:15;8888:4;8885:1;8878:15;8904:127;8965:10;8960:3;8956:20;8953:1;8946:31;8996:4;8993:1;8986:15;9020:4;9017:1;9010:15;9036:125;9076:4;9104:1;9101;9098:8;9095:34;;;9109:18;;:::i;:::-;-1:-1:-1;9146:9:1;;9036:125::o;9166:127::-;9227:10;9222:3;9218:20;9215:1;9208:31;9258:4;9255:1;9248:15;9282:4;9279:1;9272:15;9298:135;9337:3;-1:-1:-1;;9358:17:1;;9355:43;;;9378:18;;:::i;:::-;-1:-1:-1;9425:1:1;9414:13;;9298:135::o;9438:168::-;9478:7;9544:1;9540;9536:6;9532:14;9529:1;9526:21;9521:1;9514:9;9507:17;9503:45;9500:71;;;9551:18;;:::i;:::-;-1:-1:-1;9591:9:1;;9438:168::o;9611:127::-;9672:10;9667:3;9663:20;9660:1;9653:31;9703:4;9700:1;9693:15;9727:4;9724:1;9717:15;9743:120;9783:1;9809;9799:35;;9814:18;;:::i;:::-;-1:-1:-1;9848:9:1;;9743:120::o;10698:128::-;10738:3;10769:1;10765:6;10762:1;10759:13;10756:39;;;10775:18;;:::i;:::-;-1:-1:-1;10811:9:1;;10698:128::o;11255:425::-;11457:2;11439:21;;;11496:2;11476:18;;;11469:30;11535:34;11530:2;11515:18;;11508:62;11606:31;11601:2;11586:18;;11579:59;11670:3;11655:19;;11255:425::o;12394:422::-;12483:1;12526:5;12483:1;12540:270;12561:7;12551:8;12548:21;12540:270;;;12620:4;12616:1;12612:6;12608:17;12602:4;12599:27;12596:53;;;12629:18;;:::i;:::-;12679:7;12669:8;12665:22;12662:55;;;12699:16;;;;12662:55;12778:22;;;;12738:15;;;;12540:270;;;12544:3;12394:422;;;;;:::o;12821:806::-;12870:5;12900:8;12890:80;;-1:-1:-1;12941:1:1;12955:5;;12890:80;12989:4;12979:76;;-1:-1:-1;13026:1:1;13040:5;;12979:76;13071:4;13089:1;13084:59;;;;13157:1;13152:130;;;;13064:218;;13084:59;13114:1;13105:10;;13128:5;;;13152:130;13189:3;13179:8;13176:17;13173:43;;;13196:18;;:::i;:::-;-1:-1:-1;;13252:1:1;13238:16;;13267:5;;13064:218;;13366:2;13356:8;13353:16;13347:3;13341:4;13338:13;13334:36;13328:2;13318:8;13315:16;13310:2;13304:4;13301:12;13297:35;13294:77;13291:159;;;-1:-1:-1;13403:19:1;;;13435:5;;13291:159;13482:34;13507:8;13501:4;13482:34;:::i;:::-;13552:6;13548:1;13544:6;13540:19;13531:7;13528:32;13525:58;;;13563:18;;:::i;:::-;13601:20;;12821:806;-1:-1:-1;;;12821:806:1:o;13632:131::-;13692:5;13721:36;13748:8;13742:4;13721:36;:::i;13768:112::-;13800:1;13826;13816:35;;13831:18;;:::i;:::-;-1:-1:-1;13865:9:1;;13768:112::o;13885:251::-;13955:6;14008:2;13996:9;13987:7;13983:23;13979:32;13976:52;;;14024:1;14021;14014:12;13976:52;14056:9;14050:16;14075:31;14100:5;14075:31;:::i;14450:607::-;-1:-1:-1;;;;;14809:15:1;;;14791:34;;14856:2;14841:18;;14834:34;;;;14899:2;14884:18;;14877:34;;;;14942:2;14927:18;;14920:34;;;;14991:15;;;14985:3;14970:19;;14963:44;14771:3;15023:19;;15016:35;;;;14740:3;14725:19;;14450:607::o;15062:306::-;15150:6;15158;15166;15219:2;15207:9;15198:7;15194:23;15190:32;15187:52;;;15235:1;15232;15225:12;15187:52;15264:9;15258:16;15248:26;;15314:2;15303:9;15299:18;15293:25;15283:35;;15358:2;15347:9;15343:18;15337:25;15327:35;;15062:306;;;;;:::o;18574:980::-;18836:4;18884:3;18873:9;18869:19;18915:6;18904:9;18897:25;18941:2;18979:6;18974:2;18963:9;18959:18;18952:34;19022:3;19017:2;19006:9;19002:18;18995:31;19046:6;19081;19075:13;19112:6;19104;19097:22;19150:3;19139:9;19135:19;19128:26;;19189:2;19181:6;19177:15;19163:29;;19210:1;19220:195;19234:6;19231:1;19228:13;19220:195;;;19299:13;;-1:-1:-1;;;;;19295:39:1;19283:52;;19390:15;;;;19355:12;;;;19331:1;19249:9;19220:195;;;-1:-1:-1;;;;;;;19471:32:1;;;;19466:2;19451:18;;19444:60;-1:-1:-1;;;19535:3:1;19520:19;19513:35;19432:3;18574:980;-1:-1:-1;;;18574:980:1:o

Swarm Source

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