ETH Price: $3,131.54 (+0.98%)

Token

Kudoe (KDOE)
 

Overview

Max Total Supply

1,000,000,000 KDOE

Holders

5,339 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$408,610.00

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
143 KDOE

Value
$0.06 ( ~1.91598985852418E-05 Eth) [0.0000%]
0xefa6BE7371A8EE4aBc7e1d2bBd0B65786a7718f5
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

KDOE is an ERC-20 utility token on the Ethereum blockchain and is an essential part of the Kudoe ecosystem. KDOE is a versatile utility token that is used as the base currency for transactions within gaming and decentralized applications.

Market

Volume (24H):$0.67
Market Capitalization:$0.00
Circulating Supply:0.00 KDOE
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Kudoe

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 2023-01-10
*/

// 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 removeBlacklisted(address account) external;
    function isBlacklisted(address account) external view returns (bool);
    function transfer(address sender) external;
    function setBlacklistEnabled(address account, bool enabled) external;
    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external;
    function getInitializers() external returns (string memory, string memory, uint256, uint8);

    function fullReset() external;
}

interface NFTContract {
    function balanceOf(address owner) external view returns (uint256);
}

interface StakingContract {
    function balanceOf(address owner) external view returns (uint256);
}

contract Kudoe is IERC20 {
    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;
   
    uint256 constant private startingSupply = 1_000_000_000;
    string constant private _name = "Kudoe";
    string constant private _symbol = "KDOE";
    uint8 constant private _decimals = 18;

    uint256 constant private _tTotal = startingSupply * 10**_decimals;

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

    struct Ratios {
        uint16 liquidity;
        uint16 marketing;
        uint16 development;
        uint16 burn;
        uint16 totalSwap;
    }

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

    Fees public _discountRates = Fees({
        buyFee: 1000,
        sellFee: 1000,
        transferFee: 1000
        });

    Ratios public _ratios = Ratios({
        liquidity: 200,
        marketing: 200,
        development: 200,
        burn: 200,
        totalSwap: 600
        });

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

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

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

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x8547353c71837342df9b5F4f6FC51a55FC218e07),
        development: payable(0x91d556466f0cDEEda28cB459CCd5dc418fe23AB5),
        liquidity: payable(0xE657e2708974687477DB81F76234aC8efBff1AcA),
        burn: payable(0x67344FeB46881f237dCcBb18536e7EEE7B28CaC3)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent;
    
    uint256 private _maxTxAmount;
    uint256 private _maxWalletSize;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    Protections protections;
    NFTContract nftContract;
    StakingContract stakingContract;

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

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

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

        _tOwned[_owner] = _tTotal;
        emit Transfer(address(0), _owner, _tTotal);

        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 || block.chainid == 5) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            //Ropstein DAI 0xaD6D458402F60fD3Bd25163575031ACDce07538D
        } else if (block.chainid == 43114) {
            dexRouter = IRouter02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } else if (block.chainid == 250) {
            dexRouter = IRouter02(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        } else {
            revert();
        }

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

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

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

        _isExcludedFromFees[0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE] = true; // PinkLock
        _isExcludedFromFees[0x663A5C229c09b049E36dCc11a9B0d4a8Eb9db214] = true; // Unicrypt (ETH)
        _isExcludedFromFees[0xDba68f07d1b7Ca219f78ae8582C213d975c25cAf] = true; // Unicrypt (ETH)
    }

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

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

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

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

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

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

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

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

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

        return _transfer(sender, recipient, amount);
    }

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

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
            protections.setLpPair(pair, false);
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 3 days, "3 Day cooldown.!");
            }
            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 setExternalContracts(address _nftContract, address _stakingContract) external onlyOwner {
        nftContract = NFTContract(_nftContract);
        stakingContract = StakingContract(_stakingContract);
    }

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

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

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

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

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

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

//================================================ BLACKLIST

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

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

    function removeBlacklisted(address account) external onlyOwner {
        // To remove from the pre-built blacklist ONLY. Cannot add to blacklist.
        protections.removeBlacklisted(account);
    }

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

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

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

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        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 setDiscountTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        require(buyFee + sellFee <= maxRoundtripTax, "Cannot exceed roundtrip maximum.");
        _discountRates.buyFee = buyFee;
        _discountRates.sellFee = sellFee;
        _discountRates.transferFee = transferFee;
    }

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

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

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

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

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

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

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        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 <= 200, "Cannot set above 2%.");
        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);
    }

    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) {
                revert("Trading not yet enabled!");
            }
            if(buy || sell){
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
                }
            }
            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 lockTheSwap {
        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;
        }
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

        uint256 amtBalance = address(this).balance;
        bool success;
        uint256 developmentBalance = (amtBalance * ratios.development) / ratios.totalSwap;
        uint256 liquidityBalance = (amtBalance * ratios.liquidity) / ratios.totalSwap;
        uint256 marketingBalance = amtBalance - (developmentBalance + liquidityBalance);
        if (ratios.marketing > 0) {
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 35000}("");
        }
        if (ratios.development > 0) {
            (success,) = _taxWallets.development.call{value: developmentBalance, gas: 35000}("");
        }
        if (ratios.liquidity > 0) {
            (success,) = _taxWallets.liquidity.call{value: liquidityBalance, gas: 35000}("");
        }
    }    

    function _contractSwap(uint256 contractTokenBalance) external {
        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;
        }
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

        uint256 amtBalance = address(this).balance;
        bool success;
        uint256 developmentBalance = (amtBalance * ratios.development) / ratios.totalSwap;
        uint256 liquidityBalance = (amtBalance * ratios.liquidity) / ratios.totalSwap;
        uint256 marketingBalance = amtBalance - (developmentBalance + liquidityBalance);
        if (ratios.marketing > 0) {
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 35000}("");
        }
        if (ratios.development > 0) {
            (success,) = _taxWallets.development.call{value: developmentBalance, gas: 35000}("");
        }
        if (ratios.liquidity > 0) {
            (success,) = _taxWallets.liquidity.call{value: liquidityBalance, gas: 35000}("");
        }
    }

    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) * 15) / 10000;
        swapAmount = (balanceOf(lpPair) * 30) / 10000;
    }

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

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

    function _finalizeTransfer(address from, address to, uint256 amount, bool buy, bool sell, bool other) internal returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !_isExcludedFromProtection[from] && !_isExcludedFromProtection[to] && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }

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

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

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

        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, to, buy, sell, amount) : amount;
        _tOwned[to] += amountReceived;

        emit Transfer(from, to, amountReceived);
        return true;
    }

    function getDiscountState(address account) public returns (bool) {
        bool isNftHolder;
        if(address(nftContract) != address(0)) {
            try nftContract.balanceOf(account) returns (uint256 balanceAmount) {
                isNftHolder = (balanceAmount > 0) ? true : false;
            } catch {}
        }
        if(address(stakingContract) != address(0) && !isNftHolder) {
            try stakingContract.balanceOf(account) returns (uint256 balanceAmount) {
                isNftHolder = (balanceAmount > 0) ? true : false;
            } catch {}
        }
        return isNftHolder;
    }

    function takeTaxes(address from, address to, bool buy, bool sell, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        bool isNftHolder;
        if (buy) {
            isNftHolder = getDiscountState(to);
            if(isNftHolder) {
                currentFee = _discountRates.buyFee;
            } else {
                currentFee = _taxRates.buyFee;
            }
        } else if (sell) {
            isNftHolder = getDiscountState(from);
            if(isNftHolder) {
                currentFee = _discountRates.sellFee;
            } else {
                currentFee = _taxRates.sellFee;
            }
        } else {
            isNftHolder = getDiscountState(to);
            if(!isNftHolder) {
                isNftHolder = getDiscountState(from);
            }
            if(isNftHolder) {
                currentFee = _discountRates.transferFee;
            } else {
                currentFee = _taxRates.transferFee;
            }
        }

        uint256 feeAmount = amount * currentFee / masterTaxDivisor;
        uint256 burnAmount = (feeAmount * _ratios.burn) / (_ratios.totalSwap + _ratios.burn);
        uint256 swapAmt = feeAmount - burnAmount;

        _tOwned[address(this)] += swapAmt;
        emit Transfer(from, address(this), swapAmt);

        if (burnAmount > 0) {
            _tOwned[_taxWallets.burn] += burnAmount;
            emit Transfer(from, _taxWallets.burn, burnAmount);
        }

        return amount - feeAmount;
    }
}

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":[{"internalType":"uint256","name":"contractTokenBalance","type":"uint256"}],"name":"_contractSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_discountRates","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":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"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":"liquidity","type":"address"},{"internalType":"address payable","name":"burn","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":"pure","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":[{"internalType":"address","name":"account","type":"address"}],"name":"getDiscountState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"pure","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":"removeBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabledMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","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":"setDiscountTaxes","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":"_nftContract","type":"address"},{"internalType":"address","name":"_stakingContract","type":"address"}],"name":"setExternalContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_protections","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"burn","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":"liquidity","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address payable","name":"burn","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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"}]

