ETH Price: $3,441.12 (-1.23%)
Gas: 5.32 Gwei

Token

Shibtoro (Shibtoro)
 

Overview

Max Total Supply

69,000,000,000,000,000,000,000 Shibtoro

Holders

4,020 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
6,216,490,008,588,849,304.174016389 Shibtoro

Value
$0.00
0x25ca77f10df53e2eab268fef9044fa3834e0c0f7
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Shibtoro is a charity and NFT based project including a Shibtoro Swap.

Burn Events

Burn Address : 0x000000000000000000000000000000000000dead
Total Burned : 33,844,411,707,517,700,000,000 Shibtoro as of Mar 24, 2022

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Shibtoro

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-16
*/

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

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

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

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

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

  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view returns (address);

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

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

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

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

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

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

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

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

interface IRouter01 {
    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);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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 swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

interface AntiSnipe {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ab) external;
    function removeSniper(address account) external;
    function removeBlacklisted(address account) external;
    function isBlacklisted(address account) external view returns (bool);
    function transfer(address sender) external;
    function setBlacklistEnabled(address account, bool enabled) external;
    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external;
    function getInitializers() external view returns (string memory, string memory, uint256, uint8);
}

contract Shibtoro is IERC20 {
    // 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 _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply;
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    uint256 private _tTotal;
    uint256 private MAX = ~uint256(0);
    uint256 private _rTotal;

    struct Fees {
        uint16 reflect;
        uint16 burn;
        uint16 liquidity;
        uint16 marketing;
        uint16 development;
        uint16 totalSwap;
    }

    struct Ratios {
        uint16 liquidity;
        uint16 marketing;
        uint16 development;
        uint16 total;
    }

    Fees public _buyTaxes = Fees({
        reflect: 300,
        burn: 100,
        liquidity: 200,
        marketing: 500,
        development: 400,
        totalSwap: 1100
        });

    Fees public _sellTaxes = Fees({
        reflect: 300,
        burn: 100,
        liquidity: 200,
        marketing: 500,
        development: 1400,
        totalSwap: 2100
        });

    Fees public _transferTaxes = Fees({
        reflect: 300,
        burn: 100,
        liquidity: 200,
        marketing: 500,
        development: 400,
        totalSwap: 1100
        });

    Ratios public _ratios = Ratios({
        liquidity: 2,
        marketing: 5,
        development: 4,
        total: 11
        });

    uint256 constant public maxBuyTaxes = 2000;
    uint256 constant public maxSellTaxes = 2000;
    uint256 constant public maxTransferTaxes = 2000;
    uint256 constant masterTaxDivisor = 10000;

    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
        address payable marketing;
        address payable development;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x66D038703449654dBE7aC4c1D7010284352e92cd),
        development: payable(0x605a6F43B932A4428101B86026f8Fc5617a048ee)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public contractSwapTimer = 0 seconds;
    uint256 private lastSwap;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    AntiSnipe antiSnipe;

    uint256 public maxETHBuy = 2 * 10**17;
    uint256 public maxETHSell = 1 * 10**18;
    bool public maxETHTradesEnabled = true;

    bool contractInitialized = false;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        // Set the owner.
        _owner = msg.sender;

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3);
        } else if (block.chainid == 1 || block.chainid == 4) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        } else if (block.chainid == 43114) {
            dexRouter = IRouter02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } else {
            revert();
        }

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

        _isExcludedFromFees[_owner] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[_owner] = true;
    }

    function intializeContract(address[] memory accounts, uint256[] memory percents, uint256[] memory divisors, address _antiSnipe) external onlyOwner {
        require(!contractInitialized, "1");
        require(accounts.length == percents.length && accounts.length == divisors.length, "2");
        antiSnipe = AntiSnipe(_antiSnipe);
        try antiSnipe.transfer(address(this)) {} catch {}
        try antiSnipe.getInitializers() returns (string memory initName, string memory initSymbol, uint256 initStartingSupply, uint8 initDecimals) {
            _name = initName;
            _symbol = initSymbol;
            startingSupply = initStartingSupply;
            _decimals = initDecimals;
            _tTotal = startingSupply * 10**_decimals;
            _rTotal = (MAX - (MAX % _tTotal));
        } catch {
            revert("3");
        }
        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 10) / 10000;
        contractInitialized = true;     
        _rOwned[_owner] = _rTotal;
        emit Transfer(address(0), _owner, _tTotal);

        _approve(address(this), address(dexRouter), type(uint256).max);
        for(uint256 i = 0; i < accounts.length; i++){
            uint256 amount = (_tTotal * percents[i]) / divisors[i];
            _transfer(_owner, accounts[i], amount);
        }

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

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            _owner,
            block.timestamp
        );

        enableTrading();
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    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);
        
        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) { if (_tTotal == 0) { revert(); } return _tTotal; }
    function decimals() external view override returns (uint8) { return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view override returns (string memory) { return _name; }
    function getOwner() external view override 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(msg.sender, recipient, amount);
        return true;
    }

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

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

    function approveContractContingency() public onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

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

        return _transfer(sender, recipient, amount);
    }

    function setNewRouter(address newRouter) public onlyOwner {
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
            antiSnipe.setLpPair(pair, false);
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 3 days, "3 Day cooldown.!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            antiSnipe.setLpPair(pair, true);
        }
    }

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

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

    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 setInitializer(address initializer) external onlyOwner {
        require(!_hasLiqBeenAdded);
        require(initializer != address(this), "Can't be self.");
        antiSnipe = AntiSnipe(initializer);
    }

    function setBlacklistEnabled(address account, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabled(account, enabled);
    }

    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabledMultiple(accounts, enabled);
    }

    function removeBlacklisted(address account) external onlyOwner {
        antiSnipe.removeBlacklisted(account);
    }

    function isBlacklisted(address account) public view returns (bool) {
        return antiSnipe.isBlacklisted(account);
    }

    function removeSniper(address account) external onlyOwner {
        antiSnipe.removeSniper(account);
    }

    function setProtectionSettings(bool _antiSnipe, bool _antiBlock) external onlyOwner {
        antiSnipe.setProtections(_antiSnipe, _antiBlock);
    }

    function setTaxesBuy(uint16 reflect, uint16 burn, uint16 liquidity, uint16 marketing, uint16 development) external onlyOwner {
        uint16 check = reflect + liquidity + marketing + burn + development;
        require(check <= maxBuyTaxes);
        _buyTaxes.reflect = reflect;
        _buyTaxes.burn = burn;
        _buyTaxes.liquidity = liquidity;
        _buyTaxes.marketing = marketing;
        _buyTaxes.development = development;
        _buyTaxes.totalSwap = check - (reflect + burn);
    }

    function setTaxesSell(uint16 reflect, uint16 burn, uint16 liquidity, uint16 marketing, uint16 development) external onlyOwner {
        uint16 check = reflect + liquidity + marketing + burn + development;
        require(check <= maxBuyTaxes);
        _sellTaxes.reflect = reflect;
        _sellTaxes.burn = burn;
        _sellTaxes.liquidity = liquidity;
        _sellTaxes.marketing = marketing;
        _sellTaxes.development = development;
        _sellTaxes.totalSwap = check - (reflect + burn);
    }

    function setTaxesTransfer(uint16 reflect, uint16 burn, uint16 liquidity, uint16 marketing, uint16 development) external onlyOwner {
        uint16 check = reflect + liquidity + marketing + burn + development;
        require(check <= maxBuyTaxes);
        _transferTaxes.reflect = reflect;
        _transferTaxes.burn = burn;
        _transferTaxes.liquidity = liquidity;
        _transferTaxes.marketing = marketing;
        _transferTaxes.development = development;
        _transferTaxes.totalSwap = check - (reflect + burn);
    }

    function setRatios(uint16 liquidity, uint16 marketing, uint16 development) external onlyOwner {
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.development = development;
        _ratios.total = liquidity + marketing + development;
    }

    function setEthLimits(uint256 buyVal, uint256 buyMult, uint256 sellVal, uint256 sellMult) external onlyOwner {
        maxETHBuy = buyVal * 10**buyMult;
        maxETHSell = sellVal * 10**sellMult;
        require(maxETHBuy >= 5 * 10**17 && maxETHSell >= 1 * 10**18);
    }

    function setEthLimitsEnabled(bool maxEthTrades) external onlyOwner {
        maxETHTradesEnabled = maxEthTrades;
    }

    function setExcludedFromLimits(address account, bool enabled) external onlyOwner {
        _isExcludedFromLimits[account] = enabled;
    }

    function isExcludedFromLimits(address account) public view returns (bool) {
        return _isExcludedFromLimits[account];
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

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

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

    function setWallets(address payable marketing, address payable development) external onlyOwner {
        _taxWallets.marketing = payable(marketing);
        _taxWallets.development = payable(development);
    }

    function setContractSwapEnabled(bool enabled) external onlyOwner {
        contractSwapEnabled = enabled;
        emit ContractSwapEnabledUpdated(enabled);
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != _owner
            && to != _owner
            && tx.origin != _owner
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

    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");
        bool buy = false;
        bool sell = false;
        bool otherTransfer = false;
        if (lpPairs[from]) {
            buy = true;
        } else if (lpPairs[to]) {
            sell = true;
        } else {
            otherTransfer = true;
        }
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if (maxETHTradesEnabled) {
                address[] memory path = new address[](2);
                path[0] = address(this);
                path[1] = dexRouter.WETH();
                uint256 ethBalance = dexRouter.getAmountsOut(amount, path)[1];
                if(buy) {
                    require(ethBalance <= maxETHBuy);
                } else if (sell) {
                    require(ethBalance <= maxETHSell);
                }
            }
        }

        bool takeFee = true;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        if (sell) {
            if (!inSwap
                && contractSwapEnabled
            ) {
                if (lastSwap + contractSwapTimer < block.timestamp) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                        contractSwap(contractTokenBalance);
                        lastSwap = block.timestamp;
                    }
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee, buy, sell, otherTransfer);
    }

    function contractSwap(uint256 contractTokenBalance) private lockTheSwap {
        Ratios memory ratios = _ratios;
        if (ratios.total == 0) {
            return;
        }

        if(_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }

        uint256 toLiquify = ((contractTokenBalance * ratios.liquidity) / ratios.total) / 2;
        uint256 swapAmt = contractTokenBalance - toLiquify;
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

        uint256 amtBalance = address(this).balance;
        uint256 liquidityBalance = (amtBalance * toLiquify) / swapAmt;

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

        amtBalance -= liquidityBalance;
        ratios.total -= ratios.liquidity;
        uint256 developmentBalance = (amtBalance * ratios.development) / ratios.total;
        uint256 marketingBalance = amtBalance - developmentBalance;
        if (ratios.development > 0) {
            _taxWallets.development.transfer(marketingBalance);
        }
        if (ratios.marketing > 0) {
            _taxWallets.marketing.transfer(marketingBalance);
        }
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            if(address(antiSnipe) == address(0)){
                antiSnipe = AntiSnipe(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        tradingEnabled = true;
    }

    function sweepContingency() external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot call after liquidity.");
        payable(_owner).transfer(address(this).balance);
    }

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

    function multiSendPercents(address[] memory accounts, uint256[] memory percents, uint256[] memory divisors) external {
        require(accounts.length == percents.length && percents.length == divisors.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= (_tTotal * percents[i]) / divisors[i]);
            _transfer(msg.sender, accounts[i], (_tTotal * percents[i]) / divisors[i]);
        }
    }

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tSwap;
        uint256 tBurn;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;

        uint256 currentRate;
    }

    function _finalizeTransfer(address from, address to, uint256 tAmount, bool takeFee, bool buy, bool sell, bool otherTransfer) private returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                revert("Only owner can transfer at this time.");
            }
        }

        ExtraValues memory values = _getValues(from, to, tAmount, takeFee, buy, sell, otherTransfer);

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

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

        if (values.rFee > 0 || values.tFee > 0) {
            _rTotal -= values.rFee;
        }

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

    function _getValues(address from, address to, uint256 tAmount, bool takeFee, bool buy, bool sell, bool otherTransfer) private returns (ExtraValues memory) {
        ExtraValues memory values;
        values.currentRate = _getRate();

        values.rAmount = tAmount * values.currentRate;

        if (_hasLimits(from, to)) {
            bool checked;
            try antiSnipe.checkUser(from, to, tAmount) returns (bool check) {
                checked = check;
            } catch {
                revert();
            }

            if(!checked) {
                revert();
            }
        }

        if(takeFee) {
            uint256 currentReflect;
            uint256 currentSwap;
            uint256 currentBurn;
            uint256 divisor = masterTaxDivisor;

            if (sell) {
                currentReflect = _sellTaxes.reflect;
                currentBurn = _sellTaxes.burn;
                currentSwap = _sellTaxes.totalSwap;
            } else if (buy) {
                currentReflect = _buyTaxes.reflect;
                currentBurn = _buyTaxes.burn;
                currentSwap = _buyTaxes.totalSwap;
            } else {
                currentReflect = _transferTaxes.reflect;
                currentBurn = _transferTaxes.burn;
                currentSwap = _transferTaxes.totalSwap;
            }

            values.tFee = (tAmount * currentReflect) / divisor;
            values.tSwap = (tAmount * currentSwap) / divisor;
            values.tBurn = (tAmount * currentBurn) / divisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tSwap + values.tBurn);

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

            values.rFee = 0;
        }

        if (values.tSwap > 0) {
            _rOwned[address(this)] += values.tSwap * values.currentRate;
            if(_isExcluded[address(this)]) {
                _tOwned[address(this)] += values.tSwap;
            }
            emit Transfer(from, address(this), values.tSwap);
        }

        if (values.tBurn > 0) {
            _rOwned[DEAD] += values.tBurn * values.currentRate;
            if(_isExcluded[DEAD]) {
                _tOwned[DEAD] += values.tBurn;
            }
            emit Transfer(from, DEAD, values.tBurn);
        }

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

    function _getRate() internal view returns(uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if(_isExcluded[lpPair]) {
            if (_rOwned[lpPair] > rSupply || _tOwned[lpPair] > tSupply) return _rTotal / _tTotal;
            rSupply -= _rOwned[lpPair];
            tSupply -= _tOwned[lpPair];
        }
        if(_excluded.length > 0) {
            for (uint8 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;
    }
}

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":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"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":[],"name":"approveContractContingency","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":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"percents","type":"uint256[]"},{"internalType":"uint256[]","name":"divisors","type":"uint256[]"},{"internalType":"address","name":"_antiSnipe","type":"address"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxETHBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxETHSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxETHTradesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"percents","type":"uint256[]"},{"internalType":"uint256[]","name":"divisors","type":"uint256[]"}],"name":"multiSendPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabledMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyVal","type":"uint256"},{"internalType":"uint256","name":"buyMult","type":"uint256"},{"internalType":"uint256","name":"sellVal","type":"uint256"},{"internalType":"uint256","name":"sellMult","type":"uint256"}],"name":"setEthLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"maxEthTrades","type":"bool"}],"name":"setEthLimitsEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","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":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"}],"name":"setRatios","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"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"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"}]

