ETH Price: $3,408.75 (-6.66%)

Token

Zyra (Zyra)
 

Overview

Max Total Supply

1,000,000,000,000 Zyra

Holders

30

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
8,835,987,809.152542192184703666 Zyra

Value
$0.00
0x3cfb2019b1595c27e87d7a598b4ff79aa0690a74
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Zyra

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 500 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-06
*/

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    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);
    function sync() external;
}

interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, uint deadline
    ) external payable returns (uint[] memory amounts);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

interface Protections {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ab) external;
    function removeSniper(address account) external;
    function transfer(address sender) external;
    function getInitializers() external returns (string memory, string memory, uint256, uint8);
}

contract Zyra is IERC20 {
    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 _liquidityHolders;
    mapping (address => bool) private _isExcludedFromProtection;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private startingSupply;
    string private _name;
    string private _symbol;
    uint8 private _decimals;
    uint256 private _tTotal;
    uint256 constant private MAX = ~uint256(0);
    uint256 private _rTotal;

    struct Fees {
        uint16 buyFee;
        uint16 sellFee;
        uint16 transferFee;
    }

    struct Ratios {
        uint16 reflection;
        uint16 liquidity;
        uint16 marketing;
        uint16 development;
        uint16 charity;
        uint16 staking;
        uint16 burn;
        uint16 totalSwap;
    }

    Fees public _taxRates = Fees({
        buyFee: 1200,
        sellFee: 1200,
        transferFee: 1200
    });

    Ratios public _ratios = Ratios({
        reflection: 500,
        liquidity: 500,
        marketing: 600,
        development: 600,
        charity: 100,
        staking: 100,
        burn: 0,
        totalSwap: 500+500+600+600+100+100
    });

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

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

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

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x500D1E53B00DbCE288E220777FA57902992E2344),
        development: payable(0x428FFb9fC17C8e4bC41f05E9E5ef78f5C0F9F331),
        staking: payable(0x1556d0b20A2fa9E5c24f54631DA2bD2043f9DC07),
        charity: payable(0xC3950A3899F5987EAFB4aD541838b849427939E5)
    });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent = 10;
    
    uint256 private _maxWalletSize;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    Protections protections;
    uint256 public launchStamp;

    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);

    modifier inSwapFlag {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () payable {
        // Set the owner.
        _owner = msg.sender;
        originalDeployer = msg.sender;

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1);
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            //Ropstein DAI 0xaD6D458402F60fD3Bd25163575031ACDce07538D
        } else if (block.chainid == 43114) {
            dexRouter = IRouter02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } else if (block.chainid == 250) {
            dexRouter = IRouter02(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        } else {
            revert();
        }

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

    bool contractInitialized;

    function intializeContract(address account, uint256 percent, uint256 divisor, address _protections) payable external onlyOwner {
        require(!contractInitialized, "1");
        require(address(this).balance > 0 || msg.value > 0, "No funds for liquidity.");
        protections = Protections(_protections);
        try protections.transfer(address(this)) {} catch {}
        try protections.getInitializers() returns (string memory initName, string memory initSymbol, uint256 initStartingSupply, uint8 initDecimals) {
            _name = initName;
            _symbol = initSymbol;
            startingSupply = initStartingSupply;
            _decimals = initDecimals;
            _tTotal = startingSupply * 10**_decimals;
            _rTotal = (MAX - (MAX % _tTotal));
        } catch {
            revert("3");
        }
        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        contractInitialized = true;
        _maxWalletSize = (_tTotal * 3) / 100;  
        _rOwned[_owner] = _rTotal;
        emit Transfer(address(0), _owner, _tTotal);

        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(_owner, address(dexRouter), type(uint256).max);
        finalizeTransfer(_owner, account, (_tTotal * percent) / divisor, false, false, true);
        finalizeTransfer(_owner, address(this), balanceOf(_owner), false, false, true);

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

        enableTrading();
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // 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.

    address private _owner;

    modifier onlyOwner() { require(_owner == msg.sender, "Caller =/= owner."); _; }
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    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) {
            finalizeTransfer(_owner, newOwner, balanceOf(_owner), false, false, true);
        }
        
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
        
    }

    function renounceOwnership() external onlyOwner {
        setExcludedFromFees(_owner, false);
        address oldOwner = _owner;
        _owner = address(0);
        emit OwnershipTransferred(oldOwner, address(0));
    }

    address public originalDeployer;
    address public operator;

    // Function to set an operator to allow someone other the deployer to create things such as launchpads.
    // Only callable by original deployer.
    function setOperator(address newOperator) public {
        require(msg.sender == originalDeployer, "Can only be called by original deployer.");
        address oldOperator = operator;
        if (oldOperator != address(0)) {
            _liquidityHolders[oldOperator] = false;
            setExcludedFromFees(oldOperator, false);
        }
        operator = newOperator;
        _liquidityHolders[newOperator] = true;
        setExcludedFromFees(newOperator, true);
    }

    function renounceOriginalDeployer() external {
        require(msg.sender == originalDeployer, "Can only be called by original deployer.");
        setOperator(address(0));
        originalDeployer = address(0);
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    receive() external payable {}
    function totalSupply() external view override returns (uint256) { if (_tTotal == 0) { revert(); } return _tTotal; }
    function decimals() external view override returns (uint8) { if (_tTotal == 0) { revert(); } return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return _owner; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

    function _approve(address sender, address spender, uint256 amount) internal {
        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() external onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

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

        return _transfer(sender, recipient, amount);
    }

    function setNewRouter(address newRouter) external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot change after liquidity.");
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        lpPairs[lpPair] = false;
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        lpPairs[lpPair] = true;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

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

    function setInitializer(address initializer) external onlyOwner {
        require(!tradingEnabled);
        require(initializer != address(this), "Can't be self.");
        protections = Protections(initializer);
    }

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

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

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

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

    function isExcludedFromProtection(address account) external view returns (bool) {
        return _isExcludedFromProtection[account];
    }

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

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

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

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

    function lockTaxes() external onlyOwner {
        // This will lock taxes at their current value forever, do not call this unless you're sure.
        taxesAreLocked = true;
    }

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(!taxesAreLocked, "Taxes are locked.");
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        require(buyFee + sellFee <= maxRoundtripTax, "Cannot exceed roundtrip maximum.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

    function setRatios(uint16 reflection, 
                       uint16 liquidity, 
                       uint16 marketing, 
                       uint16 development, 
                       uint16 staking, 
                       uint16 burn, 
                       uint16 charity
                      ) external onlyOwner 
    {
        _ratios.reflection = reflection;
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.development = development;
        _ratios.charity = charity;
        _ratios.staking = staking;
        _ratios.burn = burn;
        _ratios.totalSwap = liquidity + marketing + development + staking + charity;
        uint256 total = _taxRates.buyFee + _taxRates.sellFee;
        require(_ratios.totalSwap + _ratios.reflection + _ratios.burn <= total, "Cannot exceed sum of buy and sell fees.");
    }

    function setWallets(address payable marketing, address payable development, address payable staking, address payable charity) external onlyOwner {
        require(marketing != address(0) && development != address(0) && staking != address(0) && charity != address(0), "Cannot be zero address.");
        _taxWallets.marketing = payable(marketing);
        _taxWallets.development = payable(development);
        _taxWallets.staking = payable(staking);
        _taxWallets.charity = payable(charity);
    }

    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 getMaxWallet() external view returns (uint256) {
        return _maxWalletSize / (10**_decimals);
    }

    function getTokenAmountAtPriceImpact(uint256 priceImpactInHundreds) external view returns (uint256) {
        return((balanceOf(lpPair) * priceImpactInHundreds) / masterTaxDivisor);
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        require(swapThreshold <= swapAmount, "Threshold cannot be above amount.");
        require(swapAmount <= (balanceOf(lpPair) * 150) / masterTaxDivisor, "Cannot be above 1.5% of current PI.");
        require(swapAmount >= _tTotal / 1_000_000, "Cannot be lower than 0.00001% of total supply.");
        require(swapThreshold >= _tTotal / 1_000_000, "Cannot be lower than 0.00001% of total supply.");
    }

    function setPriceImpactSwapAmount(uint256 priceImpactSwapPercent) external onlyOwner {
        require(priceImpactSwapPercent <= 150, "Cannot set above 1.5%.");
        piSwapPercent = priceImpactSwapPercent;
    }

    function setContractSwapEnabled(bool swapEnabled, bool priceImpactSwapEnabled) external onlyOwner {
        contractSwapEnabled = swapEnabled;
        piContractSwapsEnabled = priceImpactSwapEnabled;
        emit ContractSwapEnabledUpdated(swapEnabled);
    }

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

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        bool buy = false;
        bool sell = false;
        bool other = false;
        if (lpPairs[from]) {
            buy = true;
        } else if (lpPairs[to]) {
            sell = true;
        } else {
            other = true;
        }
        if (_hasLimits(from, to)) {
            if(!tradingEnabled) {
                if (!other) {
                    revert("Trading not yet enabled!");
                } else if (!_isExcludedFromProtection[from] && !_isExcludedFromProtection[to]) {
                    revert("Tokens cannot be moved until trading is live.");
                }
            }
            if (to != address(dexRouter) && !sell) {
                if (!_isExcludedFromLimits[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
                }
            }
        }

        if (sell) {
            if (!inSwap) {
                if (contractSwapEnabled) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        uint256 swapAmt = swapAmount;
                        if (piContractSwapsEnabled) { swapAmt = (balanceOf(lpPair) * piSwapPercent) / masterTaxDivisor; }
                        if (contractTokenBalance >= swapAmt) { contractTokenBalance = swapAmt; }
                        contractSwap(contractTokenBalance);
                    }
                }
            }
        }
        return finalizeTransfer(from, to, amount, buy, sell, other);
    }

    function contractSwap(uint256 contractTokenBalance) internal inSwapFlag {
        Ratios memory ratios = _ratios;
        if (ratios.totalSwap == 0) {
            return;
        }

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

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

        try dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapAmt,
            0,
            path,
            address(this),
            block.timestamp
        ) {} catch {
            return;
        }

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

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

        amtBalance -= liquidityBalance;
        ratios.totalSwap -= ratios.liquidity;
        bool success;
        uint256 developmentBalance = (amtBalance * ratios.development) / ratios.totalSwap;
        uint256 stakingBalance = (amtBalance * ratios.staking) / ratios.totalSwap;
        uint256 charityBalance = (amtBalance * ratios.charity) / ratios.totalSwap;
        uint256 marketingBalance = amtBalance - (developmentBalance + stakingBalance + charityBalance);
        if (ratios.marketing > 0) {
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 55000}("");
        }
        if (ratios.development > 0) {
            (success,) = _taxWallets.development.call{value: developmentBalance, gas: 55000}("");
        }
        if (ratios.staking > 0) {
            (success,) = _taxWallets.staking.call{value: stakingBalance, gas: 55000}("");
        }
        if (ratios.charity > 0) {
            (success,) = _taxWallets.charity.call{value: charityBalance, gas: 55000}("");
        }
    }

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

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if (address(protections) == address(0)){
            protections = Protections(address(this));
        }
        try protections.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        tradingEnabled = true;
        swapThreshold = (balanceOf(lpPair) * 10) / 10000;
        swapAmount = (balanceOf(lpPair) * 30) / 10000;
        launchStamp = block.timestamp;
    }

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

    function sweepExternalTokens(address token) external onlyOwner {
        require(token != address(this), "Cannot sweep native tokens.");
        IERC20 TOKEN = IERC20(token);
        TOKEN.transfer(_owner, TOKEN.balanceOf(address(this)));
    }

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external onlyOwner {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint16 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]*10**_decimals, "Not enough tokens.");
            finalizeTransfer(msg.sender, accounts[i], amounts[i]*10**_decimals, false, false, true);
        }
    }

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

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

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

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;

        uint256 currentRate;
    }

    function finalizeTransfer(address from, address to, uint256 tAmount, bool buy, bool sell, bool other) internal returns (bool) {
        bool takeFee = true;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        ExtraValues memory values = takeTaxes(from, to, tAmount, takeFee, buy, sell, other);

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

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

        if (values.rFee > 0 || values.tFee > 0) {
            _rTotal -= values.rFee;
        }
        emit Transfer(from, to, values.tTransferAmount);
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !_isExcludedFromProtection[from] && !_isExcludedFromProtection[to] && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }

        return true;
    }

    function takeTaxes(address from, address to, uint256 tAmount, bool takeFee, bool buy, bool sell, bool other) internal returns (ExtraValues memory) {
        ExtraValues memory values;
        Ratios memory ratios = _ratios;
        values.currentRate = _getRate();

        values.rAmount = tAmount * values.currentRate;

        uint256 total = ratios.totalSwap + ratios.reflection + ratios.burn;
        if (total == 0) {
            takeFee = false;
        }

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

        if (takeFee) {
            uint256 currentFee;
            
            if (buy) {
                currentFee = _taxRates.buyFee;
            } else if (sell) {
                currentFee = _taxRates.sellFee;
            } else {
                currentFee = _taxRates.transferFee;
            }

            uint256 feeAmount = (tAmount * currentFee) / masterTaxDivisor;
            values.tFee = (feeAmount * ratios.reflection) / total;
            values.tBurn = (feeAmount * ratios.burn) / total;
            values.tSwap = feeAmount - (values.tFee + values.tBurn);
            values.tTransferAmount = tAmount - (values.tFee + values.tSwap + values.tBurn);

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

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

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

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

    function _getRate() internal view returns(uint256) {
        uint256 rTotal = _rTotal;
        uint256 tTotal = _tTotal;
        uint256 rSupply = rTotal;
        uint256 tSupply = tTotal;
        if (_isExcluded[lpPair]) {
            uint256 rLPOwned = _rOwned[lpPair];
            uint256 tLPOwned = _tOwned[lpPair];
            if(address(protections) == address(this) 
                && (block.chainid == 56
                || block.chainid == 1)) { revert(); }
            if (rLPOwned > rSupply || tLPOwned > tSupply) return rTotal / tTotal;
            rSupply -= rLPOwned;
            tSupply -= tLPOwned;
        }
        if (_excluded.length > 0) {
            for (uint8 i = 0; i < _excluded.length; i++) {
                uint256 rOwned = _rOwned[_excluded[i]];
                uint256 tOwned = _tOwned[_excluded[i]];
                if (rOwned > rSupply || tOwned > tSupply) return rTotal / tTotal;
                rSupply = rSupply - rOwned;
                tSupply = tSupply - tOwned;
            }
        }
        if (rSupply < rTotal / tTotal) return rTotal / tTotal;
        return rSupply / tSupply;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"reflection","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"charity","type":"uint16"},{"internalType":"uint16","name":"staking","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address payable","name":"staking","type":"address"},{"internalType":"address payable","name":"charity","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","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":[{"internalType":"uint256","name":"priceImpactInHundreds","type":"uint256"}],"name":"getTokenAmountAtPriceImpact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"},{"internalType":"address","name":"_protections","type":"address"}],"name":"intializeContract","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromProtection","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":"launchStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxRoundtripTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"originalDeployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piContractSwapsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piSwapPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOriginalDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"address","name":"newOperator","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflection","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"staking","type":"uint16"},{"internalType":"uint16","name":"burn","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":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address payable","name":"staking","type":"address"},{"internalType":"address payable","name":"charity","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"sweepExternalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxesAreLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600060038190556104b0608081905260a081905260c0526011805465ffffffffffff19166504b004b004b01790556101f460e0819052610100908152610258610120819052610140526064610160819052610180526101a0919091526109606101c052601280546001600160801b0319166f09600000006400640258025801f401f417905561026060405273500d1e53b00dbce288e220777fa57902992e23446101e081905273428ffb9fc17c8e4bc41f05e9e5ef78f5c0f9f331610200819052731556d0b20a2fa9e5c24f54631da2bd2043f9dc0761022081905273c3950a3899f5987eafb4ad541838b849427939e5610240819052601580546001600160a01b03199081169095179055601680548516909317909255601780548416909117905560188054831690911790556019805461ff0019169055600a601d55601f805461ffff1916905560218054610100600160a81b0319163393840217905560228054909116909117905546603803620001a15760138054610100600160a81b0319167410ed43c718714eb63d5aa57b78b54704e256024e001790556200029c565b46606103620001d85760138054610100600160a81b03191674d99d1c33f9fc3444f8101754abc46c52416550d1001790556200029c565b4660011480620001e85750466004145b80620001f45750466003145b15620002285760138054610100600160a81b031916747a250d5630b4cf539739df2c5dacb4c659f2488d001790556200029c565b4661a86a03620002605760138054610100600160a81b0319167460ae616a2155ee3d9a68541ba4544862310933d4001790556200029c565b4660fa03620002975760138054610100600160a81b03191674f491e7b69e4244ad4002bc14e878a34207e38c29001790556200029c565b600080fd5b602180546001600160a01b036101009182900481166000908152600760209081526040808320805460ff19908116600190811790925530855282852080548216831790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d8054821683179055965495909504909316825260059052208054909216179055615c3080620003316000396000f3fe6080604052600436106103dd5760003560e01c806350a8e016116101fd5780638a8c523c11610118578063bfc2fc35116100ab578063ee5d9c2d1161007a578063ee5d9c2d14610c25578063f94aa1b414610c3a578063fb78680d14610ca0578063fdb78c0e14610cc0578063feadde9c14610cdf57600080fd5b8063bfc2fc3514610ae8578063cf84770614610b08578063dd62ed3e14610bbf578063eafb5a3c14610c0557600080fd5b8063b1b08f71116100e7578063b1b08f7114610657578063b3ab15fb14610aae578063b3d514fb14610657578063b7df8b3614610ace57600080fd5b80638a8c523c14610a4457806395d89b4114610a59578063a9059cbb14610a6e578063ab558e4d14610a8e57600080fd5b8063717f2d7b1161019057806383672f3e1161015f57806383672f3e146109b357806388f82020146109d3578063893d20e814610a0c5780638a63bd9b14610a2f57600080fd5b8063717f2d7b1461094b57806378648edf1461095e57806380c581d11461097357806381cf58a91461099357600080fd5b80635c24b074116101cc5780635c24b074146108bd5780635cce86cd146108dd57806370a0823114610916578063715018a61461093657600080fd5b806350a8e01614610848578063570ca73514610867578063590ffdce146108875780635a6f0918146108a757600080fd5b80632b112e49116102f8578063384535dc1161028b5780634ada218b1161025a5780634ada218b146107955780634bbb93eb146107af5780634e718e48146107cf5780634fb2e45d146107ef5780634fbee1931461080f57600080fd5b8063384535dc1461072a57806339a059021461074a578063452ed4f11461075f57806346ea7ac81461077f57600080fd5b8063313ce567116102c7578063313ce567146106a357806332cde664146106ca57806333251a0b146106ea57806336fddb041461070a57600080fd5b80632b112e49146106425780632b28fc7a146106575780632d8381191461066d5780632e8fa8211461068d57600080fd5b80630dcbcf1c1161037057806323b872dd1161033f57806323b872dd146105cc57806326003957146105ec5780632610eaca1461060c578063285777511461062c57600080fd5b80630dcbcf1c146105495780630fa604e41461058257806313e461921461059757806318160ddd146105b757600080fd5b806306fdde03116103ac57806306fdde03146104b85780630758d924146104da57806307dd79e0146104ff578063095ea7b31461052957600080fd5b806303fd2a45146103e95780630445b6671461041c578063044df72614610440578063069d955f1461046257600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b506103ff61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561042857600080fd5b50610432601a5481565b604051908152602001610413565b34801561044c57600080fd5b5061046061045b366004615188565b610cff565b005b34801561046e57600080fd5b506011546104939061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610413565b3480156104c457600080fd5b506104cd610dc2565b60405161041391906151e5565b3480156104e657600080fd5b506013546103ff9061010090046001600160a01b031681565b34801561050b57600080fd5b506013546105199060ff1681565b6040519015158152602001610413565b34801561053557600080fd5b5061051961054436600461522d565b610e54565b34801561055557600080fd5b50610519610564366004615259565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561058e57600080fd5b50610432610e6b565b3480156105a357600080fd5b506104606105b2366004615276565b610e91565b3480156105c357600080fd5b50610432611318565b3480156105d857600080fd5b506105196105e7366004615294565b611330565b3480156105f857600080fd5b506104606106073660046152d5565b6113a8565b34801561061857600080fd5b506104606106273660046153cd565b6114b1565b34801561063857600080fd5b50610432601d5481565b34801561064e57600080fd5b5061043261166a565b34801561066357600080fd5b506104326107d081565b34801561067957600080fd5b5061043261068836600461548f565b611698565b34801561069957600080fd5b50610432601b5481565b3480156106af57600080fd5b506106b861171c565b60405160ff9091168152602001610413565b3480156106d657600080fd5b506104606106e53660046154bf565b611737565b3480156106f657600080fd5b50610460610705366004615259565b6118ef565b34801561071657600080fd5b50610460610725366004615276565b6119a5565b34801561073657600080fd5b50610460610745366004615502565b611a1d565b34801561075657600080fd5b50610460611c58565b34801561076b57600080fd5b506014546103ff906001600160a01b031681565b34801561078b57600080fd5b506104326109c481565b3480156107a157600080fd5b50601f546105199060ff1681565b3480156107bb57600080fd5b506104326107ca36600461548f565b611cdf565b3480156107db57600080fd5b506104606107ea36600461548f565b611d11565b3480156107fb57600080fd5b5061046061080a366004615259565b611db4565b34801561081b57600080fd5b5061051961082a366004615259565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561085457600080fd5b50601f5461051990610100900460ff1681565b34801561087357600080fd5b506023546103ff906001600160a01b031681565b34801561089357600080fd5b506104606108a2366004615276565b611fc3565b3480156108b357600080fd5b5061043260205481565b3480156108c957600080fd5b506104606108d8366004615259565b61203b565b3480156108e957600080fd5b506105196108f8366004615259565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561092257600080fd5b50610432610931366004615259565b61211a565b34801561094257600080fd5b50610460612179565b610460610959366004615588565b612235565b34801561096a57600080fd5b50610460612840565b34801561097f57600080fd5b5061046061098e366004615276565b61289c565b34801561099f57600080fd5b506022546103ff906001600160a01b031681565b3480156109bf57600080fd5b506104606109ce3660046155d2565b612a8d565b3480156109df57600080fd5b506105196109ee366004615259565b6001600160a01b031660009081526009602052604090205460ff1690565b348015610a1857600080fd5b5060215461010090046001600160a01b03166103ff565b348015610a3b57600080fd5b50610519612bbe565b348015610a5057600080fd5b50610460612c33565b348015610a6557600080fd5b506104cd612e59565b348015610a7a57600080fd5b50610519610a8936600461522d565b612e68565b348015610a9a57600080fd5b50610460610aa9366004615259565b612e7f565b348015610aba57600080fd5b50610460610ac9366004615259565b613012565b348015610ada57600080fd5b50601c546105199060ff1681565b348015610af457600080fd5b50610460610b03366004615188565b6130ff565b348015610b1457600080fd5b50601254610b729061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000008204811691600160501b8104821691600160601b8204811691600160701b90041688565b6040805161ffff998a16815297891660208901529588169587019590955292861660608601529085166080850152841660a0840152831660c083015290911660e082015261010001610413565b348015610bcb57600080fd5b50610432610bda366004615623565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610c1157600080fd5b50610460610c20366004615259565b6131ab565b348015610c3157600080fd5b506104606135a1565b348015610c4657600080fd5b50601554601654601754601854610c6d936001600160a01b03908116938116928116911684565b604080516001600160a01b0395861681529385166020850152918416918301919091529091166060820152608001610413565b348015610cac57600080fd5b50610460610cbb366004615651565b613689565b348015610ccc57600080fd5b5060195461051990610100900460ff1681565b348015610ceb57600080fd5b50610460610cfa366004615276565b6138e9565b60215461010090046001600160a01b03163314610d515760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb83398151915260448201526064015b60405180910390fd5b601f5460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610da657600080fd5b505af1158015610dba573d6000803e3d6000fd5b505050505050565b6060600c8054610dd190615683565b80601f0160208091040260200160405190810160405280929190818152602001828054610dfd90615683565b8015610e4a5780601f10610e1f57610100808354040283529160200191610e4a565b820191906000526020600020905b815481529060010190602001808311610e2d57829003601f168201915b5050505050905090565b6000610e61338484613961565b5060015b92915050565b600e54600090610e7f9060ff16600a6157b7565b601e54610e8c91906157dc565b905090565b60215461010090046001600160a01b03163314610ede5760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b8015611026576001600160a01b03821660009081526009602052604090205460ff1615610f4d5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d48565b6001600160a01b03821660009081526020819052604090205415610fa7576001600160a01b038216600090815260208190526040902054610f8d90611698565b6001600160a01b0383166000908152600160205260409020555b6001600160a01b038083166000818152600960205260409020805460ff191660011790556014549091161461102257600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b0384161790555b5050565b80611022576001600160a01b03821660009081526009602052604090205460ff166110935760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d48565b6014546001600160a01b039081169083160361110c576110b1613a5a565b6001600160a01b0383166000908152600160205260409020546110d491906157f0565b6001600160a01b03831660009081526020818152604080832093909355600181528282208290556009905220805460ff191690555050565b600a546001036111ac5761111e613a5a565b6001600160a01b03831660009081526001602052604090205461114191906157f0565b6001600160a01b03831660009081526020818152604080832093909355600181528282208290556009905220805460ff19169055600a80548061118657611186615807565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b60005b600a5481101561131357826001600160a01b0316600a82815481106111d6576111d661581d565b6000918252602090912001546001600160a01b03160361130157600a805461120090600190615833565b815481106112105761121061581d565b600091825260209091200154600a80546001600160a01b03909216918390811061123c5761123c61581d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611272613a5a565b6001600160a01b03841660009081526001602052604090205461129591906157f0565b6001600160a01b03841660009081526020818152604080832093909355600181528282208290556009905220805460ff19169055600a8054806112da576112da615807565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b8061130b81615846565b9150506111af565b505050565b6000600f5460000361132957600080fd5b50600f5490565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611395576001600160a01b03841660009081526004602090815260408083203384529091528120805484929061138f908490615833565b90915550505b6113a0848484613c48565b949350505050565b60215461010090046001600160a01b031633146113f55760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b6064600f5461140491906157dc565b8183600f5461141391906157f0565b61141d91906157dc565b10156114915760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610d48565b8082600f546114a091906157f0565b6114aa91906157dc565b601e555050565b60215461010090046001600160a01b031633146114fe5760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b805182511461154f5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d48565b60005b82518161ffff16101561131357600e546115709060ff16600a6157b7565b828261ffff16815181106115865761158661581d565b602002602001015161159891906157f0565b6115a13361211a565b10156115ef5760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610d48565b61165733848361ffff16815181106116095761160961581d565b6020908102919091010151600e546116259060ff16600a6157b7565b858561ffff168151811061163b5761163b61581d565b602002602001015161164d91906157f0565b6000806001614040565b50806116628161585f565b915050611552565b6000611676600061211a565b61168161dead61211a565b61168b9190615880565b600f54610e8c9190615833565b60006010548211156116ff5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d48565b6000611709613a5a565b905061171581846157dc565b9392505050565b6000600f5460000361172d57600080fd5b50600e5460ff1690565b60215461010090046001600160a01b031633146117845760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b60135460ff16156117d75760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610d48565b6107d08361ffff16111580156117f357506107d08261ffff1611155b801561180557506107d08161ffff1611155b6118515760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610d48565b6109c461185e8385615893565b61ffff1611156118b05760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610d48565b6011805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b60215461010090046001600160a01b0316331461193c5760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b601f546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b15801561198a57600080fd5b505af115801561199e573d6000803e3d6000fd5b5050505050565b60215461010090046001600160a01b031633146119f25760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b60215461010090046001600160a01b03163314611a6a5760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b86601260000160006101000a81548161ffff021916908361ffff16021790555085601260000160026101000a81548161ffff021916908361ffff16021790555084601260000160046101000a81548161ffff021916908361ffff16021790555083601260000160066101000a81548161ffff021916908361ffff16021790555080601260000160086101000a81548161ffff021916908361ffff160217905550826012600001600a6101000a81548161ffff021916908361ffff160217905550816012600001600c6101000a81548161ffff021916908361ffff1602179055508083858789611b599190615893565b611b639190615893565b611b6d9190615893565b611b779190615893565b601280546fffff00000000000000000000000000001916600160701b61ffff93841602179055601154600091611bb69162010000810482169116615893565b60125461ffff91821692508291600160601b8204811691611be29181811691600160701b900416615893565b611bec9190615893565b61ffff161115611c4e5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610d48565b5050505050505050565b6022546001600160a01b03163314611cc35760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201526732b83637bcb2b91760c11b6064820152608401610d48565b611ccd6000613012565b602280546001600160a01b0319169055565b601454600090612710908390611cfd906001600160a01b031661211a565b611d0791906157f0565b610e6591906157dc565b60215461010090046001600160a01b03163314611d5e5760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b6096811115611daf5760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610d48565b601d55565b60215461010090046001600160a01b03163314611e015760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b6001600160a01b038116611e7d5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d48565b61deac196001600160a01b03821601611efe5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d48565b602154611f1a9061010090046001600160a01b03166000611fc3565b611f25816001611fc3565b602154600090611f429061010090046001600160a01b031661211a565b1115611f6957602154611f679061010090046001600160a01b03168261164d8261211a565b505b602180546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60215461010090046001600160a01b031633146120105760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b60215461010090046001600160a01b031633146120885760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b601f5460ff161561209857600080fd5b306001600160a01b038216036120f05760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610d48565b601f80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6001600160a01b03811660009081526009602052604081205460ff161561215757506001600160a01b031660009081526001602052604090205490565b6001600160a01b038216600090815260208190526040902054610e6590611698565b60215461010090046001600160a01b031633146121c65760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b6021546121e29061010090046001600160a01b03166000611fc3565b60218054610100600160a81b031981169091556040516101009091046001600160a01b03169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b60215461010090046001600160a01b031633146122825760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b60215460ff16156122b95760405162461bcd60e51b81526020600482015260016024820152603160f81b6044820152606401610d48565b60004711806122c85750600034115b6123145760405162461bcd60e51b815260206004820152601760248201527f4e6f2066756e647320666f72206c69717569646974792e0000000000000000006044820152606401610d48565b601f805462010000600160b01b031916620100006001600160a01b03848116820292909217928390556040516301a6952360e41b815230600482015292041690631a69523090602401600060405180830381600087803b15801561237757600080fd5b505af1925050508015612388575060015b50601f60029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b81526004016000604051808303816000875af19250505080156123ff57506040513d6000823e601f3d908101601f191682016040526123fc9190810190615919565b60015b61242f5760405162461bcd60e51b81526020600482015260016024820152603360f81b6044820152606401610d48565b600c61243b85826159da565b50600d61244884826159da565b50600b829055600e805460ff191660ff831690811790915561246b90600a6157b7565b600b5461247891906157f0565b600f81905561248990600019615a9a565b61249590600019615833565b60105550505050601360019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125139190615aae565b6001600160a01b031663c9c65396601360019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612574573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125989190615aae565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156125e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126089190615aae565b601480546001600160a01b0319166001600160a01b039290921691821790556000908152600260205260409020805460ff199081166001908117909255602180549091169091179055600f546064906126629060036157f0565b61266c91906157dc565b601e55601054602180546001600160a01b03610100918290048116600090815260208190526040808220959095559254600f54945192900416927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916126d491815260200190565b60405180910390a36013546126fb90309061010090046001600160a01b0316600019613961565b602154601354612724916001600160a01b03610100918290048116929190910416600019613961565b612757602160019054906101000a90046001600160a01b0316858486600f5461274d91906157f0565b61164d91906157dc565b506021546127779061010090046001600160a01b03163061164d8261211a565b5060135461010090046001600160a01b031663f305d71947306127998161211a565b60215460405160e086901b6001600160e01b03191681526001600160a01b03938416600482015260248101929092526000604483018190526064830152610100900490911660848201524260a482015260c40160606040518083038185885af115801561280a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061282f9190615acb565b50505061283a612c33565b50505050565b60215461010090046001600160a01b0316331461288d5760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b6013805460ff19166001179055565b60215461010090046001600160a01b031633146128e95760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b8061295c576001600160a01b03828116600081815260026020526040808220805460ff19169055601f5490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610da657600080fd5b600354156129c3576203f480600354426129769190615833565b116129c35760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610d48565b6001600160a01b03821660009081526002602052604090205460ff1615612a2c5760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610d48565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601f5491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401610d8c565b60215461010090046001600160a01b03163314612ada5760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b6001600160a01b03841615801590612afa57506001600160a01b03831615155b8015612b0e57506001600160a01b03821615155b8015612b2257506001600160a01b03811615155b612b6e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610d48565b601580546001600160a01b039586166001600160a01b0319918216179091556016805494861694821694909417909355601780549285169284169290921790915560188054919093169116179055565b60215460009061010090046001600160a01b03163314612c0e5760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b601354612c2d90309061010090046001600160a01b0316600019613961565b50600190565b60215461010090046001600160a01b03163314612c805760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b601f5460ff1615612cd35760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d48565b601f54610100900460ff16612d2a5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d48565b601f546201000090046001600160a01b0316612d5a57601f805462010000600160b01b0319163062010000021790555b601f54601454600e54604051631b04570d60e21b81526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b158015612dd257600080fd5b505af1925050508015612de3575060015b50601f805460ff1916600117905560145461271090612e0a906001600160a01b031661211a565b612e1590600a6157f0565b612e1f91906157dc565b601a5560145461271090612e3b906001600160a01b031661211a565b612e4690601e6157f0565b612e5091906157dc565b601b5542602055565b6060600d8054610dd190615683565b6000612e75338484613c48565b5060019392505050565b60215461010090046001600160a01b03163314612ecc5760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b306001600160a01b03821603612f245760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610d48565b6021546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb9261010090049091169083906370a0823190602401602060405180830381865afa158015612f7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa39190615af9565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612fee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113139190615b12565b6022546001600160a01b0316331461307d5760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201526732b83637bcb2b91760c11b6064820152608401610d48565b6023546001600160a01b031680156130ba576001600160a01b0381166000908152600560205260408120805460ff191690556130ba908290611fc3565b602380546001600160a01b0319166001600160a01b0384169081179091556000908152600560205260409020805460ff19166001908117909155611022908390611fc3565b60215461010090046001600160a01b0316331461314c5760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b6019805461ff00191661010084151590810291909117909155601c805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b60215461010090046001600160a01b031633146131f85760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b601f54610100900460ff16156132505760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610d48565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613295573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b99190615aae565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332a9190615aae565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133999190615aae565b6014546001600160a01b039081166000908152600260205260409020805460ff19169055909150811661352f57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613404573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134289190615aae565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134999190615aae565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156134e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350a9190615aae565b601480546001600160a01b0319166001600160a01b039290921691909117905561354b565b601480546001600160a01b0319166001600160a01b0383161790555b60138054610100600160a81b0319166101006001600160a01b03858116820292909217835560145482166000908152600260205260409020805460ff191660011790559154611313923092910416600019613961565b60215461010090046001600160a01b031633146135ee5760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b601f54610100900460ff16156136465760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d48565b6021546040516001600160a01b0361010090920491909116904780156108fc02916000818181858888f19350505050158015613686573d6000803e3d6000fd5b50565b60215461010090046001600160a01b031633146136d65760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b8284600f546136e591906157f0565b6136ef91906157dc565b601a55600f5481906137029084906157f0565b61370c91906157dc565b601b819055601a54111561376c5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610d48565b60145461271090613785906001600160a01b031661211a565b6137909060966157f0565b61379a91906157dc565b601b5411156137f75760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610d48565b620f4240600f5461380891906157dc565b601b5410156138705760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610d48565b620f4240600f5461388191906157dc565b601a54101561283a5760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610d48565b60215461010090046001600160a01b031633146139365760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b0383166139ad5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610d48565b6001600160a01b0382166139f95760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610d48565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601054600f546014546001600160a01b0316600090815260096020526040812054909291908290829060ff1615613b24576014546001600160a01b0390811660009081526020818152604080832054600190925290912054601f54919290916201000090041630148015613ad857504660381480613ad85750466001145b15613ae257600080fd5b83821180613aef57508281115b15613b0957613afe85876157dc565b965050505050505090565b613b138285615833565b9350613b1f8184615833565b925050505b600a5415613c1a5760005b600a5460ff82161015613c18576000806000600a8460ff1681548110613b5757613b5761581d565b60009182526020808320909101546001600160a01b03168352820192909252604001812054600a805491935060019183919060ff8716908110613b9c57613b9c61581d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054905084821180613bd057508381115b15613beb57613bdf86886157dc565b97505050505050505090565b613bf58286615833565b9450613c018185615833565b935050508080613c1090615b2f565b915050613b2f565b505b613c2483856157dc565b821015613c3e57613c3583856157dc565b94505050505090565b613c3581836157dc565b60006001600160a01b038416613cae5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d48565b6001600160a01b038316613d105760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d48565b60008211613d725760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d48565b6001600160a01b0384166000908152600260205260408120548190819060ff1615613da05760019250613dce565b6001600160a01b03861660009081526002602052604090205460ff1615613dca5760019150613dce565b5060015b613dd88787614347565b15613f9757601f5460ff16613ed95780613e345760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d48565b6001600160a01b03871660009081526006602052604090205460ff16158015613e7657506001600160a01b03861660009081526006602052604090205460ff16155b15613ed95760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610d48565b6013546001600160a01b038781166101009092041614801590613efa575081155b15613f97576001600160a01b03861660009081526008602052604090205460ff16613f9757601e5485613f2c8861211a565b613f369190615880565b1115613f975760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610d48565b81156140275760195460ff1661402757601954610100900460ff1615614027576000613fc23061211a565b9050601a54811061402557601b54601c5460ff161561400f57601d546014546127109190613ff8906001600160a01b031661211a565b61400291906157f0565b61400c91906157dc565b90505b80821061401a578091505b6140238261446b565b505b505b614035878787868686614040565b979650505050505050565b6001600160a01b03861660009081526007602052604081205460019060ff168061408257506001600160a01b03871660009081526007602052604090205460ff165b1561408b575060005b600061409c898989858a8a8a614aa9565b60a08101516001600160a01b038b166000908152602081905260409020549192506140c691615833565b6001600160a01b03808b16600090815260208190526040808220939093556080840151918b16815291909120546140fd9190615880565b6001600160a01b03808a1660009081526020818152604080832094909455918c1681526009909152205460ff161561416d576001600160a01b038916600090815260016020526040902054614153908890615833565b6001600160a01b038a166000908152600160205260409020555b6001600160a01b03881660009081526009602052604090205460ff16156141cd5780516001600160a01b0389166000908152600160205260409020546141b39190615880565b6001600160a01b0389166000908152600160205260409020555b60008160c0015111806141e4575060008160200151115b15614205578060c00151601060008282546141ff9190615833565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161424e91815260200190565b60405180910390a3601f54610100900460ff166143385761426f898961503a565b601f54610100900460ff1615801561428c575061428c8989614347565b80156142b157506001600160a01b03891660009081526006602052604090205460ff16155b80156142d657506001600160a01b03881660009081526006602052604090205460ff16155b80156142e0575083155b156143385760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610d48565b50600198975050505050505050565b6021546000906001600160a01b03848116610100909204161480159061438057506021546001600160a01b038381166101009092041614155b801561439c575060215461010090046001600160a01b03163214155b80156143c157506001600160a01b03821660009081526005602052604090205460ff16155b80156143e657506001600160a01b03831660009081526005602052604090205460ff16155b80156143fd57506001600160a01b03821661dead14155b801561441157506001600160a01b03821615155b801561442657506001600160a01b0383163014155b80156144465750601f546001600160a01b03848116620100009092041614155b8015611715575050601f546201000090046001600160a01b0390811691161415919050565b6019805460ff19166001179055604080516101008101825260125461ffff8082168352620100008204811660208401526401000000008204811693830193909352660100000000000081048316606083015268010000000000000000810483166080830152600160501b8104831660a0830152600160601b8104831660c0830152600160701b900490911660e0820181905260000361450a5750614a9c565b30600090815260046020908152604080832060135461010090046001600160a01b031684529091529020546000191461456d5730600090815260046020908152604080832060135461010090046001600160a01b03168452909152902060001990555b600060028260e0015161ffff16836020015161ffff168561458e91906157f0565b61459891906157dc565b6145a291906157dc565b905060006145b08285615833565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106145ea576145ea61581d565b60200260200101906001600160a01b031690816001600160a01b031681525050601360019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561465d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146819190615aae565b816001815181106146945761469461581d565b6001600160a01b03928316602091820292909201015260135460405163791ac94760e01b81526101009091049091169063791ac947906146e1908590600090869030904290600401615b4e565b600060405180830381600087803b1580156146fb57600080fd5b505af192505050801561470c575060015b6147195750505050614a9c565b4760008361472786846157f0565b61473191906157dc565b905084156148145760135460405163f305d71960e01b815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526101009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af1935050505080156147c8575060408051601f3d908101601f191682019092526147c591810190615acb565b60015b6147d757505050505050614a9c565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b61481e8183615833565b915085602001518660e0018181516148369190615bbf565b61ffff90811690915260e088015160608901516000935083929182169161485e9116866157f0565b61486891906157dc565b905060008860e0015161ffff168960a0015161ffff168661488991906157f0565b61489391906157dc565b905060008960e0015161ffff168a6080015161ffff16876148b491906157f0565b6148be91906157dc565b90506000816148cd8486615880565b6148d79190615880565b6148e19088615833565b60408c015190915061ffff161561494f576015546040516001600160a01b039091169061d6d89083906000818181858888f193505050503d8060008114614944576040519150601f19603f3d011682016040523d82523d6000602084013e614949565b606091505b50909550505b60608b015161ffff16156149ba576016546040516001600160a01b039091169061d6d89086906000818181858888f193505050503d80600081146149af576040519150601f19603f3d011682016040523d82523d6000602084013e6149b4565b606091505b50909550505b60a08b015161ffff1615614a25576017546040516001600160a01b039091169061d6d89085906000818181858888f193505050503d8060008114614a1a576040519150601f19603f3d011682016040523d82523d6000602084013e614a1f565b606091505b50909550505b60808b015161ffff1615614a90576018546040516001600160a01b039091169061d6d89084906000818181858888f193505050503d8060008114614a85576040519150601f19603f3d011682016040523d82523d6000602084013e614a8a565b606091505b50909550505b50505050505050505050505b506019805460ff19169055565b614af160405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b614b3960405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080516101008101825260125461ffff8082168352620100008204811660208401526401000000008204811693830193909352660100000000000081048316606083015268010000000000000000810483166080830152600160501b8104831660a0830152600160601b8104831660c0830152600160701b900490911660e0820152614bc4613a5a565b60e08301819052614bd590896157f0565b60a083015260c0810151815160e083015160009291614bf391615893565b614bfd9190615893565b61ffff16905080600003614c1057600097505b614c1a8b8b614347565b15614cb457601f5460405163ecd07a5360e01b81526001600160a01b038d811660048301528c81166024830152604482018c9052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614c9d575060408051601f3d908101601f19168201909252614c9a91810190615b12565b60015b614ca657600080fd5b905080614cb257600080fd5b505b8715614dc85760008715614ccf575060115461ffff16614cf9565b8615614ce8575060115462010000900461ffff16614cf9565b50601154640100000000900461ffff165b6000612710614d08838d6157f0565b614d1291906157dc565b84519091508390614d279061ffff16836157f0565b614d3191906157dc565b602086015260c08401518390614d4b9061ffff16836157f0565b614d5591906157dc565b606086018190526020860151614d6b9190615880565b614d759082615833565b60408601819052606086015160208701519091614d9191615880565b614d9b9190615880565b614da5908c615833565b855260e08501516020860151614dbb91906157f0565b60c086015250614dcc9050565b8883525b604083015115614ea3578260e001518360400151614dea91906157f0565b3060009081526020819052604081208054909190614e09908490615880565b90915550503060009081526009602052604090205460ff1615614e51576040808401513060009081526001602052918220805491929091614e4b908490615880565b90915550505b306001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560400151604051614e9a91815260200190565b60405180910390a35b606083015115614fd6578260e001518360600151614ec191906157f0565b61dead600090815260208190527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf838054909190614eff908490615880565b909155505061dead60005260096020527f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb1930750037855460ff1615614f8257606083015161dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d8054909190614f7c908490615880565b90915550505b61dead6001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560600151604051614fcd91815260200190565b60405180910390a35b8260e001518360600151614fea91906157f0565b8360e001518460400151614ffe91906157f0565b8460c0015161500d9190615880565b6150179190615880565b8360a001516150269190615833565b608084015250909998505050505050505050565b601f54610100900460ff161561509e5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610d48565b6150a88282614347565b1580156150c257506014546001600160a01b038281169116145b15611022576001600160a01b038083166000908152600560209081526040808320805460ff1990811660019081179092556007909352922080549091169091179055601f805461ff00191661010017908190556201000090041661513a57601f805462010000600160b01b0319163062010000021790555b6019805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200161319f565b801515811461368657600080fd5b6000806040838503121561519b57600080fd5b82356151a68161517a565b915060208301356151b68161517a565b809150509250929050565b60005b838110156151dc5781810151838201526020016151c4565b50506000910152565b60208152600082518060208401526152048160408501602087016151c1565b601f01601f19169190910160400192915050565b6001600160a01b038116811461368657600080fd5b6000806040838503121561524057600080fd5b823561524b81615218565b946020939093013593505050565b60006020828403121561526b57600080fd5b813561171581615218565b6000806040838503121561528957600080fd5b82356151a681615218565b6000806000606084860312156152a957600080fd5b83356152b481615218565b925060208401356152c481615218565b929592945050506040919091013590565b600080604083850312156152e857600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715615336576153366152f7565b604052919050565b600067ffffffffffffffff821115615358576153586152f7565b5060051b60200190565b600082601f83011261537357600080fd5b813560206153886153838361533e565b61530d565b82815260059290921b840181019181810190868411156153a757600080fd5b8286015b848110156153c257803583529183019183016153ab565b509695505050505050565b600080604083850312156153e057600080fd5b823567ffffffffffffffff808211156153f857600080fd5b818501915085601f83011261540c57600080fd5b8135602061541c6153838361533e565b82815260059290921b8401810191818101908984111561543b57600080fd5b948201945b8386101561546257853561545381615218565b82529482019490820190615440565b9650508601359250508082111561547857600080fd5b5061548585828601615362565b9150509250929050565b6000602082840312156154a157600080fd5b5035919050565b803561ffff811681146154ba57600080fd5b919050565b6000806000606084860312156154d457600080fd5b6154dd846154a8565b92506154eb602085016154a8565b91506154f9604085016154a8565b90509250925092565b600080600080600080600060e0888a03121561551d57600080fd5b615526886154a8565b9650615534602089016154a8565b9550615542604089016154a8565b9450615550606089016154a8565b935061555e608089016154a8565b925061556c60a089016154a8565b915061557a60c089016154a8565b905092959891949750929550565b6000806000806080858703121561559e57600080fd5b84356155a981615218565b9350602085013592506040850135915060608501356155c781615218565b939692955090935050565b600080600080608085870312156155e857600080fd5b84356155f381615218565b9350602085013561560381615218565b9250604085013561561381615218565b915060608501356155c781615218565b6000806040838503121561563657600080fd5b823561564181615218565b915060208301356151b681615218565b6000806000806080858703121561566757600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061569757607f821691505b6020821081036156b757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561570e5781600019048211156156f4576156f46156bd565b8085161561570157918102915b93841c93908002906156d8565b509250929050565b60008261572557506001610e65565b8161573257506000610e65565b816001811461574857600281146157525761576e565b6001915050610e65565b60ff841115615763576157636156bd565b50506001821b610e65565b5060208310610133831016604e8410600b8410161715615791575081810a610e65565b61579b83836156d3565b80600019048211156157af576157af6156bd565b029392505050565b600061171560ff841683615716565b634e487b7160e01b600052601260045260246000fd5b6000826157eb576157eb6157c6565b500490565b8082028115828204841417610e6557610e656156bd565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b81810381811115610e6557610e656156bd565b600060018201615858576158586156bd565b5060010190565b600061ffff808316818103615876576158766156bd565b6001019392505050565b80820180821115610e6557610e656156bd565b61ffff8181168382160190808211156158ae576158ae6156bd565b5092915050565b600082601f8301126158c657600080fd5b815167ffffffffffffffff8111156158e0576158e06152f7565b6158f3601f8201601f191660200161530d565b81815284602083860101111561590857600080fd5b6113a08260208301602087016151c1565b6000806000806080858703121561592f57600080fd5b845167ffffffffffffffff8082111561594757600080fd5b615953888389016158b5565b9550602087015191508082111561596957600080fd5b50615976878288016158b5565b93505060408501519150606085015160ff811681146155c757600080fd5b601f82111561131357600081815260208120601f850160051c810160208610156159bb5750805b601f850160051c820191505b81811015610dba578281556001016159c7565b815167ffffffffffffffff8111156159f4576159f46152f7565b615a0881615a028454615683565b84615994565b602080601f831160018114615a3d5760008415615a255750858301515b600019600386901b1c1916600185901b178555610dba565b600085815260208120601f198616915b82811015615a6c57888601518255948401946001909101908401615a4d565b5085821015615a8a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615aa957615aa96157c6565b500690565b600060208284031215615ac057600080fd5b815161171581615218565b600080600060608486031215615ae057600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215615b0b57600080fd5b5051919050565b600060208284031215615b2457600080fd5b81516117158161517a565b600060ff821660ff8103615b4557615b456156bd565b60010192915050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015615b9e5784516001600160a01b031683529383019391830191600101615b79565b50506001600160a01b03969096166060850152505050608001529392505050565b61ffff8281168282160390808211156158ae576158ae6156bd56fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a2646970667358221220477aa54ab855f249dd0fe71d082a442cdd328faecbe35a74f1ad7d666031c43364736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103dd5760003560e01c806350a8e016116101fd5780638a8c523c11610118578063bfc2fc35116100ab578063ee5d9c2d1161007a578063ee5d9c2d14610c25578063f94aa1b414610c3a578063fb78680d14610ca0578063fdb78c0e14610cc0578063feadde9c14610cdf57600080fd5b8063bfc2fc3514610ae8578063cf84770614610b08578063dd62ed3e14610bbf578063eafb5a3c14610c0557600080fd5b8063b1b08f71116100e7578063b1b08f7114610657578063b3ab15fb14610aae578063b3d514fb14610657578063b7df8b3614610ace57600080fd5b80638a8c523c14610a4457806395d89b4114610a59578063a9059cbb14610a6e578063ab558e4d14610a8e57600080fd5b8063717f2d7b1161019057806383672f3e1161015f57806383672f3e146109b357806388f82020146109d3578063893d20e814610a0c5780638a63bd9b14610a2f57600080fd5b8063717f2d7b1461094b57806378648edf1461095e57806380c581d11461097357806381cf58a91461099357600080fd5b80635c24b074116101cc5780635c24b074146108bd5780635cce86cd146108dd57806370a0823114610916578063715018a61461093657600080fd5b806350a8e01614610848578063570ca73514610867578063590ffdce146108875780635a6f0918146108a757600080fd5b80632b112e49116102f8578063384535dc1161028b5780634ada218b1161025a5780634ada218b146107955780634bbb93eb146107af5780634e718e48146107cf5780634fb2e45d146107ef5780634fbee1931461080f57600080fd5b8063384535dc1461072a57806339a059021461074a578063452ed4f11461075f57806346ea7ac81461077f57600080fd5b8063313ce567116102c7578063313ce567146106a357806332cde664146106ca57806333251a0b146106ea57806336fddb041461070a57600080fd5b80632b112e49146106425780632b28fc7a146106575780632d8381191461066d5780632e8fa8211461068d57600080fd5b80630dcbcf1c1161037057806323b872dd1161033f57806323b872dd146105cc57806326003957146105ec5780632610eaca1461060c578063285777511461062c57600080fd5b80630dcbcf1c146105495780630fa604e41461058257806313e461921461059757806318160ddd146105b757600080fd5b806306fdde03116103ac57806306fdde03146104b85780630758d924146104da57806307dd79e0146104ff578063095ea7b31461052957600080fd5b806303fd2a45146103e95780630445b6671461041c578063044df72614610440578063069d955f1461046257600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b506103ff61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561042857600080fd5b50610432601a5481565b604051908152602001610413565b34801561044c57600080fd5b5061046061045b366004615188565b610cff565b005b34801561046e57600080fd5b506011546104939061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610413565b3480156104c457600080fd5b506104cd610dc2565b60405161041391906151e5565b3480156104e657600080fd5b506013546103ff9061010090046001600160a01b031681565b34801561050b57600080fd5b506013546105199060ff1681565b6040519015158152602001610413565b34801561053557600080fd5b5061051961054436600461522d565b610e54565b34801561055557600080fd5b50610519610564366004615259565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561058e57600080fd5b50610432610e6b565b3480156105a357600080fd5b506104606105b2366004615276565b610e91565b3480156105c357600080fd5b50610432611318565b3480156105d857600080fd5b506105196105e7366004615294565b611330565b3480156105f857600080fd5b506104606106073660046152d5565b6113a8565b34801561061857600080fd5b506104606106273660046153cd565b6114b1565b34801561063857600080fd5b50610432601d5481565b34801561064e57600080fd5b5061043261166a565b34801561066357600080fd5b506104326107d081565b34801561067957600080fd5b5061043261068836600461548f565b611698565b34801561069957600080fd5b50610432601b5481565b3480156106af57600080fd5b506106b861171c565b60405160ff9091168152602001610413565b3480156106d657600080fd5b506104606106e53660046154bf565b611737565b3480156106f657600080fd5b50610460610705366004615259565b6118ef565b34801561071657600080fd5b50610460610725366004615276565b6119a5565b34801561073657600080fd5b50610460610745366004615502565b611a1d565b34801561075657600080fd5b50610460611c58565b34801561076b57600080fd5b506014546103ff906001600160a01b031681565b34801561078b57600080fd5b506104326109c481565b3480156107a157600080fd5b50601f546105199060ff1681565b3480156107bb57600080fd5b506104326107ca36600461548f565b611cdf565b3480156107db57600080fd5b506104606107ea36600461548f565b611d11565b3480156107fb57600080fd5b5061046061080a366004615259565b611db4565b34801561081b57600080fd5b5061051961082a366004615259565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561085457600080fd5b50601f5461051990610100900460ff1681565b34801561087357600080fd5b506023546103ff906001600160a01b031681565b34801561089357600080fd5b506104606108a2366004615276565b611fc3565b3480156108b357600080fd5b5061043260205481565b3480156108c957600080fd5b506104606108d8366004615259565b61203b565b3480156108e957600080fd5b506105196108f8366004615259565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561092257600080fd5b50610432610931366004615259565b61211a565b34801561094257600080fd5b50610460612179565b610460610959366004615588565b612235565b34801561096a57600080fd5b50610460612840565b34801561097f57600080fd5b5061046061098e366004615276565b61289c565b34801561099f57600080fd5b506022546103ff906001600160a01b031681565b3480156109bf57600080fd5b506104606109ce3660046155d2565b612a8d565b3480156109df57600080fd5b506105196109ee366004615259565b6001600160a01b031660009081526009602052604090205460ff1690565b348015610a1857600080fd5b5060215461010090046001600160a01b03166103ff565b348015610a3b57600080fd5b50610519612bbe565b348015610a5057600080fd5b50610460612c33565b348015610a6557600080fd5b506104cd612e59565b348015610a7a57600080fd5b50610519610a8936600461522d565b612e68565b348015610a9a57600080fd5b50610460610aa9366004615259565b612e7f565b348015610aba57600080fd5b50610460610ac9366004615259565b613012565b348015610ada57600080fd5b50601c546105199060ff1681565b348015610af457600080fd5b50610460610b03366004615188565b6130ff565b348015610b1457600080fd5b50601254610b729061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000008204811691600160501b8104821691600160601b8204811691600160701b90041688565b6040805161ffff998a16815297891660208901529588169587019590955292861660608601529085166080850152841660a0840152831660c083015290911660e082015261010001610413565b348015610bcb57600080fd5b50610432610bda366004615623565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610c1157600080fd5b50610460610c20366004615259565b6131ab565b348015610c3157600080fd5b506104606135a1565b348015610c4657600080fd5b50601554601654601754601854610c6d936001600160a01b03908116938116928116911684565b604080516001600160a01b0395861681529385166020850152918416918301919091529091166060820152608001610413565b348015610cac57600080fd5b50610460610cbb366004615651565b613689565b348015610ccc57600080fd5b5060195461051990610100900460ff1681565b348015610ceb57600080fd5b50610460610cfa366004615276565b6138e9565b60215461010090046001600160a01b03163314610d515760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb83398151915260448201526064015b60405180910390fd5b601f5460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610da657600080fd5b505af1158015610dba573d6000803e3d6000fd5b505050505050565b6060600c8054610dd190615683565b80601f0160208091040260200160405190810160405280929190818152602001828054610dfd90615683565b8015610e4a5780601f10610e1f57610100808354040283529160200191610e4a565b820191906000526020600020905b815481529060010190602001808311610e2d57829003601f168201915b5050505050905090565b6000610e61338484613961565b5060015b92915050565b600e54600090610e7f9060ff16600a6157b7565b601e54610e8c91906157dc565b905090565b60215461010090046001600160a01b03163314610ede5760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b8015611026576001600160a01b03821660009081526009602052604090205460ff1615610f4d5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d48565b6001600160a01b03821660009081526020819052604090205415610fa7576001600160a01b038216600090815260208190526040902054610f8d90611698565b6001600160a01b0383166000908152600160205260409020555b6001600160a01b038083166000818152600960205260409020805460ff191660011790556014549091161461102257600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b0384161790555b5050565b80611022576001600160a01b03821660009081526009602052604090205460ff166110935760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d48565b6014546001600160a01b039081169083160361110c576110b1613a5a565b6001600160a01b0383166000908152600160205260409020546110d491906157f0565b6001600160a01b03831660009081526020818152604080832093909355600181528282208290556009905220805460ff191690555050565b600a546001036111ac5761111e613a5a565b6001600160a01b03831660009081526001602052604090205461114191906157f0565b6001600160a01b03831660009081526020818152604080832093909355600181528282208290556009905220805460ff19169055600a80548061118657611186615807565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b60005b600a5481101561131357826001600160a01b0316600a82815481106111d6576111d661581d565b6000918252602090912001546001600160a01b03160361130157600a805461120090600190615833565b815481106112105761121061581d565b600091825260209091200154600a80546001600160a01b03909216918390811061123c5761123c61581d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611272613a5a565b6001600160a01b03841660009081526001602052604090205461129591906157f0565b6001600160a01b03841660009081526020818152604080832093909355600181528282208290556009905220805460ff19169055600a8054806112da576112da615807565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b8061130b81615846565b9150506111af565b505050565b6000600f5460000361132957600080fd5b50600f5490565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611395576001600160a01b03841660009081526004602090815260408083203384529091528120805484929061138f908490615833565b90915550505b6113a0848484613c48565b949350505050565b60215461010090046001600160a01b031633146113f55760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b6064600f5461140491906157dc565b8183600f5461141391906157f0565b61141d91906157dc565b10156114915760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610d48565b8082600f546114a091906157f0565b6114aa91906157dc565b601e555050565b60215461010090046001600160a01b031633146114fe5760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b805182511461154f5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d48565b60005b82518161ffff16101561131357600e546115709060ff16600a6157b7565b828261ffff16815181106115865761158661581d565b602002602001015161159891906157f0565b6115a13361211a565b10156115ef5760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610d48565b61165733848361ffff16815181106116095761160961581d565b6020908102919091010151600e546116259060ff16600a6157b7565b858561ffff168151811061163b5761163b61581d565b602002602001015161164d91906157f0565b6000806001614040565b50806116628161585f565b915050611552565b6000611676600061211a565b61168161dead61211a565b61168b9190615880565b600f54610e8c9190615833565b60006010548211156116ff5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d48565b6000611709613a5a565b905061171581846157dc565b9392505050565b6000600f5460000361172d57600080fd5b50600e5460ff1690565b60215461010090046001600160a01b031633146117845760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b60135460ff16156117d75760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610d48565b6107d08361ffff16111580156117f357506107d08261ffff1611155b801561180557506107d08161ffff1611155b6118515760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610d48565b6109c461185e8385615893565b61ffff1611156118b05760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610d48565b6011805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b60215461010090046001600160a01b0316331461193c5760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b601f546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b15801561198a57600080fd5b505af115801561199e573d6000803e3d6000fd5b5050505050565b60215461010090046001600160a01b031633146119f25760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b60215461010090046001600160a01b03163314611a6a5760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b86601260000160006101000a81548161ffff021916908361ffff16021790555085601260000160026101000a81548161ffff021916908361ffff16021790555084601260000160046101000a81548161ffff021916908361ffff16021790555083601260000160066101000a81548161ffff021916908361ffff16021790555080601260000160086101000a81548161ffff021916908361ffff160217905550826012600001600a6101000a81548161ffff021916908361ffff160217905550816012600001600c6101000a81548161ffff021916908361ffff1602179055508083858789611b599190615893565b611b639190615893565b611b6d9190615893565b611b779190615893565b601280546fffff00000000000000000000000000001916600160701b61ffff93841602179055601154600091611bb69162010000810482169116615893565b60125461ffff91821692508291600160601b8204811691611be29181811691600160701b900416615893565b611bec9190615893565b61ffff161115611c4e5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610d48565b5050505050505050565b6022546001600160a01b03163314611cc35760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201526732b83637bcb2b91760c11b6064820152608401610d48565b611ccd6000613012565b602280546001600160a01b0319169055565b601454600090612710908390611cfd906001600160a01b031661211a565b611d0791906157f0565b610e6591906157dc565b60215461010090046001600160a01b03163314611d5e5760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b6096811115611daf5760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610d48565b601d55565b60215461010090046001600160a01b03163314611e015760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b6001600160a01b038116611e7d5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d48565b61deac196001600160a01b03821601611efe5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d48565b602154611f1a9061010090046001600160a01b03166000611fc3565b611f25816001611fc3565b602154600090611f429061010090046001600160a01b031661211a565b1115611f6957602154611f679061010090046001600160a01b03168261164d8261211a565b505b602180546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60215461010090046001600160a01b031633146120105760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b60215461010090046001600160a01b031633146120885760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b601f5460ff161561209857600080fd5b306001600160a01b038216036120f05760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610d48565b601f80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6001600160a01b03811660009081526009602052604081205460ff161561215757506001600160a01b031660009081526001602052604090205490565b6001600160a01b038216600090815260208190526040902054610e6590611698565b60215461010090046001600160a01b031633146121c65760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b6021546121e29061010090046001600160a01b03166000611fc3565b60218054610100600160a81b031981169091556040516101009091046001600160a01b03169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b60215461010090046001600160a01b031633146122825760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b60215460ff16156122b95760405162461bcd60e51b81526020600482015260016024820152603160f81b6044820152606401610d48565b60004711806122c85750600034115b6123145760405162461bcd60e51b815260206004820152601760248201527f4e6f2066756e647320666f72206c69717569646974792e0000000000000000006044820152606401610d48565b601f805462010000600160b01b031916620100006001600160a01b03848116820292909217928390556040516301a6952360e41b815230600482015292041690631a69523090602401600060405180830381600087803b15801561237757600080fd5b505af1925050508015612388575060015b50601f60029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b81526004016000604051808303816000875af19250505080156123ff57506040513d6000823e601f3d908101601f191682016040526123fc9190810190615919565b60015b61242f5760405162461bcd60e51b81526020600482015260016024820152603360f81b6044820152606401610d48565b600c61243b85826159da565b50600d61244884826159da565b50600b829055600e805460ff191660ff831690811790915561246b90600a6157b7565b600b5461247891906157f0565b600f81905561248990600019615a9a565b61249590600019615833565b60105550505050601360019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125139190615aae565b6001600160a01b031663c9c65396601360019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612574573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125989190615aae565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156125e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126089190615aae565b601480546001600160a01b0319166001600160a01b039290921691821790556000908152600260205260409020805460ff199081166001908117909255602180549091169091179055600f546064906126629060036157f0565b61266c91906157dc565b601e55601054602180546001600160a01b03610100918290048116600090815260208190526040808220959095559254600f54945192900416927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916126d491815260200190565b60405180910390a36013546126fb90309061010090046001600160a01b0316600019613961565b602154601354612724916001600160a01b03610100918290048116929190910416600019613961565b612757602160019054906101000a90046001600160a01b0316858486600f5461274d91906157f0565b61164d91906157dc565b506021546127779061010090046001600160a01b03163061164d8261211a565b5060135461010090046001600160a01b031663f305d71947306127998161211a565b60215460405160e086901b6001600160e01b03191681526001600160a01b03938416600482015260248101929092526000604483018190526064830152610100900490911660848201524260a482015260c40160606040518083038185885af115801561280a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061282f9190615acb565b50505061283a612c33565b50505050565b60215461010090046001600160a01b0316331461288d5760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b6013805460ff19166001179055565b60215461010090046001600160a01b031633146128e95760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b8061295c576001600160a01b03828116600081815260026020526040808220805460ff19169055601f5490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610da657600080fd5b600354156129c3576203f480600354426129769190615833565b116129c35760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610d48565b6001600160a01b03821660009081526002602052604090205460ff1615612a2c5760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610d48565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601f5491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401610d8c565b60215461010090046001600160a01b03163314612ada5760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b6001600160a01b03841615801590612afa57506001600160a01b03831615155b8015612b0e57506001600160a01b03821615155b8015612b2257506001600160a01b03811615155b612b6e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610d48565b601580546001600160a01b039586166001600160a01b0319918216179091556016805494861694821694909417909355601780549285169284169290921790915560188054919093169116179055565b60215460009061010090046001600160a01b03163314612c0e5760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b601354612c2d90309061010090046001600160a01b0316600019613961565b50600190565b60215461010090046001600160a01b03163314612c805760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b601f5460ff1615612cd35760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d48565b601f54610100900460ff16612d2a5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d48565b601f546201000090046001600160a01b0316612d5a57601f805462010000600160b01b0319163062010000021790555b601f54601454600e54604051631b04570d60e21b81526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b158015612dd257600080fd5b505af1925050508015612de3575060015b50601f805460ff1916600117905560145461271090612e0a906001600160a01b031661211a565b612e1590600a6157f0565b612e1f91906157dc565b601a5560145461271090612e3b906001600160a01b031661211a565b612e4690601e6157f0565b612e5091906157dc565b601b5542602055565b6060600d8054610dd190615683565b6000612e75338484613c48565b5060019392505050565b60215461010090046001600160a01b03163314612ecc5760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b306001600160a01b03821603612f245760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610d48565b6021546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb9261010090049091169083906370a0823190602401602060405180830381865afa158015612f7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa39190615af9565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612fee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113139190615b12565b6022546001600160a01b0316331461307d5760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201526732b83637bcb2b91760c11b6064820152608401610d48565b6023546001600160a01b031680156130ba576001600160a01b0381166000908152600560205260408120805460ff191690556130ba908290611fc3565b602380546001600160a01b0319166001600160a01b0384169081179091556000908152600560205260409020805460ff19166001908117909155611022908390611fc3565b60215461010090046001600160a01b0316331461314c5760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b6019805461ff00191661010084151590810291909117909155601c805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b60215461010090046001600160a01b031633146131f85760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b601f54610100900460ff16156132505760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610d48565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613295573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b99190615aae565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332a9190615aae565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133999190615aae565b6014546001600160a01b039081166000908152600260205260409020805460ff19169055909150811661352f57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613404573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134289190615aae565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134999190615aae565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156134e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350a9190615aae565b601480546001600160a01b0319166001600160a01b039290921691909117905561354b565b601480546001600160a01b0319166001600160a01b0383161790555b60138054610100600160a81b0319166101006001600160a01b03858116820292909217835560145482166000908152600260205260409020805460ff191660011790559154611313923092910416600019613961565b60215461010090046001600160a01b031633146135ee5760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b601f54610100900460ff16156136465760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d48565b6021546040516001600160a01b0361010090920491909116904780156108fc02916000818181858888f19350505050158015613686573d6000803e3d6000fd5b50565b60215461010090046001600160a01b031633146136d65760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b8284600f546136e591906157f0565b6136ef91906157dc565b601a55600f5481906137029084906157f0565b61370c91906157dc565b601b819055601a54111561376c5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610d48565b60145461271090613785906001600160a01b031661211a565b6137909060966157f0565b61379a91906157dc565b601b5411156137f75760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610d48565b620f4240600f5461380891906157dc565b601b5410156138705760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610d48565b620f4240600f5461388191906157dc565b601a54101561283a5760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610d48565b60215461010090046001600160a01b031633146139365760405162461bcd60e51b81526020600482015260116024820152600080516020615bdb8339815191526044820152606401610d48565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b0383166139ad5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610d48565b6001600160a01b0382166139f95760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610d48565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601054600f546014546001600160a01b0316600090815260096020526040812054909291908290829060ff1615613b24576014546001600160a01b0390811660009081526020818152604080832054600190925290912054601f54919290916201000090041630148015613ad857504660381480613ad85750466001145b15613ae257600080fd5b83821180613aef57508281115b15613b0957613afe85876157dc565b965050505050505090565b613b138285615833565b9350613b1f8184615833565b925050505b600a5415613c1a5760005b600a5460ff82161015613c18576000806000600a8460ff1681548110613b5757613b5761581d565b60009182526020808320909101546001600160a01b03168352820192909252604001812054600a805491935060019183919060ff8716908110613b9c57613b9c61581d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054905084821180613bd057508381115b15613beb57613bdf86886157dc565b97505050505050505090565b613bf58286615833565b9450613c018185615833565b935050508080613c1090615b2f565b915050613b2f565b505b613c2483856157dc565b821015613c3e57613c3583856157dc565b94505050505090565b613c3581836157dc565b60006001600160a01b038416613cae5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d48565b6001600160a01b038316613d105760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d48565b60008211613d725760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d48565b6001600160a01b0384166000908152600260205260408120548190819060ff1615613da05760019250613dce565b6001600160a01b03861660009081526002602052604090205460ff1615613dca5760019150613dce565b5060015b613dd88787614347565b15613f9757601f5460ff16613ed95780613e345760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d48565b6001600160a01b03871660009081526006602052604090205460ff16158015613e7657506001600160a01b03861660009081526006602052604090205460ff16155b15613ed95760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610d48565b6013546001600160a01b038781166101009092041614801590613efa575081155b15613f97576001600160a01b03861660009081526008602052604090205460ff16613f9757601e5485613f2c8861211a565b613f369190615880565b1115613f975760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610d48565b81156140275760195460ff1661402757601954610100900460ff1615614027576000613fc23061211a565b9050601a54811061402557601b54601c5460ff161561400f57601d546014546127109190613ff8906001600160a01b031661211a565b61400291906157f0565b61400c91906157dc565b90505b80821061401a578091505b6140238261446b565b505b505b614035878787868686614040565b979650505050505050565b6001600160a01b03861660009081526007602052604081205460019060ff168061408257506001600160a01b03871660009081526007602052604090205460ff165b1561408b575060005b600061409c898989858a8a8a614aa9565b60a08101516001600160a01b038b166000908152602081905260409020549192506140c691615833565b6001600160a01b03808b16600090815260208190526040808220939093556080840151918b16815291909120546140fd9190615880565b6001600160a01b03808a1660009081526020818152604080832094909455918c1681526009909152205460ff161561416d576001600160a01b038916600090815260016020526040902054614153908890615833565b6001600160a01b038a166000908152600160205260409020555b6001600160a01b03881660009081526009602052604090205460ff16156141cd5780516001600160a01b0389166000908152600160205260409020546141b39190615880565b6001600160a01b0389166000908152600160205260409020555b60008160c0015111806141e4575060008160200151115b15614205578060c00151601060008282546141ff9190615833565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161424e91815260200190565b60405180910390a3601f54610100900460ff166143385761426f898961503a565b601f54610100900460ff1615801561428c575061428c8989614347565b80156142b157506001600160a01b03891660009081526006602052604090205460ff16155b80156142d657506001600160a01b03881660009081526006602052604090205460ff16155b80156142e0575083155b156143385760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610d48565b50600198975050505050505050565b6021546000906001600160a01b03848116610100909204161480159061438057506021546001600160a01b038381166101009092041614155b801561439c575060215461010090046001600160a01b03163214155b80156143c157506001600160a01b03821660009081526005602052604090205460ff16155b80156143e657506001600160a01b03831660009081526005602052604090205460ff16155b80156143fd57506001600160a01b03821661dead14155b801561441157506001600160a01b03821615155b801561442657506001600160a01b0383163014155b80156144465750601f546001600160a01b03848116620100009092041614155b8015611715575050601f546201000090046001600160a01b0390811691161415919050565b6019805460ff19166001179055604080516101008101825260125461ffff8082168352620100008204811660208401526401000000008204811693830193909352660100000000000081048316606083015268010000000000000000810483166080830152600160501b8104831660a0830152600160601b8104831660c0830152600160701b900490911660e0820181905260000361450a5750614a9c565b30600090815260046020908152604080832060135461010090046001600160a01b031684529091529020546000191461456d5730600090815260046020908152604080832060135461010090046001600160a01b03168452909152902060001990555b600060028260e0015161ffff16836020015161ffff168561458e91906157f0565b61459891906157dc565b6145a291906157dc565b905060006145b08285615833565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106145ea576145ea61581d565b60200260200101906001600160a01b031690816001600160a01b031681525050601360019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561465d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146819190615aae565b816001815181106146945761469461581d565b6001600160a01b03928316602091820292909201015260135460405163791ac94760e01b81526101009091049091169063791ac947906146e1908590600090869030904290600401615b4e565b600060405180830381600087803b1580156146fb57600080fd5b505af192505050801561470c575060015b6147195750505050614a9c565b4760008361472786846157f0565b61473191906157dc565b905084156148145760135460405163f305d71960e01b815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526101009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af1935050505080156147c8575060408051601f3d908101601f191682019092526147c591810190615acb565b60015b6147d757505050505050614a9c565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b61481e8183615833565b915085602001518660e0018181516148369190615bbf565b61ffff90811690915260e088015160608901516000935083929182169161485e9116866157f0565b61486891906157dc565b905060008860e0015161ffff168960a0015161ffff168661488991906157f0565b61489391906157dc565b905060008960e0015161ffff168a6080015161ffff16876148b491906157f0565b6148be91906157dc565b90506000816148cd8486615880565b6148d79190615880565b6148e19088615833565b60408c015190915061ffff161561494f576015546040516001600160a01b039091169061d6d89083906000818181858888f193505050503d8060008114614944576040519150601f19603f3d011682016040523d82523d6000602084013e614949565b606091505b50909550505b60608b015161ffff16156149ba576016546040516001600160a01b039091169061d6d89086906000818181858888f193505050503d80600081146149af576040519150601f19603f3d011682016040523d82523d6000602084013e6149b4565b606091505b50909550505b60a08b015161ffff1615614a25576017546040516001600160a01b039091169061d6d89085906000818181858888f193505050503d8060008114614a1a576040519150601f19603f3d011682016040523d82523d6000602084013e614a1f565b606091505b50909550505b60808b015161ffff1615614a90576018546040516001600160a01b039091169061d6d89084906000818181858888f193505050503d8060008114614a85576040519150601f19603f3d011682016040523d82523d6000602084013e614a8a565b606091505b50909550505b50505050505050505050505b506019805460ff19169055565b614af160405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b614b3960405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080516101008101825260125461ffff8082168352620100008204811660208401526401000000008204811693830193909352660100000000000081048316606083015268010000000000000000810483166080830152600160501b8104831660a0830152600160601b8104831660c0830152600160701b900490911660e0820152614bc4613a5a565b60e08301819052614bd590896157f0565b60a083015260c0810151815160e083015160009291614bf391615893565b614bfd9190615893565b61ffff16905080600003614c1057600097505b614c1a8b8b614347565b15614cb457601f5460405163ecd07a5360e01b81526001600160a01b038d811660048301528c81166024830152604482018c9052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614c9d575060408051601f3d908101601f19168201909252614c9a91810190615b12565b60015b614ca657600080fd5b905080614cb257600080fd5b505b8715614dc85760008715614ccf575060115461ffff16614cf9565b8615614ce8575060115462010000900461ffff16614cf9565b50601154640100000000900461ffff165b6000612710614d08838d6157f0565b614d1291906157dc565b84519091508390614d279061ffff16836157f0565b614d3191906157dc565b602086015260c08401518390614d4b9061ffff16836157f0565b614d5591906157dc565b606086018190526020860151614d6b9190615880565b614d759082615833565b60408601819052606086015160208701519091614d9191615880565b614d9b9190615880565b614da5908c615833565b855260e08501516020860151614dbb91906157f0565b60c086015250614dcc9050565b8883525b604083015115614ea3578260e001518360400151614dea91906157f0565b3060009081526020819052604081208054909190614e09908490615880565b90915550503060009081526009602052604090205460ff1615614e51576040808401513060009081526001602052918220805491929091614e4b908490615880565b90915550505b306001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560400151604051614e9a91815260200190565b60405180910390a35b606083015115614fd6578260e001518360600151614ec191906157f0565b61dead600090815260208190527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf838054909190614eff908490615880565b909155505061dead60005260096020527f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb1930750037855460ff1615614f8257606083015161dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d8054909190614f7c908490615880565b90915550505b61dead6001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560600151604051614fcd91815260200190565b60405180910390a35b8260e001518360600151614fea91906157f0565b8360e001518460400151614ffe91906157f0565b8460c0015161500d9190615880565b6150179190615880565b8360a001516150269190615833565b608084015250909998505050505050505050565b601f54610100900460ff161561509e5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610d48565b6150a88282614347565b1580156150c257506014546001600160a01b038281169116145b15611022576001600160a01b038083166000908152600560209081526040808320805460ff1990811660019081179092556007909352922080549091169091179055601f805461ff00191661010017908190556201000090041661513a57601f805462010000600160b01b0319163062010000021790555b6019805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200161319f565b801515811461368657600080fd5b6000806040838503121561519b57600080fd5b82356151a68161517a565b915060208301356151b68161517a565b809150509250929050565b60005b838110156151dc5781810151838201526020016151c4565b50506000910152565b60208152600082518060208401526152048160408501602087016151c1565b601f01601f19169190910160400192915050565b6001600160a01b038116811461368657600080fd5b6000806040838503121561524057600080fd5b823561524b81615218565b946020939093013593505050565b60006020828403121561526b57600080fd5b813561171581615218565b6000806040838503121561528957600080fd5b82356151a681615218565b6000806000606084860312156152a957600080fd5b83356152b481615218565b925060208401356152c481615218565b929592945050506040919091013590565b600080604083850312156152e857600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715615336576153366152f7565b604052919050565b600067ffffffffffffffff821115615358576153586152f7565b5060051b60200190565b600082601f83011261537357600080fd5b813560206153886153838361533e565b61530d565b82815260059290921b840181019181810190868411156153a757600080fd5b8286015b848110156153c257803583529183019183016153ab565b509695505050505050565b600080604083850312156153e057600080fd5b823567ffffffffffffffff808211156153f857600080fd5b818501915085601f83011261540c57600080fd5b8135602061541c6153838361533e565b82815260059290921b8401810191818101908984111561543b57600080fd5b948201945b8386101561546257853561545381615218565b82529482019490820190615440565b9650508601359250508082111561547857600080fd5b5061548585828601615362565b9150509250929050565b6000602082840312156154a157600080fd5b5035919050565b803561ffff811681146154ba57600080fd5b919050565b6000806000606084860312156154d457600080fd5b6154dd846154a8565b92506154eb602085016154a8565b91506154f9604085016154a8565b90509250925092565b600080600080600080600060e0888a03121561551d57600080fd5b615526886154a8565b9650615534602089016154a8565b9550615542604089016154a8565b9450615550606089016154a8565b935061555e608089016154a8565b925061556c60a089016154a8565b915061557a60c089016154a8565b905092959891949750929550565b6000806000806080858703121561559e57600080fd5b84356155a981615218565b9350602085013592506040850135915060608501356155c781615218565b939692955090935050565b600080600080608085870312156155e857600080fd5b84356155f381615218565b9350602085013561560381615218565b9250604085013561561381615218565b915060608501356155c781615218565b6000806040838503121561563657600080fd5b823561564181615218565b915060208301356151b681615218565b6000806000806080858703121561566757600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061569757607f821691505b6020821081036156b757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561570e5781600019048211156156f4576156f46156bd565b8085161561570157918102915b93841c93908002906156d8565b509250929050565b60008261572557506001610e65565b8161573257506000610e65565b816001811461574857600281146157525761576e565b6001915050610e65565b60ff841115615763576157636156bd565b50506001821b610e65565b5060208310610133831016604e8410600b8410161715615791575081810a610e65565b61579b83836156d3565b80600019048211156157af576157af6156bd565b029392505050565b600061171560ff841683615716565b634e487b7160e01b600052601260045260246000fd5b6000826157eb576157eb6157c6565b500490565b8082028115828204841417610e6557610e656156bd565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b81810381811115610e6557610e656156bd565b600060018201615858576158586156bd565b5060010190565b600061ffff808316818103615876576158766156bd565b6001019392505050565b80820180821115610e6557610e656156bd565b61ffff8181168382160190808211156158ae576158ae6156bd565b5092915050565b600082601f8301126158c657600080fd5b815167ffffffffffffffff8111156158e0576158e06152f7565b6158f3601f8201601f191660200161530d565b81815284602083860101111561590857600080fd5b6113a08260208301602087016151c1565b6000806000806080858703121561592f57600080fd5b845167ffffffffffffffff8082111561594757600080fd5b615953888389016158b5565b9550602087015191508082111561596957600080fd5b50615976878288016158b5565b93505060408501519150606085015160ff811681146155c757600080fd5b601f82111561131357600081815260208120601f850160051c810160208610156159bb5750805b601f850160051c820191505b81811015610dba578281556001016159c7565b815167ffffffffffffffff8111156159f4576159f46152f7565b615a0881615a028454615683565b84615994565b602080601f831160018114615a3d5760008415615a255750858301515b600019600386901b1c1916600185901b178555610dba565b600085815260208120601f198616915b82811015615a6c57888601518255948401946001909101908401615a4d565b5085821015615a8a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615aa957615aa96157c6565b500690565b600060208284031215615ac057600080fd5b815161171581615218565b600080600060608486031215615ae057600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215615b0b57600080fd5b5051919050565b600060208284031215615b2457600080fd5b81516117158161517a565b600060ff821660ff8103615b4557615b456156bd565b60010192915050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015615b9e5784516001600160a01b031683529383019391830191600101615b79565b50506001600160a01b03969096166060850152505050608001529392505050565b61ffff8281168282160390808211156158ae576158ae6156bd56fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a2646970667358221220477aa54ab855f249dd0fe71d082a442cdd328faecbe35a74f1ad7d666031c43364736f6c63430008110033

Deployed Bytecode Sourcemap

4097:31603:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6038:73;;;;;;;;;;;;6069:42;6038:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;6038:73:0;;;;;;;;6714:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;6714:28:0;245:177:1;17806:153:0;;;;;;;;;;-1:-1:-1;17806:153:0;;;;;:::i;:::-;;:::i;:::-;;5307:112;;;;;;;;;;-1:-1:-1;5307:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;1137:6:1;1170:15;;;1152:34;;1222:15;;;1217:2;1202:18;;1195:43;1274:15;;1254:18;;;1247:43;;;;1115:2;1100:18;5307:112:0;931:365:1;13507:80:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;5977:26::-;;;;;;;;;;-1:-1:-1;5977:26:0;;;;;;;-1:-1:-1;;;;;5977:26:0;;;5944;;;;;;;;;;-1:-1:-1;5944:26:0;;;;;;;;;;;2370:14:1;;2363:22;2345:41;;2333:2;2318:18;5944:26:0;2205:187:1;14196:161:0;;;;;;;;;;-1:-1:-1;14196:161:0;;;;;:::i;:::-;;:::i;17235:140::-;;;;;;;;;;-1:-1:-1;17235:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;17333:34:0;17309:4;17333:34;;;:25;:34;;;;;;;;;17235:140;20395:114;;;;;;;;;;;;;:::i;29007:1522::-;;;;;;;;;;-1:-1:-1;29007:1522:0;;;;;:::i;:::-;;:::i;13178:115::-;;;;;;;;;;;;;:::i;14866:306::-;;;;;;;;;;-1:-1:-1;14866:306:0;;;;;:::i;:::-;;:::i;20123:264::-;;;;;;;;;;-1:-1:-1;20123:264:0;;;;;:::i;:::-;;:::i;28424:447::-;;;;;;;;;;-1:-1:-1;28424:447:0;;;;;:::i;:::-;;:::i;6822:33::-;;;;;;;;;;;;;;;;17539:141;;;;;;;;;;;;;:::i;5688:42::-;;;;;;;;;;;;5726:4;5688:42;;30537:250;;;;;;;;;;-1:-1:-1;30537:250:0;;;;;:::i;:::-;;:::i;6749:25::-;;;;;;;;;;;;;;;;13299:112;;;;;;;;;;;;;:::i;:::-;;;7073:4:1;7061:17;;;7043:36;;7031:2;7016:18;13299:112:0;6901:184:1;18157:544:0;;;;;;;;;;-1:-1:-1;18157:544:0;;;;;:::i;:::-;;:::i;17688:110::-;;;;;;;;;;-1:-1:-1;17688:110:0;;;;;:::i;:::-;;:::i;16810:140::-;;;;;;;;;;-1:-1:-1;16810:140:0;;;;;:::i;:::-;;:::i;18709:888::-;;;;;;;;;;-1:-1:-1;18709:888:0;;;;;:::i;:::-;;:::i;12567:221::-;;;;;;;;;;;;;:::i;6010:21::-;;;;;;;;;;-1:-1:-1;6010:21:0;;;;-1:-1:-1;;;;;6010:21:0;;;5841:46;;;;;;;;;;;;5883:4;5841:46;;6907:34;;;;;;;;;;-1:-1:-1;6907:34:0;;;;;;;;20517:189;;;;;;;;;;-1:-1:-1;20517:189:0;;;;;:::i;:::-;;:::i;21421:217::-;;;;;;;;;;-1:-1:-1;21421:217:0;;;;;:::i;:::-;;:::i;10959:654::-;;;;;;;;;;-1:-1:-1;10959:654:0;;;;;:::i;:::-;;:::i;16958:127::-;;;;;;;;;;-1:-1:-1;16958:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;17049:28:0;17025:4;17049:28;;;:19;:28;;;;;;;;;16958:127;6948:36;;;;;;;;;;-1:-1:-1;6948:36:0;;;;;;;;;;;11892:23;;;;;;;;;;-1:-1:-1;11892:23:0;;;;-1:-1:-1;;;;;11892:23:0;;;17093:134;;;;;;;;;;-1:-1:-1;17093:134:0;;;;;:::i;:::-;;:::i;7021:26::-;;;;;;;;;;;;;;;;16440:222;;;;;;;;;;-1:-1:-1;16440:222:0;;;;;:::i;:::-;;:::i;16670:132::-;;;;;;;;;;-1:-1:-1;16670:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;16764:30:0;16740:4;16764:30;;;:21;:30;;;;;;;;;16670:132;13817:198;;;;;;;;;;-1:-1:-1;13817:198:0;;;;;:::i;:::-;;:::i;11621:225::-;;;;;;;;;;;;;:::i;8412:1785::-;;;;;;:::i;:::-;;:::i;17967:182::-;;;;;;;;;;;;;:::i;15868:564::-;;;;;;;;;;-1:-1:-1;15868:564:0;;;;;:::i;:::-;;:::i;11854:31::-;;;;;;;;;;-1:-1:-1;11854:31:0;;;;-1:-1:-1;;;;;11854:31:0;;;19605:510;;;;;;;;;;-1:-1:-1;19605:510:0;;;;;:::i;:::-;;:::i;28879:120::-;;;;;;;;;;-1:-1:-1;28879:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;28971:20:0;28947:4;28971:20;;;:11;:20;;;;;;;;;28879:120;13593:79;;;;;;;;;;-1:-1:-1;13663:6:0;;;;;-1:-1:-1;;;;;13663:6:0;13593:79;;14683:175;;;;;;;;;;;;;:::i;27377:593::-;;;;;;;;;;;;;:::i;13417:84::-;;;;;;;;;;;;;:::i;14023:165::-;;;;;;;;;;-1:-1:-1;14023:165:0;;;;;:::i;:::-;;:::i;28168:248::-;;;;;;;;;;-1:-1:-1;28168:248:0;;;;;:::i;:::-;;:::i;12077:482::-;;;;;;;;;;-1:-1:-1;12077:482:0;;;;;:::i;:::-;;:::i;6781:34::-;;;;;;;;;;-1:-1:-1;6781:34:0;;;;;;;;21646:263;;;;;;;;;;-1:-1:-1;21646:263:0;;;;;:::i;:::-;;:::i;5428:251::-;;;;;;;;;;-1:-1:-1;5428:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5428:251:0;;;;;-1:-1:-1;;;5428:251:0;;;;;-1:-1:-1;;;5428:251:0;;;;;;;;;9787:6:1;9820:15;;;9802:34;;9872:15;;;9867:2;9852:18;;9845:43;9924:15;;;9904:18;;;9897:43;;;;9976:15;;;9971:2;9956:18;;9949:43;10029:15;;;10023:3;10008:19;;10001:44;10082:15;;10076:3;10061:19;;10054:44;10135:15;;10129:3;10114:19;;10107:44;10188:15;;;10182:3;10167:19;;10160:44;9764:3;9749:19;5428:251:0;9450:760:1;13678:133:0;;;;;;;;;;-1:-1:-1;13678:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;13780:19:0;;;13762:7;13780:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;13678:133;15180:680;;;;;;;;;;-1:-1:-1;15180:680:0;;;;;:::i;:::-;;:::i;27978:182::-;;;;;;;;;;;;;:::i;6296:341::-;;;;;;;;;;-1:-1:-1;6296:341:0;;;;;;;;;;-1:-1:-1;;;;;6296:341:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10982:15:1;;;10964:34;;11034:15;;;11029:2;11014:18;;11007:43;11086:15;;;11066:18;;;11059:43;;;;11138:15;;;11133:2;11118:18;;11111:43;10890:3;10875:19;6296:341:0;10608:552:1;20714:699:0;;;;;;;;;;-1:-1:-1;20714:699:0;;;;;:::i;:::-;;:::i;6668:39::-;;;;;;;;;;-1:-1:-1;6668:39:0;;;;;;;;;;;17383:148;;;;;;;;;;-1:-1:-1;17383:148:0;;;;;:::i;:::-;;:::i;17806:153::-;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;;;;;;;;;17901:11:::1;::::0;:50:::1;::::0;-1:-1:-1;;;17901:50:0;;12088:14:1;;12081:22;17901:50:0::1;::::0;::::1;12063:41:1::0;12147:14;;12140:22;12120:18;;;12113:50;17901:11:0;;;::::1;-1:-1:-1::0;;;;;17901:11:0::1;::::0;:26:::1;::::0;12036:18:1;;17901:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17806:153:::0;;:::o;13507:80::-;13555:13;13579:5;13572:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13507:80;:::o;14196:161::-;14273:4;14290:37;14299:10;14311:7;14320:6;14290:8;:37::i;:::-;-1:-1:-1;14345:4:0;14196:161;;;;;:::o;20395:114::-;20491:9;;20442:7;;20487:13;;20491:9;;20487:2;:13;:::i;:::-;20469:14;;:32;;;;:::i;:::-;20462:39;;20395:114;:::o;29007:1522::-;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;29101:7:::1;29097:1425;;;-1:-1:-1::0;;;;;29134:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29133:21;29125:62;;;::::0;-1:-1:-1;;;29125:62:0;;14533:2:1;29125:62:0::1;::::0;::::1;14515:21:1::0;14572:2;14552:18;;;14545:30;14611;14591:18;;;14584:58;14659:18;;29125:62:0::1;14331:352:1::0;29125:62:0::1;-1:-1:-1::0;;;;;29206:16:0;::::1;29225:1;29206:16:::0;;;::::1;::::0;;;;;;;:20;29202:117:::1;;-1:-1:-1::0;;;;;29286:16:0;::::1;:7;:16:::0;;;::::1;::::0;;;;;;;29266:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;29247:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;29202:117:::1;-1:-1:-1::0;;;;;29333:20:0;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;29333:27:0::1;29356:4;29333:27;::::0;;29390:6:::1;::::0;;;::::1;29379:17;29375:80;;29416:9;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;29416:23:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;29416:23:0::1;-1:-1:-1::0;;;;;29416:23:0;::::1;;::::0;;29375:80:::1;29007:1522:::0;;:::o;29097:1425::-:1;29477:7;29472:1050;;-1:-1:-1::0;;;;;29509:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29501:61;;;::::0;-1:-1:-1;;;29501:61:0;;14890:2:1;29501:61:0::1;::::0;::::1;14872:21:1::0;14929:2;14909:18;;;14902:30;14968;14948:18;;;14941:58;15016:18;;29501:61:0::1;14688:352:1::0;29501:61:0::1;29592:6;::::0;-1:-1:-1;;;;;29592:6:0;;::::1;29581:17:::0;;::::1;::::0;29577:934:::1;;29657:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;29638:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;29619:16:0;::::1;:7;:16:::0;;;::::1;::::0;;;;;;;:48;;;;29686:7:::1;:16:::0;;;;;:20;;;29725:11:::1;:20:::0;;;:28;;-1:-1:-1;;29725:28:0::1;::::0;;29007:1522;;:::o;29577:934::-:1;29779:9;:16:::0;29799:1:::1;29779:21:::0;29775:736:::1;;29859:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;29840:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;29821:16:0;::::1;:7;:16:::0;;;::::1;::::0;;;;;;;:48;;;;29888:7:::1;:16:::0;;;;;:20;;;29927:11:::1;:20:::0;;;:28;;-1:-1:-1;;29927:28:0::1;::::0;;29974:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;29974:15:0;;;;;-1:-1:-1;;;;;;29974:15:0::1;::::0;;;;;29007:1522;;:::o;29775:736::-:1;30035:9;30030:466;30054:9;:16:::0;30050:20;::::1;30030:466;;;30120:7;-1:-1:-1::0;;;;;30104:23:0::1;:9;30114:1;30104:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;30104:12:0::1;:23:::0;30100:377:::1;;30171:9;30181:16:::0;;:20:::1;::::0;30200:1:::1;::::0;30181:20:::1;:::i;:::-;30171:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;30156:9:::1;:12:::0;;-1:-1:-1;;;;;30171:31:0;;::::1;::::0;30166:1;;30156:12;::::1;;;;;:::i;:::-;;;;;;;;;:46;;;;;-1:-1:-1::0;;;;;30156:46:0::1;;;;;-1:-1:-1::0;;;;;30156:46:0::1;;;;;;30267:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;30248:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;30229:16:0;::::1;:7;:16:::0;;;::::1;::::0;;;;;;;:48;;;;30304:7:::1;:16:::0;;;;;:20;;;30351:11:::1;:20:::0;;;:28;;-1:-1:-1;;30351:28:0::1;::::0;;30406:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;30406:15:0;;;;;-1:-1:-1;;;;;;30406:15:0::1;::::0;;;;;30030:466:::1;29007:1522:::0;;:::o;30100:377::-:1;30072:3:::0;::::1;::::0;::::1;:::i;:::-;;;;30030:466;;;;29007:1522:::0;;:::o;13178:115::-;13233:7;13248;;13259:1;13248:12;13244:31;;13264:8;;;13244:31;-1:-1:-1;13283:7:0;;;13178:115::o;14866:306::-;-1:-1:-1;;;;;14987:19:0;;14966:4;14987:19;;;:11;:19;;;;;;;;15007:10;14987:31;;;;;;;;-1:-1:-1;;14987:52:0;14983:126;;-1:-1:-1;;;;;15056:19:0;;;;;;:11;:19;;;;;;;;15076:10;15056:31;;;;;;;:41;;15091:6;;15056:19;:41;;15091:6;;15056:41;:::i;:::-;;;;-1:-1:-1;;14983:126:0;15128:36;15138:6;15146:9;15157:6;15128:9;:36::i;:::-;15121:43;14866:306;-1:-1:-1;;;;14866:306:0:o;20123:264::-;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;20265:3:::1;20255:7;;:13;;;;:::i;:::-;20243:7;20232;20222;;:17;;;;:::i;:::-;20221:29;;;;:::i;:::-;:48;;20213:109;;;::::0;-1:-1:-1;;;20213:109:0;;15957:2:1;20213:109:0::1;::::0;::::1;15939:21:1::0;15996:2;15976:18;;;15969:30;16035:34;16015:18;;;16008:62;16106:18;16086;;;16079:46;16142:19;;20213:109:0::1;15755:412:1::0;20213:109:0::1;20372:7;20361;20351;;:17;;;;:::i;:::-;20350:29;;;;:::i;:::-;20333:14;:46:::0;-1:-1:-1;;20123:264:0:o;28424:447::-;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;28559:7:::1;:14;28540:8;:15;:33;28532:67;;;::::0;-1:-1:-1;;;28532:67:0;;16374:2:1;28532:67:0::1;::::0;::::1;16356:21:1::0;16413:2;16393:18;;;16386:30;16452:23;16432:18;;;16425:51;16493:18;;28532:67:0::1;16172:345:1::0;28532:67:0::1;28615:8;28610:254;28633:8;:15;28629:1;:19;;;28610:254;;;28718:9;::::0;28714:13:::1;::::0;28718:9:::1;;28714:2;:13;:::i;:::-;28703:7;28711:1;28703:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;28678:21;28688:10;28678:9;:21::i;:::-;:49;;28670:80;;;::::0;-1:-1:-1;;;28670:80:0;;16724:2:1;28670:80:0::1;::::0;::::1;16706:21:1::0;16763:2;16743:18;;;16736:30;16802:20;16782:18;;;16775:48;16840:18;;28670:80:0::1;16522:342:1::0;28670:80:0::1;28765:87;28782:10;28794:8;28803:1;28794:11;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;28822:9:::1;::::0;28818:13:::1;::::0;28822:9:::1;;28818:2;:13;:::i;:::-;28807:7;28815:1;28807:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;28833:5;28840::::0;28847:4:::1;28765:16;:87::i;:::-;-1:-1:-1::0;28650:3:0;::::1;::::0;::::1;:::i;:::-;;;;28610:254;;17539:141:::0;17592:7;17649:21;17667:1;17649:9;:21::i;:::-;17631:15;6069:42;17631:9;:15::i;:::-;:39;;;;:::i;:::-;17620:7;;:51;;;;:::i;30537:250::-;30603:7;30642;;30631;:18;;30623:73;;;;-1:-1:-1;;;30623:73:0;;17403:2:1;30623:73:0;;;17385:21:1;17442:2;17422:18;;;17415:30;17481:34;17461:18;;;17454:62;-1:-1:-1;;;17532:18:1;;;17525:40;17582:19;;30623:73:0;17201:406:1;30623:73:0;30707:19;30730:10;:8;:10::i;:::-;30707:33;-1:-1:-1;30758:21:0;30707:33;30758:7;:21;:::i;:::-;30751:28;30537:250;-1:-1:-1;;;30537:250:0:o;13299:112::-;13351:5;13364:7;;13375:1;13364:12;13360:31;;13380:8;;;13360:31;-1:-1:-1;13399:9:0;;;;;13299:112::o;18157:544::-;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;18265:14:::1;::::0;::::1;;18264:15;18256:45;;;::::0;-1:-1:-1;;;18256:45:0;;17814:2:1;18256:45:0::1;::::0;::::1;17796:21:1::0;17853:2;17833:18;;;17826:30;17892:19;17872:18;;;17865:47;17929:18;;18256:45:0::1;17612:341:1::0;18256:45:0::1;5726:4;18320:6;:21;;;;:65;;;;;5776:4;18362:7;:23;;;;18320:65;:117;;;;;5830:4;18406:11;:31;;;;18320:117;18312:170;;;::::0;-1:-1:-1;;;18312:170:0;;18160:2:1;18312:170:0::1;::::0;::::1;18142:21:1::0;18199:2;18179:18;;;18172:30;18238:25;18218:18;;;18211:53;18281:18;;18312:170:0::1;17958:347:1::0;18312:170:0::1;5883:4;18501:16;18510:7:::0;18501:6;:16:::1;:::i;:::-;:35;;;;18493:80;;;::::0;-1:-1:-1;;;18493:80:0;;18685:2:1;18493:80:0::1;::::0;::::1;18667:21:1::0;;;18704:18;;;18697:30;18763:34;18743:18;;;18736:62;18815:18;;18493:80:0::1;18483:356:1::0;18493:80:0::1;18584:9;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;18620:27:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;18658:35:0::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;18157:544::o;17688:110::-;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;17757:11:::1;::::0;:33:::1;::::0;-1:-1:-1;;;17757:33:0;;-1:-1:-1;;;;;178:55:1;;;17757:33:0::1;::::0;::::1;160:74:1::0;17757:11:0;;;::::1;::::0;;::::1;::::0;:24:::1;::::0;133:18:1;;17757:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17688:110:::0;:::o;16810:140::-;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;-1:-1:-1;;;;;16902:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;16902:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16810:140::o;18709:888::-;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;19079:10:::1;19058:7;:18;;;:31;;;;;;;;;;;;;;;;;;19120:9;19100:7;:17;;;:29;;;;;;;;;;;;;;;;;;19160:9;19140:7;:17;;;:29;;;;;;;;;;;;;;;;;;19202:11;19180:7;:19;;;:33;;;;;;;;;;;;;;;;;;19242:7;19224;:15;;;:25;;;;;;;;;;;;;;;;;;19278:7;19260;:15;;;:25;;;;;;;;;;;;;;;;;;19311:4;19296:7;:12;;;:19;;;;;;;;;;;;;;;;;;19394:7;19384;19370:11;19358:9;19346;:21;;;;:::i;:::-;:35;;;;:::i;:::-;:45;;;;:::i;:::-;:55;;;;:::i;:::-;19326:7;:75:::0;;-1:-1:-1;;19326:75:0::1;-1:-1:-1::0;;;19326:75:0::1;::::0;;::::1;;;::::0;;19447:9:::1;:17:::0;-1:-1:-1;;19428:36:0::1;::::0;19447:17;;::::1;::::0;::::1;::::0;19428:16:::1;:36;:::i;:::-;19524:7;:12:::0;19412:52:::1;::::0;;::::1;::::0;-1:-1:-1;19412:52:0;;-1:-1:-1;;;19524:12:0;::::1;::::0;::::1;::::0;19483:38:::1;::::0;19503:18;;::::1;::::0;-1:-1:-1;;;19483:17:0;::::1;;:38;:::i;:::-;:53;;;;:::i;:::-;:62;;;;19475:114;;;::::0;-1:-1:-1;;;19475:114:0;;19046:2:1;19475:114:0::1;::::0;::::1;19028:21:1::0;19085:2;19065:18;;;19058:30;19124:34;19104:18;;;19097:62;-1:-1:-1;;;19175:18:1;;;19168:37;19222:19;;19475:114:0::1;18844:403:1::0;19475:114:0::1;19047:550;18709:888:::0;;;;;;;:::o;12567:221::-;12645:16;;-1:-1:-1;;;;;12645:16:0;12631:10;:30;12623:83;;;;-1:-1:-1;;;12623:83:0;;19454:2:1;12623:83:0;;;19436:21:1;19493:2;19473:18;;;19466:30;19532:34;19512:18;;;19505:62;-1:-1:-1;;;19583:18:1;;;19576:38;19631:19;;12623:83:0;19252:404:1;12623:83:0;12717:23;12737:1;12717:11;:23::i;:::-;12751:16;:29;;-1:-1:-1;;;;;;12751:29:0;;;12567:221::o;20517:189::-;20646:6;;20608:7;;5930:5;;20656:21;;20636:17;;-1:-1:-1;;;;;20646:6:0;20636:9;:17::i;:::-;:41;;;;:::i;:::-;20635:62;;;;:::i;21421:217::-;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;21551:3:::1;21525:22;:29;;21517:64;;;::::0;-1:-1:-1;;;21517:64:0;;19863:2:1;21517:64:0::1;::::0;::::1;19845:21:1::0;19902:2;19882:18;;;19875:30;19941:24;19921:18;;;19914:52;19983:18;;21517:64:0::1;19661:346:1::0;21517:64:0::1;21592:13;:38:::0;21421:217::o;10959:654::-;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;-1:-1:-1;;;;;11038:22:0;::::1;11030:96;;;::::0;-1:-1:-1;;;11030:96:0;;20214:2:1;11030:96:0::1;::::0;::::1;20196:21:1::0;20253:2;20233:18;;;20226:30;20292:34;20272:18;;;20265:62;20363:31;20343:18;;;20336:59;20412:19;;11030:96:0::1;20012:425:1::0;11030:96:0::1;-1:-1:-1::0;;;;;;;11145:16:0;::::1;::::0;11137:90:::1;;;::::0;-1:-1:-1;;;11137:90:0;;20214:2:1;11137:90:0::1;::::0;::::1;20196:21:1::0;20253:2;20233:18;;;20226:30;20292:34;20272:18;;;20265:62;20363:31;20343:18;;;20336:59;20412:19;;11137:90:0::1;20012:425:1::0;11137:90:0::1;11258:6;::::0;11238:34:::1;::::0;11258:6:::1;::::0;::::1;-1:-1:-1::0;;;;;11258:6:0::1;11266:5;11238:19;:34::i;:::-;11283:35;11303:8;11313:4;11283:19;:35::i;:::-;11353:6;::::0;11363:1:::1;::::0;11343:17:::1;::::0;11353:6:::1;::::0;::::1;-1:-1:-1::0;;;;;11353:6:0::1;11343:9;:17::i;:::-;:21;11339:127;;;11398:6;::::0;11381:73:::1;::::0;11398:6:::1;::::0;::::1;-1:-1:-1::0;;;;;11398:6:0::1;11406:8:::0;11416:17:::1;11398:6:::0;11416:9:::1;:17::i;11381:73::-;;11339:127;11505:6;::::0;;-1:-1:-1;;;;;11522:17:0;;::::1;11505:6;11522:17:::0;;::::1;-1:-1:-1::0;;;;;;11522:17:0;::::1;;::::0;;;11555:40:::1;::::0;11505:6;;;::::1;;::::0;;;11555:40:::1;::::0;11486:16:::1;::::0;11555:40:::1;11019:594;10959:654:::0;:::o;17093:134::-;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;-1:-1:-1;;;;;17181:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;17181:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17093:134::o;16440:222::-;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;16524:14:::1;::::0;::::1;;16523:15;16515:24;;;::::0;::::1;;16581:4;-1:-1:-1::0;;;;;16558:28:0;::::1;::::0;16550:55:::1;;;::::0;-1:-1:-1;;;16550:55:0;;20644:2:1;16550:55:0::1;::::0;::::1;20626:21:1::0;20683:2;20663:18;;;20656:30;20722:16;20702:18;;;20695:44;20756:18;;16550:55:0::1;20442:338:1::0;16550:55:0::1;16616:11;:38:::0;;-1:-1:-1;;;;;16616:38:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;16616:38:0;;::::1;::::0;;;::::1;::::0;;16440:222::o;13817:198::-;-1:-1:-1;;;;;13907:20:0;;13883:7;13907:20;;;:11;:20;;;;;;;;13903:49;;;-1:-1:-1;;;;;;13936:16:0;;;;;:7;:16;;;;;;;13817:198::o;13903:49::-;-1:-1:-1;;;;;13990:16:0;;:7;:16;;;;;;;;;;;13970:37;;:19;:37::i;11621:225::-;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;11700:6:::1;::::0;11680:34:::1;::::0;11700:6:::1;::::0;::::1;-1:-1:-1::0;;;;;11700:6:0::1;11708:5;11680:19;:34::i;:::-;11744:6;::::0;;-1:-1:-1;;;;;;11761:19:0;::::1;::::0;;;11796:42:::1;::::0;11744:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;11744:6:0::1;::::0;-1:-1:-1;;11744:6:0;;11796:42:::1;::::0;-1:-1:-1;;11796:42:0::1;11669:177;11621:225::o:0;8412:1785::-;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;8559:19:::1;::::0;::::1;;8558:20;8550:34;;;::::0;-1:-1:-1;;;8550:34:0;;20987:2:1;8550:34:0::1;::::0;::::1;20969:21:1::0;21026:1;21006:18;;;20999:29;-1:-1:-1;;;21044:18:1;;;21037:31;21085:18;;8550:34:0::1;20785:324:1::0;8550:34:0::1;8627:1;8603:21;:25;:42;;;;8644:1;8632:9;:13;8603:42;8595:78;;;::::0;-1:-1:-1;;;8595:78:0;;21316:2:1;8595:78:0::1;::::0;::::1;21298:21:1::0;21355:2;21335:18;;;21328:30;21394:25;21374:18;;;21367:53;21437:18;;8595:78:0::1;21114:347:1::0;8595:78:0::1;8684:11;:39:::0;;-1:-1:-1;;;;;;8684:39:0::1;::::0;-1:-1:-1;;;;;8684:39:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;8738:35:::1;::::0;-1:-1:-1;;;8738:35:0;;8767:4:::1;8738:35;::::0;::::1;160:74:1::0;8738:11:0;::::1;;::::0;:20:::1;::::0;133:18:1;;8738:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;8734:51:::0;8799:11:::1;;;;;;;;;-1:-1:-1::0;;;;;8799:11:0::1;-1:-1:-1::0;;;;;8799:27:0::1;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;8799:29:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;8795:456;;9228:11;::::0;-1:-1:-1;;;9228:11:0;;22962:2:1;9228:11:0::1;::::0;::::1;22944:21:1::0;23001:1;22981:18;;;22974:29;-1:-1:-1;;;23019:18:1;;;23012:31;23060:18;;9228:11:0::1;22760:324:1::0;8795:456:0::1;8951:5;:16;8959:8:::0;8951:5;:16:::1;:::i;:::-;-1:-1:-1::0;8982:7:0::1;:20;8992:10:::0;8982:7;:20:::1;:::i;:::-;-1:-1:-1::0;9017:14:0::1;:35:::0;;;9067:9:::1;:24:::0;;-1:-1:-1;;9067:24:0::1;;::::0;::::1;::::0;;::::1;::::0;;;9133:13:::1;::::0;:2:::1;:13;:::i;:::-;9116:14;;:30;;;;:::i;:::-;9106:7;:40:::0;;;9179:13:::1;::::0;-1:-1:-1;;9179:13:0::1;:::i;:::-;9172:21;::::0;-1:-1:-1;;9172:21:0::1;:::i;:::-;9161:7;:33:::0;-1:-1:-1;;;;9281:9:0::1;;;;;;;;;-1:-1:-1::0;;;;;9281:9:0::1;-1:-1:-1::0;;;;;9281:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9270:42:0::1;;9313:9;;;;;;;;;-1:-1:-1::0;;;;;9313:9:0::1;-1:-1:-1::0;;;;;9313:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9270:75;::::0;-1:-1:-1;;;;;;9270:75:0::1;::::0;;;;;;-1:-1:-1;;;;;25919:15:1;;;9270:75:0::1;::::0;::::1;25901:34:1::0;9339:4:0::1;25951:18:1::0;;;25944:43;25813:18;;9270:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9261:6;:84:::0;;-1:-1:-1;;;;;;9261:84:0::1;-1:-1:-1::0;;;;;9261:84:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;9356:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;9356:22:0;;::::1;-1:-1:-1::0;9356:22:0;;::::1;::::0;;;9389:19:::1;:26:::0;;;;::::1;::::0;;::::1;::::0;;9444:7:::1;::::0;9459:3:::1;::::0;9444:11:::1;::::0;9454:1:::1;9444:11;:::i;:::-;9443:19;;;;:::i;:::-;9426:14;:36:::0;9493:7:::1;::::0;9483:6:::1;::::0;;-1:-1:-1;;;;;9483:6:0::1;::::0;;;::::1;::::0;::::1;9475:7;:15:::0;;;::::1;::::0;;;;;;;:25;;;;9537:6;;9545:7:::1;::::0;9516:37;;9537:6;;::::1;;::::0;9516:37:::1;::::0;::::1;::::0;391:25:1;;379:2;364:18;;245:177;9516:37:0::1;;;;;;;;9598:9;::::0;9566:62:::1;::::0;9583:4:::1;::::0;9598:9:::1;::::0;::::1;-1:-1:-1::0;;;;;9598:9:0::1;-1:-1:-1::0;;9566:8:0::1;:62::i;:::-;9648:6;::::0;9664:9:::1;::::0;9639:55:::1;::::0;-1:-1:-1;;;;;9648:6:0::1;::::0;;;::::1;::::0;::::1;::::0;9664:9;;;::::1;;-1:-1:-1::0;;9639:8:0::1;:55::i;:::-;9705:84;9722:6;;;;;;;;;-1:-1:-1::0;;;;;9722:6:0::1;9730:7;9761;9750;9740;;:17;;;;:::i;:::-;9739:29;;;;:::i;9705:84::-;-1:-1:-1::0;9817:6:0::1;::::0;9800:78:::1;::::0;9817:6:::1;::::0;::::1;-1:-1:-1::0;;;;;9817:6:0::1;9833:4;9840:17;9817:6:::0;9840:9:::1;:17::i;9800:78::-;-1:-1:-1::0;9891:9:0::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;9891:9:0::1;:25;9924:21;9969:4;9989:24;9969:4:::0;9989:9:::1;:24::i;:::-;10114:6;::::0;9891:270:::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;;9891:270:0;;;-1:-1:-1;;;;;26380:15:1;;;9891:270:0::1;::::0;::::1;26362:34:1::0;26412:18;;;26405:34;;;;10028:1:0::1;26455:18:1::0;;;26448:34;;;26498:18;;;26491:34;10114:6:0::1;::::0;::::1;::::0;;::::1;26541:19:1::0;;;26534:44;10135:15:0::1;26594:19:1::0;;;26587:35;26273:19;;9891:270:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;10174:15;:13;:15::i;:::-;8412:1785:::0;;;;:::o;17967:182::-;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;18120:14:::1;:21:::0;;-1:-1:-1;;18120:21:0::1;18137:4;18120:21;::::0;;17967:182::o;15868:564::-;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;15950:7:::1;15945:480;;-1:-1:-1::0;;;;;15974:13:0;;::::1;15990:5;15974:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;15974:21:0::1;::::0;;16010:11:::1;::::0;:34;;-1:-1:-1;;;16010:34:0;;::::1;::::0;::::1;27112:74:1::0;;;;27202:18;;;27195:50;;;;16010:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;27085:18:1;;16010:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;15945:480;16081:17;::::0;:22;16077:135:::1;;16170:6;16150:17;;16132:15;:35;;;;:::i;:::-;:44;16124:72;;;::::0;-1:-1:-1;;;16124:72:0;;27458:2:1;16124:72:0::1;::::0;::::1;27440:21:1::0;27497:2;27477:18;;;27470:30;27536:17;27516:18;;;27509:45;27571:18;;16124:72:0::1;27256:339:1::0;16124:72:0::1;-1:-1:-1::0;;;;;16235:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;;::::1;;16234:14;16226:54;;;::::0;-1:-1:-1;;;16226:54:0;;27802:2:1;16226:54:0::1;::::0;::::1;27784:21:1::0;27841:2;27821:18;;;27814:30;27880:29;27860:18;;;27853:57;27927:18;;16226:54:0::1;27600:351:1::0;16226:54:0::1;-1:-1:-1::0;;;;;16295:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;16295:20:0::1;16311:4;16295:20:::0;;::::1;::::0;;;16350:15:::1;16330:17;:35:::0;16380:11:::1;::::0;:33;;-1:-1:-1;;;16380:33:0;;::::1;::::0;::::1;27112:74:1::0;;;;27202:18;;;27195:50;16380:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;27085:18:1;;16380:33:0::1;26944:307:1::0;19605:510:0;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;-1:-1:-1;;;;;19769:23:0;::::1;::::0;;::::1;::::0;:52:::1;;-1:-1:-1::0;;;;;;19796:25:0;::::1;::::0;::::1;19769:52;:77;;;;-1:-1:-1::0;;;;;;19825:21:0;::::1;::::0;::::1;19769:77;:102;;;;-1:-1:-1::0;;;;;;19850:21:0;::::1;::::0;::::1;19769:102;19761:138;;;::::0;-1:-1:-1;;;19761:138:0;;28158:2:1;19761:138:0::1;::::0;::::1;28140:21:1::0;28197:2;28177:18;;;28170:30;28236:25;28216:18;;;28209:53;28279:18;;19761:138:0::1;27956:347:1::0;19761:138:0::1;19910:11;:42:::0;;-1:-1:-1;;;;;19910:42:0;;::::1;-1:-1:-1::0;;;;;;19910:42:0;;::::1;;::::0;;;19963:23;:46;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;20020:19;:38;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;20069:19;:38;;;;;::::1;::::0;::::1;;::::0;;19605:510::o;14683:175::-;10813:6;;14749:4;;10813:6;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;14798:9:::1;::::0;14766:62:::1;::::0;14783:4:::1;::::0;14798:9:::1;::::0;::::1;-1:-1:-1::0;;;;;14798:9:0::1;-1:-1:-1::0;;14766:8:0::1;:62::i;:::-;-1:-1:-1::0;14846:4:0::1;14683:175:::0;:::o;27377:593::-;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;27439:14:::1;::::0;::::1;;27438:15;27430:52;;;::::0;-1:-1:-1;;;27430:52:0;;28510:2:1;27430:52:0::1;::::0;::::1;28492:21:1::0;28549:2;28529:18;;;28522:30;28588:26;28568:18;;;28561:54;28632:18;;27430:52:0::1;28308:348:1::0;27430:52:0::1;27501:16;::::0;::::1;::::0;::::1;;;27493:53;;;::::0;-1:-1:-1;;;27493:53:0;;28863:2:1;27493:53:0::1;::::0;::::1;28845:21:1::0;28902:2;28882:18;;;28875:30;28941:26;28921:18;;;28914:54;28985:18;;27493:53:0::1;28661:348:1::0;27493:53:0::1;27569:11;::::0;;;::::1;-1:-1:-1::0;;;;;27569:11:0::1;27557:106;;27611:11;:40:::0;;-1:-1:-1;;;;;;27611:40:0::1;27645:4;27611:40:::0;::::1;;::::0;;27557:106:::1;27677:11;::::0;27699:6:::1;::::0;27754:9:::1;::::0;27677:87:::1;::::0;-1:-1:-1;;;27677:87:0;;-1:-1:-1;;;;;27699:6:0;;::::1;27677:87;::::0;::::1;29237:74:1::0;29359:10;27714:12:0::1;29347:23:1::0;29327:18;;;29320:51;29419:18;27736:15:0::1;29407:31:1::0;29387:18;;;29380:59;27754:9:0::1;::::0;;::::1;29455:18:1::0;;;29448:45;27677:11:0;;;::::1;;::::0;:21:::1;::::0;29209:19:1;;27677:87:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;27673:103:::0;27786:14:::1;:21:::0;;-1:-1:-1;;27786:21:0::1;27803:4;27786:21;::::0;;27845:6:::1;::::0;27861:5:::1;::::0;27835:17:::1;::::0;-1:-1:-1;;;;;27845:6:0::1;27835:9;:17::i;:::-;:22;::::0;27855:2:::1;27835:22;:::i;:::-;27834:32;;;;:::i;:::-;27818:13;:48:::0;27901:6:::1;::::0;27917:5:::1;::::0;27891:17:::1;::::0;-1:-1:-1;;;;;27901:6:0::1;27891:9;:17::i;:::-;:22;::::0;27911:2:::1;27891:22;:::i;:::-;27890:32;;;;:::i;:::-;27877:10;:45:::0;27947:15:::1;27933:11;:29:::0;27377:593::o;13417:84::-;13467:13;13491:7;13484:14;;;;;:::i;14023:165::-;14101:4;14118:40;14128:10;14140:9;14151:6;14118:9;:40::i;:::-;-1:-1:-1;14176:4:0;;14023:165;-1:-1:-1;;;14023:165:0:o;28168:248::-;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;28267:4:::1;-1:-1:-1::0;;;;;28250:22:0;::::1;::::0;28242:62:::1;;;::::0;-1:-1:-1;;;28242:62:0;;29706:2:1;28242:62:0::1;::::0;::::1;29688:21:1::0;29745:2;29725:18;;;29718:30;29784:29;29764:18;;;29757:57;29831:18;;28242:62:0::1;29504:351:1::0;28242:62:0::1;28369:6;::::0;28377:30:::1;::::0;-1:-1:-1;;;28377:30:0;;28401:4:::1;28377:30;::::0;::::1;160:74:1::0;28337:5:0;;-1:-1:-1;;;;;28354:14:0;;::::1;::::0;::::1;::::0;28369:6:::1;::::0;::::1;::::0;;::::1;::::0;28354:14;;28377:15:::1;::::0;133:18:1;;28377:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28354:54;::::0;-1:-1:-1;;;;;;28354:54:0::1;::::0;;;;;;-1:-1:-1;;;;;30241:55:1;;;28354:54:0::1;::::0;::::1;30223:74:1::0;30313:18;;;30306:34;30196:18;;28354:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12077:482::-:0;12159:16;;-1:-1:-1;;;;;12159:16:0;12145:10;:30;12137:83;;;;-1:-1:-1;;;12137:83:0;;19454:2:1;12137:83:0;;;19436:21:1;19493:2;19473:18;;;19466:30;19532:34;19512:18;;;19505:62;-1:-1:-1;;;19583:18:1;;;19576:38;19631:19;;12137:83:0;19252:404:1;12137:83:0;12253:8;;-1:-1:-1;;;;;12253:8:0;12276:25;;12272:150;;-1:-1:-1;;;;;12318:30:0;;12351:5;12318:30;;;:17;:30;;;;;:38;;-1:-1:-1;;12318:38:0;;;12371:39;;12336:11;;12371:19;:39::i;:::-;12432:8;:22;;-1:-1:-1;;;;;;12432:22:0;-1:-1:-1;;;;;12432:22:0;;;;;;;;-1:-1:-1;12465:30:0;;;:17;:30;;;;;:37;;-1:-1:-1;;12465:37:0;-1:-1:-1;12465:37:0;;;;;;12513:38;;12432:22;;12513:19;:38::i;21646:263::-;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;21755:19:::1;:33:::0;;-1:-1:-1;;21755:33:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;21799:22:::1;:47:::0;;-1:-1:-1;;21799:47:0::1;::::0;::::1;;;::::0;;21862:39:::1;::::0;2345:41:1;;;21862:39:0::1;::::0;2333:2:1;2318:18;21862:39:0::1;;;;;;;;21646:263:::0;;:::o;15180:680::-;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;15260:16:::1;::::0;::::1;::::0;::::1;;;15259:17;15251:60;;;::::0;-1:-1:-1;;;15251:60:0;;30803:2:1;15251:60:0::1;::::0;::::1;30785:21:1::0;30842:2;30822:18;;;30815:30;30881:32;30861:18;;;30854:60;30931:18;;15251:60:0::1;30601:354:1::0;15251:60:0::1;15322:20;15355:9;15322:43;;15376:16;15406:10;-1:-1:-1::0;;;;;15406:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15395:40:0::1;;15444:4;15451:10;-1:-1:-1::0;;;;;15451:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15395:74;::::0;-1:-1:-1;;;;;;15395:74:0::1;::::0;;;;;;-1:-1:-1;;;;;25919:15:1;;;15395:74:0::1;::::0;::::1;25901:34:1::0;25971:15;;25951:18;;;25944:43;25813:18;;15395:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15488:6;::::0;-1:-1:-1;;;;;15488:6:0;;::::1;15498:5;15480:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;15480:23:0::1;::::0;;15376:93;;-1:-1:-1;15518:22:0;::::1;15514:200;;15577:10;-1:-1:-1::0;;;;;15577:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15566:43:0::1;;15618:4;15625:10;-1:-1:-1::0;;;;;15625:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15566:77;::::0;-1:-1:-1;;;;;;15566:77:0::1;::::0;;;;;;-1:-1:-1;;;;;25919:15:1;;;15566:77:0::1;::::0;::::1;25901:34:1::0;25971:15;;25951:18;;;25944:43;25813:18;;15566:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15557:6;:86:::0;;-1:-1:-1;;;;;;15557:86:0::1;-1:-1:-1::0;;;;;15557:86:0;;;::::1;::::0;;;::::1;::::0;;15514:200:::1;;;15685:6;:17:::0;;-1:-1:-1;;;;;;15685:17:0::1;-1:-1:-1::0;;;;;15685:17:0;::::1;;::::0;;15514:200:::1;15724:9;:22:::0;;-1:-1:-1;;;;;;15724:22:0::1;;-1:-1:-1::0;;;;;15724:22:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;15765:6:::1;::::0;;::::1;-1:-1:-1::0;15757:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;15757:22:0::1;-1:-1:-1::0;15757:22:0::1;::::0;;15822:9;;15790:62:::1;::::0;15807:4:::1;::::0;15822:9;::::1;;-1:-1:-1::0;;15790:8:0::1;:62::i;27978:182::-:0;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;28045:16:::1;::::0;::::1;::::0;::::1;;;28044:17;28036:58;;;::::0;-1:-1:-1;;;28036:58:0;;31162:2:1;28036:58:0::1;::::0;::::1;31144:21:1::0;31201:2;31181:18;;;31174:30;31240;31220:18;;;31213:58;31288:18;;28036:58:0::1;30960:352:1::0;28036:58:0::1;28113:6;::::0;28105:47:::1;::::0;-1:-1:-1;;;;;28113:6:0::1;::::0;;::::1;::::0;;;::::1;::::0;28130:21:::1;28105:47:::0;::::1;;;::::0;::::1;::::0;;;28130:21;28113:6;28105:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27978:182::o:0;20714:699::-;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;20914:16:::1;20894;20884:7;;:26;;;;:::i;:::-;20883:47;;;;:::i;:::-;20867:13;:63:::0;20955:7:::1;::::0;20982:13;;20955:23:::1;::::0;20965:13;;20955:23:::1;:::i;:::-;20954:41;;;;:::i;:::-;20941:10;:54:::0;;;21014:13:::1;::::0;:27:::1;;21006:73;;;::::0;-1:-1:-1;;;21006:73:0;;31519:2:1;21006:73:0::1;::::0;::::1;31501:21:1::0;31558:2;31538:18;;;31531:30;31597:34;31577:18;;;31570:62;-1:-1:-1;;;31648:18:1;;;31641:31;31689:19;;21006:73:0::1;31317:397:1::0;21006:73:0::1;21123:6;::::0;5930:5:::1;::::0;21113:17:::1;::::0;-1:-1:-1;;;;;21123:6:0::1;21113:9;:17::i;:::-;:23;::::0;21133:3:::1;21113:23;:::i;:::-;21112:44;;;;:::i;:::-;21098:10;;:58;;21090:106;;;::::0;-1:-1:-1;;;21090:106:0;;31921:2:1;21090:106:0::1;::::0;::::1;31903:21:1::0;31960:2;31940:18;;;31933:30;31999:34;31979:18;;;31972:62;-1:-1:-1;;;32050:18:1;;;32043:33;32093:19;;21090:106:0::1;31719:399:1::0;21090:106:0::1;21239:9;21229:7;;:19;;;;:::i;:::-;21215:10;;:33;;21207:92;;;::::0;-1:-1:-1;;;21207:92:0;;32325:2:1;21207:92:0::1;::::0;::::1;32307:21:1::0;32364:2;32344:18;;;32337:30;32403:34;32383:18;;;32376:62;-1:-1:-1;;;32454:18:1;;;32447:44;32508:19;;21207:92:0::1;32123:410:1::0;21207:92:0::1;21345:9;21335:7;;:19;;;;:::i;:::-;21318:13;;:36;;21310:95;;;::::0;-1:-1:-1;;;21310:95:0;;32325:2:1;21310:95:0::1;::::0;::::1;32307:21:1::0;32364:2;32344:18;;;32337:30;32403:34;32383:18;;;32376:62;-1:-1:-1;;;32454:18:1;;;32447:44;32508:19;;21310:95:0::1;32123:410:1::0;17383:148:0;10813:6;;;;;-1:-1:-1;;;;;10813:6:0;10823:10;10813:20;10805:50;;;;-1:-1:-1;;;10805:50:0;;11757:2:1;10805:50:0;;;11739:21:1;11796:2;11776:18;;;11769:30;-1:-1:-1;;;;;;;;;;;11815:18:1;;;11808:47;11872:18;;10805:50:0;11555:341:1;10805:50:0;-1:-1:-1;;;;;17479:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;17479:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17383:148::o;14365:310::-;-1:-1:-1;;;;;14460:20:0;;14452:52;;;;-1:-1:-1;;;14452:52:0;;32740:2:1;14452:52:0;;;32722:21:1;32779:2;32759:18;;;32752:30;-1:-1:-1;;;32798:18:1;;;32791:49;32857:18;;14452:52:0;32538:343:1;14452:52:0;-1:-1:-1;;;;;14523:21:0;;14515:53;;;;-1:-1:-1;;;14515:53:0;;32740:2:1;14515:53:0;;;32722:21:1;32779:2;32759:18;;;32752:30;-1:-1:-1;;;32798:18:1;;;32791:49;32857:18;;14515:53:0;32538:343:1;14515:53:0;-1:-1:-1;;;;;14581:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;14634:33;;391:25:1;;;14634:33:0;;364:18:1;14634:33:0;;;;;;;14365:310;;;:::o;34542:1155::-;34621:7;;34656;;34760:6;;-1:-1:-1;;;;;34760:6:0;34584:7;34748:19;;;:11;:19;;;;;;34584:7;;34621;34656;34621;;34656;;34748:19;;34744:437;;;34811:6;;-1:-1:-1;;;;;34811:6:0;;;34784:16;34803:15;;;;;;;;;;;;34811:6;34852:15;;;;;;;34893:11;;34803:15;;34852;;34893:11;;;;34917:4;34885:37;:119;;;;;34945:13;34962:2;34945:19;:58;;;;34985:13;35002:1;34985:18;34945:58;34882:137;;;35008:8;;;34882:137;35048:7;35037:8;:18;:40;;;;35070:7;35059:8;:18;35037:40;35033:68;;;35086:15;35095:6;35086;:15;:::i;:::-;35079:22;;;;;;;;34542:1155;:::o;35033:68::-;35116:19;35127:8;35116:19;;:::i;:::-;;-1:-1:-1;35150:19:0;35161:8;35150:19;;:::i;:::-;;;34769:412;;34744:437;35195:9;:16;:20;35191:400;;35237:7;35232:348;35254:9;:16;35250:20;;;;35232:348;;;35296:14;35313:7;:21;35321:9;35331:1;35321:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35321:12:0;35313:21;;;;;;;;;;;;;35378:9;:12;;35313:21;;-1:-1:-1;35321:12:0;;;;35378:9;:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35378:12:0;35370:21;;;;;;;;;;;;;;-1:-1:-1;35414:16:0;;;;:36;;;35443:7;35434:6;:16;35414:36;35410:64;;;35459:15;35468:6;35459;:15;:::i;:::-;35452:22;;;;;;;;;34542:1155;:::o;35410:64::-;35503:16;35513:6;35503:7;:16;:::i;:::-;35493:26;-1:-1:-1;35548:16:0;35558:6;35548:7;:16;:::i;:::-;35538:26;;35277:303;;35272:3;;;;;:::i;:::-;;;;35232:348;;;;35191:400;35615:15;35624:6;35615;:15;:::i;:::-;35605:7;:25;35601:53;;;35639:15;35648:6;35639;:15;:::i;:::-;35632:22;;;;;;34542:1155;:::o;35601:53::-;35672:17;35682:7;35672;:17;:::i;22371:1930::-;22450:4;-1:-1:-1;;;;;22475:18:0;;22467:68;;;;-1:-1:-1;;;22467:68:0;;33268:2:1;22467:68:0;;;33250:21:1;33307:2;33287:18;;;33280:30;33346:34;33326:18;;;33319:62;-1:-1:-1;;;33397:18:1;;;33390:35;33442:19;;22467:68:0;33066:401:1;22467:68:0;-1:-1:-1;;;;;22554:16:0;;22546:64;;;;-1:-1:-1;;;22546:64:0;;33674:2:1;22546:64:0;;;33656:21:1;33713:2;33693:18;;;33686:30;33752:34;33732:18;;;33725:62;-1:-1:-1;;;33803:18:1;;;33796:33;33846:19;;22546:64:0;33472:399:1;22546:64:0;22638:1;22629:6;:10;22621:64;;;;-1:-1:-1;;;22621:64:0;;34078:2:1;22621:64:0;;;34060:21:1;34117:2;34097:18;;;34090:30;34156:34;34136:18;;;34129:62;-1:-1:-1;;;34207:18:1;;;34200:39;34256:19;;22621:64:0;33876:405:1;22621:64:0;-1:-1:-1;;;;;22784:13:0;;22696:8;22784:13;;;:7;:13;;;;;;22696:8;;;;22784:13;;22780:162;;;22820:4;22814:10;;22780:162;;;-1:-1:-1;;;;;22846:11:0;;;;;;:7;:11;;;;;;;;22842:100;;;22881:4;22874:11;;22842:100;;;-1:-1:-1;22926:4:0;22842:100;22956:20;22967:4;22973:2;22956:10;:20::i;:::-;22952:628;;;22997:14;;;;22993:319;;23037:5;23032:265;;23067:34;;-1:-1:-1;;;23067:34:0;;34488:2:1;23067:34:0;;;34470:21:1;34527:2;34507:18;;;34500:30;34566:26;34546:18;;;34539:54;34610:18;;23067:34:0;34286:348:1;23032:265:0;-1:-1:-1;;;;;23132:31:0;;;;;;:25;:31;;;;;;;;23131:32;:66;;;;-1:-1:-1;;;;;;23168:29:0;;;;;;:25;:29;;;;;;;;23167:30;23131:66;23127:170;;;23222:55;;-1:-1:-1;;;23222:55:0;;34841:2:1;23222:55:0;;;34823:21:1;34880:2;34860:18;;;34853:30;34919:34;34899:18;;;34892:62;-1:-1:-1;;;34970:18:1;;;34963:43;35023:19;;23222:55:0;34639:409:1;23127:170:0;23344:9;;-1:-1:-1;;;;;23330:24:0;;;23344:9;;;;;23330:24;;;;:33;;;23359:4;23358:5;23330:33;23326:243;;;-1:-1:-1;;;;;23389:25:0;;;;;;:21;:25;;;;;;;;23384:170;;23473:14;;23463:6;23447:13;23457:2;23447:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;23439:95;;;;-1:-1:-1;;;23439:95:0;;35255:2:1;23439:95:0;;;35237:21:1;35294:2;35274:18;;;35267:30;35333:34;35313:18;;;35306:62;-1:-1:-1;;;35384:18:1;;;35377:40;35434:19;;23439:95:0;35053:406:1;23439:95:0;23596:4;23592:632;;;23622:6;;;;23617:596;;23653:19;;;;;;;23649:549;;;23697:28;23728:24;23746:4;23728:9;:24::i;:::-;23697:55;;23803:13;;23779:20;:37;23775:404;;23863:10;;23904:22;;;;23900:97;;;23961:13;;23951:6;;5930:5;;23961:13;23941:17;;-1:-1:-1;;;;;23951:6:0;23941:9;:17::i;:::-;:33;;;;:::i;:::-;23940:54;;;;:::i;:::-;23930:64;;23900:97;24051:7;24027:20;:31;24023:72;;24085:7;24062:30;;24023:72;24121:34;24134:20;24121:12;:34::i;:::-;23818:361;23775:404;23674:524;23649:549;24241:52;24258:4;24264:2;24268:6;24276:3;24281:4;24287:5;24241:16;:52::i;:::-;24234:59;22371:1930;-1:-1:-1;;;;;;;22371:1930:0:o;31052:1191::-;-1:-1:-1;;;;;31223:25:0;;31172:4;31223:25;;;:19;:25;;;;;;31204:4;;31223:25;;;:52;;-1:-1:-1;;;;;;31252:23:0;;;;;;:19;:23;;;;;;;;31223:52;31219:99;;;-1:-1:-1;31301:5:0;31219:99;31330:25;31358:55;31368:4;31374:2;31378:7;31387;31396:3;31401:4;31407:5;31358:9;:55::i;:::-;31458:14;;;;-1:-1:-1;;;;;31442:13:0;;:7;:13;;;;;;;;;;;31330:83;;-1:-1:-1;31442:30:0;;;:::i;:::-;-1:-1:-1;;;;;31426:13:0;;;:7;:13;;;;;;;;;;;:46;;;;31511:22;;;;31497:11;;;;;;;;;;:36;;31511:22;31497:36;:::i;:::-;-1:-1:-1;;;;;31483:11:0;;;:7;:11;;;;;;;;;;;:50;;;;31550:17;;;;;:11;:17;;;;;;;31546:89;;;-1:-1:-1;;;;;31600:13:0;;;;;;:7;:13;;;;;;:23;;31616:7;;31600:23;:::i;:::-;-1:-1:-1;;;;;31584:13:0;;;;;;:7;:13;;;;;:39;31546:89;-1:-1:-1;;;;;31649:15:0;;;;;;:11;:15;;;;;;;;31645:100;;;31709:22;;-1:-1:-1;;;;;31695:11:0;;31709:22;31695:11;;;:7;:11;;;;;;:36;;31709:22;31695:36;:::i;:::-;-1:-1:-1;;;;;31681:11:0;;;;;;:7;:11;;;;;:50;31645:100;31775:1;31761:6;:11;;;:15;:34;;;;31794:1;31780:6;:11;;;:15;31761:34;31757:89;;;31823:6;:11;;;31812:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;31757:89:0;31876:2;-1:-1:-1;;;;;31861:42:0;31870:4;-1:-1:-1;;;;;31861:42:0;;31880:6;:22;;;31861:42;;;;391:25:1;;379:2;364:18;;245:177;31861:42:0;;;;;;;;31919:16;;;;;;;31914:298;;31952:28;31971:4;31977:2;31952:18;:28::i;:::-;32000:16;;;;;;;31999:17;:41;;;;;32020:20;32031:4;32037:2;32020:10;:20::i;:::-;31999:77;;;;-1:-1:-1;;;;;;32045:31:0;;;;;;:25;:31;;;;;;;;32044:32;31999:77;:111;;;;-1:-1:-1;;;;;;32081:29:0;;;;;;:25;:29;;;;;;;;32080:30;31999:111;:121;;;;;32115:5;32114:6;31999:121;31995:206;;;32141:44;;-1:-1:-1;;;32141:44:0;;35666:2:1;32141:44:0;;;35648:21:1;35705:2;35685:18;;;35678:30;35744:34;35724:18;;;35717:62;-1:-1:-1;;;35795:18:1;;;35788:32;35837:19;;32141:44:0;35464:398:1;31995:206:0;-1:-1:-1;32231:4:0;;31052:1191;-1:-1:-1;;;;;;;;31052:1191:0:o;21917:446::-;22018:6;;21986:4;;-1:-1:-1;;;;;22010:14:0;;;22018:6;;;;;22010:14;;;;:43;;-1:-1:-1;22047:6:0;;-1:-1:-1;;;;;22041:12:0;;;22047:6;;;;;22041:12;;22010:43;:79;;;;-1:-1:-1;22083:6:0;;;;;-1:-1:-1;;;;;22083:6:0;22070:9;:19;;22010:79;:118;;;;-1:-1:-1;;;;;;22107:21:0;;;;;;:17;:21;;;;;;;;22106:22;22010:118;:159;;;;-1:-1:-1;;;;;;22146:23:0;;;;;;:17;:23;;;;;;;;22145:24;22010:159;:186;;;;-1:-1:-1;;;;;;22186:10:0;;6069:42;22186:10;;22010:186;:219;;;;-1:-1:-1;;;;;;22213:16:0;;;;22010:219;:257;;;;-1:-1:-1;;;;;;22246:21:0;;22262:4;22246:21;;22010:257;:302;;;;-1:-1:-1;22300:11:0;;-1:-1:-1;;;;;22284:28:0;;;22300:11;;;;;22284:28;;22010:302;:345;;;;-1:-1:-1;;22343:11:0;;;;;-1:-1:-1;;;;;22343:11:0;;;22329:26;;;;;22003:352;-1:-1:-1;21917:446:0:o;24309:2489::-;7212:6;:13;;-1:-1:-1;;7212:13:0;7221:4;7212:13;;;24392:30:::1;::::0;;7212:13;24392:30;::::1;::::0;;24415:7:::1;24392:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24392:30:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24392:30:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24392:30:0;::::1;::::0;;::::1;::::0;;;;;;7212:6;24437:21;24433:60:::1;;24475:7;;;24433:60;24529:4;24509:26;::::0;;;:11:::1;:26;::::0;;;;;;;24544:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;24544:9:0::1;24509:46:::0;;;;;;;;-1:-1:-1;;24509:67:0::1;24505:166;;24613:4;24593:26;::::0;;;:11:::1;:26;::::0;;;;;;;24628:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;24628:9:0::1;24593:46:::0;;;;;;;-1:-1:-1;;24593:66:0;;24505:166:::1;24683:17;24768:1;24748:6;:16;;;24704:60;;24728:6;:16;;;24705:39;;:20;:39;;;;:::i;:::-;24704:60;;;;:::i;:::-;24703:66;;;;:::i;:::-;24683:86:::0;-1:-1:-1;24780:15:0::1;24798:32;24683:86:::0;24798:20;:32:::1;:::i;:::-;24875:16;::::0;;24889:1:::1;24875:16:::0;;;;;::::1;::::0;;24780:50;;-1:-1:-1;24851:21:0::1;::::0;24875:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24875:16:0::1;24851:40;;24920:4;24902;24907:1;24902:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;24902:23:0::1;;;-1:-1:-1::0;;;;;24902:23:0::1;;;::::0;::::1;24946:9;;;;;;;;;-1:-1:-1::0;;;;;24946:9:0::1;-1:-1:-1::0;;;;;24946:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24936:4;24941:1;24936:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24936:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;24979:9:::1;::::0;:186:::1;::::0;-1:-1:-1;;;24979:186:0;;:9:::1;::::0;;::::1;::::0;;::::1;::::0;:60:::1;::::0;:186:::1;::::0;25054:7;;25076:1:::1;::::0;25092:4;;25119::::1;::::0;25139:15:::1;::::0;24979:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;24975:233;;25190:7;;;;;;24975:233;25241:21;25220:18;25327:7:::0;25301:22:::1;25314:9:::0;25241:21;25301:22:::1;:::i;:::-;25300:34;;;;:::i;:::-;25273:61:::0;-1:-1:-1;25351:13:0;;25347:400:::1;;25385:9;::::0;:222:::1;::::0;-1:-1:-1;;;25385:222:0;;25462:4:::1;25385:222;::::0;::::1;26362:34:1::0;26412:18;;;26405:34;;;25514:1:0::1;26455:18:1::0;;;26448:34;;;26498:18;;;26491:34;6069:42:0::1;26541:19:1::0;;;26534:44;25577:15:0::1;26594:19:1::0;;;26587:35;25385:9:0::1;::::0;;::::1;-1:-1:-1::0;;;;;25385:9:0::1;::::0;:25:::1;::::0;25418:16;;26273:19:1;;25385:222:0::1;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;25385:222:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;25385:222:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;25381:355;;25714:7;;;;;;;;25381:355;-1:-1:-1::0;;25632:40:0::1;::::0;;37072:25:1;;;37128:2;37113:18;;37106:34;;;25632:40:0::1;::::0;-1:-1:-1;37045:18:1;25632:40:0::1;;;;;;;25381:355;25759:30;25773:16:::0;25759:30;::::1;:::i;:::-;;;25820:6;:16;;;25800:6;:16;;:36;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;25935:16:::1;::::0;::::1;::::0;25913:18:::1;::::0;::::1;::::0;25847:12:::1;::::0;-1:-1:-1;25847:12:0;;25899:52;;::::1;::::0;25900:31:::1;::::0;::::1;:10:::0;:31:::1;:::i;:::-;25899:52;;;;:::i;:::-;25870:81;;25962:22;26019:6;:16;;;25987:48;;26001:6;:14;;;25988:27;;:10;:27;;;;:::i;:::-;25987:48;;;;:::i;:::-;25962:73;;26046:22;26103:6;:16;;;26071:48;;26085:6;:14;;;26072:27;;:10;:27;;;;:::i;:::-;26071:48;;;;:::i;:::-;26046:73:::0;-1:-1:-1;26130:24:0::1;26046:73:::0;26171:35:::1;26192:14:::0;26171:18;:35:::1;:::i;:::-;:52;;;;:::i;:::-;26157:67;::::0;:10;:67:::1;:::i;:::-;26239:16;::::0;::::1;::::0;26130:94;;-1:-1:-1;26239:20:0::1;;::::0;26235:133:::1;;26289:11;:21:::0;:67:::1;::::0;-1:-1:-1;;;;;26289:21:0;;::::1;::::0;26346:5:::1;::::0;26323:16;;26289:67:::1;::::0;;;26323:16;26289:21;26346:5;26289:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;26276:80:0;;-1:-1:-1;;26235:133:0::1;26382:18;::::0;::::1;::::0;:22:::1;;::::0;26378:139:::1;;26434:23:::0;;:71:::1;::::0;-1:-1:-1;;;;;26434:23:0;;::::1;::::0;26495:5:::1;::::0;26470:18;;26434:71:::1;::::0;;;26470:18;26434:23;26495:5;26434:71:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;26421:84:0;;-1:-1:-1;;26378:139:0::1;26531:14;::::0;::::1;::::0;:18:::1;;::::0;26527:127:::1;;26579:19:::0;;:63:::1;::::0;-1:-1:-1;;;;;26579:19:0;;::::1;::::0;26632:5:::1;::::0;26611:14;;26579:63:::1;::::0;;;26611:14;26579:19;26632:5;26579:63:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;26566:76:0;;-1:-1:-1;;26527:127:0::1;26668:14;::::0;::::1;::::0;:18:::1;;::::0;26664:127:::1;;26716:19:::0;;:63:::1;::::0;-1:-1:-1;;;;;26716:19:0;;::::1;::::0;26769:5:::1;::::0;26748:14;;26716:63:::1;::::0;;;26748:14;26716:19;26769:5;26716:63:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;26703:76:0;;-1:-1:-1;;26664:127:0::1;24381:2417;;;;;;;;;;;7236:1;-1:-1:-1::0;7248:6:0;:14;;-1:-1:-1;;7248:14:0;;;24309:2489::o;32251:2283::-;32378:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32378:18:0;32409:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32409:25:0;32445:30;;;;;;;;32468:7;32445:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32445:30:0;;;;;;;;-1:-1:-1;;;32445:30:0;;;;;;;;-1:-1:-1;;;32445:30:0;;;;;;;;;32507:10;:8;:10::i;:::-;32486:18;;;:31;;;32547:28;;:7;:28;:::i;:::-;32530:14;;;:45;32643:11;;;;32623:17;;32604:16;;;;32588:13;;32643:11;32604:36;;;:::i;:::-;:50;;;;:::i;:::-;32588:66;;;;32669:5;32678:1;32669:10;32665:58;;32706:5;32696:15;;32665:58;32739:20;32750:4;32756:2;32739:10;:20::i;:::-;32735:229;;;32794:11;;:40;;-1:-1:-1;;;32794:40:0;;-1:-1:-1;;;;;37818:15:1;;;32794:40:0;;;37800:34:1;37870:15;;;37850:18;;;37843:43;37902:18;;;37895:34;;;32763:12:0;;32794:11;;;;;:21;;37712:18:1;;32794:40:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;32794:40:0;;;;;;;;-1:-1:-1;;32794:40:0;;;;;;;;;;;;:::i;:::-;;;32790:123;;32902:8;;;32790:123;32885:5;-1:-1:-1;32931:7:0;32927:26;;32942:8;;;32927:26;32761:203;32735:229;32980:7;32976:815;;;33004:18;33055:3;33051:229;;;-1:-1:-1;33092:9:0;:16;;;33051:229;;;33134:4;33130:150;;;-1:-1:-1;33172:9:0;:17;;;;;;33130:150;;;-1:-1:-1;33243:9:0;:21;;;;;;33130:150;33296:17;5930:5;33317:20;33327:10;33317:7;:20;:::i;:::-;33316:41;;;;:::i;:::-;33399:17;;33296:61;;-1:-1:-1;33420:5:0;;33387:29;;;;33296:61;33387:29;:::i;:::-;33386:39;;;;:::i;:::-;33372:11;;;:53;33468:11;;;;33483:5;;33456:23;;;;:9;:23;:::i;:::-;33455:33;;;;:::i;:::-;33440:12;;;:48;;;33531:11;;;;:26;;33440:48;33531:26;:::i;:::-;33518:40;;:9;:40;:::i;:::-;33503:12;;;:55;;;33638:12;;;;33609:11;;;;33638:12;;33609:26;;;:::i;:::-;:41;;;;:::i;:::-;33598:53;;:7;:53;:::i;:::-;33573:78;;33696:18;;;;33682:11;;;;:32;;33696:18;33682:32;:::i;:::-;33668:11;;;:46;-1:-1:-1;32976:815:0;;-1:-1:-1;32976:815:0;;33747:32;;;32976:815;33807:12;;;;:16;33803:290;;33881:6;:18;;;33866:6;:12;;;:33;;;;:::i;:::-;33856:4;33840:7;:22;;;;;;;;;;:59;;:22;;:7;:59;;;;;:::i;:::-;;;;-1:-1:-1;;33938:4:0;33918:26;;;;:11;:26;;;;;;;;33914:105;;;33991:12;;;;;33981:4;33965:22;;;;:7;:22;;;;;:38;;33991:12;;33965:22;;:38;;33991:12;;33965:38;:::i;:::-;;;;-1:-1:-1;;33914:105:0;34061:4;-1:-1:-1;;;;;34038:43:0;34047:4;-1:-1:-1;;;;;34038:43:0;;34068:6;:12;;;34038:43;;;;391:25:1;;379:2;364:18;;245:177;34038:43:0;;;;;;;;33803:290;34109:12;;;;:16;34105:254;;34174:6;:18;;;34159:6;:12;;;:33;;;;:::i;:::-;6069:42;34142:7;:13;;;;;;;;:50;;:13;;:7;:50;;;;;:::i;:::-;;;;-1:-1:-1;;6069:42:0;34211:17;;:11;:17;;;;;;34207:87;;;34266:12;;;;6069:42;34249:13;;;;:7;:13;;;:29;;:13;;;:29;;34266:12;;34249:29;:::i;:::-;;;;-1:-1:-1;;34207:87:0;6069:42;-1:-1:-1;;;;;34313:34:0;34322:4;-1:-1:-1;;;;;34313:34:0;;34334:6;:12;;;34313:34;;;;391:25:1;;379:2;364:18;;245:177;34313:34:0;;;;;;;;34105:254;34482:6;:18;;;34467:6;:12;;;:33;;;;:::i;:::-;34444:6;:18;;;34429:6;:12;;;:33;;;;:::i;:::-;34414:6;:11;;;:49;;;;:::i;:::-;:87;;;;:::i;:::-;34396:6;:14;;;:106;;;;:::i;:::-;34371:22;;;:131;-1:-1:-1;34371:22:0;;32251:2283;-1:-1:-1;;;;;;;;;32251:2283:0:o;26806:563::-;26889:16;;;;;;;26888:17;26880:65;;;;-1:-1:-1;;;26880:65:0;;38142:2:1;26880:65:0;;;38124:21:1;38181:2;38161:18;;;38154:30;38220:34;38200:18;;;38193:62;-1:-1:-1;;;38271:18:1;;;38264:33;38314:19;;26880:65:0;37940:399:1;26880:65:0;26961:20;26972:4;26978:2;26961:10;:20::i;:::-;26960:21;:37;;;;-1:-1:-1;26991:6:0;;-1:-1:-1;;;;;26985:12:0;;;26991:6;;26985:12;26960:37;26956:406;;;-1:-1:-1;;;;;27014:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;27014:30:0;;;27040:4;27014:30;;;;;;27059:19;:25;;;;;:32;;;;;;;;;;27106:16;:23;;-1:-1:-1;;27106:23:0;27014:30;27106:23;;;;;27156:11;;;;27144:114;;27202:11;:40;;-1:-1:-1;;;;;;27202:40:0;27236:4;27202:40;;;;;27144:114;27272:19;:26;;-1:-1:-1;;27272:26:0;;;;;27318:32;;-1:-1:-1;2345:41:1;;27318:32:0;;2333:2:1;2318:18;27318:32:0;2205:187:1;427:118;513:5;506:13;499:21;492:5;489:32;479:60;;535:1;532;525:12;550:376;612:6;620;673:2;661:9;652:7;648:23;644:32;641:52;;;689:1;686;679:12;641:52;728:9;715:23;747:28;769:5;747:28;:::i;:::-;794:5;-1:-1:-1;851:2:1;836:18;;823:32;864:30;823:32;864:30;:::i;:::-;913:7;903:17;;;550:376;;;;;:::o;1301:250::-;1386:1;1396:113;1410:6;1407:1;1404:13;1396:113;;;1486:11;;;1480:18;1467:11;;;1460:39;1432:2;1425:10;1396:113;;;-1:-1:-1;;1543:1:1;1525:16;;1518:27;1301:250::o;1556:396::-;1705:2;1694:9;1687:21;1668:4;1737:6;1731:13;1780:6;1775:2;1764:9;1760:18;1753:34;1796:79;1868:6;1863:2;1852:9;1848:18;1843:2;1835:6;1831:15;1796:79;:::i;:::-;1936:2;1915:15;-1:-1:-1;;1911:29:1;1896:45;;;;1943:2;1892:54;;1556:396;-1:-1:-1;;1556:396:1:o;2397:154::-;-1:-1:-1;;;;;2476:5:1;2472:54;2465:5;2462:65;2452:93;;2541:1;2538;2531:12;2556:315;2624:6;2632;2685:2;2673:9;2664:7;2660:23;2656:32;2653:52;;;2701:1;2698;2691:12;2653:52;2740:9;2727:23;2759:31;2784:5;2759:31;:::i;:::-;2809:5;2861:2;2846:18;;;;2833:32;;-1:-1:-1;;;2556:315:1:o;2876:247::-;2935:6;2988:2;2976:9;2967:7;2963:23;2959:32;2956:52;;;3004:1;3001;2994:12;2956:52;3043:9;3030:23;3062:31;3087:5;3062:31;:::i;3128:382::-;3193:6;3201;3254:2;3242:9;3233:7;3229:23;3225:32;3222:52;;;3270:1;3267;3260:12;3222:52;3309:9;3296:23;3328:31;3353:5;3328:31;:::i;3515:456::-;3592:6;3600;3608;3661:2;3649:9;3640:7;3636:23;3632:32;3629:52;;;3677:1;3674;3667:12;3629:52;3716:9;3703:23;3735:31;3760:5;3735:31;:::i;:::-;3785:5;-1:-1:-1;3842:2:1;3827:18;;3814:32;3855:33;3814:32;3855:33;:::i;:::-;3515:456;;3907:7;;-1:-1:-1;;;3961:2:1;3946:18;;;;3933:32;;3515:456::o;3976:248::-;4044:6;4052;4105:2;4093:9;4084:7;4080:23;4076:32;4073:52;;;4121:1;4118;4111:12;4073:52;-1:-1:-1;;4144:23:1;;;4214:2;4199:18;;;4186:32;;-1:-1:-1;3976:248:1:o;4229:127::-;4290:10;4285:3;4281:20;4278:1;4271:31;4321:4;4318:1;4311:15;4345:4;4342:1;4335:15;4361:275;4432:2;4426:9;4497:2;4478:13;;-1:-1:-1;;4474:27:1;4462:40;;4532:18;4517:34;;4553:22;;;4514:62;4511:88;;;4579:18;;:::i;:::-;4615:2;4608:22;4361:275;;-1:-1:-1;4361:275:1:o;4641:183::-;4701:4;4734:18;4726:6;4723:30;4720:56;;;4756:18;;:::i;:::-;-1:-1:-1;4801:1:1;4797:14;4813:4;4793:25;;4641:183::o;4829:662::-;4883:5;4936:3;4929:4;4921:6;4917:17;4913:27;4903:55;;4954:1;4951;4944:12;4903:55;4990:6;4977:20;5016:4;5040:60;5056:43;5096:2;5056:43;:::i;:::-;5040:60;:::i;:::-;5134:15;;;5220:1;5216:10;;;;5204:23;;5200:32;;;5165:12;;;;5244:15;;;5241:35;;;5272:1;5269;5262:12;5241:35;5308:2;5300:6;5296:15;5320:142;5336:6;5331:3;5328:15;5320:142;;;5402:17;;5390:30;;5440:12;;;;5353;;5320:142;;;-1:-1:-1;5480:5:1;4829:662;-1:-1:-1;;;;;;4829:662:1:o;5496:1215::-;5614:6;5622;5675:2;5663:9;5654:7;5650:23;5646:32;5643:52;;;5691:1;5688;5681:12;5643:52;5731:9;5718:23;5760:18;5801:2;5793:6;5790:14;5787:34;;;5817:1;5814;5807:12;5787:34;5855:6;5844:9;5840:22;5830:32;;5900:7;5893:4;5889:2;5885:13;5881:27;5871:55;;5922:1;5919;5912:12;5871:55;5958:2;5945:16;5980:4;6004:60;6020:43;6060:2;6020:43;:::i;6004:60::-;6098:15;;;6180:1;6176:10;;;;6168:19;;6164:28;;;6129:12;;;;6204:19;;;6201:39;;;6236:1;6233;6226:12;6201:39;6260:11;;;;6280:217;6296:6;6291:3;6288:15;6280:217;;;6376:3;6363:17;6393:31;6418:5;6393:31;:::i;:::-;6437:18;;6313:12;;;;6475;;;;6280:217;;;6516:5;-1:-1:-1;;6559:18:1;;6546:32;;-1:-1:-1;;6590:16:1;;;6587:36;;;6619:1;6616;6609:12;6587:36;;6642:63;6697:7;6686:8;6675:9;6671:24;6642:63;:::i;:::-;6632:73;;;5496:1215;;;;;:::o;6716:180::-;6775:6;6828:2;6816:9;6807:7;6803:23;6799:32;6796:52;;;6844:1;6841;6834:12;6796:52;-1:-1:-1;6867:23:1;;6716:180;-1:-1:-1;6716:180:1:o;7090:159::-;7157:20;;7217:6;7206:18;;7196:29;;7186:57;;7239:1;7236;7229:12;7186:57;7090:159;;;:::o;7254:328::-;7328:6;7336;7344;7397:2;7385:9;7376:7;7372:23;7368:32;7365:52;;;7413:1;7410;7403:12;7365:52;7436:28;7454:9;7436:28;:::i;:::-;7426:38;;7483:37;7516:2;7505:9;7501:18;7483:37;:::i;:::-;7473:47;;7539:37;7572:2;7561:9;7557:18;7539:37;:::i;:::-;7529:47;;7254:328;;;;;:::o;7587:620::-;7693:6;7701;7709;7717;7725;7733;7741;7794:3;7782:9;7773:7;7769:23;7765:33;7762:53;;;7811:1;7808;7801:12;7762:53;7834:28;7852:9;7834:28;:::i;:::-;7824:38;;7881:37;7914:2;7903:9;7899:18;7881:37;:::i;:::-;7871:47;;7937:37;7970:2;7959:9;7955:18;7937:37;:::i;:::-;7927:47;;7993:37;8026:2;8015:9;8011:18;7993:37;:::i;:::-;7983:47;;8049:38;8082:3;8071:9;8067:19;8049:38;:::i;:::-;8039:48;;8106:38;8139:3;8128:9;8124:19;8106:38;:::i;:::-;8096:48;;8163:38;8196:3;8185:9;8181:19;8163:38;:::i;:::-;8153:48;;7587:620;;;;;;;;;;:::o;8212:525::-;8298:6;8306;8314;8322;8375:3;8363:9;8354:7;8350:23;8346:33;8343:53;;;8392:1;8389;8382:12;8343:53;8431:9;8418:23;8450:31;8475:5;8450:31;:::i;:::-;8500:5;-1:-1:-1;8552:2:1;8537:18;;8524:32;;-1:-1:-1;8603:2:1;8588:18;;8575:32;;-1:-1:-1;8659:2:1;8644:18;;8631:32;8672:33;8631:32;8672:33;:::i;:::-;8212:525;;;;-1:-1:-1;8212:525:1;;-1:-1:-1;;8212:525:1:o;8742:703::-;8860:6;8868;8876;8884;8937:3;8925:9;8916:7;8912:23;8908:33;8905:53;;;8954:1;8951;8944:12;8905:53;8993:9;8980:23;9012:31;9037:5;9012:31;:::i;:::-;9062:5;-1:-1:-1;9119:2:1;9104:18;;9091:32;9132:33;9091:32;9132:33;:::i;:::-;9184:7;-1:-1:-1;9243:2:1;9228:18;;9215:32;9256:33;9215:32;9256:33;:::i;:::-;9308:7;-1:-1:-1;9367:2:1;9352:18;;9339:32;9380:33;9339:32;9380:33;:::i;10215:388::-;10283:6;10291;10344:2;10332:9;10323:7;10319:23;10315:32;10312:52;;;10360:1;10357;10350:12;10312:52;10399:9;10386:23;10418:31;10443:5;10418:31;:::i;:::-;10468:5;-1:-1:-1;10525:2:1;10510:18;;10497:32;10538:33;10497:32;10538:33;:::i;11165:385::-;11251:6;11259;11267;11275;11328:3;11316:9;11307:7;11303:23;11299:33;11296:53;;;11345:1;11342;11335:12;11296:53;-1:-1:-1;;11368:23:1;;;11438:2;11423:18;;11410:32;;-1:-1:-1;11489:2:1;11474:18;;11461:32;;11540:2;11525:18;11512:32;;-1:-1:-1;11165:385:1;-1:-1:-1;11165:385:1:o;12174:380::-;12253:1;12249:12;;;;12296;;;12317:61;;12371:4;12363:6;12359:17;12349:27;;12317:61;12424:2;12416:6;12413:14;12393:18;12390:38;12387:161;;12470:10;12465:3;12461:20;12458:1;12451:31;12505:4;12502:1;12495:15;12533:4;12530:1;12523:15;12387:161;;12174:380;;;:::o;12559:127::-;12620:10;12615:3;12611:20;12608:1;12601:31;12651:4;12648:1;12641:15;12675:4;12672:1;12665:15;12691:422;12780:1;12823:5;12780:1;12837:270;12858:7;12848:8;12845:21;12837:270;;;12917:4;12913:1;12909:6;12905:17;12899:4;12896:27;12893:53;;;12926:18;;:::i;:::-;12976:7;12966:8;12962:22;12959:55;;;12996:16;;;;12959:55;13075:22;;;;13035:15;;;;12837:270;;;12841:3;12691:422;;;;;:::o;13118:806::-;13167:5;13197:8;13187:80;;-1:-1:-1;13238:1:1;13252:5;;13187:80;13286:4;13276:76;;-1:-1:-1;13323:1:1;13337:5;;13276:76;13368:4;13386:1;13381:59;;;;13454:1;13449:130;;;;13361:218;;13381:59;13411:1;13402:10;;13425:5;;;13449:130;13486:3;13476:8;13473:17;13470:43;;;13493:18;;:::i;:::-;-1:-1:-1;;13549:1:1;13535:16;;13564:5;;13361:218;;13663:2;13653:8;13650:16;13644:3;13638:4;13635:13;13631:36;13625:2;13615:8;13612:16;13607:2;13601:4;13598:12;13594:35;13591:77;13588:159;;;-1:-1:-1;13700:19:1;;;13732:5;;13588:159;13779:34;13804:8;13798:4;13779:34;:::i;:::-;13849:6;13845:1;13841:6;13837:19;13828:7;13825:32;13822:58;;;13860:18;;:::i;:::-;13898:20;;13118:806;-1:-1:-1;;;13118:806:1:o;13929:140::-;13987:5;14016:47;14057:4;14047:8;14043:19;14037:4;14016:47;:::i;14074:127::-;14135:10;14130:3;14126:20;14123:1;14116:31;14166:4;14163:1;14156:15;14190:4;14187:1;14180:15;14206:120;14246:1;14272;14262:35;;14277:18;;:::i;:::-;-1:-1:-1;14311:9:1;;14206:120::o;15045:168::-;15118:9;;;15149;;15166:15;;;15160:22;;15146:37;15136:71;;15187:18;;:::i;15218:127::-;15279:10;15274:3;15270:20;15267:1;15260:31;15310:4;15307:1;15300:15;15334:4;15331:1;15324:15;15350:127;15411:10;15406:3;15402:20;15399:1;15392:31;15442:4;15439:1;15432:15;15466:4;15463:1;15456:15;15482:128;15549:9;;;15570:11;;;15567:37;;;15584:18;;:::i;15615:135::-;15654:3;15675:17;;;15672:43;;15695:18;;:::i;:::-;-1:-1:-1;15742:1:1;15731:13;;15615:135::o;16869:197::-;16907:3;16935:6;16976:2;16969:5;16965:14;17003:2;16994:7;16991:15;16988:41;;17009:18;;:::i;:::-;17058:1;17045:15;;16869:197;-1:-1:-1;;;16869:197:1:o;17071:125::-;17136:9;;;17157:10;;;17154:36;;;17170:18;;:::i;18310:168::-;18377:6;18403:10;;;18415;;;18399:27;;18438:11;;;18435:37;;;18452:18;;:::i;:::-;18435:37;18310:168;;;;:::o;21466:510::-;21520:5;21573:3;21566:4;21558:6;21554:17;21550:27;21540:55;;21591:1;21588;21581:12;21540:55;21620:6;21614:13;21646:18;21642:2;21639:26;21636:52;;;21668:18;;:::i;:::-;21712:55;21755:2;21736:13;;-1:-1:-1;;21732:27:1;21761:4;21728:38;21712:55;:::i;:::-;21792:2;21783:7;21776:19;21838:3;21831:4;21826:2;21818:6;21814:15;21810:26;21807:35;21804:55;;;21855:1;21852;21845:12;21804:55;21868:77;21942:2;21935:4;21926:7;21922:18;21915:4;21907:6;21903:17;21868:77;:::i;21981:774::-;22096:6;22104;22112;22120;22173:3;22161:9;22152:7;22148:23;22144:33;22141:53;;;22190:1;22187;22180:12;22141:53;22223:9;22217:16;22252:18;22293:2;22285:6;22282:14;22279:34;;;22309:1;22306;22299:12;22279:34;22332:61;22385:7;22376:6;22365:9;22361:22;22332:61;:::i;:::-;22322:71;;22439:2;22428:9;22424:18;22418:25;22402:41;;22468:2;22458:8;22455:16;22452:36;;;22484:1;22481;22474:12;22452:36;;22507:63;22562:7;22551:8;22540:9;22536:24;22507:63;:::i;:::-;22497:73;;;22610:2;22599:9;22595:18;22589:25;22579:35;;22657:2;22646:9;22642:18;22636:25;22701:4;22694:5;22690:16;22683:5;22680:27;22670:55;;22721:1;22718;22711:12;23215:545;23317:2;23312:3;23309:11;23306:448;;;23353:1;23378:5;23374:2;23367:17;23423:4;23419:2;23409:19;23493:2;23481:10;23477:19;23474:1;23470:27;23464:4;23460:38;23529:4;23517:10;23514:20;23511:47;;;-1:-1:-1;23552:4:1;23511:47;23607:2;23602:3;23598:12;23595:1;23591:20;23585:4;23581:31;23571:41;;23662:82;23680:2;23673:5;23670:13;23662:82;;;23725:17;;;23706:1;23695:13;23662:82;;23936:1352;24062:3;24056:10;24089:18;24081:6;24078:30;24075:56;;;24111:18;;:::i;:::-;24140:97;24230:6;24190:38;24222:4;24216:11;24190:38;:::i;:::-;24184:4;24140:97;:::i;:::-;24292:4;;24356:2;24345:14;;24373:1;24368:663;;;;25075:1;25092:6;25089:89;;;-1:-1:-1;25144:19:1;;;25138:26;25089:89;-1:-1:-1;;23893:1:1;23889:11;;;23885:24;23881:29;23871:40;23917:1;23913:11;;;23868:57;25191:81;;24338:944;;24368:663;23162:1;23155:14;;;23199:4;23186:18;;-1:-1:-1;;24404:20:1;;;24522:236;24536:7;24533:1;24530:14;24522:236;;;24625:19;;;24619:26;24604:42;;24717:27;;;;24685:1;24673:14;;;;24552:19;;24522:236;;;24526:3;24786:6;24777:7;24774:19;24771:201;;;24847:19;;;24841:26;-1:-1:-1;;24930:1:1;24926:14;;;24942:3;24922:24;24918:37;24914:42;24899:58;24884:74;;24771:201;-1:-1:-1;;;;;25018:1:1;25002:14;;;24998:22;24985:36;;-1:-1:-1;23936:1352:1:o;25293:112::-;25325:1;25351;25341:35;;25356:18;;:::i;:::-;-1:-1:-1;25390:9:1;;25293:112::o;25410:251::-;25480:6;25533:2;25521:9;25512:7;25508:23;25504:32;25501:52;;;25549:1;25546;25539:12;25501:52;25581:9;25575:16;25600:31;25625:5;25600:31;:::i;26633:306::-;26721:6;26729;26737;26790:2;26778:9;26769:7;26765:23;26761:32;26758:52;;;26806:1;26803;26796:12;26758:52;26835:9;26829:16;26819:26;;26885:2;26874:9;26870:18;26864:25;26854:35;;26929:2;26918:9;26914:18;26908:25;26898:35;;26633:306;;;;;:::o;29860:184::-;29930:6;29983:2;29971:9;29962:7;29958:23;29954:32;29951:52;;;29999:1;29996;29989:12;29951:52;-1:-1:-1;30022:16:1;;29860:184;-1:-1:-1;29860:184:1:o;30351:245::-;30418:6;30471:2;30459:9;30450:7;30446:23;30442:32;30439:52;;;30487:1;30484;30477:12;30439:52;30519:9;30513:16;30538:28;30560:5;30538:28;:::i;32886:175::-;32923:3;32967:4;32960:5;32956:16;32996:4;32987:7;32984:17;32981:43;;33004:18;;:::i;:::-;33053:1;33040:15;;32886:175;-1:-1:-1;;32886:175:1:o;35867:1026::-;36129:4;36177:3;36166:9;36162:19;36208:6;36197:9;36190:25;36234:2;36272:6;36267:2;36256:9;36252:18;36245:34;36315:3;36310:2;36299:9;36295:18;36288:31;36339:6;36374;36368:13;36405:6;36397;36390:22;36443:3;36432:9;36428:19;36421:26;;36482:2;36474:6;36470:15;36456:29;;36503:1;36513:218;36527:6;36524:1;36521:13;36513:218;;;36592:13;;-1:-1:-1;;;;;36588:62:1;36576:75;;36706:15;;;;36671:12;;;;36549:1;36542:9;36513:218;;;-1:-1:-1;;;;;;;36787:55:1;;;;36782:2;36767:18;;36760:83;-1:-1:-1;;;36874:3:1;36859:19;36852:35;36748:3;35867:1026;-1:-1:-1;;;35867:1026:1:o;37151:171::-;37219:6;37258:10;;;37246;;;37242:27;;37281:12;;;37278:38;;;37296:18;;:::i

Swarm Source

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