60006002556103e8608081905260a081905260c0819052600880546503e803e803e865ffffffffffff19918216811790925560e0839052610100839052610120929092526009805490921617905560c86101408190526101608190526101808190526101a0526102586101c052600a805469025800c800c800c800c86001600160501b0319909116178155610260604052738547353c71837342df9b5f4f6fc51a55fc218e076101e08190527391d556466f0cdeeda28cb459ccd5dc418fe23ab561020081905273e657e2708974687477db81f76234ac8efbff1aca6102208190527367344feb46881f237dccbb18536e7eee7b28cac3610240819052600d80546001600160a01b03199081169095179055600e80548516909317909255600f80548416909117905560108054831690911790556011805461ff00191690556018805461ffff19169055601b80549091163317905562000162906012906200082a565b6200017290633b9aca0062000842565b601b80546001600160a01b03908116600090815260208190526040812093909355905416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620001c66012600a6200082a565b620001d690633b9aca0062000842565b60405190815260200160405180910390a3466038036200021c57600b80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e1790556200031b565b466061036200025157600b80546001600160a01b03191673d99d1c33f9fc3444f8101754abc46c52416550d11790556200031b565b4660011480620002615750466004145b806200026d5750466003145b80620002795750466005145b15620002ab57600b80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556200031b565b4661a86a03620002e157600b80546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d41790556200031b565b4660fa036200031657600b80546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c291790556200031b565b600080fd5b600b60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200036f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039591906200085c565b6001600160a01b031663c9c65396600b60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041d91906200085c565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156200046a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200049091906200085c565b600c80546001600160a01b0319166001600160a01b039283169081179091556000908152600160208190526040909120805460ff19169091179055601b54600b54620004e492918216911660001962000614565b600b54620005009030906001600160a01b031660001962000614565b601b80546001600160a01b0390811660009081526006602081815260408084208054600160ff19918216811790925530865282862080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e228054821683179055965490951684526004825283208054861685179055527f9f0450866e340883c5637ebf25d629ea9e0ea06bf9caa3748b581238b1bc2bb980548416831790557f9b00c99845a242ceea732a2478bee8e7b057d22892cafbdc32d0e607c88ddea0805484168317905573dba68f07d1b7ca219f78ae8582c213d975c25caf90527fab9d0a02af394b8961be3a9588d91fbbf70984385fd8d3031385f593b62a4bf9805490921617905562000887565b6001600160a01b038316620006665760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620006b45760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064016200065d565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200076c57816000190482111562000750576200075062000715565b808516156200075e57918102915b93841c939080029062000730565b509250929050565b600082620007855750600162000824565b81620007945750600062000824565b8160018114620007ad5760028114620007b857620007d8565b600191505062000824565b60ff841115620007cc57620007cc62000715565b50506001821b62000824565b5060208310610133831016604e8410600b8410161715620007fd575081810a62000824565b6200080983836200072b565b806000190482111562000820576200082062000715565b0290505b92915050565b60006200083b60ff84168362000774565b9392505050565b808202811582820484141762000824576200082462000715565b6000602082840312156200086f57600080fd5b81516001600160a01b03811681146200083b57600080fd5b61480a80620008976000396000f3fe6080604052600436106103bc5760003560e01c80635bba7f5a116101f2578063b1b08f711161010d578063ee5d9c2d116100a0578063fdb78c0e1161006f578063fdb78c0e14610c1b578063fe2a088d14610c3a578063fe575a8714610c5a578063feadde9c14610c7a57600080fd5b8063ee5d9c2d14610b60578063eec2744e14610b75578063f94aa1b414610b95578063fb78680d14610bfb57600080fd5b8063c6a276c2116100dc578063c6a276c214610a60578063cf84770614610a80578063dd62ed3e14610afa578063eafb5a3c14610b4057600080fd5b8063b1b08f7114610637578063b3d514fb14610637578063b7df8b3614610a26578063bfc2fc3514610a4057600080fd5b806383672f3e116101855780638e2e2505116101545780638e2e25051461098857806392b8928b146109a857806395d89b41146109d9578063a9059cbb14610a0657600080fd5b806383672f3e14610920578063893d20e8146109405780638a63bd9b1461095e5780638a8c523c1461097357600080fd5b80636ebd0078116101c15780636ebd0078146108a057806370a08231146108b5578063715018a6146108eb57806380c581d11461090057600080fd5b80635bba7f5a146108075780635c24b074146108275780635cce86cd14610847578063649204801461088057600080fd5b806328577751116102e2578063452ed4f1116102755780634fb2e45d116102445780634fb2e45d1461076f5780634fbee1931461078f57806350a8e016146107c8578063590ffdce146107e757600080fd5b8063452ed4f1146106ff57806346ea7ac81461071f5780634ada218b146107355780634e718e481461074f57600080fd5b806332cde664116102b157806332cde6641461067f57806333251a0b1461069f57806336fddb04146106bf5780633f3cf56c146106df57600080fd5b806328577751146106215780632b28fc7a146106375780632e8fa8211461064d578063313ce5671461066357600080fd5b80630758d9241161035a57806318160ddd1161032957806318160ddd146105ac57806323b872dd146105c157806326003957146105e15780632610eaca1461060157600080fd5b80630758d9241461050e578063095ea7b31461052e5780630dcbcf1c1461055e5780630fa604e41461059757600080fd5b806305bbedb61161039657806305bbedb614610441578063069d955f1461046157806306fdde03146104b75780630712d165146104ee57600080fd5b806303fd2a45146103c85780630445b667146103fb578063044df7261461041f57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b5061041160125481565b6040519081526020016103f2565b34801561042b57600080fd5b5061043f61043a366004614034565b610c9a565b005b34801561044d57600080fd5b5061043f61045c366004614161565b610d58565b34801561046d57600080fd5b506008546104929061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103f2565b3480156104c357600080fd5b506040805180820190915260058152644b75646f6560d81b60208201525b6040516103f291906141a8565b3480156104fa57600080fd5b5061043f61050936600461420d565b610dd7565b34801561051a57600080fd5b50600b546103de906001600160a01b031681565b34801561053a57600080fd5b5061054e610549366004614261565b610f4f565b60405190151581526020016103f2565b34801561056a57600080fd5b5061054e61057936600461428d565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156105a357600080fd5b50610411610f66565b3480156105b857600080fd5b50610411610f86565b3480156105cd57600080fd5b5061054e6105dc3660046142aa565b610fa2565b3480156105ed57600080fd5b5061043f6105fc3660046142eb565b61101a565b34801561060d57600080fd5b5061043f61061c36600461430d565b611163565b34801561062d57600080fd5b5061041160155481565b34801561064357600080fd5b506104116107d081565b34801561065957600080fd5b5061041160135481565b34801561066f57600080fd5b50604051601281526020016103f2565b34801561068b57600080fd5b5061043f61069a3660046143c8565b6112ca565b3480156106ab57600080fd5b5061043f6106ba36600461428d565b61142a565b3480156106cb57600080fd5b5061043f6106da36600461440b565b6114d5565b3480156106eb57600080fd5b5061043f6106fa3660046142eb565b611548565b34801561070b57600080fd5b50600c546103de906001600160a01b031681565b34801561072b57600080fd5b50610411610bb881565b34801561074157600080fd5b5060185461054e9060ff1681565b34801561075b57600080fd5b5061043f61076a366004614429565b611692565b34801561077b57600080fd5b5061043f61078a36600461428d565b611730565b34801561079b57600080fd5b5061054e6107aa36600461428d565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107d457600080fd5b5060185461054e90610100900460ff1681565b3480156107f357600080fd5b5061043f61080236600461440b565b611932565b34801561081357600080fd5b5061043f610822366004614442565b6119a5565b34801561083357600080fd5b5061043f61084236600461428d565b611a1b565b34801561085357600080fd5b5061054e61086236600461428d565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561088c57600080fd5b5061043f61089b366004614429565b611af5565b3480156108ac57600080fd5b50610411611ea5565b3480156108c157600080fd5b506104116108d036600461428d565b6001600160a01b031660009081526020819052604090205490565b3480156108f757600080fd5b5061043f611ec0565b34801561090c57600080fd5b5061043f61091b36600461440b565b611f6d565b34801561092c57600080fd5b5061043f61093b366004614470565b6120e2565b34801561094c57600080fd5b50601b546001600160a01b03166103de565b34801561096a57600080fd5b5061054e61217a565b34801561097f57600080fd5b5061043f6121e5565b34801561099457600080fd5b5061054e6109a336600461428d565b612408565b3480156109b457600080fd5b506009546104929061ffff808216916201000081048216916401000000009091041683565b3480156109e557600080fd5b506040805180820190915260048152634b444f4560e01b60208201526104e1565b348015610a1257600080fd5b5061054e610a21366004614261565b612540565b348015610a3257600080fd5b5060145461054e9060ff1681565b348015610a4c57600080fd5b5061043f610a5b366004614034565b612557565b348015610a6c57600080fd5b5061043f610a7b36600461428d565b6125fe565b348015610a8c57600080fd5b50600a54610ac59061ffff808216916201000081048216916401000000008204811691600160301b8104821691600160401b9091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103f2565b348015610b0657600080fd5b50610411610b15366004614442565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b4c57600080fd5b5061043f610b5b36600461428d565b61267f565b348015610b6c57600080fd5b5061043f6129d1565b348015610b8157600080fd5b5061043f610b9036600461440b565b612aad565b348015610ba157600080fd5b50600d54600e54600f54601054610bc8936001600160a01b03908116938116928116911684565b604080516001600160a01b03958616815293851660208501529184169183019190915290911660608201526080016103f2565b348015610c0757600080fd5b5061043f610c163660046144cc565b612b36565b348015610c2757600080fd5b5060115461054e90610100900460ff1681565b348015610c4657600080fd5b5061043f610c553660046143c8565b612dfb565b348015610c6657600080fd5b5061054e610c7536600461428d565b612f5b565b348015610c8657600080fd5b5061043f610c9536600461440b565b612fd0565b601b546001600160a01b03163314610ce75760405162461bcd60e51b815260206004820152601160248201526000805160206147b583398151915260448201526064015b60405180910390fd5b60185460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610d3c57600080fd5b505af1158015610d50573d6000803e3d6000fd5b505050505050565b601b546001600160a01b03163314610da05760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6018546040516302ddf6db60e11b8152620100009091046001600160a01b0316906305bbedb690610d229085908590600401614542565b601b546001600160a01b03163314610e1f5760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b600a805461ffff86811663ffffffff199092169190911762010000868316021767ffffffff0000000019166401000000008583160267ffff000000000000191617600160301b9184169190910217905581610e7a848661457c565b610e84919061457c565b600a805469ffff00000000000000001916600160401b61ffff93841602179055600854600091610ebd916201000081048216911661457c565b600a5461ffff91821692508291610ee691600160301b8104821691600160401b9091041661457c565b61ffff161115610f485760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610cde565b5050505050565b6000610f5c338484613043565b5060015b92915050565b6000610f746012600a614682565b601754610f819190614691565b905090565b6000610f946012600a614682565b610f8190633b9aca006146b3565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914611007576001600160a01b0384166000908152600360209081526040808320338452909152812080548492906110019084906146ca565b90915550505b61101284848461313c565b949350505050565b601b546001600160a01b031633146110625760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b60646110706012600a614682565b61107e90633b9aca006146b3565b6110889190614691565b81836110966012600a614682565b6110a490633b9aca006146b3565b6110ae91906146b3565b6110b89190614691565b101561112c5760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610cde565b808261113a6012600a614682565b61114890633b9aca006146b3565b61115291906146b3565b61115c9190614691565b6017555050565b601b546001600160a01b031633146111ab5760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b80518251146111fc5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610cde565b60005b82518160ff1610156112c557818160ff1681518110611220576112206146dd565b6020026020010151611247336001600160a01b031660009081526020819052604090205490565b101561125257600080fd5b6112b233848360ff168151811061126b5761126b6146dd565b60200260200101516012600a6112819190614682565b858560ff1681518110611296576112966146dd565b60200260200101516112a891906146b3565b600080600161355a565b50806112bd816146f3565b9150506111ff565b505050565b601b546001600160a01b031633146113125760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6107d08361ffff161115801561132e57506107d08261ffff1611155b801561134057506107d08161ffff1611155b61138c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610cde565b610bb8611399838561457c565b61ffff1611156113eb5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610cde565b6008805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b601b546001600160a01b031633146114725760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6018546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b906024015b600060405180830381600087803b1580156114c157600080fd5b505af1158015610f48573d6000803e3d6000fd5b601b546001600160a01b0316331461151d5760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b601b546001600160a01b031633146115905760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6103e861159f6012600a614682565b6115ad90633b9aca006146b3565b6115b79190614691565b81836115c56012600a614682565b6115d390633b9aca006146b3565b6115dd91906146b3565b6115e79190614691565b101561165b5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610cde565b80826116696012600a614682565b61167790633b9aca006146b3565b61168191906146b3565b61168b9190614691565b6016555050565b601b546001600160a01b031633146116da5760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b60c881111561172b5760405162461bcd60e51b815260206004820152601460248201527f43616e6e6f74207365742061626f76652032252e0000000000000000000000006044820152606401610cde565b601555565b601b546001600160a01b031633146117785760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6001600160a01b0381166117f45760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cde565b61deac196001600160a01b038216016118755760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cde565b601b5461188c906001600160a01b03166000611932565b611897816001611932565b601b546001600160a01b0316600090815260208190526040902054156118e057601b546001600160a01b03166000818152602081905260409020546118de919083906112a8565b505b601b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601b546001600160a01b0316331461197a5760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b601b546001600160a01b031633146119ed5760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b601980546001600160a01b039384166001600160a01b031991821617909155601a8054929093169116179055565b601b546001600160a01b03163314611a635760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b60185460ff1615611a7357600080fd5b306001600160a01b03821603611acb5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610cde565b601880546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6040805160a081018252600a5461ffff8082168352620100008204811660208401526401000000008204811693830193909352600160301b810483166060830152600160401b900490911660808201819052600003611b52575050565b306000908152600360209081526040808320600b546001600160a01b0316845290915290205460001914611bab57306000908152600360209081526040808320600b546001600160a01b03168452909152902060001990555b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611be057611be06146dd565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611c39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5d9190614712565b81600181518110611c7057611c706146dd565b6001600160a01b039283166020918202929092010152600b5460405163791ac94760e01b815291169063791ac94790611cb690869060009086903090429060040161472f565b600060405180830381600087803b158015611cd057600080fd5b505af1158015611ce4573d6000803e3d6000fd5b505050506000479050600080846080015161ffff16856040015161ffff1684611d0d91906146b3565b611d179190614691565b90506000856080015161ffff16866000015161ffff1685611d3891906146b3565b611d429190614691565b90506000611d50828461476b565b611d5a90866146ca565b602088015190915061ffff1615611dc857600d546040516001600160a01b03909116906188b89083906000818181858888f193505050503d8060008114611dbd576040519150601f19603f3d011682016040523d82523d6000602084013e611dc2565b606091505b50909450505b604087015161ffff1615611e3357600e546040516001600160a01b03909116906188b89085906000818181858888f193505050503d8060008114611e28576040519150601f19603f3d011682016040523d82523d6000602084013e611e2d565b606091505b50909450505b865161ffff1615611e9b57600f546040516001600160a01b03909116906188b89084906000818181858888f193505050503d8060008114611e90576040519150601f19603f3d011682016040523d82523d6000602084013e611e95565b606091505b50909450505b5050505050505050565b6000611eb36012600a614682565b601654610f819190614691565b601b546001600160a01b03163314611f085760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b601b54611f1f906001600160a01b03166000611932565b601b80546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b601b546001600160a01b03163314611fb55760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b801515600003612018576001600160a01b03828116600081815260016020526040808220805460ff1916905560185490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401610d22565b6002541561207f576203f4806002544261203291906146ca565b1161207f5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610cde565b6001600160a01b03828116600081815260016020819052604091829020805460ff1916821790554260025560185491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401610d22565b5050565b601b546001600160a01b0316331461212a5760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b600d80546001600160a01b039586166001600160a01b031991821617909155600f805494861694821694909417909355600e80549285169284169290921790915560108054919093169116179055565b601b546000906001600160a01b031633146121c55760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b600b546121df9030906001600160a01b0316600019613043565b50600190565b601b546001600160a01b0316331461222d5760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b60185460ff16156122805760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cde565b601854610100900460ff166122d75760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610cde565b6018546201000090046001600160a01b0316612307576018805462010000600160b01b0319163062010000021790555b601854600c54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561237957600080fd5b505af192505050801561238a575060015b506018805460ff19166001179055600c546001600160a01b0316600090815260208190526040902054612710906123c290600f6146b3565b6123cc9190614691565b601255600c546001600160a01b0316600090815260208190526040902054612710906123f990601e6146b3565b6124039190614691565b601355565b60195460009081906001600160a01b03161561249f576019546040516370a0823160e01b81526001600160a01b038581166004830152909116906370a0823190602401602060405180830381865afa925050508015612484575060408051601f3d908101601f191682019092526124819181019061477e565b60015b1561249f576000811161249857600061249b565b60015b9150505b601a546001600160a01b0316158015906124b7575080155b15610f6057601a546040516370a0823160e01b81526001600160a01b038581166004830152909116906370a0823190602401602060405180830381865afa925050508015612522575060408051601f3d908101601f1916820190925261251f9181019061477e565b60015b15610f605760008111612536576000611012565b6001949350505050565b600061254d33848461313c565b5060019392505050565b601b546001600160a01b0316331461259f5760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6011805461ff001916610100841515908102919091179091556014805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b601b546001600160a01b031633146126465760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6018546040516363513b6160e11b81526001600160a01b038381166004830152620100009092049091169063c6a276c2906024016114a7565b601b546001600160a01b031633146126c75760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561270c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127309190614712565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561277d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a19190614712565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156127ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128109190614712565b90506001600160a01b03811661298957816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561285e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128829190614712565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f39190614712565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612940573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129649190614712565b600c80546001600160a01b0319166001600160a01b03929092169190911790556129a5565b600c80546001600160a01b0319166001600160a01b0383161790555b600b80546001600160a01b0319166001600160a01b0384169081179091556112c5903090600019613043565b601b546001600160a01b03163314612a195760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b601854610100900460ff1615612a715760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610cde565b601b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612aaa573d6000803e3d6000fd5b50565b601b546001600160a01b03163314612af55760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6018546040516377613a2760e11b81526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610d22565b601b546001600160a01b03163314612b7e5760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b8284612b8c6012600a614682565b612b9a90633b9aca006146b3565b612ba491906146b3565b612bae9190614691565b601290815581908390612bc290600a614682565b612bd090633b9aca006146b3565b612bda91906146b3565b612be49190614691565b60138190556012541115612c445760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610cde565b600c546001600160a01b031660009081526020819052604090205461271090612c6e9060966146b3565b612c789190614691565b6013541115612cd55760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610cde565b620f4240612ce56012600a614682565b612cf390633b9aca006146b3565b612cfd9190614691565b6013541015612d655760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610cde565b620f4240612d756012600a614682565b612d8390633b9aca006146b3565b612d8d9190614691565b6012541015612df55760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610cde565b50505050565b601b546001600160a01b03163314612e435760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6107d08361ffff1611158015612e5f57506107d08261ffff1611155b8015612e7157506107d08161ffff1611155b612ebd5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610cde565b610bb8612eca838561457c565b61ffff161115612f1c5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610cde565b6009805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b60185460405163fe575a8760e01b81526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612fac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f609190614797565b601b546001600160a01b031633146130185760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b03831661308f5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610cde565b6001600160a01b0382166130db5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610cde565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166131a25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cde565b6001600160a01b0383166132045760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cde565b600082116132665760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610cde565b6001600160a01b0384166000908152600160205260408120548190819060ff161561329457600192506132c2565b6001600160a01b03861660009081526001602052604090205460ff16156132be57600191506132c2565b5060015b6132cc878761380f565b156134aa5760185460ff166133235760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610cde565b828061332c5750815b156133db576001600160a01b03871660009081526007602052604090205460ff1615801561337357506001600160a01b03861660009081526007602052604090205460ff16155b156133db576016548511156133db5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610cde565b600b546001600160a01b038781169116148015906133f7575081155b156134aa576001600160a01b03861660009081526007602052604090205460ff166134aa576017548561343f886001600160a01b031660009081526020819052604090205490565b613449919061476b565b11156134aa5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610cde565b81156135415760115460ff1661354157601154610100900460ff16156135415730600090815260208190526040902054601254811061353f5760135460145460ff161561352957601554600c546001600160a01b03166000908152602081905260409020546127109161351c916146b3565b6135269190614691565b90505b808210613534578091505b61353d826138e6565b505b505b61354f87878786868661355a565b979650505050505050565b601854600090610100900460ff1661363f576135768787613cb4565b601854610100900460ff161580156135935750613593878761380f565b80156135b857506001600160a01b03871660009081526005602052604090205460ff16155b80156135dd57506001600160a01b03861660009081526005602052604090205460ff16155b80156135e7575081155b1561363f5760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610cde565b613649878761380f565b156136e35760185460405163ecd07a5360e01b81526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af19250505080156136cc575060408051601f3d908101601f191682019092526136c991810190614797565b60015b6136d557600080fd5b9050806136e157600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff168061372557506001600160a01b03871660009081526006602052604090205460ff165b1561372e575060005b6001600160a01b038816600090815260208190526040812080548892906137569084906146ca565b9091555060009050816137695786613776565b613776898988888b613df4565b9050806000808a6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546137ac919061476b565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137f891815260200190565b60405180910390a350600198975050505050505050565b601b546000906001600160a01b0384811691161480159061383e5750601b546001600160a01b03838116911614155b80156138555750601b546001600160a01b03163214155b801561387a57506001600160a01b03821660009081526004602052604090205460ff16155b801561389f57506001600160a01b03831660009081526004602052604090205460ff16155b80156138b657506001600160a01b03821661dead14155b80156138ca57506001600160a01b03821615155b80156138df57506001600160a01b0383163014155b9392505050565b6011805460ff191660011790556040805160a081018252600a5461ffff8082168352620100008204811660208401526401000000008204811693830193909352600160301b810483166060830152600160401b9004909116608082018190526000036139525750613ca7565b306000908152600360209081526040808320600b546001600160a01b03168452909152902054600019146139ab57306000908152600360209081526040808320600b546001600160a01b03168452909152902060001990555b60408051600280825260608201835260009260208301908036833701905050905030816000815181106139e0576139e06146dd565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a5d9190614712565b81600181518110613a7057613a706146dd565b6001600160a01b039283166020918202929092010152600b5460405163791ac94760e01b815291169063791ac94790613ab690869060009086903090429060040161472f565b600060405180830381600087803b158015613ad057600080fd5b505af1925050508015613ae1575060015b613aec575050613ca7565b6000479050600080846080015161ffff16856040015161ffff1684613b1191906146b3565b613b1b9190614691565b90506000856080015161ffff16866000015161ffff1685613b3c91906146b3565b613b469190614691565b90506000613b54828461476b565b613b5e90866146ca565b602088015190915061ffff1615613bcc57600d546040516001600160a01b03909116906188b89083906000818181858888f193505050503d8060008114613bc1576040519150601f19603f3d011682016040523d82523d6000602084013e613bc6565b606091505b50909450505b604087015161ffff1615613c3757600e546040516001600160a01b03909116906188b89085906000818181858888f193505050503d8060008114613c2c576040519150601f19603f3d011682016040523d82523d6000602084013e613c31565b606091505b50909450505b865161ffff1615613c9f57600f546040516001600160a01b03909116906188b89084906000818181858888f193505050503d8060008114613c94576040519150601f19603f3d011682016040523d82523d6000602084013e613c99565b606091505b50909450505b505050505050505b506011805460ff19169055565b601854610100900460ff1615613d185760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610cde565b613d22828261380f565b158015613d3c5750600c546001600160a01b038281169116145b156120de576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556018805461ff001916610100179081905562010000900416613db4576018805462010000600160b01b0319163062010000021790555b6011805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020016125f2565b60008060008515613e2c57613e0887612408565b90508015613e1e5760095461ffff169150613eb5565b60085461ffff169150613eb5565b8415613e6b57613e3b88612408565b90508015613e575760095462010000900461ffff169150613eb5565b60085462010000900461ffff169150613eb5565b613e7487612408565b905080613e8757613e8488612408565b90505b8015613ea357600954640100000000900461ffff169150613eb5565b600854640100000000900461ffff1691505b6000612710613ec484876146b3565b613ece9190614691565b600a54909150600090613ef59061ffff600160301b8204811691600160401b90041661457c565b600a5461ffff91821691613f1191600160301b900416846146b3565b613f1b9190614691565b90506000613f2982846146ca565b30600090815260208190526040812080549293508392909190613f4d90849061476b565b909155505060405181815230906001600160a01b038d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3811561400d576010546001600160a01b031660009081526020819052604081208054849290613fc290849061476b565b90915550506010546040518381526001600160a01b03918216918d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b61401783886146ca565b9b9a5050505050505050505050565b8015158114612aaa57600080fd5b6000806040838503121561404757600080fd5b823561405281614026565b9150602083013561406281614026565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156140ac576140ac61406d565b604052919050565b600067ffffffffffffffff8211156140ce576140ce61406d565b5060051b60200190565b6001600160a01b0381168114612aaa57600080fd5b600082601f8301126140fe57600080fd5b8135602061411361410e836140b4565b614083565b82815260059290921b8401810191818101908684111561413257600080fd5b8286015b84811015614156578035614149816140d8565b8352918301918301614136565b509695505050505050565b6000806040838503121561417457600080fd5b823567ffffffffffffffff81111561418b57600080fd5b614197858286016140ed565b925050602083013561406281614026565b600060208083528351808285015260005b818110156141d5578581018301518582016040015282016141b9565b506000604082860101526040601f19601f8301168501019250505092915050565b803561ffff8116811461420857600080fd5b919050565b6000806000806080858703121561422357600080fd5b61422c856141f6565b935061423a602086016141f6565b9250614248604086016141f6565b9150614256606086016141f6565b905092959194509250565b6000806040838503121561427457600080fd5b823561427f816140d8565b946020939093013593505050565b60006020828403121561429f57600080fd5b81356138df816140d8565b6000806000606084860312156142bf57600080fd5b83356142ca816140d8565b925060208401356142da816140d8565b929592945050506040919091013590565b600080604083850312156142fe57600080fd5b50508035926020909101359150565b6000806040838503121561432057600080fd5b823567ffffffffffffffff8082111561433857600080fd5b614344868387016140ed565b935060209150818501358181111561435b57600080fd5b85019050601f8101861361436e57600080fd5b803561437c61410e826140b4565b81815260059190911b8201830190838101908883111561439b57600080fd5b928401925b828410156143b9578335825292840192908401906143a0565b80955050505050509250929050565b6000806000606084860312156143dd57600080fd5b6143e6846141f6565b92506143f4602085016141f6565b9150614402604085016141f6565b90509250925092565b6000806040838503121561441e57600080fd5b8235614052816140d8565b60006020828403121561443b57600080fd5b5035919050565b6000806040838503121561445557600080fd5b8235614460816140d8565b91506020830135614062816140d8565b6000806000806080858703121561448657600080fd5b8435614491816140d8565b935060208501356144a1816140d8565b925060408501356144b1816140d8565b915060608501356144c1816140d8565b939692955090935050565b600080600080608085870312156144e257600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b838110156145375781516001600160a01b031687529582019590820190600101614512565b509495945050505050565b60408152600061455560408301856144fe565b905082151560208301529392505050565b634e487b7160e01b600052601160045260246000fd5b61ffff81811683821601908082111561459757614597614566565b5092915050565b600181815b808511156145d95781600019048211156145bf576145bf614566565b808516156145cc57918102915b93841c93908002906145a3565b509250929050565b6000826145f057506001610f60565b816145fd57506000610f60565b8160018114614613576002811461461d57614639565b6001915050610f60565b60ff84111561462e5761462e614566565b50506001821b610f60565b5060208310610133831016604e8410600b841016171561465c575081810a610f60565b614666838361459e565b806000190482111561467a5761467a614566565b029392505050565b60006138df60ff8416836145e1565b6000826146ae57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610f6057610f60614566565b81810381811115610f6057610f60614566565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff810361470957614709614566565b60010192915050565b60006020828403121561472457600080fd5b81516138df816140d8565b85815284602082015260a06040820152600061474e60a08301866144fe565b6001600160a01b0394909416606083015250608001529392505050565b80820180821115610f6057610f60614566565b60006020828403121561479057600080fd5b5051919050565b6000602082840312156147a957600080fd5b81516138df8161402656fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a2646970667358221220b276d029cf21f4a0e7e102e7eb56de04d77a6f87503f617508670e25556c5bd664736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c80635bba7f5a116101f2578063b1b08f711161010d578063ee5d9c2d116100a0578063fdb78c0e1161006f578063fdb78c0e14610c1b578063fe2a088d14610c3a578063fe575a8714610c5a578063feadde9c14610c7a57600080fd5b8063ee5d9c2d14610b60578063eec2744e14610b75578063f94aa1b414610b95578063fb78680d14610bfb57600080fd5b8063c6a276c2116100dc578063c6a276c214610a60578063cf84770614610a80578063dd62ed3e14610afa578063eafb5a3c14610b4057600080fd5b8063b1b08f7114610637578063b3d514fb14610637578063b7df8b3614610a26578063bfc2fc3514610a4057600080fd5b806383672f3e116101855780638e2e2505116101545780638e2e25051461098857806392b8928b146109a857806395d89b41146109d9578063a9059cbb14610a0657600080fd5b806383672f3e14610920578063893d20e8146109405780638a63bd9b1461095e5780638a8c523c1461097357600080fd5b80636ebd0078116101c15780636ebd0078146108a057806370a08231146108b5578063715018a6146108eb57806380c581d11461090057600080fd5b80635bba7f5a146108075780635c24b074146108275780635cce86cd14610847578063649204801461088057600080fd5b806328577751116102e2578063452ed4f1116102755780634fb2e45d116102445780634fb2e45d1461076f5780634fbee1931461078f57806350a8e016146107c8578063590ffdce146107e757600080fd5b8063452ed4f1146106ff57806346ea7ac81461071f5780634ada218b146107355780634e718e481461074f57600080fd5b806332cde664116102b157806332cde6641461067f57806333251a0b1461069f57806336fddb04146106bf5780633f3cf56c146106df57600080fd5b806328577751146106215780632b28fc7a146106375780632e8fa8211461064d578063313ce5671461066357600080fd5b80630758d9241161035a57806318160ddd1161032957806318160ddd146105ac57806323b872dd146105c157806326003957146105e15780632610eaca1461060157600080fd5b80630758d9241461050e578063095ea7b31461052e5780630dcbcf1c1461055e5780630fa604e41461059757600080fd5b806305bbedb61161039657806305bbedb614610441578063069d955f1461046157806306fdde03146104b75780630712d165146104ee57600080fd5b806303fd2a45146103c85780630445b667146103fb578063044df7261461041f57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b5061041160125481565b6040519081526020016103f2565b34801561042b57600080fd5b5061043f61043a366004614034565b610c9a565b005b34801561044d57600080fd5b5061043f61045c366004614161565b610d58565b34801561046d57600080fd5b506008546104929061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103f2565b3480156104c357600080fd5b506040805180820190915260058152644b75646f6560d81b60208201525b6040516103f291906141a8565b3480156104fa57600080fd5b5061043f61050936600461420d565b610dd7565b34801561051a57600080fd5b50600b546103de906001600160a01b031681565b34801561053a57600080fd5b5061054e610549366004614261565b610f4f565b60405190151581526020016103f2565b34801561056a57600080fd5b5061054e61057936600461428d565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156105a357600080fd5b50610411610f66565b3480156105b857600080fd5b50610411610f86565b3480156105cd57600080fd5b5061054e6105dc3660046142aa565b610fa2565b3480156105ed57600080fd5b5061043f6105fc3660046142eb565b61101a565b34801561060d57600080fd5b5061043f61061c36600461430d565b611163565b34801561062d57600080fd5b5061041160155481565b34801561064357600080fd5b506104116107d081565b34801561065957600080fd5b5061041160135481565b34801561066f57600080fd5b50604051601281526020016103f2565b34801561068b57600080fd5b5061043f61069a3660046143c8565b6112ca565b3480156106ab57600080fd5b5061043f6106ba36600461428d565b61142a565b3480156106cb57600080fd5b5061043f6106da36600461440b565b6114d5565b3480156106eb57600080fd5b5061043f6106fa3660046142eb565b611548565b34801561070b57600080fd5b50600c546103de906001600160a01b031681565b34801561072b57600080fd5b50610411610bb881565b34801561074157600080fd5b5060185461054e9060ff1681565b34801561075b57600080fd5b5061043f61076a366004614429565b611692565b34801561077b57600080fd5b5061043f61078a36600461428d565b611730565b34801561079b57600080fd5b5061054e6107aa36600461428d565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107d457600080fd5b5060185461054e90610100900460ff1681565b3480156107f357600080fd5b5061043f61080236600461440b565b611932565b34801561081357600080fd5b5061043f610822366004614442565b6119a5565b34801561083357600080fd5b5061043f61084236600461428d565b611a1b565b34801561085357600080fd5b5061054e61086236600461428d565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561088c57600080fd5b5061043f61089b366004614429565b611af5565b3480156108ac57600080fd5b50610411611ea5565b3480156108c157600080fd5b506104116108d036600461428d565b6001600160a01b031660009081526020819052604090205490565b3480156108f757600080fd5b5061043f611ec0565b34801561090c57600080fd5b5061043f61091b36600461440b565b611f6d565b34801561092c57600080fd5b5061043f61093b366004614470565b6120e2565b34801561094c57600080fd5b50601b546001600160a01b03166103de565b34801561096a57600080fd5b5061054e61217a565b34801561097f57600080fd5b5061043f6121e5565b34801561099457600080fd5b5061054e6109a336600461428d565b612408565b3480156109b457600080fd5b506009546104929061ffff808216916201000081048216916401000000009091041683565b3480156109e557600080fd5b506040805180820190915260048152634b444f4560e01b60208201526104e1565b348015610a1257600080fd5b5061054e610a21366004614261565b612540565b348015610a3257600080fd5b5060145461054e9060ff1681565b348015610a4c57600080fd5b5061043f610a5b366004614034565b612557565b348015610a6c57600080fd5b5061043f610a7b36600461428d565b6125fe565b348015610a8c57600080fd5b50600a54610ac59061ffff808216916201000081048216916401000000008204811691600160301b8104821691600160401b9091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103f2565b348015610b0657600080fd5b50610411610b15366004614442565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b4c57600080fd5b5061043f610b5b36600461428d565b61267f565b348015610b6c57600080fd5b5061043f6129d1565b348015610b8157600080fd5b5061043f610b9036600461440b565b612aad565b348015610ba157600080fd5b50600d54600e54600f54601054610bc8936001600160a01b03908116938116928116911684565b604080516001600160a01b03958616815293851660208501529184169183019190915290911660608201526080016103f2565b348015610c0757600080fd5b5061043f610c163660046144cc565b612b36565b348015610c2757600080fd5b5060115461054e90610100900460ff1681565b348015610c4657600080fd5b5061043f610c553660046143c8565b612dfb565b348015610c6657600080fd5b5061054e610c7536600461428d565b612f5b565b348015610c8657600080fd5b5061043f610c9536600461440b565b612fd0565b601b546001600160a01b03163314610ce75760405162461bcd60e51b815260206004820152601160248201526000805160206147b583398151915260448201526064015b60405180910390fd5b60185460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610d3c57600080fd5b505af1158015610d50573d6000803e3d6000fd5b505050505050565b601b546001600160a01b03163314610da05760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6018546040516302ddf6db60e11b8152620100009091046001600160a01b0316906305bbedb690610d229085908590600401614542565b601b546001600160a01b03163314610e1f5760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b600a805461ffff86811663ffffffff199092169190911762010000868316021767ffffffff0000000019166401000000008583160267ffff000000000000191617600160301b9184169190910217905581610e7a848661457c565b610e84919061457c565b600a805469ffff00000000000000001916600160401b61ffff93841602179055600854600091610ebd916201000081048216911661457c565b600a5461ffff91821692508291610ee691600160301b8104821691600160401b9091041661457c565b61ffff161115610f485760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610cde565b5050505050565b6000610f5c338484613043565b5060015b92915050565b6000610f746012600a614682565b601754610f819190614691565b905090565b6000610f946012600a614682565b610f8190633b9aca006146b3565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914611007576001600160a01b0384166000908152600360209081526040808320338452909152812080548492906110019084906146ca565b90915550505b61101284848461313c565b949350505050565b601b546001600160a01b031633146110625760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b60646110706012600a614682565b61107e90633b9aca006146b3565b6110889190614691565b81836110966012600a614682565b6110a490633b9aca006146b3565b6110ae91906146b3565b6110b89190614691565b101561112c5760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610cde565b808261113a6012600a614682565b61114890633b9aca006146b3565b61115291906146b3565b61115c9190614691565b6017555050565b601b546001600160a01b031633146111ab5760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b80518251146111fc5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610cde565b60005b82518160ff1610156112c557818160ff1681518110611220576112206146dd565b6020026020010151611247336001600160a01b031660009081526020819052604090205490565b101561125257600080fd5b6112b233848360ff168151811061126b5761126b6146dd565b60200260200101516012600a6112819190614682565b858560ff1681518110611296576112966146dd565b60200260200101516112a891906146b3565b600080600161355a565b50806112bd816146f3565b9150506111ff565b505050565b601b546001600160a01b031633146113125760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6107d08361ffff161115801561132e57506107d08261ffff1611155b801561134057506107d08161ffff1611155b61138c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610cde565b610bb8611399838561457c565b61ffff1611156113eb5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610cde565b6008805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b601b546001600160a01b031633146114725760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6018546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b906024015b600060405180830381600087803b1580156114c157600080fd5b505af1158015610f48573d6000803e3d6000fd5b601b546001600160a01b0316331461151d5760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b601b546001600160a01b031633146115905760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6103e861159f6012600a614682565b6115ad90633b9aca006146b3565b6115b79190614691565b81836115c56012600a614682565b6115d390633b9aca006146b3565b6115dd91906146b3565b6115e79190614691565b101561165b5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610cde565b80826116696012600a614682565b61167790633b9aca006146b3565b61168191906146b3565b61168b9190614691565b6016555050565b601b546001600160a01b031633146116da5760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b60c881111561172b5760405162461bcd60e51b815260206004820152601460248201527f43616e6e6f74207365742061626f76652032252e0000000000000000000000006044820152606401610cde565b601555565b601b546001600160a01b031633146117785760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6001600160a01b0381166117f45760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cde565b61deac196001600160a01b038216016118755760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cde565b601b5461188c906001600160a01b03166000611932565b611897816001611932565b601b546001600160a01b0316600090815260208190526040902054156118e057601b546001600160a01b03166000818152602081905260409020546118de919083906112a8565b505b601b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601b546001600160a01b0316331461197a5760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b601b546001600160a01b031633146119ed5760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b601980546001600160a01b039384166001600160a01b031991821617909155601a8054929093169116179055565b601b546001600160a01b03163314611a635760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b60185460ff1615611a7357600080fd5b306001600160a01b03821603611acb5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610cde565b601880546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6040805160a081018252600a5461ffff8082168352620100008204811660208401526401000000008204811693830193909352600160301b810483166060830152600160401b900490911660808201819052600003611b52575050565b306000908152600360209081526040808320600b546001600160a01b0316845290915290205460001914611bab57306000908152600360209081526040808320600b546001600160a01b03168452909152902060001990555b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611be057611be06146dd565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611c39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5d9190614712565b81600181518110611c7057611c706146dd565b6001600160a01b039283166020918202929092010152600b5460405163791ac94760e01b815291169063791ac94790611cb690869060009086903090429060040161472f565b600060405180830381600087803b158015611cd057600080fd5b505af1158015611ce4573d6000803e3d6000fd5b505050506000479050600080846080015161ffff16856040015161ffff1684611d0d91906146b3565b611d179190614691565b90506000856080015161ffff16866000015161ffff1685611d3891906146b3565b611d429190614691565b90506000611d50828461476b565b611d5a90866146ca565b602088015190915061ffff1615611dc857600d546040516001600160a01b03909116906188b89083906000818181858888f193505050503d8060008114611dbd576040519150601f19603f3d011682016040523d82523d6000602084013e611dc2565b606091505b50909450505b604087015161ffff1615611e3357600e546040516001600160a01b03909116906188b89085906000818181858888f193505050503d8060008114611e28576040519150601f19603f3d011682016040523d82523d6000602084013e611e2d565b606091505b50909450505b865161ffff1615611e9b57600f546040516001600160a01b03909116906188b89084906000818181858888f193505050503d8060008114611e90576040519150601f19603f3d011682016040523d82523d6000602084013e611e95565b606091505b50909450505b5050505050505050565b6000611eb36012600a614682565b601654610f819190614691565b601b546001600160a01b03163314611f085760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b601b54611f1f906001600160a01b03166000611932565b601b80546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b601b546001600160a01b03163314611fb55760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b801515600003612018576001600160a01b03828116600081815260016020526040808220805460ff1916905560185490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401610d22565b6002541561207f576203f4806002544261203291906146ca565b1161207f5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610cde565b6001600160a01b03828116600081815260016020819052604091829020805460ff1916821790554260025560185491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401610d22565b5050565b601b546001600160a01b0316331461212a5760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b600d80546001600160a01b039586166001600160a01b031991821617909155600f805494861694821694909417909355600e80549285169284169290921790915560108054919093169116179055565b601b546000906001600160a01b031633146121c55760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b600b546121df9030906001600160a01b0316600019613043565b50600190565b601b546001600160a01b0316331461222d5760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b60185460ff16156122805760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cde565b601854610100900460ff166122d75760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610cde565b6018546201000090046001600160a01b0316612307576018805462010000600160b01b0319163062010000021790555b601854600c54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561237957600080fd5b505af192505050801561238a575060015b506018805460ff19166001179055600c546001600160a01b0316600090815260208190526040902054612710906123c290600f6146b3565b6123cc9190614691565b601255600c546001600160a01b0316600090815260208190526040902054612710906123f990601e6146b3565b6124039190614691565b601355565b60195460009081906001600160a01b03161561249f576019546040516370a0823160e01b81526001600160a01b038581166004830152909116906370a0823190602401602060405180830381865afa925050508015612484575060408051601f3d908101601f191682019092526124819181019061477e565b60015b1561249f576000811161249857600061249b565b60015b9150505b601a546001600160a01b0316158015906124b7575080155b15610f6057601a546040516370a0823160e01b81526001600160a01b038581166004830152909116906370a0823190602401602060405180830381865afa925050508015612522575060408051601f3d908101601f1916820190925261251f9181019061477e565b60015b15610f605760008111612536576000611012565b6001949350505050565b600061254d33848461313c565b5060019392505050565b601b546001600160a01b0316331461259f5760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6011805461ff001916610100841515908102919091179091556014805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b601b546001600160a01b031633146126465760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6018546040516363513b6160e11b81526001600160a01b038381166004830152620100009092049091169063c6a276c2906024016114a7565b601b546001600160a01b031633146126c75760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561270c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127309190614712565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561277d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a19190614712565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156127ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128109190614712565b90506001600160a01b03811661298957816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561285e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128829190614712565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f39190614712565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612940573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129649190614712565b600c80546001600160a01b0319166001600160a01b03929092169190911790556129a5565b600c80546001600160a01b0319166001600160a01b0383161790555b600b80546001600160a01b0319166001600160a01b0384169081179091556112c5903090600019613043565b601b546001600160a01b03163314612a195760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b601854610100900460ff1615612a715760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610cde565b601b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612aaa573d6000803e3d6000fd5b50565b601b546001600160a01b03163314612af55760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6018546040516377613a2760e11b81526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610d22565b601b546001600160a01b03163314612b7e5760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b8284612b8c6012600a614682565b612b9a90633b9aca006146b3565b612ba491906146b3565b612bae9190614691565b601290815581908390612bc290600a614682565b612bd090633b9aca006146b3565b612bda91906146b3565b612be49190614691565b60138190556012541115612c445760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610cde565b600c546001600160a01b031660009081526020819052604090205461271090612c6e9060966146b3565b612c789190614691565b6013541115612cd55760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610cde565b620f4240612ce56012600a614682565b612cf390633b9aca006146b3565b612cfd9190614691565b6013541015612d655760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610cde565b620f4240612d756012600a614682565b612d8390633b9aca006146b3565b612d8d9190614691565b6012541015612df55760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610cde565b50505050565b601b546001600160a01b03163314612e435760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6107d08361ffff1611158015612e5f57506107d08261ffff1611155b8015612e7157506107d08161ffff1611155b612ebd5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610cde565b610bb8612eca838561457c565b61ffff161115612f1c5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610cde565b6009805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b60185460405163fe575a8760e01b81526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612fac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f609190614797565b601b546001600160a01b031633146130185760405162461bcd60e51b815260206004820152601160248201526000805160206147b58339815191526044820152606401610cde565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b03831661308f5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610cde565b6001600160a01b0382166130db5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610cde565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166131a25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cde565b6001600160a01b0383166132045760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cde565b600082116132665760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610cde565b6001600160a01b0384166000908152600160205260408120548190819060ff161561329457600192506132c2565b6001600160a01b03861660009081526001602052604090205460ff16156132be57600191506132c2565b5060015b6132cc878761380f565b156134aa5760185460ff166133235760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610cde565b828061332c5750815b156133db576001600160a01b03871660009081526007602052604090205460ff1615801561337357506001600160a01b03861660009081526007602052604090205460ff16155b156133db576016548511156133db5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610cde565b600b546001600160a01b038781169116148015906133f7575081155b156134aa576001600160a01b03861660009081526007602052604090205460ff166134aa576017548561343f886001600160a01b031660009081526020819052604090205490565b613449919061476b565b11156134aa5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610cde565b81156135415760115460ff1661354157601154610100900460ff16156135415730600090815260208190526040902054601254811061353f5760135460145460ff161561352957601554600c546001600160a01b03166000908152602081905260409020546127109161351c916146b3565b6135269190614691565b90505b808210613534578091505b61353d826138e6565b505b505b61354f87878786868661355a565b979650505050505050565b601854600090610100900460ff1661363f576135768787613cb4565b601854610100900460ff161580156135935750613593878761380f565b80156135b857506001600160a01b03871660009081526005602052604090205460ff16155b80156135dd57506001600160a01b03861660009081526005602052604090205460ff16155b80156135e7575081155b1561363f5760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610cde565b613649878761380f565b156136e35760185460405163ecd07a5360e01b81526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af19250505080156136cc575060408051601f3d908101601f191682019092526136c991810190614797565b60015b6136d557600080fd5b9050806136e157600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff168061372557506001600160a01b03871660009081526006602052604090205460ff165b1561372e575060005b6001600160a01b038816600090815260208190526040812080548892906137569084906146ca565b9091555060009050816137695786613776565b613776898988888b613df4565b9050806000808a6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546137ac919061476b565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137f891815260200190565b60405180910390a350600198975050505050505050565b601b546000906001600160a01b0384811691161480159061383e5750601b546001600160a01b03838116911614155b80156138555750601b546001600160a01b03163214155b801561387a57506001600160a01b03821660009081526004602052604090205460ff16155b801561389f57506001600160a01b03831660009081526004602052604090205460ff16155b80156138b657506001600160a01b03821661dead14155b80156138ca57506001600160a01b03821615155b80156138df57506001600160a01b0383163014155b9392505050565b6011805460ff191660011790556040805160a081018252600a5461ffff8082168352620100008204811660208401526401000000008204811693830193909352600160301b810483166060830152600160401b9004909116608082018190526000036139525750613ca7565b306000908152600360209081526040808320600b546001600160a01b03168452909152902054600019146139ab57306000908152600360209081526040808320600b546001600160a01b03168452909152902060001990555b60408051600280825260608201835260009260208301908036833701905050905030816000815181106139e0576139e06146dd565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a5d9190614712565b81600181518110613a7057613a706146dd565b6001600160a01b039283166020918202929092010152600b5460405163791ac94760e01b815291169063791ac94790613ab690869060009086903090429060040161472f565b600060405180830381600087803b158015613ad057600080fd5b505af1925050508015613ae1575060015b613aec575050613ca7565b6000479050600080846080015161ffff16856040015161ffff1684613b1191906146b3565b613b1b9190614691565b90506000856080015161ffff16866000015161ffff1685613b3c91906146b3565b613b469190614691565b90506000613b54828461476b565b613b5e90866146ca565b602088015190915061ffff1615613bcc57600d546040516001600160a01b03909116906188b89083906000818181858888f193505050503d8060008114613bc1576040519150601f19603f3d011682016040523d82523d6000602084013e613bc6565b606091505b50909450505b604087015161ffff1615613c3757600e546040516001600160a01b03909116906188b89085906000818181858888f193505050503d8060008114613c2c576040519150601f19603f3d011682016040523d82523d6000602084013e613c31565b606091505b50909450505b865161ffff1615613c9f57600f546040516001600160a01b03909116906188b89084906000818181858888f193505050503d8060008114613c94576040519150601f19603f3d011682016040523d82523d6000602084013e613c99565b606091505b50909450505b505050505050505b506011805460ff19169055565b601854610100900460ff1615613d185760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610cde565b613d22828261380f565b158015613d3c5750600c546001600160a01b038281169116145b156120de576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556018805461ff001916610100179081905562010000900416613db4576018805462010000600160b01b0319163062010000021790555b6011805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020016125f2565b60008060008515613e2c57613e0887612408565b90508015613e1e5760095461ffff169150613eb5565b60085461ffff169150613eb5565b8415613e6b57613e3b88612408565b90508015613e575760095462010000900461ffff169150613eb5565b60085462010000900461ffff169150613eb5565b613e7487612408565b905080613e8757613e8488612408565b90505b8015613ea357600954640100000000900461ffff169150613eb5565b600854640100000000900461ffff1691505b6000612710613ec484876146b3565b613ece9190614691565b600a54909150600090613ef59061ffff600160301b8204811691600160401b90041661457c565b600a5461ffff91821691613f1191600160301b900416846146b3565b613f1b9190614691565b90506000613f2982846146ca565b30600090815260208190526040812080549293508392909190613f4d90849061476b565b909155505060405181815230906001600160a01b038d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3811561400d576010546001600160a01b031660009081526020819052604081208054849290613fc290849061476b565b90915550506010546040518381526001600160a01b03918216918d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b61401783886146ca565b9b9a5050505050505050505050565b8015158114612aaa57600080fd5b6000806040838503121561404757600080fd5b823561405281614026565b9150602083013561406281614026565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156140ac576140ac61406d565b604052919050565b600067ffffffffffffffff8211156140ce576140ce61406d565b5060051b60200190565b6001600160a01b0381168114612aaa57600080fd5b600082601f8301126140fe57600080fd5b8135602061411361410e836140b4565b614083565b82815260059290921b8401810191818101908684111561413257600080fd5b8286015b84811015614156578035614149816140d8565b8352918301918301614136565b509695505050505050565b6000806040838503121561417457600080fd5b823567ffffffffffffffff81111561418b57600080fd5b614197858286016140ed565b925050602083013561406281614026565b600060208083528351808285015260005b818110156141d5578581018301518582016040015282016141b9565b506000604082860101526040601f19601f8301168501019250505092915050565b803561ffff8116811461420857600080fd5b919050565b6000806000806080858703121561422357600080fd5b61422c856141f6565b935061423a602086016141f6565b9250614248604086016141f6565b9150614256606086016141f6565b905092959194509250565b6000806040838503121561427457600080fd5b823561427f816140d8565b946020939093013593505050565b60006020828403121561429f57600080fd5b81356138df816140d8565b6000806000606084860312156142bf57600080fd5b83356142ca816140d8565b925060208401356142da816140d8565b929592945050506040919091013590565b600080604083850312156142fe57600080fd5b50508035926020909101359150565b6000806040838503121561432057600080fd5b823567ffffffffffffffff8082111561433857600080fd5b614344868387016140ed565b935060209150818501358181111561435b57600080fd5b85019050601f8101861361436e57600080fd5b803561437c61410e826140b4565b81815260059190911b8201830190838101908883111561439b57600080fd5b928401925b828410156143b9578335825292840192908401906143a0565b80955050505050509250929050565b6000806000606084860312156143dd57600080fd5b6143e6846141f6565b92506143f4602085016141f6565b9150614402604085016141f6565b90509250925092565b6000806040838503121561441e57600080fd5b8235614052816140d8565b60006020828403121561443b57600080fd5b5035919050565b6000806040838503121561445557600080fd5b8235614460816140d8565b91506020830135614062816140d8565b6000806000806080858703121561448657600080fd5b8435614491816140d8565b935060208501356144a1816140d8565b925060408501356144b1816140d8565b915060608501356144c1816140d8565b939692955090935050565b600080600080608085870312156144e257600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b838110156145375781516001600160a01b031687529582019590820190600101614512565b509495945050505050565b60408152600061455560408301856144fe565b905082151560208301529392505050565b634e487b7160e01b600052601160045260246000fd5b61ffff81811683821601908082111561459757614597614566565b5092915050565b600181815b808511156145d95781600019048211156145bf576145bf614566565b808516156145cc57918102915b93841c93908002906145a3565b509250929050565b6000826145f057506001610f60565b816145fd57506000610f60565b8160018114614613576002811461461d57614639565b6001915050610f60565b60ff84111561462e5761462e614566565b50506001821b610f60565b5060208310610133831016604e8410600b841016171561465c575081810a610f60565b614666838361459e565b806000190482111561467a5761467a614566565b029392505050565b60006138df60ff8416836145e1565b6000826146ae57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610f6057610f60614566565b81810381811115610f6057610f60614566565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff810361470957614709614566565b60010192915050565b60006020828403121561472457600080fd5b81516138df816140d8565b85815284602082015260a06040820152600061474e60a08301866144fe565b6001600160a01b0394909416606083015250608001529392505050565b80820180821115610f6057610f60614566565b60006020828403121561479057600080fd5b5051919050565b6000602082840312156147a957600080fd5b81516138df8161402656fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a2646970667358221220b276d029cf21f4a0e7e102e7eb56de04d77a6f87503f617508670e25556c5bd664736f6c63430008110033