6000600481815560001960105561012c6080819052606460a081905260c860c08190526101f460e081905261019061010081905261044c610120819052601280546001600160601b03199081166b044c019001f400c80064012c9081179092556101408890526101608790526101808690526101a08590526105786101c0526108346101e0526013805482166b0834057801f400c80064012c17905561020097909752610220959095526102409390935261026091909152610280526102a0526014805490921617905560026102c05260056102e05261030052600b61032052601580546001600160401b031916660b0004000500021790556103806040527366d038703449654dbe7ac4c1d7010284352e92cd61034081905273605a6f43b932a4428101b86026f8fc5617a048ee610360819052601880546001600160a01b031990811690931790556019805483169091179055601a805461ff0019169055601b829055601f805461ffff199081169091556702c68af0bb140000602055670de0b6b3a764000060215560228054909116600117905581543391161790554660381415620001d457601680546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000288565b46606114156200020a57601680546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c317905562000288565b46600114806200021a5750466004145b156200024c57601680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000288565b4661a86a14156200028357601680546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d417905562000288565b600080fd5b600054601654620002a9916001600160a01b03908116911660001962000347565b601654620002c59030906001600160a01b031660001962000347565b600080546001600160a01b0390811682526006602090815260408084208054600160ff19918216811790925530865282862080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22805482168317905585549094168552600a9092529092208054909116909117905562000448565b6001600160a01b038316620003995760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620003e75760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640162000390565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b615a6980620004586000396000f3fe6080604052600436106103bc5760003560e01c8063684c8199116101f2578063b3d514fb1161010d578063e4fcfd18116100a0578063eec2744e1161006f578063eec2744e14610c42578063f94aa1b414610c62578063fdb78c0e14610ca9578063fe575a8714610cc857600080fd5b8063e4fcfd1814610bd7578063e8a0e3f914610bed578063eafb5a3c14610c0d578063ee5d9c2d14610c2d57600080fd5b8063cab5ebea116100dc578063cab5ebea14610ae6578063cf84770614610b06578063d3f6a15714610b71578063dd62ed3e14610b9157600080fd5b8063b3d514fb14610598578063c2fa418f14610a0c578063c6831cd814610a69578063c6a276c214610ac657600080fd5b80638a63bd9b11610185578063aa22b17211610154578063aa22b172146109ac578063adc59ae0146109cc578063ae19a815146109ec578063b1b08f711461059857600080fd5b80638a63bd9b1461094d5780638a8c523c1461096257806395d89b4114610977578063a9059cbb1461098c57600080fd5b806380c581d1116101c157806380c581d1146108b657806385146ea8146108d657806388f82020146108f6578063893d20e81461092f57600080fd5b8063684c8199146107c757806370a08231146107e7578063715018a6146108075780637b45d4311461081c57600080fd5b80632d838119116102e25780634a5a4a221161027557806350a8e0161161024457806350a8e0161461072f578063590ffdce1461074e5780635c24b0741461076e5780635cce86cd1461078e57600080fd5b80634a5a4a22146106a65780634ada218b146106bc5780634fb2e45d146106d65780634fbee193146106f657600080fd5b806334cd8260116102b157806334cd82601461062657806336fddb041461064657806343b5beec14610666578063452ed4f11461068657600080fd5b80632d838119146105ae5780632e8fa821146105ce578063313ce567146105e457806333251a0b1461060657600080fd5b806313e461921161035a5780632610eaca116103295780632610eaca1461053e578063275a03a21461055e57806327ab9bf5146105785780632b28fc7a1461059857600080fd5b806313e46192146104d357806318160ddd146104f357806318a610d71461050857806323b872dd1461051e57600080fd5b806305bbedb61161039657806305bbedb61461044157806306fdde03146104615780630758d92414610483578063095ea7b3146104a357600080fd5b806303fd2a45146103c85780630445b667146103fb578063044df7261461041f57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b50610411601d5481565b6040519081526020016103f2565b34801561042b57600080fd5b5061043f61043a366004614e8f565b610ce8565b005b34801561044d57600080fd5b5061043f61045c366004614fd5565b610dc5565b34801561046d57600080fd5b50610476610e63565b6040516103f29190615048565b34801561048f57600080fd5b506016546103de906001600160a01b031681565b3480156104af57600080fd5b506104c36104be36600461507b565b610ef5565b60405190151581526020016103f2565b3480156104df57600080fd5b5061043f6104ee3660046150a7565b610f0c565b3480156104ff57600080fd5b506104116113cf565b34801561051457600080fd5b5061041160215481565b34801561052a57600080fd5b506104c36105393660046150c5565b6113e8565b34801561054a57600080fd5b5061043f610559366004615161565b611460565b34801561056a57600080fd5b506022546104c39060ff1681565b34801561058457600080fd5b5061043f6105933660046151dc565b611565565b3480156105a457600080fd5b506104116107d081565b3480156105ba57600080fd5b506104116105c9366004615241565b6116ee565b3480156105da57600080fd5b50610411601e5481565b3480156105f057600080fd5b50600e5460405160ff90911681526020016103f2565b34801561061257600080fd5b5061043f61062136600461525a565b611785565b34801561063257600080fd5b5061043f610641366004615277565b611856565b34801561065257600080fd5b5061043f6106613660046150a7565b6118e6565b34801561067257600080fd5b5061043f6106813660046152b2565b61195f565b34801561069257600080fd5b506017546103de906001600160a01b031681565b3480156106b257600080fd5b5061041160205481565b3480156106c857600080fd5b50601f546104c39060ff1681565b3480156106e257600080fd5b5061043f6106f136600461525a565b612072565b34801561070257600080fd5b506104c361071136600461525a565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561073b57600080fd5b50601f546104c390610100900460ff1681565b34801561075a57600080fd5b5061043f6107693660046150a7565b612271565b34801561077a57600080fd5b5061043f61078936600461525a565b6122ea565b34801561079a57600080fd5b506104c36107a936600461525a565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107d357600080fd5b5061043f6107e236600461534d565b6123e6565b3480156107f357600080fd5b5061041161080236600461525a565b612447565b34801561081357600080fd5b5061043f6124a6565b34801561082857600080fd5b506012546108799061ffff808216916201000081048216916401000000008204811691660100000000000081048216916801000000000000000082048116916a010000000000000000000090041686565b6040805161ffff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c0016103f2565b3480156108c257600080fd5b5061043f6108d13660046150a7565b612556565b3480156108e257600080fd5b5061043f6108f13660046151dc565b612712565b34801561090257600080fd5b506104c361091136600461525a565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561093b57600080fd5b506000546001600160a01b03166103de565b34801561095957600080fd5b506104c361289b565b34801561096e57600080fd5b5061043f61290a565b34801561098357600080fd5b50610476612afa565b34801561099857600080fd5b506104c36109a736600461507b565b612b09565b3480156109b857600080fd5b5061043f6109c736600461536a565b612b20565b3480156109d857600080fd5b5061043f6109e73660046153ad565b612c01565b3480156109f857600080fd5b5061043f610a073660046151dc565b612cac565b348015610a1857600080fd5b506014546108799061ffff808216916201000081048216916401000000008204811691660100000000000081048216916801000000000000000082048116916a010000000000000000000090041686565b348015610a7557600080fd5b506013546108799061ffff808216916201000081048216916401000000008204811691660100000000000081048216916801000000000000000082048116916a010000000000000000000090041686565b348015610ad257600080fd5b5061043f610ae136600461525a565b612e35565b348015610af257600080fd5b5061043f610b0136600461534d565b612ed5565b348015610b1257600080fd5b50601554610b439061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103f2565b348015610b7d57600080fd5b5061043f610b8c3660046153df565b612f77565b348015610b9d57600080fd5b50610411610bac3660046153df565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610be357600080fd5b50610411601b5481565b348015610bf957600080fd5b5061043f610c0836600461540d565b613000565b348015610c1957600080fd5b5061043f610c2836600461525a565b613157565b348015610c3957600080fd5b5061043f613506565b348015610c4e57600080fd5b5061043f610c5d3660046150a7565b6135e9565b348015610c6e57600080fd5b50601854601954610c89916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016103f2565b348015610cb557600080fd5b50601a546104c390610100900460ff1681565b348015610cd457600080fd5b506104c3610ce336600461525a565b613691565b6000546001600160a01b03163314610d3b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601f546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610da957600080fd5b505af1158015610dbd573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610e135760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b601f546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610d8f90859085906004016154d9565b6060600c8054610e72906154fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9e906154fd565b8015610eeb5780601f10610ec057610100808354040283529160200191610eeb565b820191906000526020600020905b815481529060010190602001808311610ece57829003601f168201915b5050505050905090565b6000610f0233848461371f565b5060015b92915050565b6000546001600160a01b03163314610f5a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b80156110af576001600160a01b03821660009081526008602052604090205460ff1615610fc95760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d32565b6001600160a01b03821660009081526001602052604090205415611023576001600160a01b038216600090815260016020526040902054611009906116ee565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600860205260409020805460ff19166001179055601754909116146110ab57600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b806110ab576001600160a01b03821660009081526008602052604090205460ff1661111c5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d32565b6017546001600160a01b03838116911614156111975761113a61382c565b6001600160a01b03831660009081526002602052604090205461115d9190615580565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff191690555050565b60095460011415611247576111aa61382c565b6001600160a01b0383166000908152600260205260409020546111cd9190615580565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff1916905560098054806112145761121461559f565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b6009548110156113ca57826001600160a01b031660098281548110611271576112716155ce565b6000918252602090912001546001600160a01b031614156113b8576009805461129c906001906155fd565b815481106112ac576112ac6155ce565b600091825260209091200154600980546001600160a01b0390921691839081106112d8576112d86155ce565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0394851617905591851681526002909152604081205561132461382c565b6001600160a01b0384166000908152600260205260409020546113479190615580565b6001600160a01b0384166000908152600160209081526040808320939093556008905220805460ff1916905560098054806113845761138461559f565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b806113c281615614565b91505061124a565b505050565b6000600f54600014156113e157600080fd5b50600f5490565b6001600160a01b03831660009081526005602090815260408083203384529091528120546000191461144d576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906114479084906155fd565b90915550505b611458848484613a9f565b949350505050565b80518251146114b15760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d32565b60005b82518160ff1610156113ca57818160ff16815181106114d5576114d56155ce565b60200260200101516114e633612447565b10156114f157600080fd5b61155233848360ff168151811061150a5761150a6155ce565b6020908102919091010151600e546115269060ff16600a615713565b858560ff168151811061153b5761153b6155ce565b602002602001015161154d9190615580565b613a9f565b508061155d81615722565b9150506114b4565b6000546001600160a01b031633146115b35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b60008185846115c2878a615742565b6115cc9190615742565b6115d69190615742565b6115e09190615742565b90506107d08161ffff1611156115f557600080fd5b6013805461ffff88811663ffffffff19909216919091176201000088831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008783160267ffff000000000000191617660100000000000086831602177fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff16680100000000000000009185169190910217905561169a8587615742565b6116a49082615768565b6013805461ffff929092166a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff909216919091179055505050505050565b60006011548211156117685760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610d32565b600061177261382c565b905061177e81846157ba565b9392505050565b6000546001600160a01b031633146117d35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b601f546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b906024015b600060405180830381600087803b15801561183b57600080fd5b505af115801561184f573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146118a45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b8385600f546118b39190615580565b6118bd91906157ba565b601d55600f5482906118d0908590615580565b6118da91906157ba565b601e55601b5550505050565b6000546001600160a01b031633146119345760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119ad5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b602254610100900460ff1615611a055760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610d32565b82518451148015611a17575081518451145b611a635760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610d32565b601f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b03848116820292909217928390556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b158015611af557600080fd5b505af1925050508015611b06575060015b50601f60029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015611b7b57506040513d6000823e601f3d908101601f19168201604052611b789190810190615832565b60015b611bc75760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610d32565b8351611bda90600c906020870190614de8565b508251611bee90600d906020860190614de8565b50600b829055600e805460ff191660ff8316908117909155611c1190600a615713565b600b54611c1e9190615580565b600f819055601054611c3091906158ad565b601054611c3d91906155fd565b60115550505050601660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbb91906158c1565b6001600160a01b031663c9c65396601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4091906158c1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611da4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc891906158c1565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600360205260409020805460ff19166001179055600f5461271090611e1f906005615580565b611e2991906157ba565b601d55600f5461271090611e3e90600a615580565b611e4891906157ba565b601e556022805461ff001916610100179055601154600080546001600160a01b03908116825260016020526040808320939093558154600f5493519116927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91611eb491815260200190565b60405180910390a3601654611ed69030906001600160a01b031660001961371f565b60005b8451811015611f7d576000838281518110611ef657611ef66155ce565b6020026020010151858381518110611f1057611f106155ce565b6020026020010151600f54611f259190615580565b611f2f91906157ba565b9050611f6860008054906101000a90046001600160a01b0316878481518110611f5a57611f5a6155ce565b602002602001015183613a9f565b50508080611f7590615614565b915050611ed9565b50600054611f98906001600160a01b03163061154d82612447565b506016546001600160a01b031663f305d7194730611fb581612447565b6000805460405160e087901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03948516600482015260248101939093526044830182905260648301919091529190911660848201524260a482015260c40160606040518083038185885af115801561203c573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061206191906158de565b50505061206c61290a565b50505050565b6000546001600160a01b031633146120c05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b6001600160a01b03811661213c5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d32565b6001600160a01b03811661dead14156121bd5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d32565b600080546121d6916001600160a01b0390911690612271565b6121e1816001612271565b600080546121f7906001600160a01b0316612447565b111561221957600054612217906001600160a01b03168261154d82612447565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146122bf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146123385760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b601f54610100900460ff161561234d57600080fd5b6001600160a01b0381163014156123a65760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610d32565b601f80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000546001600160a01b031633146124345760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b6022805460ff1916911515919091179055565b6001600160a01b03811660009081526008602052604081205460ff161561248457506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610f06906116ee565b6000546001600160a01b031633146124f45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b6000805461250d916001600160a01b0390911690612271565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146125a45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b80612630576001600160a01b03828116600081815260036020526040808220805460ff19169055601f5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610da957600080fd5b60045415612697576203f4806004544261264a91906155fd565b116126975760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610d32565b6001600160a01b0382811660008181526003602052604090819020805460ff19166001908117909155426004908155601f5492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610d8f565b6000546001600160a01b031633146127605760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b600081858461276f878a615742565b6127799190615742565b6127839190615742565b61278d9190615742565b90506107d08161ffff1611156127a257600080fd5b6012805461ffff88811663ffffffff19909216919091176201000088831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008783160267ffff000000000000191617660100000000000086831602177fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff1668010000000000000000918516919091021790556128478587615742565b6128519082615768565b6012805461ffff929092166a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff909216919091179055505050505050565b600080546001600160a01b031633146128ea5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b6016546129049030906001600160a01b031660001961371f565b50600190565b6000546001600160a01b031633146129585760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b601f5460ff16156129ab5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d32565b601f54610100900460ff16612a025760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d32565b601f546201000090046001600160a01b0316612a4857601f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601f54601754600e546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b158015612ad957600080fd5b505af1925050508015612aea575060015b50601f805460ff19166001179055565b6060600d8054610e72906154fd565b6000612b16338484613a9f565b5060019392505050565b6000546001600160a01b03163314612b6e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b6015805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff868316620100000263ffffffff1990941692881692909217929092171617905580612bcb8385615742565b612bd59190615742565b6015805461ffff9290921666010000000000000267ffff00000000000019909216919091179055505050565b6000546001600160a01b03163314612c4f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b612c5a83600a61590c565b612c649085615580565b602055612c7281600a61590c565b612c7c9083615580565b6021556020546706f05b59d3b2000011801590612ca35750670de0b6b3a764000060215410155b61206c57600080fd5b6000546001600160a01b03163314612cfa5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b6000818584612d09878a615742565b612d139190615742565b612d1d9190615742565b612d279190615742565b90506107d08161ffff161115612d3c57600080fd5b6014805461ffff88811663ffffffff19909216919091176201000088831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008783160267ffff000000000000191617660100000000000086831602177fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff166801000000000000000091851691909102179055612de18587615742565b612deb9082615768565b6014805461ffff929092166a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff909216919091179055505050505050565b6000546001600160a01b03163314612e835760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b601f546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401611821565b6000546001600160a01b03163314612f235760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b601a80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790612f6c90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314612fc55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b601880546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff199182161790915560198054929093169116179055565b81518351148015613012575080518251145b61305e5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d32565b60005b83518160ff16101561206c57818160ff1681518110613082576130826155ce565b6020026020010151838260ff168151811061309f5761309f6155ce565b6020026020010151600f546130b49190615580565b6130be91906157ba565b6130c733612447565b10156130d257600080fd5b61314433858360ff16815181106130eb576130eb6155ce565b6020026020010151848460ff1681518110613108576131086155ce565b6020026020010151868560ff1681518110613125576131256155ce565b6020026020010151600f5461313a9190615580565b61154d91906157ba565b508061314f81615722565b915050613061565b6000546001600160a01b031633146131a55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320e91906158c1565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561325b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327f91906158c1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156132e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330691906158c1565b90506001600160a01b0381166134a457816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613354573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061337891906158c1565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e991906158c1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561344e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061347291906158c1565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556134cd565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556113ca90309060001961371f565b6000546001600160a01b031633146135545760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b601f54610100900460ff16156135ac5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d32565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156135e6573d6000803e3d6000fd5b50565b6000546001600160a01b031633146136375760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b601f546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610d8f565b601f546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa1580156136fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f069190615918565b6001600160a01b0383166137755760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d32565b6001600160a01b0382166137cb5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d32565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601154600f546017546001600160a01b03166000908152600860205260408120549092919060ff1615613906576017546001600160a01b031660009081526001602052604090205482108061389a57506017546001600160a01b031660009081526002602052604090205481105b156138b657600f546011546138af91906157ba565b9250505090565b6017546001600160a01b03166000908152600160205260409020546138db90836155fd565b6017546001600160a01b031660009081526002602052604090205490925061390390826155fd565b90505b60095415613a6e5760005b60095460ff82161015613a6c57826001600060098460ff1681548110613939576139396155ce565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806139a75750816002600060098460ff1681548110613980576139806155ce565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156139c457600f546011546139bc91906157ba565b935050505090565b6001600060098360ff16815481106139de576139de6155ce565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613a0d90846155fd565b92506002600060098360ff1681548110613a2957613a296155ce565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613a5890836155fd565b915080613a6481615722565b915050613911565b505b600f54601154613a7e91906157ba565b821015613a9557600f546011546138af91906157ba565b6138af81836157ba565b60006001600160a01b038416613b1d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d32565b6001600160a01b038316613b995760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d32565b60008211613c0f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610d32565b6001600160a01b0384166000908152600360205260408120548190819060ff1615613c3d5760019250613c6b565b6001600160a01b03861660009081526003602052604090205460ff1615613c675760019150613c6b565b5060015b613c758787613f7b565b15613ea557601f5460ff16613ccc5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d32565b60225460ff1615613ea5576040805160028082526060820183526000926020830190803683370190505090503081600081518110613d0c57613d0c6155ce565b6001600160a01b03928316602091820292909201810191909152601654604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613da291906158c1565b81600181518110613db557613db56155ce565b6001600160a01b0392831660209182029290920101526016546040517fd06ca61f000000000000000000000000000000000000000000000000000000008152600092919091169063d06ca61f90613e12908a908690600401615935565b600060405180830381865afa158015613e2f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613e57919081019061594e565b600181518110613e6957613e696155ce565b602002602001015190508415613e8d57602054811115613e8857600080fd5b613ea2565b8315613ea257602154811115613ea257600080fd5b50505b6001600160a01b03871660009081526006602052604090205460019060ff1680613ee757506001600160a01b03871660009081526006602052604090205460ff165b15613ef0575060005b8215613f6057601a5460ff16158015613f105750601a54610100900460ff165b15613f605742601b54601c54613f2691906159df565b1015613f60576000613f3730612447565b9050601d548110613f5e57601e548110613f505750601e545b613f598161404f565b42601c555b505b613f6f888888848888886144d6565b98975050505050505050565b600080546001600160a01b03848116911614801590613fa857506000546001600160a01b03838116911614155b8015613fbf57506000546001600160a01b03163214155b8015613fe457506001600160a01b0382166000908152600a602052604090205460ff16155b801561400957506001600160a01b0383166000908152600a602052604090205460ff16155b801561402057506001600160a01b03821661dead14155b801561403457506001600160a01b03821615155b801561177e57506001600160a01b0383163014159392505050565b601a805460ff191660011790556040805160808101825260155461ffff808216835262010000820481166020840152640100000000820481169383019390935266010000000000009004909116606082018190526140ad57506144c9565b3060009081526005602090815260408083206016546001600160a01b0316845290915290205460001914614106573060009081526005602090815260408083206016546001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff16856141279190615580565b61413191906157ba565b61413b91906157ba565b9050600061414982856155fd565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110614183576141836155ce565b6001600160a01b03928316602091820292909201810191909152601654604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa1580156141f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061421991906158c1565b8160018151811061422c5761422c6155ce565b6001600160a01b0392831660209182029290920101526016546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac9479061428b9085906000908690309042906004016159f7565b600060405180830381600087803b1580156142a557600080fd5b505af11580156142b9573d6000803e3d6000fd5b50479250600091508490506142ce8684615580565b6142d891906157ba565b905084156143c9576016546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015614367573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061438c91906158de565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6143d381836155fd565b91508560000151866060018181516143eb9190615768565b61ffff908116909152606088015160408901516000935090821691614411911685615580565b61441b91906157ba565b9050600061442982856155fd565b604089015190915061ffff1615614476576019546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015614474573d6000803e3d6000fd5b505b602088015161ffff16156144c0576018546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156144be573d6000803e3d6000fd5b505b50505050505050505b50601a805460ff19169055565b601f54600090610100900460ff16614582576144f2888861475e565b601f54610100900460ff1615801561450f575061450f8888613f7b565b156145825760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610d32565b6000614593898989898989896148bc565b60a08101516001600160a01b038b166000908152600160205260409020549192506145bd916155fd565b6001600160a01b03808b16600090815260016020526040808220939093556080840151918b16815291909120546145f491906159df565b6001600160a01b03808a16600090815260016020908152604080832094909455918c1681526008909152205460ff1615614666576001600160a01b03891660009081526002602052604090205461464c9088906155fd565b6001600160a01b038a166000908152600260205260409020555b6001600160a01b03881660009081526008602052604090205460ff16156146c65780516001600160a01b0389166000908152600260205260409020546146ac91906159df565b6001600160a01b0389166000908152600260205260409020555b60008160c0015111806146dd575060008160200151115b156146fe578060c00151601160008282546146f891906155fd565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161474791815260200190565b60405180910390a350600198975050505050505050565b601f54610100900460ff16156147dc5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610d32565b6147e68282613f7b565b15801561480057506017546001600160a01b038281169116145b156110ab576001600160a01b038083166000908152600a60205260409020805460ff19166001179055601f805461ff00191661010017908190556201000090041661487557601f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601a805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b61490460405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61494c60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61495461382c565b60e082018190526149659088615580565b60a08201526149748989613f7b565b15614a2757601f546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038b811660048301528a81166024830152604482018a9052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614a10575060408051601f3d908101601f19168201909252614a0d91810190615918565b60015b614a1957600080fd5b905080614a2557600080fd5b505b8515614b5d57600080806127108715614a665760135461ffff80821695506a010000000000000000000082048116945062010000909104169150614ac0565b8815614a985760125461ffff80821695506a010000000000000000000082048116945062010000909104169150614ac0565b60145461ffff80821695506a0100000000000000000000820481169450620100009091041691505b80614acb858d615580565b614ad591906157ba565b602086015280614ae5848d615580565b614aef91906157ba565b604086015280614aff838d615580565b614b0991906157ba565b6060860181905260408601516020870151614b2491906159df565b614b2e91906159df565b614b38908c6155fd565b855260e08501516020860151614b4e9190615580565b60c086015250614b7d92505050565b600060208201819052604082018190526060820181905287825260c08201525b604081015115614c54578060e001518160400151614b9b9190615580565b3060009081526001602052604081208054909190614bba9084906159df565b90915550503060009081526008602052604090205460ff1615614c02576040808201513060009081526002602052918220805491929091614bfc9084906159df565b90915550505b306001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360400151604051614c4b91815260200190565b60405180910390a35b606081015115614d87578060e001518160600151614c729190615580565b61dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d8054909190614cb09084906159df565b909155505061dead60005260086020527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd093342995460ff1615614d3357606081015161dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc8054909190614d2d9084906159df565b90915550505b61dead6001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360600151604051614d7e91815260200190565b60405180910390a35b8060e001518160600151614d9b9190615580565b8160e001518260400151614daf9190615580565b8260c00151614dbe91906159df565b614dc891906159df565b8160a00151614dd791906155fd565b608082015298975050505050505050565b828054614df4906154fd565b90600052602060002090601f016020900481019282614e165760008555614e5c565b82601f10614e2f57805160ff1916838001178555614e5c565b82800160010185558215614e5c579182015b82811115614e5c578251825591602001919060010190614e41565b50614e68929150614e6c565b5090565b5b80821115614e685760008155600101614e6d565b80151581146135e657600080fd5b60008060408385031215614ea257600080fd5b8235614ead81614e81565b91506020830135614ebd81614e81565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614f2057614f20614ec8565b604052919050565b600067ffffffffffffffff821115614f4257614f42614ec8565b5060051b60200190565b6001600160a01b03811681146135e657600080fd5b600082601f830112614f7257600080fd5b81356020614f87614f8283614f28565b614ef7565b82815260059290921b84018101918181019086841115614fa657600080fd5b8286015b84811015614fca578035614fbd81614f4c565b8352918301918301614faa565b509695505050505050565b60008060408385031215614fe857600080fd5b823567ffffffffffffffff811115614fff57600080fd5b61500b85828601614f61565b9250506020830135614ebd81614e81565b60005b8381101561503757818101518382015260200161501f565b8381111561206c5750506000910152565b602081526000825180602084015261506781604085016020870161501c565b601f01601f19169190910160400192915050565b6000806040838503121561508e57600080fd5b823561509981614f4c565b946020939093013593505050565b600080604083850312156150ba57600080fd5b8235614ead81614f4c565b6000806000606084860312156150da57600080fd5b83356150e581614f4c565b925060208401356150f581614f4c565b929592945050506040919091013590565b600082601f83011261511757600080fd5b81356020615127614f8283614f28565b82815260059290921b8401810191818101908684111561514657600080fd5b8286015b84811015614fca578035835291830191830161514a565b6000806040838503121561517457600080fd5b823567ffffffffffffffff8082111561518c57600080fd5b61519886838701614f61565b935060208501359150808211156151ae57600080fd5b506151bb85828601615106565b9150509250929050565b803561ffff811681146151d757600080fd5b919050565b600080600080600060a086880312156151f457600080fd5b6151fd866151c5565b945061520b602087016151c5565b9350615219604087016151c5565b9250615227606087016151c5565b9150615235608087016151c5565b90509295509295909350565b60006020828403121561525357600080fd5b5035919050565b60006020828403121561526c57600080fd5b813561177e81614f4c565b600080600080600060a0868803121561528f57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600080608085870312156152c857600080fd5b843567ffffffffffffffff808211156152e057600080fd5b6152ec88838901614f61565b9550602087013591508082111561530257600080fd5b61530e88838901615106565b9450604087013591508082111561532457600080fd5b5061533187828801615106565b925050606085013561534281614f4c565b939692955090935050565b60006020828403121561535f57600080fd5b813561177e81614e81565b60008060006060848603121561537f57600080fd5b615388846151c5565b9250615396602085016151c5565b91506153a4604085016151c5565b90509250925092565b600080600080608085870312156153c357600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156153f257600080fd5b82356153fd81614f4c565b91506020830135614ebd81614f4c565b60008060006060848603121561542257600080fd5b833567ffffffffffffffff8082111561543a57600080fd5b61544687838801614f61565b9450602086013591508082111561545c57600080fd5b61546887838801615106565b9350604086013591508082111561547e57600080fd5b5061548b86828701615106565b9150509250925092565b600081518084526020808501945080840160005b838110156154ce5781516001600160a01b0316875295820195908201906001016154a9565b509495945050505050565b6040815260006154ec6040830185615495565b905082151560208301529392505050565b600181811c9082168061551157607f821691505b6020821081141561554b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600081600019048311821515161561559a5761559a615551565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008282101561560f5761560f615551565b500390565b600060001982141561562857615628615551565b5060010190565b600181815b8085111561566a57816000190482111561565057615650615551565b8085161561565d57918102915b93841c9390800290615634565b509250929050565b60008261568157506001610f06565b8161568e57506000610f06565b81600181146156a457600281146156ae576156ca565b6001915050610f06565b60ff8411156156bf576156bf615551565b50506001821b610f06565b5060208310610133831016604e8410600b84101617156156ed575081810a610f06565b6156f7838361562f565b806000190482111561570b5761570b615551565b029392505050565b600061177e60ff841683615672565b600060ff821660ff81141561573957615739615551565b60010192915050565b600061ffff80831681851680830382111561575f5761575f615551565b01949350505050565b600061ffff8381169083168181101561578357615783615551565b039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826157c9576157c961578b565b500490565b600082601f8301126157df57600080fd5b815167ffffffffffffffff8111156157f9576157f9614ec8565b61580c6020601f19601f84011601614ef7565b81815284602083860101111561582157600080fd5b61145882602083016020870161501c565b6000806000806080858703121561584857600080fd5b845167ffffffffffffffff8082111561586057600080fd5b61586c888389016157ce565b9550602087015191508082111561588257600080fd5b5061588f878288016157ce565b93505060408501519150606085015160ff8116811461534257600080fd5b6000826158bc576158bc61578b565b500690565b6000602082840312156158d357600080fd5b815161177e81614f4c565b6000806000606084860312156158f357600080fd5b8351925060208401519150604084015190509250925092565b600061177e8383615672565b60006020828403121561592a57600080fd5b815161177e81614e81565b8281526040602082015260006114586040830184615495565b6000602080838503121561596157600080fd5b825167ffffffffffffffff81111561597857600080fd5b8301601f8101851361598957600080fd5b8051615997614f8282614f28565b81815260059190911b820183019083810190878311156159b657600080fd5b928401925b828410156159d4578351825292840192908401906159bb565b979650505050505050565b600082198211156159f2576159f2615551565b500190565b85815284602082015260a060408201526000615a1660a0830186615495565b6001600160a01b039490941660608301525060800152939250505056fea264697066735822122069efd6752ebb53877157e07b27afa576aa21b19379dd3db91bac2f113e07a2a364736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c8063684c8199116101f2578063b3d514fb1161010d578063e4fcfd18116100a0578063eec2744e1161006f578063eec2744e14610c42578063f94aa1b414610c62578063fdb78c0e14610ca9578063fe575a8714610cc857600080fd5b8063e4fcfd1814610bd7578063e8a0e3f914610bed578063eafb5a3c14610c0d578063ee5d9c2d14610c2d57600080fd5b8063cab5ebea116100dc578063cab5ebea14610ae6578063cf84770614610b06578063d3f6a15714610b71578063dd62ed3e14610b9157600080fd5b8063b3d514fb14610598578063c2fa418f14610a0c578063c6831cd814610a69578063c6a276c214610ac657600080fd5b80638a63bd9b11610185578063aa22b17211610154578063aa22b172146109ac578063adc59ae0146109cc578063ae19a815146109ec578063b1b08f711461059857600080fd5b80638a63bd9b1461094d5780638a8c523c1461096257806395d89b4114610977578063a9059cbb1461098c57600080fd5b806380c581d1116101c157806380c581d1146108b657806385146ea8146108d657806388f82020146108f6578063893d20e81461092f57600080fd5b8063684c8199146107c757806370a08231146107e7578063715018a6146108075780637b45d4311461081c57600080fd5b80632d838119116102e25780634a5a4a221161027557806350a8e0161161024457806350a8e0161461072f578063590ffdce1461074e5780635c24b0741461076e5780635cce86cd1461078e57600080fd5b80634a5a4a22146106a65780634ada218b146106bc5780634fb2e45d146106d65780634fbee193146106f657600080fd5b806334cd8260116102b157806334cd82601461062657806336fddb041461064657806343b5beec14610666578063452ed4f11461068657600080fd5b80632d838119146105ae5780632e8fa821146105ce578063313ce567146105e457806333251a0b1461060657600080fd5b806313e461921161035a5780632610eaca116103295780632610eaca1461053e578063275a03a21461055e57806327ab9bf5146105785780632b28fc7a1461059857600080fd5b806313e46192146104d357806318160ddd146104f357806318a610d71461050857806323b872dd1461051e57600080fd5b806305bbedb61161039657806305bbedb61461044157806306fdde03146104615780630758d92414610483578063095ea7b3146104a357600080fd5b806303fd2a45146103c85780630445b667146103fb578063044df7261461041f57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b50610411601d5481565b6040519081526020016103f2565b34801561042b57600080fd5b5061043f61043a366004614e8f565b610ce8565b005b34801561044d57600080fd5b5061043f61045c366004614fd5565b610dc5565b34801561046d57600080fd5b50610476610e63565b6040516103f29190615048565b34801561048f57600080fd5b506016546103de906001600160a01b031681565b3480156104af57600080fd5b506104c36104be36600461507b565b610ef5565b60405190151581526020016103f2565b3480156104df57600080fd5b5061043f6104ee3660046150a7565b610f0c565b3480156104ff57600080fd5b506104116113cf565b34801561051457600080fd5b5061041160215481565b34801561052a57600080fd5b506104c36105393660046150c5565b6113e8565b34801561054a57600080fd5b5061043f610559366004615161565b611460565b34801561056a57600080fd5b506022546104c39060ff1681565b34801561058457600080fd5b5061043f6105933660046151dc565b611565565b3480156105a457600080fd5b506104116107d081565b3480156105ba57600080fd5b506104116105c9366004615241565b6116ee565b3480156105da57600080fd5b50610411601e5481565b3480156105f057600080fd5b50600e5460405160ff90911681526020016103f2565b34801561061257600080fd5b5061043f61062136600461525a565b611785565b34801561063257600080fd5b5061043f610641366004615277565b611856565b34801561065257600080fd5b5061043f6106613660046150a7565b6118e6565b34801561067257600080fd5b5061043f6106813660046152b2565b61195f565b34801561069257600080fd5b506017546103de906001600160a01b031681565b3480156106b257600080fd5b5061041160205481565b3480156106c857600080fd5b50601f546104c39060ff1681565b3480156106e257600080fd5b5061043f6106f136600461525a565b612072565b34801561070257600080fd5b506104c361071136600461525a565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561073b57600080fd5b50601f546104c390610100900460ff1681565b34801561075a57600080fd5b5061043f6107693660046150a7565b612271565b34801561077a57600080fd5b5061043f61078936600461525a565b6122ea565b34801561079a57600080fd5b506104c36107a936600461525a565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107d357600080fd5b5061043f6107e236600461534d565b6123e6565b3480156107f357600080fd5b5061041161080236600461525a565b612447565b34801561081357600080fd5b5061043f6124a6565b34801561082857600080fd5b506012546108799061ffff808216916201000081048216916401000000008204811691660100000000000081048216916801000000000000000082048116916a010000000000000000000090041686565b6040805161ffff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c0016103f2565b3480156108c257600080fd5b5061043f6108d13660046150a7565b612556565b3480156108e257600080fd5b5061043f6108f13660046151dc565b612712565b34801561090257600080fd5b506104c361091136600461525a565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561093b57600080fd5b506000546001600160a01b03166103de565b34801561095957600080fd5b506104c361289b565b34801561096e57600080fd5b5061043f61290a565b34801561098357600080fd5b50610476612afa565b34801561099857600080fd5b506104c36109a736600461507b565b612b09565b3480156109b857600080fd5b5061043f6109c736600461536a565b612b20565b3480156109d857600080fd5b5061043f6109e73660046153ad565b612c01565b3480156109f857600080fd5b5061043f610a073660046151dc565b612cac565b348015610a1857600080fd5b506014546108799061ffff808216916201000081048216916401000000008204811691660100000000000081048216916801000000000000000082048116916a010000000000000000000090041686565b348015610a7557600080fd5b506013546108799061ffff808216916201000081048216916401000000008204811691660100000000000081048216916801000000000000000082048116916a010000000000000000000090041686565b348015610ad257600080fd5b5061043f610ae136600461525a565b612e35565b348015610af257600080fd5b5061043f610b0136600461534d565b612ed5565b348015610b1257600080fd5b50601554610b439061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103f2565b348015610b7d57600080fd5b5061043f610b8c3660046153df565b612f77565b348015610b9d57600080fd5b50610411610bac3660046153df565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610be357600080fd5b50610411601b5481565b348015610bf957600080fd5b5061043f610c0836600461540d565b613000565b348015610c1957600080fd5b5061043f610c2836600461525a565b613157565b348015610c3957600080fd5b5061043f613506565b348015610c4e57600080fd5b5061043f610c5d3660046150a7565b6135e9565b348015610c6e57600080fd5b50601854601954610c89916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016103f2565b348015610cb557600080fd5b50601a546104c390610100900460ff1681565b348015610cd457600080fd5b506104c3610ce336600461525a565b613691565b6000546001600160a01b03163314610d3b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601f546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610da957600080fd5b505af1158015610dbd573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610e135760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b601f546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610d8f90859085906004016154d9565b6060600c8054610e72906154fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9e906154fd565b8015610eeb5780601f10610ec057610100808354040283529160200191610eeb565b820191906000526020600020905b815481529060010190602001808311610ece57829003601f168201915b5050505050905090565b6000610f0233848461371f565b5060015b92915050565b6000546001600160a01b03163314610f5a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b80156110af576001600160a01b03821660009081526008602052604090205460ff1615610fc95760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d32565b6001600160a01b03821660009081526001602052604090205415611023576001600160a01b038216600090815260016020526040902054611009906116ee565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600860205260409020805460ff19166001179055601754909116146110ab57600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b806110ab576001600160a01b03821660009081526008602052604090205460ff1661111c5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d32565b6017546001600160a01b03838116911614156111975761113a61382c565b6001600160a01b03831660009081526002602052604090205461115d9190615580565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff191690555050565b60095460011415611247576111aa61382c565b6001600160a01b0383166000908152600260205260409020546111cd9190615580565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff1916905560098054806112145761121461559f565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b6009548110156113ca57826001600160a01b031660098281548110611271576112716155ce565b6000918252602090912001546001600160a01b031614156113b8576009805461129c906001906155fd565b815481106112ac576112ac6155ce565b600091825260209091200154600980546001600160a01b0390921691839081106112d8576112d86155ce565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0394851617905591851681526002909152604081205561132461382c565b6001600160a01b0384166000908152600260205260409020546113479190615580565b6001600160a01b0384166000908152600160209081526040808320939093556008905220805460ff1916905560098054806113845761138461559f565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b806113c281615614565b91505061124a565b505050565b6000600f54600014156113e157600080fd5b50600f5490565b6001600160a01b03831660009081526005602090815260408083203384529091528120546000191461144d576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906114479084906155fd565b90915550505b611458848484613a9f565b949350505050565b80518251146114b15760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d32565b60005b82518160ff1610156113ca57818160ff16815181106114d5576114d56155ce565b60200260200101516114e633612447565b10156114f157600080fd5b61155233848360ff168151811061150a5761150a6155ce565b6020908102919091010151600e546115269060ff16600a615713565b858560ff168151811061153b5761153b6155ce565b602002602001015161154d9190615580565b613a9f565b508061155d81615722565b9150506114b4565b6000546001600160a01b031633146115b35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b60008185846115c2878a615742565b6115cc9190615742565b6115d69190615742565b6115e09190615742565b90506107d08161ffff1611156115f557600080fd5b6013805461ffff88811663ffffffff19909216919091176201000088831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008783160267ffff000000000000191617660100000000000086831602177fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff16680100000000000000009185169190910217905561169a8587615742565b6116a49082615768565b6013805461ffff929092166a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff909216919091179055505050505050565b60006011548211156117685760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610d32565b600061177261382c565b905061177e81846157ba565b9392505050565b6000546001600160a01b031633146117d35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b601f546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b906024015b600060405180830381600087803b15801561183b57600080fd5b505af115801561184f573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146118a45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b8385600f546118b39190615580565b6118bd91906157ba565b601d55600f5482906118d0908590615580565b6118da91906157ba565b601e55601b5550505050565b6000546001600160a01b031633146119345760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119ad5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b602254610100900460ff1615611a055760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610d32565b82518451148015611a17575081518451145b611a635760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610d32565b601f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b03848116820292909217928390556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b158015611af557600080fd5b505af1925050508015611b06575060015b50601f60029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015611b7b57506040513d6000823e601f3d908101601f19168201604052611b789190810190615832565b60015b611bc75760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610d32565b8351611bda90600c906020870190614de8565b508251611bee90600d906020860190614de8565b50600b829055600e805460ff191660ff8316908117909155611c1190600a615713565b600b54611c1e9190615580565b600f819055601054611c3091906158ad565b601054611c3d91906155fd565b60115550505050601660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbb91906158c1565b6001600160a01b031663c9c65396601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4091906158c1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611da4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc891906158c1565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600360205260409020805460ff19166001179055600f5461271090611e1f906005615580565b611e2991906157ba565b601d55600f5461271090611e3e90600a615580565b611e4891906157ba565b601e556022805461ff001916610100179055601154600080546001600160a01b03908116825260016020526040808320939093558154600f5493519116927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91611eb491815260200190565b60405180910390a3601654611ed69030906001600160a01b031660001961371f565b60005b8451811015611f7d576000838281518110611ef657611ef66155ce565b6020026020010151858381518110611f1057611f106155ce565b6020026020010151600f54611f259190615580565b611f2f91906157ba565b9050611f6860008054906101000a90046001600160a01b0316878481518110611f5a57611f5a6155ce565b602002602001015183613a9f565b50508080611f7590615614565b915050611ed9565b50600054611f98906001600160a01b03163061154d82612447565b506016546001600160a01b031663f305d7194730611fb581612447565b6000805460405160e087901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03948516600482015260248101939093526044830182905260648301919091529190911660848201524260a482015260c40160606040518083038185885af115801561203c573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061206191906158de565b50505061206c61290a565b50505050565b6000546001600160a01b031633146120c05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b6001600160a01b03811661213c5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d32565b6001600160a01b03811661dead14156121bd5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d32565b600080546121d6916001600160a01b0390911690612271565b6121e1816001612271565b600080546121f7906001600160a01b0316612447565b111561221957600054612217906001600160a01b03168261154d82612447565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146122bf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146123385760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b601f54610100900460ff161561234d57600080fd5b6001600160a01b0381163014156123a65760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610d32565b601f80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000546001600160a01b031633146124345760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b6022805460ff1916911515919091179055565b6001600160a01b03811660009081526008602052604081205460ff161561248457506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610f06906116ee565b6000546001600160a01b031633146124f45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b6000805461250d916001600160a01b0390911690612271565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146125a45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b80612630576001600160a01b03828116600081815260036020526040808220805460ff19169055601f5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610da957600080fd5b60045415612697576203f4806004544261264a91906155fd565b116126975760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610d32565b6001600160a01b0382811660008181526003602052604090819020805460ff19166001908117909155426004908155601f5492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610d8f565b6000546001600160a01b031633146127605760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b600081858461276f878a615742565b6127799190615742565b6127839190615742565b61278d9190615742565b90506107d08161ffff1611156127a257600080fd5b6012805461ffff88811663ffffffff19909216919091176201000088831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008783160267ffff000000000000191617660100000000000086831602177fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff1668010000000000000000918516919091021790556128478587615742565b6128519082615768565b6012805461ffff929092166a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff909216919091179055505050505050565b600080546001600160a01b031633146128ea5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b6016546129049030906001600160a01b031660001961371f565b50600190565b6000546001600160a01b031633146129585760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b601f5460ff16156129ab5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d32565b601f54610100900460ff16612a025760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d32565b601f546201000090046001600160a01b0316612a4857601f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601f54601754600e546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b158015612ad957600080fd5b505af1925050508015612aea575060015b50601f805460ff19166001179055565b6060600d8054610e72906154fd565b6000612b16338484613a9f565b5060019392505050565b6000546001600160a01b03163314612b6e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b6015805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff868316620100000263ffffffff1990941692881692909217929092171617905580612bcb8385615742565b612bd59190615742565b6015805461ffff9290921666010000000000000267ffff00000000000019909216919091179055505050565b6000546001600160a01b03163314612c4f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b612c5a83600a61590c565b612c649085615580565b602055612c7281600a61590c565b612c7c9083615580565b6021556020546706f05b59d3b2000011801590612ca35750670de0b6b3a764000060215410155b61206c57600080fd5b6000546001600160a01b03163314612cfa5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b6000818584612d09878a615742565b612d139190615742565b612d1d9190615742565b612d279190615742565b90506107d08161ffff161115612d3c57600080fd5b6014805461ffff88811663ffffffff19909216919091176201000088831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008783160267ffff000000000000191617660100000000000086831602177fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff166801000000000000000091851691909102179055612de18587615742565b612deb9082615768565b6014805461ffff929092166a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff909216919091179055505050505050565b6000546001600160a01b03163314612e835760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b601f546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401611821565b6000546001600160a01b03163314612f235760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b601a80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790612f6c90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314612fc55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b601880546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff199182161790915560198054929093169116179055565b81518351148015613012575080518251145b61305e5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d32565b60005b83518160ff16101561206c57818160ff1681518110613082576130826155ce565b6020026020010151838260ff168151811061309f5761309f6155ce565b6020026020010151600f546130b49190615580565b6130be91906157ba565b6130c733612447565b10156130d257600080fd5b61314433858360ff16815181106130eb576130eb6155ce565b6020026020010151848460ff1681518110613108576131086155ce565b6020026020010151868560ff1681518110613125576131256155ce565b6020026020010151600f5461313a9190615580565b61154d91906157ba565b508061314f81615722565b915050613061565b6000546001600160a01b031633146131a55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320e91906158c1565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561325b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327f91906158c1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156132e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330691906158c1565b90506001600160a01b0381166134a457816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613354573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061337891906158c1565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e991906158c1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561344e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061347291906158c1565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556134cd565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556113ca90309060001961371f565b6000546001600160a01b031633146135545760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b601f54610100900460ff16156135ac5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d32565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156135e6573d6000803e3d6000fd5b50565b6000546001600160a01b031633146136375760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d32565b601f546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610d8f565b601f546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa1580156136fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f069190615918565b6001600160a01b0383166137755760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d32565b6001600160a01b0382166137cb5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d32565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601154600f546017546001600160a01b03166000908152600860205260408120549092919060ff1615613906576017546001600160a01b031660009081526001602052604090205482108061389a57506017546001600160a01b031660009081526002602052604090205481105b156138b657600f546011546138af91906157ba565b9250505090565b6017546001600160a01b03166000908152600160205260409020546138db90836155fd565b6017546001600160a01b031660009081526002602052604090205490925061390390826155fd565b90505b60095415613a6e5760005b60095460ff82161015613a6c57826001600060098460ff1681548110613939576139396155ce565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806139a75750816002600060098460ff1681548110613980576139806155ce565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156139c457600f546011546139bc91906157ba565b935050505090565b6001600060098360ff16815481106139de576139de6155ce565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613a0d90846155fd565b92506002600060098360ff1681548110613a2957613a296155ce565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613a5890836155fd565b915080613a6481615722565b915050613911565b505b600f54601154613a7e91906157ba565b821015613a9557600f546011546138af91906157ba565b6138af81836157ba565b60006001600160a01b038416613b1d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d32565b6001600160a01b038316613b995760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d32565b60008211613c0f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610d32565b6001600160a01b0384166000908152600360205260408120548190819060ff1615613c3d5760019250613c6b565b6001600160a01b03861660009081526003602052604090205460ff1615613c675760019150613c6b565b5060015b613c758787613f7b565b15613ea557601f5460ff16613ccc5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d32565b60225460ff1615613ea5576040805160028082526060820183526000926020830190803683370190505090503081600081518110613d0c57613d0c6155ce565b6001600160a01b03928316602091820292909201810191909152601654604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613da291906158c1565b81600181518110613db557613db56155ce565b6001600160a01b0392831660209182029290920101526016546040517fd06ca61f000000000000000000000000000000000000000000000000000000008152600092919091169063d06ca61f90613e12908a908690600401615935565b600060405180830381865afa158015613e2f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613e57919081019061594e565b600181518110613e6957613e696155ce565b602002602001015190508415613e8d57602054811115613e8857600080fd5b613ea2565b8315613ea257602154811115613ea257600080fd5b50505b6001600160a01b03871660009081526006602052604090205460019060ff1680613ee757506001600160a01b03871660009081526006602052604090205460ff165b15613ef0575060005b8215613f6057601a5460ff16158015613f105750601a54610100900460ff165b15613f605742601b54601c54613f2691906159df565b1015613f60576000613f3730612447565b9050601d548110613f5e57601e548110613f505750601e545b613f598161404f565b42601c555b505b613f6f888888848888886144d6565b98975050505050505050565b600080546001600160a01b03848116911614801590613fa857506000546001600160a01b03838116911614155b8015613fbf57506000546001600160a01b03163214155b8015613fe457506001600160a01b0382166000908152600a602052604090205460ff16155b801561400957506001600160a01b0383166000908152600a602052604090205460ff16155b801561402057506001600160a01b03821661dead14155b801561403457506001600160a01b03821615155b801561177e57506001600160a01b0383163014159392505050565b601a805460ff191660011790556040805160808101825260155461ffff808216835262010000820481166020840152640100000000820481169383019390935266010000000000009004909116606082018190526140ad57506144c9565b3060009081526005602090815260408083206016546001600160a01b0316845290915290205460001914614106573060009081526005602090815260408083206016546001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff16856141279190615580565b61413191906157ba565b61413b91906157ba565b9050600061414982856155fd565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110614183576141836155ce565b6001600160a01b03928316602091820292909201810191909152601654604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa1580156141f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061421991906158c1565b8160018151811061422c5761422c6155ce565b6001600160a01b0392831660209182029290920101526016546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac9479061428b9085906000908690309042906004016159f7565b600060405180830381600087803b1580156142a557600080fd5b505af11580156142b9573d6000803e3d6000fd5b50479250600091508490506142ce8684615580565b6142d891906157ba565b905084156143c9576016546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015614367573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061438c91906158de565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6143d381836155fd565b91508560000151866060018181516143eb9190615768565b61ffff908116909152606088015160408901516000935090821691614411911685615580565b61441b91906157ba565b9050600061442982856155fd565b604089015190915061ffff1615614476576019546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015614474573d6000803e3d6000fd5b505b602088015161ffff16156144c0576018546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156144be573d6000803e3d6000fd5b505b50505050505050505b50601a805460ff19169055565b601f54600090610100900460ff16614582576144f2888861475e565b601f54610100900460ff1615801561450f575061450f8888613f7b565b156145825760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610d32565b6000614593898989898989896148bc565b60a08101516001600160a01b038b166000908152600160205260409020549192506145bd916155fd565b6001600160a01b03808b16600090815260016020526040808220939093556080840151918b16815291909120546145f491906159df565b6001600160a01b03808a16600090815260016020908152604080832094909455918c1681526008909152205460ff1615614666576001600160a01b03891660009081526002602052604090205461464c9088906155fd565b6001600160a01b038a166000908152600260205260409020555b6001600160a01b03881660009081526008602052604090205460ff16156146c65780516001600160a01b0389166000908152600260205260409020546146ac91906159df565b6001600160a01b0389166000908152600260205260409020555b60008160c0015111806146dd575060008160200151115b156146fe578060c00151601160008282546146f891906155fd565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161474791815260200190565b60405180910390a350600198975050505050505050565b601f54610100900460ff16156147dc5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610d32565b6147e68282613f7b565b15801561480057506017546001600160a01b038281169116145b156110ab576001600160a01b038083166000908152600a60205260409020805460ff19166001179055601f805461ff00191661010017908190556201000090041661487557601f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601a805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b61490460405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61494c60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61495461382c565b60e082018190526149659088615580565b60a08201526149748989613f7b565b15614a2757601f546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038b811660048301528a81166024830152604482018a9052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614a10575060408051601f3d908101601f19168201909252614a0d91810190615918565b60015b614a1957600080fd5b905080614a2557600080fd5b505b8515614b5d57600080806127108715614a665760135461ffff80821695506a010000000000000000000082048116945062010000909104169150614ac0565b8815614a985760125461ffff80821695506a010000000000000000000082048116945062010000909104169150614ac0565b60145461ffff80821695506a0100000000000000000000820481169450620100009091041691505b80614acb858d615580565b614ad591906157ba565b602086015280614ae5848d615580565b614aef91906157ba565b604086015280614aff838d615580565b614b0991906157ba565b6060860181905260408601516020870151614b2491906159df565b614b2e91906159df565b614b38908c6155fd565b855260e08501516020860151614b4e9190615580565b60c086015250614b7d92505050565b600060208201819052604082018190526060820181905287825260c08201525b604081015115614c54578060e001518160400151614b9b9190615580565b3060009081526001602052604081208054909190614bba9084906159df565b90915550503060009081526008602052604090205460ff1615614c02576040808201513060009081526002602052918220805491929091614bfc9084906159df565b90915550505b306001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360400151604051614c4b91815260200190565b60405180910390a35b606081015115614d87578060e001518160600151614c729190615580565b61dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d8054909190614cb09084906159df565b909155505061dead60005260086020527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd093342995460ff1615614d3357606081015161dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc8054909190614d2d9084906159df565b90915550505b61dead6001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360600151604051614d7e91815260200190565b60405180910390a35b8060e001518160600151614d9b9190615580565b8160e001518260400151614daf9190615580565b8260c00151614dbe91906159df565b614dc891906159df565b8160a00151614dd791906155fd565b608082015298975050505050505050565b828054614df4906154fd565b90600052602060002090601f016020900481019282614e165760008555614e5c565b82601f10614e2f57805160ff1916838001178555614e5c565b82800160010185558215614e5c579182015b82811115614e5c578251825591602001919060010190614e41565b50614e68929150614e6c565b5090565b5b80821115614e685760008155600101614e6d565b80151581146135e657600080fd5b60008060408385031215614ea257600080fd5b8235614ead81614e81565b91506020830135614ebd81614e81565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614f2057614f20614ec8565b604052919050565b600067ffffffffffffffff821115614f4257614f42614ec8565b5060051b60200190565b6001600160a01b03811681146135e657600080fd5b600082601f830112614f7257600080fd5b81356020614f87614f8283614f28565b614ef7565b82815260059290921b84018101918181019086841115614fa657600080fd5b8286015b84811015614fca578035614fbd81614f4c565b8352918301918301614faa565b509695505050505050565b60008060408385031215614fe857600080fd5b823567ffffffffffffffff811115614fff57600080fd5b61500b85828601614f61565b9250506020830135614ebd81614e81565b60005b8381101561503757818101518382015260200161501f565b8381111561206c5750506000910152565b602081526000825180602084015261506781604085016020870161501c565b601f01601f19169190910160400192915050565b6000806040838503121561508e57600080fd5b823561509981614f4c565b946020939093013593505050565b600080604083850312156150ba57600080fd5b8235614ead81614f4c565b6000806000606084860312156150da57600080fd5b83356150e581614f4c565b925060208401356150f581614f4c565b929592945050506040919091013590565b600082601f83011261511757600080fd5b81356020615127614f8283614f28565b82815260059290921b8401810191818101908684111561514657600080fd5b8286015b84811015614fca578035835291830191830161514a565b6000806040838503121561517457600080fd5b823567ffffffffffffffff8082111561518c57600080fd5b61519886838701614f61565b935060208501359150808211156151ae57600080fd5b506151bb85828601615106565b9150509250929050565b803561ffff811681146151d757600080fd5b919050565b600080600080600060a086880312156151f457600080fd5b6151fd866151c5565b945061520b602087016151c5565b9350615219604087016151c5565b9250615227606087016151c5565b9150615235608087016151c5565b90509295509295909350565b60006020828403121561525357600080fd5b5035919050565b60006020828403121561526c57600080fd5b813561177e81614f4c565b600080600080600060a0868803121561528f57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600080608085870312156152c857600080fd5b843567ffffffffffffffff808211156152e057600080fd5b6152ec88838901614f61565b9550602087013591508082111561530257600080fd5b61530e88838901615106565b9450604087013591508082111561532457600080fd5b5061533187828801615106565b925050606085013561534281614f4c565b939692955090935050565b60006020828403121561535f57600080fd5b813561177e81614e81565b60008060006060848603121561537f57600080fd5b615388846151c5565b9250615396602085016151c5565b91506153a4604085016151c5565b90509250925092565b600080600080608085870312156153c357600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156153f257600080fd5b82356153fd81614f4c565b91506020830135614ebd81614f4c565b60008060006060848603121561542257600080fd5b833567ffffffffffffffff8082111561543a57600080fd5b61544687838801614f61565b9450602086013591508082111561545c57600080fd5b61546887838801615106565b9350604086013591508082111561547e57600080fd5b5061548b86828701615106565b9150509250925092565b600081518084526020808501945080840160005b838110156154ce5781516001600160a01b0316875295820195908201906001016154a9565b509495945050505050565b6040815260006154ec6040830185615495565b905082151560208301529392505050565b600181811c9082168061551157607f821691505b6020821081141561554b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600081600019048311821515161561559a5761559a615551565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008282101561560f5761560f615551565b500390565b600060001982141561562857615628615551565b5060010190565b600181815b8085111561566a57816000190482111561565057615650615551565b8085161561565d57918102915b93841c9390800290615634565b509250929050565b60008261568157506001610f06565b8161568e57506000610f06565b81600181146156a457600281146156ae576156ca565b6001915050610f06565b60ff8411156156bf576156bf615551565b50506001821b610f06565b5060208310610133831016604e8410600b84101617156156ed575081810a610f06565b6156f7838361562f565b806000190482111561570b5761570b615551565b029392505050565b600061177e60ff841683615672565b600060ff821660ff81141561573957615739615551565b60010192915050565b600061ffff80831681851680830382111561575f5761575f615551565b01949350505050565b600061ffff8381169083168181101561578357615783615551565b039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826157c9576157c961578b565b500490565b600082601f8301126157df57600080fd5b815167ffffffffffffffff8111156157f9576157f9614ec8565b61580c6020601f19601f84011601614ef7565b81815284602083860101111561582157600080fd5b61145882602083016020870161501c565b6000806000806080858703121561584857600080fd5b845167ffffffffffffffff8082111561586057600080fd5b61586c888389016157ce565b9550602087015191508082111561588257600080fd5b5061588f878288016157ce565b93505060408501519150606085015160ff8116811461534257600080fd5b6000826158bc576158bc61578b565b500690565b6000602082840312156158d357600080fd5b815161177e81614f4c565b6000806000606084860312156158f357600080fd5b8351925060208401519150604084015190509250925092565b600061177e8383615672565b60006020828403121561592a57600080fd5b815161177e81614e81565b8281526040602082015260006114586040830184615495565b6000602080838503121561596157600080fd5b825167ffffffffffffffff81111561597857600080fd5b8301601f8101851361598957600080fd5b8051615997614f8282614f28565b81815260059190911b820183019083810190878311156159b657600080fd5b928401925b828410156159d4578351825292840192908401906159bb565b979650505050505050565b600082198211156159f2576159f2615551565b500190565b85815284602082015260a060408201526000615a1660a0830186615495565b6001600160a01b039490941660608301525060800152939250505056fea264697066735822122069efd6752ebb53877157e07b27afa576aa21b19379dd3db91bac2f113e07a2a364736f6c634300080b0033

