ETH Price: $3,264.64 (+0.53%)
Gas: 2 Gwei

Token

Alien Elon (ALIENELON)
 

Overview

Max Total Supply

666,666,666 ALIENELON

Holders

9

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
763,793.808594741559200987 ALIENELON

Value
$0.00
0x288c2c49a57bd87686e61cd535cad1dbc332c377
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:
ALIENELON

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-17
*/

/*


     ____  _     _  _____ _        _____ _     ____  _     
    /  _ \/ \   / \/  __// \  /|  /  __// \   /  _ \/ \  /|
    | / \|| |   | ||  \  | |\ ||  |  \  | |   | / \|| |\ ||
    | |-||| |_/\| ||  /_ | | \||  |  /_ | |_/\| \_/|| | \||
    \_/ \|\____/\_/\____\\_/  \|  \____\\____/\____/\_/  \|
     01110100 / 01110010 / 01110101 / 01110100 / 01101000
                                                       
    💬: https://t.me/Alien_Elon
    🌐: https://alienelon.xyz

*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.2;

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 ALIENELON 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 _isExcludedFromTariffs;
    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 = 700;

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

    uint256 public _sellReflectFee = 0;
    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 6200;
    
    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 spaceXShare = 3;
    uint256 public MissionOpsShare = 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 _missionOpsWallet;
    address payable private _publicRelationsWallet;
    
    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
    );
    uint256 Launched;
    
    bool contractInitialized = false;
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

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

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

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

    }

    receive() external payable {}

    function LaunchSequence(address payable setPublicRelationsWallet, address payable setMissionOpsWallet) external onlyOwner {
        require(!contractInitialized);

        _publicRelationsWallet = payable(setPublicRelationsWallet);
        _missionOpsWallet = payable(setMissionOpsWallet);

        _name = "Alien Elon";
        _symbol = "ALIENELON";
        startingSupply = 666_666_666;
        if (startingSupply < 100000000000) {
            _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 * 10) / 1000;
        maxTxAmountUI = (startingSupply * 10) / 1000;
        _maxWalletSize = (_tTotal * 10) / 1000;
        maxWalletSizeUI = (startingSupply * 10) / 1000;
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 5) / 1000;

        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()))*100/100));

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

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // 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.");
        _setExcludedFromFees(_owner, false);
        _setExcludedFromFees(newOwner, true);
        setExcludedFromReward(newOwner, true);
        
        if (_missionOpsWallet == payable(_owner))
            _missionOpsWallet = 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() {
        _setExcludedFromFees(_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 isExcludedFromSpaceTariffs(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function isExcludedFromTariffs(address account) public view returns(bool) {
        return _isExcludedFromTariffs[account];
    }

    function setTariffBuy(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 setTariffSell(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 {
        spaceXShare = ms;
        MissionOpsShare = 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(_publicRelationsWallet != newWallet, "Wallet already set!");
        _publicRelationsWallet = payable(newWallet);
    }

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

    function _setExcludedFromFees(address account, bool enabled) public onlyOwner {
        _isExcludedFromTariffs[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(_isExcludedFromTariffs[from] || _isExcludedFromTariffs[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 spaceXFee = (address(this).balance);
            uint256 publicRelationsFee = spaceXFee/(ValueDivisor)*(spaceXShare);
            uint256 missionOpsShare = spaceXFee/(ValueDivisor)*(MissionOpsShare);
            _publicRelationsWallet.transfer(publicRelationsFee);
            _missionOpsWallet.transfer(missionOpsShare);            

        }
    }

    

    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 AdditionalProperties {
        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.");
                }
        }
        
        AdditionalProperties 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 (AdditionalProperties memory) {
        AdditionalProperties 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 restoreETH() 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":"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":[{"internalType":"address payable","name":"setPublicRelationsWallet","type":"address"},{"internalType":"address payable","name":"setMissionOpsWallet","type":"address"}],"name":"LaunchSequence","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MissionOpsShare","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"_setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","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":"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":"isExcludedFromSpaceTariffs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromTariffs","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreETH","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":"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 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":"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":"setTariffBuy","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":"setTariffSell","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":"spaceXShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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"}]

60806040525f6004819055600d819055600e8190556102bc600f819055601082905560118290556012556013819055601481905561183860158190556016829055601782905560188290556103e86019819055601a55601b55601c819055611770601d55612710601e556003601f81905560205560066021819055602a80546001600160a01b031990811661dead17909155602b805482169055602d805460ff60a81b191690556034805461ffff19169055603583905560368390556037805460ff199081166001908117909255603a80549091169055835482163317845560298054909216737a250d5630b4cf539739df2c5dacb4c659f2488d1790915591620001115f546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081015f908120805494151560ff199586161790553081526006909252812080549092166001908117909255600990620001685f546001600160a01b031690565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055620001af6200019b3390565b6029546001600160a01b03165f19620001d0565b602954620001ca9030906001600160a01b03165f19620001d0565b620002fb565b6001600160a01b038316620002385760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166200029b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200022f565b6001600160a01b038381165f8181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61379080620003095f395ff3fe608060405260043610610395575f3560e01c806364038409116101de578063bbcea6bf11610108578063dd62ed3e1161009d578063f6540ec71161006d578063f6540ec714610a16578063f749cee214610a2b578063fb663b3b14610a4a578063fb78680d14610a5f575f80fd5b8063dd62ed3e14610971578063ea08d30b146109b5578063eb585db2146109ca578063f1946328146109df575f80fd5b8063c8607952116100d8578063c860795214610913578063d038b07e14610928578063d9e664601461093d578063dc44b6a01461095c575f80fd5b8063bbcea6bf146108ab578063bf9e1464146108c0578063c49b9a80146108df578063c5d24189146108fe575f80fd5b8063893d20e81161017e5780639616aa321161014e5780639616aa321461082f57806398dada871461084e578063a457c2d71461086d578063a9059cbb1461088c575f80fd5b8063893d20e8146107e05780638da5cb5b146107e057806392d422bc146107fc57806395d89b411461081b575f80fd5b806370a08231116101b957806370a0823114610784578063715018a6146107a357806383602e76146107b757806388790a68146107cb575f80fd5b806364038409146107455780636bc87c3a1461075a5780636cbdd5e31461076f575f80fd5b80632e1bbd23116102bf57806345e8c85c1161025f57806350a8e0161161022f57806350a8e016146106ca578063571ac8b0146106e8578063575f18e51461070757806358fa63ca14610726575f80fd5b806345e8c85c146106615780634a74bb02146106765780634ef3cce5146106965780634fb2e45d146106ab575f80fd5b8063384f6b511161029a578063384f6b51146105ef57806339509351146106045780633f3cf56c14610623578063452ed4f114610642575f80fd5b80632e1bbd2314610590578063313ce567146105af57806336cca8ed146105d0575f80fd5b806317eade331161033557806323b872dd1161030557806323b872dd146104fc578063260039571461051b578063285635581461053a5780632d83811914610571575f80fd5b806317eade331461049f57806318160ddd146104b4578063192f1889146104c857806322976e0d146104e7575f80fd5b8063095ea7b311610370578063095ea7b31461041c57806313114a9d1461044b57806313e461921461046957806315639c1b1461048a575f80fd5b806303fd2a45146103a057806306fdde03146103dc5780630758d924146103fd575f80fd5b3661039c57005b5f80fd5b3480156103ab575f80fd5b50602a546103bf906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103e7575f80fd5b506103f0610a7e565b6040516103d391906130c5565b348015610408575f80fd5b506027546103bf906001600160a01b031681565b348015610427575f80fd5b5061043b610436366004613124565b610b0e565b60405190151581526020016103d3565b348015610456575f80fd5b506026545b6040519081526020016103d3565b348015610474575f80fd5b50610488610483366004613162565b610b24565b005b348015610495575f80fd5b5061045b600d5481565b3480156104aa575f80fd5b5061045b60215481565b3480156104bf575f80fd5b5060245461045b565b3480156104d3575f80fd5b506104886104e2366004613162565b610e16565b3480156104f2575f80fd5b5061045b600f5481565b348015610507575f80fd5b5061043b610516366004613195565b610e69565b348015610526575f80fd5b506104886105353660046131d3565b610eba565b348015610545575f80fd5b5061043b6105543660046131f3565b6001600160a01b03165f9081526007602052604090205460ff1690565b34801561057c575f80fd5b5061045b61058b36600461320e565b610fa0565b34801561059b575f80fd5b506104886105aa366004613225565b611022565b3480156105ba575f80fd5b5060225460405160ff90911681526020016103d3565b3480156105db575f80fd5b506104886105ea36600461324e565b6110a5565b3480156105fa575f80fd5b5061045b601c5481565b34801561060f575f80fd5b5061043b61061e366004613124565b61167b565b34801561062e575f80fd5b5061048861063d3660046131d3565b6116b1565b34801561064d575f80fd5b506028546103bf906001600160a01b031681565b34801561066c575f80fd5b5061045b60165481565b348015610681575f80fd5b50602d5461043b90600160a81b900460ff1681565b3480156106a1575f80fd5b5061045b601d5481565b3480156106b6575f80fd5b506104886106c53660046131f3565b6117a2565b3480156106d5575f80fd5b5060345461043b90610100900460ff1681565b3480156106f3575f80fd5b5061043b6107023660046131f3565b611937565b348015610712575f80fd5b50610488610721366004613225565b611943565b348015610731575f80fd5b50602b546103bf906001600160a01b031681565b348015610750575f80fd5b5061045b602f5481565b348015610765575f80fd5b5061045b600e5481565b34801561077a575f80fd5b5061045b60185481565b34801561078f575f80fd5b5061045b61079e3660046131f3565b6119c6565b3480156107ae575f80fd5b50610488611a22565b3480156107c2575f80fd5b50610488611a9e565b3480156107d6575f80fd5b5061045b60145481565b3480156107eb575f80fd5b505f546001600160a01b03166103bf565b348015610807575f80fd5b50610488610816366004613225565b611b01565b348015610826575f80fd5b506103f0611b84565b34801561083a575f80fd5b506104886108493660046131f3565b611b93565b348015610859575f80fd5b50610488610868366004613225565b611c31565b348015610878575f80fd5b5061043b610887366004613124565b611c68565b348015610897575f80fd5b5061043b6108a6366004613124565b611c9e565b3480156108b6575f80fd5b5061045b60135481565b3480156108cb575f80fd5b506104886108da3660046131d3565b611caa565b3480156108ea575f80fd5b506104886108f9366004613285565b611cde565b348015610909575f80fd5b5061045b60125481565b34801561091e575f80fd5b5061045b60155481565b348015610933575f80fd5b5061045b60105481565b348015610948575f80fd5b506029546103bf906001600160a01b031681565b348015610967575f80fd5b5061045b60115481565b34801561097c575f80fd5b5061045b61098b36600461324e565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205490565b3480156109c0575f80fd5b5061045b60175481565b3480156109d5575f80fd5b5061045b60205481565b3480156109ea575f80fd5b5061043b6109f93660046131f3565b6001600160a01b03165f9081526006602052604090205460ff1690565b348015610a21575f80fd5b5061045b60315481565b348015610a36575f80fd5b50610488610a453660046131f3565b611d5f565b348015610a55575f80fd5b5061045b601f5481565b348015610a6a575f80fd5b50610488610a7936600461329e565b611dfd565b6060600b8054610a8d906132cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab9906132cd565b8015610b045780601f10610adb57610100808354040283529160200191610b04565b820191905f5260205f20905b815481529060010190602001808311610ae757829003601f168201915b5050505050905090565b5f610b1a338484611e65565b5060015b92915050565b5f546001600160a01b03163314610b565760405162461bcd60e51b8152600401610b4d90613305565b60405180910390fd5b801515600103610c85576001600160a01b0382165f9081526007602052604090205460ff1615610bc85760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610b4d565b6001600160a01b0382165f9081526001602052604090205415610c1f576001600160a01b0382165f90815260016020526040902054610c0690610fa0565b6001600160a01b0383165f908152600260205260409020555b506001600160a01b03165f818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b8015155f03610e12576001600160a01b0382165f9081526007602052604090205460ff16610cf55760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610b4d565b5f5b600854811015610e1057826001600160a01b031660088281548110610d1e57610d1e61333a565b5f918252602090912001546001600160a01b031603610dfe5760088054610d4790600190613362565b81548110610d5757610d5761333a565b5f91825260209091200154600880546001600160a01b039092169183908110610d8257610d8261333a565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480610dd957610dd9613375565b5f8281526020902081015f1990810180546001600160a01b0319169055019055610e10565b80610e0881613389565b915050610cf7565b505b5050565b5f546001600160a01b03163314610e3f5760405162461bcd60e51b8152600401610b4d90613305565b6001600160a01b03919091165f908152600660205260409020805460ff1916911515919091179055565b5f610e75848484611f88565b506001600160a01b0384165f90815260056020908152604080832033808552925290912054610eb0918691610eab908690613362565b611e65565b5060019392505050565b5f546001600160a01b03163314610ee35760405162461bcd60e51b8152600401610b4d90613305565b5f8183602454610ef391906133a1565b610efd91906133cc565b90506103e8602454610f0f91906133cc565b811015610f795760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e31604482015271129037b3103a37ba30b61039bab838363c9760711b6064820152608401610b4d565b6030819055600a548290610f8e9085906133a1565b610f9891906133cc565b603155505050565b5f6025548211156110065760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b4d565b5f61100f6123a5565b905061101b81846133cc565b9392505050565b5f546001600160a01b0316331461104b5760405162461bcd60e51b8152600401610b4d90613305565b601954831115801561105f5750601a548211155b801561106d5750601b548111155b611075575f80fd5b6113248161108384866133df565b61108d91906133df565b1115611097575f80fd5b601092909255601155601255565b5f546001600160a01b031633146110ce5760405162461bcd60e51b8152600401610b4d90613305565b603a5460ff16156110dd575f80fd5b602d80546001600160a01b038085166001600160a01b031992831617909255602c80549284169290911691909117905560408051808201909152600a81526920b634b2b71022b637b760b11b6020820152600b9061113b9082613453565b5060408051808201909152600981526820a624a2a722a627a760b91b6020820152600c906111699082613453565b506327bc86aa600a556022805460ff1916601290811790915560235560235461119390600a6135ef565b600a546111a091906133a1565b60248190556111b0905f196135fa565b6111bb905f19613362565b602555602954602780546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015611218573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061123c919061360d565b6001600160a01b031663c9c6539660275f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561129a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112be919061360d565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303815f875af1158015611307573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061132b919061360d565b602880546001600160a01b0319166001600160a01b039283169081179091555f908152600360209081526040808320805460ff19166001179055308352600582528083206027549094168352929052205f1990556024546103e89061139190600a6133a1565b61139b91906133cc565b602e55600a80546103e8916113b091906133a1565b6113ba91906133cc565b602f556024546103e8906113cf90600a6133a1565b6113d991906133cc565b603055600a80546103e8916113ee91906133a1565b6113f891906133cc565b6031556024546127109061140d9060056133a1565b61141791906133cc565b6032556024546103e89061142c9060056133a1565b61143691906133cc565b603355602954611450906001600160a01b03165f19610b0e565b50603a805460ff19166001908117909155602554905f6114775f546001600160a01b031690565b6001600160a01b0316815260208101919091526040015f20556114a15f546001600160a01b031690565b602b546024546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36027546115039030906001600160a01b03165f19611e65565b6115486115175f546001600160a01b031690565b30606461152e61079e5f546001600160a01b031690565b6115399060646133a1565b61154391906133cc565b611f88565b506027546001600160a01b031663f305d7194730611565816119c6565b5f806115785f546001600160a01b031690565b426040518863ffffffff1660e01b815260040161159a96959493929190613628565b60606040518083038185885af11580156115b6573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906115db9190613663565b5050436039555060345460ff16156116355760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b4d565b611640306001610b24565b602854611657906001600160a01b03166001610b24565b50506034805460ff19166001179055602d805460ff60a81b1916600160a81b179055565b335f8181526005602090815260408083206001600160a01b03871684529091528120549091610b1a918590610eab9086906133df565b5f546001600160a01b031633146116da5760405162461bcd60e51b8152600401610b4d90613305565b5f81836024546116ea91906133a1565b6116f491906133cc565b90506103e860245461170691906133cc565b81101561177b5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610b4d565b602e819055600a5482906117909085906133a1565b61179a91906133cc565b602f55505050565b5f546001600160a01b031633146117cb5760405162461bcd60e51b8152600401610b4d90613305565b6001600160a01b0381166117f15760405162461bcd60e51b8152600401610b4d9061368e565b602a546001600160a01b039081169082160361181f5760405162461bcd60e51b8152600401610b4d9061368e565b5f8054611837916001600160a01b0390911690610e16565b611842816001610e16565b61184d816001610b24565b5f54602c546001600160a01b0391821691160361188057602c80546001600160a01b0319166001600160a01b0383161790555b5f54611894906001600160a01b03166119c6565b5f80546001600160a01b0390811682526005602090815260408084208684168552909152822092909255805490916118cc91166119c6565b11156118ed575f546118eb906001600160a01b031682611543826119c6565b505b5f80546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f610b1e825f19610b0e565b5f546001600160a01b0316331461196c5760405162461bcd60e51b8152600401610b4d90613305565b60195483111580156119805750601a548211155b801561198e5750601b548111155b611996575f80fd5b611324816119a484866133df565b6119ae91906133df565b11156119b8575f80fd5b601692909255601755601855565b6001600160a01b0381165f9081526007602052604081205460ff1615611a0157506001600160a01b03165f9081526002602052604090205490565b6001600160a01b0382165f90815260016020526040902054610b1e90610fa0565b5f546001600160a01b03163314611a4b5760405162461bcd60e51b8152600401610b4d90613305565b5f8054611a63916001600160a01b0390911690610e16565b5f80546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b5f546001600160a01b03163314611ac75760405162461bcd60e51b8152600401610b4d90613305565b5f80546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611afe573d5f803e3d5ffd5b50565b5f546001600160a01b03163314611b2a5760405162461bcd60e51b8152600401610b4d90613305565b6019548311158015611b3e5750601a548211155b8015611b4c5750601b548111155b611b54575f80fd5b611af481611b6284866133df565b611b6c91906133df565b1115611b76575f80fd5b601392909255601455601555565b6060600c8054610a8d906132cd565b5f546001600160a01b03163314611bbc5760405162461bcd60e51b8152600401610b4d90613305565b602c546001600160a01b03808316911603611c0f5760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610b4d565b602c80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314611c5a5760405162461bcd60e51b8152600401610b4d90613305565b601f92909255602055602155565b335f8181526005602090815260408083206001600160a01b03871684529091528120549091610b1a918590610eab908690613362565b5f610eb0338484611f88565b5f546001600160a01b03163314611cd35760405162461bcd60e51b8152600401610b4d90613305565b601c91909155601d55565b5f546001600160a01b03163314611d075760405162461bcd60e51b8152600401610b4d90613305565b602d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611d5490831515815260200190565b60405180910390a150565b5f546001600160a01b03163314611d885760405162461bcd60e51b8152600401610b4d90613305565b602d546001600160a01b03808316911603611ddb5760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610b4d565b602d80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314611e265760405162461bcd60e51b8152600401610b4d90613305565b8284602454611e3591906133a1565b611e3f91906133cc565b6032556024548190611e529084906133a1565b611e5c91906133cc565b60335550505050565b6001600160a01b038316611ec75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b4d565b6001600160a01b038216611f285760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b4d565b6001600160a01b038381165f8181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6001600160a01b038416611fed5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b4d565b6001600160a01b03831661204f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b4d565b5f82116120b05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b4d565b6120ba84846123c6565b156122d25760345460ff166121115760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b4d565b60375460ff16156121bc576001600160a01b0384165f9081526003602052604090205460ff161561217e576001600160a01b0383165f9081526038602052604090205443900361215f575f80fd5b6001600160a01b0383165f9081526038602052604090204390556121bc565b6001600160a01b0384165f908152603860205260409020544390036121a1575f80fd5b6001600160a01b0384165f9081526038602052604090204390555b602e5482111561221f5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b4d565b6029546001600160a01b0384811691161480159061225557506001600160a01b0383165f9081526003602052604090205460ff16155b156122d25760305482612267856119c6565b61227191906133df565b11156122d25760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610b4d565b6001600160a01b0384165f9081526006602052604090205460019060ff168061231257506001600160a01b0384165f9081526006602052604090205460ff165b1561231a57505f5b6001600160a01b0384165f9081526003602052604090205460ff161561239057602d54600160a01b900460ff1615801561235d5750602d54600160a81b900460ff165b15612390575f61236c306119c6565b9050603254811061238e57603354811061238557506033545b61238e81612482565b505b61239c858585846127fb565b95945050505050565b5f805f6123b0612b68565b90925090506123bf81836133cc565b9250505090565b5f80546001600160a01b038481169116148015906123f157505f546001600160a01b03838116911614155b801561241557506001600160a01b0382165f9081526009602052604090205460ff16155b801561243957506001600160a01b0383165f9081526009602052604090205460ff16155b80156124535750602a546001600160a01b03838116911614155b801561246757506001600160a01b03821615155b801561101b57506001600160a01b0383163014159392505050565b602d805460ff60a01b1916600160a01b179055601d54601c546124a591906133df565b156127eb575f6002601d54601c546124bd91906133df565b601c546124ca90856133a1565b6124d491906133cc565b6124de91906133cc565b90505f6124eb8284613362565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f815181106125235761252361333a565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561257a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061259e919061360d565b816001815181106125b1576125b161333a565b6001600160a01b03928316602091820292909201015260275460405163791ac94760e01b815291169063791ac947906125f69085905f908690309042906004016136eb565b5f604051808303815f87803b15801561260d575f80fd5b505af115801561261f573d5f803e3d5ffd5b505050505f6002601d54601c5461263691906133df565b601c5461264390476133a1565b61264d91906133cc565b61265791906133cc565b9050831561272457602754602a5460405163f305d71960e01b81526001600160a01b039283169263f305d71992859261269e9230928b925f92839216904290600401613628565b60606040518083038185885af11580156126ba573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906126df9190613663565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b5f61272f8587613362565b11156127e657601f5460215447915f9161274990846133cc565b61275391906133a1565b90505f6020546021548461276791906133cc565b61277191906133a1565b602d546040519192506001600160a01b03169083156108fc029084905f818181858888f193505050501580156127a9573d5f803e3d5ffd5b50602c546040516001600160a01b039091169082156108fc029083905f818181858888f193505050501580156127e1573d5f803e3d5ffd5b505050505b505050505b50602d805460ff60a01b19169055565b6034545f90610100900460ff1661288e576128168585612ce2565b603454610100900460ff16158015612833575061283385856123c6565b1561288e5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610b4d565b5f61289b86868686612dfb565b60808101516001600160a01b0388165f908152600160205260409020549192506128c491613362565b6001600160a01b038088165f90815260016020526040808220939093556060840151918816815291909120546128fa91906133df565b6001600160a01b038087165f9081526001602090815260408083209490945591891681526007909152205460ff16801561294c57506001600160a01b0385165f9081526007602052604090205460ff16155b15612991576001600160a01b0386165f90815260026020526040902054612974908590613362565b6001600160a01b0387165f90815260026020526040902055612ac8565b6001600160a01b0386165f9081526007602052604090205460ff161580156129d057506001600160a01b0385165f9081526007602052604090205460ff165b15612a165780516001600160a01b0386165f908152600260205260409020546129f991906133df565b6001600160a01b0386165f90815260026020526040902055612ac8565b6001600160a01b0386165f9081526007602052604090205460ff168015612a5457506001600160a01b0385165f9081526007602052604090205460ff165b15612ac8576001600160a01b0386165f90815260026020526040902054612a7c908590613362565b6001600160a01b038088165f9081526002602052604080822093909355835191881681529190912054612aaf91906133df565b6001600160a01b0386165f908152600260205260409020555b604081015115612ae057612ae0868260400151612fd9565b5f8160a001511180612af557505f8160200151115b15612b0c57612b0c8160a00151826020015161309f565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef835f0151604051612b5491815260200190565b60405180910390a350600195945050505050565b6025546024545f918291825b600854811015612cb1578260015f60088481548110612b9557612b9561333a565b5f9182526020808320909101546001600160a01b031683528201929092526040019020541180612bfd57508160025f60088481548110612bd757612bd761333a565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b15612c1357602554602454945094505050509091565b60015f60088381548110612c2957612c2961333a565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054612c579084613362565b925060025f60088381548110612c6f57612c6f61333a565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054612c9d9083613362565b915080612ca981613389565b915050612b74565b50602454602554612cc291906133cc565b821015612cd9576025546024549350935050509091565b90939092509050565b603454610100900460ff1615612d465760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610b4d565b612d5082826123c6565b158015612d6a57506028546001600160a01b038281169116145b15610e12576001600160a01b0382165f9081526009602052604090819020805460ff191660019081179091556034805461ff00191661010017905542603655602d805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15991612def91901515815260200190565b60405180910390a15050565b612e2e6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b612e616040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f612e6a6123a5565b9050612e7681866133a1565b60808301528315612f84576001600160a01b0386165f9081526003602052604090205460ff1615612eb857601354600d55601454600e55601554600f55612f02565b6001600160a01b0387165f9081526003602052604090205460ff1615612eef57601054600d55601154600e55601254600f55612f02565b601654600d55601754600e55601854600f555b601e54600d54612f1290876133a1565b612f1c91906133cc565b6020830152601e54600f54600e54612f3491906133df565b612f3e90876133a1565b612f4891906133cc565b604083018190526020830151612f5e91906133df565b612f689086613362565b82526020820151612f7a9082906133a1565b60a0830152612f9c565b5f602083018190526040830181905285835260a08301525b808260400151612fac91906133a1565b8260a00151612fbb91906133df565b8260800151612fca9190613362565b60608301525095945050505050565b5f612fe26123a5565b90505f612fef82846133a1565b305f9081526001602052604090205490915061300c9082906133df565b305f9081526001602090815260408083209390935560079052205460ff161561305957305f908152600260205260409020546130499084906133df565b305f908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b816025546130ad9190613362565b6025556026546130be9082906133df565b6026555050565b5f6020808352835180828501525f5b818110156130f0578581018301518582016040015282016130d4565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611afe575f80fd5b5f8060408385031215613135575f80fd5b823561314081613110565b946020939093013593505050565b8035801515811461315d575f80fd5b919050565b5f8060408385031215613173575f80fd5b823561317e81613110565b915061318c6020840161314e565b90509250929050565b5f805f606084860312156131a7575f80fd5b83356131b281613110565b925060208401356131c281613110565b929592945050506040919091013590565b5f80604083850312156131e4575f80fd5b50508035926020909101359150565b5f60208284031215613203575f80fd5b813561101b81613110565b5f6020828403121561321e575f80fd5b5035919050565b5f805f60608486031215613237575f80fd5b505081359360208301359350604090920135919050565b5f806040838503121561325f575f80fd5b823561326a81613110565b9150602083013561327a81613110565b809150509250929050565b5f60208284031215613295575f80fd5b61101b8261314e565b5f805f80608085870312156132b1575f80fd5b5050823594602084013594506040840135936060013592509050565b600181811c908216806132e157607f821691505b6020821081036132ff57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610b1e57610b1e61334e565b634e487b7160e01b5f52603160045260245ffd5b5f6001820161339a5761339a61334e565b5060010190565b8082028115828204841417610b1e57610b1e61334e565b634e487b7160e01b5f52601260045260245ffd5b5f826133da576133da6133b8565b500490565b80820180821115610b1e57610b1e61334e565b634e487b7160e01b5f52604160045260245ffd5b601f821115610e10575f81815260208120601f850160051c8101602086101561342c5750805b601f850160051c820191505b8181101561344b57828155600101613438565b505050505050565b815167ffffffffffffffff81111561346d5761346d6133f2565b6134818161347b84546132cd565b84613406565b602080601f8311600181146134b4575f841561349d5750858301515b5f19600386901b1c1916600185901b17855561344b565b5f85815260208120601f198616915b828110156134e2578886015182559484019460019091019084016134c3565b50858210156134ff57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b8085111561354957815f190482111561352f5761352f61334e565b8085161561353c57918102915b93841c9390800290613514565b509250929050565b5f8261355f57506001610b1e565b8161356b57505f610b1e565b8160018114613581576002811461358b576135a7565b6001915050610b1e565b60ff84111561359c5761359c61334e565b50506001821b610b1e565b5060208310610133831016604e8410600b84101617156135ca575081810a610b1e565b6135d4838361350f565b805f19048211156135e7576135e761334e565b029392505050565b5f61101b8383613551565b5f82613608576136086133b8565b500690565b5f6020828403121561361d575f80fd5b815161101b81613110565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b5f805f60608486031215613675575f80fd5b8351925060208401519150604084015190509250925092565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156137395784516001600160a01b031683529383019391830191600101613714565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220e276ff9046ea2beb9a6aa80664442275739f9d1a9b063e9a5b58da9124c39b0464736f6c63430008150033

Deployed Bytecode

0x608060405260043610610395575f3560e01c806364038409116101de578063bbcea6bf11610108578063dd62ed3e1161009d578063f6540ec71161006d578063f6540ec714610a16578063f749cee214610a2b578063fb663b3b14610a4a578063fb78680d14610a5f575f80fd5b8063dd62ed3e14610971578063ea08d30b146109b5578063eb585db2146109ca578063f1946328146109df575f80fd5b8063c8607952116100d8578063c860795214610913578063d038b07e14610928578063d9e664601461093d578063dc44b6a01461095c575f80fd5b8063bbcea6bf146108ab578063bf9e1464146108c0578063c49b9a80146108df578063c5d24189146108fe575f80fd5b8063893d20e81161017e5780639616aa321161014e5780639616aa321461082f57806398dada871461084e578063a457c2d71461086d578063a9059cbb1461088c575f80fd5b8063893d20e8146107e05780638da5cb5b146107e057806392d422bc146107fc57806395d89b411461081b575f80fd5b806370a08231116101b957806370a0823114610784578063715018a6146107a357806383602e76146107b757806388790a68146107cb575f80fd5b806364038409146107455780636bc87c3a1461075a5780636cbdd5e31461076f575f80fd5b80632e1bbd23116102bf57806345e8c85c1161025f57806350a8e0161161022f57806350a8e016146106ca578063571ac8b0146106e8578063575f18e51461070757806358fa63ca14610726575f80fd5b806345e8c85c146106615780634a74bb02146106765780634ef3cce5146106965780634fb2e45d146106ab575f80fd5b8063384f6b511161029a578063384f6b51146105ef57806339509351146106045780633f3cf56c14610623578063452ed4f114610642575f80fd5b80632e1bbd2314610590578063313ce567146105af57806336cca8ed146105d0575f80fd5b806317eade331161033557806323b872dd1161030557806323b872dd146104fc578063260039571461051b578063285635581461053a5780632d83811914610571575f80fd5b806317eade331461049f57806318160ddd146104b4578063192f1889146104c857806322976e0d146104e7575f80fd5b8063095ea7b311610370578063095ea7b31461041c57806313114a9d1461044b57806313e461921461046957806315639c1b1461048a575f80fd5b806303fd2a45146103a057806306fdde03146103dc5780630758d924146103fd575f80fd5b3661039c57005b5f80fd5b3480156103ab575f80fd5b50602a546103bf906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103e7575f80fd5b506103f0610a7e565b6040516103d391906130c5565b348015610408575f80fd5b506027546103bf906001600160a01b031681565b348015610427575f80fd5b5061043b610436366004613124565b610b0e565b60405190151581526020016103d3565b348015610456575f80fd5b506026545b6040519081526020016103d3565b348015610474575f80fd5b50610488610483366004613162565b610b24565b005b348015610495575f80fd5b5061045b600d5481565b3480156104aa575f80fd5b5061045b60215481565b3480156104bf575f80fd5b5060245461045b565b3480156104d3575f80fd5b506104886104e2366004613162565b610e16565b3480156104f2575f80fd5b5061045b600f5481565b348015610507575f80fd5b5061043b610516366004613195565b610e69565b348015610526575f80fd5b506104886105353660046131d3565b610eba565b348015610545575f80fd5b5061043b6105543660046131f3565b6001600160a01b03165f9081526007602052604090205460ff1690565b34801561057c575f80fd5b5061045b61058b36600461320e565b610fa0565b34801561059b575f80fd5b506104886105aa366004613225565b611022565b3480156105ba575f80fd5b5060225460405160ff90911681526020016103d3565b3480156105db575f80fd5b506104886105ea36600461324e565b6110a5565b3480156105fa575f80fd5b5061045b601c5481565b34801561060f575f80fd5b5061043b61061e366004613124565b61167b565b34801561062e575f80fd5b5061048861063d3660046131d3565b6116b1565b34801561064d575f80fd5b506028546103bf906001600160a01b031681565b34801561066c575f80fd5b5061045b60165481565b348015610681575f80fd5b50602d5461043b90600160a81b900460ff1681565b3480156106a1575f80fd5b5061045b601d5481565b3480156106b6575f80fd5b506104886106c53660046131f3565b6117a2565b3480156106d5575f80fd5b5060345461043b90610100900460ff1681565b3480156106f3575f80fd5b5061043b6107023660046131f3565b611937565b348015610712575f80fd5b50610488610721366004613225565b611943565b348015610731575f80fd5b50602b546103bf906001600160a01b031681565b348015610750575f80fd5b5061045b602f5481565b348015610765575f80fd5b5061045b600e5481565b34801561077a575f80fd5b5061045b60185481565b34801561078f575f80fd5b5061045b61079e3660046131f3565b6119c6565b3480156107ae575f80fd5b50610488611a22565b3480156107c2575f80fd5b50610488611a9e565b3480156107d6575f80fd5b5061045b60145481565b3480156107eb575f80fd5b505f546001600160a01b03166103bf565b348015610807575f80fd5b50610488610816366004613225565b611b01565b348015610826575f80fd5b506103f0611b84565b34801561083a575f80fd5b506104886108493660046131f3565b611b93565b348015610859575f80fd5b50610488610868366004613225565b611c31565b348015610878575f80fd5b5061043b610887366004613124565b611c68565b348015610897575f80fd5b5061043b6108a6366004613124565b611c9e565b3480156108b6575f80fd5b5061045b60135481565b3480156108cb575f80fd5b506104886108da3660046131d3565b611caa565b3480156108ea575f80fd5b506104886108f9366004613285565b611cde565b348015610909575f80fd5b5061045b60125481565b34801561091e575f80fd5b5061045b60155481565b348015610933575f80fd5b5061045b60105481565b348015610948575f80fd5b506029546103bf906001600160a01b031681565b348015610967575f80fd5b5061045b60115481565b34801561097c575f80fd5b5061045b61098b36600461324e565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205490565b3480156109c0575f80fd5b5061045b60175481565b3480156109d5575f80fd5b5061045b60205481565b3480156109ea575f80fd5b5061043b6109f93660046131f3565b6001600160a01b03165f9081526006602052604090205460ff1690565b348015610a21575f80fd5b5061045b60315481565b348015610a36575f80fd5b50610488610a453660046131f3565b611d5f565b348015610a55575f80fd5b5061045b601f5481565b348015610a6a575f80fd5b50610488610a7936600461329e565b611dfd565b6060600b8054610a8d906132cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab9906132cd565b8015610b045780601f10610adb57610100808354040283529160200191610b04565b820191905f5260205f20905b815481529060010190602001808311610ae757829003601f168201915b5050505050905090565b5f610b1a338484611e65565b5060015b92915050565b5f546001600160a01b03163314610b565760405162461bcd60e51b8152600401610b4d90613305565b60405180910390fd5b801515600103610c85576001600160a01b0382165f9081526007602052604090205460ff1615610bc85760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610b4d565b6001600160a01b0382165f9081526001602052604090205415610c1f576001600160a01b0382165f90815260016020526040902054610c0690610fa0565b6001600160a01b0383165f908152600260205260409020555b506001600160a01b03165f818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b8015155f03610e12576001600160a01b0382165f9081526007602052604090205460ff16610cf55760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610b4d565b5f5b600854811015610e1057826001600160a01b031660088281548110610d1e57610d1e61333a565b5f918252602090912001546001600160a01b031603610dfe5760088054610d4790600190613362565b81548110610d5757610d5761333a565b5f91825260209091200154600880546001600160a01b039092169183908110610d8257610d8261333a565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480610dd957610dd9613375565b5f8281526020902081015f1990810180546001600160a01b0319169055019055610e10565b80610e0881613389565b915050610cf7565b505b5050565b5f546001600160a01b03163314610e3f5760405162461bcd60e51b8152600401610b4d90613305565b6001600160a01b03919091165f908152600660205260409020805460ff1916911515919091179055565b5f610e75848484611f88565b506001600160a01b0384165f90815260056020908152604080832033808552925290912054610eb0918691610eab908690613362565b611e65565b5060019392505050565b5f546001600160a01b03163314610ee35760405162461bcd60e51b8152600401610b4d90613305565b5f8183602454610ef391906133a1565b610efd91906133cc565b90506103e8602454610f0f91906133cc565b811015610f795760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e31604482015271129037b3103a37ba30b61039bab838363c9760711b6064820152608401610b4d565b6030819055600a548290610f8e9085906133a1565b610f9891906133cc565b603155505050565b5f6025548211156110065760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b4d565b5f61100f6123a5565b905061101b81846133cc565b9392505050565b5f546001600160a01b0316331461104b5760405162461bcd60e51b8152600401610b4d90613305565b601954831115801561105f5750601a548211155b801561106d5750601b548111155b611075575f80fd5b6113248161108384866133df565b61108d91906133df565b1115611097575f80fd5b601092909255601155601255565b5f546001600160a01b031633146110ce5760405162461bcd60e51b8152600401610b4d90613305565b603a5460ff16156110dd575f80fd5b602d80546001600160a01b038085166001600160a01b031992831617909255602c80549284169290911691909117905560408051808201909152600a81526920b634b2b71022b637b760b11b6020820152600b9061113b9082613453565b5060408051808201909152600981526820a624a2a722a627a760b91b6020820152600c906111699082613453565b506327bc86aa600a556022805460ff1916601290811790915560235560235461119390600a6135ef565b600a546111a091906133a1565b60248190556111b0905f196135fa565b6111bb905f19613362565b602555602954602780546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015611218573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061123c919061360d565b6001600160a01b031663c9c6539660275f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561129a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112be919061360d565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303815f875af1158015611307573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061132b919061360d565b602880546001600160a01b0319166001600160a01b039283169081179091555f908152600360209081526040808320805460ff19166001179055308352600582528083206027549094168352929052205f1990556024546103e89061139190600a6133a1565b61139b91906133cc565b602e55600a80546103e8916113b091906133a1565b6113ba91906133cc565b602f556024546103e8906113cf90600a6133a1565b6113d991906133cc565b603055600a80546103e8916113ee91906133a1565b6113f891906133cc565b6031556024546127109061140d9060056133a1565b61141791906133cc565b6032556024546103e89061142c9060056133a1565b61143691906133cc565b603355602954611450906001600160a01b03165f19610b0e565b50603a805460ff19166001908117909155602554905f6114775f546001600160a01b031690565b6001600160a01b0316815260208101919091526040015f20556114a15f546001600160a01b031690565b602b546024546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36027546115039030906001600160a01b03165f19611e65565b6115486115175f546001600160a01b031690565b30606461152e61079e5f546001600160a01b031690565b6115399060646133a1565b61154391906133cc565b611f88565b506027546001600160a01b031663f305d7194730611565816119c6565b5f806115785f546001600160a01b031690565b426040518863ffffffff1660e01b815260040161159a96959493929190613628565b60606040518083038185885af11580156115b6573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906115db9190613663565b5050436039555060345460ff16156116355760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b4d565b611640306001610b24565b602854611657906001600160a01b03166001610b24565b50506034805460ff19166001179055602d805460ff60a81b1916600160a81b179055565b335f8181526005602090815260408083206001600160a01b03871684529091528120549091610b1a918590610eab9086906133df565b5f546001600160a01b031633146116da5760405162461bcd60e51b8152600401610b4d90613305565b5f81836024546116ea91906133a1565b6116f491906133cc565b90506103e860245461170691906133cc565b81101561177b5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610b4d565b602e819055600a5482906117909085906133a1565b61179a91906133cc565b602f55505050565b5f546001600160a01b031633146117cb5760405162461bcd60e51b8152600401610b4d90613305565b6001600160a01b0381166117f15760405162461bcd60e51b8152600401610b4d9061368e565b602a546001600160a01b039081169082160361181f5760405162461bcd60e51b8152600401610b4d9061368e565b5f8054611837916001600160a01b0390911690610e16565b611842816001610e16565b61184d816001610b24565b5f54602c546001600160a01b0391821691160361188057602c80546001600160a01b0319166001600160a01b0383161790555b5f54611894906001600160a01b03166119c6565b5f80546001600160a01b0390811682526005602090815260408084208684168552909152822092909255805490916118cc91166119c6565b11156118ed575f546118eb906001600160a01b031682611543826119c6565b505b5f80546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f610b1e825f19610b0e565b5f546001600160a01b0316331461196c5760405162461bcd60e51b8152600401610b4d90613305565b60195483111580156119805750601a548211155b801561198e5750601b548111155b611996575f80fd5b611324816119a484866133df565b6119ae91906133df565b11156119b8575f80fd5b601692909255601755601855565b6001600160a01b0381165f9081526007602052604081205460ff1615611a0157506001600160a01b03165f9081526002602052604090205490565b6001600160a01b0382165f90815260016020526040902054610b1e90610fa0565b5f546001600160a01b03163314611a4b5760405162461bcd60e51b8152600401610b4d90613305565b5f8054611a63916001600160a01b0390911690610e16565b5f80546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b5f546001600160a01b03163314611ac75760405162461bcd60e51b8152600401610b4d90613305565b5f80546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611afe573d5f803e3d5ffd5b50565b5f546001600160a01b03163314611b2a5760405162461bcd60e51b8152600401610b4d90613305565b6019548311158015611b3e5750601a548211155b8015611b4c5750601b548111155b611b54575f80fd5b611af481611b6284866133df565b611b6c91906133df565b1115611b76575f80fd5b601392909255601455601555565b6060600c8054610a8d906132cd565b5f546001600160a01b03163314611bbc5760405162461bcd60e51b8152600401610b4d90613305565b602c546001600160a01b03808316911603611c0f5760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610b4d565b602c80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314611c5a5760405162461bcd60e51b8152600401610b4d90613305565b601f92909255602055602155565b335f8181526005602090815260408083206001600160a01b03871684529091528120549091610b1a918590610eab908690613362565b5f610eb0338484611f88565b5f546001600160a01b03163314611cd35760405162461bcd60e51b8152600401610b4d90613305565b601c91909155601d55565b5f546001600160a01b03163314611d075760405162461bcd60e51b8152600401610b4d90613305565b602d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611d5490831515815260200190565b60405180910390a150565b5f546001600160a01b03163314611d885760405162461bcd60e51b8152600401610b4d90613305565b602d546001600160a01b03808316911603611ddb5760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610b4d565b602d80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314611e265760405162461bcd60e51b8152600401610b4d90613305565b8284602454611e3591906133a1565b611e3f91906133cc565b6032556024548190611e529084906133a1565b611e5c91906133cc565b60335550505050565b6001600160a01b038316611ec75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b4d565b6001600160a01b038216611f285760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b4d565b6001600160a01b038381165f8181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6001600160a01b038416611fed5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b4d565b6001600160a01b03831661204f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b4d565b5f82116120b05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b4d565b6120ba84846123c6565b156122d25760345460ff166121115760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b4d565b60375460ff16156121bc576001600160a01b0384165f9081526003602052604090205460ff161561217e576001600160a01b0383165f9081526038602052604090205443900361215f575f80fd5b6001600160a01b0383165f9081526038602052604090204390556121bc565b6001600160a01b0384165f908152603860205260409020544390036121a1575f80fd5b6001600160a01b0384165f9081526038602052604090204390555b602e5482111561221f5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b4d565b6029546001600160a01b0384811691161480159061225557506001600160a01b0383165f9081526003602052604090205460ff16155b156122d25760305482612267856119c6565b61227191906133df565b11156122d25760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610b4d565b6001600160a01b0384165f9081526006602052604090205460019060ff168061231257506001600160a01b0384165f9081526006602052604090205460ff165b1561231a57505f5b6001600160a01b0384165f9081526003602052604090205460ff161561239057602d54600160a01b900460ff1615801561235d5750602d54600160a81b900460ff165b15612390575f61236c306119c6565b9050603254811061238e57603354811061238557506033545b61238e81612482565b505b61239c858585846127fb565b95945050505050565b5f805f6123b0612b68565b90925090506123bf81836133cc565b9250505090565b5f80546001600160a01b038481169116148015906123f157505f546001600160a01b03838116911614155b801561241557506001600160a01b0382165f9081526009602052604090205460ff16155b801561243957506001600160a01b0383165f9081526009602052604090205460ff16155b80156124535750602a546001600160a01b03838116911614155b801561246757506001600160a01b03821615155b801561101b57506001600160a01b0383163014159392505050565b602d805460ff60a01b1916600160a01b179055601d54601c546124a591906133df565b156127eb575f6002601d54601c546124bd91906133df565b601c546124ca90856133a1565b6124d491906133cc565b6124de91906133cc565b90505f6124eb8284613362565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f815181106125235761252361333a565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561257a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061259e919061360d565b816001815181106125b1576125b161333a565b6001600160a01b03928316602091820292909201015260275460405163791ac94760e01b815291169063791ac947906125f69085905f908690309042906004016136eb565b5f604051808303815f87803b15801561260d575f80fd5b505af115801561261f573d5f803e3d5ffd5b505050505f6002601d54601c5461263691906133df565b601c5461264390476133a1565b61264d91906133cc565b61265791906133cc565b9050831561272457602754602a5460405163f305d71960e01b81526001600160a01b039283169263f305d71992859261269e9230928b925f92839216904290600401613628565b60606040518083038185885af11580156126ba573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906126df9190613663565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b5f61272f8587613362565b11156127e657601f5460215447915f9161274990846133cc565b61275391906133a1565b90505f6020546021548461276791906133cc565b61277191906133a1565b602d546040519192506001600160a01b03169083156108fc029084905f818181858888f193505050501580156127a9573d5f803e3d5ffd5b50602c546040516001600160a01b039091169082156108fc029083905f818181858888f193505050501580156127e1573d5f803e3d5ffd5b505050505b505050505b50602d805460ff60a01b19169055565b6034545f90610100900460ff1661288e576128168585612ce2565b603454610100900460ff16158015612833575061283385856123c6565b1561288e5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610b4d565b5f61289b86868686612dfb565b60808101516001600160a01b0388165f908152600160205260409020549192506128c491613362565b6001600160a01b038088165f90815260016020526040808220939093556060840151918816815291909120546128fa91906133df565b6001600160a01b038087165f9081526001602090815260408083209490945591891681526007909152205460ff16801561294c57506001600160a01b0385165f9081526007602052604090205460ff16155b15612991576001600160a01b0386165f90815260026020526040902054612974908590613362565b6001600160a01b0387165f90815260026020526040902055612ac8565b6001600160a01b0386165f9081526007602052604090205460ff161580156129d057506001600160a01b0385165f9081526007602052604090205460ff165b15612a165780516001600160a01b0386165f908152600260205260409020546129f991906133df565b6001600160a01b0386165f90815260026020526040902055612ac8565b6001600160a01b0386165f9081526007602052604090205460ff168015612a5457506001600160a01b0385165f9081526007602052604090205460ff165b15612ac8576001600160a01b0386165f90815260026020526040902054612a7c908590613362565b6001600160a01b038088165f9081526002602052604080822093909355835191881681529190912054612aaf91906133df565b6001600160a01b0386165f908152600260205260409020555b604081015115612ae057612ae0868260400151612fd9565b5f8160a001511180612af557505f8160200151115b15612b0c57612b0c8160a00151826020015161309f565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef835f0151604051612b5491815260200190565b60405180910390a350600195945050505050565b6025546024545f918291825b600854811015612cb1578260015f60088481548110612b9557612b9561333a565b5f9182526020808320909101546001600160a01b031683528201929092526040019020541180612bfd57508160025f60088481548110612bd757612bd761333a565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b15612c1357602554602454945094505050509091565b60015f60088381548110612c2957612c2961333a565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054612c579084613362565b925060025f60088381548110612c6f57612c6f61333a565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054612c9d9083613362565b915080612ca981613389565b915050612b74565b50602454602554612cc291906133cc565b821015612cd9576025546024549350935050509091565b90939092509050565b603454610100900460ff1615612d465760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610b4d565b612d5082826123c6565b158015612d6a57506028546001600160a01b038281169116145b15610e12576001600160a01b0382165f9081526009602052604090819020805460ff191660019081179091556034805461ff00191661010017905542603655602d805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15991612def91901515815260200190565b60405180910390a15050565b612e2e6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b612e616040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f612e6a6123a5565b9050612e7681866133a1565b60808301528315612f84576001600160a01b0386165f9081526003602052604090205460ff1615612eb857601354600d55601454600e55601554600f55612f02565b6001600160a01b0387165f9081526003602052604090205460ff1615612eef57601054600d55601154600e55601254600f55612f02565b601654600d55601754600e55601854600f555b601e54600d54612f1290876133a1565b612f1c91906133cc565b6020830152601e54600f54600e54612f3491906133df565b612f3e90876133a1565b612f4891906133cc565b604083018190526020830151612f5e91906133df565b612f689086613362565b82526020820151612f7a9082906133a1565b60a0830152612f9c565b5f602083018190526040830181905285835260a08301525b808260400151612fac91906133a1565b8260a00151612fbb91906133df565b8260800151612fca9190613362565b60608301525095945050505050565b5f612fe26123a5565b90505f612fef82846133a1565b305f9081526001602052604090205490915061300c9082906133df565b305f9081526001602090815260408083209390935560079052205460ff161561305957305f908152600260205260409020546130499084906133df565b305f908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b816025546130ad9190613362565b6025556026546130be9082906133df565b6026555050565b5f6020808352835180828501525f5b818110156130f0578581018301518582016040015282016130d4565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611afe575f80fd5b5f8060408385031215613135575f80fd5b823561314081613110565b946020939093013593505050565b8035801515811461315d575f80fd5b919050565b5f8060408385031215613173575f80fd5b823561317e81613110565b915061318c6020840161314e565b90509250929050565b5f805f606084860312156131a7575f80fd5b83356131b281613110565b925060208401356131c281613110565b929592945050506040919091013590565b5f80604083850312156131e4575f80fd5b50508035926020909101359150565b5f60208284031215613203575f80fd5b813561101b81613110565b5f6020828403121561321e575f80fd5b5035919050565b5f805f60608486031215613237575f80fd5b505081359360208301359350604090920135919050565b5f806040838503121561325f575f80fd5b823561326a81613110565b9150602083013561327a81613110565b809150509250929050565b5f60208284031215613295575f80fd5b61101b8261314e565b5f805f80608085870312156132b1575f80fd5b5050823594602084013594506040840135936060013592509050565b600181811c908216806132e157607f821691505b6020821081036132ff57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610b1e57610b1e61334e565b634e487b7160e01b5f52603160045260245ffd5b5f6001820161339a5761339a61334e565b5060010190565b8082028115828204841417610b1e57610b1e61334e565b634e487b7160e01b5f52601260045260245ffd5b5f826133da576133da6133b8565b500490565b80820180821115610b1e57610b1e61334e565b634e487b7160e01b5f52604160045260245ffd5b601f821115610e10575f81815260208120601f850160051c8101602086101561342c5750805b601f850160051c820191505b8181101561344b57828155600101613438565b505050505050565b815167ffffffffffffffff81111561346d5761346d6133f2565b6134818161347b84546132cd565b84613406565b602080601f8311600181146134b4575f841561349d5750858301515b5f19600386901b1c1916600185901b17855561344b565b5f85815260208120601f198616915b828110156134e2578886015182559484019460019091019084016134c3565b50858210156134ff57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b8085111561354957815f190482111561352f5761352f61334e565b8085161561353c57918102915b93841c9390800290613514565b509250929050565b5f8261355f57506001610b1e565b8161356b57505f610b1e565b8160018114613581576002811461358b576135a7565b6001915050610b1e565b60ff84111561359c5761359c61334e565b50506001821b610b1e565b5060208310610133831016604e8410600b84101617156135ca575081810a610b1e565b6135d4838361350f565b805f19048211156135e7576135e761334e565b029392505050565b5f61101b8383613551565b5f82613608576136086133b8565b500690565b5f6020828403121561361d575f80fd5b815161101b81613110565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b5f805f60608486031215613675575f80fd5b8351925060208401519150604084015190509250925092565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156137395784516001600160a01b031683529383019391830191600101613714565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220e276ff9046ea2beb9a6aa80664442275739f9d1a9b063e9a5b58da9124c39b0464736f6c63430008150033

Deployed Bytecode Sourcemap

8701:23958:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10710:64;;;;;;;;;;-1:-1:-1;10710:64:0;;;;-1:-1:-1;;;;;10710:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;10710:64:0;;;;;;;;17009:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10581:35::-;;;;;;;;;;-1:-1:-1;10581:35:0;;;;-1:-1:-1;;;;;10581:35:0;;;17685:161;;;;;;;;;;-1:-1:-1;17685:161:0;;;;;:::i;:::-;;:::i;:::-;;;1630:14:1;;1623:22;1605:41;;1593:2;1578:18;17685:161:0;1465:187:1;23362:87:0;;;;;;;;;;-1:-1:-1;23431:10:0;;23362:87;;;1803:25:1;;;1791:2;1776:18;23362:87:0;1657:177:1;22448:906:0;;;;;;;;;;-1:-1:-1;22448:906:0;;;;;:::i;:::-;;:::i;:::-;;9423:30;;;;;;;;;;;;;;;;10332:31;;;;;;;;;;;;;;;;16762:83;;;;;;;;;;-1:-1:-1;16835:7:0;;16762:83;;22302:138;;;;;;;;;;-1:-1:-1;22302:138:0;;;;;:::i;:::-;;:::i;9499:34::-;;;;;;;;;;;;;;;;17982:266;;;;;;;;;;-1:-1:-1;17982:266:0;;;;;:::i;:::-;;:::i;21049:340::-;;;;;;;;;;-1:-1:-1;21049:340:0;;;;;:::i;:::-;;:::i;18712:126::-;;;;;;;;;;-1:-1:-1;18712:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;18810:20:0;18786:4;18810:20;;;:11;:20;;;;;;;;;18712:126;23789:250;;;;;;;;;;-1:-1:-1;23789:250:0;;;;;:::i;:::-;;:::i;18985:436::-;;;;;;;;;;-1:-1:-1;18985:436:0;;;;;:::i;:::-;;:::i;16851:71::-;;;;;;;;;;-1:-1:-1;16910:9:0;;16851:71;;16910:9;;;;3938:36:1;;3926:2;3911:18;16851:71:0;3796:184:1;12622:2130:0;;;;;;;;;;-1:-1:-1;12622:2130:0;;;;;:::i;:::-;;:::i;10118:34::-;;;;;;;;;;;;;;;;18256:215;;;;;;;;;;-1:-1:-1;18256:215:0;;;;;:::i;:::-;;:::i;20701:340::-;;;;;;;;;;-1:-1:-1;20701:340:0;;;;;:::i;:::-;;:::i;10623:21::-;;;;;;;;;;-1:-1:-1;10623:21:0;;;;-1:-1:-1;;;;;10623:21:0;;;9838:38;;;;;;;;;;;;;;;;10987:41;;;;;;;;;;-1:-1:-1;10987:41:0;;;;-1:-1:-1;;;10987:41:0;;;;;;10159:37;;;;;;;;;;;;;;;;15392:813;;;;;;;;;;-1:-1:-1;15392:813:0;;;;;:::i;:::-;;:::i;11296:36::-;;;;;;;;;;-1:-1:-1;11296:36:0;;;;;;;;;;;17854:120;;;;;;;;;;-1:-1:-1;17854:120:0;;;;;:::i;:::-;;:::i;19877:455::-;;;;;;;;;;-1:-1:-1;19877:455:0;;;;;:::i;:::-;;:::i;10781:64::-;;;;;;;;;;-1:-1:-1;10781:64:0;;;;-1:-1:-1;;;;;10781:64:0;;;11076:28;;;;;;;;;;;;;;;;9460:32;;;;;;;;;;;;;;;;9930:40;;;;;;;;;;;;;;;;17304:198;;;;;;;;;;-1:-1:-1;17304:198:0;;;;;:::i;:::-;;:::i;16213:196::-;;;;;;;;;;;;;:::i;32113:108::-;;;;;;;;;;;;;:::i;9743:36::-;;;;;;;;;;;;;;;;17086:71;;;;;;;;;;-1:-1:-1;17129:7:0;15370:6;-1:-1:-1;;;;;15370:6:0;17086:71;;19429:440;;;;;;;;;;-1:-1:-1;19429:440:0;;;;;:::i;:::-;;:::i;16928:75::-;;;;;;;;;;;;;:::i;21916:201::-;;;;;;;;;;-1:-1:-1;21916:201:0;;;;;:::i;:::-;;:::i;20340:173::-;;;;;;;;;;-1:-1:-1;20340:173:0;;;;;:::i;:::-;;:::i;18479:225::-;;;;;;;;;;-1:-1:-1;18479:225:0;;;;;:::i;:::-;;:::i;17510:167::-;;;;;;;;;;-1:-1:-1;17510:167:0;;;;;:::i;:::-;;:::i;9702:34::-;;;;;;;;;;;;;;;;20521:172;;;;;;;;;;-1:-1:-1;20521:172:0;;;;;:::i;:::-;;:::i;22123:171::-;;;;;;;;;;-1:-1:-1;22123:171:0;;;;;:::i;:::-;;:::i;9646:47::-;;;;;;;;;;;;;;;;9786:39;;;;;;;;;;;;;;;;9542:43;;;;;;;;;;;;;;;;10672:29;;;;;;;;;;-1:-1:-1;10672:29:0;;;;-1:-1:-1;;;;;10672:29:0;;;9592:47;;;;;;;;;;;;;;;;17163:133;;;;;;;;;;-1:-1:-1;17163:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;17265:19:0;;;17247:7;17265:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17163:133;9883:40;;;;;;;;;;;;;;;;10291:34;;;;;;;;;;;;;;;;18846:131;;;;;;;;;;-1:-1:-1;18846:131:0;;;;;:::i;:::-;-1:-1:-1;;;;;18938:31:0;18914:4;18938:31;;;:22;:31;;;;;;;;;18846:131;11150:30;;;;;;;;;;;;;;;;21694:214;;;;;;;;;;-1:-1:-1;21694:214:0;;;;;:::i;:::-;;:::i;10254:30::-;;;;;;;;;;;;;;;;21397:289;;;;;;;;;;-1:-1:-1;21397:289:0;;;;;:::i;:::-;;:::i;17009:71::-;17048:13;17072:5;17065:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17009:71;:::o;17685:161::-;17760:4;17777:39;687:10;17800:7;17809:6;17777:8;:39::i;:::-;-1:-1:-1;17834:4:0;17685:161;;;;;:::o;22448:906::-;12092:6;;-1:-1:-1;;;;;12092:6:0;687:10;12092:22;12084:67;;;;-1:-1:-1;;;12084:67:0;;;;;;;:::i;:::-;;;;;;;;;22542:15;::::1;;22553:4;22542:15:::0;22538:809:::1;;-1:-1:-1::0;;;;;22583:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22582:21;22574:62;;;::::0;-1:-1:-1;;;22574:62:0;;6570:2:1;22574:62:0::1;::::0;::::1;6552:21:1::0;6609:2;6589:18;;;6582:30;6648;6628:18;;;6621:58;6696:18;;22574:62:0::1;6368:352:1::0;22574:62:0::1;-1:-1:-1::0;;;;;22654:16:0;::::1;22673:1;22654:16:::0;;;:7:::1;:16;::::0;;;;;:20;22651:116:::1;;-1:-1:-1::0;;;;;22734:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22714:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22695:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22651:116:::1;-1:-1:-1::0;;;;;;22781:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22781:27:0::1;22804:4;22781:27:::0;;::::1;::::0;;;22823:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22823:23:0::1;::::0;;::::1;::::0;;22448:906::o;22538:809::-:1;22868:16:::0;::::1;;22879:5;22868:16:::0;22864:483:::1;;-1:-1:-1::0;;;;;22909:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22901:61;;;::::0;-1:-1:-1;;;22901:61:0;;6927:2:1;22901:61:0::1;::::0;::::1;6909:21:1::0;6966:2;6946:18;;;6939:30;7005;6985:18;;;6978:58;7053:18;;22901:61:0::1;6725:352:1::0;22901:61:0::1;22982:9;22977:359;23001:9;:16:::0;22997:20;::::1;22977:359;;;23063:7;-1:-1:-1::0;;;;;23047:23:0::1;:9;23057:1;23047:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23047:12:0::1;:23:::0;23043:278:::1;;23110:9;23120:16:::0;;:20:::1;::::0;23139:1:::1;::::0;23120:20:::1;:::i;:::-;23110:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;23095:9:::1;:12:::0;;-1:-1:-1;;;;;23110:31:0;;::::1;::::0;23105:1;;23095:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23095:46:0::1;-1:-1:-1::0;;;;;23095:46:0;;::::1;;::::0;;23164:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23207:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23207:28:0::1;::::0;;23258:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23258:15:0;;;;;-1:-1:-1;;;;;;23258:15:0::1;::::0;;;;;23296:5:::1;;23043:278;23019:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22977:359;;;;22864:483;22448:906:::0;;:::o;22302:138::-;12092:6;;-1:-1:-1;;;;;12092:6:0;687:10;12092:22;12084:67;;;;-1:-1:-1;;;12084:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22391:31:0;;;::::1;;::::0;;;:22:::1;:31;::::0;;;;:41;;-1:-1:-1;;22391:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22302:138::o;17982:266::-;18080:4;18097:36;18107:6;18115:9;18126:6;18097:9;:36::i;:::-;-1:-1:-1;;;;;;18175:19:0;;;;;;:11;:19;;;;;;;;687:10;18175:33;;;;;;;;;18144:74;;18153:6;;18175:42;;18211:6;;18175:42;:::i;:::-;18144:8;:74::i;:::-;-1:-1:-1;18236:4:0;17982:266;;;;;:::o;21049:340::-;12092:6;;-1:-1:-1;;;;;12092:6:0;687:10;12092:22;12084:67;;;;-1:-1:-1;;;12084:67:0;;;;;;;:::i;:::-;21139:13:::1;21177:7;21166;21156;;:17;;;;:::i;:::-;21155:29;;;;:::i;:::-;21139:45;;21223:4;21213:7;;:14;;;;:::i;:::-;21203:5;:25;;21195:88;;;::::0;-1:-1:-1;;;21195:88:0;;8383:2:1;21195:88:0::1;::::0;::::1;8365:21:1::0;8422:2;8402:18;;;8395:30;8461:34;8441:18;;;8434:62;-1:-1:-1;;;8512:18:1;;;8505:48;8570:19;;21195:88:0::1;8181:414:1::0;21195:88:0::1;21294:14;:22:::0;;;21346:14:::1;::::0;21374:7;;21346:24:::1;::::0;21363:7;;21346:24:::1;:::i;:::-;21345:36;;;;:::i;:::-;21327:15;:54:::0;-1:-1:-1;;;21049:340:0:o;23789:250::-;23855:7;23894;;23883;:18;;23875:73;;;;-1:-1:-1;;;23875:73:0;;8802:2:1;23875:73:0;;;8784:21:1;8841:2;8821:18;;;8814:30;8880:34;8860:18;;;8853:62;-1:-1:-1;;;8931:18:1;;;8924:40;8981:19;;23875:73:0;8600:406:1;23875:73:0;23959:19;23982:10;:8;:10::i;:::-;23959:33;-1:-1:-1;24010:21:0;23959:33;24010:7;:21;:::i;:::-;24003:28;23789:250;-1:-1:-1;;;23789:250:0:o;18985:436::-;12092:6;;-1:-1:-1;;;;;12092:6:0;687:10;12092:22;12084:67;;;;-1:-1:-1;;;12084:67:0;;;;;;;:::i;:::-;19111:13:::1;;19100:7;:24;;:73;;;;;19158:15;;19145:9;:28;;19100:73;:122;;;;;19207:15;;19194:9;:28;;19100:122;19092:149;;;::::0;::::1;;19295:4;19282:9:::0;19260:19:::1;19270:9:::0;19260:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;19252:48;;;::::0;::::1;;19311:14;:24:::0;;;;19346:16:::1;:28:::0;19385:16:::1;:28:::0;18985:436::o;12622:2130::-;12092:6;;-1:-1:-1;;;;;12092:6:0;687:10;12092:22;12084:67;;;;-1:-1:-1;;;12084:67:0;;;;;;;:::i;:::-;12764:19:::1;::::0;::::1;;12763:20;12755:29;;;::::0;::::1;;12797:22;:58:::0;;-1:-1:-1;;;;;12797:58:0;;::::1;-1:-1:-1::0;;;;;;12797:58:0;;::::1;;::::0;;;12866:17:::1;:48:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;12927:20:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;12927:20:0::1;::::0;::::1;::::0;:5:::1;::::0;:20:::1;::::0;:5;:20:::1;:::i;:::-;-1:-1:-1::0;12958:21:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;12958:21:0::1;::::0;::::1;::::0;:7:::1;::::0;:21:::1;::::0;:7;:21:::1;:::i;:::-;-1:-1:-1::0;13007:11:0::1;12990:14;:28:::0;13079:9:::1;:14:::0;;-1:-1:-1;;13079:14:0::1;13091:2;13079:14:::0;;::::1;::::0;;;13108:12:::1;:24:::0;13271:12:::1;::::0;13267:16:::1;::::0;:2:::1;:16;:::i;:::-;13249:14;;:35;;;;:::i;:::-;13239:7;:45:::0;;;13313:13:::1;::::0;-1:-1:-1;;13313:13:0::1;:::i;:::-;13306:21;::::0;-1:-1:-1;;13306:21:0::1;:::i;:::-;13295:7;:33:::0;13372:14:::1;::::0;13341:9:::1;:46:::0;;-1:-1:-1;;;;;;13341:46:0::1;-1:-1:-1::0;;;;;13372:14:0;;::::1;13341:46:::0;;::::1;::::0;;13425:19:::1;::::0;;-1:-1:-1;;;13425:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;13372:14;13425:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13407:49:0::1;;13457:9;;;;;;;;;-1:-1:-1::0;;;;;13457:9:0::1;-1:-1:-1::0;;;;;13457:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13407:82;::::0;-1:-1:-1;;;;;;13407:82:0::1;::::0;;;;;;-1:-1:-1;;;;;13454:15:1;;;13407:82:0::1;::::0;::::1;13436:34:1::0;13483:4:0::1;13486:18:1::0;;;13479:43;13371:18;;13407:82:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13398:6;:91:::0;;-1:-1:-1;;;;;;13398:91:0::1;-1:-1:-1::0;;;;;13398:91:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;13500:15:0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;13500:22:0::1;-1:-1:-1::0;13500:22:0::1;::::0;;13553:4:::1;13533:26:::0;;:11:::1;:26:::0;;;;;13568:9:::1;::::0;;;::::1;13533:46:::0;;;;;;-1:-1:-1;;13533:66:0;;13636:7:::1;::::0;13652:4:::1;::::0;13636:12:::1;::::0;13646:2:::1;13636:12;:::i;:::-;13635:21;;;;:::i;:::-;13620:12;:36:::0;13684:14:::1;::::0;;13707:4:::1;::::0;13684:19:::1;::::0;:14;:19:::1;:::i;:::-;13683:28;;;;:::i;:::-;13667:13;:44:::0;13740:7:::1;::::0;13756:4:::1;::::0;13740:12:::1;::::0;13750:2:::1;13740:12;:::i;:::-;13739:21;;;;:::i;:::-;13722:14;:38:::0;13790:14:::1;::::0;;13813:4:::1;::::0;13790:19:::1;::::0;:14;:19:::1;:::i;:::-;13789:28;;;;:::i;:::-;13771:15;:46:::0;13845:7:::1;::::0;13860:5:::1;::::0;13845:11:::1;::::0;13855:1:::1;13845:11;:::i;:::-;13844:21;;;;:::i;:::-;13828:13;:37:::0;13890:7:::1;::::0;13905:4:::1;::::0;13890:11:::1;::::0;13900:1:::1;13890:11;:::i;:::-;13889:20;;;;:::i;:::-;13876:10;:33:::0;13930:14:::1;::::0;13922:42:::1;::::0;-1:-1:-1;;;;;13930:14:0::1;-1:-1:-1::0;;13922:7:0::1;:42::i;:::-;-1:-1:-1::0;13977:19:0::1;:26:::0;;-1:-1:-1;;13977:26:0::1;13999:4;13977:26:::0;;::::1;::::0;;;14033:7:::1;::::0;;13977:19:::1;14022:7;15343::::0;15370:6;-1:-1:-1;;;;;15370:6:0;;15305:79;14022:7:::1;-1:-1:-1::0;;;;;14014:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;14014:16:0;:26;14071:7:::1;15343::::0;15370:6;-1:-1:-1;;;;;15370:6:0;;15305:79;14071:7:::1;14065:4;::::0;14080:7:::1;::::0;14056:32:::1;::::0;1803:25:1;;;-1:-1:-1;;;;;14056:32:0;;::::1;::::0;14065:4;;::::1;::::0;14056:32:::1;::::0;1791:2:1;1776:18;14056:32:0::1;;;;;;;14133:9;::::0;14101:62:::1;::::0;14118:4:::1;::::0;-1:-1:-1;;;;;14133:9:0::1;-1:-1:-1::0;;14101:8:0::1;:62::i;:::-;14176:65;14186:7;15343::::0;15370:6;-1:-1:-1;;;;;15370:6:0;;15305:79;14186:7:::1;14203:4;14236:3;14212:18;14222:7;15343::::0;15370:6;-1:-1:-1;;;;;15370:6:0;;15305:79;14212:18:::1;14211:24;::::0;14232:3:::1;14211:24;:::i;:::-;:28;;;;:::i;:::-;14176:9;:65::i;:::-;-1:-1:-1::0;14254:9:0::1;::::0;-1:-1:-1;;;;;14254:9:0::1;:25;14287:21;14332:4;14352:24;14332:4:::0;14352:9:::1;:24::i;:::-;14391:1;14408::::0;14425:7:::1;15343::::0;15370:6;-1:-1:-1;;;;;15370:6:0;;15305:79;14425:7:::1;14447:15;14254:219;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;14495:12:0::1;14484:8;:23:::0;-1:-1:-1;14529:14:0::1;::::0;::::1;;14528:15;14520:52;;;::::0;-1:-1:-1;;;14520:52:0;;14658:2:1;14520:52:0::1;::::0;::::1;14640:21:1::0;14697:2;14677:18;;;14670:30;14736:26;14716:18;;;14709:54;14780:18;;14520:52:0::1;14456:348:1::0;14520:52:0::1;14583:42;14613:4;14620;14583:21;:42::i;:::-;14658:6;::::0;14636:35:::1;::::0;-1:-1:-1;;;;;14658:6:0::1;::::0;14636:21:::1;:35::i;:::-;-1:-1:-1::0;;14684:14:0::1;:21:::0;;-1:-1:-1;;14684:21:0::1;14701:4;14684:21;::::0;;14716::::1;:28:::0;;-1:-1:-1;;;;14716:28:0::1;-1:-1:-1::0;;;14716:28:0::1;::::0;;12622:2130::o;18256:215::-;687:10;18344:4;18393:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18393:34:0;;;;;;;;;;18344:4;;18361:80;;18384:7;;18393:47;;18430:10;;18393:47;:::i;20701:340::-;12092:6;;-1:-1:-1;;;;;12092:6:0;687:10;12092:22;12084:67;;;;-1:-1:-1;;;12084:67:0;;;;;;;:::i;:::-;20790:13:::1;20828:7;20817;20807;;:17;;;;:::i;:::-;20806:29;;;;:::i;:::-;20790:45;;20874:4;20864:7;;:14;;;;:::i;:::-;20854:5;:25;;20846:93;;;::::0;-1:-1:-1;;;20846:93:0;;15011:2:1;20846:93:0::1;::::0;::::1;14993:21:1::0;15050:2;15030:18;;;15023:30;15089:34;15069:18;;;15062:62;15160:25;15140:18;;;15133:53;15203:19;;20846:93:0::1;14809:419:1::0;20846:93:0::1;20950:12;:20:::0;;;20998:14:::1;::::0;21026:7;;20998:24:::1;::::0;21015:7;;20998:24:::1;:::i;:::-;20997:36;;;;:::i;:::-;20981:13;:52:::0;-1:-1:-1;;;20701:340:0:o;15392:813::-;12092:6;;-1:-1:-1;;;;;12092:6:0;687:10;12092:22;12084:67;;;;-1:-1:-1;;;12084:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15473:22:0;::::1;15465:96;;;;-1:-1:-1::0;;;15465:96:0::1;;;;;;;:::i;:::-;15592:4;::::0;-1:-1:-1;;;;;15592:4:0;;::::1;15580:16:::0;;::::1;::::0;15572:90:::1;;;;-1:-1:-1::0;;;15572:90:0::1;;;;;;;:::i;:::-;15694:6;::::0;;15673:35:::1;::::0;-1:-1:-1;;;;;15694:6:0;;::::1;::::0;15673:20:::1;:35::i;:::-;15719:36;15740:8;15750:4;15719:20;:36::i;:::-;15766:37;15788:8;15798:4;15766:21;:37::i;:::-;15857:6;::::0;15828:17:::1;::::0;-1:-1:-1;;;;;15857:6:0;;::::1;15828:17:::0;::::1;:36:::0;15824:92:::1;;15879:17;:37:::0;;-1:-1:-1;;;;;;15879:37:0::1;-1:-1:-1::0;;;;;15879:37:0;::::1;;::::0;;15824:92:::1;15979:6;::::0;15969:17:::1;::::0;-1:-1:-1;;;;;15979:6:0::1;15969:9;:17::i;:::-;15937:19;15949:6:::0;;-1:-1:-1;;;;;15949:6:0;;::::1;15937:19:::0;;:11:::1;:19;::::0;;;;;;;:29;;::::1;::::0;;;;;;;:49;;;;16010:6;;15937:19;;16000:17:::1;::::0;16010:6:::1;16000:9;:17::i;:::-;:21;15997:99;;;16048:6;::::0;16038:46:::1;::::0;-1:-1:-1;;;;;16048:6:0::1;16056:8:::0;16066:17:::1;16048:6:::0;16066:9:::1;:17::i;16038:46::-;;15997:99;16116:6;:17:::0;;-1:-1:-1;;;;;;16116:17:0::1;-1:-1:-1::0;;;;;16116:17:0;::::1;::::0;;::::1;::::0;;16149:38:::1;::::0;16116:17;;;;16149:38:::1;::::0;16116:6;16149:38:::1;15392:813:::0;:::o;17854:120::-;17907:4;17931:35;17939:7;-1:-1:-1;;17931:7:0;:35::i;19877:455::-;12092:6;;-1:-1:-1;;;;;12092:6:0;687:10;12092:22;12084:67;;;;-1:-1:-1;;;12084:67:0;;;;;;;:::i;:::-;20007:13:::1;;19996:7;:24;;:73;;;;;20054:15;;20041:9;:28;;19996:73;:122;;;;;20103:15;;20090:9;:28;;19996:122;19988:149;;;::::0;::::1;;20191:4;20178:9:::0;20156:19:::1;20166:9:::0;20156:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;20148:48;;;::::0;::::1;;20207:19;:29:::0;;;;20247:21:::1;:33:::0;20291:21:::1;:33:::0;19877:455::o;17304:198::-;-1:-1:-1;;;;;17394:20:0;;17370:7;17394:20;;;:11;:20;;;;;;;;17390:49;;;-1:-1:-1;;;;;;17423:16:0;;;;;:7;:16;;;;;;;17304:198::o;17390:49::-;-1:-1:-1;;;;;17477:16:0;;;;;;:7;:16;;;;;;17457:37;;:19;:37::i;16213:196::-;12092:6;;-1:-1:-1;;;;;12092:6:0;687:10;12092:22;12084:67;;;;-1:-1:-1;;;12084:67:0;;;;;;;:::i;:::-;16301:6:::1;::::0;;16280:35:::1;::::0;-1:-1:-1;;;;;16301:6:0;;::::1;::::0;16280:20:::1;:35::i;:::-;16343:1;16326:19:::0;;-1:-1:-1;;;;;;16326:19:0::1;::::0;;16361:40:::1;::::0;16343:1;;16361:40:::1;::::0;16343:1;;16361:40:::1;16213:196::o:0;32113:108::-;12092:6;;-1:-1:-1;;;;;12092:6:0;687:10;12092:22;12084:67;;;;-1:-1:-1;;;12084:67:0;;;;;;;:::i;:::-;15343:7;15370:6;;32165:48:::1;::::0;-1:-1:-1;;;;;15370:6:0;;;;32191:21:::1;32165:48:::0;::::1;;;::::0;32191:21;;32165:48;15343:7;32165:48;32191:21;15370:6;32165:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;32113:108::o:0;19429:440::-;12092:6;;-1:-1:-1;;;;;12092:6:0;687:10;12092:22;12084:67;;;;-1:-1:-1;;;12084:67:0;;;;;;;:::i;:::-;19556:13:::1;;19545:7;:24;;:73;;;;;19603:15;;19590:9;:28;;19545:73;:122;;;;;19652:15;;19639:9;:28;;19545:122;19537:149;;;::::0;::::1;;19740:4;19727:9:::0;19705:19:::1;19715:9:::0;19705:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;19697:48;;;::::0;::::1;;19756:15;:25:::0;;;;19792:17:::1;:29:::0;19832:17:::1;:29:::0;19429:440::o;16928:75::-;16969:13;16993:7;16986:14;;;;;:::i;21916:201::-;12092:6;;-1:-1:-1;;;;;12092:6:0;687:10;12092:22;12084:67;;;;-1:-1:-1;;;12084:67:0;;;;;;;:::i;:::-;22006:17:::1;::::0;-1:-1:-1;;;;;22006:30:0;;::::1;:17:::0;::::1;:30:::0;21998:62:::1;;;::::0;-1:-1:-1;;;21998:62:0;;15865:2:1;21998:62:0::1;::::0;::::1;15847:21:1::0;15904:2;15884:18;;;15877:30;-1:-1:-1;;;15923:18:1;;;15916:49;15982:18;;21998:62:0::1;15663:343:1::0;21998:62:0::1;22071:17;:38:::0;;-1:-1:-1;;;;;;22071:38:0::1;-1:-1:-1::0;;;;;22071:38:0;;;::::1;::::0;;;::::1;::::0;;21916:201::o;20340:173::-;12092:6;;-1:-1:-1;;;;;12092:6:0;687:10;12092:22;12084:67;;;;-1:-1:-1;;;12084:67:0;;;;;;;:::i;:::-;20430:11:::1;:16:::0;;;;20457:15:::1;:20:::0;20488:12:::1;:17:::0;20340:173::o;18479:225::-;687:10;18572:4;18621:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18621:34:0;;;;;;;;;;18572:4;;18589:85;;18612:7;;18621:52;;18658:15;;18621:52;:::i;17510:167::-;17588:4;17605:42;687:10;17629:9;17640:6;17605:9;:42::i;20521:172::-;12092:6;;-1:-1:-1;;;;;12092:6:0;687:10;12092:22;12084:67;;;;-1:-1:-1;;;12084:67:0;;;;;;;:::i;:::-;20620:15:::1;:27:::0;;;;20658:15:::1;:27:::0;20521:172::o;22123:171::-;12092:6;;-1:-1:-1;;;;;12092:6:0;687:10;12092:22;12084:67;;;;-1:-1:-1;;;12084:67:0;;;;;;;:::i;:::-;22200:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;22200:32:0::1;-1:-1:-1::0;;;;22200:32:0;;::::1;;::::0;;22248:38:::1;::::0;::::1;::::0;::::1;::::0;22224:8;1630:14:1;1623:22;1605:41;;1593:2;1578:18;;1465:187;22248:38:0::1;;;;;;;;22123:171:::0;:::o;21694:214::-;12092:6;;-1:-1:-1;;;;;12092:6:0;687:10;12092:22;12084:67;;;;-1:-1:-1;;;12084:67:0;;;;;;;:::i;:::-;21787:22:::1;::::0;-1:-1:-1;;;;;21787:35:0;;::::1;:22:::0;::::1;:35:::0;21779:67:::1;;;::::0;-1:-1:-1;;;21779:67:0;;15865:2:1;21779:67:0::1;::::0;::::1;15847:21:1::0;15904:2;15884:18;;;15877:30;-1:-1:-1;;;15923:18:1;;;15916:49;15982:18;;21779:67:0::1;15663:343:1::0;21779:67:0::1;21857:22;:43:::0;;-1:-1:-1;;;;;;21857:43:0::1;-1:-1:-1::0;;;;;21857:43:0;;;::::1;::::0;;;::::1;::::0;;21694:214::o;21397:289::-;12092:6;;-1:-1:-1;;;;;12092:6:0;687:10;12092:22;12084:67;;;;-1:-1:-1;;;12084:67:0;;;;;;;:::i;:::-;21597:16:::1;21577;21567:7;;:26;;;;:::i;:::-;21566:47;;;;:::i;:::-;21550:13;:63:::0;21638:7:::1;::::0;21665:13;;21638:23:::1;::::0;21648:13;;21638:23:::1;:::i;:::-;21637:41;;;;:::i;:::-;21624:10;:54:::0;-1:-1:-1;;;;21397:289:0:o;24051:342::-;-1:-1:-1;;;;;24146:20:0;;24138:69;;;;-1:-1:-1;;;24138:69:0;;16213:2:1;24138:69:0;;;16195:21:1;16252:2;16232:18;;;16225:30;16291:34;16271:18;;;16264:62;-1:-1:-1;;;16342:18:1;;;16335:34;16386:19;;24138:69:0;16011:400:1;24138:69:0;-1:-1:-1;;;;;24226:21:0;;24218:68;;;;-1:-1:-1;;;24218:68:0;;16618:2:1;24218:68:0;;;16600:21:1;16657:2;16637:18;;;16630:30;16696:34;16676:18;;;16669:62;-1:-1:-1;;;16747:18:1;;;16740:32;16789:19;;24218:68:0;16416:398:1;24218:68:0;-1:-1:-1;;;;;24299:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;24352:33;;1803:25:1;;;24352:33:0;;1776:18:1;24352:33:0;;;;;;;24051:342;;;:::o;24401:1784::-;24480:4;-1:-1:-1;;;;;24505:18:0;;24497:68;;;;-1:-1:-1;;;24497:68:0;;17021:2:1;24497:68:0;;;17003:21:1;17060:2;17040:18;;;17033:30;17099:34;17079:18;;;17072:62;-1:-1:-1;;;17150:18:1;;;17143:35;17195:19;;24497:68:0;16819:401:1;24497:68:0;-1:-1:-1;;;;;24584:16:0;;24576:64;;;;-1:-1:-1;;;24576:64:0;;17427:2:1;24576:64:0;;;17409:21:1;17466:2;17446:18;;;17439:30;17505:34;17485:18;;;17478:62;-1:-1:-1;;;17556:18:1;;;17549:33;17599:19;;24576:64:0;17225:399:1;24576:64:0;24668:1;24659:6;:10;24651:64;;;;-1:-1:-1;;;24651:64:0;;17831:2:1;24651:64:0;;;17813:21:1;17870:2;17850:18;;;17843:30;17909:34;17889:18;;;17882:62;-1:-1:-1;;;17960:18:1;;;17953:39;18009:19;;24651:64:0;17629:405:1;24651:64:0;24729:20;24740:4;24746:2;24729:10;:20::i;:::-;24726:776;;;24770:14;;;;24766:89;;24805:34;;-1:-1:-1;;;24805:34:0;;18241:2:1;24805:34:0;;;18223:21:1;18280:2;18260:18;;;18253:30;18319:26;18299:18;;;18292:54;18363:18;;24805:34:0;18039:348:1;24766:89:0;24873:15;;;;24869:347;;;-1:-1:-1;;;;;24913:13:0;;;;;;:7;:13;;;;;;;;24909:292;;;-1:-1:-1;;;;;24958:13:0;;;;;;:9;:13;;;;;;24975:12;24958:29;;24950:38;;;;;;-1:-1:-1;;;;;25011:13:0;;;;;;:9;:13;;;;;25027:12;25011:28;;24909:292;;;-1:-1:-1;;;;;25096:15:0;;;;;;:9;:15;;;;;;25115:12;25096:31;;25088:40;;;;;;-1:-1:-1;;;;;25151:15:0;;;;;;:9;:15;;;;;25169:12;25151:30;;24909:292;25248:12;;25238:6;:22;;25230:75;;;;-1:-1:-1;;;25230:75:0;;18594:2:1;25230:75:0;;;18576:21:1;18633:2;18613:18;;;18606:30;18672:34;18652:18;;;18645:62;-1:-1:-1;;;18723:18:1;;;18716:38;18771:19;;25230:75:0;18392:404:1;25230:75:0;25329:14;;-1:-1:-1;;;;;25323:20:0;;;25329:14;;25323:20;;;;:36;;-1:-1:-1;;;;;;25348:11:0;;;;;;:7;:11;;;;;;;;25347:12;25323:36;25320:171;;;25414:14;;25404:6;25388:13;25398:2;25388:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;25380:95;;;;-1:-1:-1;;;25380:95:0;;19003:2:1;25380:95:0;;;18985:21:1;19042:2;19022:18;;;19015:30;19081:34;19061:18;;;19054:62;-1:-1:-1;;;19132:18:1;;;19125:40;19182:19;;25380:95:0;18801:406:1;25380:95:0;-1:-1:-1;;;;;25545:28:0;;25512:12;25545:28;;;:22;:28;;;;;;25527:4;;25545:28;;;:58;;-1:-1:-1;;;;;;25577:26:0;;;;;;:22;:26;;;;;;;;25545:58;25542:104;;;-1:-1:-1;25629:5:0;25542:104;-1:-1:-1;;;;;25662:11:0;;;;;;:7;:11;;;;;;;;25658:457;;;25695:16;;-1:-1:-1;;;25695:16:0;;;;25694:17;:59;;;;-1:-1:-1;25732:21:0;;-1:-1:-1;;;25732:21:0;;;;25694:59;25690:408;;;25788:28;25819:24;25837:4;25819:9;:24::i;:::-;25788:55;;25890:13;;25866:20;:37;25862:221;;25955:10;;25931:20;:34;25928:77;;-1:-1:-1;25992:10:0;;25928:77;26027:36;26042:20;26027:14;:36::i;:::-;25769:329;25690:408;26133:44;26151:4;26157:2;26161:6;26169:7;26133:17;:44::i;:::-;26126:51;24401:1784;-1:-1:-1;;;;;24401:1784:0:o;31234:161::-;31276:7;31297:15;31314;31333:19;:17;:19::i;:::-;31296:56;;-1:-1:-1;31296:56:0;-1:-1:-1;31370:17:0;31296:56;;31370:17;:::i;:::-;31363:24;;;;31234:161;:::o;23457:324::-;23526:4;15370:6;;-1:-1:-1;;;;;23550:15:0;;;15370:6;;23550:15;;;;:45;;-1:-1:-1;15343:7:0;15370:6;-1:-1:-1;;;;;23582:13:0;;;15370:6;;23582:13;;23550:45;:84;;;;-1:-1:-1;;;;;;23613:21:0;;;;;;:17;:21;;;;;;;;23612:22;23550:84;:125;;;;-1:-1:-1;;;;;;23652:23:0;;;;;;:17;:23;;;;;;;;23651:24;23550:125;:152;;;;-1:-1:-1;23698:4:0;;-1:-1:-1;;;;;23692:10:0;;;23698:4;;23692:10;;23550:152;:185;;;;-1:-1:-1;;;;;;23719:16:0;;;;23550:185;:223;;;;-1:-1:-1;;;;;;23752:21:0;;23768:4;23752:21;;23543:230;23457:324;-1:-1:-1;;;23457:324:0:o;26193:1578::-;11966:16;:23;;-1:-1:-1;;;;11966:23:0;-1:-1:-1;;;11966:23:0;;;26301:15:::1;::::0;26283::::1;::::0;:33:::1;::::0;26301:15;26283:33:::1;:::i;:::-;26279:64:::0;26336:7:::1;26279:64;26353:17;26456:1;26436:15;;26418;;:33;;;;:::i;:::-;26398:15;::::0;26375:38:::1;::::0;:20;:38:::1;:::i;:::-;26374:78;;;;:::i;:::-;26373:84;;;;:::i;:::-;26353:104:::0;-1:-1:-1;26470:20:0::1;26493:32;26353:104:::0;26493:20;:32:::1;:::i;:::-;26562:16;::::0;;26576:1:::1;26562:16:::0;;;;;::::1;::::0;;26470:55;;-1:-1:-1;26538:21:0::1;::::0;26562:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26562:16:0::1;26538:40;;26607:4;26589;26594:1;26589:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26589:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;26633:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;26633:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;26589:7;;26633:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26623:4;26628:1;26623:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26623:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;26662:9:::1;::::0;:191:::1;::::0;-1:-1:-1;;;26662:191:0;;:9;::::1;::::0;:60:::1;::::0;:191:::1;::::0;26737:12;;26662:9:::1;::::0;26780:4;;26807::::1;::::0;26827:15:::1;::::0;26662:191:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26868:24;26979:1;26959:15;;26941;;:33;;;;:::i;:::-;26921:15;::::0;26897:39:::1;::::0;:21:::1;:39;:::i;:::-;26896:79;;;;:::i;:::-;26895:85;;;;:::i;:::-;26868:112:::0;-1:-1:-1;26997:13:0;;26993:344:::1;;27027:9;::::0;27198:4:::1;::::0;27027:224:::1;::::0;-1:-1:-1;;;27027:224:0;;-1:-1:-1;;;;;27027:9:0;;::::1;::::0;:25:::1;::::0;27060:16;;27027:224:::1;::::0;27104:4:::1;::::0;27128:9;;27027::::1;::::0;;;27198:4:::1;::::0;27221:15:::1;::::0;27027:224:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;27271:54:0::1;::::0;;20399:25:1;;;20455:2;20440:18;;20433:34;;;20483:18;;;20476:34;;;27271:54:0::1;::::0;-1:-1:-1;20387:2:1;20372:18;27271:54:0::1;;;;;;;26993:344;27386:1;27351:32;27374:9:::0;27351:20;:32:::1;:::i;:::-;:36;27347:417;;;27519:11;::::0;27504:12:::1;::::0;27427:21:::1;::::0;27406:17:::1;::::0;27493:24:::1;::::0;27427:21;27493:24:::1;:::i;:::-;:38;;;;:::i;:::-;27464:67;;27546:23;27598:15;;27583:12;;27572:9;:24;;;;:::i;:::-;:42;;;;:::i;:::-;27629:22;::::0;:51:::1;::::0;27546:68;;-1:-1:-1;;;;;;27629:22:0::1;::::0;:51;::::1;;;::::0;27661:18;;27629:22:::1;:51:::0;:22;:51;27661:18;27629:22;:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;27695:17:0::1;::::0;:43:::1;::::0;-1:-1:-1;;;;;27695:17:0;;::::1;::::0;:43;::::1;;;::::0;27722:15;;27695:17:::1;:43:::0;:17;:43;27722:15;27695:17;:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27389:375;;;27347:417;26268:1503;;;;12000:1;-1:-1:-1::0;12012:16:0;:24;;-1:-1:-1;;;;12012:24:0;;;26193:1578::o;28449:1287::-;28577:16;;28551:4;;28577:16;;;;;28572:237;;28614:28;28633:4;28639:2;28614:18;:28::i;:::-;28666:16;;;;;;;28665:17;:41;;;;;28686:20;28697:4;28703:2;28686:10;:20::i;:::-;28661:137;;;28731:47;;-1:-1:-1;;;28731:47:0;;20723:2:1;28731:47:0;;;20705:21:1;20762:2;20742:18;;;20735:30;20801:34;20781:18;;;20774:62;-1:-1:-1;;;20852:18:1;;;20845:35;20897:19;;28731:47:0;20521:401:1;28661:137:0;28829:34;28866:38;28877:4;28883:2;28887:7;28896;28866:10;:38::i;:::-;28949:14;;;;-1:-1:-1;;;;;28933:13:0;;;;;;:7;:13;;;;;;28829:75;;-1:-1:-1;28933:30:0;;;:::i;:::-;-1:-1:-1;;;;;28917:13:0;;;;;;;:7;:13;;;;;;:46;;;;29002:22;;;;28988:11;;;;;;;;;;:36;;29002:22;28988:36;:::i;:::-;-1:-1:-1;;;;;28974:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;29041:17;;;;;:11;:17;;;;;;;:37;;;;-1:-1:-1;;;;;;29063:15:0;;;;;;:11;:15;;;;;;;;29062:16;29041:37;29037:416;;;-1:-1:-1;;;;;29111:13:0;;;;;;:7;:13;;;;;;:23;;29127:7;;29111:23;:::i;:::-;-1:-1:-1;;;;;29095:13:0;;;;;;:7;:13;;;;;:39;29037:416;;;-1:-1:-1;;;;;29157:17:0;;;;;;:11;:17;;;;;;;;29156:18;:37;;;;-1:-1:-1;;;;;;29178:15:0;;;;;;:11;:15;;;;;;;;29156:37;29152:301;;;29238:22;;-1:-1:-1;;;;;29224:11:0;;29238:22;29224:11;;;:7;:11;;;;;;:36;;29238:22;29224:36;:::i;:::-;-1:-1:-1;;;;;29210:11:0;;;;;;:7;:11;;;;;:50;29152:301;;;-1:-1:-1;;;;;29284:17:0;;;;;;:11;:17;;;;;;;;:36;;;;-1:-1:-1;;;;;;29305:15:0;;;;;;:11;:15;;;;;;;;29284:36;29280:173;;;-1:-1:-1;;;;;29353:13:0;;;;;;:7;:13;;;;;;:23;;29369:7;;29353:23;:::i;:::-;-1:-1:-1;;;;;29337:13:0;;;;;;;:7;:13;;;;;;:39;;;;29419:22;;29405:11;;;;;;;;;;:36;;29419:22;29405:36;:::i;:::-;-1:-1:-1;;;;;29391:11:0;;;;;;:7;:11;;;;;:50;29280:173;29469:17;;;;:21;29465:79;;29505:39;29520:4;29526:6;:17;;;29505:14;:39::i;:::-;29573:1;29559:6;:11;;;:15;:34;;;;29592:1;29578:6;:11;;;:15;29559:34;29555:91;;;29608:38;29621:6;:11;;;29634:6;:11;;;29608:12;:38::i;:::-;29679:2;-1:-1:-1;;;;;29664:42:0;29673:4;-1:-1:-1;;;;;29664:42:0;;29683:6;:22;;;29664:42;;;;1803:25:1;;1791:2;1776:18;;1657:177;29664:42:0;;;;;;;;-1:-1:-1;29724:4:0;;28449:1287;-1:-1:-1;;;;;28449:1287:0:o;31403:547::-;31501:7;;31537;;31454;;;;;31555:283;31579:9;:16;31575:20;;31555:283;;;31645:7;31621;:21;31629:9;31639:1;31629:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31629:12:0;31621:21;;;;;;;;;;;;;:31;;:66;;;31680:7;31656;:21;31664:9;31674:1;31664:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31664:12:0;31656:21;;;;;;;;;;;;;:31;31621:66;31617:97;;;31697:7;;31706;;31689:25;;;;;;;31403:547;;:::o;31617:97::-;31749:7;:21;31757:9;31767:1;31757:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31757:12:0;31749:21;;;;;;;;;;;;;31739:31;;:7;:31;:::i;:::-;31729:41;;31805:7;:21;31813:9;31823:1;31813:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31813:12:0;31805:21;;;;;;;;;;;;;31795:31;;:7;:31;:::i;:::-;31785:41;-1:-1:-1;31597:3:0;;;;:::i;:::-;;;;31555:283;;;;31872:7;;31862;;:17;;;;:::i;:::-;31852:7;:27;31848:58;;;31889:7;;31898;;31881:25;;;;;;31403:547;;:::o;31848:58::-;31925:7;;31934;;-1:-1:-1;31403:547:0;-1:-1:-1;31403:547:0:o;27787:439::-;27870:16;;;;;;;27869:17;27861:65;;;;-1:-1:-1;;;27861:65:0;;21129:2:1;27861:65:0;;;21111:21:1;21168:2;21148:18;;;21141:30;21207:34;21187:18;;;21180:62;-1:-1:-1;;;21258:18:1;;;21251:33;21301:19;;27861:65:0;20927:399:1;27861:65:0;27942:20;27953:4;27959:2;27942:10;:20::i;:::-;27941:21;:37;;;;-1:-1:-1;27972:6:0;;-1:-1:-1;;;;;27966:12:0;;;27972:6;;27966:12;27941:37;27937:282;;;-1:-1:-1;;;;;27995:23:0;;;;;;:17;:23;;;;;;;:30;;-1:-1:-1;;27995:30:0;28021:4;27995:30;;;;;;28040:16;:23;;-1:-1:-1;;28040:23:0;27995:30;28040:23;;;28093:15;28078:12;:30;28125:21;:28;;-1:-1:-1;;;;28125:28:0;-1:-1:-1;;;28125:28:0;;;28173:34;;;;;;1630:14:1;;1623:22;1605:41;;1593:2;1578:18;;1465:187;28173:34:0;;;;;;;;27787:439;;:::o;29744:1482::-;29839:27;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29839:27:0;29879:34;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29879:34:0;29924:19;29946:10;:8;:10::i;:::-;29924:32;-1:-1:-1;29986:21:0;29924:32;29986:7;:21;:::i;:::-;29969:14;;;:38;30020:1071;;;;-1:-1:-1;;;;;30051:11:0;;;;;;:7;:11;;;;;;;;30047:561;;;30097:15;;30083:11;:29;30147:17;;30131:13;:33;30199:17;;30183:13;:33;30047:561;;;-1:-1:-1;;;;;30242:13:0;;;;;;:7;:13;;;;;;;;30238:370;;;30290:14;;30276:11;:28;30339:16;;30323:13;:32;30390:16;;30374:13;:32;30238:370;;;30461:19;;30447:11;:33;30515:21;;30499:13;:37;30571:21;;30555:13;:37;30238:370;30664:16;;30649:11;;30639:21;;:7;:21;:::i;:::-;30638:42;;;;:::i;:::-;30624:11;;;:56;30761:16;;30743:13;;30727;;:29;;30743:13;30727:29;:::i;:::-;30716:41;;:7;:41;:::i;:::-;30715:62;;;;:::i;:::-;30695:17;;;:82;;;30828:11;;;;:31;;30695:82;30828:31;:::i;:::-;30817:43;;:7;:43;:::i;:::-;30792:68;;30891:11;;;;:25;;30905:11;;30891:25;:::i;:::-;30877:11;;;:39;30020:1071;;;30963:1;30949:11;;;:15;;;30979:17;;;:21;;;31015:32;;;31064:11;;;:15;30020:1071;31181:11;31161:6;:17;;;:31;;;;:::i;:::-;31146:6;:11;;;:47;;;;:::i;:::-;31128:6;:14;;;:66;;;;:::i;:::-;31103:22;;;:91;-1:-1:-1;31103:22:0;29744:1482;-1:-1:-1;;;;;29744:1482:0:o;32233:423::-;32313:19;32336:10;:8;:10::i;:::-;32313:33;-1:-1:-1;32357:18:0;32378:24;32313:33;32378:10;:24;:::i;:::-;32454:4;32438:22;;;;:7;:22;;;;;;32357:45;;-1:-1:-1;32438:35:0;;32357:45;;32438:35;:::i;:::-;32429:4;32413:22;;;;:7;:22;;;;;;;;:60;;;;32487:11;:26;;;;;;32484:104;;;32569:4;32553:22;;;;:7;:22;;;;;;:35;;32578:10;;32553:35;:::i;:::-;32544:4;32528:22;;;;:7;:22;;;;;:60;32484:104;32604:43;;1803:25:1;;;32629:4:0;;-1:-1:-1;;;;;32604:43:0;;;;;1791:2:1;1776:18;32604:43:0;;;;;;;32302:354;;32233:423;;:::o;31962:143::-;32052:4;32042:7;;:14;;;;:::i;:::-;32032:7;:24;32080:10;;:17;;32093:4;;32080:17;:::i;:::-;32067:10;:30;-1:-1:-1;;31962:143:0:o;222:548: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;;;506:3;691:1;686:2;677:6;666:9;662:22;658:31;651:42;761:2;754;750:7;745:2;737:6;733:15;729:29;718:9;714:45;710:54;702:62;;;;222:548;;;;:::o;1009:131::-;-1:-1:-1;;;;;1084:31:1;;1074:42;;1064:70;;1130:1;1127;1120:12;1145:315;1213:6;1221;1274:2;1262:9;1253:7;1249:23;1245:32;1242:52;;;1290:1;1287;1280:12;1242:52;1329:9;1316:23;1348:31;1373:5;1348:31;:::i;:::-;1398:5;1450:2;1435:18;;;;1422:32;;-1:-1:-1;;;1145:315:1:o;1839:160::-;1904:20;;1960:13;;1953:21;1943:32;;1933:60;;1989:1;1986;1979:12;1933:60;1839:160;;;:::o;2004:315::-;2069:6;2077;2130:2;2118:9;2109:7;2105:23;2101:32;2098:52;;;2146:1;2143;2136:12;2098:52;2185:9;2172:23;2204:31;2229:5;2204:31;:::i;:::-;2254:5;-1:-1:-1;2278:35:1;2309:2;2294:18;;2278:35;:::i;:::-;2268:45;;2004:315;;;;;:::o;2324:456::-;2401:6;2409;2417;2470:2;2458:9;2449:7;2445:23;2441:32;2438:52;;;2486:1;2483;2476:12;2438:52;2525:9;2512:23;2544:31;2569:5;2544:31;:::i;:::-;2594:5;-1:-1:-1;2651:2:1;2636:18;;2623:32;2664:33;2623:32;2664:33;:::i;:::-;2324:456;;2716:7;;-1:-1:-1;;;2770:2:1;2755:18;;;;2742:32;;2324:456::o;2785:248::-;2853:6;2861;2914:2;2902:9;2893:7;2889:23;2885:32;2882:52;;;2930:1;2927;2920:12;2882:52;-1:-1:-1;;2953:23:1;;;3023:2;3008:18;;;2995:32;;-1:-1:-1;2785:248:1:o;3038:247::-;3097:6;3150:2;3138:9;3129:7;3125:23;3121:32;3118:52;;;3166:1;3163;3156:12;3118:52;3205:9;3192:23;3224:31;3249:5;3224:31;:::i;3290:180::-;3349:6;3402:2;3390:9;3381:7;3377:23;3373:32;3370:52;;;3418:1;3415;3408:12;3370:52;-1:-1:-1;3441:23:1;;3290:180;-1:-1:-1;3290:180:1:o;3475:316::-;3552:6;3560;3568;3621:2;3609:9;3600:7;3596:23;3592:32;3589:52;;;3637:1;3634;3627:12;3589:52;-1:-1:-1;;3660:23:1;;;3730:2;3715:18;;3702:32;;-1:-1:-1;3781:2:1;3766:18;;;3753:32;;3475:316;-1:-1:-1;3475:316:1:o;3985:404::-;4069:6;4077;4130:2;4118:9;4109:7;4105:23;4101:32;4098:52;;;4146:1;4143;4136:12;4098:52;4185:9;4172:23;4204:31;4229:5;4204:31;:::i;:::-;4254:5;-1:-1:-1;4311:2:1;4296:18;;4283:32;4324:33;4283:32;4324:33;:::i;:::-;4376:7;4366:17;;;3985:404;;;;;:::o;4654:180::-;4710:6;4763:2;4751:9;4742:7;4738:23;4734:32;4731:52;;;4779:1;4776;4769:12;4731:52;4802:26;4818:9;4802:26;:::i;5232:385::-;5318:6;5326;5334;5342;5395:3;5383:9;5374:7;5370:23;5366:33;5363:53;;;5412:1;5409;5402:12;5363:53;-1:-1:-1;;5435:23:1;;;5505:2;5490:18;;5477:32;;-1:-1:-1;5556:2:1;5541:18;;5528:32;;5607:2;5592:18;5579:32;;-1:-1:-1;5232:385:1;-1:-1:-1;5232:385:1:o;5622:380::-;5701:1;5697:12;;;;5744;;;5765:61;;5819:4;5811:6;5807:17;5797:27;;5765:61;5872:2;5864:6;5861:14;5841:18;5838:38;5835:161;;5918:10;5913:3;5909:20;5906:1;5899:31;5953:4;5950:1;5943:15;5981:4;5978:1;5971:15;5835:161;;5622:380;;;:::o;6007:356::-;6209:2;6191:21;;;6228:18;;;6221:30;6287:34;6282:2;6267:18;;6260:62;6354:2;6339:18;;6007:356::o;7082:127::-;7143:10;7138:3;7134:20;7131:1;7124:31;7174:4;7171:1;7164:15;7198:4;7195:1;7188:15;7214:127;7275:10;7270:3;7266:20;7263:1;7256:31;7306:4;7303:1;7296:15;7330:4;7327:1;7320:15;7346:128;7413:9;;;7434:11;;;7431:37;;;7448:18;;:::i;7479:127::-;7540:10;7535:3;7531:20;7528:1;7521:31;7571:4;7568:1;7561:15;7595:4;7592:1;7585:15;7611:135;7650:3;7671:17;;;7668:43;;7691:18;;:::i;:::-;-1:-1:-1;7738:1:1;7727:13;;7611:135::o;7751:168::-;7824:9;;;7855;;7872:15;;;7866:22;;7852:37;7842:71;;7893:18;;:::i;7924:127::-;7985:10;7980:3;7976:20;7973:1;7966:31;8016:4;8013:1;8006:15;8040:4;8037:1;8030:15;8056:120;8096:1;8122;8112:35;;8127:18;;:::i;:::-;-1:-1:-1;8161:9:1;;8056:120::o;9011:125::-;9076:9;;;9097:10;;;9094:36;;;9110:18;;:::i;9141:127::-;9202:10;9197:3;9193:20;9190:1;9183:31;9233:4;9230:1;9223:15;9257:4;9254:1;9247:15;9399:545;9501:2;9496:3;9493:11;9490:448;;;9537:1;9562:5;9558:2;9551:17;9607:4;9603:2;9593:19;9677:2;9665:10;9661:19;9658:1;9654:27;9648:4;9644:38;9713:4;9701:10;9698:20;9695:47;;;-1:-1:-1;9736:4:1;9695:47;9791:2;9786:3;9782:12;9779:1;9775:20;9769:4;9765:31;9755:41;;9846:82;9864:2;9857:5;9854:13;9846:82;;;9909:17;;;9890:1;9879:13;9846:82;;;9850:3;;;9399:545;;;:::o;10120:1352::-;10246:3;10240:10;10273:18;10265:6;10262:30;10259:56;;;10295:18;;:::i;:::-;10324:97;10414:6;10374:38;10406:4;10400:11;10374:38;:::i;:::-;10368:4;10324:97;:::i;:::-;10476:4;;10540:2;10529:14;;10557:1;10552:663;;;;11259:1;11276:6;11273:89;;;-1:-1:-1;11328:19:1;;;11322:26;11273:89;-1:-1:-1;;10077:1:1;10073:11;;;10069:24;10065:29;10055:40;10101:1;10097:11;;;10052:57;11375:81;;10522:944;;10552:663;9346:1;9339:14;;;9383:4;9370:18;;-1:-1:-1;;10588:20:1;;;10706:236;10720:7;10717:1;10714:14;10706:236;;;10809:19;;;10803:26;10788:42;;10901:27;;;;10869:1;10857:14;;;;10736:19;;10706:236;;;10710:3;10970:6;10961:7;10958:19;10955:201;;;11031:19;;;11025:26;-1:-1:-1;;11114:1:1;11110:14;;;11126:3;11106:24;11102:37;11098:42;11083:58;11068:74;;10955:201;-1:-1:-1;;;;;11202:1:1;11186:14;;;11182:22;11169:36;;-1:-1:-1;10120:1352:1:o;11477:422::-;11566:1;11609:5;11566:1;11623:270;11644:7;11634:8;11631:21;11623:270;;;11703:4;11699:1;11695:6;11691:17;11685:4;11682:27;11679:53;;;11712:18;;:::i;:::-;11762:7;11752:8;11748:22;11745:55;;;11782:16;;;;11745:55;11861:22;;;;11821:15;;;;11623:270;;;11627:3;11477:422;;;;;:::o;11904:806::-;11953:5;11983:8;11973:80;;-1:-1:-1;12024:1:1;12038:5;;11973:80;12072:4;12062:76;;-1:-1:-1;12109:1:1;12123:5;;12062:76;12154:4;12172:1;12167:59;;;;12240:1;12235:130;;;;12147:218;;12167:59;12197:1;12188:10;;12211:5;;;12235:130;12272:3;12262:8;12259:17;12256:43;;;12279:18;;:::i;:::-;-1:-1:-1;;12335:1:1;12321:16;;12350:5;;12147:218;;12449:2;12439:8;12436:16;12430:3;12424:4;12421:13;12417:36;12411:2;12401:8;12398:16;12393:2;12387:4;12384:12;12380:35;12377:77;12374:159;;;-1:-1:-1;12486:19:1;;;12518:5;;12374:159;12565:34;12590:8;12584:4;12565:34;:::i;:::-;12635:6;12631:1;12627:6;12623:19;12614:7;12611:32;12608:58;;;12646:18;;:::i;:::-;12684:20;;11904:806;-1:-1:-1;;;11904:806:1:o;12715:131::-;12775:5;12804:36;12831:8;12825:4;12804:36;:::i;12851:112::-;12883:1;12909;12899:35;;12914:18;;:::i;:::-;-1:-1:-1;12948:9:1;;12851:112::o;12968:251::-;13038:6;13091:2;13079:9;13070:7;13066:23;13062:32;13059:52;;;13107:1;13104;13097:12;13059:52;13139:9;13133:16;13158:31;13183:5;13158:31;:::i;13533:607::-;-1:-1:-1;;;;;13892:15:1;;;13874:34;;13939:2;13924:18;;13917:34;;;;13982:2;13967:18;;13960:34;;;;14025:2;14010:18;;14003:34;;;;14074:15;;;14068:3;14053:19;;14046:44;13854:3;14106:19;;14099:35;;;;13823:3;13808:19;;13533:607::o;14145:306::-;14233:6;14241;14249;14302:2;14290:9;14281:7;14277:23;14273:32;14270:52;;;14318:1;14315;14308:12;14270:52;14347:9;14341:16;14331:26;;14397:2;14386:9;14382:18;14376:25;14366:35;;14441:2;14430:9;14426:18;14420:25;14410:35;;14145:306;;;;;:::o;15233:425::-;15435:2;15417:21;;;15474:2;15454:18;;;15447:30;15513:34;15508:2;15493:18;;15486:62;15584:31;15579:2;15564:18;;15557:59;15648:3;15633:19;;15233:425::o;19212:980::-;19474:4;19522:3;19511:9;19507:19;19553:6;19542:9;19535:25;19579:2;19617:6;19612:2;19601:9;19597:18;19590:34;19660:3;19655:2;19644:9;19640:18;19633:31;19684:6;19719;19713:13;19750:6;19742;19735:22;19788:3;19777:9;19773:19;19766:26;;19827:2;19819:6;19815:15;19801:29;;19848:1;19858:195;19872:6;19869:1;19866:13;19858:195;;;19937:13;;-1:-1:-1;;;;;19933:39:1;19921:52;;20028:15;;;;19993:12;;;;19969:1;19887:9;19858:195;;;-1:-1:-1;;;;;;;20109:32:1;;;;20104:2;20089:18;;20082:60;-1:-1:-1;;;20173:3:1;20158:19;20151:35;20070:3;19212:980;-1:-1:-1;;;19212:980:1:o

Swarm Source

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