ETH Price: $3,479.32 (+4.87%)

Token

SCARDust (SCARD)
 

Overview

Max Total Supply

10,000,000,000,001 SCARD

Holders

858 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1.342281845 SCARD

Value
$0.00
0xb348e3f5a3b1974ba80e7ba447eaa23da9d0037f
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

SCARDust token contract has migrated to 0x2F6Ad7743924B1901a0771746152dde44C5F11DE.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SCARDust

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 2021-12-22
*/

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

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

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

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 quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    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;
}

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 _ag, bool _ab, bool _algo) external;
    function setGasPriceLimit(uint256 gas) external;
    function removeSniper(address account) external;
    function getSniperAmt() external view returns (uint256);
    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 getSellCooldown() external view returns (bool, uint256);
    function setCooldownTimeEnabled(bool enabled) external;
    function setCooldownTimeDuration(uint256 time) external;
}

contract SCARDust is Context, 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 _isExcluded;
    address[] private _excluded;
    mapping (address => bool) private _liquidityHolders;

    uint256 private startingSupply = 10_000_000_000_001;

    string constant private _name = "SCARDust";
    string constant private _symbol = "SCARD";
    uint8 private _decimals = 9;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = startingSupply * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    struct CurrentFees {
        uint16 reflect;
        uint16 totalSwap;
    }

    struct Fees {
        uint16 reflect;
        uint16 marketing;
        uint16 dev;
        uint16 charity;
        uint16 totalSwap;
    }

    struct StaticValuesStruct {
        uint16 maxReflect;
        uint16 maxMarketing;
        uint16 maxCharity;
        uint16 maxDev;
        uint16 masterTaxDivisor;
    }

    struct Ratios {
        uint16 marketing;
        uint16 charity;
        uint16 dev;
        uint16 total;
    }

    CurrentFees private currentTaxes = CurrentFees({
        reflect: 0,
        totalSwap: 0
        });

    Fees public _buyTaxes = Fees({
        reflect: 100,
        marketing: 400,
        dev: 600,
        charity: 100,
        totalSwap: 1100
        });

    Fees public _sellTaxes = Fees({
        reflect: 100,
        marketing: 400,
        dev: 600,
        charity: 100,
        totalSwap: 1100
        });

    Fees public _transferTaxes = Fees({
        reflect: 100,
        marketing: 400,
        dev: 600,
        charity: 100,
        totalSwap: 1100
        });

    Ratios public _ratios = Ratios({
        marketing: 4,
        charity: 1,
        dev: 6,
        total: 11
        });

    StaticValuesStruct public staticVals = StaticValuesStruct({
        maxReflect: 800,
        maxDev: 800,
        maxMarketing: 800,
        maxCharity: 800,
        masterTaxDivisor: 10000
        });

    IRouter02 public dexRouter;
    address public lpPair;

    address public currentRouter;
    // PCS ROUTER
    address private pcsV2Router = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
    // UNI ROUTER
    address private uniswapV2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
        address payable marketing;
        address payable dev;
        address payable charity;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x19238913200bE0EEBa5A9e561D4685Fdff544F34),
        dev: payable(0x42A9acF03b571Bf77753c2fD717C834f3961b9aB),
        charity: payable(0x9C426C8ED5096E8459E1a0A7f2509F93E5DfB3a6)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;

    uint256 private _maxTxAmount = (_tTotal * 15) / 1000;
    uint256 private _maxWalletSize = (_tTotal * 25) / 1000;

    uint256 private swapThreshold = (_tTotal * 5) / 10000;
    uint256 private swapAmount = (_tTotal * 25) / 10000;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    AntiSnipe antiSnipe;

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        _rOwned[_msgSender()] = _rTotal;

        // Set the owner.
        _owner = msg.sender;

        if (block.chainid == 56 || block.chainid == 97) {
            currentRouter = pcsV2Router;
        } else if (block.chainid == 1 || block.chainid == 4) {
            currentRouter = uniswapV2Router;
        }

        dexRouter = IRouter02(currentRouter);
        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;

        _approve(msg.sender, currentRouter, type(uint256).max);
        _approve(address(this), currentRouter, type(uint256).max);

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

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    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 owner() public view returns (address) {
        return _owner;
    }

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

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

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external view override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure 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(_msgSender(), recipient, amount);
        return true;
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), 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 increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

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

    function setNewRouter(address newRouter) 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 changeRouterContingency(address router) external onlyOwner {
        require(!_hasLiqBeenAdded);
        currentRouter = router;
    }

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

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

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

    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, "Liquidity is already in.");
        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 getSniperAmt() public view returns (uint256) {
        return antiSnipe.getSniperAmt();
    }

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

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

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75, "Too low.");
        antiSnipe.setGasPriceLimit(gas);
    }

    function getSellCooldown() public view returns (bool, uint256) {
        return antiSnipe.getSellCooldown();
    }

    function setCooldownTimeEnabled(bool enabled) external onlyOwner {
        antiSnipe.setCooldownTimeEnabled(enabled);
    }

    function setCooldownTimeDuration(uint256 time) external onlyOwner {
        require(time <= 5 minutes);
        antiSnipe.setCooldownTimeDuration(time);
    }

    function setTaxesBuy(uint16 reflect, uint16 marketing, uint16 charity, uint16 dev) external onlyOwner {
        require(reflect <= staticVals.maxReflect
                && dev <= staticVals.maxDev
                && charity <= staticVals.maxCharity
                && marketing <= staticVals.maxMarketing);
        uint16 check = reflect + marketing + charity + dev;
        require(check <= 2500);
        _buyTaxes.reflect = reflect;
        _buyTaxes.marketing = marketing;
        _buyTaxes.charity = charity;
        _buyTaxes.dev = dev;
        _buyTaxes.totalSwap = check - reflect;
    }

    function setTaxesSell(uint16 reflect, uint16 marketing, uint16 charity, uint16 dev) external onlyOwner {
        require(reflect <= staticVals.maxReflect
                && dev <= staticVals.maxDev
                && charity <= staticVals.maxCharity
                && marketing <= staticVals.maxMarketing);
        uint16 check = reflect + marketing + charity + dev;
        require(check <= 2500);
        _sellTaxes.reflect = reflect;
        _sellTaxes.marketing = marketing;
        _sellTaxes.charity = charity;
        _sellTaxes.dev = dev;
        _sellTaxes.totalSwap = check - reflect;
    }

    function setTaxesTransfer(uint16 reflect, uint16 marketing, uint16 charity, uint16 dev) external onlyOwner {
        require(reflect <= staticVals.maxReflect
                && dev <= staticVals.maxDev
                && charity <= staticVals.maxCharity
                && marketing <= staticVals.maxMarketing);
        uint16 check = reflect + marketing + charity + dev;
        require(check <= 2500);
        _transferTaxes.reflect = reflect;
        _transferTaxes.marketing = marketing;
        _transferTaxes.charity = charity;
        _transferTaxes.dev = dev;
        _transferTaxes.totalSwap = check - reflect;
    }

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

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

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

    function getMaxTX() public view returns (uint256) {
        return _maxTxAmount / (10**_decimals);
    }

    function getMaxWallet() public view returns (uint256) {
        return _maxWalletSize / (10**_decimals);
    }

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

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

    function setContractSwapEnabled(bool _enabled) public onlyOwner {
        contractSwapEnabled = _enabled;
        emit ContractSwapEnabledUpdated(_enabled);
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != 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");
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if(lpPairs[from] || lpPairs[to]){
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }
            if(to != currentRouter && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
            }
        }

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

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

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

        if(_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            contractTokenBalance,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance;

        if (address(this).balance > 0) {
            bool success;
            (success,) = _taxWallets.charity.call{value: ((amountETH * _ratios.charity) / _ratios.total), gas: 30000}("");
            (success,) = _taxWallets.dev.call{value: ((amountETH * _ratios.dev) / _ratios.total), gas: 30000}("");
            (success,) = _taxWallets.marketing.call{value: address(this).balance, gas: 30000}("");
        }
    }

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

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

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

    function _finalizeTransfer(address from, address to, uint256 tAmount, bool takeFee) 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);

        _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.tSwap > 0) {
            _rOwned[address(this)] = _rOwned[address(this)] + (values.tSwap * _getRate());
            if(_isExcluded[address(this)])
                _tOwned[address(this)] = _tOwned[address(this)] + values.tSwap;
            emit Transfer(from, address(this), values.tSwap); // Transparency is the key to success.
        }
        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) private returns (ExtraValues memory) {
        ExtraValues memory values;
        uint256 currentRate = _getRate();

        values.rAmount = tAmount * 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) {
            if (lpPairs[to]) {
                currentTaxes.reflect = _sellTaxes.reflect;
                currentTaxes.totalSwap = _sellTaxes.totalSwap;
            } else if (lpPairs[from]) {
                currentTaxes.reflect = _buyTaxes.reflect;
                currentTaxes.totalSwap = _buyTaxes.totalSwap;
            } else {
                currentTaxes.reflect = _transferTaxes.reflect;
                currentTaxes.totalSwap = _transferTaxes.totalSwap;
            }

            values.tFee = (tAmount * currentTaxes.reflect) / staticVals.masterTaxDivisor;
            values.tSwap = (tAmount * currentTaxes.totalSwap) / staticVals.masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tSwap);

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

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

    function _getRate() internal view returns(uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if(_isExcluded[lpPair]) {
            rSupply -= _rOwned[lpPair];
            tSupply -= _tOwned[lpPair];
            if (_rOwned[lpPair] > rSupply || _tOwned[lpPair] > tSupply) return _rTotal / _tTotal;
        }
        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":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"marketing","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"charity","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":"marketing","type":"uint16"},{"internalType":"uint16","name":"charity","type":"uint16"},{"internalType":"uint16","name":"dev","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":"marketing","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"charity","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":"dev","type":"address"},{"internalType":"address payable","name":"charity","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"charity","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":[{"internalType":"address","name":"router","type":"address"}],"name":"changeRouterContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellCooldown","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSniperAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"time","type":"uint256"}],"name":"setCooldownTimeDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setCooldownTimeEnabled","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":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","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":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiGas","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"},{"internalType":"bool","name":"_algo","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"charity","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"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"charity","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"charity","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"charity","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"charity","type":"address"},{"internalType":"address payable","name":"dev","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staticVals","outputs":[{"internalType":"uint16","name":"maxReflect","type":"uint16"},{"internalType":"uint16","name":"maxMarketing","type":"uint16"},{"internalType":"uint16","name":"maxCharity","type":"uint16"},{"internalType":"uint16","name":"maxDev","type":"uint16"},{"internalType":"uint16","name":"masterTaxDivisor","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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"}]

608060405260006004556509184e72a001600a908155600b805460ff191660099081179091556200003091620008c7565b600a546200003f9190620008df565b600c819055620000529060001962000917565b62000060906000196200092e565b600d556040805180820182526000808252602091820152600e805463ffffffff19169055815160a080820184526064808352610190838501819052610258848701819052606080860184905261044c6080968701819052600f80546001600160501b031990811669044c006402580190006490811783558b51808a018d52888152808c01889052808d018790528086018990528a01849052601080548316821790558b51808a018d52888152808c0197909752868c019590955285840196909652938701526011805485169092179091558651808601885260048152600181880152600681890152600b90820152601280546001600160401b031916660b00060001000417905586519384018752610320808552848701819052848801819052848201526127109390940192909252601380549091166927100320032003200320179055601780547310ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b03199182161790915560188054737a250d5630b4cf539739df2c5dacb4c659f2488d908316179055845192830185527319238913200be0eeba5a9e561d4685fdff544f348084527342a9acf03b571bf77753c2fd717c834f3961b9ab948401859052739c426c8ed5096e8459e1a0a7f2509f93e5dfb3a693909501839052601980548216909517909455601a80548516909317909255601b805490931617909155601c805461ff0019169055600c546103e891620002839190620008df565b6200028f919062000948565b601d556103e8600c546019620002a69190620008df565b620002b2919062000948565b601e55612710600c546005620002c99190620008df565b620002d5919062000948565b601f55612710600c546019620002ec9190620008df565b620002f8919062000948565b60209081556021805461ffff19169055600d543360008181526001909352604083209190915581546001600160a01b03191617905546603814806200033d5750466061145b156200036b57601754601680546001600160a01b0319166001600160a01b03909216919091179055620003a4565b46600114806200037b5750466004145b15620003a457601854601680546001600160a01b0319166001600160a01b039092169190911790555b601654601480546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000401573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042791906200095f565b6001600160a01b031663c9c65396601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000489573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004af91906200095f565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620004fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200052291906200095f565b601580546001600160a01b0319166001600160a01b039283169081179091556000908152600360205260409020805460ff191660011790556016546200056e91339116600019620006b1565b6016546200058a9030906001600160a01b0316600019620006b1565b600160066000620005a36000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080548316600190811790915561dead82527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22805490931681179092556009906200062b6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556200065b3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c54604051620006a391815260200190565b60405180910390a36200098a565b6001600160a01b038316620007035760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620007515760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401620006fa565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000809578160001904821115620007ed57620007ed620007b2565b80851615620007fb57918102915b93841c9390800290620007cd565b509250929050565b6000826200082257506001620008c1565b816200083157506000620008c1565b81600181146200084a5760028114620008555762000875565b6001915050620008c1565b60ff841115620008695762000869620007b2565b50506001821b620008c1565b5060208310610133831016604e8410600b84101617156200089a575081810a620008c1565b620008a68383620007c8565b8060001904821115620008bd57620008bd620007b2565b0290505b92915050565b6000620008d860ff84168362000811565b9392505050565b6000816000190483118215151615620008fc57620008fc620007b2565b500290565b634e487b7160e01b600052601260045260246000fd5b60008262000929576200092962000901565b500690565b600082821015620009435762000943620007b2565b500390565b6000826200095a576200095a62000901565b500490565b6000602082840312156200097257600080fd5b81516001600160a01b0381168114620008d857600080fd5b61507e806200099a6000396000f3fe6080604052600436106103bc5760003560e01c806370a08231116101f2578063bc77169d1161010d578063eafb5a3c116100a0578063fb78680d1161006f578063fb78680d14610cf5578063fdb78c0e14610d15578063fe575a8714610d34578063fff04c2a14610d5457600080fd5b8063eafb5a3c14610c49578063ee5d9c2d14610c69578063eec2744e14610c7e578063f94aa1b414610c9e57600080fd5b8063c6a276c2116100dc578063c6a276c214610b58578063cab5ebea14610b78578063cf84770614610b98578063dd62ed3e14610c0357600080fd5b8063bc77169d14610a7e578063becdf13f14610a9e578063c2fa418f14610abe578063c6831cd814610b0b57600080fd5b80638a8c523c11610185578063a457c2d711610154578063a457c2d7146109fe578063a9059cbb14610a1e578063aa22b17214610a3e578063aa54547314610a5e57600080fd5b80638a8c523c146109775780638b0d753c1461098c5780638da5cb5b1461094457806395d89b41146109b857600080fd5b806380c581d1116101c157806380c581d1146108eb57806388f820201461090b578063893d20e8146109445780638a63bd9b1461096257600080fd5b806370a0823114610849578063715018a61461086957806375cb1bd11461087e5780637b45d4311461089e57600080fd5b80632d838119116102e25780634fb2e45d11610275578063590ffdce11610244578063590ffdce146107d4578063591e7992146107f45780635c24b074146108145780636ebd00781461083457600080fd5b80634fb2e45d146107475780634fbee1931461076757806350a8e016146107a057806355dbc369146107bf57600080fd5b806339509351116102b157806339509351146106cd5780633f3cf56c146106ed578063452ed4f11461070d5780634ada218b1461072d57600080fd5b80632d8381191461064b578063313ce5671461066b57806333251a0b1461068d578063384f36b6146106ad57600080fd5b8063122fea3b1161035a57806323b872dd1161032957806323b872dd146105d657806326003957146105f657806329dd8798146106165780632b112e491461063657600080fd5b8063122fea3b146104ff57806313e461921461051f57806318160ddd1461053f5780631b6afa2d1461055457600080fd5b80630758d924116103965780630758d9241461046c578063092316021461048c578063095ea7b3146104ac5780630fa604e4146104dc57600080fd5b806303fd2a45146103c857806305bbedb6146103fb57806306fdde031461041d57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b5061041b61041636600461489f565b610d74565b005b34801561042957600080fd5b5060408051808201909152600881527f534341524475737400000000000000000000000000000000000000000000000060208201525b6040516103f29190614976565b34801561047857600080fd5b506014546103de906001600160a01b031681565b34801561049857600080fd5b5061041b6104a73660046149cb565b610e4d565b3480156104b857600080fd5b506104cc6104c73660046149e4565b610f6c565b60405190151581526020016103f2565b3480156104e857600080fd5b506104f1610f83565b6040519081526020016103f2565b34801561050b57600080fd5b506016546103de906001600160a01b031681565b34801561052b57600080fd5b5061041b61053a366004614a10565b610fa9565b34801561054b57600080fd5b50600c546104f1565b34801561056057600080fd5b506013546105a19061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103f2565b3480156105e257600080fd5b506104cc6105f1366004614a49565b61146c565b34801561060257600080fd5b5061041b610611366004614a8a565b6114e4565b34801561062257600080fd5b5061041b610631366004614aac565b6115ee565b34801561064257600080fd5b506104f16116d7565b34801561065757600080fd5b506104f16106663660046149cb565b611705565b34801561067757600080fd5b50600b5460405160ff90911681526020016103f2565b34801561069957600080fd5b5061041b6106a8366004614b08565b61179c565b3480156106b957600080fd5b5061041b6106c8366004614b08565b61183c565b3480156106d957600080fd5b506104cc6106e83660046149e4565b6118ce565b3480156106f957600080fd5b5061041b610708366004614a8a565b61190a565b34801561071957600080fd5b506015546103de906001600160a01b031681565b34801561073957600080fd5b506021546104cc9060ff1681565b34801561075357600080fd5b5061041b610762366004614b08565b611a14565b34801561077357600080fd5b506104cc610782366004614b08565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107ac57600080fd5b506021546104cc90610100900460ff1681565b3480156107cb57600080fd5b506104f1611c18565b3480156107e057600080fd5b5061041b6107ef366004614a10565b611c91565b34801561080057600080fd5b5061041b61080f366004614b25565b611d0a565b34801561082057600080fd5b5061041b61082f366004614b08565b611da8565b34801561084057600080fd5b506104f1611ee7565b34801561085557600080fd5b506104f1610864366004614b08565b611f08565b34801561087557600080fd5b5061041b611f67565b34801561088a57600080fd5b5061041b610899366004614b42565b612017565b3480156108aa57600080fd5b50600f546105a19061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b3480156108f757600080fd5b5061041b610906366004614a10565b6120b1565b34801561091757600080fd5b506104cc610926366004614b08565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561095057600080fd5b506000546001600160a01b03166103de565b34801561096e57600080fd5b506104cc61226d565b34801561098357600080fd5b5061041b6122dc565b34801561099857600080fd5b506109a16124cc565b6040805192151583526020830191909152016103f2565b3480156109c457600080fd5b5060408051808201909152600581527f5343415244000000000000000000000000000000000000000000000000000000602082015261045f565b348015610a0a57600080fd5b506104cc610a193660046149e4565b61254d565b348015610a2a57600080fd5b506104cc610a393660046149e4565b612584565b348015610a4a57600080fd5b5061041b610a59366004614b9f565b61259b565b348015610a6a57600080fd5b5061041b610a79366004614be2565b6126ce565b348015610a8a57600080fd5b5061041b610a99366004614be2565b612896565b348015610aaa57600080fd5b5061041b610ab9366004614be2565b612a5e565b348015610aca57600080fd5b506011546105a19061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610b1757600080fd5b506010546105a19061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610b6457600080fd5b5061041b610b73366004614b08565b612c26565b348015610b8457600080fd5b5061041b610b93366004614b25565b612cc6565b348015610ba457600080fd5b50601254610bd59061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103f2565b348015610c0f57600080fd5b506104f1610c1e366004614c36565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c5557600080fd5b5061041b610c64366004614b08565b612d68565b348015610c7557600080fd5b5061041b613117565b348015610c8a57600080fd5b5061041b610c99366004614a10565b6131fa565b348015610caa57600080fd5b50601954601a54601b54610ccb926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103f2565b348015610d0157600080fd5b5061041b610d10366004614c64565b6132a2565b348015610d2157600080fd5b50601c546104cc90610100900460ff1681565b348015610d4057600080fd5b506104cc610d4f366004614b08565b61332f565b348015610d6057600080fd5b5061041b610d6f3660046149cb565b6133bd565b6000546001600160a01b03163314610dc75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6021546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610e179085908590600401614cda565b600060405180830381600087803b158015610e3157600080fd5b505af1158015610e45573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610e9b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b604b811015610eec5760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610dbe565b6021546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610f5157600080fd5b505af1158015610f65573d6000803e3d6000fd5b5050505050565b6000610f79338484613469565b5060015b92915050565b600b54600090610f979060ff16600a614e11565b601e54610fa49190614e20565b905090565b6000546001600160a01b03163314610ff75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b801561114c576001600160a01b03821660009081526007602052604090205460ff16156110665760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610dbe565b6001600160a01b038216600090815260016020526040902054156110c0576001600160a01b0382166000908152600160205260409020546110a690611705565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600760205260409020805460ff191660011790556015549091161461114857600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b80611148576001600160a01b03821660009081526007602052604090205460ff166111b95760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610dbe565b6015546001600160a01b0383811691161415611234576111d7613576565b6001600160a01b0383166000908152600260205260409020546111fa9190614e5b565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556007905220805460ff191690555050565b600854600114156112e457611247613576565b6001600160a01b03831660009081526002602052604090205461126a9190614e5b565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556007905220805460ff1916905560088054806112b1576112b1614e7a565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b60085481101561146757826001600160a01b03166008828154811061130e5761130e614ea9565b6000918252602090912001546001600160a01b03161415611455576008805461133990600190614ed8565b8154811061134957611349614ea9565b600091825260209091200154600880546001600160a01b03909216918390811061137557611375614ea9565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600290915260408120556113c1613576565b6001600160a01b0384166000908152600260205260409020546113e49190614e5b565b6001600160a01b0384166000908152600160209081526040808320939093556007905220805460ff19169055600880548061142157611421614e7a565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b8061145f81614eef565b9150506112e7565b505050565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146114d1576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906114cb908490614ed8565b90915550505b6114dc8484846137e9565b949350505050565b6000546001600160a01b031633146115325760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b6064600c546115419190614e20565b8183600c546115509190614e5b565b61155a9190614e20565b10156115ce5760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610dbe565b8082600c546115dd9190614e5b565b6115e79190614e20565b601e555050565b6000546001600160a01b0316331461163c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b6021546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156116b957600080fd5b505af11580156116cd573d6000803e3d6000fd5b5050505050505050565b60006116e36000611f08565b6116ee61dead611f08565b6116f89190614f0a565b600c54610fa49190614ed8565b6000600d5482111561177f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610dbe565b6000611789613576565b90506117958184614e20565b9392505050565b6000546001600160a01b031633146117ea5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b6021546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610f37565b6000546001600160a01b0316331461188a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b602154610100900460ff161561189f57600080fd5b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610f79918590611905908690614f0a565b613469565b6000546001600160a01b031633146119585760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b6064600c546119679190614e20565b8183600c546119769190614e5b565b6119809190614e20565b10156119f45760405162461bcd60e51b815260206004820152603560248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f65203125206f6620746f74616c20737570706c792e00000000000000000000006064820152608401610dbe565b8082600c54611a039190614e5b565b611a0d9190614e20565b601d555050565b6000546001600160a01b03163314611a625760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b6001600160a01b038116611ade5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610dbe565b6001600160a01b03811661dead1415611b5f5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610dbe565b60008054611b78916001600160a01b0390911690611c91565b611b83816001611c91565b60008054611b99906001600160a01b0316611f08565b1115611bc057600054611bbe906001600160a01b031682611bb982611f08565b6137e9565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000602160029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190614f22565b6000546001600160a01b03163314611cdf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611d585760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b6021546040517f591e79920000000000000000000000000000000000000000000000000000000081528215156004820152620100009091046001600160a01b03169063591e799290602401610f37565b6000546001600160a01b03163314611df65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b602154610100900460ff1615611e4e5760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610dbe565b6001600160a01b038116301415611ea75760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610dbe565b602180546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600b54600090611efb9060ff16600a614e11565b601d54610fa49190614e20565b6001600160a01b03811660009081526007602052604081205460ff1615611f4557506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610f7d90611705565b6000546001600160a01b03163314611fb55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b60008054611fce916001600160a01b0390911690611c91565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146120655760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b601980546001600160a01b0394851673ffffffffffffffffffffffffffffffffffffffff1991821617909155601a805492851692821692909217909155601b8054929093169116179055565b6000546001600160a01b031633146120ff5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b8061218b576001600160a01b03828116600081815260036020526040808220805460ff1916905560215490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610e3157600080fd5b600454156121f2576203f480600454426121a59190614ed8565b116121f25760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610dbe565b6001600160a01b0382811660008181526003602052604090819020805460ff1916600190811790915542600490815560215492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610e17565b600080546001600160a01b031633146122bc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b6014546122d69030906001600160a01b0316600019613469565b50600190565b6000546001600160a01b0316331461232a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b60215460ff161561237d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610dbe565b602154610100900460ff166123d45760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610dbe565b6021546201000090046001600160a01b031661241a57602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b602154601554600b546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b1580156124ab57600080fd5b505af19250505080156124bc575060015b506021805460ff19166001179055565b600080602160029054906101000a90046001600160a01b03166001600160a01b0316638b0d753c6040518163ffffffff1660e01b81526004016040805180830381865afa158015612521573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125459190614f3b565b915091509091565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610f79918590611905908690614ed8565b60006125913384846137e9565b5060019392505050565b6000546001600160a01b031633146125e95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b601280547fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffff1664010000000061ffff858116919091027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff16919091176201000084831602177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016908516179055816126818483614f69565b61268b9190614f69565b6012805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055505050565b6000546001600160a01b0316331461271c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b60135461ffff9081169085161180159061274a575060135461ffff6601000000000000909104811690821611155b8015612768575060135461ffff640100000000909104811690831611155b8015612784575060135461ffff62010000909104811690841611155b61278d57600080fd5b6000818361279b8688614f69565b6127a59190614f69565b6127af9190614f69565b90506109c48161ffff1611156127c457600080fd5b6011805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166601000000000000868316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff16176401000000009185169190910217905561284f8582614f8f565b6011805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b031633146128e45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b60135461ffff90811690851611801590612912575060135461ffff6601000000000000909104811690821611155b8015612930575060135461ffff640100000000909104811690831611155b801561294c575060135461ffff62010000909104811690841611155b61295557600080fd5b600081836129638688614f69565b61296d9190614f69565b6129779190614f69565b90506109c48161ffff16111561298c57600080fd5b600f805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166601000000000000868316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff161764010000000091851691909102179055612a178582614f8f565b600f805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612aac5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b60135461ffff90811690851611801590612ada575060135461ffff6601000000000000909104811690821611155b8015612af8575060135461ffff640100000000909104811690831611155b8015612b14575060135461ffff62010000909104811690841611155b612b1d57600080fd5b60008183612b2b8688614f69565b612b359190614f69565b612b3f9190614f69565b90506109c48161ffff161115612b5457600080fd5b6010805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166601000000000000868316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff161764010000000091851691909102179055612bdf8582614f8f565b6010805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612c745760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b6021546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610f37565b6000546001600160a01b03163314612d145760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b601c80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790612d5d90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314612db65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1f9190614fb2565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e909190614fb2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f179190614fb2565b90506001600160a01b0381166130b557816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f899190614fb2565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ffa9190614fb2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561305f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130839190614fb2565b6015805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556130de565b6015805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6014805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155611467903090600019613469565b6000546001600160a01b031633146131655760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b602154610100900460ff16156131bd5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610dbe565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156131f7573d6000803e3d6000fd5b50565b6000546001600160a01b031633146132485760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b6021546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610e17565b6000546001600160a01b031633146132f05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b8284600c546132ff9190614e5b565b6133099190614e20565b601f55600c54819061331c908490614e5b565b6133269190614e20565b60205550505050565b6021546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015613399573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d9190614fcf565b6000546001600160a01b0316331461340b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b61012c81111561341a57600080fd5b6021546040517ffff04c2a00000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b03169063fff04c2a90602401610f37565b6001600160a01b0383166134bf5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610dbe565b6001600160a01b0382166135155760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610dbe565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600d54600c546015546001600160a01b03166000908152600760205260408120549092919060ff1615613650576015546001600160a01b03166000908152600160205260409020546135c89083614ed8565b6015546001600160a01b03166000908152600260205260409020549092506135f09082614ed8565b6015546001600160a01b031660009081526001602052604090205490915082108061363457506015546001600160a01b031660009081526002602052604090205481105b1561365057600c54600d546136499190614e20565b9250505090565b600854156137b85760005b60085460ff821610156137b657826001600060088460ff168154811061368357613683614ea9565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806136f15750816002600060088460ff16815481106136ca576136ca614ea9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561370e57600c54600d546137069190614e20565b935050505090565b6001600060088360ff168154811061372857613728614ea9565b60009182526020808320909101546001600160a01b031683528201929092526040019020546137579084614ed8565b92506002600060088360ff168154811061377357613773614ea9565b60009182526020808320909101546001600160a01b031683528201929092526040019020546137a29083614ed8565b9150806137ae81614fec565b91505061365b565b505b600c54600d546137c89190614e20565b8210156137df57600c54600d546136499190614e20565b6136498183614e20565b60006001600160a01b0384166138675760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610dbe565b6001600160a01b0383166138e35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610dbe565b600082116139595760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610dbe565b6139638484613c0c565b15613b3d5760215460ff166139ba5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610dbe565b6001600160a01b03841660009081526003602052604090205460ff16806139f957506001600160a01b03831660009081526003602052604090205460ff165b15613a7657601d54821115613a765760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610dbe565b6016546001600160a01b03848116911614801590613aad57506001600160a01b03831660009081526003602052604090205460ff16155b15613b3d57601e5482613abf85611f08565b613ac99190614f0a565b1115613b3d5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610dbe565b6001600160a01b03841660009081526006602052604090205460019060ff1680613b7f57506001600160a01b03841660009081526006602052604090205460ff165b15613b88575060005b6001600160a01b03841660009081526003602052604090205460ff1615613bf757601c5460ff16158015613bc35750601c54610100900460ff165b15613bf7576000613bd330611f08565b9050601f548110613bf5576020548110613bec57506020545b613bf581613cc9565b505b613c0385858584614041565b95945050505050565b600080546001600160a01b03848116911614801590613c3957506000546001600160a01b03838116911614155b8015613c5e57506001600160a01b03821660009081526009602052604090205460ff16155b8015613c8357506001600160a01b03831660009081526009602052604090205460ff16155b8015613c9a57506001600160a01b03821661dead14155b8015613cae57506001600160a01b03821615155b801561179557506001600160a01b0383163014159392505050565b601c805460ff1916600117905560125461ffff660100000000000090910416613cf157614034565b3060009081526005602090815260408083206014546001600160a01b0316845290915290205460001914613d4a573060009081526005602090815260408083206014546001600160a01b03168452909152902060001990555b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613d7f57613d7f614ea9565b6001600160a01b03928316602091820292909201810191909152601454604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e159190614fb2565b81600181518110613e2857613e28614ea9565b6001600160a01b0392831660209182029290920101526014546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613e8790859060009086903090429060040161500c565b600060405180830381600087803b158015613ea157600080fd5b505af1158015613eb5573d6000803e3d6000fd5b50479250504715905061403157601b546012546000916001600160a01b03169061ffff66010000000000008204811691613ef791620100009091041685614e5b565b613f019190614e20565b60405161753091906000818181858888f193505050503d8060008114613f43576040519150601f19603f3d011682016040523d82523d6000602084013e613f48565b606091505b5050601a546012549192506001600160a01b03169061ffff66010000000000008204811691613f81916401000000009091041685614e5b565b613f8b9190614e20565b60405161753091906000818181858888f193505050503d8060008114613fcd576040519150601f19603f3d011682016040523d82523d6000602084013e613fd2565b606091505b50506019546040519192506001600160a01b0316906175309047906000818181858888f193505050503d8060008114614027576040519150601f19603f3d011682016040523d82523d6000602084013e61402c565b606091505b505050505b50505b50601c805460ff19169055565b602154600090610100900460ff166140ed5761405d85856143a5565b602154610100900460ff1615801561407a575061407a8585613c0c565b156140ed5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610dbe565b60006140fb86868686614503565b60808101516001600160a01b03881660009081526001602052604090205491925061412591614ed8565b6001600160a01b038088166000908152600160205260408082209390935560608401519188168152919091205461415c9190614f0a565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16156141ce576001600160a01b0386166000908152600260205260409020546141b4908590614ed8565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526007602052604090205460ff161561422e5780516001600160a01b0386166000908152600260205260409020546142149190614f0a565b6001600160a01b0386166000908152600260205260409020555b60408101511561431057614240613576565b816040015161424f9190614e5b565b306000908152600160205260409020546142699190614f0a565b3060009081526001602090815260408083209390935560079052205460ff16156142be57604080820151306000908152600260205291909120546142ad9190614f0a565b306000908152600260205260409020555b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040015160405161430791815260200190565b60405180910390a35b60008160a001511180614327575060008160200151115b15614348578060a00151600d60008282546143429190614ed8565b90915550505b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161439191815260200190565b60405180910390a350600195945050505050565b602154610100900460ff16156144235760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610dbe565b61442d8282613c0c565b15801561444757506015546001600160a01b038281169116145b15611148576001600160a01b038083166000908152600960205260409020805460ff191660011790556021805461ff0019166101001790819055620100009004166144bc57602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601c805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b61453c6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6145756040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600061457f613576565b905061458b8186614e5b565b608083015261459a8787613c0c565b1561464d576021546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614636575060408051601f3d908101601f1916820190925261463391810190614fcf565b60015b61463f57600080fd5b90508061464b57600080fd5b505b83156147dc576001600160a01b03861660009081526003602052604090205460ff16156146ac57601054600e805461ffff80841663ffffffff199092169190911768010000000000000000909304166201000002919091179055614739565b6001600160a01b03871660009081526003602052604090205460ff161561470557600f54600e805461ffff80841663ffffffff199092169190911768010000000000000000909304166201000002919091179055614739565b601154600e805461ffff80841663ffffffff1990921691909117680100000000000000009093041662010000029190911790555b601354600e5461ffff6801000000000000000090920482169161475d911687614e5b565b6147679190614e20565b6020830152601354600e5461ffff68010000000000000000909204821691614796916201000090041687614e5b565b6147a09190614e20565b6040830181905260208301516147b69190614f0a565b6147c09086614ed8565b825260208201516147d2908290614e5b565b60a08301526147f5565b6000602083018190526040830181905285835260a08301525b8082604001516148059190614e5b565b8260a001516148149190614f0a565b82608001516148239190614ed8565b60608301525095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6001600160a01b03811681146131f757600080fd5b803561488181614861565b919050565b80151581146131f757600080fd5b803561488181614886565b600080604083850312156148b257600080fd5b823567ffffffffffffffff808211156148ca57600080fd5b818501915085601f8301126148de57600080fd5b81356020828211156148f2576148f2614832565b8160051b604051601f19603f8301168101818110868211171561491757614917614832565b60405292835281830193508481018201928984111561493557600080fd5b948201945b8386101561495a5761494b86614876565b8552948201949382019361493a565b96506149699050878201614894565b9450505050509250929050565b600060208083528351808285015260005b818110156149a357858101830151858201604001528201614987565b818111156149b5576000604083870101525b50601f01601f1916929092016040019392505050565b6000602082840312156149dd57600080fd5b5035919050565b600080604083850312156149f757600080fd5b8235614a0281614861565b946020939093013593505050565b60008060408385031215614a2357600080fd5b8235614a2e81614861565b91506020830135614a3e81614886565b809150509250929050565b600080600060608486031215614a5e57600080fd5b8335614a6981614861565b92506020840135614a7981614861565b929592945050506040919091013590565b60008060408385031215614a9d57600080fd5b50508035926020909101359150565b60008060008060808587031215614ac257600080fd5b8435614acd81614886565b93506020850135614add81614886565b92506040850135614aed81614886565b91506060850135614afd81614886565b939692955090935050565b600060208284031215614b1a57600080fd5b813561179581614861565b600060208284031215614b3757600080fd5b813561179581614886565b600080600060608486031215614b5757600080fd5b8335614b6281614861565b92506020840135614b7281614861565b91506040840135614b8281614861565b809150509250925092565b803561ffff8116811461488157600080fd5b600080600060608486031215614bb457600080fd5b614bbd84614b8d565b9250614bcb60208501614b8d565b9150614bd960408501614b8d565b90509250925092565b60008060008060808587031215614bf857600080fd5b614c0185614b8d565b9350614c0f60208601614b8d565b9250614c1d60408601614b8d565b9150614c2b60608601614b8d565b905092959194509250565b60008060408385031215614c4957600080fd5b8235614c5481614861565b91506020830135614a3e81614861565b60008060008060808587031215614c7a57600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b83811015614ccf5781516001600160a01b031687529582019590820190600101614caa565b509495945050505050565b604081526000614ced6040830185614c96565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115614d68578160001904821115614d4e57614d4e614cfe565b80851615614d5b57918102915b93841c9390800290614d32565b509250929050565b600082614d7f57506001610f7d565b81614d8c57506000610f7d565b8160018114614da25760028114614dac57614dc8565b6001915050610f7d565b60ff841115614dbd57614dbd614cfe565b50506001821b610f7d565b5060208310610133831016604e8410600b8410161715614deb575081810a610f7d565b614df58383614d2d565b8060001904821115614e0957614e09614cfe565b029392505050565b600061179560ff841683614d70565b600082614e56577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816000190483118215151615614e7557614e75614cfe565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082821015614eea57614eea614cfe565b500390565b6000600019821415614f0357614f03614cfe565b5060010190565b60008219821115614f1d57614f1d614cfe565b500190565b600060208284031215614f3457600080fd5b5051919050565b60008060408385031215614f4e57600080fd5b8251614f5981614886565b6020939093015192949293505050565b600061ffff808316818516808303821115614f8657614f86614cfe565b01949350505050565b600061ffff83811690831681811015614faa57614faa614cfe565b039392505050565b600060208284031215614fc457600080fd5b815161179581614861565b600060208284031215614fe157600080fd5b815161179581614886565b600060ff821660ff81141561500357615003614cfe565b60010192915050565b85815284602082015260a06040820152600061502b60a0830186614c96565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220d2c2955b80c0ebe802513ea018d011b4f94ce7ed29dfa2c202e782b006adf9aa64736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c806370a08231116101f2578063bc77169d1161010d578063eafb5a3c116100a0578063fb78680d1161006f578063fb78680d14610cf5578063fdb78c0e14610d15578063fe575a8714610d34578063fff04c2a14610d5457600080fd5b8063eafb5a3c14610c49578063ee5d9c2d14610c69578063eec2744e14610c7e578063f94aa1b414610c9e57600080fd5b8063c6a276c2116100dc578063c6a276c214610b58578063cab5ebea14610b78578063cf84770614610b98578063dd62ed3e14610c0357600080fd5b8063bc77169d14610a7e578063becdf13f14610a9e578063c2fa418f14610abe578063c6831cd814610b0b57600080fd5b80638a8c523c11610185578063a457c2d711610154578063a457c2d7146109fe578063a9059cbb14610a1e578063aa22b17214610a3e578063aa54547314610a5e57600080fd5b80638a8c523c146109775780638b0d753c1461098c5780638da5cb5b1461094457806395d89b41146109b857600080fd5b806380c581d1116101c157806380c581d1146108eb57806388f820201461090b578063893d20e8146109445780638a63bd9b1461096257600080fd5b806370a0823114610849578063715018a61461086957806375cb1bd11461087e5780637b45d4311461089e57600080fd5b80632d838119116102e25780634fb2e45d11610275578063590ffdce11610244578063590ffdce146107d4578063591e7992146107f45780635c24b074146108145780636ebd00781461083457600080fd5b80634fb2e45d146107475780634fbee1931461076757806350a8e016146107a057806355dbc369146107bf57600080fd5b806339509351116102b157806339509351146106cd5780633f3cf56c146106ed578063452ed4f11461070d5780634ada218b1461072d57600080fd5b80632d8381191461064b578063313ce5671461066b57806333251a0b1461068d578063384f36b6146106ad57600080fd5b8063122fea3b1161035a57806323b872dd1161032957806323b872dd146105d657806326003957146105f657806329dd8798146106165780632b112e491461063657600080fd5b8063122fea3b146104ff57806313e461921461051f57806318160ddd1461053f5780631b6afa2d1461055457600080fd5b80630758d924116103965780630758d9241461046c578063092316021461048c578063095ea7b3146104ac5780630fa604e4146104dc57600080fd5b806303fd2a45146103c857806305bbedb6146103fb57806306fdde031461041d57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b5061041b61041636600461489f565b610d74565b005b34801561042957600080fd5b5060408051808201909152600881527f534341524475737400000000000000000000000000000000000000000000000060208201525b6040516103f29190614976565b34801561047857600080fd5b506014546103de906001600160a01b031681565b34801561049857600080fd5b5061041b6104a73660046149cb565b610e4d565b3480156104b857600080fd5b506104cc6104c73660046149e4565b610f6c565b60405190151581526020016103f2565b3480156104e857600080fd5b506104f1610f83565b6040519081526020016103f2565b34801561050b57600080fd5b506016546103de906001600160a01b031681565b34801561052b57600080fd5b5061041b61053a366004614a10565b610fa9565b34801561054b57600080fd5b50600c546104f1565b34801561056057600080fd5b506013546105a19061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103f2565b3480156105e257600080fd5b506104cc6105f1366004614a49565b61146c565b34801561060257600080fd5b5061041b610611366004614a8a565b6114e4565b34801561062257600080fd5b5061041b610631366004614aac565b6115ee565b34801561064257600080fd5b506104f16116d7565b34801561065757600080fd5b506104f16106663660046149cb565b611705565b34801561067757600080fd5b50600b5460405160ff90911681526020016103f2565b34801561069957600080fd5b5061041b6106a8366004614b08565b61179c565b3480156106b957600080fd5b5061041b6106c8366004614b08565b61183c565b3480156106d957600080fd5b506104cc6106e83660046149e4565b6118ce565b3480156106f957600080fd5b5061041b610708366004614a8a565b61190a565b34801561071957600080fd5b506015546103de906001600160a01b031681565b34801561073957600080fd5b506021546104cc9060ff1681565b34801561075357600080fd5b5061041b610762366004614b08565b611a14565b34801561077357600080fd5b506104cc610782366004614b08565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107ac57600080fd5b506021546104cc90610100900460ff1681565b3480156107cb57600080fd5b506104f1611c18565b3480156107e057600080fd5b5061041b6107ef366004614a10565b611c91565b34801561080057600080fd5b5061041b61080f366004614b25565b611d0a565b34801561082057600080fd5b5061041b61082f366004614b08565b611da8565b34801561084057600080fd5b506104f1611ee7565b34801561085557600080fd5b506104f1610864366004614b08565b611f08565b34801561087557600080fd5b5061041b611f67565b34801561088a57600080fd5b5061041b610899366004614b42565b612017565b3480156108aa57600080fd5b50600f546105a19061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b3480156108f757600080fd5b5061041b610906366004614a10565b6120b1565b34801561091757600080fd5b506104cc610926366004614b08565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561095057600080fd5b506000546001600160a01b03166103de565b34801561096e57600080fd5b506104cc61226d565b34801561098357600080fd5b5061041b6122dc565b34801561099857600080fd5b506109a16124cc565b6040805192151583526020830191909152016103f2565b3480156109c457600080fd5b5060408051808201909152600581527f5343415244000000000000000000000000000000000000000000000000000000602082015261045f565b348015610a0a57600080fd5b506104cc610a193660046149e4565b61254d565b348015610a2a57600080fd5b506104cc610a393660046149e4565b612584565b348015610a4a57600080fd5b5061041b610a59366004614b9f565b61259b565b348015610a6a57600080fd5b5061041b610a79366004614be2565b6126ce565b348015610a8a57600080fd5b5061041b610a99366004614be2565b612896565b348015610aaa57600080fd5b5061041b610ab9366004614be2565b612a5e565b348015610aca57600080fd5b506011546105a19061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610b1757600080fd5b506010546105a19061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610b6457600080fd5b5061041b610b73366004614b08565b612c26565b348015610b8457600080fd5b5061041b610b93366004614b25565b612cc6565b348015610ba457600080fd5b50601254610bd59061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103f2565b348015610c0f57600080fd5b506104f1610c1e366004614c36565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c5557600080fd5b5061041b610c64366004614b08565b612d68565b348015610c7557600080fd5b5061041b613117565b348015610c8a57600080fd5b5061041b610c99366004614a10565b6131fa565b348015610caa57600080fd5b50601954601a54601b54610ccb926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103f2565b348015610d0157600080fd5b5061041b610d10366004614c64565b6132a2565b348015610d2157600080fd5b50601c546104cc90610100900460ff1681565b348015610d4057600080fd5b506104cc610d4f366004614b08565b61332f565b348015610d6057600080fd5b5061041b610d6f3660046149cb565b6133bd565b6000546001600160a01b03163314610dc75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6021546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610e179085908590600401614cda565b600060405180830381600087803b158015610e3157600080fd5b505af1158015610e45573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610e9b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b604b811015610eec5760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610dbe565b6021546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610f5157600080fd5b505af1158015610f65573d6000803e3d6000fd5b5050505050565b6000610f79338484613469565b5060015b92915050565b600b54600090610f979060ff16600a614e11565b601e54610fa49190614e20565b905090565b6000546001600160a01b03163314610ff75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b801561114c576001600160a01b03821660009081526007602052604090205460ff16156110665760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610dbe565b6001600160a01b038216600090815260016020526040902054156110c0576001600160a01b0382166000908152600160205260409020546110a690611705565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600760205260409020805460ff191660011790556015549091161461114857600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b80611148576001600160a01b03821660009081526007602052604090205460ff166111b95760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610dbe565b6015546001600160a01b0383811691161415611234576111d7613576565b6001600160a01b0383166000908152600260205260409020546111fa9190614e5b565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556007905220805460ff191690555050565b600854600114156112e457611247613576565b6001600160a01b03831660009081526002602052604090205461126a9190614e5b565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556007905220805460ff1916905560088054806112b1576112b1614e7a565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b60085481101561146757826001600160a01b03166008828154811061130e5761130e614ea9565b6000918252602090912001546001600160a01b03161415611455576008805461133990600190614ed8565b8154811061134957611349614ea9565b600091825260209091200154600880546001600160a01b03909216918390811061137557611375614ea9565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600290915260408120556113c1613576565b6001600160a01b0384166000908152600260205260409020546113e49190614e5b565b6001600160a01b0384166000908152600160209081526040808320939093556007905220805460ff19169055600880548061142157611421614e7a565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b8061145f81614eef565b9150506112e7565b505050565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146114d1576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906114cb908490614ed8565b90915550505b6114dc8484846137e9565b949350505050565b6000546001600160a01b031633146115325760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b6064600c546115419190614e20565b8183600c546115509190614e5b565b61155a9190614e20565b10156115ce5760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610dbe565b8082600c546115dd9190614e5b565b6115e79190614e20565b601e555050565b6000546001600160a01b0316331461163c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b6021546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156116b957600080fd5b505af11580156116cd573d6000803e3d6000fd5b5050505050505050565b60006116e36000611f08565b6116ee61dead611f08565b6116f89190614f0a565b600c54610fa49190614ed8565b6000600d5482111561177f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610dbe565b6000611789613576565b90506117958184614e20565b9392505050565b6000546001600160a01b031633146117ea5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b6021546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610f37565b6000546001600160a01b0316331461188a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b602154610100900460ff161561189f57600080fd5b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610f79918590611905908690614f0a565b613469565b6000546001600160a01b031633146119585760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b6064600c546119679190614e20565b8183600c546119769190614e5b565b6119809190614e20565b10156119f45760405162461bcd60e51b815260206004820152603560248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f65203125206f6620746f74616c20737570706c792e00000000000000000000006064820152608401610dbe565b8082600c54611a039190614e5b565b611a0d9190614e20565b601d555050565b6000546001600160a01b03163314611a625760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b6001600160a01b038116611ade5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610dbe565b6001600160a01b03811661dead1415611b5f5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610dbe565b60008054611b78916001600160a01b0390911690611c91565b611b83816001611c91565b60008054611b99906001600160a01b0316611f08565b1115611bc057600054611bbe906001600160a01b031682611bb982611f08565b6137e9565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000602160029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190614f22565b6000546001600160a01b03163314611cdf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611d585760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b6021546040517f591e79920000000000000000000000000000000000000000000000000000000081528215156004820152620100009091046001600160a01b03169063591e799290602401610f37565b6000546001600160a01b03163314611df65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b602154610100900460ff1615611e4e5760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610dbe565b6001600160a01b038116301415611ea75760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610dbe565b602180546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600b54600090611efb9060ff16600a614e11565b601d54610fa49190614e20565b6001600160a01b03811660009081526007602052604081205460ff1615611f4557506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610f7d90611705565b6000546001600160a01b03163314611fb55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b60008054611fce916001600160a01b0390911690611c91565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146120655760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b601980546001600160a01b0394851673ffffffffffffffffffffffffffffffffffffffff1991821617909155601a805492851692821692909217909155601b8054929093169116179055565b6000546001600160a01b031633146120ff5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b8061218b576001600160a01b03828116600081815260036020526040808220805460ff1916905560215490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610e3157600080fd5b600454156121f2576203f480600454426121a59190614ed8565b116121f25760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610dbe565b6001600160a01b0382811660008181526003602052604090819020805460ff1916600190811790915542600490815560215492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610e17565b600080546001600160a01b031633146122bc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b6014546122d69030906001600160a01b0316600019613469565b50600190565b6000546001600160a01b0316331461232a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b60215460ff161561237d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610dbe565b602154610100900460ff166123d45760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610dbe565b6021546201000090046001600160a01b031661241a57602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b602154601554600b546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b1580156124ab57600080fd5b505af19250505080156124bc575060015b506021805460ff19166001179055565b600080602160029054906101000a90046001600160a01b03166001600160a01b0316638b0d753c6040518163ffffffff1660e01b81526004016040805180830381865afa158015612521573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125459190614f3b565b915091509091565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610f79918590611905908690614ed8565b60006125913384846137e9565b5060019392505050565b6000546001600160a01b031633146125e95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b601280547fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffff1664010000000061ffff858116919091027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff16919091176201000084831602177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016908516179055816126818483614f69565b61268b9190614f69565b6012805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055505050565b6000546001600160a01b0316331461271c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b60135461ffff9081169085161180159061274a575060135461ffff6601000000000000909104811690821611155b8015612768575060135461ffff640100000000909104811690831611155b8015612784575060135461ffff62010000909104811690841611155b61278d57600080fd5b6000818361279b8688614f69565b6127a59190614f69565b6127af9190614f69565b90506109c48161ffff1611156127c457600080fd5b6011805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166601000000000000868316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff16176401000000009185169190910217905561284f8582614f8f565b6011805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b031633146128e45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b60135461ffff90811690851611801590612912575060135461ffff6601000000000000909104811690821611155b8015612930575060135461ffff640100000000909104811690831611155b801561294c575060135461ffff62010000909104811690841611155b61295557600080fd5b600081836129638688614f69565b61296d9190614f69565b6129779190614f69565b90506109c48161ffff16111561298c57600080fd5b600f805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166601000000000000868316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff161764010000000091851691909102179055612a178582614f8f565b600f805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612aac5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b60135461ffff90811690851611801590612ada575060135461ffff6601000000000000909104811690821611155b8015612af8575060135461ffff640100000000909104811690831611155b8015612b14575060135461ffff62010000909104811690841611155b612b1d57600080fd5b60008183612b2b8688614f69565b612b359190614f69565b612b3f9190614f69565b90506109c48161ffff161115612b5457600080fd5b6010805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166601000000000000868316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff161764010000000091851691909102179055612bdf8582614f8f565b6010805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612c745760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b6021546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610f37565b6000546001600160a01b03163314612d145760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b601c80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790612d5d90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314612db65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1f9190614fb2565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e909190614fb2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f179190614fb2565b90506001600160a01b0381166130b557816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f899190614fb2565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ffa9190614fb2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561305f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130839190614fb2565b6015805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556130de565b6015805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6014805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155611467903090600019613469565b6000546001600160a01b031633146131655760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b602154610100900460ff16156131bd5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610dbe565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156131f7573d6000803e3d6000fd5b50565b6000546001600160a01b031633146132485760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b6021546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610e17565b6000546001600160a01b031633146132f05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b8284600c546132ff9190614e5b565b6133099190614e20565b601f55600c54819061331c908490614e5b565b6133269190614e20565b60205550505050565b6021546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015613399573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d9190614fcf565b6000546001600160a01b0316331461340b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dbe565b61012c81111561341a57600080fd5b6021546040517ffff04c2a00000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b03169063fff04c2a90602401610f37565b6001600160a01b0383166134bf5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610dbe565b6001600160a01b0382166135155760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610dbe565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600d54600c546015546001600160a01b03166000908152600760205260408120549092919060ff1615613650576015546001600160a01b03166000908152600160205260409020546135c89083614ed8565b6015546001600160a01b03166000908152600260205260409020549092506135f09082614ed8565b6015546001600160a01b031660009081526001602052604090205490915082108061363457506015546001600160a01b031660009081526002602052604090205481105b1561365057600c54600d546136499190614e20565b9250505090565b600854156137b85760005b60085460ff821610156137b657826001600060088460ff168154811061368357613683614ea9565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806136f15750816002600060088460ff16815481106136ca576136ca614ea9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561370e57600c54600d546137069190614e20565b935050505090565b6001600060088360ff168154811061372857613728614ea9565b60009182526020808320909101546001600160a01b031683528201929092526040019020546137579084614ed8565b92506002600060088360ff168154811061377357613773614ea9565b60009182526020808320909101546001600160a01b031683528201929092526040019020546137a29083614ed8565b9150806137ae81614fec565b91505061365b565b505b600c54600d546137c89190614e20565b8210156137df57600c54600d546136499190614e20565b6136498183614e20565b60006001600160a01b0384166138675760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610dbe565b6001600160a01b0383166138e35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610dbe565b600082116139595760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610dbe565b6139638484613c0c565b15613b3d5760215460ff166139ba5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610dbe565b6001600160a01b03841660009081526003602052604090205460ff16806139f957506001600160a01b03831660009081526003602052604090205460ff165b15613a7657601d54821115613a765760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610dbe565b6016546001600160a01b03848116911614801590613aad57506001600160a01b03831660009081526003602052604090205460ff16155b15613b3d57601e5482613abf85611f08565b613ac99190614f0a565b1115613b3d5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610dbe565b6001600160a01b03841660009081526006602052604090205460019060ff1680613b7f57506001600160a01b03841660009081526006602052604090205460ff165b15613b88575060005b6001600160a01b03841660009081526003602052604090205460ff1615613bf757601c5460ff16158015613bc35750601c54610100900460ff165b15613bf7576000613bd330611f08565b9050601f548110613bf5576020548110613bec57506020545b613bf581613cc9565b505b613c0385858584614041565b95945050505050565b600080546001600160a01b03848116911614801590613c3957506000546001600160a01b03838116911614155b8015613c5e57506001600160a01b03821660009081526009602052604090205460ff16155b8015613c8357506001600160a01b03831660009081526009602052604090205460ff16155b8015613c9a57506001600160a01b03821661dead14155b8015613cae57506001600160a01b03821615155b801561179557506001600160a01b0383163014159392505050565b601c805460ff1916600117905560125461ffff660100000000000090910416613cf157614034565b3060009081526005602090815260408083206014546001600160a01b0316845290915290205460001914613d4a573060009081526005602090815260408083206014546001600160a01b03168452909152902060001990555b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613d7f57613d7f614ea9565b6001600160a01b03928316602091820292909201810191909152601454604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e159190614fb2565b81600181518110613e2857613e28614ea9565b6001600160a01b0392831660209182029290920101526014546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613e8790859060009086903090429060040161500c565b600060405180830381600087803b158015613ea157600080fd5b505af1158015613eb5573d6000803e3d6000fd5b50479250504715905061403157601b546012546000916001600160a01b03169061ffff66010000000000008204811691613ef791620100009091041685614e5b565b613f019190614e20565b60405161753091906000818181858888f193505050503d8060008114613f43576040519150601f19603f3d011682016040523d82523d6000602084013e613f48565b606091505b5050601a546012549192506001600160a01b03169061ffff66010000000000008204811691613f81916401000000009091041685614e5b565b613f8b9190614e20565b60405161753091906000818181858888f193505050503d8060008114613fcd576040519150601f19603f3d011682016040523d82523d6000602084013e613fd2565b606091505b50506019546040519192506001600160a01b0316906175309047906000818181858888f193505050503d8060008114614027576040519150601f19603f3d011682016040523d82523d6000602084013e61402c565b606091505b505050505b50505b50601c805460ff19169055565b602154600090610100900460ff166140ed5761405d85856143a5565b602154610100900460ff1615801561407a575061407a8585613c0c565b156140ed5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610dbe565b60006140fb86868686614503565b60808101516001600160a01b03881660009081526001602052604090205491925061412591614ed8565b6001600160a01b038088166000908152600160205260408082209390935560608401519188168152919091205461415c9190614f0a565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16156141ce576001600160a01b0386166000908152600260205260409020546141b4908590614ed8565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526007602052604090205460ff161561422e5780516001600160a01b0386166000908152600260205260409020546142149190614f0a565b6001600160a01b0386166000908152600260205260409020555b60408101511561431057614240613576565b816040015161424f9190614e5b565b306000908152600160205260409020546142699190614f0a565b3060009081526001602090815260408083209390935560079052205460ff16156142be57604080820151306000908152600260205291909120546142ad9190614f0a565b306000908152600260205260409020555b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040015160405161430791815260200190565b60405180910390a35b60008160a001511180614327575060008160200151115b15614348578060a00151600d60008282546143429190614ed8565b90915550505b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161439191815260200190565b60405180910390a350600195945050505050565b602154610100900460ff16156144235760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610dbe565b61442d8282613c0c565b15801561444757506015546001600160a01b038281169116145b15611148576001600160a01b038083166000908152600960205260409020805460ff191660011790556021805461ff0019166101001790819055620100009004166144bc57602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601c805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b61453c6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6145756040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600061457f613576565b905061458b8186614e5b565b608083015261459a8787613c0c565b1561464d576021546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614636575060408051601f3d908101601f1916820190925261463391810190614fcf565b60015b61463f57600080fd5b90508061464b57600080fd5b505b83156147dc576001600160a01b03861660009081526003602052604090205460ff16156146ac57601054600e805461ffff80841663ffffffff199092169190911768010000000000000000909304166201000002919091179055614739565b6001600160a01b03871660009081526003602052604090205460ff161561470557600f54600e805461ffff80841663ffffffff199092169190911768010000000000000000909304166201000002919091179055614739565b601154600e805461ffff80841663ffffffff1990921691909117680100000000000000009093041662010000029190911790555b601354600e5461ffff6801000000000000000090920482169161475d911687614e5b565b6147679190614e20565b6020830152601354600e5461ffff68010000000000000000909204821691614796916201000090041687614e5b565b6147a09190614e20565b6040830181905260208301516147b69190614f0a565b6147c09086614ed8565b825260208201516147d2908290614e5b565b60a08301526147f5565b6000602083018190526040830181905285835260a08301525b8082604001516148059190614e5b565b8260a001516148149190614f0a565b82608001516148239190614ed8565b60608301525095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6001600160a01b03811681146131f757600080fd5b803561488181614861565b919050565b80151581146131f757600080fd5b803561488181614886565b600080604083850312156148b257600080fd5b823567ffffffffffffffff808211156148ca57600080fd5b818501915085601f8301126148de57600080fd5b81356020828211156148f2576148f2614832565b8160051b604051601f19603f8301168101818110868211171561491757614917614832565b60405292835281830193508481018201928984111561493557600080fd5b948201945b8386101561495a5761494b86614876565b8552948201949382019361493a565b96506149699050878201614894565b9450505050509250929050565b600060208083528351808285015260005b818110156149a357858101830151858201604001528201614987565b818111156149b5576000604083870101525b50601f01601f1916929092016040019392505050565b6000602082840312156149dd57600080fd5b5035919050565b600080604083850312156149f757600080fd5b8235614a0281614861565b946020939093013593505050565b60008060408385031215614a2357600080fd5b8235614a2e81614861565b91506020830135614a3e81614886565b809150509250929050565b600080600060608486031215614a5e57600080fd5b8335614a6981614861565b92506020840135614a7981614861565b929592945050506040919091013590565b60008060408385031215614a9d57600080fd5b50508035926020909101359150565b60008060008060808587031215614ac257600080fd5b8435614acd81614886565b93506020850135614add81614886565b92506040850135614aed81614886565b91506060850135614afd81614886565b939692955090935050565b600060208284031215614b1a57600080fd5b813561179581614861565b600060208284031215614b3757600080fd5b813561179581614886565b600080600060608486031215614b5757600080fd5b8335614b6281614861565b92506020840135614b7281614861565b91506040840135614b8281614861565b809150509250925092565b803561ffff8116811461488157600080fd5b600080600060608486031215614bb457600080fd5b614bbd84614b8d565b9250614bcb60208501614b8d565b9150614bd960408501614b8d565b90509250925092565b60008060008060808587031215614bf857600080fd5b614c0185614b8d565b9350614c0f60208601614b8d565b9250614c1d60408601614b8d565b9150614c2b60608601614b8d565b905092959194509250565b60008060408385031215614c4957600080fd5b8235614c5481614861565b91506020830135614a3e81614861565b60008060008060808587031215614c7a57600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b83811015614ccf5781516001600160a01b031687529582019590820190600101614caa565b509495945050505050565b604081526000614ced6040830185614c96565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115614d68578160001904821115614d4e57614d4e614cfe565b80851615614d5b57918102915b93841c9390800290614d32565b509250929050565b600082614d7f57506001610f7d565b81614d8c57506000610f7d565b8160018114614da25760028114614dac57614dc8565b6001915050610f7d565b60ff841115614dbd57614dbd614cfe565b50506001821b610f7d565b5060208310610133831016604e8410600b8410161715614deb575081810a610f7d565b614df58383614d2d565b8060001904821115614e0957614e09614cfe565b029392505050565b600061179560ff841683614d70565b600082614e56577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816000190483118215151615614e7557614e75614cfe565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082821015614eea57614eea614cfe565b500390565b6000600019821415614f0357614f03614cfe565b5060010190565b60008219821115614f1d57614f1d614cfe565b500190565b600060208284031215614f3457600080fd5b5051919050565b60008060408385031215614f4e57600080fd5b8251614f5981614886565b6020939093015192949293505050565b600061ffff808316818516808303821115614f8657614f86614cfe565b01949350505050565b600061ffff83811690831681811015614faa57614faa614cfe565b039392505050565b600060208284031215614fc457600080fd5b815161179581614861565b600060208284031215614fe157600080fd5b815161179581614886565b600060ff821660ff81141561500357615003614cfe565b60010192915050565b85815284602082015260a06040820152600061502b60a0830186614c96565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220d2c2955b80c0ebe802513ea018d011b4f94ce7ed29dfa2c202e782b006adf9aa64736f6c634300080b0033

Deployed Bytecode Sourcemap

6228:26675:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9012:73;;;;;;;;;;;;9043:42;9012:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;9012:73:0;;;;;;;;19631:172;;;;;;;;;;-1:-1:-1;19631:172:0;;;;;:::i;:::-;;:::i;:::-;;13542:80;;;;;;;;;;-1:-1:-1;13614:5:0;;;;;;;;;;;;;;;;;13542:80;;;;;;;:::i;8712:26::-;;;;;;;;;;-1:-1:-1;8712:26:0;;;;-1:-1:-1;;;;;8712:26:0;;;20501:149;;;;;;;;;;-1:-1:-1;20501:149:0;;;;;:::i;:::-;;:::i;14236:161::-;;;;;;;;;;-1:-1:-1;14236:161:0;;;;;:::i;:::-;;:::i;:::-;;;3822:14:1;;3815:22;3797:41;;3785:2;3770:18;14236:161:0;3657:187:1;23881:112:0;;;;;;;;;;;;;:::i;:::-;;;3995:25:1;;;3983:2;3968:18;23881:112:0;3849:177:1;8775:28:0;;;;;;;;;;-1:-1:-1;8775:28:0;;;;-1:-1:-1;;;;;8775:28:0;;;17437:1519;;;;;;;;;;-1:-1:-1;17437:1519:0;;;;;:::i;:::-;;:::i;13277:83::-;;;;;;;;;;-1:-1:-1;13350:7:0;;13277:83;;8497:206;;;;;;;;;;-1:-1:-1;8497:206:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4677:6:1;4710:15;;;4692:34;;4762:15;;;4757:2;4742:18;;4735:43;4814:15;;;4794:18;;;4787:43;;;;4866:15;;4861:2;4846:18;;4839:43;4919:15;;;4913:3;4898:19;;4891:44;4654:3;4639:19;8497:206:0;4418:523:1;14903:306:0;;;;;;;;;;-1:-1:-1;14903:306:0;;;;;:::i;:::-;;:::i;23495:264::-;;;;;;;;;;-1:-1:-1;23495:264:0;;;;;:::i;:::-;;:::i;20298:195::-;;;;;;;;;;-1:-1:-1;20298:195:0;;;;;:::i;:::-;;:::i;16885:141::-;;;;;;;;;;;;;:::i;18964:250::-;;;;;;;;;;-1:-1:-1;18964:250:0;;;;;:::i;:::-;;:::i;13366:80::-;;;;;;;;;;-1:-1:-1;13434:9:0;;13366:80;;13434:9;;;;6454:36:1;;6442:2;6427:18;13366:80:0;6312:184:1;20182:108:0;;;;;;;;;;-1:-1:-1;20182:108:0;;;;;:::i;:::-;;:::i;16731:146::-;;;;;;;;;;-1:-1:-1;16731:146:0;;;;;:::i;:::-;;:::i;15217:215::-;;;;;;;;;;-1:-1:-1;15217:215:0;;;;;:::i;:::-;;:::i;23221:266::-;;;;;;;;;;-1:-1:-1;23221:266:0;;;;;:::i;:::-;;:::i;8745:21::-;;;;;;;;;;-1:-1:-1;8745:21:0;;;;-1:-1:-1;;;;;8745:21:0;;;9815:34;;;;;;;;;;-1:-1:-1;9815:34:0;;;;;;;;12131:590;;;;;;;;;;-1:-1:-1;12131:590:0;;;;;:::i;:::-;;:::i;17034:125::-;;;;;;;;;;-1:-1:-1;17034:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;17123:28:0;17099:4;17123:28;;;:19;:28;;;;;;;;;17034:125;9856:36;;;;;;;;;;-1:-1:-1;9856:36:0;;;;;;;;;;;20070:104;;;;;;;;;;;;;:::i;17167:134::-;;;;;;;;;;-1:-1:-1;17167:134:0;;;;;:::i;:::-;;:::i;20782:125::-;;;;;;;;;;-1:-1:-1;20782:125:0;;;;;:::i;:::-;;:::i;19222:248::-;;;;;;;;;;-1:-1:-1;19222:248:0;;;;;:::i;:::-;;:::i;23767:106::-;;;;;;;;;;;;;:::i;13855:198::-;;;;;;;;;;-1:-1:-1;13855:198:0;;;;;:::i;:::-;;:::i;12729:195::-;;;;;;;;;;;;;:::i;24298:263::-;;;;;;;;;;-1:-1:-1;24298:263:0;;;;;:::i;:::-;;:::i;7860:157::-;;;;;;;;;;-1:-1:-1;7860:157:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16223:500;;;;;;;;;;-1:-1:-1;16223:500:0;;;;;:::i;:::-;;:::i;17309:120::-;;;;;;;;;;-1:-1:-1;17309:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;17401:20:0;17377:4;17401:20;;;:11;:20;;;;;;;;;17309:120;13628:80;;;;;;;;;;-1:-1:-1;13680:7:0;12109:6;-1:-1:-1;;;;;12109:6:0;13628:80;23881:112;14722:173;;;;;;;;;;;;;:::i;28234:429::-;;;;;;;;;;;;;:::i;20658:116::-;;;;;;;;;;;;;:::i;:::-;;;;7750:14:1;;7743:22;7725:41;;7797:2;7782:18;;7775:34;;;;7698:18;20658:116:0;7557:258:1;13452:84:0;;;;;;;;;;-1:-1:-1;13526:7:0;;;;;;;;;;;;;;;;;13452:84;;15440:225;;;;;;;;;;-1:-1:-1;15440:225:0;;;;;:::i;:::-;;:::i;14061:167::-;;;;;;;;;;-1:-1:-1;14061:167:0;;;;;:::i;:::-;;:::i;22965:248::-;;;;;;;;;;-1:-1:-1;22965:248:0;;;;;:::i;:::-;;:::i;22320:637::-;;;;;;;;;;-1:-1:-1;22320:637:0;;;;;:::i;:::-;;:::i;21084:607::-;;;;;;;;;;-1:-1:-1;21084:607:0;;;;;:::i;:::-;;:::i;21699:613::-;;;;;;;;;;-1:-1:-1;21699:613:0;;;;;:::i;:::-;;:::i;8193:162::-;;;;;;;;;;-1:-1:-1;8193:162:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8026:158;;;;;;;;;;-1:-1:-1;8026:158:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19811:118;;;;;;;;;;-1:-1:-1;19811:118:0;;;;;:::i;:::-;;:::i;24569:165::-;;;;;;;;;;-1:-1:-1;24569:165:0;;;;;:::i;:::-;;:::i;8364:124::-;;;;;;;;;;-1:-1:-1;8364:124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8956:6:1;8989:15;;;8971:34;;9041:15;;;9036:2;9021:18;;9014:43;9093:15;;;9073:18;;;9066:43;;;;9145:15;;;9140:2;9125:18;;9118:43;8933:3;8918:19;8364:124:0;8723:444:1;13714:133:0;;;;;;;;;;-1:-1:-1;13714:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;13816:19:0;;;13798:7;13816:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;13714:133;15673:542;;;;;;;;;;-1:-1:-1;15673:542:0;;;;;:::i;:::-;;:::i;28671:183::-;;;;;;;;;;;;;:::i;19478:145::-;;;;;;;;;;-1:-1:-1;19478:145:0;;;;;:::i;:::-;;:::i;9228:266::-;;;;;;;;;;-1:-1:-1;9228:266:0;;;;;;;;-1:-1:-1;;;;;9228:266:0;;;;;;;;;;;;;;-1:-1:-1;;;;;9894:15:1;;;9876:34;;9946:15;;;9941:2;9926:18;;9919:43;9998:15;;9978:18;;;9971:43;;;;9803:2;9788:18;9228:266:0;9565:455:1;24001:289:0;;;;;;;;;;-1:-1:-1;24001:289:0;;;;;:::i;:::-;;:::i;9525:39::-;;;;;;;;;;-1:-1:-1;9525:39:0;;;;;;;;;;;19937:125;;;;;;;;;;-1:-1:-1;19937:125:0;;;;;:::i;:::-;;:::i;20915:161::-;;;;;;;;;;-1:-1:-1;20915:161:0;;;;;:::i;:::-;;:::i;19631:172::-;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;;;;;;;;;19739:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;19739:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;19777:8;;19787:7;;19739:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19631:172:::0;;:::o;20501:149::-;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;20585:2:::1;20578:3;:9;;20570:30;;;::::0;-1:-1:-1;;;20570:30:0;;11799:2:1;20570:30:0::1;::::0;::::1;11781:21:1::0;11838:1;11818:18;;;11811:29;11876:10;11856:18;;;11849:38;11904:18;;20570:30:0::1;11597:331:1::0;20570:30:0::1;20611:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;3995:25:1::0;;;20611:9:0;;;::::1;-1:-1:-1::0;;;;;20611:9:0::1;::::0;:26:::1;::::0;3968:18:1;;20611:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20501:149:::0;:::o;14236:161::-;14311:4;14328:39;189:10;14351:7;14360:6;14328:8;:39::i;:::-;-1:-1:-1;14385:4:0;14236:161;;;;;:::o;23881:112::-;23975:9;;23926:7;;23971:13;;23975:9;;23971:2;:13;:::i;:::-;23953:14;;:32;;;;:::i;:::-;23946:39;;23881:112;:::o;17437:1519::-;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;17531:7:::1;17527:1422;;;-1:-1:-1::0;;;;;17564:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;17563:21;17555:62;;;::::0;-1:-1:-1;;;17555:62:0;;14106:2:1;17555:62:0::1;::::0;::::1;14088:21:1::0;14145:2;14125:18;;;14118:30;14184;14164:18;;;14157:58;14232:18;;17555:62:0::1;13904:352:1::0;17555:62:0::1;-1:-1:-1::0;;;;;17635:16:0;::::1;17654:1;17635:16:::0;;;:7:::1;:16;::::0;;;;;:20;17632:116:::1;;-1:-1:-1::0;;;;;17715:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;17695:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;17676:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;17632:116:::1;-1:-1:-1::0;;;;;17762:20:0;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;17762:27:0::1;17785:4;17762:27;::::0;;17818:6:::1;::::0;;;::::1;17807:17;17804:79;;17844:9;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;17844:23:0;;;;;::::1;::::0;;-1:-1:-1;;17844:23:0::1;-1:-1:-1::0;;;;;17844:23:0;::::1;;::::0;;17804:79:::1;17437:1519:::0;;:::o;17527:1422::-:1;17905:7;17900:1049;;-1:-1:-1::0;;;;;17937:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;17929:61;;;::::0;-1:-1:-1;;;17929:61:0;;14463:2:1;17929:61:0::1;::::0;::::1;14445:21:1::0;14502:2;14482:18;;;14475:30;14541;14521:18;;;14514:58;14589:18;;17929:61:0::1;14261:352:1::0;17929:61:0::1;18020:6;::::0;-1:-1:-1;;;;;18009:17:0;;::::1;18020:6:::0;::::1;18009:17;18005:933;;;18085:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;18066:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;18047:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;18114:7:::1;:16:::0;;;;;:20;;;18153:11:::1;:20:::0;;;:28;;-1:-1:-1;;18153:28:0::1;::::0;;17437:1519;;:::o;18005:933::-:1;18206:9;:16:::0;18226:1:::1;18206:21;18203:735;;;18286:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;18267:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;18248:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;18315:7:::1;:16:::0;;;;;:20;;;18354:11:::1;:20:::0;;;:28;;-1:-1:-1;;18354:28:0::1;::::0;;18401:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;18401:15:0;;;;;-1:-1:-1;;18401:15:0::1;::::0;;;;;17437:1519;;:::o;18203:735::-:1;18462:9;18457:466;18481:9;:16:::0;18477:20;::::1;18457:466;;;18547:7;-1:-1:-1::0;;;;;18531:23:0::1;:9;18541:1;18531:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;18531:12:0::1;:23;18527:377;;;18598:9;18608:16:::0;;:20:::1;::::0;18627:1:::1;::::0;18608:20:::1;:::i;:::-;18598:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;18583:9:::1;:12:::0;;-1:-1:-1;;;;;18598:31:0;;::::1;::::0;18593:1;;18583:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;18583:46:0::1;-1:-1:-1::0;;;;;18583:46:0;;::::1;;::::0;;18656:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;18741:10:::1;:8;:10::i;:::-;-1:-1:-1::0;;;;;18722:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;18703:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;18778:11:::1;:20:::0;;;:28;;-1:-1:-1;;18778:28:0::1;::::0;;18833:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;18833:15:0;;;;;-1:-1:-1;;18833:15:0::1;::::0;;;;;18457:466:::1;17437:1519:::0;;:::o;18527:377::-:1;18499:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18457:466;;;;17437:1519:::0;;:::o;14903:306::-;-1:-1:-1;;;;;15024:19:0;;15003:4;15024:19;;;:11;:19;;;;;;;;15044:10;15024:31;;;;;;;;-1:-1:-1;;15024:52:0;15020:126;;-1:-1:-1;;;;;15093:19:0;;;;;;:11;:19;;;;;;;;15113:10;15093:31;;;;;;;:41;;15128:6;;15093:19;:41;;15128:6;;15093:41;:::i;:::-;;;;-1:-1:-1;;15020:126:0;15165:36;15175:6;15183:9;15194:6;15165:9;:36::i;:::-;15158:43;14903:306;-1:-1:-1;;;;14903:306:0:o;23495:264::-;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;23637:3:::1;23627:7;;:13;;;;:::i;:::-;23615:7;23604;23594;;:17;;;;:::i;:::-;23593:29;;;;:::i;:::-;:48;;23585:109;;;::::0;-1:-1:-1;;;23585:109:0;;15761:2:1;23585:109:0::1;::::0;::::1;15743:21:1::0;15800:2;15780:18;;;15773:30;15839:34;15819:18;;;15812:62;15910:18;15890;;;15883:46;15946:19;;23585:109:0::1;15559:412:1::0;23585:109:0::1;23744:7;23733;23723;;:17;;;;:::i;:::-;23722:29;;;;:::i;:::-;23705:14;:46:::0;-1:-1:-1;;23495:264:0:o;20298:195::-;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;20420:9:::1;::::0;:65:::1;::::0;;;;16208:14:1;;16201:22;20420:65:0::1;::::0;::::1;16183:41:1::0;16267:14;;16260:22;16240:18;;;16233:50;16326:14;;16319:22;16299:18;;;16292:50;16385:14;;16378:22;16358:18;;;16351:50;20420:9:0;;;::::1;-1:-1:-1::0;;;;;20420:9:0::1;::::0;:24:::1;::::0;16155:19:1;;20420:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20298:195:::0;;;;:::o;16885:141::-;16938:7;16995:21;17013:1;16995:9;:21::i;:::-;16977:15;9043:42;16977:9;:15::i;:::-;:39;;;;:::i;:::-;16966:7;;:51;;;;:::i;18964:250::-;19030:7;19069;;19058;:18;;19050:73;;;;-1:-1:-1;;;19050:73:0;;16747:2:1;19050:73:0;;;16729:21:1;16786:2;16766:18;;;16759:30;16825:34;16805:18;;;16798:62;16896:12;16876:18;;;16869:40;16926:19;;19050:73:0;16545:406:1;19050:73:0;19134:19;19157:10;:8;:10::i;:::-;19134:33;-1:-1:-1;19185:21:0;19134:33;19185:7;:21;:::i;:::-;19178:28;18964:250;-1:-1:-1;;;18964:250:0:o;20182:108::-;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;20251:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;20251:31:0::1;::::0;::::1;160:74:1::0;20251:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;20251:31:0::1;14:226:1::0;16731:146:0;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;16819:16:::1;::::0;::::1;::::0;::::1;;;16818:17;16810:26;;;::::0;::::1;;16847:13;:22:::0;;-1:-1:-1;;16847:22:0::1;-1:-1:-1::0;;;;;16847:22:0;;;::::1;::::0;;;::::1;::::0;;16731:146::o;15217:215::-;189:10;15305:4;15354:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15354:34:0;;;;;;;;;;15305:4;;15322:80;;15345:7;;15354:47;;15391:10;;15354:47;:::i;:::-;15322:8;:80::i;23221:266::-;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;23362:3:::1;23352:7;;:13;;;;:::i;:::-;23340:7;23329;23319;;:17;;;;:::i;:::-;23318:29;;;;:::i;:::-;:48;;23310:114;;;::::0;-1:-1:-1;;;23310:114:0;;17158:2:1;23310:114:0::1;::::0;::::1;17140:21:1::0;17197:2;17177:18;;;17170:30;17236:34;17216:18;;;17209:62;17307:23;17287:18;;;17280:51;17348:19;;23310:114:0::1;16956:417:1::0;23310:114:0::1;23472:7;23461;23451;;:17;;;;:::i;:::-;23450:29;;;;:::i;:::-;23435:12;:44:::0;-1:-1:-1;;23221:266:0:o;12131:590::-;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;-1:-1:-1;;;;;12212:22:0;::::1;12204:96;;;::::0;-1:-1:-1;;;12204:96:0;;17580:2:1;12204:96:0::1;::::0;::::1;17562:21:1::0;17619:2;17599:18;;;17592:30;17658:34;17638:18;;;17631:62;17729:31;17709:18;;;17702:59;17778:19;;12204:96:0::1;17378:425:1::0;12204:96:0::1;-1:-1:-1::0;;;;;12319:16:0;::::1;9043:42;12319:16;;12311:90;;;::::0;-1:-1:-1;;;12311:90:0;;17580:2:1;12311:90:0::1;::::0;::::1;17562:21:1::0;17619:2;17599:18;;;17592:30;17658:34;17638:18;;;17631:62;17729:31;17709:18;;;17702:59;17778:19;;12311:90:0::1;17378:425:1::0;12311:90:0::1;12432:6;::::0;;12412:34:::1;::::0;-1:-1:-1;;;;;12432:6:0;;::::1;::::0;12412:19:::1;:34::i;:::-;12457:35;12477:8;12487:4;12457:19;:35::i;:::-;12536:1;12526:6:::0;;12516:17:::1;::::0;-1:-1:-1;;;;;12526:6:0::1;12516:9;:17::i;:::-;:21;12513:99;;;12564:6;::::0;12554:46:::1;::::0;-1:-1:-1;;;;;12564:6:0::1;12572:8:::0;12582:17:::1;12564:6:::0;12582:9:::1;:17::i;:::-;12554:9;:46::i;:::-;;12513:99;12632:6;:17:::0;;-1:-1:-1;;12632:17:0::1;-1:-1:-1::0;;;;;12632:17:0;::::1;::::0;;::::1;::::0;;12665:38:::1;::::0;12632:17;;;;12665:38:::1;::::0;12632:6;12665:38:::1;12131:590:::0;:::o;20070:104::-;20115:7;20142:9;;;;;;;;;-1:-1:-1;;;;;20142:9:0;-1:-1:-1;;;;;20142:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17167:134::-;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;-1:-1:-1;;;;;17255:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;17255:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17167:134::o;20782:125::-;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;20858:9:::1;::::0;:41:::1;::::0;;;;3822:14:1;;3815:22;20858:41:0::1;::::0;::::1;3797::1::0;20858:9:0;;;::::1;-1:-1:-1::0;;;;;20858:9:0::1;::::0;:32:::1;::::0;3770:18:1;;20858:41:0::1;3657:187:1::0;19222:248:0;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;19306:16:::1;::::0;::::1;::::0;::::1;;;19305:17;19297:54;;;::::0;-1:-1:-1;;;19297:54:0;;18199:2:1;19297:54:0::1;::::0;::::1;18181:21:1::0;18238:2;18218:18;;;18211:30;18277:26;18257:18;;;18250:54;18321:18;;19297:54:0::1;17997:348:1::0;19297:54:0::1;-1:-1:-1::0;;;;;19370:28:0;::::1;19393:4;19370:28;;19362:55;;;::::0;-1:-1:-1;;;19362:55:0;;18552:2:1;19362:55:0::1;::::0;::::1;18534:21:1::0;18591:2;18571:18;;;18564:30;18630:16;18610:18;;;18603:44;18664:18;;19362:55:0::1;18350:338:1::0;19362:55:0::1;19428:9;:34:::0;;-1:-1:-1;;;;;19428:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;19222:248::o;23767:106::-;23855:9;;23808:7;;23851:13;;23855:9;;23851:2;:13;:::i;:::-;23835:12;;:30;;;;:::i;13855:198::-;-1:-1:-1;;;;;13945:20:0;;13921:7;13945:20;;;:11;:20;;;;;;;;13941:49;;;-1:-1:-1;;;;;;13974:16:0;;;;;:7;:16;;;;;;;13855:198::o;13941:49::-;-1:-1:-1;;;;;14028:16:0;;;;;;:7;:16;;;;;;14008:37;;:19;:37::i;12729:195::-;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;12816:6:::1;::::0;;12796:34:::1;::::0;-1:-1:-1;;;;;12816:6:0;;::::1;::::0;12796:19:::1;:34::i;:::-;12858:1;12841:19:::0;;-1:-1:-1;;12841:19:0::1;::::0;;12876:40:::1;::::0;12858:1;;12876:40:::1;::::0;12858:1;;12876:40:::1;12729:195::o:0;24298:263::-;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;24421:11:::1;:42:::0;;-1:-1:-1;;;;;24421:42:0;;::::1;-1:-1:-1::0;;24421:42:0;;::::1;;::::0;;;24474:15;:30;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;24515:19;:38;;;;;::::1;::::0;::::1;;::::0;;24298:263::o;16223:500::-;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;16304:16;16300:416:::1;;-1:-1:-1::0;;;;;16337:13:0;;::::1;16353:5;16337:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;16337:21:0::1;::::0;;16373:9:::1;::::0;:32;;;;;::::1;::::0;::::1;18861:74:1::0;;;;18951:18;;;18944:50;;;;16373:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;18834:18:1;;16373:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;16300:416;16442:17;::::0;:22;16438:136:::1;;16531:6;16511:17;;16493:15;:35;;;;:::i;:::-;:44;16485:73;;;::::0;-1:-1:-1;;;16485:73:0;;19207:2:1;16485:73:0::1;::::0;::::1;19189:21:1::0;19246:2;19226:18;;;19219:30;19285:18;19265;;;19258:46;19321:18;;16485:73:0::1;19005:340:1::0;16485:73:0::1;-1:-1:-1::0;;;;;16588:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;16588:20:0::1;16604:4;16588:20:::0;;::::1;::::0;;;16643:15:::1;16623:17;:35:::0;;;16673:9:::1;::::0;:31;;;;;;;::::1;18861:74:1::0;;;;18951:18;;;18944:50;16673:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;18834:18:1;;16673:31:0::1;18693:307:1::0;14722:173:0;14786:4;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;14835:9:::1;::::0;14803:62:::1;::::0;14820:4:::1;::::0;-1:-1:-1;;;;;14835:9:0::1;-1:-1:-1::0;;14803:8:0::1;:62::i;:::-;-1:-1:-1::0;14883:4:0::1;14722:173:::0;:::o;28234:429::-;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;28296:14:::1;::::0;::::1;;28295:15;28287:52;;;::::0;-1:-1:-1;;;28287:52:0;;19552:2:1;28287:52:0::1;::::0;::::1;19534:21:1::0;19591:2;19571:18;;;19564:30;19630:26;19610:18;;;19603:54;19674:18;;28287:52:0::1;19350:348:1::0;28287:52:0::1;28358:16;::::0;::::1;::::0;::::1;;;28350:53;;;::::0;-1:-1:-1;;;28350:53:0;;19905:2:1;28350:53:0::1;::::0;::::1;19887:21:1::0;19944:2;19924:18;;;19917:30;19983:26;19963:18;;;19956:54;20027:18;;28350:53:0::1;19703:348:1::0;28350:53:0::1;28425:9;::::0;;;::::1;-1:-1:-1::0;;;;;28425:9:0::1;28414:99;;28465:9;:36:::0;;;::::1;28495:4;28465:36:::0;::::1;;::::0;;28414:99:::1;28527:9;::::0;28547:6:::1;::::0;28602:9:::1;::::0;28527:85:::1;::::0;;;;-1:-1:-1;;;;;28547:6:0;;::::1;28527:85;::::0;::::1;20279:74:1::0;20401:10;28562:12:0::1;20389:23:1::0;20369:18;;;20362:51;20461:18;28584:15:0::1;20449:31:1::0;20429:18;;;20422:59;28602:9:0::1;::::0;;::::1;20497:18:1::0;;;20490:45;28527:9:0;;;::::1;;::::0;:19:::1;::::0;20251::1;;28527:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;28523:101:::0;28634:14:::1;:21:::0;;-1:-1:-1;;28634:21:0::1;28651:4;28634:21;::::0;;28234:429::o;20658:116::-;20706:4;20712:7;20739:9;;;;;;;;;-1:-1:-1;;;;;20739:9:0;-1:-1:-1;;;;;20739:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20732:34;;;;20658:116;;:::o;15440:225::-;189:10;15533:4;15582:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15582:34:0;;;;;;;;;;15533:4;;15550:85;;15573:7;;15582:52;;15619:15;;15582:52;:::i;14061:167::-;14139:4;14156:42;189:10;14180:9;14191:6;14156:9;:42::i;:::-;-1:-1:-1;14216:4:0;;14061:167;-1:-1:-1;;;14061:167:0:o;22965:248::-;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;23060:7:::1;:17:::0;;23088:25;;23060:17;::::1;::::0;;::::1;::::0;;;::::1;23088:25:::0;;;;;;;;;::::1;;;23124:29:::0;::::1;::::0;;::::1;;::::0;;23060:17;23180:19:::1;23124:29:::0;23088:25;23180:19:::1;:::i;:::-;:25;;;;:::i;:::-;23164:7;:41:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;22965:248:0:o;22320:637::-;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;22457:10:::1;:21:::0;::::1;::::0;;::::1;22446:32:::0;;::::1;;::::0;::::1;::::0;:77:::1;;-1:-1:-1::0;22506:10:0::1;:17:::0;::::1;::::0;;;::::1;::::0;::::1;22499:24:::0;;::::1;;;22446:77;:130;;;;-1:-1:-1::0;22555:10:0::1;:21:::0;::::1;::::0;;;::::1;::::0;::::1;22544:32:::0;;::::1;;;22446:130;:187;;;;-1:-1:-1::0;22610:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;22597:36:::0;;::::1;;;22446:187;22438:196;;;::::0;::::1;;22645:12;22692:3:::0;22682:7;22660:19:::1;22670:9:::0;22660:7;:19:::1;:::i;:::-;:29;;;;:::i;:::-;:35;;;;:::i;:::-;22645:50;;22723:4;22714:5;:13;;;;22706:22;;;::::0;::::1;;22739:14;:32:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;22782:36:0;;;;;;;;;;::::1;;;22872:24:::0;;22829:32;;;::::1;;22872:24:::0;;;;;;::::1;::::0;;;::::1;;::::0;;22934:15:::1;22739:32:::0;22934:5;:15:::1;:::i;:::-;22907:14;:42:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;22320:637:0:o;21084:607::-;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;21216:10:::1;:21:::0;::::1;::::0;;::::1;21205:32:::0;;::::1;;::::0;::::1;::::0;:77:::1;;-1:-1:-1::0;21265:10:0::1;:17:::0;::::1;::::0;;;::::1;::::0;::::1;21258:24:::0;;::::1;;;21205:77;:130;;;;-1:-1:-1::0;21314:10:0::1;:21:::0;::::1;::::0;;;::::1;::::0;::::1;21303:32:::0;;::::1;;;21205:130;:187;;;;-1:-1:-1::0;21369:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;21356:36:::0;;::::1;;;21205:187;21197:196;;;::::0;::::1;;21404:12;21451:3:::0;21441:7;21419:19:::1;21429:9:::0;21419:7;:19:::1;:::i;:::-;:29;;;;:::i;:::-;:35;;;;:::i;:::-;21404:50;;21482:4;21473:5;:13;;;;21465:22;;;::::0;::::1;;21498:9;:27:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;21536:31:0;;;;;;;;;;::::1;;;21616:19:::0;;21578:27;;;::::1;;21616:19:::0;;;;;;::::1;::::0;;;::::1;;::::0;;21668:15:::1;21498:27:::0;21668:5;:15:::1;:::i;:::-;21646:9;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;21084:607:0:o;21699:613::-;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;21832:10:::1;:21:::0;::::1;::::0;;::::1;21821:32:::0;;::::1;;::::0;::::1;::::0;:77:::1;;-1:-1:-1::0;21881:10:0::1;:17:::0;::::1;::::0;;;::::1;::::0;::::1;21874:24:::0;;::::1;;;21821:77;:130;;;;-1:-1:-1::0;21930:10:0::1;:21:::0;::::1;::::0;;;::::1;::::0;::::1;21919:32:::0;;::::1;;;21821:130;:187;;;;-1:-1:-1::0;21985:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;21972:36:::0;;::::1;;;21821:187;21813:196;;;::::0;::::1;;22020:12;22067:3:::0;22057:7;22035:19:::1;22045:9:::0;22035:7;:19:::1;:::i;:::-;:29;;;;:::i;:::-;:35;;;;:::i;:::-;22020:50;;22098:4;22089:5;:13;;;;22081:22;;;::::0;::::1;;22114:10;:28:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;22153:32:0;;;;;;;;;;::::1;;;22235:20:::0;;22196:28;;;::::1;;22235:20:::0;;;;;;::::1;::::0;;;::::1;;::::0;;22289:15:::1;22114:28:::0;22289:5;:15:::1;:::i;:::-;22266:10;:38:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;21699:613:0:o;19811:118::-;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;19885:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;19885:36:0::1;::::0;::::1;160:74:1::0;19885:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;133:18:1;;19885:36:0::1;14:226:1::0;24569:165:0;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;24644:19:::1;:30:::0;;;::::1;;;;-1:-1:-1::0;;24644:30:0;;::::1;;::::0;;24690:36:::1;::::0;::::1;::::0;::::1;::::0;24666:8;3822:14:1;3815:22;3797:41;;3785:2;3770:18;;3657:187;24690:36:0::1;;;;;;;;24569:165:::0;:::o;15673:542::-;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;15744:20:::1;15777:9;15744:43;;15798:16;15828:10;-1:-1:-1::0;;;;;15828:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15817:40:0::1;;15866:4;15873:10;-1:-1:-1::0;;;;;15873:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15817:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;21817:15:1;;;15817:74:0::1;::::0;::::1;21799:34:1::0;21869:15;;21849:18;;;21842:43;21711:18;;15817:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15798:93:::0;-1:-1:-1;;;;;;15906:22:0;::::1;15902:200;;15965:10;-1:-1:-1::0;;;;;15965:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15954:43:0::1;;16006:4;16013:10;-1:-1:-1::0;;;;;16013:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15954:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;21817:15:1;;;15954:77:0::1;::::0;::::1;21799:34:1::0;21869:15;;21849:18;;;21842:43;21711:18;;15954:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15945:6;:86:::0;;-1:-1:-1;;15945:86:0::1;-1:-1:-1::0;;;;;15945:86:0;;;::::1;::::0;;;::::1;::::0;;15902:200:::1;;;16073:6;:17:::0;;-1:-1:-1;;16073:17:0::1;-1:-1:-1::0;;;;;16073:17:0;::::1;;::::0;;15902:200:::1;16112:9;:22:::0;;-1:-1:-1;;16112:22:0::1;-1:-1:-1::0;;;;;16112:22:0;::::1;::::0;;::::1;::::0;;;16145:62:::1;::::0;16162:4:::1;::::0;-1:-1:-1;;16145:8:0::1;:62::i;28671:183::-:0;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;28738:16:::1;::::0;::::1;::::0;::::1;;;28737:17;28729:58;;;::::0;-1:-1:-1;;;28729:58:0;;22098:2:1;28729:58:0::1;::::0;::::1;22080:21:1::0;22137:2;22117:18;;;22110:30;22176;22156:18;;;22149:58;22224:18;;28729:58:0::1;21896:352:1::0;28729:58:0::1;12082:7:::0;12109:6;;28798:48:::1;::::0;-1:-1:-1;;;;;12109:6:0;;;;28824:21:::1;28798:48:::0;::::1;;;::::0;28824:21;;28798:48;12082:7;28798:48;28824:21;12109:6;28798:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28671:183::o:0;19478:145::-;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;19568:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;18879:55:1;;;19568:47:0::1;::::0;::::1;18861:74:1::0;18978:14;;18971:22;18951:18;;;18944:50;19568:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;18834:18:1;;19568:47:0::1;18693:307:1::0;24001:289:0;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;24201:16:::1;24181;24171:7;;:26;;;;:::i;:::-;24170:47;;;;:::i;:::-;24154:13;:63:::0;24242:7:::1;::::0;24269:13;;24242:23:::1;::::0;24252:13;;24242:23:::1;:::i;:::-;24241:41;;;;:::i;:::-;24228:10;:54:::0;-1:-1:-1;;;;24001:289:0:o;19937:125::-;20022:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;20022:32:0;;;160:74:1;19998:4:0;;20022:9;;;;;:23;;133:18:1;;20022:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20915:161::-;10463:6;;-1:-1:-1;;;;;10463:6:0;189:10;10463:22;10455:52;;;;-1:-1:-1;;;10455:52:0;;10617:2:1;10455:52:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:47;10732:18;;10455:52:0;10415:341:1;10455:52:0;21008:9:::1;21000:4;:17;;20992:26;;;::::0;::::1;;21029:9;::::0;:39:::1;::::0;;;;::::1;::::0;::::1;3995:25:1::0;;;21029:9:0;;;::::1;-1:-1:-1::0;;;;;21029:9:0::1;::::0;:33:::1;::::0;3968:18:1;;21029:39:0::1;3849:177:1::0;14405:309:0;-1:-1:-1;;;;;14499:20:0;;14491:52;;;;-1:-1:-1;;;14491:52:0;;22705:2:1;14491:52:0;;;22687:21:1;22744:2;22724:18;;;22717:30;22783:21;22763:18;;;22756:49;22822:18;;14491:52:0;22503:343:1;14491:52:0;-1:-1:-1;;;;;14562:21:0;;14554:53;;;;-1:-1:-1;;;14554:53:0;;22705:2:1;14554:53:0;;;22687:21:1;22744:2;22724:18;;;22717:30;22783:21;22763:18;;;22756:49;22822:18;;14554:53:0;22503:343:1;14554:53:0;-1:-1:-1;;;;;14620:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;14673:33;;3995:25:1;;;14673:33:0;;3968:18:1;14673:33:0;;;;;;;14405:309;;;:::o;32082:818::-;32162:7;;32198;;32231:6;;-1:-1:-1;;;;;32231:6:0;32124:7;32219:19;;;:11;:19;;;;;;32124:7;;32162;32198;32219:19;;32216:217;;;32274:6;;-1:-1:-1;;;;;32274:6:0;32266:15;;;;:7;:15;;;;;;32255:26;;;;:::i;:::-;32315:6;;-1:-1:-1;;;;;32315:6:0;32307:15;;;;:7;:15;;;;;;32255:26;;-1:-1:-1;32296:26:0;;;;:::i;:::-;32349:6;;-1:-1:-1;;;;;32349:6:0;32341:15;;;;:7;:15;;;;;;32296:26;;-1:-1:-1;32341:25:0;-1:-1:-1;32341:25:0;:54;;-1:-1:-1;32378:6:0;;-1:-1:-1;;;;;32378:6:0;32370:15;;;;:7;:15;;;;;;:25;-1:-1:-1;32341:54:0;32337:84;;;32414:7;;32404;;:17;;;;:::i;:::-;32397:24;;;;32082:818;:::o;32337:84::-;32446:9;:16;:20;32443:347;;32488:7;32483:296;32505:9;:16;32501:20;;;;32483:296;;;32575:7;32551;:21;32559:9;32569:1;32559:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32559:12:0;32551:21;;;;;;;;;;;;;:31;;:66;;;32610:7;32586;:21;32594:9;32604:1;32594:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32594:12:0;32586:21;;;;;;;;;;;;;:31;32551:66;32547:96;;;32636:7;;32626;;:17;;;;:::i;:::-;32619:24;;;;;32082:818;:::o;32547:96::-;32682:7;:21;32690:9;32700:1;32690:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32690:12:0;32682:21;;;;;;;;;;;;;32672:31;;:7;:31;:::i;:::-;32662:41;;32742:7;:21;32750:9;32760:1;32750:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32750:12:0;32742:21;;;;;;;;;;;;;32732:31;;:7;:31;:::i;:::-;32722:41;-1:-1:-1;32523:3:0;;;;:::i;:::-;;;;32483:296;;;;32443:347;32824:7;;32814;;:17;;;;:::i;:::-;32804:7;:27;32800:57;;;32850:7;;32840;;:17;;;;:::i;32800:57::-;32875:17;32885:7;32875;:17;:::i;25073:1470::-;25152:4;-1:-1:-1;;;;;25177:18:0;;25169:68;;;;-1:-1:-1;;;25169:68:0;;23233:2:1;25169:68:0;;;23215:21:1;23272:2;23252:18;;;23245:30;23311:34;23291:18;;;23284:62;23382:7;23362:18;;;23355:35;23407:19;;25169:68:0;23031:401:1;25169:68:0;-1:-1:-1;;;;;25256:16:0;;25248:64;;;;-1:-1:-1;;;25248:64:0;;23639:2:1;25248:64:0;;;23621:21:1;23678:2;23658:18;;;23651:30;23717:34;23697:18;;;23690:62;23788:5;23768:18;;;23761:33;23811:19;;25248:64:0;23437:399:1;25248:64:0;25340:1;25331:6;:10;25323:64;;;;-1:-1:-1;;;25323:64:0;;24043:2:1;25323:64:0;;;24025:21:1;24082:2;24062:18;;;24055:30;24121:34;24101:18;;;24094:62;24192:11;24172:18;;;24165:39;24221:19;;25323:64:0;23841:405:1;25323:64:0;25401:20;25412:4;25418:2;25401:10;:20::i;:::-;25398:480;;;25442:14;;;;25438:89;;25477:34;;-1:-1:-1;;;25477:34:0;;24453:2:1;25477:34:0;;;24435:21:1;24492:2;24472:18;;;24465:30;24531:26;24511:18;;;24504:54;24575:18;;25477:34:0;24251:348:1;25438:89:0;-1:-1:-1;;;;;25544:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;25561:11:0;;;;;;:7;:11;;;;;;;;25544:28;25541:142;;;25610:12;;25600:6;:22;;25592:75;;;;-1:-1:-1;;;25592:75:0;;24806:2:1;25592:75:0;;;24788:21:1;24845:2;24825:18;;;24818:30;24884:34;24864:18;;;24857:62;24955:10;24935:18;;;24928:38;24983:19;;25592:75:0;24604:404:1;25592:75:0;25706:13;;-1:-1:-1;;;;;25700:19:0;;;25706:13;;25700:19;;;;:35;;-1:-1:-1;;;;;;25724:11:0;;;;;;:7;:11;;;;;;;;25723:12;25700:35;25697:170;;;25790:14;;25780:6;25764:13;25774:2;25764:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;25756:95;;;;-1:-1:-1;;;25756:95:0;;25215:2:1;25756:95:0;;;25197:21:1;25254:2;25234:18;;;25227:30;25293:34;25273:18;;;25266:62;25364:12;25344:18;;;25337:40;25394:19;;25756:95:0;25013:406:1;25756:95:0;-1:-1:-1;;;;;25923:25:0;;25890:12;25923:25;;;:19;:25;;;;;;25905:4;;25923:25;;;:52;;-1:-1:-1;;;;;;25952:23:0;;;;;;:19;:23;;;;;;;;25923:52;25920:98;;;-1:-1:-1;26001:5:0;25920:98;-1:-1:-1;;;;;26034:11:0;;;;;;:7;:11;;;;;;;;26030:443;;;26067:6;;;;26066:7;:47;;;;-1:-1:-1;26094:19:0;;;;;;;26066:47;26062:394;;;26148:28;26179:24;26197:4;26179:9;:24::i;:::-;26148:55;;26250:13;;26226:20;:37;26222:219;;26315:10;;26291:20;:34;26288:77;;-1:-1:-1;26352:10:0;;26288:77;26387:34;26400:20;26387:12;:34::i;:::-;26129:327;26062:394;26491:44;26509:4;26515:2;26519:6;26527:7;26491:17;:44::i;:::-;26484:51;25073:1470;-1:-1:-1;;;;;25073:1470:0:o;24742:323::-;24810:4;12109:6;;-1:-1:-1;;;;;24834:15:0;;;12109:6;;24834:15;;;;:45;;-1:-1:-1;12082:7:0;12109:6;-1:-1:-1;;;;;24866:13:0;;;12109:6;;24866:13;;24834:45;:84;;;;-1:-1:-1;;;;;;24897:21:0;;;;;;:17;:21;;;;;;;;24896:22;24834:84;:125;;;;-1:-1:-1;;;;;;24936:23:0;;;;;;:17;:23;;;;;;;;24935:24;24834:125;:152;;;;-1:-1:-1;;;;;;24976:10:0;;9043:42;24976:10;;24834:152;:185;;;;-1:-1:-1;;;;;;25003:16:0;;;;24834:185;:223;;;;-1:-1:-1;;;;;;25036:21:0;;25052:4;25036:21;;24827:230;24742:323;-1:-1:-1;;;24742:323:0:o;26551:1159::-;10357:6;:13;;-1:-1:-1;;10357:13:0;10366:4;10357:13;;;26638:7:::1;:13:::0;::::1;::::0;;;::::1;;26634:44;;26671:7;;26634:44;26713:4;26693:26;::::0;;;:11:::1;:26;::::0;;;;;;;26728:9:::1;::::0;-1:-1:-1;;;;;26728:9:0::1;26693:46:::0;;;;;;;;-1:-1:-1;;26693:67:0::1;26690:165;;26797:4;26777:26;::::0;;;:11:::1;:26;::::0;;;;;;;26812:9:::1;::::0;-1:-1:-1;;;;;26812:9:0::1;26777:46:::0;;;;;;;-1:-1:-1;;26777:66:0;;26690:165:::1;26899:16;::::0;;26913:1:::1;26899:16:::0;;;;;::::1;::::0;;26875:21:::1;::::0;26899:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26899:16:0::1;26875:40;;26944:4;26926;26931:1;26926:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26926:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;26970:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;26926:7;;26970:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26960:4;26965:1;26960:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26960:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;26999:9:::1;::::0;:227:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:227:::1;::::0;27074:20;;26999:9:::1;::::0;27153:4;;27180::::1;::::0;27200:15:::1;::::0;26999:227:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;27259:21:0::1;::::0;-1:-1:-1;;27297:21:0::1;:25:::0;;-1:-1:-1;27293:410:0::1;;27379:19:::0;;27444:7:::1;:13:::0;27339:12:::1;::::0;-1:-1:-1;;;;;27379:19:0::1;::::0;27444:13:::1;::::0;;::::1;::::0;::::1;::::0;27413:27:::1;::::0;27425:15;;;::::1;;27413:9:::0;:27:::1;:::i;:::-;27412:45;;;;:::i;:::-;27379:96;::::0;27465:5:::1;::::0;27379:96;::::1;::::0;;;;;27465:5;27379:96:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;27503:15:0;;27560:7:::1;:13:::0;27366:109;;-1:-1:-1;;;;;;27503:15:0::1;::::0;27560:13:::1;::::0;;::::1;::::0;::::1;::::0;27533:23:::1;::::0;27545:11;;;::::1;;27533:9:::0;:23:::1;:::i;:::-;27532:41;;;;:::i;:::-;27503:88;::::0;27581:5:::1;::::0;27503:88;::::1;::::0;;;;;27581:5;27503:88:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;27619:11:0::1;:21:::0;:72:::1;::::0;27490:101;;-1:-1:-1;;;;;;27619:21:0::1;::::0;27681:5:::1;::::0;27653:21:::1;::::0;27619:72:::1;::::0;;;27653:21;27619;27681:5;27619:72:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;27293:410:0::1;26623:1087;;10381:1;-1:-1:-1::0;10393:6:0;:14;;-1:-1:-1;;10393:14:0;;;26551:1159::o;29063:1300::-;29186:16;;29164:4;;29186:16;;;;;29181:221;;29219:28;29238:4;29244:2;29219:18;:28::i;:::-;29267:16;;;;;;;29266:17;:41;;;;;29287:20;29298:4;29304:2;29287:10;:20::i;:::-;29262:129;;;29328:47;;-1:-1:-1;;;29328:47:0;;26446:2:1;29328:47:0;;;26428:21:1;26485:2;26465:18;;;26458:30;26524:34;26504:18;;;26497:62;26595:7;26575:18;;;26568:35;26620:19;;29328:47:0;26244:401:1;29262:129:0;29414:25;29442:38;29453:4;29459:2;29463:7;29472;29442:10;:38::i;:::-;29525:14;;;;-1:-1:-1;;;;;29509:13:0;;;;;;:7;:13;;;;;;29414:66;;-1:-1:-1;29509:30:0;;;:::i;:::-;-1:-1:-1;;;;;29493:13:0;;;;;;;:7;:13;;;;;;:46;;;;29578:22;;;;29564:11;;;;;;;;;;:36;;29578:22;29564:36;:::i;:::-;-1:-1:-1;;;;;29550:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;29617:17;;;;;:11;:17;;;;;;;29613:89;;;-1:-1:-1;;;;;29667:13:0;;;;;;:7;:13;;;;;;:23;;29683:7;;29667:23;:::i;:::-;-1:-1:-1;;;;;29651:13:0;;;;;;:7;:13;;;;;:39;29613:89;-1:-1:-1;;;;;29716:15:0;;;;;;:11;:15;;;;;;;;29712:98;;;29776:22;;-1:-1:-1;;;;;29762:11:0;;29776:22;29762:11;;;:7;:11;;;;;;:36;;29776:22;29762:36;:::i;:::-;-1:-1:-1;;;;;29748:11:0;;;;;;:7;:11;;;;;:50;29712:98;29826:12;;;;:16;29822:353;;29925:10;:8;:10::i;:::-;29910:6;:12;;;:25;;;;:::i;:::-;29900:4;29884:22;;;;:7;:22;;;;;;:52;;;;:::i;:::-;29875:4;29859:22;;;;:7;:22;;;;;;;;:77;;;;29954:11;:26;;;;;;29951:110;;;30049:12;;;;;30040:4;30024:22;;;;:7;:22;;;;;;;:37;;30049:12;30024:37;:::i;:::-;30015:4;29999:22;;;;:7;:22;;;;;:62;29951:110;30104:4;-1:-1:-1;;;;;30081:43:0;30090:4;-1:-1:-1;;;;;30081:43:0;;30111:6;:12;;;30081:43;;;;3995:25:1;;3983:2;3968:18;;3849:177;30081:43:0;;;;;;;;29822:353;30203:1;30189:6;:11;;;:15;:34;;;;30222:1;30208:6;:11;;;:15;30189:34;30185:89;;;30251:6;:11;;;30240:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;30185:89:0;30306:2;-1:-1:-1;;;;;30291:42:0;30300:4;-1:-1:-1;;;;;30291:42:0;;30310:6;:22;;;30291:42;;;;3995:25:1;;3983:2;3968:18;;3849:177;30291:42:0;;;;;;;;-1:-1:-1;30351:4:0;;29063:1300;-1:-1:-1;;;;;29063:1300:0:o;27718:508::-;27800:16;;;;;;;27799:17;27791:65;;;;-1:-1:-1;;;27791:65:0;;26852:2:1;27791:65:0;;;26834:21:1;26891:2;26871:18;;;26864:30;26930:34;26910:18;;;26903:62;27001:5;26981:18;;;26974:33;27024:19;;27791:65:0;26650:399:1;27791:65:0;27872:20;27883:4;27889:2;27872:10;:20::i;:::-;27871:21;:37;;;;-1:-1:-1;27902:6:0;;-1:-1:-1;;;;;27896:12:0;;;27902:6;;27896:12;27871:37;27867:352;;;-1:-1:-1;;;;;27925:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;27925:30:0;27951:4;27925:30;;;27970:16;:23;;-1:-1:-1;;27970:23:0;27925:30;27970:23;;;;;28019:9;;;;28008:107;;28063:9;:36;;;;28093:4;28063:36;;;;;28008:107;28129:19;:26;;-1:-1:-1;;28129:26:0;;;;;28175:32;;-1:-1:-1;3797:41:1;;28175:32:0;;3785:2:1;3770:18;28175:32:0;;;;;;;27718:508;;:::o;30371:1703::-;30465:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30465:18:0;30496:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30496:25:0;30532:19;30554:10;:8;:10::i;:::-;30532:32;-1:-1:-1;30594:21:0;30532:32;30594:7;:21;:::i;:::-;30577:14;;;:38;30632:20;30643:4;30649:2;30632:10;:20::i;:::-;30628:315;;;30700:9;;:38;;;;;-1:-1:-1;;;;;27335:15:1;;;30700:38:0;;;27317:34:1;27387:15;;;27367:18;;;27360:43;27419:18;;;27412:34;;;30669:12:0;;30700:9;;;;;:19;;27229:18:1;;30700:38:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;30700:38:0;;;;;;;;-1:-1:-1;;30700:38:0;;;;;;;;;;;;:::i;:::-;;;30696:164;;30836:8;;;30696:164;30789:5;-1:-1:-1;30880:7:0;30876:56;;30908:8;;;30876:56;30654:289;30628:315;30958:7;30955:991;;;-1:-1:-1;;;;;30986:11:0;;;;;;:7;:11;;;;;;;;30982:474;;;31041:10;:18;31018:12;:41;;31041:18;;;;-1:-1:-1;;31078:45:0;;;;;;;31103:20;;;;;31078:45;;;;;;;;30982:474;;;-1:-1:-1;;;;;31149:13:0;;;;;;:7;:13;;;;;;;;31145:311;;;31206:9;:17;31183:12;:40;;31206:17;;;;-1:-1:-1;;31242:44:0;;;;;;;31267:19;;;;;31242:44;;;;;;;;31145:311;;;31350:14;:22;31327:12;:45;;31350:22;;;;-1:-1:-1;;31391:49:0;;;;;;;31416:24;;;;;31391:49;;;;;;;;31145:311;31521:10;:27;31497:12;:20;31521:27;;;;;;;;31487:30;;31497:20;31487:7;:30;:::i;:::-;31486:62;;;;:::i;:::-;31472:11;;;:76;31615:10;:27;31589:12;:22;31615:27;;;;;;;;31579:32;;31589:22;;;;31579:7;:32;:::i;:::-;31578:64;;;;:::i;:::-;31563:12;;;:79;;;31693:11;;;;:26;;31563:79;31693:26;:::i;:::-;31682:38;;:7;:38;:::i;:::-;31657:63;;31751:11;;;;:25;;31765:11;;31751:25;:::i;:::-;31737:11;;;:39;30955:991;;;31823:1;31809:11;;;:15;;;31839:12;;;:16;;;31870:32;;;31919:11;;;:15;30955:991;32029:11;32014:6;:12;;;:26;;;;:::i;:::-;31999:6;:11;;;:42;;;;:::i;:::-;31981:6;:14;;;:61;;;;:::i;:::-;31956:22;;;:86;-1:-1:-1;31956:22:0;30371:1703;-1:-1:-1;;;;;30371:1703:0:o;245:184:1:-;297:77;294:1;287:88;394:4;391:1;384:15;418:4;415:1;408:15;434:154;-1:-1:-1;;;;;513:5:1;509:54;502:5;499:65;489:93;;578:1;575;568:12;593:134;661:20;;690:31;661:20;690:31;:::i;:::-;593:134;;;:::o;732:118::-;818:5;811:13;804:21;797:5;794:32;784:60;;840:1;837;830:12;855:128;920:20;;949:28;920:20;949:28;:::i;988:1250::-;1078:6;1086;1139:2;1127:9;1118:7;1114:23;1110:32;1107:52;;;1155:1;1152;1145:12;1107:52;1195:9;1182:23;1224:18;1265:2;1257:6;1254:14;1251:34;;;1281:1;1278;1271:12;1251:34;1319:6;1308:9;1304:22;1294:32;;1364:7;1357:4;1353:2;1349:13;1345:27;1335:55;;1386:1;1383;1376:12;1335:55;1422:2;1409:16;1444:4;1467:2;1463;1460:10;1457:36;;;1473:18;;:::i;:::-;1519:2;1516:1;1512:10;1551:2;1545:9;-1:-1:-1;;1605:2:1;1601;1597:11;1593:84;1585:6;1581:97;1728:6;1716:10;1713:22;1708:2;1696:10;1693:18;1690:46;1687:72;;;1739:18;;:::i;:::-;1775:2;1768:22;1825:18;;;1859:15;;;;-1:-1:-1;1901:11:1;;;1897:20;;;1929:19;;;1926:39;;;1961:1;1958;1951:12;1926:39;1985:11;;;;2005:148;2021:6;2016:3;2013:15;2005:148;;;2087:23;2106:3;2087:23;:::i;:::-;2075:36;;2038:12;;;;2131;;;;2005:148;;;2172:6;-1:-1:-1;2197:35:1;;-1:-1:-1;2213:18:1;;;2197:35;:::i;:::-;2187:45;;;;;;988:1250;;;;;:::o;2243:656::-;2355:4;2384:2;2413;2402:9;2395:21;2445:6;2439:13;2488:6;2483:2;2472:9;2468:18;2461:34;2513:1;2523:140;2537:6;2534:1;2531:13;2523:140;;;2632:14;;;2628:23;;2622:30;2598:17;;;2617:2;2594:26;2587:66;2552:10;;2523:140;;;2681:6;2678:1;2675:13;2672:91;;;2751:1;2746:2;2737:6;2726:9;2722:22;2718:31;2711:42;2672:91;-1:-1:-1;2815:2:1;2803:15;-1:-1:-1;;2799:88:1;2784:104;;;;2890:2;2780:113;;2243:656;-1:-1:-1;;;2243:656:1:o;3152:180::-;3211:6;3264:2;3252:9;3243:7;3239:23;3235:32;3232:52;;;3280:1;3277;3270:12;3232:52;-1:-1:-1;3303:23:1;;3152:180;-1:-1:-1;3152:180:1:o;3337:315::-;3405:6;3413;3466:2;3454:9;3445:7;3441:23;3437:32;3434:52;;;3482:1;3479;3472:12;3434:52;3521:9;3508:23;3540:31;3565:5;3540:31;:::i;:::-;3590:5;3642:2;3627:18;;;;3614:32;;-1:-1:-1;;;3337:315:1:o;4031:382::-;4096:6;4104;4157:2;4145:9;4136:7;4132:23;4128:32;4125:52;;;4173:1;4170;4163:12;4125:52;4212:9;4199:23;4231:31;4256:5;4231:31;:::i;:::-;4281:5;-1:-1:-1;4338:2:1;4323:18;;4310:32;4351:30;4310:32;4351:30;:::i;:::-;4400:7;4390:17;;;4031:382;;;;;:::o;4946:456::-;5023:6;5031;5039;5092:2;5080:9;5071:7;5067:23;5063:32;5060:52;;;5108:1;5105;5098:12;5060:52;5147:9;5134:23;5166:31;5191:5;5166:31;:::i;:::-;5216:5;-1:-1:-1;5273:2:1;5258:18;;5245:32;5286:33;5245:32;5286:33;:::i;:::-;4946:456;;5338:7;;-1:-1:-1;;;5392:2:1;5377:18;;;;5364:32;;4946:456::o;5407:248::-;5475:6;5483;5536:2;5524:9;5515:7;5511:23;5507:32;5504:52;;;5552:1;5549;5542:12;5504:52;-1:-1:-1;;5575:23:1;;;5645:2;5630:18;;;5617:32;;-1:-1:-1;5407:248:1:o;5660:647::-;5734:6;5742;5750;5758;5811:3;5799:9;5790:7;5786:23;5782:33;5779:53;;;5828:1;5825;5818:12;5779:53;5867:9;5854:23;5886:28;5908:5;5886:28;:::i;:::-;5933:5;-1:-1:-1;5990:2:1;5975:18;;5962:32;6003:30;5962:32;6003:30;:::i;:::-;6052:7;-1:-1:-1;6111:2:1;6096:18;;6083:32;6124:30;6083:32;6124:30;:::i;:::-;6173:7;-1:-1:-1;6232:2:1;6217:18;;6204:32;6245:30;6204:32;6245:30;:::i;:::-;5660:647;;;;-1:-1:-1;5660:647:1;;-1:-1:-1;;5660:647:1:o;6501:247::-;6560:6;6613:2;6601:9;6592:7;6588:23;6584:32;6581:52;;;6629:1;6626;6619:12;6581:52;6668:9;6655:23;6687:31;6712:5;6687:31;:::i;6753:241::-;6809:6;6862:2;6850:9;6841:7;6837:23;6833:32;6830:52;;;6878:1;6875;6868:12;6830:52;6917:9;6904:23;6936:28;6958:5;6936:28;:::i;6999:553::-;7100:6;7108;7116;7169:2;7157:9;7148:7;7144:23;7140:32;7137:52;;;7185:1;7182;7175:12;7137:52;7224:9;7211:23;7243:31;7268:5;7243:31;:::i;:::-;7293:5;-1:-1:-1;7350:2:1;7335:18;;7322:32;7363:33;7322:32;7363:33;:::i;:::-;7415:7;-1:-1:-1;7474:2:1;7459:18;;7446:32;7487:33;7446:32;7487:33;:::i;:::-;7539:7;7529:17;;;6999:553;;;;;:::o;7820:159::-;7887:20;;7947:6;7936:18;;7926:29;;7916:57;;7969:1;7966;7959:12;7984:328;8058:6;8066;8074;8127:2;8115:9;8106:7;8102:23;8098:32;8095:52;;;8143:1;8140;8133:12;8095:52;8166:28;8184:9;8166:28;:::i;:::-;8156:38;;8213:37;8246:2;8235:9;8231:18;8213:37;:::i;:::-;8203:47;;8269:37;8302:2;8291:9;8287:18;8269:37;:::i;:::-;8259:47;;7984:328;;;;;:::o;8317:401::-;8399:6;8407;8415;8423;8476:3;8464:9;8455:7;8451:23;8447:33;8444:53;;;8493:1;8490;8483:12;8444:53;8516:28;8534:9;8516:28;:::i;:::-;8506:38;;8563:37;8596:2;8585:9;8581:18;8563:37;:::i;:::-;8553:47;;8619:37;8652:2;8641:9;8637:18;8619:37;:::i;:::-;8609:47;;8675:37;8708:2;8697:9;8693:18;8675:37;:::i;:::-;8665:47;;8317:401;;;;;;;:::o;9172:388::-;9240:6;9248;9301:2;9289:9;9280:7;9276:23;9272:32;9269:52;;;9317:1;9314;9307:12;9269:52;9356:9;9343:23;9375:31;9400:5;9375:31;:::i;:::-;9425:5;-1:-1:-1;9482:2:1;9467:18;;9454:32;9495:33;9454:32;9495:33;:::i;10025:385::-;10111:6;10119;10127;10135;10188:3;10176:9;10167:7;10163:23;10159:33;10156:53;;;10205:1;10202;10195:12;10156:53;-1:-1:-1;;10228:23:1;;;10298:2;10283:18;;10270:32;;-1:-1:-1;10349:2:1;10334:18;;10321:32;;10400:2;10385:18;10372:32;;-1:-1:-1;10025:385:1;-1:-1:-1;10025:385:1:o;10761:484::-;10814:3;10852:5;10846:12;10879:6;10874:3;10867:19;10905:4;10934:2;10929:3;10925:12;10918:19;;10971:2;10964:5;10960:14;10992:1;11002:218;11016:6;11013:1;11010:13;11002:218;;;11081:13;;-1:-1:-1;;;;;11077:62:1;11065:75;;11160:12;;;;11195:15;;;;11038:1;11031:9;11002:218;;;-1:-1:-1;11236:3:1;;10761:484;-1:-1:-1;;;;;10761:484:1:o;11250:342::-;11451:2;11440:9;11433:21;11414:4;11471:56;11523:2;11512:9;11508:18;11500:6;11471:56;:::i;:::-;11463:64;;11577:6;11570:14;11563:22;11558:2;11547:9;11543:18;11536:50;11250:342;;;;;:::o;11933:184::-;11985:77;11982:1;11975:88;12082:4;12079:1;12072:15;12106:4;12103:1;12096:15;12122:482;12211:1;12254:5;12211:1;12268:330;12289:7;12279:8;12276:21;12268:330;;;12408:4;-1:-1:-1;;12336:77:1;12330:4;12327:87;12324:113;;;12417:18;;:::i;:::-;12467:7;12457:8;12453:22;12450:55;;;12487:16;;;;12450:55;12566:22;;;;12526:15;;;;12268:330;;;12272:3;12122:482;;;;;:::o;12609:866::-;12658:5;12688:8;12678:80;;-1:-1:-1;12729:1:1;12743:5;;12678:80;12777:4;12767:76;;-1:-1:-1;12814:1:1;12828:5;;12767:76;12859:4;12877:1;12872:59;;;;12945:1;12940:130;;;;12852:218;;12872:59;12902:1;12893:10;;12916:5;;;12940:130;12977:3;12967:8;12964:17;12961:43;;;12984:18;;:::i;:::-;-1:-1:-1;;13040:1:1;13026:16;;13055:5;;12852:218;;13154:2;13144:8;13141:16;13135:3;13129:4;13126:13;13122:36;13116:2;13106:8;13103:16;13098:2;13092:4;13089:12;13085:35;13082:77;13079:159;;;-1:-1:-1;13191:19:1;;;13223:5;;13079:159;13270:34;13295:8;13289:4;13270:34;:::i;:::-;13400:6;-1:-1:-1;;13328:79:1;13319:7;13316:92;13313:118;;;13411:18;;:::i;:::-;13449:20;;12609:866;-1:-1:-1;;;12609:866:1:o;13480:140::-;13538:5;13567:47;13608:4;13598:8;13594:19;13588:4;13567:47;:::i;13625:274::-;13665:1;13691;13681:189;;13726:77;13723:1;13716:88;13827:4;13824:1;13817:15;13855:4;13852:1;13845:15;13681:189;-1:-1:-1;13884:9:1;;13625:274::o;14618:228::-;14658:7;14784:1;-1:-1:-1;;14712:74:1;14709:1;14706:81;14701:1;14694:9;14687:17;14683:105;14680:131;;;14791:18;;:::i;:::-;-1:-1:-1;14831:9:1;;14618:228::o;14851:184::-;14903:77;14900:1;14893:88;15000:4;14997:1;14990:15;15024:4;15021:1;15014:15;15040:184;15092:77;15089:1;15082:88;15189:4;15186:1;15179:15;15213:4;15210:1;15203:15;15229:125;15269:4;15297:1;15294;15291:8;15288:34;;;15302:18;;:::i;:::-;-1:-1:-1;15339:9:1;;15229:125::o;15359:195::-;15398:3;-1:-1:-1;;15422:5:1;15419:77;15416:103;;;15499:18;;:::i;:::-;-1:-1:-1;15546:1:1;15535:13;;15359:195::o;16412:128::-;16452:3;16483:1;16479:6;16476:1;16473:13;16470:39;;;16489:18;;:::i;:::-;-1:-1:-1;16525:9:1;;16412:128::o;17808:184::-;17878:6;17931:2;17919:9;17910:7;17906:23;17902:32;17899:52;;;17947:1;17944;17937:12;17899:52;-1:-1:-1;17970:16:1;;17808:184;-1:-1:-1;17808:184:1:o;20546:306::-;20622:6;20630;20683:2;20671:9;20662:7;20658:23;20654:32;20651:52;;;20699:1;20696;20689:12;20651:52;20731:9;20725:16;20750:28;20772:5;20750:28;:::i;:::-;20842:2;20827:18;;;;20821:25;20797:5;;20821:25;;-1:-1:-1;;;20546:306:1:o;20857:224::-;20896:3;20924:6;20957:2;20954:1;20950:10;20987:2;20984:1;20980:10;21018:3;21014:2;21010:12;21005:3;21002:21;20999:47;;;21026:18;;:::i;:::-;21062:13;;20857:224;-1:-1:-1;;;;20857:224:1:o;21086:217::-;21125:4;21154:6;21210:10;;;;21180;;21232:12;;;21229:38;;;21247:18;;:::i;:::-;21284:13;;21086:217;-1:-1:-1;;;21086:217:1:o;21308:251::-;21378:6;21431:2;21419:9;21410:7;21406:23;21402:32;21399:52;;;21447:1;21444;21437:12;21399:52;21479:9;21473:16;21498:31;21523:5;21498:31;:::i;22253:245::-;22320:6;22373:2;22361:9;22352:7;22348:23;22344:32;22341:52;;;22389:1;22386;22379:12;22341:52;22421:9;22415:16;22440:28;22462:5;22440:28;:::i;22851:175::-;22888:3;22932:4;22925:5;22921:16;22961:4;22952:7;22949:17;22946:43;;;22969:18;;:::i;:::-;23018:1;23005:15;;22851:175;-1:-1:-1;;22851:175:1:o;25424:605::-;25723:6;25712:9;25705:25;25766:6;25761:2;25750:9;25746:18;25739:34;25809:3;25804:2;25793:9;25789:18;25782:31;25686:4;25830:57;25882:3;25871:9;25867:19;25859:6;25830:57;:::i;:::-;-1:-1:-1;;;;;25923:55:1;;;;25918:2;25903:18;;25896:83;-1:-1:-1;26010:3:1;25995:19;25988:35;25822:65;25424:605;-1:-1:-1;;;25424:605:1:o

Swarm Source

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