Deployed Bytecode Sourcemap

6223:28748:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8434:73;;;;;;;;;;;;8465:42;8434:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;8434:73:0;;;;;;;;8986:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;8986:28:0;245:177:1;20216:151:0;;;;;;;;;;-1:-1:-1;20216:151:0;;;;;:::i;:::-;;:::i;:::-;;19661:172;;;;;;;;;;-1:-1:-1;19661:172:0;;;;;:::i;:::-;;:::i;14641:80::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8373:26::-;;;;;;;;;;-1:-1:-1;8373:26:0;;;;-1:-1:-1;;;;;8373:26:0;;;15332:159;;;;;;;;;;-1:-1:-1;15332:159:0;;;;;:::i;:::-;;:::i;:::-;;;4473:14:1;;4466:22;4448:41;;4436:2;4421:18;15332:159:0;4308:187:1;17495:1519:0;;;;;;;;;;-1:-1:-1;17495:1519:0;;;;;:::i;:::-;;:::i;14344:115::-;;;;;;;;;;;;;:::i;9209:38::-;;;;;;;;;;;;;;;;15997:306;;;;;;;;;;-1:-1:-1;15997:306:0;;;;;:::i;:::-;;:::i;29343:373::-;;;;;;;;;;-1:-1:-1;29343:373:0;;;;;:::i;:::-;;:::i;9254:38::-;;;;;;;;;;-1:-1:-1;9254:38:0;;;;;;;;20891:515;;;;;;;;;;-1:-1:-1;20891:515:0;;;;;:::i;:::-;;:::i;8170:42::-;;;;;;;;;;;;8208:4;8170:42;;19022:250;;;;;;;;;;-1:-1:-1;19022:250:0;;;;;:::i;:::-;;:::i;9021:25::-;;;;;;;;;;;;;;;;14465:80;;;;;;;;;;-1:-1:-1;14533:9:0;;14465:80;;14533:9;;;;7585:36:1;;7573:2;7558:18;14465:80:0;7443:184:1;20100:108:0;;;;;;;;;;-1:-1:-1;20100:108:0;;;;;:::i;:::-;;:::i;23235:338::-;;;;;;;;;;-1:-1:-1;23235:338:0;;;;;:::i;:::-;;:::i;22674:140::-;;;;;;;;;;-1:-1:-1;22674:140:0;;;;;:::i;:::-;;:::i;10758:1855::-;;;;;;;;;;-1:-1:-1;10758:1855:0;;;;;:::i;:::-;;:::i;8406:21::-;;;;;;;;;;-1:-1:-1;8406:21:0;;;;-1:-1:-1;;;;;8406:21:0;;;9165:37;;;;;;;;;;;;;;;;9053:34;;;;;;;;;;-1:-1:-1;9053:34:0;;;;;;;;13202:588;;;;;;;;;;-1:-1:-1;13202:588:0;;;;;:::i;:::-;;:::i;22960:125::-;;;;;;;;;;-1:-1:-1;22960:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;23049:28:0;23025:4;23049:28;;;:19;:28;;;;;;;;;22960:125;9094:36;;;;;;;;;;-1:-1:-1;9094:36:0;;;;;;;;;;;23093:134;;;;;;;;;;-1:-1:-1;23093:134:0;;;;;:::i;:::-;;:::i;19280:220::-;;;;;;;;;;-1:-1:-1;19280:220:0;;;;;:::i;:::-;;:::i;22822:130::-;;;;;;;;;;-1:-1:-1;22822:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;22914:30:0;22890:4;22914:30;;;:21;:30;;;;;;;;;22822:130;22546:120;;;;;;;;;;-1:-1:-1;22546:120:0;;;;;:::i;:::-;;:::i;14953:198::-;;;;;;;;;;-1:-1:-1;14953:198:0;;;;;:::i;:::-;;:::i;13798:193::-;;;;;;;;;;;;;:::i;7432:187::-;;;;;;;;;;-1:-1:-1;7432:187:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9836:6:1;9869:15;;;9851:34;;9921:15;;;9916:2;9901:18;;9894:43;9973:15;;;9953:18;;;9946:43;;;;10025:15;;;10020:2;10005:18;;9998:43;10078:15;;10072:3;10057:19;;10050:44;10131:15;;;10125:3;10110:19;;10103:44;9813:3;9798:19;7432:187:0;9551:602:1;16859:500:0;;;;;;;;;;-1:-1:-1;16859:500:0;;;;;:::i;:::-;;:::i;20375:508::-;;;;;;;;;;-1:-1:-1;20375:508:0;;;;;:::i;:::-;;:::i;17367:120::-;;;;;;;;;;-1:-1:-1;17367:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;17459:20:0;17435:4;17459:20;;;:11;:20;;;;;;;;;17367:120;14727:79;;;;;;;;;;-1:-1:-1;14779:7:0;14797:6;-1:-1:-1;;;;;14797:6:0;14727:79;;15816:173;;;;;;;;;;;;;:::i;28716:429::-;;;;;;;;;;;;;:::i;14551:84::-;;;;;;;;;;;;;:::i;15159:165::-;;;;;;;;;;-1:-1:-1;15159:165:0;;;;;:::i;:::-;;:::i;21965:288::-;;;;;;;;;;-1:-1:-1;21965:288:0;;;;;:::i;:::-;;:::i;22261:277::-;;;;;;;;;;-1:-1:-1;22261:277:0;;;;;:::i;:::-;;:::i;21414:543::-;;;;;;;;;;-1:-1:-1;21414:543:0;;;;;:::i;:::-;;:::i;7826:192::-;;;;;;;;;;-1:-1:-1;7826:192:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7628:189;;;;;;;;;;-1:-1:-1;7628:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19841:118;;;;;;;;;;-1:-1:-1;19841:118:0;;;;;:::i;:::-;;:::i;23802:164::-;;;;;;;;;;-1:-1:-1;23802:164:0;;;;;:::i;:::-;;:::i;8027:134::-;;;;;;;;;;-1:-1:-1;8027:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11114:6:1;11147:15;;;11129:34;;11199:15;;;11194:2;11179:18;;11172:43;11251:15;;;11231:18;;;11224:43;;;;11303:15;;;11298:2;11283:18;;11276:43;11091:3;11076:19;8027:134:0;10881:444:1;23581:213:0;;;;;;;;;;-1:-1:-1;23581:213:0;;;;;:::i;:::-;;:::i;14812:133::-;;;;;;;;;;-1:-1:-1;14812:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;14914:19:0;;;14896:7;14914:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;14812:133;8904:44;;;;;;;;;;;;;;;;29724:482;;;;;;;;;;-1:-1:-1;29724:482:0;;;;;:::i;:::-;;:::i;16311:540::-;;;;;;;;;;-1:-1:-1;16311:540:0;;;;;:::i;:::-;;:::i;29153:182::-;;;;;;;;;;;;;:::i;19508:145::-;;;;;;;;;;-1:-1:-1;19508:145:0;;;;;:::i;:::-;;:::i;8624:203::-;;;;;;;;;;-1:-1:-1;8624:203:0;;;;;;-1:-1:-1;;;;;8624:203:0;;;;;;;;;;;-1:-1:-1;;;;;13243:15:1;;;13225:34;;13295:15;;;;13290:2;13275:18;;13268:43;13137:18;8624:203:0;12958:359:1;8858:39:0;;;;;;;;;;-1:-1:-1;8858:39:0;;;;;;;;;;;19967:125;;;;;;;;;;-1:-1:-1;19967:125:0;;;;;:::i;:::-;;:::i;20216:151::-;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;;;;;;;;;20311:9:::1;::::0;:48:::1;::::0;;;;13855:14:1;;13848:22;20311:48:0::1;::::0;::::1;13830:41:1::0;13914:14;;13907:22;13887:18;;;13880:50;20311:9:0;;;::::1;-1:-1:-1::0;;;;;20311:9:0::1;::::0;:24:::1;::::0;13803:18:1;;20311:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20216:151:::0;;:::o;19661:172::-;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;19769:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;19769:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;19807:8;;19817:7;;19769:56:::1;;;:::i;14641:80::-:0;14689:13;14713:5;14706:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14641:80;:::o;15332:159::-;15407:4;15424:37;15433:10;15445:7;15454:6;15424:8;:37::i;:::-;-1:-1:-1;15479:4:0;15332:159;;;;;:::o;17495:1519::-;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;17589:7:::1;17585:1422;;;-1:-1:-1::0;;;;;17622:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;17621:21;17613:62;;;::::0;-1:-1:-1;;;17613:62:0;;15421:2:1;17613:62:0::1;::::0;::::1;15403:21:1::0;15460:2;15440:18;;;15433:30;15499;15479:18;;;15472:58;15547:18;;17613:62:0::1;15219:352:1::0;17613:62:0::1;-1:-1:-1::0;;;;;17693:16:0;::::1;17712:1;17693:16:::0;;;:7:::1;:16;::::0;;;;;:20;17690:116:::1;;-1:-1:-1::0;;;;;17773:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;17753:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;17734:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;17690:116:::1;-1:-1:-1::0;;;;;17820:20:0;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;17820:27:0::1;17843:4;17820:27;::::0;;17876:6:::1;::::0;;;::::1;17865:17;17862:79;;17902:9;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;17902:23:0;;;;;::::1;::::0;;-1:-1:-1;;17902:23:0::1;-1:-1:-1::0;;;;;17902:23:0;::::1;;::::0;;17862:79:::1;17495:1519:::0;;:::o;17585:1422::-:1;17963:7;17958:1049;;-1:-1:-1::0;;;;;17995:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;17987:61;;;::::0;-1:-1:-1;;;17987:61:0;;15778:2:1;17987:61:0::1;::::0;::::1;15760:21:1::0;15817:2;15797:18;;;15790:30;15856;15836:18;;;15829:58;15904:18;;17987:61:0::1;15576:352:1::0;17987:61:0::1;18078:6;::::0;-1:-1:-1;;;;;18067:17:0;;::::1;18078:6:::0;::::1;18067:17;18063:933;;;18143:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;18124:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;18105:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;18172:7:::1;:16:::0;;;;;:20;;;18211:11:::1;:20:::0;;;:28;;-1:-1:-1;;18211:28:0::1;::::0;;17495:1519;;:::o;18063:933::-:1;18264:9;:16:::0;18284:1:::1;18264:21;18261:735;;;18344:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;18325:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;18306:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;18373:7:::1;:16:::0;;;;;:20;;;18412:11:::1;:20:::0;;;:28;;-1:-1:-1;;18412:28:0::1;::::0;;18459:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;18459:15:0;;;;;-1:-1:-1;;18459:15:0::1;::::0;;;;;17495:1519;;:::o;18261:735::-:1;18520:9;18515:466;18539:9;:16:::0;18535:20;::::1;18515:466;;;18605:7;-1:-1:-1::0;;;;;18589:23:0::1;:9;18599:1;18589:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;18589:12:0::1;:23;18585:377;;;18656:9;18666:16:::0;;:20:::1;::::0;18685:1:::1;::::0;18666:20:::1;:::i;:::-;18656:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;18641:9:::1;:12:::0;;-1:-1:-1;;;;;18656:31:0;;::::1;::::0;18651:1;;18641:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;18641:46:0::1;-1:-1:-1::0;;;;;18641:46:0;;::::1;;::::0;;18714:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;18799:10:::1;:8;:10::i;:::-;-1:-1:-1::0;;;;;18780:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;18761:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;18836:11:::1;:20:::0;;;:28;;-1:-1:-1;;18836:28:0::1;::::0;;18891:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;18891:15:0;;;;;-1:-1:-1;;18891:15:0::1;::::0;;;;;18515:466:::1;17495:1519:::0;;:::o;18585:377::-:1;18557:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18515:466;;;;17495:1519:::0;;:::o;14344:115::-;14399:7;14414;;14425:1;14414:12;14410:31;;;14430:8;;;14410:31;-1:-1:-1;14449:7:0;;;14344:115::o;15997:306::-;-1:-1:-1;;;;;16118:19:0;;16097:4;16118:19;;;:11;:19;;;;;;;;16138:10;16118:31;;;;;;;;-1:-1:-1;;16118:52:0;16114:126;;-1:-1:-1;;;;;16187:19:0;;;;;;:11;:19;;;;;;;;16207:10;16187:31;;;;;;;:41;;16222:6;;16187:19;:41;;16222:6;;16187:41;:::i;:::-;;;;-1:-1:-1;;16114:126:0;16259:36;16269:6;16277:9;16288:6;16259:9;:36::i;:::-;16252:43;15997:306;-1:-1:-1;;;;15997:306:0:o;29343:373::-;29468:7;:14;29449:8;:15;:33;29441:67;;;;-1:-1:-1;;;29441:67:0;;17265:2:1;29441:67:0;;;17247:21:1;17304:2;17284:18;;;17277:30;17343:23;17323:18;;;17316:51;17384:18;;29441:67:0;17063:345:1;29441:67:0;29524:7;29519:190;29541:8;:15;29537:1;:19;;;29519:190;;;29611:7;29619:1;29611:10;;;;;;;;;;:::i;:::-;;;;;;;29586:21;29596:10;29586:9;:21::i;:::-;:35;;29578:44;;;;;;29637:60;29647:10;29659:8;29668:1;29659:11;;;;;;;;;;:::i;:::-;;;;;;;;;;;29687:9;;29683:13;;29687:9;;29683:2;:13;:::i;:::-;29672:7;29680:1;29672:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;29637:9;:60::i;:::-;-1:-1:-1;29558:3:0;;;;:::i;:::-;;;;29519:190;;20891:515;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;21028:12:::1;21084:11:::0;21077:4;21065:9;21043:19:::1;21053:9:::0;21043:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:38;;;;:::i;:::-;:52;;;;:::i;:::-;21028:67;;8208:4;21114:5;:20;;;;21106:29;;;::::0;::::1;;21146:10;:28:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;21185:22:0;;;;;;;;;;::::1;;;21261:32:::0;;21218;;;::::1;;-1:-1:-1::0;;21261:32:0;;;;;::::1;;;21304:36:::0;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;21383:14:::1;21185:22:::0;21146:28;21383:14:::1;:::i;:::-;21374:24;::::0;:5;:24:::1;:::i;:::-;21351:10;:47:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;20891:515:0:o;19022:250::-;19088:7;19127;;19116;:18;;19108:73;;;;-1:-1:-1;;;19108:73:0;;19749:2:1;19108:73:0;;;19731:21:1;19788:2;19768:18;;;19761:30;19827:34;19807:18;;;19800:62;19898:12;19878:18;;;19871:40;19928:19;;19108:73:0;19547:406:1;19108:73:0;19192:19;19215:10;:8;:10::i;:::-;19192:33;-1:-1:-1;19243:21:0;19192:33;19243:7;:21;:::i;:::-;19236:28;19022:250;-1:-1:-1;;;19022:250:0:o;20100:108::-;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;20169:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;20169:31:0::1;::::0;::::1;160:74:1::0;20169:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;20169:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20100:108:::0;:::o;23235:338::-;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;23449:16:::1;23429;23419:7;;:26;;;;:::i;:::-;23418:47;;;;:::i;:::-;23402:13;:63:::0;23490:7:::1;::::0;23517:13;;23490:23:::1;::::0;23500:13;;23490:23:::1;:::i;:::-;23489:41;;;;:::i;:::-;23476:10;:54:::0;23541:17:::1;:24:::0;-1:-1:-1;;;;23235:338:0:o;22674:140::-;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;-1:-1:-1;;;;;22766:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;22766:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22674:140::o;10758:1855::-;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;10925:19:::1;::::0;::::1;::::0;::::1;;;10924:20;10916:34;;;::::0;-1:-1:-1;;;10916:34:0;;20474:2:1;10916:34:0::1;::::0;::::1;20456:21:1::0;20513:1;20493:18;;;20486:29;20551:3;20531:18;;;20524:31;20572:18;;10916:34:0::1;20272:324:1::0;10916:34:0::1;10988:8;:15;10969:8;:15;:34;:72;;;;;11026:8;:15;11007:8;:15;:34;10969:72;10961:86;;;::::0;-1:-1:-1;;;10961:86:0;;20803:2:1;10961:86:0::1;::::0;::::1;20785:21:1::0;20842:1;20822:18;;;20815:29;20880:3;20860:18;;;20853:31;20901:18;;10961:86:0::1;20601:324:1::0;10961:86:0::1;11058:9;:33:::0;;;::::1;::::0;-1:-1:-1;;;;;11058:33:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;11106::::1;::::0;;;;11133:4:::1;11106:33;::::0;::::1;160:74:1::0;11106:9:0;::::1;;::::0;:18:::1;::::0;133::1;;11106:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;11102:49:::0;11165:9:::1;;;;;;;;;-1:-1:-1::0;;;;;11165:9:0::1;-1:-1:-1::0;;;;;11165:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;11165:27:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;11161:454;;11592:11;::::0;-1:-1:-1;;;11592:11:0;;22472:2:1;11592:11:0::1;::::0;::::1;22454:21:1::0;22511:1;22491:18;;;22484:29;22549:3;22529:18;;;22522:31;22570:18;;11592:11:0::1;22270:324:1::0;11161:454:0::1;11315:16:::0;;::::1;::::0;:5:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;11346:20:0;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;11381:14:0::1;:35:::0;;;11431:9:::1;:24:::0;;-1:-1:-1;;11431:24:0::1;;::::0;::::1;::::0;;::::1;::::0;;;11497:13:::1;::::0;:2:::1;:13;:::i;:::-;11480:14;;:30;;;;:::i;:::-;11470:7;:40:::0;;;11543:3:::1;::::0;:13:::1;::::0;11470:40;11543:13:::1;:::i;:::-;11536:3;;:21;;;;:::i;:::-;11525:7;:33:::0;-1:-1:-1;;;;11645:9:0::1;;;;;;;;;-1:-1:-1::0;;;;;11645:9:0::1;-1:-1:-1::0;;;;;11645:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11634:42:0::1;;11677:9;;;;;;;;;-1:-1:-1::0;;;;;11677:9:0::1;-1:-1:-1::0;;;;;11677:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11634:75;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;13243:15:1;;;11634:75:0::1;::::0;::::1;13225:34:1::0;11703:4:0::1;13275:18:1::0;;;13268:43;13137:18;;11634:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11625:6;:84:::0;;-1:-1:-1;;11625:84:0::1;-1:-1:-1::0;;;;;11625:84:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;11720:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;11720:22:0::1;-1:-1:-1::0;11720:22:0::1;::::0;;11770:7:::1;::::0;11785:5:::1;::::0;11770:11:::1;::::0;11780:1:::1;11770:11;:::i;:::-;11769:21;;;;:::i;:::-;11753:13;:37:::0;11815:7:::1;::::0;11831:5:::1;::::0;11815:12:::1;::::0;11825:2:::1;11815:12;:::i;:::-;11814:22;;;;:::i;:::-;11801:10;:35:::0;11847:19:::1;:26:::0;;-1:-1:-1;;11847:26:0::1;;;::::0;;11907:7:::1;::::0;11847:26;11897:6;;-1:-1:-1;;;;;11897:6:0;;::::1;11889:15:::0;;11869:4:::1;11889:15;::::0;;;;;:25;;;;11951:6;;11959:7:::1;::::0;11930:37;;11951:6;::::1;::::0;11930:37:::1;::::0;::::1;::::0;391:25:1;;379:2;364:18;;245:177;11930:37:0::1;;;;;;;;12012:9;::::0;11980:62:::1;::::0;11997:4:::1;::::0;-1:-1:-1;;;;;12012:9:0::1;-1:-1:-1::0;;11980:8:0::1;:62::i;:::-;12057:9;12053:178;12076:8;:15;12072:1;:19;12053:178;;;12112:14;12155:8;12164:1;12155:11;;;;;;;;:::i;:::-;;;;;;;12140:8;12149:1;12140:11;;;;;;;;:::i;:::-;;;;;;;12130:7;;:21;;;;:::i;:::-;12129:37;;;;:::i;:::-;12112:54;;12181:38;12191:6;::::0;::::1;;;;;;-1:-1:-1::0;;;;;12191:6:0::1;12199:8;12208:1;12199:11;;;;;;;;:::i;:::-;;;;;;;12212:6;12181:9;:38::i;:::-;;12097:134;12093:3;;;;;:::i;:::-;;;;12053:178;;;-1:-1:-1::0;12253:6:0::1;::::0;12243:51:::1;::::0;-1:-1:-1;;;;;12253:6:0::1;12269:4;12276:17;12253:6:::0;12276:9:::1;:17::i;12243:51::-;-1:-1:-1::0;12307:9:0::1;::::0;-1:-1:-1;;;;;12307:9:0::1;:25;12340:21;12385:4;12405:24;12385:4:::0;12405:9:::1;:24::i;:::-;12444:1;12530:6:::0;;12307:270:::1;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;23686:15:1;;;12307:270:0::1;::::0;::::1;23668:34:1::0;23718:18;;;23711:34;;;;23761:18;;;23754:34;;;23804:18;;;23797:34;;;;12530:6:0;;;::::1;23847:19:1::0;;;23840:44;12551:15:0::1;23900:19:1::0;;;23893:35;23579:19;;12307:270:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12590:15;:13;:15::i;:::-;10758:1855:::0;;;;:::o;13202:588::-;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;-1:-1:-1;;;;;13281:22:0;::::1;13273:96;;;::::0;-1:-1:-1;;;13273:96:0;;24452:2:1;13273:96:0::1;::::0;::::1;24434:21:1::0;24491:2;24471:18;;;24464:30;24530:34;24510:18;;;24503:62;24601:31;24581:18;;;24574:59;24650:19;;13273:96:0::1;24250:425:1::0;13273:96:0::1;-1:-1:-1::0;;;;;13388:16:0;::::1;8465:42;13388:16;;13380:90;;;::::0;-1:-1:-1;;;13380:90:0;;24452:2:1;13380:90:0::1;::::0;::::1;24434:21:1::0;24491:2;24471:18;;;24464:30;24530:34;24510:18;;;24503:62;24601:31;24581:18;;;24574:59;24650:19;;13380:90:0::1;24250:425:1::0;13380:90:0::1;13501:6;::::0;;13481:34:::1;::::0;-1:-1:-1;;;;;13501:6:0;;::::1;::::0;13481:19:::1;:34::i;:::-;13526:35;13546:8;13556:4;13526:19;:35::i;:::-;13605:1;13595:6:::0;;13585:17:::1;::::0;-1:-1:-1;;;;;13595:6:0::1;13585:9;:17::i;:::-;:21;13582:99;;;13633:6;::::0;13623:46:::1;::::0;-1:-1:-1;;;;;13633:6:0::1;13641:8:::0;13651:17:::1;13633:6:::0;13651:9:::1;:17::i;13623:46::-;;13582:99;13701:6;:17:::0;;-1:-1:-1;;13701:17:0::1;-1:-1:-1::0;;;;;13701:17:0;::::1;::::0;;::::1;::::0;;13734:38:::1;::::0;13701:17;;;;13734:38:::1;::::0;13701:6;13734:38:::1;13202:588:::0;:::o;23093:134::-;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;-1:-1:-1;;;;;23181:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;23181:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23093:134::o;19280:220::-;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;19364:16:::1;::::0;::::1;::::0;::::1;;;19363:17;19355:26;;;::::0;::::1;;-1:-1:-1::0;;;;;19400:28:0;::::1;19423:4;19400:28;;19392:55;;;::::0;-1:-1:-1;;;19392:55:0;;24882:2:1;19392:55:0::1;::::0;::::1;24864:21:1::0;24921:2;24901:18;;;24894:30;24960:16;24940:18;;;24933:44;24994:18;;19392:55:0::1;24680:338:1::0;19392:55:0::1;19458:9;:34:::0;;-1:-1:-1;;;;;19458:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;19280:220::o;22546:120::-;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;22624:19:::1;:34:::0;;-1:-1:-1;;22624:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22546:120::o;14953:198::-;-1:-1:-1;;;;;15043:20:0;;15019:7;15043:20;;;:11;:20;;;;;;;;15039:49;;;-1:-1:-1;;;;;;15072:16:0;;;;;:7;:16;;;;;;;14953:198::o;15039:49::-;-1:-1:-1;;;;;15126:16:0;;;;;;:7;:16;;;;;;15106:37;;:19;:37::i;13798:193::-;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;13883:6:::1;::::0;;13863:34:::1;::::0;-1:-1:-1;;;;;13883:6:0;;::::1;::::0;13863:19:::1;:34::i;:::-;13925:1;13908:19:::0;;-1:-1:-1;;13908:19:0::1;::::0;;13943:40:::1;::::0;13925:1;;13943:40:::1;::::0;13925:1;;13943:40:::1;13798:193::o:0;16859:500::-;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;16940:16;16936:416:::1;;-1:-1:-1::0;;;;;16973:13:0;;::::1;16989:5;16973:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;16973:21:0::1;::::0;;17009:9:::1;::::0;:32;;;;;::::1;::::0;::::1;25191:74:1::0;;;;25281:18;;;25274:50;;;;17009:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;25164:18:1;;17009:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;16936:416;17078:17;::::0;:22;17074:136:::1;;17167:6;17147:17;;17129:15;:35;;;;:::i;:::-;:44;17121:73;;;::::0;-1:-1:-1;;;17121:73:0;;25537:2:1;17121:73:0::1;::::0;::::1;25519:21:1::0;25576:2;25556:18;;;25549:30;25615:18;25595;;;25588:46;25651:18;;17121:73:0::1;25335:340:1::0;17121:73:0::1;-1:-1:-1::0;;;;;17224:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;17224:20:0::1;17240:4;17224:20:::0;;::::1;::::0;;;17279:15:::1;17259:17;:35:::0;;;17309:9:::1;::::0;:31;;;;;;;::::1;25191:74:1::0;;;;25281:18;;;25274:50;17309:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;25164:18:1;;17309:31:0::1;25023:307:1::0;20375:508:0;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;20511:12:::1;20567:11:::0;20560:4;20548:9;20526:19:::1;20536:9:::0;20526:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:38;;;;:::i;:::-;:52;;;;:::i;:::-;20511:67;;8208:4;20597:5;:20;;;;20589:29;;;::::0;::::1;;20629:9;:27:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;20667:21:0;;;;;;;;;;::::1;;;20741:31:::0;;20699;;;::::1;;-1:-1:-1::0;;20741:31:0;;;;;::::1;;;20783:35:::0;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;20860:14:::1;20667:21:::0;20629:27;20860:14:::1;:::i;:::-;20851:24;::::0;:5;:24:::1;:::i;:::-;20829:9;:46:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;20375:508:0:o;15816:173::-;15880:4;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;15929:9:::1;::::0;15897:62:::1;::::0;15914:4:::1;::::0;-1:-1:-1;;;;;15929:9:0::1;-1:-1:-1::0;;15897:8:0::1;:62::i;:::-;-1:-1:-1::0;15977:4:0::1;15816:173:::0;:::o;28716:429::-;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;28778:14:::1;::::0;::::1;;28777:15;28769:52;;;::::0;-1:-1:-1;;;28769:52:0;;25882:2:1;28769:52:0::1;::::0;::::1;25864:21:1::0;25921:2;25901:18;;;25894:30;25960:26;25940:18;;;25933:54;26004:18;;28769:52:0::1;25680:348:1::0;28769:52:0::1;28840:16;::::0;::::1;::::0;::::1;;;28832:53;;;::::0;-1:-1:-1;;;28832:53:0;;26235:2:1;28832:53:0::1;::::0;::::1;26217:21:1::0;26274:2;26254:18;;;26247:30;26313:26;26293:18;;;26286:54;26357:18;;28832:53:0::1;26033:348:1::0;28832:53:0::1;28907:9;::::0;;;::::1;-1:-1:-1::0;;;;;28907:9:0::1;28896:99;;28947:9;:36:::0;;;::::1;28977:4;28947:36:::0;::::1;;::::0;;28896:99:::1;29009:9;::::0;29029:6:::1;::::0;29084:9:::1;::::0;29009:85:::1;::::0;;;;-1:-1:-1;;;;;29029:6:0;;::::1;29009:85;::::0;::::1;26609:74:1::0;26731:10;29044:12:0::1;26719:23:1::0;26699:18;;;26692:51;26791:18;29066:15:0::1;26779:31:1::0;26759:18;;;26752:59;29084:9:0::1;::::0;;::::1;26827:18:1::0;;;26820:45;29009:9:0;;;::::1;;::::0;:19:::1;::::0;26581::1;;29009:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;29005:101:::0;29116:14:::1;:21:::0;;-1:-1:-1;;29116:21:0::1;29133:4;29116:21;::::0;;28716:429::o;14551:84::-;14601:13;14625:7;14618:14;;;;;:::i;15159:165::-;15237:4;15254:40;15264:10;15276:9;15287:6;15254:9;:40::i;:::-;-1:-1:-1;15312:4:0;;15159:165;-1:-1:-1;;;15159:165:0:o;21965:288::-;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;22070:7:::1;:29:::0;;::::1;22150:33:::0;;::::1;::::0;::::1;::::0;22110:29;;::::1;::::0;::::1;-1:-1:-1::0;;22110:29:0;;;22070;;::::1;22110::::0;;;;;;;::::1;22150:33;;::::0;;22172:11;22210:21:::1;22130:9:::0;22090;22210:21:::1;:::i;:::-;:35;;;;:::i;:::-;22194:7;:51:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;22194:51:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;21965:288:0:o;22261:277::-;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;22402:11:::1;22406:7:::0;22402:2:::1;:11;:::i;:::-;22393:20;::::0;:6;:20:::1;:::i;:::-;22381:9;:32:::0;22447:12:::1;22451:8:::0;22447:2:::1;:12;:::i;:::-;22437:22;::::0;:7;:22:::1;:::i;:::-;22424:10;:35:::0;22478:9:::1;::::0;22491:10:::1;-1:-1:-1::0;22478:23:0;::::1;::::0;:51:::1;;;22519:10;22505;;:24;;22478:51;22470:60;;;::::0;::::1;21414:543:::0;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;21555:12:::1;21611:11:::0;21604:4;21592:9;21570:19:::1;21580:9:::0;21570:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:38;;;;:::i;:::-;:52;;;;:::i;:::-;21555:67;;8208:4;21641:5;:20;;;;21633:29;;;::::0;::::1;;21673:14;:32:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;21716:26:0;;;;;;;;;;::::1;;;21800:36:::0;;21753;;;::::1;;-1:-1:-1::0;;21800:36:0;;;;;::::1;;;21847:40:::0;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;21934:14:::1;21716:26:::0;21673:32;21934:14:::1;:::i;:::-;21925:24;::::0;:5;:24:::1;:::i;:::-;21898:14;:51:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;21414:543:0:o;19841:118::-;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;19915:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;19915:36:0::1;::::0;::::1;160:74:1::0;19915:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;133:18:1;;19915:36:0::1;14:226:1::0;23802:164:0;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;23878:19:::1;:29:::0;;;::::1;;;;-1:-1:-1::0;;23878:29:0;;::::1;;::::0;;23923:35:::1;::::0;::::1;::::0;::::1;::::0;23900:7;4473:14:1;4466:22;4448:41;;4436:2;4421:18;;4308:187;23923:35:0::1;;;;;;;;23802:164:::0;:::o;23581:213::-;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;23687:11:::1;:42:::0;;-1:-1:-1;;;;;23687:42:0;;::::1;-1:-1:-1::0;;23687:42:0;;::::1;;::::0;;;23740:23;:46;;;;;::::1;::::0;::::1;;::::0;;23581:213::o;29724:482::-;29879:8;:15;29860:8;:15;:34;:72;;;;;29917:8;:15;29898:8;:15;:34;29860:72;29852:106;;;;-1:-1:-1;;;29852:106:0;;17265:2:1;29852:106:0;;;17247:21:1;17304:2;17284:18;;;17277:30;17343:23;17323:18;;;17316:51;17384:18;;29852:106:0;17063:345:1;29852:106:0;29974:7;29969:230;29991:8;:15;29987:1;:19;;;29969:230;;;30087:8;30096:1;30087:11;;;;;;;;;;:::i;:::-;;;;;;;30072:8;30081:1;30072:11;;;;;;;;;;:::i;:::-;;;;;;;30062:7;;:21;;;;:::i;:::-;30061:37;;;;:::i;:::-;30036:21;30046:10;30036:9;:21::i;:::-;:62;;30028:71;;;;;;30114:73;30124:10;30136:8;30145:1;30136:11;;;;;;;;;;:::i;:::-;;;;;;;30175:8;30184:1;30175:11;;;;;;;;;;:::i;:::-;;;;;;;30160:8;30169:1;30160:11;;;;;;;;;;:::i;:::-;;;;;;;30150:7;;:21;;;;:::i;:::-;30149:37;;;;:::i;30114:73::-;-1:-1:-1;30008:3:0;;;;:::i;:::-;;;;29969:230;;16311:540;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;16380:20:::1;16413:9;16380:43;;16434:16;16464:10;-1:-1:-1::0;;;;;16464:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16453:40:0::1;;16502:4;16509:10;-1:-1:-1::0;;;;;16509:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16453:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;13243:15:1;;;16453:74:0::1;::::0;::::1;13225:34:1::0;13295:15;;13275:18;;;13268:43;13137:18;;16453:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16434:93:::0;-1:-1:-1;;;;;;16542:22:0;::::1;16538:200;;16601:10;-1:-1:-1::0;;;;;16601:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16590:43:0::1;;16642:4;16649:10;-1:-1:-1::0;;;;;16649:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16590:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;13243:15:1;;;16590:77:0::1;::::0;::::1;13225:34:1::0;13295:15;;13275:18;;;13268:43;13137:18;;16590:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16581:6;:86:::0;;-1:-1:-1;;16581:86:0::1;-1:-1:-1::0;;;;;16581:86:0;;;::::1;::::0;;;::::1;::::0;;16538:200:::1;;;16709:6;:17:::0;;-1:-1:-1;;16709:17:0::1;-1:-1:-1::0;;;;;16709:17:0;::::1;;::::0;;16538:200:::1;16748:9;:22:::0;;-1:-1:-1;;16748:22:0::1;-1:-1:-1::0;;;;;16748:22:0;::::1;::::0;;::::1;::::0;;;16781:62:::1;::::0;16798:4:::1;::::0;-1:-1:-1;;16781:8:0::1;:62::i;29153:182::-:0;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;29220:16:::1;::::0;::::1;::::0;::::1;;;29219:17;29211:58;;;::::0;-1:-1:-1;;;29211:58:0;;27214:2:1;29211:58:0::1;::::0;::::1;27196:21:1::0;27253:2;27233:18;;;27226:30;27292;27272:18;;;27265:58;27340:18;;29211:58:0::1;27012:352:1::0;29211:58:0::1;29288:6;::::0;;29280:47:::1;::::0;-1:-1:-1;;;;;29288:6:0;;::::1;::::0;29305:21:::1;29280:47:::0;::::1;;;::::0;29305:21;;29280:47;29288:6;29280:47;29305:21;29288:6;29280:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;29153:182::o:0;19508:145::-;9699:6;;-1:-1:-1;;;;;9699:6:0;9709:10;9699:20;9691:50;;;;-1:-1:-1;;;9691:50:0;;13524:2:1;9691:50:0;;;13506:21:1;13563:2;13543:18;;;13536:30;-1:-1:-1;;;13582:18:1;;;13575:47;13639:18;;9691:50:0;13322:341:1;9691:50:0;19598:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;25209:55:1;;;19598:47:0::1;::::0;::::1;25191:74:1::0;25308:14;;25301:22;25281:18;;;25274:50;19598:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;25164:18:1;;19598:47:0::1;25023:307:1::0;19967:125:0;20052:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;20052:32:0;;;160:74:1;20028:4:0;;20052:9;;;;;:23;;133:18:1;;20052:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15499:309::-;-1:-1:-1;;;;;15593:20:0;;15585:52;;;;-1:-1:-1;;;15585:52:0;;27821:2:1;15585:52:0;;;27803:21:1;27860:2;27840:18;;;27833:30;27899:21;27879:18;;;27872:49;27938:18;;15585:52:0;27619:343:1;15585:52:0;-1:-1:-1;;;;;15656:21:0;;15648:53;;;;-1:-1:-1;;;15648:53:0;;27821:2:1;15648:53:0;;;27803:21:1;27860:2;27840:18;;;27833:30;27899:21;27879:18;;;27872:49;27938:18;;15648:53:0;27619:343:1;15648:53:0;-1:-1:-1;;;;;15714:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;15767:33;;391:25:1;;;15767:33:0;;364:18:1;15767:33:0;;;;;;;15499:309;;;:::o;34150:818::-;34230:7;;34266;;34299:6;;-1:-1:-1;;;;;34299:6:0;34192:7;34287:19;;;:11;:19;;;;;;34192:7;;34230;34266;34287:19;;34284:217;;;34335:6;;-1:-1:-1;;;;;34335:6:0;34327:15;;;;:7;:15;;;;;;:25;-1:-1:-1;34327:25:0;:54;;-1:-1:-1;34364:6:0;;-1:-1:-1;;;;;34364:6:0;34356:15;;;;:7;:15;;;;;;:25;-1:-1:-1;34327:54:0;34323:84;;;34400:7;;34390;;:17;;;;:::i;:::-;34383:24;;;;34150:818;:::o;34323:84::-;34441:6;;-1:-1:-1;;;;;34441:6:0;34433:15;;;;:7;:15;;;;;;34422:26;;;;:::i;:::-;34482:6;;-1:-1:-1;;;;;34482:6:0;34474:15;;;;:7;:15;;;;;;34422:26;;-1:-1:-1;34463:26:0;;;;:::i;:::-;;;34284:217;34514:9;:16;:20;34511:347;;34556:7;34551:296;34573:9;:16;34569:20;;;;34551:296;;;34643:7;34619;:21;34627:9;34637:1;34627:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34627:12:0;34619:21;;;;;;;;;;;;;:31;;:66;;;34678:7;34654;:21;34662:9;34672:1;34662:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34662:12:0;34654:21;;;;;;;;;;;;;:31;34619:66;34615:96;;;34704:7;;34694;;:17;;;;:::i;:::-;34687:24;;;;;34150:818;:::o;34615:96::-;34750:7;:21;34758:9;34768:1;34758:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34758:12:0;34750:21;;;;;;;;;;;;;34740:31;;:7;:31;:::i;:::-;34730:41;;34810:7;:21;34818:9;34828:1;34818:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34818:12:0;34810:21;;;;;;;;;;;;;34800:31;;:7;:31;:::i;:::-;34790:41;-1:-1:-1;34591:3:0;;;;:::i;:::-;;;;34551:296;;;;34511:347;34892:7;;34882;;:17;;;;:::i;:::-;34872:7;:27;34868:57;;;34918:7;;34908;;:17;;;;:::i;34868:57::-;34943:17;34953:7;34943;:17;:::i;24339:2058::-;24418:4;-1:-1:-1;;;;;24443:18:0;;24435:68;;;;-1:-1:-1;;;24435:68:0;;28169:2:1;24435:68:0;;;28151:21:1;28208:2;28188:18;;;28181:30;28247:34;28227:18;;;28220:62;28318:7;28298:18;;;28291:35;28343:19;;24435:68:0;27967:401:1;24435:68:0;-1:-1:-1;;;;;24522:16:0;;24514:64;;;;-1:-1:-1;;;24514:64:0;;28575:2:1;24514:64:0;;;28557:21:1;28614:2;28594:18;;;28587:30;28653:34;28633:18;;;28626:62;28724:5;28704:18;;;28697:33;28747:19;;24514:64:0;28373:399:1;24514:64:0;24606:1;24597:6;:10;24589:64;;;;-1:-1:-1;;;24589:64:0;;28979:2:1;24589:64:0;;;28961:21:1;29018:2;28998:18;;;28991:30;29057:34;29037:18;;;29030:62;29128:11;29108:18;;;29101:39;29157:19;;24589:64:0;28777:405:1;24589:64:0;-1:-1:-1;;;;;24760:13:0;;24664:8;24760:13;;;:7;:13;;;;;;24664:8;;;;24760:13;;24756:170;;;24796:4;24790:10;;24756:170;;;-1:-1:-1;;;;;24822:11:0;;;;;;:7;:11;;;;;;;;24818:108;;;24857:4;24850:11;;24818:108;;;-1:-1:-1;24910:4:0;24818:108;24939:20;24950:4;24956:2;24939:10;:20::i;:::-;24936:614;;;24980:14;;;;24976:89;;25015:34;;-1:-1:-1;;;25015:34:0;;29389:2:1;25015:34:0;;;29371:21:1;29428:2;29408:18;;;29401:30;29467:26;29447:18;;;29440:54;29511:18;;25015:34:0;29187:348:1;24976:89:0;25083:19;;;;25079:460;;;25147:16;;;25161:1;25147:16;;;;;;;;25123:21;;25147:16;;;;;;;;;;-1:-1:-1;25147:16:0;25123:40;;25200:4;25182;25187:1;25182:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25182:23:0;;;:7;;;;;;;;;;:23;;;;25234:9;;:16;;;;;;;;:9;;;;;:14;;:16;;;;;25182:7;;25234:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25224:4;25229:1;25224:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25224:26:0;;;:7;;;;;;;;;:26;25290:9;;:37;;;;;25269:18;;25290:9;;;;;:23;;:37;;25314:6;;25322:4;;25290:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25290:37:0;;;;;;;;;;;;:::i;:::-;25328:1;25290:40;;;;;;;;:::i;:::-;;;;;;;25269:61;;25352:3;25349:175;;;25402:9;;25388:10;:23;;25380:32;;;;;;25349:175;;;25442:4;25438:86;;;25493:10;;25479;:24;;25471:33;;;;;;25104:435;;25079:460;-1:-1:-1;;;;;25595:25:0;;25562:12;25595:25;;;:19;:25;;;;;;25577:4;;25595:25;;;:52;;-1:-1:-1;;;;;;25624:23:0;;;;;;:19;:23;;;;;;;;25595:52;25592:98;;;-1:-1:-1;25673:5:0;25592:98;25706:4;25702:599;;;25732:6;;;;25731:7;:47;;;;-1:-1:-1;25759:19:0;;;;;;;25731:47;25727:557;;;25848:15;25828:17;;25817:8;;:28;;;;:::i;:::-;:46;25813:456;;;25888:28;25919:24;25937:4;25919:9;:24::i;:::-;25888:55;;25994:13;;25970:20;:37;25966:284;;26063:10;;26039:20;:34;26036:77;;-1:-1:-1;26100:10:0;;26036:77;26139:34;26152:20;26139:12;:34::i;:::-;26211:15;26200:8;:26;25966:284;25865:404;25813:456;26319:70;26337:4;26343:2;26347:6;26355:7;26364:3;26369:4;26375:13;26319:17;:70::i;:::-;26312:77;24339:2058;-1:-1:-1;;;;;;;;24339:2058:0:o;23974:357::-;24042:4;24074:6;;-1:-1:-1;;;;;24066:14:0;;;24074:6;;24066:14;;;;:43;;-1:-1:-1;24103:6:0;;-1:-1:-1;;;;;24097:12:0;;;24103:6;;24097:12;;24066:43;:79;;;;-1:-1:-1;24139:6:0;;-1:-1:-1;;;;;24139:6:0;24126:9;:19;;24066:79;:118;;;;-1:-1:-1;;;;;;24163:21:0;;;;;;:17;:21;;;;;;;;24162:22;24066:118;:159;;;;-1:-1:-1;;;;;;24202:23:0;;;;;;:17;:23;;;;;;;;24201:24;24066:159;:186;;;;-1:-1:-1;;;;;;24242:10:0;;8465:42;24242:10;;24066:186;:219;;;;-1:-1:-1;;;;;;24269:16:0;;;;24066:219;:257;;;;-1:-1:-1;;;;;;24302:21:0;;24318:4;24302:21;;24059:264;23974:357;-1:-1:-1;;;23974:357:0:o;26405:1787::-;9593:6;:13;;-1:-1:-1;;9593:13:0;9602:4;9593:13;;;26488:30:::1;::::0;;::::1;::::0;::::1;::::0;;26511:7:::1;26488:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;::::1;::::0;;;;;;26529:56:::1;;26567:7;;;26529:56;26620:4;26600:26;::::0;;;:11:::1;:26;::::0;;;;;;;26635:9:::1;::::0;-1:-1:-1;;;;;26635:9:0::1;26600:46:::0;;;;;;;;-1:-1:-1;;26600:67:0::1;26597:165;;26704:4;26684:26;::::0;;;:11:::1;:26;::::0;;;;;;;26719:9:::1;::::0;-1:-1:-1;;;;;26719:9:0::1;26684:46:::0;;;;;;;-1:-1:-1;;26684:66:0;;26597:165:::1;26774:17;26855:1;26839:6;:12;;;26795:56;;26819:6;:16;;;26796:39;;:20;:39;;;;:::i;:::-;26795:56;;;;:::i;:::-;26794:62;;;;:::i;:::-;26774:82:::0;-1:-1:-1;26867:15:0::1;26885:32;26774:82:::0;26885:20;:32:::1;:::i;:::-;26962:16;::::0;;26976:1:::1;26962:16:::0;;;;;::::1;::::0;;26867:50;;-1:-1:-1;26938:21:0::1;::::0;26962:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26962:16:0::1;26938:40;;27007:4;26989;26994:1;26989:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26989:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;27033:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;26989:7;;27033:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27023:4;27028:1;27023:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27023:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;27062:9:::1;::::0;:186:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;27137:7;;27062:9:::1;::::0;27175:4;;27202::::1;::::0;27222:15:::1;::::0;27062:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;27282:21:0::1;::::0;-1:-1:-1;27261:18:0::1;::::0;-1:-1:-1;27368:7:0;;-1:-1:-1;27342:22:0::1;27355:9:::0;27282:21;27342:22:::1;:::i;:::-;27341:34;;;;:::i;:::-;27314:61:::0;-1:-1:-1;27392:13:0;;27388:328:::1;;27422:9;::::0;:222:::1;::::0;;;;27499:4:::1;27422:222;::::0;::::1;23668:34:1::0;23718:18;;;23711:34;;;27422:9:0::1;23761:18:1::0;;;23754:34;;;23804:18;;;23797:34;8465:42:0::1;23847:19:1::0;;;23840:44;27614:15:0::1;23900:19:1::0;;;23893:35;-1:-1:-1;;;;;27422:9:0;;::::1;::::0;:25:::1;::::0;27455:16;;23579:19:1;;27422:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;27664:40:0::1;::::0;;31680:25:1;;;31736:2;31721:18;;31714:34;;;27664:40:0::1;::::0;-1:-1:-1;31653:18:1;27664:40:0::1;;;;;;;27388:328;27728:30;27742:16:::0;27728:30;::::1;:::i;:::-;;;27785:6;:16;;;27769:6;:12;;:32;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;27877:12:::1;::::0;::::1;::::0;27855:18:::1;::::0;::::1;::::0;27812:26:::1;::::0;-1:-1:-1;27841:48:0;;::::1;::::0;27842:31:::1;::::0;::::1;:10:::0;:31:::1;:::i;:::-;27841:48;;;;:::i;:::-;27812:77:::0;-1:-1:-1;27900:24:0::1;27927:31;27812:77:::0;27927:10;:31:::1;:::i;:::-;27973:18;::::0;::::1;::::0;27900:58;;-1:-1:-1;27973:22:0::1;;::::0;27969:105:::1;;28012:23:::0;;:50:::1;::::0;-1:-1:-1;;;;;28012:23:0;;::::1;::::0;:50;::::1;;;::::0;28045:16;;28012:23:::1;:50:::0;:23;:50;28045:16;28012:23;:50;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27969:105;28088:16;::::0;::::1;::::0;:20:::1;;::::0;28084:101:::1;;28125:11;:21:::0;:48:::1;::::0;-1:-1:-1;;;;;28125:21:0;;::::1;::::0;:48;::::1;;;::::0;28156:16;;28125:21:::1;:48:::0;:21;:48;28156:16;28125:21;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28084:101;26477:1715;;;;;;;;9617:1;-1:-1:-1::0;9629:6:0;:14;;-1:-1:-1;;9629:14:0;;;26405:1787::o;30471:1006::-;30635:16;;30613:4;;30635:16;;;;;30630:221;;30668:28;30687:4;30693:2;30668:18;:28::i;:::-;30716:16;;;;;;;30715:17;:41;;;;;30736:20;30747:4;30753:2;30736:10;:20::i;:::-;30711:129;;;30777:47;;-1:-1:-1;;;30777:47:0;;31961:2:1;30777:47:0;;;31943:21:1;32000:2;31980:18;;;31973:30;32039:34;32019:18;;;32012:62;32110:7;32090:18;;;32083:35;32135:19;;30777:47:0;31759:401:1;30711:129:0;30863:25;30891:64;30902:4;30908:2;30912:7;30921;30930:3;30935:4;30941:13;30891:10;:64::i;:::-;31000:14;;;;-1:-1:-1;;;;;30984:13:0;;;;;;:7;:13;;;;;;30863:92;;-1:-1:-1;30984:30:0;;;:::i;:::-;-1:-1:-1;;;;;30968:13:0;;;;;;;:7;:13;;;;;;:46;;;;31053:22;;;;31039:11;;;;;;;;;;:36;;31053:22;31039:36;:::i;:::-;-1:-1:-1;;;;;31025:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;31092:17;;;;;:11;:17;;;;;;;31088:89;;;-1:-1:-1;;;;;31142:13:0;;;;;;:7;:13;;;;;;:23;;31158:7;;31142:23;:::i;:::-;-1:-1:-1;;;;;31126:13:0;;;;;;:7;:13;;;;;:39;31088:89;-1:-1:-1;;;;;31191:15:0;;;;;;:11;:15;;;;;;;;31187:100;;;31251:22;;-1:-1:-1;;;;;31237:11:0;;31251:22;31237:11;;;:7;:11;;;;;;:36;;31251:22;31237:36;:::i;:::-;-1:-1:-1;;;;;31223:11:0;;;;;;:7;:11;;;;;:50;31187:100;31317:1;31303:6;:11;;;:15;:34;;;;31336:1;31322:6;:11;;;:15;31303:34;31299:89;;;31365:6;:11;;;31354:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;31299:89:0;31420:2;-1:-1:-1;;;;;31405:42:0;31414:4;-1:-1:-1;;;;;31405:42:0;;31424:6;:22;;;31405:42;;;;391:25:1;;379:2;364:18;;245:177;31405:42:0;;;;;;;;-1:-1:-1;31465:4:0;;30471:1006;-1:-1:-1;;;;;;;;30471:1006:0:o;28200:508::-;28282:16;;;;;;;28281:17;28273:65;;;;-1:-1:-1;;;28273:65:0;;32367:2:1;28273:65:0;;;32349:21:1;32406:2;32386:18;;;32379:30;32445:34;32425:18;;;32418:62;32516:5;32496:18;;;32489:33;32539:19;;28273:65:0;32165:399:1;28273:65:0;28354:20;28365:4;28371:2;28354:10;:20::i;:::-;28353:21;:37;;;;-1:-1:-1;28384:6:0;;-1:-1:-1;;;;;28378:12:0;;;28384:6;;28378:12;28353:37;28349:352;;;-1:-1:-1;;;;;28407:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;28407:30:0;28433:4;28407:30;;;28452:16;:23;;-1:-1:-1;;28452:23:0;28407:30;28452:23;;;;;28501:9;;;;28490:107;;28545:9;:36;;;;28575:4;28545:36;;;;;28490:107;28611:19;:26;;-1:-1:-1;;28611:26:0;;;;;28657:32;;-1:-1:-1;4448:41:1;;28657:32:0;;4436:2:1;4421:18;28657:32:0;;;;;;;28200:508;;:::o;31485:2657::-;31620:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31620:18:0;31651:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31651:25:0;31708:10;:8;:10::i;:::-;31687:18;;;:31;;;31748:28;;:7;:28;:::i;:::-;31731:14;;;:45;31793:20;31804:4;31810:2;31793:10;:20::i;:::-;31789:315;;;31861:9;;:38;;;;;-1:-1:-1;;;;;32850:15:1;;;31861:38:0;;;32832:34:1;32902:15;;;32882:18;;;32875:43;32934:18;;;32927:34;;;31830:12:0;;31861:9;;;;;:19;;32744:18:1;;31861:38:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;31861:38:0;;;;;;;;-1:-1:-1;;31861:38:0;;;;;;;;;;;;:::i;:::-;;;31857:164;;31997:8;;;31857:164;31950:5;-1:-1:-1;32041:7:0;32037:56;;32069:8;;;32037:56;31815:289;31789:315;32119:7;32116:1285;;;32143:22;;;8359:5;32299:553;;;;32345:10;:18;;;;;;-1:-1:-1;32444:20:0;;;;;;-1:-1:-1;32396:15:0;;;;;;-1:-1:-1;32299:553:0;;;32490:3;32486:366;;;32531:9;:17;;;;;;-1:-1:-1;32628:19:0;;;;;;-1:-1:-1;32581:14:0;;;;;;-1:-1:-1;32486:366:0;;;32705:14;:22;;;;;;-1:-1:-1;32812:24:0;;;;;;-1:-1:-1;32760:19:0;;;;;;-1:-1:-1;32486:366:0;32911:7;32883:24;32893:14;32883:7;:24;:::i;:::-;32882:36;;;;:::i;:::-;32868:11;;;:50;32974:7;32949:21;32959:11;32949:7;:21;:::i;:::-;32948:33;;;;:::i;:::-;32933:12;;;:48;33037:7;33012:21;33022:11;33012:7;:21;:::i;:::-;33011:33;;;;:::i;:::-;32996:12;;;:48;;;33109:12;;;;33095:11;;;;:26;;33109:12;33095:26;:::i;:::-;:41;;;;:::i;:::-;33084:53;;:7;:53;:::i;:::-;33059:78;;33182:18;;;;33168:11;;;;:32;;33182:18;33168:32;:::i;:::-;33154:11;;;:46;-1:-1:-1;32116:1285:0;;-1:-1:-1;;;32116:1285:0;;33247:1;33233:11;;;:15;;;33263:12;;;:16;;;33294:12;;;:16;;;33325:32;;;33374:11;;;:15;32116:1285;33417:12;;;;:16;33413:289;;33491:6;:18;;;33476:6;:12;;;:33;;;;:::i;:::-;33466:4;33450:22;;;;:7;:22;;;;;:59;;:22;;;:59;;;;;:::i;:::-;;;;-1:-1:-1;;33547:4:0;33527:26;;;;:11;:26;;;;;;;;33524:104;;;33600:12;;;;;33590:4;33574:22;;;;:7;:22;;;;;:38;;33600:12;;33574:22;;:38;;33600:12;;33574:38;:::i;:::-;;;;-1:-1:-1;;33524:104:0;33670:4;-1:-1:-1;;;;;33647:43:0;33656:4;-1:-1:-1;;;;;33647:43:0;;33677:6;:12;;;33647:43;;;;391:25:1;;379:2;364:18;;245:177;33647:43:0;;;;;;;;33413:289;33718:12;;;;:16;33714:253;;33783:6;:18;;;33768:6;:12;;;:33;;;;:::i;:::-;8465:42;33751:13;;;;:7;:13;;;:50;;:13;;;:50;;;;;:::i;:::-;;;;-1:-1:-1;;8465:42:0;33819:17;;:11;:17;;;;;;33816:86;;;33874:12;;;;8465:42;33857:13;;;;:7;:13;;;:29;;:13;;;:29;;33874:12;;33857:29;:::i;:::-;;;;-1:-1:-1;;33816:86:0;8465:42;-1:-1:-1;;;;;33921:34:0;33930:4;-1:-1:-1;;;;;33921:34:0;;33942:6;:12;;;33921:34;;;;391:25:1;;379:2;364:18;;245:177;33921:34:0;;;;;;;;33714:253;34090:6;:18;;;34075:6;:12;;;:33;;;;:::i;:::-;34052:6;:18;;;34037:6;:12;;;:33;;;;:::i;:::-;34022:6;:11;;;:49;;;;:::i;:::-;:87;;;;:::i;:::-;34004:6;:14;;;:106;;;;:::i;:::-;33979:22;;;:131;:22;31485:2657;-1:-1:-1;;;;;;;;31485:2657:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;427:118:1;513:5;506:13;499:21;492:5;489:32;479:60;;535:1;532;525:12;550:376;612:6;620;673:2;661:9;652:7;648:23;644:32;641:52;;;689:1;686;679:12;641:52;728:9;715:23;747:28;769:5;747:28;:::i;:::-;794:5;-1:-1:-1;851:2:1;836:18;;823:32;864:30;823:32;864:30;:::i;:::-;913:7;903:17;;;550:376;;;;;:::o;931:184::-;983:77;980:1;973:88;1080:4;1077:1;1070:15;1104:4;1101:1;1094:15;1120:334;1191:2;1185:9;1247:2;1237:13;;-1:-1:-1;;1233:86:1;1221:99;;1350:18;1335:34;;1371:22;;;1332:62;1329:88;;;1397:18;;:::i;:::-;1433:2;1426:22;1120:334;;-1:-1:-1;1120:334:1:o;1459:183::-;1519:4;1552:18;1544:6;1541:30;1538:56;;;1574:18;;:::i;:::-;-1:-1:-1;1619:1:1;1615:14;1631:4;1611:25;;1459:183::o;1647:154::-;-1:-1:-1;;;;;1726:5:1;1722:54;1715:5;1712:65;1702:93;;1791:1;1788;1781:12;1806:737;1860:5;1913:3;1906:4;1898:6;1894:17;1890:27;1880:55;;1931:1;1928;1921:12;1880:55;1967:6;1954:20;1993:4;2017:60;2033:43;2073:2;2033:43;:::i;:::-;2017:60;:::i;:::-;2111:15;;;2197:1;2193:10;;;;2181:23;;2177:32;;;2142:12;;;;2221:15;;;2218:35;;;2249:1;2246;2239:12;2218:35;2285:2;2277:6;2273:15;2297:217;2313:6;2308:3;2305:15;2297:217;;;2393:3;2380:17;2410:31;2435:5;2410:31;:::i;:::-;2454:18;;2492:12;;;;2330;;2297:217;;;-1:-1:-1;2532:5:1;1806:737;-1:-1:-1;;;;;;1806:737:1:o;2548:477::-;2638:6;2646;2699:2;2687:9;2678:7;2674:23;2670:32;2667:52;;;2715:1;2712;2705:12;2667:52;2755:9;2742:23;2788:18;2780:6;2777:30;2774:50;;;2820:1;2817;2810:12;2774:50;2843:61;2896:7;2887:6;2876:9;2872:22;2843:61;:::i;:::-;2833:71;;;2954:2;2943:9;2939:18;2926:32;2967:28;2989:5;2967:28;:::i;3030:258::-;3102:1;3112:113;3126:6;3123:1;3120:13;3112:113;;;3202:11;;;3196:18;3183:11;;;3176:39;3148:2;3141:10;3112:113;;;3243:6;3240:1;3237:13;3234:48;;;-1:-1:-1;;3278:1:1;3260:16;;3253:27;3030:258::o;3293:442::-;3442:2;3431:9;3424:21;3405:4;3474:6;3468:13;3517:6;3512:2;3501:9;3497:18;3490:34;3533:66;3592:6;3587:2;3576:9;3572:18;3567:2;3559:6;3555:15;3533:66;:::i;:::-;3651:2;3639:15;-1:-1:-1;;3635:88:1;3620:104;;;;3726:2;3616:113;;3293:442;-1:-1:-1;;3293:442:1:o;3988:315::-;4056:6;4064;4117:2;4105:9;4096:7;4092:23;4088:32;4085:52;;;4133:1;4130;4123:12;4085:52;4172:9;4159:23;4191:31;4216:5;4191:31;:::i;:::-;4241:5;4293:2;4278:18;;;;4265:32;;-1:-1:-1;;;3988:315:1:o;4500:382::-;4565:6;4573;4626:2;4614:9;4605:7;4601:23;4597:32;4594:52;;;4642:1;4639;4632:12;4594:52;4681:9;4668:23;4700:31;4725:5;4700:31;:::i;4887:456::-;4964:6;4972;4980;5033:2;5021:9;5012:7;5008:23;5004:32;5001:52;;;5049:1;5046;5039:12;5001:52;5088:9;5075:23;5107:31;5132:5;5107:31;:::i;:::-;5157:5;-1:-1:-1;5214:2:1;5199:18;;5186:32;5227:33;5186:32;5227:33;:::i;:::-;4887:456;;5279:7;;-1:-1:-1;;;5333:2:1;5318:18;;;;5305:32;;4887:456::o;5348:662::-;5402:5;5455:3;5448:4;5440:6;5436:17;5432:27;5422:55;;5473:1;5470;5463:12;5422:55;5509:6;5496:20;5535:4;5559:60;5575:43;5615:2;5575:43;:::i;5559:60::-;5653:15;;;5739:1;5735:10;;;;5723:23;;5719:32;;;5684:12;;;;5763:15;;;5760:35;;;5791:1;5788;5781:12;5760:35;5827:2;5819:6;5815:15;5839:142;5855:6;5850:3;5847:15;5839:142;;;5921:17;;5909:30;;5959:12;;;;5872;;5839:142;;6015:595;6133:6;6141;6194:2;6182:9;6173:7;6169:23;6165:32;6162:52;;;6210:1;6207;6200:12;6162:52;6250:9;6237:23;6279:18;6320:2;6312:6;6309:14;6306:34;;;6336:1;6333;6326:12;6306:34;6359:61;6412:7;6403:6;6392:9;6388:22;6359:61;:::i;:::-;6349:71;;6473:2;6462:9;6458:18;6445:32;6429:48;;6502:2;6492:8;6489:16;6486:36;;;6518:1;6515;6508:12;6486:36;;6541:63;6596:7;6585:8;6574:9;6570:24;6541:63;:::i;:::-;6531:73;;;6015:595;;;;;:::o;6615:159::-;6682:20;;6742:6;6731:18;;6721:29;;6711:57;;6764:1;6761;6754:12;6711:57;6615:159;;;:::o;6779:474::-;6869:6;6877;6885;6893;6901;6954:3;6942:9;6933:7;6929:23;6925:33;6922:53;;;6971:1;6968;6961:12;6922:53;6994:28;7012:9;6994:28;:::i;:::-;6984:38;;7041:37;7074:2;7063:9;7059:18;7041:37;:::i;:::-;7031:47;;7097:37;7130:2;7119:9;7115:18;7097:37;:::i;:::-;7087:47;;7153:37;7186:2;7175:9;7171:18;7153:37;:::i;:::-;7143:47;;7209:38;7242:3;7231:9;7227:19;7209:38;:::i;:::-;7199:48;;6779:474;;;;;;;;:::o;7258:180::-;7317:6;7370:2;7358:9;7349:7;7345:23;7341:32;7338:52;;;7386:1;7383;7376:12;7338:52;-1:-1:-1;7409:23:1;;7258:180;-1:-1:-1;7258:180:1:o;7632:247::-;7691:6;7744:2;7732:9;7723:7;7719:23;7715:32;7712:52;;;7760:1;7757;7750:12;7712:52;7799:9;7786:23;7818:31;7843:5;7818:31;:::i;7884:454::-;7979:6;7987;7995;8003;8011;8064:3;8052:9;8043:7;8039:23;8035:33;8032:53;;;8081:1;8078;8071:12;8032:53;-1:-1:-1;;8104:23:1;;;8174:2;8159:18;;8146:32;;-1:-1:-1;8225:2:1;8210:18;;8197:32;;8276:2;8261:18;;8248:32;;-1:-1:-1;8327:3:1;8312:19;8299:33;;-1:-1:-1;7884:454:1;-1:-1:-1;7884:454:1:o;8343:957::-;8504:6;8512;8520;8528;8581:3;8569:9;8560:7;8556:23;8552:33;8549:53;;;8598:1;8595;8588:12;8549:53;8638:9;8625:23;8667:18;8708:2;8700:6;8697:14;8694:34;;;8724:1;8721;8714:12;8694:34;8747:61;8800:7;8791:6;8780:9;8776:22;8747:61;:::i;:::-;8737:71;;8861:2;8850:9;8846:18;8833:32;8817:48;;8890:2;8880:8;8877:16;8874:36;;;8906:1;8903;8896:12;8874:36;8929:63;8984:7;8973:8;8962:9;8958:24;8929:63;:::i;:::-;8919:73;;9045:2;9034:9;9030:18;9017:32;9001:48;;9074:2;9064:8;9061:16;9058:36;;;9090:1;9087;9080:12;9058:36;;9113:63;9168:7;9157:8;9146:9;9142:24;9113:63;:::i;:::-;9103:73;;;9226:2;9215:9;9211:18;9198:32;9239:31;9264:5;9239:31;:::i;:::-;8343:957;;;;-1:-1:-1;8343:957:1;;-1:-1:-1;;8343:957:1:o;9305:241::-;9361:6;9414:2;9402:9;9393:7;9389:23;9385:32;9382:52;;;9430:1;9427;9420:12;9382:52;9469:9;9456:23;9488:28;9510:5;9488:28;:::i;10158:328::-;10232:6;10240;10248;10301:2;10289:9;10280:7;10276:23;10272:32;10269:52;;;10317:1;10314;10307:12;10269:52;10340:28;10358:9;10340:28;:::i;:::-;10330:38;;10387:37;10420:2;10409:9;10405:18;10387:37;:::i;:::-;10377:47;;10443:37;10476:2;10465:9;10461:18;10443:37;:::i;:::-;10433:47;;10158:328;;;;;:::o;10491:385::-;10577:6;10585;10593;10601;10654:3;10642:9;10633:7;10629:23;10625:33;10622:53;;;10671:1;10668;10661:12;10622:53;-1:-1:-1;;10694:23:1;;;10764:2;10749:18;;10736:32;;-1:-1:-1;10815:2:1;10800:18;;10787:32;;10866:2;10851:18;10838:32;;-1:-1:-1;10491:385:1;-1:-1:-1;10491:385:1:o;11330:404::-;11414:6;11422;11475:2;11463:9;11454:7;11450:23;11446:32;11443:52;;;11491:1;11488;11481:12;11443:52;11530:9;11517:23;11549:31;11574:5;11549:31;:::i;:::-;11599:5;-1:-1:-1;11656:2:1;11641:18;;11628:32;11669:33;11628:32;11669:33;:::i;12132:821::-;12284:6;12292;12300;12353:2;12341:9;12332:7;12328:23;12324:32;12321:52;;;12369:1;12366;12359:12;12321:52;12409:9;12396:23;12438:18;12479:2;12471:6;12468:14;12465:34;;;12495:1;12492;12485:12;12465:34;12518:61;12571:7;12562:6;12551:9;12547:22;12518:61;:::i;:::-;12508:71;;12632:2;12621:9;12617:18;12604:32;12588:48;;12661:2;12651:8;12648:16;12645:36;;;12677:1;12674;12667:12;12645:36;12700:63;12755:7;12744:8;12733:9;12729:24;12700:63;:::i;:::-;12690:73;;12816:2;12805:9;12801:18;12788:32;12772:48;;12845:2;12835:8;12832:16;12829:36;;;12861:1;12858;12851:12;12829:36;;12884:63;12939:7;12928:8;12917:9;12913:24;12884:63;:::i;:::-;12874:73;;;12132:821;;;;;:::o;13941:484::-;13994:3;14032:5;14026:12;14059:6;14054:3;14047:19;14085:4;14114:2;14109:3;14105:12;14098:19;;14151:2;14144:5;14140:14;14172:1;14182:218;14196:6;14193:1;14190:13;14182:218;;;14261:13;;-1:-1:-1;;;;;14257:62:1;14245:75;;14340:12;;;;14375:15;;;;14218:1;14211:9;14182:218;;;-1:-1:-1;14416:3:1;;13941:484;-1:-1:-1;;;;;13941:484:1:o;14430:342::-;14631:2;14620:9;14613:21;14594:4;14651:56;14703:2;14692:9;14688:18;14680:6;14651:56;:::i;:::-;14643:64;;14757:6;14750:14;14743:22;14738:2;14727:9;14723:18;14716:50;14430:342;;;;;:::o;14777:437::-;14856:1;14852:12;;;;14899;;;14920:61;;14974:4;14966:6;14962:17;14952:27;;14920:61;15027:2;15019:6;15016:14;14996:18;14993:38;14990:218;;;15064:77;15061:1;15054:88;15165:4;15162:1;15155:15;15193:4;15190:1;15183:15;14990:218;;14777:437;;;:::o;15933:184::-;15985:77;15982:1;15975:88;16082:4;16079:1;16072:15;16106:4;16103:1;16096:15;16122:228;16162:7;16288:1;-1:-1:-1;;16216:74:1;16213:1;16210:81;16205:1;16198:9;16191:17;16187:105;16184:131;;;16295:18;;:::i;:::-;-1:-1:-1;16335:9:1;;16122:228::o;16355:184::-;16407:77;16404:1;16397:88;16504:4;16501:1;16494:15;16528:4;16525:1;16518:15;16544:184;16596:77;16593:1;16586:88;16693:4;16690:1;16683:15;16717:4;16714:1;16707:15;16733:125;16773:4;16801:1;16798;16795:8;16792:34;;;16806:18;;:::i;:::-;-1:-1:-1;16843:9:1;;16733:125::o;16863:195::-;16902:3;-1:-1:-1;;16926:5:1;16923:77;16920:103;;;17003:18;;:::i;:::-;-1:-1:-1;17050:1:1;17039:13;;16863:195::o;17413:482::-;17502:1;17545:5;17502:1;17559:330;17580:7;17570:8;17567:21;17559:330;;;17699:4;-1:-1:-1;;17627:77:1;17621:4;17618:87;17615:113;;;17708:18;;:::i;:::-;17758:7;17748:8;17744:22;17741:55;;;17778:16;;;;17741:55;17857:22;;;;17817:15;;;;17559:330;;;17563:3;17413:482;;;;;:::o;17900:866::-;17949:5;17979:8;17969:80;;-1:-1:-1;18020:1:1;18034:5;;17969:80;18068:4;18058:76;;-1:-1:-1;18105:1:1;18119:5;;18058:76;18150:4;18168:1;18163:59;;;;18236:1;18231:130;;;;18143:218;;18163:59;18193:1;18184:10;;18207:5;;;18231:130;18268:3;18258:8;18255:17;18252:43;;;18275:18;;:::i;:::-;-1:-1:-1;;18331:1:1;18317:16;;18346:5;;18143:218;;18445:2;18435:8;18432:16;18426:3;18420:4;18417:13;18413:36;18407:2;18397:8;18394:16;18389:2;18383:4;18380:12;18376:35;18373:77;18370:159;;;-1:-1:-1;18482:19:1;;;18514:5;;18370:159;18561:34;18586:8;18580:4;18561:34;:::i;:::-;18691:6;-1:-1:-1;;18619:79:1;18610:7;18607:92;18604:118;;;18702:18;;:::i;:::-;18740:20;;17900:866;-1:-1:-1;;;17900:866:1:o;18771:140::-;18829:5;18858:47;18899:4;18889:8;18885:19;18879:4;18858:47;:::i;18916:175::-;18953:3;18997:4;18990:5;18986:16;19026:4;19017:7;19014:17;19011:43;;;19034:18;;:::i;:::-;19083:1;19070:15;;18916:175;-1:-1:-1;;18916:175:1:o;19096:224::-;19135:3;19163:6;19196:2;19193:1;19189:10;19226:2;19223:1;19219:10;19257:3;19253:2;19249:12;19244:3;19241:21;19238:47;;;19265:18;;:::i;:::-;19301:13;;19096:224;-1:-1:-1;;;;19096:224:1:o;19325:217::-;19364:4;19393:6;19449:10;;;;19419;;19471:12;;;19468:38;;;19486:18;;:::i;:::-;19523:13;;19325:217;-1:-1:-1;;;19325:217:1:o;19958:184::-;20010:77;20007:1;20000:88;20107:4;20104:1;20097:15;20131:4;20128:1;20121:15;20147:120;20187:1;20213;20203:35;;20218:18;;:::i;:::-;-1:-1:-1;20252:9:1;;20147:120::o;20930:556::-;20984:5;21037:3;21030:4;21022:6;21018:17;21014:27;21004:55;;21055:1;21052;21045:12;21004:55;21084:6;21078:13;21110:18;21106:2;21103:26;21100:52;;;21132:18;;:::i;:::-;21176:114;21284:4;-1:-1:-1;;21208:4:1;21204:2;21200:13;21196:86;21192:97;21176:114;:::i;:::-;21315:2;21306:7;21299:19;21361:3;21354:4;21349:2;21341:6;21337:15;21333:26;21330:35;21327:55;;;21378:1;21375;21368:12;21327:55;21391:64;21452:2;21445:4;21436:7;21432:18;21425:4;21417:6;21413:17;21391:64;:::i;21491:774::-;21606:6;21614;21622;21630;21683:3;21671:9;21662:7;21658:23;21654:33;21651:53;;;21700:1;21697;21690:12;21651:53;21733:9;21727:16;21762:18;21803:2;21795:6;21792:14;21789:34;;;21819:1;21816;21809:12;21789:34;21842:61;21895:7;21886:6;21875:9;21871:22;21842:61;:::i;:::-;21832:71;;21949:2;21938:9;21934:18;21928:25;21912:41;;21978:2;21968:8;21965:16;21962:36;;;21994:1;21991;21984:12;21962:36;;22017:63;22072:7;22061:8;22050:9;22046:24;22017:63;:::i;:::-;22007:73;;;22120:2;22109:9;22105:18;22099:25;22089:35;;22167:2;22156:9;22152:18;22146:25;22211:4;22204:5;22200:16;22193:5;22190:27;22180:55;;22231:1;22228;22221:12;22599:112;22631:1;22657;22647:35;;22662:18;;:::i;:::-;-1:-1:-1;22696:9:1;;22599:112::o;22716:251::-;22786:6;22839:2;22827:9;22818:7;22814:23;22810:32;22807:52;;;22855:1;22852;22845:12;22807:52;22887:9;22881:16;22906:31;22931:5;22906:31;:::i;23939:306::-;24027:6;24035;24043;24096:2;24084:9;24075:7;24071:23;24067:32;24064:52;;;24112:1;24109;24102:12;24064:52;24141:9;24135:16;24125:26;;24191:2;24180:9;24176:18;24170:25;24160:35;;24235:2;24224:9;24220:18;24214:25;24204:35;;23939:306;;;;;:::o;26876:131::-;26936:5;26965:36;26992:8;26986:4;26965:36;:::i;27369:245::-;27436:6;27489:2;27477:9;27468:7;27464:23;27460:32;27457:52;;;27505:1;27502;27495:12;27457:52;27537:9;27531:16;27556:28;27578:5;27556:28;:::i;29540:332::-;29747:6;29736:9;29729:25;29790:2;29785;29774:9;29770:18;29763:30;29710:4;29810:56;29862:2;29851:9;29847:18;29839:6;29810:56;:::i;29877:881::-;29972:6;30003:2;30046;30034:9;30025:7;30021:23;30017:32;30014:52;;;30062:1;30059;30052:12;30014:52;30095:9;30089:16;30128:18;30120:6;30117:30;30114:50;;;30160:1;30157;30150:12;30114:50;30183:22;;30236:4;30228:13;;30224:27;-1:-1:-1;30214:55:1;;30265:1;30262;30255:12;30214:55;30294:2;30288:9;30317:60;30333:43;30373:2;30333:43;:::i;30317:60::-;30411:15;;;30493:1;30489:10;;;;30481:19;;30477:28;;;30442:12;;;;30517:19;;;30514:39;;;30549:1;30546;30539:12;30514:39;30573:11;;;;30593:135;30609:6;30604:3;30601:15;30593:135;;;30675:10;;30663:23;;30626:12;;;;30706;;;;30593:135;;;30747:5;29877:881;-1:-1:-1;;;;;;;29877:881:1:o;30763:128::-;30803:3;30834:1;30830:6;30827:1;30824:13;30821:39;;;30840:18;;:::i;:::-;-1:-1:-1;30876:9:1;;30763:128::o;30896:605::-;31195:6;31184:9;31177:25;31238:6;31233:2;31222:9;31218:18;31211:34;31281:3;31276:2;31265:9;31261:18;31254:31;31158:4;31302:57;31354:3;31343:9;31339:19;31331:6;31302:57;:::i;:::-;-1:-1:-1;;;;;31395:55:1;;;;31390:2;31375:18;;31368:83;-1:-1:-1;31482:3:1;31467:19;31460:35;31294:65;30896:605;-1:-1:-1;;;30896:605:1:o

Swarm Source

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