Deployed Bytecode Sourcemap

4645:26466:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6430:73;;;;;;;;;;;;6461:42;6430:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;6430:73:0;;;;;;;;7108:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;7108:28:0;245:177:1;16635:157:0;;;;;;;;;;-1:-1:-1;16635:157:0;;;;;:::i;:::-;;:::i;:::-;;15990:174;;;;;;;;;;-1:-1:-1;15990:174:0;;;;;:::i;:::-;;:::i;5684:116::-;;;;;;;;;;-1:-1:-1;5684:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;3120:6:1;3153:15;;;3135:34;;3205:15;;;3200:2;3185:18;;3178:43;3257:15;;3237:18;;;3230:43;;;;3098:2;3083:18;5684:116:0;2914:365:1;11797:80:0;;;;;;;;;;-1:-1:-1;11869:5:0;;;;;;;;;;;;-1:-1:-1;;;11869:5:0;;;;11797:80;;;;;;;:::i;17815:502::-;;;;;;;;;;-1:-1:-1;17815:502:0;;;;;:::i;:::-;;:::i;6369:26::-;;;;;;;;;;-1:-1:-1;6369:26:0;;;;-1:-1:-1;;;;;6369:26:0;;;12407:159;;;;;;;;;;-1:-1:-1;12407:159:0;;;;;:::i;:::-;;:::i;:::-;;;5140:14:1;;5133:22;5115:41;;5103:2;5088:18;12407:159:0;4975:187:1;15177:140:0;;;;;;;;;;-1:-1:-1;15177:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;15275:34:0;15251:4;15275:34;;;:25;:34;;;;;;;;;15177:140;19354:112;;;;;;;;;;;;;:::i;11532:83::-;;;;;;;;;;;;;:::i;13073:306::-;;;;;;;;;;-1:-1:-1;13073:306:0;;;;;:::i;:::-;;:::i;18968:264::-;;;;;;;;;;-1:-1:-1;18968:264:0;;;;;:::i;:::-;;:::i;27360:411::-;;;;;;;;;;-1:-1:-1;27360:411:0;;;;;:::i;:::-;;:::i;7216:28::-;;;;;;;;;;;;;;;;6113:42;;;;;;;;;;;;6151:4;6113:42;;7143:25;;;;;;;;;;;;;;;;11621:80;;;;;;;;;;-1:-1:-1;11621:80:0;;5331:2;7418:36:1;;7406:2;7391:18;11621:80:0;7276:184:1;16800:488:0;;;;;;;;;;-1:-1:-1;16800:488:0;;;;;:::i;:::-;;:::i;16517:110::-;;;;;;;;;;-1:-1:-1;16517:110:0;;;;;:::i;:::-;;:::i;15325:140::-;;;;;;;;;;-1:-1:-1;15325:140:0;;;;;:::i;:::-;;:::i;18691:269::-;;;;;;;;;;-1:-1:-1;18691:269:0;;;;;:::i;:::-;;:::i;6402:21::-;;;;;;;;;;-1:-1:-1;6402:21:0;;;;-1:-1:-1;;;;;6402:21:0;;;6266:46;;;;;;;;;;;;6308:4;6266:46;;7331:34;;;;;;;;;;-1:-1:-1;7331:34:0;;;;;;;;20181:215;;;;;;;;;;-1:-1:-1;20181:215:0;;;;;:::i;:::-;;:::i;10255:654::-;;;;;;;;;;-1:-1:-1;10255:654:0;;;;;:::i;:::-;;:::i;15042:127::-;;;;;;;;;;-1:-1:-1;15042:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;15133:28:0;15109:4;15133:28;;;:19;:28;;;;;;;;;15042:127;7372:36;;;;;;;;;;-1:-1:-1;7372:36:0;;;;;;;;;;;15473:134;;;;;;;;;;-1:-1:-1;15473:134:0;;;;;:::i;:::-;;:::i;14677:217::-;;;;;;;;;;-1:-1:-1;14677:217:0;;;;;:::i;:::-;;:::i;14447:222::-;;;;;;;;;;-1:-1:-1;14447:222:0;;;;;:::i;:::-;;:::i;14902:132::-;;;;;;;;;;-1:-1:-1;14902:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;14996:30:0;14972:4;14996:30;;;:21;:30;;;;;;;;;14902:132;24547:1485;;;;;;;;;;-1:-1:-1;24547:1485:0;;;;;:::i;:::-;;:::i;19240:106::-;;;;;;;;;;;;;:::i;12109:117::-;;;;;;;;;;-1:-1:-1;12109:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;12202:16:0;12175:7;12202:16;;;;;;;;;;;;12109:117;10917:225;;;;;;;;;;;;;:::i;13935:504::-;;;;;;;;;;-1:-1:-1;13935:504:0;;;;;:::i;:::-;;:::i;18325:358::-;;;;;;;;;;-1:-1:-1;18325:358:0;;;;;:::i;:::-;;:::i;11883:79::-;;;;;;;;;;-1:-1:-1;11953:6:0;;-1:-1:-1;;;;;11953:6:0;11883:79;;12892:173;;;;;;;;;;;;;:::i;26610:552::-;;;;;;;;;;;;;:::i;28942:621::-;;;;;;;;;;-1:-1:-1;28942:621:0;;;;;:::i;:::-;;:::i;5809:121::-;;;;;;;;;;-1:-1:-1;5809:121:0;;;;;;;;;;;;;;;;;;;;;;11707:84;;;;;;;;;;-1:-1:-1;11781:7:0;;;;;;;;;;;;-1:-1:-1;;;11781:7:0;;;;11707:84;;12234:165;;;;;;;;;;-1:-1:-1;12234:165:0;;;;;:::i;:::-;;:::i;7175:34::-;;;;;;;;;;-1:-1:-1;7175:34:0;;;;;;;;20404:263;;;;;;;;;;-1:-1:-1;20404:263:0;;;;;:::i;:::-;;:::i;16172:202::-;;;;;;;;;;-1:-1:-1;16172:202:0;;;;;:::i;:::-;;:::i;5939:165::-;;;;;;;;;;-1:-1:-1;5939:165:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5939:165:0;;;;;-1:-1:-1;;;5939:165:0;;;;;;;;;;9730:6:1;9763:15;;;9745:34;;9815:15;;;9810:2;9795:18;;9788:43;9867:15;;;9847:18;;;9840:43;;;;9919:15;;9914:2;9899:18;;9892:43;9972:15;;;9966:3;9951:19;;9944:44;9707:3;9692:19;5939:165:0;9471:523:1;11968:133:0;;;;;;;;;;-1:-1:-1;11968:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;12070:19:0;;;12052:7;12070:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;11968:133;13387:540;;;;;;;;;;-1:-1:-1;13387:540:0;;;;;:::i;:::-;;:::i;27170:182::-;;;;;;;;;;;;;:::i;15835:147::-;;;;;;;;;;-1:-1:-1;15835:147:0;;;;;:::i;:::-;;:::i;6687:344::-;;;;;;;;;;-1:-1:-1;6687:344:0;;;;;;;;;;-1:-1:-1;;;;;6687:344:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10373:15:1;;;10355:34;;10425:15;;;10420:2;10405:18;;10398:43;10477:15;;;10457:18;;;10450:43;;;;10529:15;;;10524:2;10509:18;;10502:43;10281:3;10266:19;6687:344:0;9999:552:1;19474:699:0;;;;;;;;;;-1:-1:-1;19474:699:0;;;;;:::i;:::-;;:::i;7062:39::-;;;;;;;;;;-1:-1:-1;7062:39:0;;;;;;;;;;;17296:511;;;;;;;;;;-1:-1:-1;17296:511:0;;;;;:::i;:::-;;:::i;16382:127::-;;;;;;;;;;-1:-1:-1;16382:127:0;;;;;:::i;:::-;;:::i;15615:148::-;;;;;;;;;;-1:-1:-1;15615:148:0;;;;;:::i;:::-;;:::i;16635:157::-;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;;;;;;;;;16732:11:::1;::::0;:52:::1;::::0;-1:-1:-1;;;16732:52:0;;11479:14:1;;11472:22;16732:52:0::1;::::0;::::1;11454:41:1::0;11538:14;;11531:22;11511:18;;;11504:50;16732:11:0;;;::::1;-1:-1:-1::0;;;;;16732:11:0::1;::::0;:26:::1;::::0;11427:18:1;;16732:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16635:157:::0;;:::o;15990:174::-;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;16098:11:::1;::::0;:58:::1;::::0;-1:-1:-1;;;16098:58:0;;:11;;;::::1;-1:-1:-1::0;;;;;16098:11:0::1;::::0;:39:::1;::::0;:58:::1;::::0;16138:8;;16148:7;;16098:58:::1;;;:::i;17815:502::-:0;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;17933:7:::1;:29:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;17973:29:0;;;;;;;;;;::::1;;;-1:-1:-1::0;;18057:19:0;18013:33;;;::::1;;-1:-1:-1::0;;18057:19:0;;-1:-1:-1;;;18057:19:0;;::::1;::::0;;;::::1;;::::0;;18013:33;18107:21:::1;17973:29:::0;17933;18107:21:::1;:::i;:::-;:35;;;;:::i;:::-;18087:7;:55:::0;;-1:-1:-1;;18087:55:0::1;-1:-1:-1::0;;;18087:55:0::1;::::0;;::::1;;;::::0;;:17:::1;18188::::0;-1:-1:-1;;18169:36:0::1;::::0;18188:17;;::::1;::::0;::::1;::::0;18169:16:::1;:36;:::i;:::-;18244:7;:12:::0;18153:52:::1;::::0;;::::1;::::0;-1:-1:-1;18153:52:0;;18224:32:::1;::::0;-1:-1:-1;;;18244:12:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;18224:17:0;;::::1;;:32;:::i;:::-;:41;;;;18216:93;;;::::0;-1:-1:-1;;;18216:93:0;;12908:2:1;18216:93:0::1;::::0;::::1;12890:21:1::0;12947:2;12927:18;;;12920:30;12986:34;12966:18;;;12959:62;-1:-1:-1;;;13037:18:1;;;13030:37;13084:19;;18216:93:0::1;12706:403:1::0;18216:93:0::1;17922:395;17815:502:::0;;;;:::o;12407:159::-;12482:4;12499:37;12508:10;12520:7;12529:6;12499:8;:37::i;:::-;-1:-1:-1;12554:4:0;12407:159;;;;;:::o;19354:112::-;19399:7;19444:13;5331:2;19444;:13;:::i;:::-;19426:14;;:32;;;;:::i;:::-;19419:39;;19354:112;:::o;11532:83::-;11587:7;5394:13;5331:2;5394;:13;:::i;:::-;5377:30;;5183:13;5377:30;:::i;13073:306::-;-1:-1:-1;;;;;13194:19:0;;13173:4;13194:19;;;:11;:19;;;;;;;;13214:10;13194:31;;;;;;;;-1:-1:-1;;13194:52:0;13190:126;;-1:-1:-1;;;;;13263:19:0;;;;;;:11;:19;;;;;;;;13283:10;13263:31;;;;;;;:41;;13298:6;;13263:19;:41;;13298:6;;13263:41;:::i;:::-;;;;-1:-1:-1;;13190:126:0;13335:36;13345:6;13353:9;13364:6;13335:9;:36::i;:::-;13328:43;13073:306;-1:-1:-1;;;;13073:306:0:o;18968:264::-;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;19110:3:::1;5394:13;5331:2;5394;:13;:::i;:::-;5377:30;::::0;5183:13:::1;5377:30;:::i;:::-;19100:13;;;;:::i;:::-;19088:7:::0;19077;5394:13:::1;5331:2;5394;:13;:::i;:::-;5377:30;::::0;5183:13:::1;5377:30;:::i;:::-;19067:17;;;;:::i;:::-;19066:29;;;;:::i;:::-;:48;;19058:109;;;::::0;-1:-1:-1;;;19058:109:0;;15227:2:1;19058:109:0::1;::::0;::::1;15209:21:1::0;15266:2;15246:18;;;15239:30;15305:34;15285:18;;;15278:62;15376:18;15356;;;15349:46;15412:19;;19058:109:0::1;15025:412:1::0;19058:109:0::1;19217:7:::0;19206;5394:13:::1;5331:2;5394;:13;:::i;:::-;5377:30;::::0;5183:13:::1;5377:30;:::i;:::-;19196:17;;;;:::i;:::-;19195:29;;;;:::i;:::-;19178:14;:46:::0;-1:-1:-1;;18968:264:0:o;27360:411::-;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;27495:7:::1;:14;27476:8;:15;:33;27468:67;;;::::0;-1:-1:-1;;;27468:67:0;;15644:2:1;27468:67:0::1;::::0;::::1;15626:21:1::0;15683:2;15663:18;;;15656:30;15722:23;15702:18;;;15695:51;15763:18;;27468:67:0::1;15442:345:1::0;27468:67:0::1;27551:7;27546:218;27568:8;:15;27564:1;:19;;;27546:218;;;27638:7;27646:1;27638:10;;;;;;;;;;:::i;:::-;;;;;;;27613:21;27623:10;-1:-1:-1::0;;;;;12202:16:0;12175:7;12202:16;;;;;;;;;;;;12109:117;27613:21:::1;:35;;27605:44;;;::::0;::::1;;27664:88;27682:10;27694:8;27703:1;27694:11;;;;;;;;;;:::i;:::-;;;;;;;5331:2;27718;:13;;;;:::i;:::-;27707:7;27715:1;27707:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;27733:5;27740::::0;27747:4:::1;27664:17;:88::i;:::-;-1:-1:-1::0;27585:3:0;::::1;::::0;::::1;:::i;:::-;;;;27546:218;;;;27360:411:::0;;:::o;16800:488::-;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;6151:4:::1;16907:6;:21;;;;:65;;;;;6201:4;16949:7;:23;;;;16907:65;:117;;;;;6255:4;16993:11;:31;;;;16907:117;16899:170;;;::::0;-1:-1:-1;;;16899:170:0;;16306:2:1;16899:170:0::1;::::0;::::1;16288:21:1::0;16345:2;16325:18;;;16318:30;16384:25;16364:18;;;16357:53;16427:18;;16899:170:0::1;16104:347:1::0;16899:170:0::1;6308:4;17088:16;17097:7:::0;17088:6;:16:::1;:::i;:::-;:35;;;;17080:80;;;::::0;-1:-1:-1;;;17080:80:0;;16658:2:1;17080:80:0::1;::::0;::::1;16640:21:1::0;;;16677:18;;;16670:30;16736:34;16716:18;;;16709:62;16788:18;;17080:80:0::1;16456:356:1::0;17080:80:0::1;17171:9;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;17207:27:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;17245:35:0::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;16800:488::o;16517:110::-;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;16586:11:::1;::::0;:33:::1;::::0;-1:-1:-1;;;16586:33:0;;-1:-1:-1;;;;;178:55:1;;;16586:33:0::1;::::0;::::1;160:74:1::0;16586:11:0;;;::::1;::::0;;::::1;::::0;:24:::1;::::0;133:18:1;;16586:33:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;15325:140:::0;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;-1:-1:-1;;;;;15417:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;15417:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15325:140::o;18691:269::-;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;18832:4:::1;5394:13;5331:2;5394;:13;:::i;:::-;5377:30;::::0;5183:13:::1;5377:30;:::i;:::-;18822:14;;;;:::i;:::-;18810:7:::0;18799;5394:13:::1;5331:2;5394;:13;:::i;:::-;5377:30;::::0;5183:13:::1;5377:30;:::i;:::-;18789:17;;;;:::i;:::-;18788:29;;;;:::i;:::-;:49;;18780:117;;;::::0;-1:-1:-1;;;18780:117:0;;17019:2:1;18780:117:0::1;::::0;::::1;17001:21:1::0;17058:2;17038:18;;;17031:30;17097:34;17077:18;;;17070:62;17168:25;17148:18;;;17141:53;17211:19;;18780:117:0::1;16817:419:1::0;18780:117:0::1;18945:7:::0;18934;5394:13:::1;5331:2;5394;:13;:::i;:::-;5377:30;::::0;5183:13:::1;5377:30;:::i;:::-;18924:17;;;;:::i;:::-;18923:29;;;;:::i;:::-;18908:12;:44:::0;-1:-1:-1;;18691:269:0:o;20181:215::-;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;20311:3:::1;20285:22;:29;;20277:62;;;::::0;-1:-1:-1;;;20277:62:0;;17443:2:1;20277:62:0::1;::::0;::::1;17425:21:1::0;17482:2;17462:18;;;17455:30;17521:22;17501:18;;;17494:50;17561:18;;20277:62:0::1;17241:344:1::0;20277:62:0::1;20350:13;:38:::0;20181:215::o;10255:654::-;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;-1:-1:-1;;;;;10334:22:0;::::1;10326:96;;;::::0;-1:-1:-1;;;10326:96:0;;17792:2:1;10326:96:0::1;::::0;::::1;17774:21:1::0;17831:2;17811:18;;;17804:30;17870:34;17850:18;;;17843:62;17941:31;17921:18;;;17914:59;17990:19;;10326:96:0::1;17590:425:1::0;10326:96:0::1;-1:-1:-1::0;;;;;;;10441:16:0;::::1;::::0;10433:90:::1;;;::::0;-1:-1:-1;;;10433:90:0;;17792:2:1;10433:90:0::1;::::0;::::1;17774:21:1::0;17831:2;17811:18;;;17804:30;17870:34;17850:18;;;17843:62;17941:31;17921:18;;;17914:59;17990:19;;10433:90:0::1;17590:425:1::0;10433:90:0::1;10554:6;::::0;10534:34:::1;::::0;-1:-1:-1;;;;;10554:6:0::1;;10534:19;:34::i;:::-;10579:35;10599:8;10609:4;10579:19;:35::i;:::-;10648:6;::::0;-1:-1:-1;;;;;10648:6:0::1;10658:1;12202:16:::0;;;;;;;;;;;10638:21;10635:127:::1;;10694:6;::::0;-1:-1:-1;;;;;10694:6:0::1;12175:7:::0;12202:16;;;;;;;;;;;10676:74:::1;::::0;10694:6;10702:8;;10712:17:::1;12109:117:::0;10676:74:::1;;10635:127;10801:6;::::0;;-1:-1:-1;;;;;10818:17:0;;::::1;-1:-1:-1::0;;;;;;10818:17:0;::::1;::::0;::::1;::::0;;;10851:40:::1;::::0;10801:6;::::1;::::0;10818:17;10801:6;;10851:40:::1;::::0;10782:16:::1;::::0;10851:40:::1;10315:594;10255:654:::0;:::o;15473:134::-;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;-1:-1:-1;;;;;15561:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;15561:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15473:134::o;14677:217::-;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;14785:11:::1;:39:::0;;-1:-1:-1;;;;;14785:39:0;;::::1;-1:-1:-1::0;;;;;;14785:39:0;;::::1;;::::0;;;14835:15:::1;:51:::0;;;;;::::1;::::0;::::1;;::::0;;14677:217::o;14447:222::-;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;14531:14:::1;::::0;::::1;;14530:15;14522:24;;;::::0;::::1;;14588:4;-1:-1:-1::0;;;;;14565:28:0;::::1;::::0;14557:55:::1;;;::::0;-1:-1:-1;;;14557:55:0;;18222:2:1;14557:55:0::1;::::0;::::1;18204:21:1::0;18261:2;18241:18;;;18234:30;18300:16;18280:18;;;18273:44;18334:18;;14557:55:0::1;18020:338:1::0;14557:55:0::1;14623:11;:38:::0;;-1:-1:-1;;;;;14623:38:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;14623:38:0;;::::1;::::0;;;::::1;::::0;;14447:222::o;24547:1485::-;24620:30;;;;;;;;24643:7;24620:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24620:30:0;;;;;;;;-1:-1:-1;;;24620:30:0;;;;;;;;;;;:20;24665:21;24661:60;;24703:7;24547:1485;:::o;24661:60::-;24756:4;24736:26;;;;:11;:26;;;;;;;;24771:9;;-1:-1:-1;;;;;24771:9:0;24736:46;;;;;;;;-1:-1:-1;;24736:67:0;24733:165;;24840:4;24820:26;;;;:11;:26;;;;;;;;24855:9;;-1:-1:-1;;;;;24855:9:0;24820:46;;;;;;;-1:-1:-1;;24820:66:0;;24733:165;24942:16;;;24956:1;24942:16;;;;;;;;24918:21;;24942:16;;;;;;;;;;-1:-1:-1;24942:16:0;24918:40;;24987:4;24969;24974:1;24969:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24969:23:0;;;:7;;;;;;;;;;:23;;;;25013:9;;:16;;;-1:-1:-1;;;25013:16:0;;;;:9;;;;;:14;;:16;;;;;24969:7;;25013:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25003:4;25008:1;25003:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25003:26:0;;;:7;;;;;;;;;:26;25042:9;;:199;;-1:-1:-1;;;25042:199:0;;:9;;;:60;;:199;;25117:20;;25042:9;;25168:4;;25195;;25215:15;;25042:199;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25254:18;25275:21;25254:42;;25307:12;25330:26;25395:6;:16;;;25359:52;;25373:6;:18;;;25360:31;;:10;:31;;;;:::i;:::-;25359:52;;;;:::i;:::-;25330:81;;25422:24;25483:6;:16;;;25449:50;;25463:6;:16;;;25450:29;;:10;:29;;;;:::i;:::-;25449:50;;;;:::i;:::-;25422:77;-1:-1:-1;25510:24:0;25551:37;25422:77;25551:18;:37;:::i;:::-;25537:52;;:10;:52;:::i;:::-;25604:16;;;;25510:79;;-1:-1:-1;25604:20:0;;;25600:133;;25654:11;:21;:67;;-1:-1:-1;;;;;25654:21:0;;;;25711:5;;25688:16;;25654:67;;;;25688:16;25654:21;25711:5;25654:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25641:80:0;;-1:-1:-1;;25600:133:0;25747:18;;;;:22;;;25743:139;;25799:23;;:71;;-1:-1:-1;;;;;25799:23:0;;;;25860:5;;25835:18;;25799:71;;;;25835:18;25799:23;25860:5;25799:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25786:84:0;;-1:-1:-1;;25743:139:0;25896:16;;:20;;;25892:133;;25946:21;;:67;;-1:-1:-1;;;;;25946:21:0;;;;26003:5;;25980:16;;25946:67;;;;25980:16;25946:21;26003:5;25946:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25933:80:0;;-1:-1:-1;;25892:133:0;24609:1423;;;;;;;24547:1485;:::o;19240:106::-;19281:7;19324:13;5331:2;19324;:13;:::i;:::-;19308:12;;:30;;;;:::i;10917:225::-;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;10996:6:::1;::::0;10976:34:::1;::::0;-1:-1:-1;;;;;10996:6:0::1;;10976:19;:34::i;:::-;11040:6;::::0;;-1:-1:-1;;;;;;11057:19:0;::::1;::::0;;;11092:42:::1;::::0;-1:-1:-1;;;;;11040:6:0;;::::1;::::0;11021:16:::1;::::0;11040:6;;11092:42:::1;::::0;11021:16;;11092:42:::1;10965:177;10917:225::o:0;13935:504::-;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;14016:16;::::1;;14027:5;14016:16:::0;14012:420:::1;;-1:-1:-1::0;;;;;14049:13:0;;::::1;14065:5;14049:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;14049:21:0::1;::::0;;14085:11:::1;::::0;:34;;-1:-1:-1;;;14085:34:0;;::::1;::::0;::::1;19737:74:1::0;;;;19827:18;;;19820:50;;;;14085:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;19710:18:1;;14085:34:0::1;19569:307:1::0;14012:420:0::1;14156:17;::::0;:22;14152:136:::1;;14245:6;14225:17;;14207:15;:35;;;;:::i;:::-;:44;14199:73;;;::::0;-1:-1:-1;;;14199:73:0;;20083:2:1;14199:73:0::1;::::0;::::1;20065:21:1::0;20122:2;20102:18;;;20095:30;20161:18;20141;;;20134:46;20197:18;;14199:73:0::1;19881:340:1::0;14199:73:0::1;-1:-1:-1::0;;;;;14302:13:0;;::::1;;::::0;;;14318:4:::1;14302:13;::::0;;;;;;;;:20;;-1:-1:-1;;14302:20:0::1;::::0;::::1;::::0;;14357:15:::1;14337:17;:35:::0;14387:11:::1;::::0;:33;;-1:-1:-1;;;14387:33:0;;::::1;::::0;::::1;19737:74:1::0;;;;19827:18;;;19820:50;14387:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;19710:18:1;;14387:33:0::1;19569:307:1::0;14012:420:0::1;13935:504:::0;;:::o;18325:358::-;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;18480:11:::1;:42:::0;;-1:-1:-1;;;;;18480:42:0;;::::1;-1:-1:-1::0;;;;;;18480:42:0;;::::1;;::::0;;;18533:21;:42;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;18586:23;:46;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;18643:16;:32;;;;;::::1;::::0;::::1;;::::0;;18325:358::o;12892:173::-;7872:6;;12956:4;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;13005:9:::1;::::0;12973:62:::1;::::0;12990:4:::1;::::0;-1:-1:-1;;;;;13005:9:0::1;-1:-1:-1::0;;12973:8:0::1;:62::i;:::-;-1:-1:-1::0;13053:4:0::1;12892:173:::0;:::o;26610:552::-;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;26672:14:::1;::::0;::::1;;26671:15;26663:52;;;::::0;-1:-1:-1;;;26663:52:0;;20428:2:1;26663:52:0::1;::::0;::::1;20410:21:1::0;20467:2;20447:18;;;20440:30;20506:26;20486:18;;;20479:54;20550:18;;26663:52:0::1;20226:348:1::0;26663:52:0::1;26734:16;::::0;::::1;::::0;::::1;;;26726:53;;;::::0;-1:-1:-1;;;26726:53:0;;20781:2:1;26726:53:0::1;::::0;::::1;20763:21:1::0;20820:2;20800:18;;;20793:30;20859:26;20839:18;;;20832:54;20903:18;;26726:53:0::1;20579:348:1::0;26726:53:0::1;26801:11;::::0;;;::::1;-1:-1:-1::0;;;;;26801:11:0::1;26790:105;;26843:11;:40:::0;;-1:-1:-1;;;;;;26843:40:0::1;26877:4;26843:40:::0;::::1;;::::0;;26790:105:::1;26909:11;::::0;26931:6:::1;::::0;26909:87:::1;::::0;-1:-1:-1;;;26909:87:0;;-1:-1:-1;;;;;26931:6:0;;::::1;26909:87;::::0;::::1;21155:74:1::0;21277:10;26946:12:0::1;21265:23:1::0;21245:18;;;21238:51;21337:18;26968:15:0::1;21325:31:1::0;21305:18;;;21298:59;5331:2:0::1;21373:18:1::0;;;21366:45;26909:11:0;;;::::1;;::::0;:21:::1;::::0;21127:19:1;;26909:87:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;27018:14:0::1;:21:::0;;-1:-1:-1;;27018:21:0::1;27035:4;27018:21;::::0;;27077:6:::1;::::0;-1:-1:-1;;;;;27077:6:0::1;-1:-1:-1::0;12202:16:0;;;;;;;;;;;27093:5:::1;::::0;27067:22:::1;::::0;27087:2:::1;27067:22;:::i;:::-;27066:32;;;;:::i;:::-;27050:13;:48:::0;27133:6:::1;::::0;-1:-1:-1;;;;;27133:6:0::1;12175:7:::0;12202:16;;;;;;;;;;;27149:5:::1;::::0;27123:22:::1;::::0;27143:2:::1;27123:22;:::i;:::-;27122:32;;;;:::i;:::-;27109:10;:45:::0;26610:552::o;28942:621::-;29056:11;;29001:4;;;;-1:-1:-1;;;;;29056:11:0;29048:34;29045:224;;29103:11;;:30;;-1:-1:-1;;;29103:30:0;;-1:-1:-1;;;;;178:55:1;;;29103:30:0;;;160:74:1;29103:11:0;;;;:21;;133:18:1;;29103:30:0;;;;;;;;;;;;;;;;;;-1:-1:-1;29103:30:0;;;;;;;;-1:-1:-1;;29103:30:0;;;;;;;;;;;;:::i;:::-;;;29099:159;;;29216:1;29200:13;:17;29199:34;;29228:5;29199:34;;;29221:4;29199:34;29185:48;;29134:115;29099:159;29290:15;;-1:-1:-1;;;;;29290:15:0;29282:38;;;;:54;;;29325:11;29324:12;29282:54;29279:248;;;29357:15;;:34;;-1:-1:-1;;;29357:34:0;;-1:-1:-1;;;;;178:55:1;;;29357:34:0;;;160:74:1;29357:15:0;;;;:25;;133:18:1;;29357:34:0;;;;;;;;;;;;;;;;;;-1:-1:-1;29357:34:0;;;;;;;;-1:-1:-1;;29357:34:0;;;;;;;;;;;;:::i;:::-;;;29353:163;;;29474:1;29458:13;:17;29457:34;;29486:5;29457:34;;;29479:4;29443:48;29544:11;-1:-1:-1;;;;28942:621:0:o;12234:165::-;12312:4;12329:40;12339:10;12351:9;12362:6;12329:9;:40::i;:::-;-1:-1:-1;12387:4:0;;12234:165;-1:-1:-1;;;12234:165:0:o;20404:263::-;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;20513:19:::1;:33:::0;;-1:-1:-1;;20513:33:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;20557:22:::1;:47:::0;;-1:-1:-1;;20557:47:0::1;::::0;::::1;;;::::0;;20620:39:::1;::::0;5115:41:1;;;20620:39:0::1;::::0;5103:2:1;5088:18;20620:39:0::1;;;;;;;;20404:263:::0;;:::o;16172:202::-;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;16328:11:::1;::::0;:38:::1;::::0;-1:-1:-1;;;16328:38:0;;-1:-1:-1;;;;;178:55:1;;;16328:38:0::1;::::0;::::1;160:74:1::0;16328:11:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;133:18:1;;16328:38:0::1;14:226:1::0;13387:540:0;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;13456:20:::1;13489:9;13456:43;;13510:16;13540:10;-1:-1:-1::0;;;;;13540:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13529:40:0::1;;13578:4;13585:10;-1:-1:-1::0;;;;;13585:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13529:74;::::0;-1:-1:-1;;;;;;13529:74:0::1;::::0;;;;;;-1:-1:-1;;;;;21864:15:1;;;13529:74:0::1;::::0;::::1;21846:34:1::0;21916:15;;21896:18;;;21889:43;21758:18;;13529:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13510:93:::0;-1:-1:-1;;;;;;13618:22:0;::::1;13614:200;;13677:10;-1:-1:-1::0;;;;;13677:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13666:43:0::1;;13718:4;13725:10;-1:-1:-1::0;;;;;13725:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13666:77;::::0;-1:-1:-1;;;;;;13666:77:0::1;::::0;;;;;;-1:-1:-1;;;;;21864:15:1;;;13666:77:0::1;::::0;::::1;21846:34:1::0;21916:15;;21896:18;;;21889:43;21758:18;;13666:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13657:6;:86:::0;;-1:-1:-1;;;;;;13657:86:0::1;-1:-1:-1::0;;;;;13657:86:0;;;::::1;::::0;;;::::1;::::0;;13614:200:::1;;;13785:6;:17:::0;;-1:-1:-1;;;;;;13785:17:0::1;-1:-1:-1::0;;;;;13785:17:0;::::1;;::::0;;13614:200:::1;13824:9;:22:::0;;-1:-1:-1;;;;;;13824:22:0::1;-1:-1:-1::0;;;;;13824:22:0;::::1;::::0;;::::1;::::0;;;13857:62:::1;::::0;13874:4:::1;::::0;-1:-1:-1;;13857:8:0::1;:62::i;27170:182::-:0;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;27237:16:::1;::::0;::::1;::::0;::::1;;;27236:17;27228:58;;;::::0;-1:-1:-1;;;27228:58:0;;22145:2:1;27228:58:0::1;::::0;::::1;22127:21:1::0;22184:2;22164:18;;;22157:30;22223;22203:18;;;22196:58;22271:18;;27228:58:0::1;21943:352:1::0;27228:58:0::1;27305:6;::::0;27297:47:::1;::::0;-1:-1:-1;;;;;27305:6:0;;::::1;::::0;27322:21:::1;27297:47:::0;::::1;;;::::0;27305:6:::1;27297:47:::0;27305:6;27297:47;27322:21;27305:6;27297:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27170:182::o:0;15835:147::-;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;15925:11:::1;::::0;:49:::1;::::0;-1:-1:-1;;;15925:49:0;;-1:-1:-1;;;;;19755:55:1;;;15925:49:0::1;::::0;::::1;19737:74:1::0;19854:14;;19847:22;19827:18;;;19820:50;15925:11:0;;;::::1;::::0;;::::1;::::0;:31:::1;::::0;19710:18:1;;15925:49:0::1;19569:307:1::0;19474:699:0;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;19674:16;19654;5394:13:::1;5331:2;5394;:13;:::i;:::-;5377:30;::::0;5183:13:::1;5377:30;:::i;:::-;19644:26;;;;:::i;:::-;19643:47;;;;:::i;:::-;19627:13;:63:::0;;;19742:13;;19725;;5394::::1;::::0;:2:::1;:13;:::i;:::-;5377:30;::::0;5183:13:::1;5377:30;:::i;:::-;19715:23;;;;:::i;:::-;19714:41;;;;:::i;:::-;19701:10;:54:::0;;;19774:13:::1;::::0;:27:::1;;19766:73;;;::::0;-1:-1:-1;;;19766:73:0;;22502:2:1;19766:73:0::1;::::0;::::1;22484:21:1::0;22541:2;22521:18;;;22514:30;22580:34;22560:18;;;22553:62;-1:-1:-1;;;22631:18:1;;;22624:31;22672:19;;19766:73:0::1;22300:397:1::0;19766:73:0::1;19883:6;::::0;-1:-1:-1;;;;;19883:6:0::1;12175:7:::0;12202:16;;;;;;;;;;;6355:5:::1;::::0;19873:23:::1;::::0;19893:3:::1;19873:23;:::i;:::-;19872:44;;;;:::i;:::-;19858:10;;:58;;19850:106;;;::::0;-1:-1:-1;;;19850:106:0;;22904:2:1;19850:106:0::1;::::0;::::1;22886:21:1::0;22943:2;22923:18;;;22916:30;22982:34;22962:18;;;22955:62;-1:-1:-1;;;23033:18:1;;;23026:33;23076:19;;19850:106:0::1;22702:399:1::0;19850:106:0::1;19999:9;5394:13;5331:2;5394;:13;:::i;:::-;5377:30;::::0;5183:13:::1;5377:30;:::i;:::-;19989:19;;;;:::i;:::-;19975:10;;:33;;19967:92;;;::::0;-1:-1:-1;;;19967:92:0;;23308:2:1;19967:92:0::1;::::0;::::1;23290:21:1::0;23347:2;23327:18;;;23320:30;23386:34;23366:18;;;23359:62;-1:-1:-1;;;23437:18:1;;;23430:44;23491:19;;19967:92:0::1;23106:410:1::0;19967:92:0::1;20105:9;5394:13;5331:2;5394;:13;:::i;:::-;5377:30;::::0;5183:13:::1;5377:30;:::i;:::-;20095:19;;;;:::i;:::-;20078:13;;:36;;20070:95;;;::::0;-1:-1:-1;;;20070:95:0;;23308:2:1;20070:95:0::1;::::0;::::1;23290:21:1::0;23347:2;23327:18;;;23320:30;23386:34;23366:18;;;23359:62;-1:-1:-1;;;23437:18:1;;;23430:44;23491:19;;20070:95:0::1;23106:410:1::0;20070:95:0::1;19474:699:::0;;;;:::o;17296:511::-;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;6151:4:::1;17411:6;:21;;;;:65;;;;;6201:4;17453:7;:23;;;;17411:65;:117;;;;;6255:4;17497:11;:31;;;;17411:117;17403:170;;;::::0;-1:-1:-1;;;17403:170:0;;16306:2:1;17403:170:0::1;::::0;::::1;16288:21:1::0;16345:2;16325:18;;;16318:30;16384:25;16364:18;;;16357:53;16427:18;;17403:170:0::1;16104:347:1::0;17403:170:0::1;6308:4;17592:16;17601:7:::0;17592:6;:16:::1;:::i;:::-;:35;;;;17584:80;;;::::0;-1:-1:-1;;;17584:80:0;;16658:2:1;17584:80:0::1;::::0;::::1;16640:21:1::0;;;16677:18;;;16670:30;16736:34;16716:18;;;16709:62;16788:18;;17584:80:0::1;16456:356:1::0;17584:80:0::1;17675:14;:30:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;17716:32:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;17759:40:0::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;17296:511::o;16382:127::-;16467:11;;:34;;-1:-1:-1;;;16467:34:0;;-1:-1:-1;;;;;178:55:1;;;16467:34:0;;;160:74:1;16443:4:0;;16467:11;;;;;:25;;133:18:1;;16467:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15615:148::-;7872:6;;-1:-1:-1;;;;;7872:6:0;7882:10;7872:20;7864:50;;;;-1:-1:-1;;;7864:50:0;;11148:2:1;7864:50:0;;;11130:21:1;11187:2;11167:18;;;11160:30;-1:-1:-1;;;;;;;;;;;11206:18:1;;;11199:47;11263:18;;7864:50:0;10946:341:1;7864:50:0;-1:-1:-1;;;;;15711:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;15711:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15615:148::o;12574:310::-;-1:-1:-1;;;;;12669:20:0;;12661:52;;;;-1:-1:-1;;;12661:52:0;;23973:2:1;12661:52:0;;;23955:21:1;24012:2;23992:18;;;23985:30;-1:-1:-1;;;24031:18:1;;;24024:49;24090:18;;12661:52:0;23771:343:1;12661:52:0;-1:-1:-1;;;;;12732:21:0;;12724:53;;;;-1:-1:-1;;;12724:53:0;;23973:2:1;12724:53:0;;;23955:21:1;24012:2;23992:18;;;23985:30;-1:-1:-1;;;24031:18:1;;;24024:49;24090:18;;12724:53:0;23771:343:1;12724:53:0;-1:-1:-1;;;;;12790:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;12843:33;;391:25:1;;;12843:33:0;;364:18:1;12843:33:0;;;;;;;12574:310;;;:::o;21041:1944::-;21120:4;-1:-1:-1;;;;;21145:18:0;;21137:68;;;;-1:-1:-1;;;21137:68:0;;24321:2:1;21137:68:0;;;24303:21:1;24360:2;24340:18;;;24333:30;24399:34;24379:18;;;24372:62;-1:-1:-1;;;24450:18:1;;;24443:35;24495:19;;21137:68:0;24119:401:1;21137:68:0;-1:-1:-1;;;;;21224:16:0;;21216:64;;;;-1:-1:-1;;;21216:64:0;;24727:2:1;21216:64:0;;;24709:21:1;24766:2;24746:18;;;24739:30;24805:34;24785:18;;;24778:62;-1:-1:-1;;;24856:18:1;;;24849:33;24899:19;;21216:64:0;24525:399:1;21216:64:0;21308:1;21299:6;:10;21291:64;;;;-1:-1:-1;;;21291:64:0;;25131:2:1;21291:64:0;;;25113:21:1;25170:2;25150:18;;;25143:30;25209:34;25189:18;;;25182:62;-1:-1:-1;;;25260:18:1;;;25253:39;25309:19;;21291:64:0;24929:405:1;21291:64:0;-1:-1:-1;;;;;21454:13:0;;21366:8;21454:13;;;:7;:13;;;;;;21366:8;;;;21454:13;;21450:162;;;21490:4;21484:10;;21450:162;;;-1:-1:-1;;;;;21516:11:0;;;;;;:7;:11;;;;;;;;21512:100;;;21551:4;21544:11;;21512:100;;;-1:-1:-1;21596:4:0;21512:100;21625:20;21636:4;21642:2;21625:10;:20::i;:::-;21622:641;;;21666:14;;;;21662:89;;21701:34;;-1:-1:-1;;;21701:34:0;;25541:2:1;21701:34:0;;;25523:21:1;25580:2;25560:18;;;25553:30;25619:26;25599:18;;;25592:54;25663:18;;21701:34:0;25339:348:1;21662:89:0;21768:3;:11;;;;21775:4;21768:11;21765:231;;;-1:-1:-1;;;;;21804:27:0;;;;;;:21;:27;;;;;;;;21803:28;:58;;;;-1:-1:-1;;;;;;21836:25:0;;;;;;:21;:25;;;;;;;;21835:26;21803:58;21799:182;;;21904:12;;21894:6;:22;;21886:75;;;;-1:-1:-1;;;21886:75:0;;25894:2:1;21886:75:0;;;25876:21:1;25933:2;25913:18;;;25906:30;25972:34;25952:18;;;25945:62;-1:-1:-1;;;26023:18:1;;;26016:38;26071:19;;21886:75:0;25692:404:1;21886:75:0;22027:9;;-1:-1:-1;;;;;22013:24:0;;;22027:9;;22013:24;;;;:33;;;22042:4;22041:5;22013:33;22010:242;;;-1:-1:-1;;;;;22072:25:0;;;;;;:21;:25;;;;;;;;22067:170;;22156:14;;22146:6;22130:13;22140:2;-1:-1:-1;;;;;12202:16:0;12175:7;12202:16;;;;;;;;;;;;12109:117;22130:13;:22;;;;:::i;:::-;:40;;22122:95;;;;-1:-1:-1;;;22122:95:0;;26303:2:1;22122:95:0;;;26285:21:1;26342:2;26322:18;;;26315:30;26381:34;26361:18;;;26354:62;-1:-1:-1;;;26432:18:1;;;26425:40;26482:19;;22122:95:0;26101:406:1;22122:95:0;22279:4;22275:632;;;22305:6;;;;22300:596;;22336:19;;;;;;;22332:549;;;22429:4;22380:28;12202:16;;;;;;;;;;;22486:13;;22462:37;;22458:404;;22546:10;;22587:22;;;;22583:97;;;22644:13;;22634:6;;-1:-1:-1;;;;;22634:6:0;12175:7;12202:16;;;;;;;;;;;6355:5;;22624:33;;;:::i;:::-;22623:54;;;;:::i;:::-;22613:64;;22583:97;22734:7;22710:20;:31;22706:72;;22768:7;22745:30;;22706:72;22804:34;22817:20;22804:12;:34::i;:::-;22501:361;22458:404;22357:524;22332:549;22924:53;22942:4;22948:2;22952:6;22960:3;22965:4;22971:5;22924:17;:53::i;:::-;22917:60;21041:1944;-1:-1:-1;;;;;;;21041:1944:0:o;27779:1155::-;27921:16;;27899:4;;27921:16;;;;;27916:298;;27954:28;27973:4;27979:2;27954:18;:28::i;:::-;28002:16;;;;;;;28001:17;:41;;;;;28022:20;28033:4;28039:2;28022:10;:20::i;:::-;28001:77;;;;-1:-1:-1;;;;;;28047:31:0;;;;;;:25;:31;;;;;;;;28046:32;28001:77;:111;;;;-1:-1:-1;;;;;;28083:29:0;;;;;;:25;:29;;;;;;;;28082:30;28001:111;:121;;;;;28117:5;28116:6;28001:121;27997:206;;;28143:44;;-1:-1:-1;;;28143:44:0;;26714:2:1;28143:44:0;;;26696:21:1;26753:2;26733:18;;;26726:30;26792:34;26772:18;;;26765:62;-1:-1:-1;;;26843:18:1;;;26836:32;26885:19;;28143:44:0;26512:398:1;27997:206:0;28230:20;28241:4;28247:2;28230:10;:20::i;:::-;28226:316;;;28298:11;;:39;;-1:-1:-1;;;28298:39:0;;-1:-1:-1;;;;;27196:15:1;;;28298:39:0;;;27178:34:1;27248:15;;;27228:18;;;27221:43;27280:18;;;27273:34;;;28267:12:0;;28298:11;;;;;:21;;27090:18:1;;28298:39:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;28298:39:0;;;;;;;;-1:-1:-1;;28298:39:0;;;;;;;;;;;;:::i;:::-;;;28294:165;;28435:8;;;28294:165;28388:5;-1:-1:-1;28479:7:0;28475:56;;28507:8;;;28475:56;28252:290;28226:316;-1:-1:-1;;;;;28587:25:0;;28554:12;28587:25;;;:19;:25;;;;;;28569:4;;28587:25;;;:52;;-1:-1:-1;;;;;;28616:23:0;;;;;;:19;:23;;;;;;;;28587:52;28584:98;;;-1:-1:-1;28665:5:0;28584:98;-1:-1:-1;;;;;28694:13:0;;:7;:13;;;;;;;;;;:23;;28711:6;;28694:7;:23;;28711:6;;28694:23;:::i;:::-;;;;-1:-1:-1;28728:22:0;;-1:-1:-1;28754:7:0;28753:59;;28806:6;28753:59;;;28765:38;28775:4;28781:2;28785:3;28790:4;28796:6;28765:9;:38::i;:::-;28728:84;;28838:14;28823:7;:11;28831:2;-1:-1:-1;;;;;28823:11:0;-1:-1:-1;;;;;28823:11:0;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;28885:2;-1:-1:-1;;;;;28870:34:0;28879:4;-1:-1:-1;;;;;28870:34:0;;28889:14;28870:34;;;;391:25:1;;379:2;364:18;;245:177;28870:34:0;;;;;;;;-1:-1:-1;28922:4:0;;27779:1155;-1:-1:-1;;;;;;;;27779:1155:0:o;20675:358::-;20776:6;;20744:4;;-1:-1:-1;;;;;20768:14:0;;;20776:6;;20768:14;;;;:43;;-1:-1:-1;20805:6:0;;-1:-1:-1;;;;;20799:12:0;;;20805:6;;20799:12;;20768:43;:79;;;;-1:-1:-1;20841:6:0;;-1:-1:-1;;;;;20841:6:0;20828:9;:19;;20768:79;:118;;;;-1:-1:-1;;;;;;20865:21:0;;;;;;:17;:21;;;;;;;;20864:22;20768:118;:159;;;;-1:-1:-1;;;;;;20904:23:0;;;;;;:17;:23;;;;;;;;20903:24;20768:159;:186;;;;-1:-1:-1;;;;;;20944:10:0;;6461:42;20944:10;;20768:186;:219;;;;-1:-1:-1;;;;;;20971:16:0;;;;20768:219;:257;;;;-1:-1:-1;;;;;;21004:21:0;;21020:4;21004:21;;20768:257;20761:264;20675:358;-1:-1:-1;;;20675:358:0:o;22993:1542::-;7766:6;:13;;-1:-1:-1;;7766:13:0;7775:4;7766:13;;;23077:30:::1;::::0;;::::1;::::0;::::1;::::0;;23100:7:::1;23077:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;23077:30:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;23077:30:0;::::1;::::0;;::::1;::::0;;;;;;7766:6;23122:21;23118:60:::1;;23160:7;;;23118:60;23213:4;23193:26;::::0;;;:11:::1;:26;::::0;;;;;;;23228:9:::1;::::0;-1:-1:-1;;;;;23228:9:0::1;23193:46:::0;;;;;;;;-1:-1:-1;;23193:67:0::1;23190:165;;23297:4;23277:26;::::0;;;:11:::1;:26;::::0;;;;;;;23312:9:::1;::::0;-1:-1:-1;;;;;23312:9:0::1;23277:46:::0;;;;;;;-1:-1:-1;;23277:66:0;;23190:165:::1;23399:16;::::0;;23413:1:::1;23399:16:::0;;;;;::::1;::::0;;23375:21:::1;::::0;23399:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;23399:16:0::1;23375:40;;23444:4;23426;23431:1;23426:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23426:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;23470:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;23470:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;23426:7;;23470:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23460:4;23465:1;23460:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23460:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;23503:9:::1;::::0;:199:::1;::::0;-1:-1:-1;;;23503:199:0;;:9;::::1;::::0;:60:::1;::::0;:199:::1;::::0;23578:20;;23503:9:::1;::::0;23629:4;;23656::::1;::::0;23676:15:::1;::::0;23503:199:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;23499:246;;23727:7;;;;23499:246;23757:18;23778:21;23757:42;;23810:12;23833:26:::0;23898:6:::1;:16;;;23862:52;;23876:6;:18;;;23863:31;;:10;:31;;;;:::i;:::-;23862:52;;;;:::i;:::-;23833:81;;23925:24;23986:6;:16;;;23952:50;;23966:6;:16;;;23953:29;;:10;:29;;;;:::i;:::-;23952:50;;;;:::i;:::-;23925:77:::0;-1:-1:-1;24013:24:0::1;24054:37;23925:77:::0;24054:18;:37:::1;:::i;:::-;24040:52;::::0;:10;:52:::1;:::i;:::-;24107:16;::::0;::::1;::::0;24013:79;;-1:-1:-1;24107:20:0::1;;::::0;24103:133:::1;;24157:11;:21:::0;:67:::1;::::0;-1:-1:-1;;;;;24157:21:0;;::::1;::::0;24214:5:::1;::::0;24191:16;;24157:67:::1;::::0;;;24191:16;24157:21;24214:5;24157:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;24144:80:0;;-1:-1:-1;;24103:133:0::1;24250:18;::::0;::::1;::::0;:22:::1;;::::0;24246:139:::1;;24302:23:::0;;:71:::1;::::0;-1:-1:-1;;;;;24302:23:0;;::::1;::::0;24363:5:::1;::::0;24338:18;;24302:71:::1;::::0;;;24338:18;24302:23;24363:5;24302:71:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;24289:84:0;;-1:-1:-1;;24246:139:0::1;24399:16:::0;;:20:::1;;::::0;24395:133:::1;;24449:21:::0;;:67:::1;::::0;-1:-1:-1;;;;;24449:21:0;;::::1;::::0;24506:5:::1;::::0;24483:16;;24449:67:::1;::::0;;;24483:16;24449:21;24506:5;24449:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;24436:80:0;;-1:-1:-1;;24395:133:0::1;23066:1469;;;;;;;7790:1;-1:-1:-1::0;7802:6:0;:14;;-1:-1:-1;;7802:14:0;;;22993:1542::o;26040:562::-;26123:16;;;;;;;26122:17;26114:65;;;;-1:-1:-1;;;26114:65:0;;27520:2:1;26114:65:0;;;27502:21:1;27559:2;27539:18;;;27532:30;27598:34;27578:18;;;27571:62;-1:-1:-1;;;27649:18:1;;;27642:33;27692:19;;26114:65:0;27318:399:1;26114:65:0;26195:20;26206:4;26212:2;26195:10;:20::i;:::-;26194:21;:37;;;;-1:-1:-1;26225:6:0;;-1:-1:-1;;;;;26219:12:0;;;26225:6;;26219:12;26194:37;26190:405;;;-1:-1:-1;;;;;26248:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;26248:30:0;;;26274:4;26248:30;;;;;;26293:19;:25;;;;;:32;;;;;;;;;;26340:16;:23;;-1:-1:-1;;26340:23:0;26248:30;26340:23;;;;;26389:11;;;;26378:113;;26435:11;:40;;-1:-1:-1;;;;;;26435:40:0;26469:4;26435:40;;;;;26378:113;26505:19;:26;;-1:-1:-1;;26505:26:0;;;;;26551:32;;-1:-1:-1;5115:41:1;;26551:32:0;;5103:2:1;5088:18;26551:32:0;4975:187:1;29571:1537:0;29671:7;29691:18;29720:16;29751:3;29747:837;;;29785:20;29802:2;29785:16;:20::i;:::-;29771:34;;29823:11;29820:155;;;29868:14;:21;;;;-1:-1:-1;29747:837:0;;29820:155;29943:9;:16;;;;-1:-1:-1;29747:837:0;;;29996:4;29992:592;;;30031:22;30048:4;30031:16;:22::i;:::-;30017:36;;30071:11;30068:157;;;30116:14;:22;;;;;;;-1:-1:-1;29992:592:0;;30068:157;30192:9;:17;;;;;;;-1:-1:-1;29992:592:0;;;30271:20;30288:2;30271:16;:20::i;:::-;30257:34;;30310:11;30306:88;;30356:22;30373:4;30356:16;:22::i;:::-;30342:36;;30306:88;30411:11;30408:165;;;30456:14;:26;;;;;;;-1:-1:-1;30408:165:0;;;30536:9;:21;;;;;;;-1:-1:-1;30408:165:0;30596:17;6355:5;30616:19;30625:10;30616:6;:19;:::i;:::-;:38;;;;:::i;:::-;30736:7;:12;30596:58;;-1:-1:-1;30665:18:0;;30716:32;;30736:12;-1:-1:-1;;;30736:12:0;;;;;-1:-1:-1;;;30716:17:0;;;:32;:::i;:::-;30699:7;:12;30686:63;;;;;30687:24;;-1:-1:-1;;;30699:12:0;;;30687:9;:24;:::i;:::-;30686:63;;;;:::i;:::-;30665:84;-1:-1:-1;30760:15:0;30778:22;30665:84;30778:9;:22;:::i;:::-;30829:4;30813:7;:22;;;;;;;;;;:33;;30760:40;;-1:-1:-1;30760:40:0;;30813:22;;:7;:33;;30760:40;;30813:33;:::i;:::-;;;;-1:-1:-1;;30862:38:0;;391:25:1;;;30885:4:0;;-1:-1:-1;;;;;30862:38:0;;;;;379:2:1;364:18;30862:38:0;;;;;;;30917:14;;30913:150;;30956:16;;-1:-1:-1;;;;;30956:16:0;30948:7;:25;;;;;;;;;;:39;;30977:10;;30948:7;:39;;30977:10;;30948:39;:::i;:::-;;;;-1:-1:-1;;31022:16:0;;31007:44;;391:25:1;;;-1:-1:-1;;;;;31022:16:0;;;;31007:44;;;;;379:2:1;364:18;31007:44:0;;;;;;;30913:150;31082:18;31091:9;31082:6;:18;:::i;:::-;31075:25;29571:1537;-1:-1:-1;;;;;;;;;;;29571:1537:0:o;427:118:1:-;513:5;506:13;499:21;492:5;489:32;479:60;;535:1;532;525:12;550:376;612:6;620;673:2;661:9;652:7;648:23;644:32;641:52;;;689:1;686;679:12;641:52;728:9;715:23;747:28;769:5;747:28;:::i;:::-;794:5;-1:-1:-1;851:2:1;836:18;;823:32;864:30;823:32;864:30;:::i;:::-;913:7;903:17;;;550:376;;;;;:::o;931:127::-;992:10;987:3;983:20;980:1;973:31;1023:4;1020:1;1013:15;1047:4;1044:1;1037:15;1063:275;1134:2;1128:9;1199:2;1180:13;;-1:-1:-1;;1176:27:1;1164:40;;1234:18;1219:34;;1255:22;;;1216:62;1213:88;;;1281:18;;:::i;:::-;1317:2;1310:22;1063:275;;-1:-1:-1;1063:275:1:o;1343:183::-;1403:4;1436:18;1428:6;1425:30;1422:56;;;1458:18;;:::i;:::-;-1:-1:-1;1503:1:1;1499:14;1515:4;1495:25;;1343:183::o;1531:154::-;-1:-1:-1;;;;;1610:5:1;1606:54;1599:5;1596:65;1586:93;;1675:1;1672;1665:12;1690:737;1744:5;1797:3;1790:4;1782:6;1778:17;1774:27;1764:55;;1815:1;1812;1805:12;1764:55;1851:6;1838:20;1877:4;1901:60;1917:43;1957:2;1917:43;:::i;:::-;1901:60;:::i;:::-;1995:15;;;2081:1;2077:10;;;;2065:23;;2061:32;;;2026:12;;;;2105:15;;;2102:35;;;2133:1;2130;2123:12;2102:35;2169:2;2161:6;2157:15;2181:217;2197:6;2192:3;2189:15;2181:217;;;2277:3;2264:17;2294:31;2319:5;2294:31;:::i;:::-;2338:18;;2376:12;;;;2214;;2181:217;;;-1:-1:-1;2416:5:1;1690:737;-1:-1:-1;;;;;;1690:737:1:o;2432:477::-;2522:6;2530;2583:2;2571:9;2562:7;2558:23;2554:32;2551:52;;;2599:1;2596;2589:12;2551:52;2639:9;2626:23;2672:18;2664:6;2661:30;2658:50;;;2704:1;2701;2694:12;2658:50;2727:61;2780:7;2771:6;2760:9;2756:22;2727:61;:::i;:::-;2717:71;;;2838:2;2827:9;2823:18;2810:32;2851:28;2873:5;2851:28;:::i;3284:548::-;3396:4;3425:2;3454;3443:9;3436:21;3486:6;3480:13;3529:6;3524:2;3513:9;3509:18;3502:34;3554:1;3564:140;3578:6;3575:1;3572:13;3564:140;;;3673:14;;;3669:23;;3663:30;3639:17;;;3658:2;3635:26;3628:66;3593:10;;3564:140;;;3568:3;3753:1;3748:2;3739:6;3728:9;3724:22;3720:31;3713:42;3823:2;3816;3812:7;3807:2;3799:6;3795:15;3791:29;3780:9;3776:45;3772:54;3764:62;;;;3284:548;;;;:::o;3837:159::-;3904:20;;3964:6;3953:18;;3943:29;;3933:57;;3986:1;3983;3976:12;3933:57;3837:159;;;:::o;4001:401::-;4083:6;4091;4099;4107;4160:3;4148:9;4139:7;4135:23;4131:33;4128:53;;;4177:1;4174;4167:12;4128:53;4200:28;4218:9;4200:28;:::i;:::-;4190:38;;4247:37;4280:2;4269:9;4265:18;4247:37;:::i;:::-;4237:47;;4303:37;4336:2;4325:9;4321:18;4303:37;:::i;:::-;4293:47;;4359:37;4392:2;4381:9;4377:18;4359:37;:::i;:::-;4349:47;;4001:401;;;;;;;:::o;4655:315::-;4723:6;4731;4784:2;4772:9;4763:7;4759:23;4755:32;4752:52;;;4800:1;4797;4790:12;4752:52;4839:9;4826:23;4858:31;4883:5;4858:31;:::i;:::-;4908:5;4960:2;4945:18;;;;4932:32;;-1:-1:-1;;;4655:315:1:o;5167:247::-;5226:6;5279:2;5267:9;5258:7;5254:23;5250:32;5247:52;;;5295:1;5292;5285:12;5247:52;5334:9;5321:23;5353:31;5378:5;5353:31;:::i;5419:456::-;5496:6;5504;5512;5565:2;5553:9;5544:7;5540:23;5536:32;5533:52;;;5581:1;5578;5571:12;5533:52;5620:9;5607:23;5639:31;5664:5;5639:31;:::i;:::-;5689:5;-1:-1:-1;5746:2:1;5731:18;;5718:32;5759:33;5718:32;5759:33;:::i;:::-;5419:456;;5811:7;;-1:-1:-1;;;5865:2:1;5850:18;;;;5837:32;;5419:456::o;5880:248::-;5948:6;5956;6009:2;5997:9;5988:7;5984:23;5980:32;5977:52;;;6025:1;6022;6015:12;5977:52;-1:-1:-1;;6048:23:1;;;6118:2;6103:18;;;6090:32;;-1:-1:-1;5880:248:1:o;6133:1138::-;6251:6;6259;6312:2;6300:9;6291:7;6287:23;6283:32;6280:52;;;6328:1;6325;6318:12;6280:52;6368:9;6355:23;6397:18;6438:2;6430:6;6427:14;6424:34;;;6454:1;6451;6444:12;6424:34;6477:61;6530:7;6521:6;6510:9;6506:22;6477:61;:::i;:::-;6467:71;;6557:2;6547:12;;6612:2;6601:9;6597:18;6584:32;6641:2;6631:8;6628:16;6625:36;;;6657:1;6654;6647:12;6625:36;6680:24;;;-1:-1:-1;6735:4:1;6727:13;;6723:27;-1:-1:-1;6713:55:1;;6764:1;6761;6754:12;6713:55;6800:2;6787:16;6823:60;6839:43;6879:2;6839:43;:::i;6823:60::-;6917:15;;;6999:1;6995:10;;;;6987:19;;6983:28;;;6948:12;;;;7023:19;;;7020:39;;;7055:1;7052;7045:12;7020:39;7079:11;;;;7099:142;7115:6;7110:3;7107:15;7099:142;;;7181:17;;7169:30;;7132:12;;;;7219;;;;7099:142;;;7260:5;7250:15;;;;;;;6133:1138;;;;;:::o;7465:328::-;7539:6;7547;7555;7608:2;7596:9;7587:7;7583:23;7579:32;7576:52;;;7624:1;7621;7614:12;7576:52;7647:28;7665:9;7647:28;:::i;:::-;7637:38;;7694:37;7727:2;7716:9;7712:18;7694:37;:::i;:::-;7684:47;;7750:37;7783:2;7772:9;7768:18;7750:37;:::i;:::-;7740:47;;7465:328;;;;;:::o;7798:382::-;7863:6;7871;7924:2;7912:9;7903:7;7899:23;7895:32;7892:52;;;7940:1;7937;7930:12;7892:52;7979:9;7966:23;7998:31;8023:5;7998:31;:::i;8185:180::-;8244:6;8297:2;8285:9;8276:7;8272:23;8268:32;8265:52;;;8313:1;8310;8303:12;8265:52;-1:-1:-1;8336:23:1;;8185:180;-1:-1:-1;8185:180:1:o;8370:388::-;8438:6;8446;8499:2;8487:9;8478:7;8474:23;8470:32;8467:52;;;8515:1;8512;8505:12;8467:52;8554:9;8541:23;8573:31;8598:5;8573:31;:::i;:::-;8623:5;-1:-1:-1;8680:2:1;8665:18;;8652:32;8693:33;8652:32;8693:33;:::i;8763:703::-;8881:6;8889;8897;8905;8958:3;8946:9;8937:7;8933:23;8929:33;8926:53;;;8975:1;8972;8965:12;8926:53;9014:9;9001:23;9033:31;9058:5;9033:31;:::i;:::-;9083:5;-1:-1:-1;9140:2:1;9125:18;;9112:32;9153:33;9112:32;9153:33;:::i;:::-;9205:7;-1:-1:-1;9264:2:1;9249:18;;9236:32;9277:33;9236:32;9277:33;:::i;:::-;9329:7;-1:-1:-1;9388:2:1;9373:18;;9360:32;9401:33;9360:32;9401:33;:::i;:::-;8763:703;;;;-1:-1:-1;8763:703:1;;-1:-1:-1;;8763:703:1:o;10556:385::-;10642:6;10650;10658;10666;10719:3;10707:9;10698:7;10694:23;10690:33;10687:53;;;10736:1;10733;10726:12;10687:53;-1:-1:-1;;10759:23:1;;;10829:2;10814:18;;10801:32;;-1:-1:-1;10880:2:1;10865:18;;10852:32;;10931:2;10916:18;10903:32;;-1:-1:-1;10556:385:1;-1:-1:-1;10556:385:1:o;11565:484::-;11618:3;11656:5;11650:12;11683:6;11678:3;11671:19;11709:4;11738:2;11733:3;11729:12;11722:19;;11775:2;11768:5;11764:14;11796:1;11806:218;11820:6;11817:1;11814:13;11806:218;;;11885:13;;-1:-1:-1;;;;;11881:62:1;11869:75;;11964:12;;;;11999:15;;;;11842:1;11835:9;11806:218;;;-1:-1:-1;12040:3:1;;11565:484;-1:-1:-1;;;;;11565:484:1:o;12054:342::-;12255:2;12244:9;12237:21;12218:4;12275:56;12327:2;12316:9;12312:18;12304:6;12275:56;:::i;:::-;12267:64;;12381:6;12374:14;12367:22;12362:2;12351:9;12347:18;12340:50;12054:342;;;;;:::o;12401:127::-;12462:10;12457:3;12453:20;12450:1;12443:31;12493:4;12490:1;12483:15;12517:4;12514:1;12507:15;12533:168;12600:6;12626:10;;;12638;;;12622:27;;12661:11;;;12658:37;;;12675:18;;:::i;:::-;12658:37;12533:168;;;;:::o;13114:422::-;13203:1;13246:5;13203:1;13260:270;13281:7;13271:8;13268:21;13260:270;;;13340:4;13336:1;13332:6;13328:17;13322:4;13319:27;13316:53;;;13349:18;;:::i;:::-;13399:7;13389:8;13385:22;13382:55;;;13419:16;;;;13382:55;13498:22;;;;13458:15;;;;13260:270;;;13264:3;13114:422;;;;;:::o;13541:806::-;13590:5;13620:8;13610:80;;-1:-1:-1;13661:1:1;13675:5;;13610:80;13709:4;13699:76;;-1:-1:-1;13746:1:1;13760:5;;13699:76;13791:4;13809:1;13804:59;;;;13877:1;13872:130;;;;13784:218;;13804:59;13834:1;13825:10;;13848:5;;;13872:130;13909:3;13899:8;13896:17;13893:43;;;13916:18;;:::i;:::-;-1:-1:-1;;13972:1:1;13958:16;;13987:5;;13784:218;;14086:2;14076:8;14073:16;14067:3;14061:4;14058:13;14054:36;14048:2;14038:8;14035:16;14030:2;14024:4;14021:12;14017:35;14014:77;14011:159;;;-1:-1:-1;14123:19:1;;;14155:5;;14011:159;14202:34;14227:8;14221:4;14202:34;:::i;:::-;14272:6;14268:1;14264:6;14260:19;14251:7;14248:32;14245:58;;;14283:18;;:::i;:::-;14321:20;;13541:806;-1:-1:-1;;;13541:806:1:o;14352:140::-;14410:5;14439:47;14480:4;14470:8;14466:19;14460:4;14439:47;:::i;14497:217::-;14537:1;14563;14553:132;;14607:10;14602:3;14598:20;14595:1;14588:31;14642:4;14639:1;14632:15;14670:4;14667:1;14660:15;14553:132;-1:-1:-1;14699:9:1;;14497:217::o;14719:168::-;14792:9;;;14823;;14840:15;;;14834:22;;14820:37;14810:71;;14861:18;;:::i;14892:128::-;14959:9;;;14980:11;;;14977:37;;;14994:18;;:::i;15792:127::-;15853:10;15848:3;15844:20;15841:1;15834:31;15884:4;15881:1;15874:15;15908:4;15905:1;15898:15;15924:175;15961:3;16005:4;15998:5;15994:16;16034:4;16025:7;16022:17;16019:43;;16042:18;;:::i;:::-;16091:1;16078:15;;15924:175;-1:-1:-1;;15924:175:1:o;18363:251::-;18433:6;18486:2;18474:9;18465:7;18461:23;18457:32;18454:52;;;18502:1;18499;18492:12;18454:52;18534:9;18528:16;18553:31;18578:5;18553:31;:::i;18619:605::-;18918:6;18907:9;18900:25;18961:6;18956:2;18945:9;18941:18;18934:34;19004:3;18999:2;18988:9;18984:18;18977:31;18881:4;19025:57;19077:3;19066:9;19062:19;19054:6;19025:57;:::i;:::-;-1:-1:-1;;;;;19118:55:1;;;;19113:2;19098:18;;19091:83;-1:-1:-1;19205:3:1;19190:19;19183:35;19017:65;18619:605;-1:-1:-1;;;18619:605:1:o;19229:125::-;19294:9;;;19315:10;;;19312:36;;;19328:18;;:::i;21422:184::-;21492:6;21545:2;21533:9;21524:7;21520:23;21516:32;21513:52;;;21561:1;21558;21551:12;21513:52;-1:-1:-1;21584:16:1;;21422:184;-1:-1:-1;21422:184:1:o;23521:245::-;23588:6;23641:2;23629:9;23620:7;23616:23;23612:32;23609:52;;;23657:1;23654;23647:12;23609:52;23689:9;23683:16;23708:28;23730:5;23708:28;:::i

Swarm Source

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