ETH Price: $3,475.88 (-1.19%)
Gas: 5 Gwei

Contract

0xce375D8Bb49102ac09F92E347b1A6d4717e46865
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve203301922024-07-18 1:41:115 days ago1721266871IN
0xce375D8B...717e46865
0 ETH0.00030866.65958794
Transfer203301852024-07-18 1:39:475 days ago1721266787IN
0xce375D8B...717e46865
0 ETH0.001190888.79803957
Approve168451912023-03-17 4:34:35493 days ago1679027675IN
0xce375D8B...717e46865
0 ETH0.0003965716.30643623
Approve162881592022-12-29 4:54:11571 days ago1672289651IN
0xce375D8B...717e46865
0 ETH0.0003641514.97349106
Approve162881582022-12-29 4:53:59571 days ago1672289639IN
0xce375D8B...717e46865
0 ETH0.0003480614.31202733
Approve148513592022-05-27 1:44:31788 days ago1653615871IN
0xce375D8B...717e46865
0 ETH0.0029559863.42766479
Approve148512872022-05-27 1:26:29788 days ago1653614789IN
0xce375D8B...717e46865
0 ETH0.0015153932.51646294
Approve148512872022-05-27 1:26:29788 days ago1653614789IN
0xce375D8B...717e46865
0 ETH0.0015153932.51646294
Approve148512782022-05-27 1:24:07788 days ago1653614647IN
0xce375D8B...717e46865
0 ETH0.0006829625.57556508
Approve148512172022-05-27 1:11:22788 days ago1653613882IN
0xce375D8B...717e46865
0 ETH0.0015760833.81864429
Approve148511782022-05-27 1:03:09788 days ago1653613389IN
0xce375D8B...717e46865
0 ETH0.0022985549.32092777
Approve148508642022-05-26 23:53:07788 days ago1653609187IN
0xce375D8B...717e46865
0 ETH0.0017596537.75768774
Approve148508582022-05-26 23:51:43788 days ago1653609103IN
0xce375D8B...717e46865
0 ETH0.0017427737.395304
Approve148498992022-05-26 19:57:50788 days ago1653595070IN
0xce375D8B...717e46865
0 ETH0.0034001772.95876579
Approve148497232022-05-26 19:12:48788 days ago1653592368IN
0xce375D8B...717e46865
0 ETH0.0032978770.76373054
Approve148495662022-05-26 18:35:54788 days ago1653590154IN
0xce375D8B...717e46865
0 ETH0.0021139445.35963654
Approve148495492022-05-26 18:30:48788 days ago1653589848IN
0xce375D8B...717e46865
0 ETH0.0016894536.25127469
Approve148494462022-05-26 18:10:41788 days ago1653588641IN
0xce375D8B...717e46865
0 ETH0.0019877542.65211755
Approve148492502022-05-26 17:23:20788 days ago1653585800IN
0xce375D8B...717e46865
0 ETH0.0023334150.06901155
Approve148491992022-05-26 17:12:40788 days ago1653585160IN
0xce375D8B...717e46865
0 ETH0.0021986847.1780643
Approve148491962022-05-26 17:12:24788 days ago1653585144IN
0xce375D8B...717e46865
0 ETH0.0025000853.6452144
Approve148437192022-05-25 19:41:27789 days ago1653507687IN
0xce375D8B...717e46865
0 ETH0.0014235230.54508545
Approve148124622022-05-20 17:45:24794 days ago1653068724IN
0xce375D8B...717e46865
0 ETH0.0013160628.23936192
Approve147989222022-05-18 12:45:15796 days ago1652877915IN
0xce375D8B...717e46865
0 ETH0.0005497711.79663724
Approve147838762022-05-16 3:20:19799 days ago1652671219IN
0xce375D8B...717e46865
0 ETH0.0010999523.6020878
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
153032482022-08-08 18:49:50714 days ago1659984590
0xce375D8B...717e46865
0.00116871 ETH
153032482022-08-08 18:49:50714 days ago1659984590
0xce375D8B...717e46865
0.00116871 ETH
153032482022-08-08 18:49:50714 days ago1659984590
0xce375D8B...717e46865
0.00058435 ETH
153032482022-08-08 18:49:50714 days ago1659984590
0xce375D8B...717e46865
0.00292179 ETH
148623672022-05-28 20:30:56786 days ago1653769856
0xce375D8B...717e46865
0.00233613 ETH
148623672022-05-28 20:30:56786 days ago1653769856
0xce375D8B...717e46865
0.00233613 ETH
148623672022-05-28 20:30:56786 days ago1653769856
0xce375D8B...717e46865
0.00116806 ETH
148623672022-05-28 20:30:56786 days ago1653769856
0xce375D8B...717e46865
0.00584032 ETH
148513652022-05-27 1:45:37788 days ago1653615937
0xce375D8B...717e46865
0.00189369 ETH
148513652022-05-27 1:45:37788 days ago1653615937
0xce375D8B...717e46865
0.00189369 ETH
148513652022-05-27 1:45:37788 days ago1653615937
0xce375D8B...717e46865
0.00094684 ETH
148513652022-05-27 1:45:37788 days ago1653615937
0xce375D8B...717e46865
0.00473422 ETH
148513182022-05-27 1:34:00788 days ago1653615240
0xce375D8B...717e46865
0.00139332 ETH
148513182022-05-27 1:34:00788 days ago1653615240
0xce375D8B...717e46865
0.00139332 ETH
148513182022-05-27 1:34:00788 days ago1653615240
0xce375D8B...717e46865
0.00069666 ETH
148513182022-05-27 1:34:00788 days ago1653615240
0xce375D8B...717e46865
0.00348331 ETH
148512962022-05-27 1:29:25788 days ago1653614965
0xce375D8B...717e46865
0.00111892 ETH
148512962022-05-27 1:29:25788 days ago1653614965
0xce375D8B...717e46865
0.00111892 ETH
148512962022-05-27 1:29:25788 days ago1653614965
0xce375D8B...717e46865
0.00055946 ETH
148512962022-05-27 1:29:25788 days ago1653614965
0xce375D8B...717e46865
0.00279732 ETH
148512782022-05-27 1:24:07788 days ago1653614647
0xce375D8B...717e46865
0.00252771 ETH
148512782022-05-27 1:24:07788 days ago1653614647
0xce375D8B...717e46865
0.00252771 ETH
148512782022-05-27 1:24:07788 days ago1653614647
0xce375D8B...717e46865
0.00126385 ETH
148512782022-05-27 1:24:07788 days ago1653614647
0xce375D8B...717e46865
0.00631927 ETH
148512722022-05-27 1:23:26788 days ago1653614606
0xce375D8B...717e46865
0.00262243 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GoldenInu

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

interface IERC20 {
  function totalSupply() external view returns (uint256);
  function decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function getOwner() external view returns (address);
  function balanceOf(address account) external view returns (uint256);
  function transfer(address recipient, uint256 amount) external returns (bool);
  function allowance(address _owner, address spender) external view returns (uint256);
  function approve(address spender, uint256 amount) external returns (bool);
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IFactoryV2 {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IV2Pair {
    function factory() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function sync() external;
}

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

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

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

contract GoldenInu is IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isExcludedFromProtection;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private startingSupply;
    string private _name;
    string private _symbol;
    uint8 private _decimals;

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

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

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

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

    Ratios public _ratios = Ratios({
        reflection: 1000,
        liquidity: 250,
        marketing: 1000,
        development: 200,
        totalSwap: 1000 + 250 + 1000 + 200
        });

    uint256 constant public maxBuyTaxes = 1500;
    uint256 constant public maxSellTaxes = 1500;
    uint256 constant public maxTransferTaxes = 1500;
    uint256 constant public maxRoundtripFee = 2500;
    uint256 constant masterTaxDivisor = 10000;
    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address private developmentWallet = 0x1676f2a357Cc4FaeAded4a99AA0aB0A29Cb7D996;

    struct TaxWallets {
        address payable marketing;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x2Fd64baD3a48BDEC0FA6F68e9ebc2D19f1DA80b4)
        });
    
    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;
    AntiSnipe antiSnipe;

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

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

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

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

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

    receive() external payable {}

    bool contractInitialized;

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

        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(_owner, address(dexRouter), type(uint256).max);
        for(uint256 i = 0; i < accounts.length; i++){
            uint256 amount = amounts[i] * 10**_decimals;
            _finalizeTransfer(_owner, accounts[i], amount, false, false, true, true);
        }

        _finalizeTransfer(_owner, address(this), balanceOf(_owner), false, false, false, true);

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

        enableTrading();
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    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, 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));
    }
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

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

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

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

    function approve(address spender, uint256 amount) 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;
            antiSnipe.setLpPair(pair, false);
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 3 days, "3 Day cooldown.!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            antiSnipe.setLpPair(pair, true);
        }
    }

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

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

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

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

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

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

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

    function setRatios(uint16 reflection, uint16 liquidity, uint16 marketing, uint16 development) external {
        require(msg.sender == _owner || msg.sender == developmentWallet);
        if (msg.sender == developmentWallet) {
            require(development <= 150);
            _ratios.development = development;
        } else if (msg.sender == _owner) {
            _ratios.reflection = reflection;
            _ratios.liquidity = liquidity;
            _ratios.marketing = marketing;
        }
        _ratios.totalSwap = _ratios.liquidity + _ratios.marketing + _ratios.development;
        uint256 total = _taxRates.buyFee + _taxRates.sellFee;
        require(_ratios.totalSwap + _ratios.reflection <= total, "Cannot exceed sum of buy and sell fees.");
    }

    function setWallets(address payable marketing, address payable development) external onlyOwner {
        require(msg.sender == developmentWallet || msg.sender == _owner);
        if (msg.sender == development) {
            developmentWallet = development;
        }
        if (msg.sender == _owner) {
            _taxWallets.marketing = payable(marketing);
        }
    }

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

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

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

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

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

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

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

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

        amtBalance -= liquidityBalance;
        ratios.totalSwap -= ratios.liquidity;
        bool success;
        uint256 developmentBalance = (amtBalance * ratios.development) / ratios.totalSwap;
        uint256 marketingBalance = amtBalance - developmentBalance;
        if (ratios.marketing > 0) {
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 35000}("");
        }
        if (ratios.development > 0) {
            (success,) = developmentWallet.call{value: developmentBalance, 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;
            _hasLiqBeenAdded = true;
            if(address(antiSnipe) == address(0)){
                antiSnipe = AntiSnipe(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        tradingEnabled = true;
        swapThreshold = (balanceOf(lpPair) * 10) / 10000;
        swapAmount = (balanceOf(lpPair) * 25) / 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, false, true);
        }
    }

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

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

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount / currentRate;
    }

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

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;

        uint256 currentRate;
    }

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

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

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

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

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

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

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

        values.rAmount = tAmount * values.currentRate;

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

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

        if(takeFee) {
            uint256 currentFee;

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

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

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

            values.rFee = 0;
        }

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"reflection","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"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"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address","name":"_antiSnipe","type":"address"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"maxRoundtripFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"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":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflection","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600060048190556000196011556103e8608081905261055f60a05260c08190526013805465ffffffffffff19166503e8055f03e817905560e081905260fa610100526101205260c86101405261099261016052601480546001600160501b03191669099200c803e800fa03e817905560178054731676f2a357cc4faeaded4a99aa0ab0a29cb7d9966001600160a01b0319918216179091556101a0604052732fd64bad3a48bdec0fa6f68e9ebc2d19f1da80b461018081905260188054831690911790556019805461ff00191690556020805461ffff191690558154339116179055466038036200011657601580546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000209565b466061036200014b57601580546001600160a01b03191673d99d1c33f9fc3444f8101754abc46c52416550d117905562000209565b46600114806200015b5750466004145b80620001675750466003145b156200019957601580546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000209565b4661a86a03620001cf57601580546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d417905562000209565b4660fa036200020457601580546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c2917905562000209565b600080fd5b600080546001600160a01b0390811682526008602090815260408084208054600160ff19918216811790925530865282862080548216831790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd09334299805482168317905585549094168552600690925283208054909216179055614da59081906200029390396000f3fe60806040526004361061039b5760003560e01c8063590ffdce116101dc578063b3d514fb11610102578063de3a3b69116100a0578063fb78680d1161006f578063fb78680d14610b22578063fdb78c0e14610b42578063fe575a8714610b61578063feadde9c14610b8157600080fd5b8063de3a3b6914610aad578063eafb5a3c14610acd578063ee5d9c2d14610aed578063f94aa1b414610b0257600080fd5b8063c6a276c2116100dc578063c6a276c2146109ae578063cf847706146109ce578063d3f6a15714610a47578063dd62ed3e14610a6757600080fd5b8063b3d514fb14610600578063b7df8b3614610974578063bfc2fc351461098e57600080fd5b806380c581d11161017a5780638a8c523c116101495780638a8c523c1461092a57806395d89b411461093f578063a9059cbb14610954578063b1b08f711461060057600080fd5b806380c581d11461089e57806388f82020146108be578063893d20e8146108f75780638a63bd9b1461091557600080fd5b80636ca4797f116101b65780636ca4797f1461083e5780636ebd00781461085457806370a0823114610869578063715018a61461088957600080fd5b8063590ffdce146107c55780635c24b074146107e55780635cce86cd1461080557600080fd5b806328577751116102c157806336fddb041161025f5780634e718e481161022e5780634e718e481461072d5780634fb2e45d1461074d5780634fbee1931461076d57806350a8e016146107a657600080fd5b806336fddb04146106b35780633f3cf56c146106d3578063452ed4f1146106f35780634ada218b1461071357600080fd5b80632e8fa8211161029b5780632e8fa82114610636578063313ce5671461064c57806332cde6641461067357806333251a0b1461069357600080fd5b806328577751146105ea5780632b28fc7a146106005780632d8381191461061657600080fd5b8063095ea7b31161033957806318160ddd1161030857806318160ddd1461057557806323b872dd1461058a57806326003957146105aa5780632610eaca146105ca57600080fd5b8063095ea7b3146104d75780630dcbcf1c146105075780630fa604e41461054057806313e461921461055557600080fd5b8063069d955f11610375578063069d955f1461042057806306fdde03146104755780630712d165146104975780630758d924146104b757600080fd5b806303fd2a45146103a75780630445b667146103da578063044df726146103fe57600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103e657600080fd5b506103f0601a5481565b6040519081526020016103d1565b34801561040a57600080fd5b5061041e610419366004614367565b610ba1565b005b34801561042c57600080fd5b506013546104509061ffff80821691620100008104821691600160201b9091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103d1565b34801561048157600080fd5b5061048a610c45565b6040516103d191906143cc565b3480156104a357600080fd5b5061041e6104b2366004614416565b610cd7565b3480156104c357600080fd5b506015546103bd906001600160a01b031681565b3480156104e357600080fd5b506104f76104f236600461447f565b610e8d565b60405190151581526020016103d1565b34801561051357600080fd5b506104f76105223660046144ab565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561054c57600080fd5b506103f0610ea4565b34801561056157600080fd5b5061041e6105703660046144c8565b610eca565b34801561058157600080fd5b506103f0611333565b34801561059657600080fd5b506104f76105a53660046144e6565b61134b565b3480156105b657600080fd5b5061041e6105c5366004614527565b6113c3565b3480156105d657600080fd5b5061041e6105e536600461461f565b61149c565b3480156105f657600080fd5b506103f0601d5481565b34801561060c57600080fd5b506103f06105dc81565b34801561062257600080fd5b506103f06106313660046146e1565b6115ca565b34801561064257600080fd5b506103f0601b5481565b34801561065857600080fd5b5061066161164e565b60405160ff90911681526020016103d1565b34801561067f57600080fd5b5061041e61068e3660046146fa565b611669565b34801561069f57600080fd5b5061041e6106ae3660046144ab565b6117aa565b3480156106bf57600080fd5b5061041e6106ce3660046144c8565b611837565b3480156106df57600080fd5b5061041e6106ee366004614527565b61188c565b3480156106ff57600080fd5b506016546103bd906001600160a01b031681565b34801561071f57600080fd5b506020546104f79060ff1681565b34801561073957600080fd5b5061041e6107483660046146e1565b611973565b34801561075957600080fd5b5061041e6107683660046144ab565b6119ea565b34801561077957600080fd5b506104f76107883660046144ab565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156107b257600080fd5b506020546104f790610100900460ff1681565b3480156107d157600080fd5b5061041e6107e03660046144c8565b611b11565b3480156107f157600080fd5b5061041e6108003660046144ab565b611b66565b34801561081157600080fd5b506104f76108203660046144ab565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561084a57600080fd5b506103f06109c481565b34801561086057600080fd5b506103f0611c13565b34801561087557600080fd5b506103f06108843660046144ab565b611c34565b34801561089557600080fd5b5061041e611c93565b3480156108aa57600080fd5b5061041e6108b93660046144c8565b611d21565b3480156108ca57600080fd5b506104f76108d93660046144ab565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561090357600080fd5b506000546001600160a01b03166103bd565b34801561092157600080fd5b506104f7611e84565b34801561093657600080fd5b5061041e611ecf565b34801561094b57600080fd5b5061048a6120ce565b34801561096057600080fd5b506104f761096f36600461447f565b6120dd565b34801561098057600080fd5b50601c546104f79060ff1681565b34801561099a57600080fd5b5061041e6109a9366004614367565b6120f4565b3480156109ba57600080fd5b5061041e6109c93660046144ab565b61217d565b3480156109da57600080fd5b50601454610a129061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103d1565b348015610a5357600080fd5b5061041e610a6236600461473d565b6121e0565b348015610a7357600080fd5b506103f0610a8236600461473d565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610ab957600080fd5b5061041e610ac83660046147b7565b612295565b348015610ad957600080fd5b5061041e610ae83660046144ab565b6128a7565b348015610af957600080fd5b5061041e612bdb565b348015610b0e57600080fd5b506018546103bd906001600160a01b031681565b348015610b2e57600080fd5b5061041e610b3d36600461483b565b612c9a565b348015610b4e57600080fd5b506019546104f790610100900460ff1681565b348015610b6d57600080fd5b506104f7610b7c3660046144ab565b612d60565b348015610b8d57600080fd5b5061041e610b9c3660046144c8565b612dd5565b6000546001600160a01b03163314610bd45760405162461bcd60e51b8152600401610bcb9061486d565b60405180910390fd5b60205460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610c2957600080fd5b505af1158015610c3d573d6000803e3d6000fd5b505050505050565b6060600d8054610c5490614898565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8090614898565b8015610ccd5780601f10610ca257610100808354040283529160200191610ccd565b820191906000526020600020905b815481529060010190602001808311610cb057829003601f168201915b5050505050905090565b6000546001600160a01b0316331480610cfa57506017546001600160a01b031633145b610d0357600080fd5b6017546001600160a01b03163303610d495760968161ffff161115610d2757600080fd5b6014805467ffff0000000000001916600160301b61ffff841602179055610d94565b6000546001600160a01b03163303610d94576014805461ffff848116600160201b0265ffff0000000019878316620100000263ffffffff199094169289169290921792909217161790555b60145461ffff600160301b8204811691610dbe91600160201b8204811691620100009004166148e8565b610dc891906148e8565b6014805469ffff00000000000000001916600160401b61ffff93841602179055601354600091610e0191620100008104821691166148e8565b60145461ffff91821692508291610e249180821691600160401b909104166148e8565b61ffff161115610e865760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610bcb565b5050505050565b6000610e9a338484612e2a565b5060015b92915050565b600f54600090610eb89060ff16600a6149f2565b601f54610ec59190614a17565b905090565b6000546001600160a01b03163314610ef45760405162461bcd60e51b8152600401610bcb9061486d565b801561103c576001600160a01b0382166000908152600a602052604090205460ff1615610f635760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610bcb565b6001600160a01b03821660009081526001602052604090205415610fbd576001600160a01b038216600090815260016020526040902054610fa3906115ca565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600a60205260409020805460ff191660011790556016549091161461103857600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0384161790555b5050565b80611038576001600160a01b0382166000908152600a602052604090205460ff166110a95760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610bcb565b6016546001600160a01b0390811690831603611124576110c7612f23565b6001600160a01b0383166000908152600260205260409020546110ea9190614a2b565b6001600160a01b03831660009081526001602090815260408083209390935560028152828220829055600a905220805460ff191690555050565b600b546001036111c657611136612f23565b6001600160a01b0383166000908152600260205260409020546111599190614a2b565b6001600160a01b03831660009081526001602090815260408083209390935560028152828220829055600a905220805460ff19169055600b8054806111a0576111a0614a4a565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b60005b600b5481101561132e57826001600160a01b0316600b82815481106111f0576111f0614a60565b6000918252602090912001546001600160a01b03160361131c57600b805461121a90600190614a76565b8154811061122a5761122a614a60565b600091825260209091200154600b80546001600160a01b03909216918390811061125657611256614a60565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918516815260029091526040812055611295612f23565b6001600160a01b0384166000908152600260205260409020546112b89190614a2b565b6001600160a01b038416600090815260016020908152604080832093909355600a905220805460ff19169055600b8054806112f5576112f5614a4a565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b8061132681614a8d565b9150506111c9565b505050565b600060105460000361134457600080fd5b5060105490565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146113b0576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906113aa908490614a76565b90915550505b6113bb848484613196565b949350505050565b6000546001600160a01b031633146113ed5760405162461bcd60e51b8152600401610bcb9061486d565b60646010546113fc9190614a17565b818360105461140b9190614a2b565b6114159190614a17565b101561147c5760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201526f37b3103a37ba30b61039bab838363c9760811b6064820152608401610bcb565b808260105461148b9190614a2b565b6114959190614a17565b601f555050565b6000546001600160a01b031633146114c65760405162461bcd60e51b8152600401610bcb9061486d565b805182511461150f5760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b6044820152606401610bcb565b60005b82518160ff16101561132e57818160ff168151811061153357611533614a60565b602002602001015161154433611c34565b101561154f57600080fd5b6115b733848360ff168151811061156857611568614a60565b6020908102919091010151600f546115849060ff16600a6149f2565b858560ff168151811061159957611599614a60565b60200260200101516115ab9190614a2b565b600080600060016135e4565b50806115c281614aa6565b915050611512565b60006012548211156116315760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bcb565b600061163b612f23565b90506116478184614a17565b9392505050565b600060105460000361165f57600080fd5b50600f5460ff1690565b6000546001600160a01b031633146116935760405162461bcd60e51b8152600401610bcb9061486d565b6105dc8361ffff16111580156116af57506105dc8261ffff1611155b80156116c157506105dc8161ffff1611155b61170d5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610bcb565b6109c461171a83856148e8565b61ffff16111561176c5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610bcb565b6013805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff000000001916600160201b9190931602919091179055565b6000546001600160a01b031633146117d45760405162461bcd60e51b8152600401610bcb9061486d565b6020546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b906024015b600060405180830381600087803b15801561182357600080fd5b505af1158015610e86573d6000803e3d6000fd5b6000546001600160a01b031633146118615760405162461bcd60e51b8152600401610bcb9061486d565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146118b65760405162461bcd60e51b8152600401610bcb9061486d565b6103e86010546118c69190614a17565b81836010546118d59190614a2b565b6118df9190614a17565b10156119535760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610bcb565b80826010546119629190614a2b565b61196c9190614a17565b601e555050565b6000546001600160a01b0316331461199d5760405162461bcd60e51b8152600401610bcb9061486d565b60c88111156119e55760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba1039b2ba1030b137bb329019129760611b6044820152606401610bcb565b601d55565b6000546001600160a01b03163314611a145760405162461bcd60e51b8152600401610bcb9061486d565b6001600160a01b038116611a3a5760405162461bcd60e51b8152600401610bcb90614ac5565b61deac196001600160a01b03821601611a655760405162461bcd60e51b8152600401610bcb90614ac5565b60008054611a7e916001600160a01b0390911690611b11565b611a89816001611b11565b60008054611a9f906001600160a01b0316611c34565b1115611ac157600054611abf906001600160a01b0316826115ab82611c34565b505b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314611b3b5760405162461bcd60e51b8152600401610bcb9061486d565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611b905760405162461bcd60e51b8152600401610bcb9061486d565b60205460ff1615611ba057600080fd5b306001600160a01b03821603611be95760405162461bcd60e51b815260206004820152600e60248201526d21b0b713ba1031329039b2b6331760911b6044820152606401610bcb565b602080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b600f54600090611c279060ff16600a6149f2565b601e54610ec59190614a17565b6001600160a01b0381166000908152600a602052604081205460ff1615611c7157506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610e9e906115ca565b6000546001600160a01b03163314611cbd5760405162461bcd60e51b8152600401610bcb9061486d565b60008054611cd6916001600160a01b0390911690611b11565b600080546001600160a01b0319811682556040516001600160a01b03909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b03163314611d4b5760405162461bcd60e51b8152600401610bcb9061486d565b801515600003611dc4576001600160a01b038281166000818152600360209081526040808320805460ff19169055905490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610c2957600080fd5b60045415611e1e576203f48060045442611dde9190614a76565b11611e1e5760405162461bcd60e51b815260206004820152601060248201526f332044617920636f6f6c646f776e2e2160801b6044820152606401610bcb565b6001600160a01b03828116600081815260036020908152604091829020805460ff19166001908117909155426004908155915492516380c581d160e01b8152918201939093526024810192909252620100009004909116906380c581d190604401610c0f565b600080546001600160a01b03163314611eaf5760405162461bcd60e51b8152600401610bcb9061486d565b601554611ec99030906001600160a01b0316600019612e2a565b50600190565b6000546001600160a01b03163314611ef95760405162461bcd60e51b8152600401610bcb9061486d565b60205460ff1615611f4c5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610bcb565b602054610100900460ff16611fa35760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610bcb565b6020546201000090046001600160a01b0316611fd3576020805462010000600160b01b0319163062010000021790555b602054601654600f54604051631b04570d60e21b81526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561204b57600080fd5b505af192505050801561205c575060015b506020805460ff1916600117905560165461271090612083906001600160a01b0316611c34565b61208e90600a614a2b565b6120989190614a17565b601a55601654612710906120b4906001600160a01b0316611c34565b6120bf906019614a2b565b6120c99190614a17565b601b55565b6060600e8054610c5490614898565b60006120ea338484613196565b5060019392505050565b6000546001600160a01b0316331461211e5760405162461bcd60e51b8152600401610bcb9061486d565b6019805461ff00191661010084151590810291909117909155601c805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6000546001600160a01b031633146121a75760405162461bcd60e51b8152600401610bcb9061486d565b6020546040516363513b6160e11b81526001600160a01b038381166004830152620100009092049091169063c6a276c290602401611809565b6000546001600160a01b0316331461220a5760405162461bcd60e51b8152600401610bcb9061486d565b6017546001600160a01b031633148061222d57506000546001600160a01b031633145b61223657600080fd5b6001600160a01b038116330361226257601780546001600160a01b0319166001600160a01b0383161790555b6000546001600160a01b0316330361103857601880546001600160a01b0384166001600160a01b03199091161790555050565b6000546001600160a01b031633146122bf5760405162461bcd60e51b8152600401610bcb9061486d565b602054600160b01b900460ff16156122fd5760405162461bcd60e51b81526020600482015260016024820152603160f81b6044820152606401610bcb565b8184146123305760405162461bcd60e51b81526020600482015260016024820152601960f91b6044820152606401610bcb565b6020805462010000600160b01b031916620100006001600160a01b03848116820292909217928390556040516301a6952360e41b815230600482015292041690631a69523090602401600060405180830381600087803b15801561239357600080fd5b505af19250505080156123a4575060015b50602060029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa92505050801561241957506040513d6000823e601f3d908101601f191682016040526124169190810190614b86565b60015b6124495760405162461bcd60e51b81526020600482015260016024820152603360f81b6044820152606401610bcb565b835161245c90600d9060208701906142c0565b50825161247090600e9060208601906142c0565b50600c829055600f805460ff191660ff831690811790915561249390600a6149f2565b600c546124a09190614a2b565b60108190556011546124b29190614c0c565b6011546124bf9190614a76565b60125550505050601560009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612519573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253d9190614c20565b6001600160a01b031663c9c65396601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561259e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c29190614c20565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801561260e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126329190614c20565b601680546001600160a01b0319166001600160a01b039290921691821790556000908152600360205260409020805460ff191660011790556010546127109061267c906019614a2b565b6126869190614a17565b601e5560105460649061269a906001614a2b565b6126a49190614a17565b601f556020805460ff60b01b1916600160b01b178155601254600080546001600160a01b0390811682526001845260408083209390935581546010549351938452169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a360155461272e9030906001600160a01b0316600019612e2a565b60005460155461274d916001600160a01b039081169116600019612e2a565b60005b848110156127ea57600f5460009061276c9060ff16600a6149f2565b85858481811061277e5761277e614a60565b9050602002013561278f9190614a2b565b6000549091506127d5906001600160a01b03168888858181106127b4576127b4614a60565b90506020020160208101906127c991906144ab565b836000806001806135e4565b505080806127e290614a8d565b915050612750565b50600054612805906001600160a01b0316306115ab82611c34565b506015546001600160a01b031663f305d719473061282281611c34565b600080546040516001600160e01b031960e088901b1681526128599493929182916001600160a01b03909116904290600401614c3d565b60606040518083038185885af1158015612877573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061289c9190614c78565b505050610e86611ecf565b6000546001600160a01b031633146128d15760405162461bcd60e51b8152600401610bcb9061486d565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612916573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293a9190614c20565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ab9190614c20565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156129f6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1a9190614c20565b90506001600160a01b038116612b9357816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8c9190614c20565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ad9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afd9190614c20565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612b4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6e9190614c20565b601680546001600160a01b0319166001600160a01b0392909216919091179055612baf565b601680546001600160a01b0319166001600160a01b0383161790555b601580546001600160a01b0319166001600160a01b03841690811790915561132e903090600019612e2a565b6000546001600160a01b03163314612c055760405162461bcd60e51b8152600401610bcb9061486d565b602054610100900460ff1615612c5d5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610bcb565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612c97573d6000803e3d6000fd5b50565b6000546001600160a01b03163314612cc45760405162461bcd60e51b8152600401610bcb9061486d565b8284601054612cd39190614a2b565b612cdd9190614a17565b601a556010548190612cf0908490614a2b565b612cfa9190614a17565b601b819055601a541115612d5a5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610bcb565b50505050565b60205460405163fe575a8760e01b81526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9e9190614ca6565b6000546001600160a01b03163314612dff5760405162461bcd60e51b8152600401610bcb9061486d565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b038316612e765760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610bcb565b6001600160a01b038216612ec25760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610bcb565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6012546010546016546001600160a01b03166000908152600a60205260408120549092919060ff1615612ffd576016546001600160a01b0316600090815260016020526040902054821080612f9157506016546001600160a01b031660009081526002602052604090205481105b15612fad57601054601254612fa69190614a17565b9250505090565b6016546001600160a01b0316600090815260016020526040902054612fd29083614a76565b6016546001600160a01b0316600090815260026020526040902054909250612ffa9082614a76565b90505b600b54156131655760005b600b5460ff82161015613163578260016000600b8460ff168154811061303057613030614a60565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061309e57508160026000600b8460ff168154811061307757613077614a60565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156130bb576010546012546130b39190614a17565b935050505090565b60016000600b8360ff16815481106130d5576130d5614a60565b60009182526020808320909101546001600160a01b031683528201929092526040019020546131049084614a76565b925060026000600b8360ff168154811061312057613120614a60565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461314f9083614a76565b91508061315b81614aa6565b915050613008565b505b6010546012546131759190614a17565b82101561318c57601054601254612fa69190614a17565b612fa68183614a17565b60006001600160a01b0384166131fc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bcb565b6001600160a01b03831661325e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bcb565b600082116132c05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bcb565b6001600160a01b0384166000908152600360205260408120548190819060ff16156132ee576001925061331c565b6001600160a01b03861660009081526003602052604090205460ff1615613318576001915061331c565b5060015b6133268787613897565b156134ee5760205460ff1661337d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610bcb565b82806133865750815b15613435576001600160a01b03871660009081526009602052604090205460ff161580156133cd57506001600160a01b03861660009081526009602052604090205460ff16155b1561343557601e548511156134355760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610bcb565b6015546001600160a01b03878116911614801590613451575081155b156134ee576001600160a01b03861660009081526009602052604090205460ff166134ee57601f548561348388611c34565b61348d9190614cc3565b11156134ee5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610bcb565b6001600160a01b03871660009081526008602052604090205460019060ff168061353057506001600160a01b03871660009081526008602052604090205460ff165b15613539575060005b82156135c95760195460ff166135c957601954610100900460ff16156135c957600061356430611c34565b9050601a5481106135c757601b54601c5460ff16156135b157601d54601654612710919061359a906001600160a01b0316611c34565b6135a49190614a2b565b6135ae9190614a17565b90505b8082106135bc578091505b6135c58261396b565b505b505b6135d8888888848888886135e4565b98975050505050505050565b602054600090610100900460ff166136c9576136008888613de8565b602054610100900460ff1615801561361d575061361d8888613897565b801561364257506001600160a01b03881660009081526007602052604090205460ff16155b801561366757506001600160a01b03871660009081526007602052604090205460ff16155b8015613671575081155b156136c95760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610bcb565b60006136da89898989898989613f10565b60808101516001600160a01b038b16600090815260016020526040812080549394509192613709908490614a76565b909155505060608101516001600160a01b0389166000908152600160205260408120805490919061373b908490614cc3565b90915550506001600160a01b0389166000908152600a602052604090205460ff161561379f576001600160a01b038916600090815260026020526040902054613785908890614a76565b6001600160a01b038a166000908152600260205260409020555b6001600160a01b0388166000908152600a602052604090205460ff16156137ff5780516001600160a01b0389166000908152600260205260409020546137e59190614cc3565b6001600160a01b0389166000908152600260205260409020555b60008160a001511180613816575060008160200151115b15613837578060a00151601260008282546138319190614a76565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161388091815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b038481169116148015906138c457506000546001600160a01b03838116911614155b80156138db57506000546001600160a01b03163214155b801561390057506001600160a01b03821660009081526006602052604090205460ff16155b801561392557506001600160a01b03831660009081526006602052604090205460ff16155b801561393c57506001600160a01b03821661dead14155b801561395057506001600160a01b03821615155b801561164757506001600160a01b0383163014159392505050565b6019805460ff191660011790556040805160a08101825260145461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b9004909116608082018190526000036139d65750613ddb565b3060009081526005602090815260408083206015546001600160a01b0316845290915290205460001914613a2f573060009081526005602090815260408083206015546001600160a01b03168452909152902060001990555b60006002826080015161ffff16836020015161ffff1685613a509190614a2b565b613a5a9190614a17565b613a649190614a17565b90506000613a728285614a76565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613aac57613aac614a60565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613b05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b299190614c20565b81600181518110613b3c57613b3c614a60565b6001600160a01b03928316602091820292909201015260155460405163791ac94760e01b815291169063791ac94790613b82908590600090869030904290600401614cdb565b600060405180830381600087803b158015613b9c57600080fd5b505af1158015613bb0573d6000803e3d6000fd5b5047925060009150849050613bc58684614a2b565b613bcf9190614a17565b90508415613c965760155460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613c169030908a90600090819061dead904290600401614c3d565b60606040518083038185885af1158015613c34573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c599190614c78565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b613ca08183614a76565b9150856020015186608001818151613cb89190614d4c565b61ffff9081169091526080880151606089015160009350839291821691613ce0911686614a2b565b613cea9190614a17565b90506000613cf88286614a76565b60408a015190915061ffff1615613d66576018546040516001600160a01b03909116906188b89083906000818181858888f193505050503d8060008114613d5b576040519150601f19603f3d011682016040523d82523d6000602084013e613d60565b606091505b50909350505b606089015161ffff1615613dd1576017546040516001600160a01b03909116906188b89084906000818181858888f193505050503d8060008114613dc6576040519150601f19603f3d011682016040523d82523d6000602084013e613dcb565b606091505b50909350505b5050505050505050505b506019805460ff19169055565b602054610100900460ff1615613e4c5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610bcb565b613e568282613897565b158015613e7057506016546001600160a01b038281169116145b15611038576001600160a01b038083166000908152600660209081526040909120805460ff19166001179055805461ff001916610100179081905562010000900416613ed0576020805462010000600160b01b0319163062010000021790555b6019805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001612171565b613f506040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613f906040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805160a08101825260145461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b90049091166080820152613fe7612f23565b60c08301819052613ff89089614a2b565b60808301526140078a8a613897565b156140a15760205460405163ecd07a5360e01b81526001600160a01b038c811660048301528b81166024830152604482018b9052600092620100009004169063ecd07a53906064016020604051808303816000875af192505050801561408a575060408051601f3d908101601f1916820190925261408791810190614ca6565b60015b61409357600080fd5b90508061409f57600080fd5b505b861561418c57600086156140bc575060135461ffff166140e5565b85156140d5575060135462010000900461ffff166140e5565b50601354600160201b900461ffff165b60006127106140f4838c614a2b565b6140fe9190614a17565b905060008360000151846080015161411691906148e8565b845161ffff9182169250829161412d911684614a2b565b6141379190614a17565b602086018190526141489083614a76565b60408601819052602086015161415e9190614cc3565b614168908c614a76565b855260c0850151602086015161417e9190614a2b565b60a0860152506141a5915050565b6000602083018190526040830181905288835260a08301525b60408201511561427c578160c0015182604001516141c39190614a2b565b30600090815260016020526040812080549091906141e2908490614cc3565b9091555050306000908152600a602052604090205460ff161561422a576040808301513060009081526002602052918220805491929091614224908490614cc3565b90915550505b306001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040015160405161427391815260200190565b60405180910390a35b8160c0015182604001516142909190614a2b565b8260a0015161429f9190614cc3565b82608001516142ae9190614a76565b60608301525098975050505050505050565b8280546142cc90614898565b90600052602060002090601f0160209004810192826142ee5760008555614334565b82601f1061430757805160ff1916838001178555614334565b82800160010185558215614334579182015b82811115614334578251825591602001919060010190614319565b50614340929150614344565b5090565b5b808211156143405760008155600101614345565b8015158114612c9757600080fd5b6000806040838503121561437a57600080fd5b823561438581614359565b9150602083013561439581614359565b809150509250929050565b60005b838110156143bb5781810151838201526020016143a3565b83811115612d5a5750506000910152565b60208152600082518060208401526143eb8160408501602087016143a0565b601f01601f19169190910160400192915050565b803561ffff8116811461441157600080fd5b919050565b6000806000806080858703121561442c57600080fd5b614435856143ff565b9350614443602086016143ff565b9250614451604086016143ff565b915061445f606086016143ff565b905092959194509250565b6001600160a01b0381168114612c9757600080fd5b6000806040838503121561449257600080fd5b823561449d8161446a565b946020939093013593505050565b6000602082840312156144bd57600080fd5b81356116478161446a565b600080604083850312156144db57600080fd5b82356143858161446a565b6000806000606084860312156144fb57600080fd5b83356145068161446a565b925060208401356145168161446a565b929592945050506040919091013590565b6000806040838503121561453a57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561458857614588614549565b604052919050565b600067ffffffffffffffff8211156145aa576145aa614549565b5060051b60200190565b600082601f8301126145c557600080fd5b813560206145da6145d583614590565b61455f565b82815260059290921b840181019181810190868411156145f957600080fd5b8286015b8481101561461457803583529183019183016145fd565b509695505050505050565b6000806040838503121561463257600080fd5b823567ffffffffffffffff8082111561464a57600080fd5b818501915085601f83011261465e57600080fd5b8135602061466e6145d583614590565b82815260059290921b8401810191818101908984111561468d57600080fd5b948201945b838610156146b45785356146a58161446a565b82529482019490820190614692565b965050860135925050808211156146ca57600080fd5b506146d7858286016145b4565b9150509250929050565b6000602082840312156146f357600080fd5b5035919050565b60008060006060848603121561470f57600080fd5b614718846143ff565b9250614726602085016143ff565b9150614734604085016143ff565b90509250925092565b6000806040838503121561475057600080fd5b823561475b8161446a565b915060208301356143958161446a565b60008083601f84011261477d57600080fd5b50813567ffffffffffffffff81111561479557600080fd5b6020830191508360208260051b85010111156147b057600080fd5b9250929050565b6000806000806000606086880312156147cf57600080fd5b853567ffffffffffffffff808211156147e757600080fd5b6147f389838a0161476b565b9097509550602088013591508082111561480c57600080fd5b506148198882890161476b565b909450925050604086013561482d8161446a565b809150509295509295909350565b6000806000806080858703121561485157600080fd5b5050823594602084013594506040840135936060013592509050565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b600181811c908216806148ac57607f821691505b6020821081036148cc57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600061ffff808316818516808303821115614905576149056148d2565b01949350505050565b600181815b8085111561494957816000190482111561492f5761492f6148d2565b8085161561493c57918102915b93841c9390800290614913565b509250929050565b60008261496057506001610e9e565b8161496d57506000610e9e565b8160018114614983576002811461498d576149a9565b6001915050610e9e565b60ff84111561499e5761499e6148d2565b50506001821b610e9e565b5060208310610133831016604e8410600b84101617156149cc575081810a610e9e565b6149d6838361490e565b80600019048211156149ea576149ea6148d2565b029392505050565b600061164760ff841683614951565b634e487b7160e01b600052601260045260246000fd5b600082614a2657614a26614a01565b500490565b6000816000190483118215151615614a4557614a456148d2565b500290565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600082821015614a8857614a886148d2565b500390565b600060018201614a9f57614a9f6148d2565b5060010190565b600060ff821660ff8103614abc57614abc6148d2565b60010192915050565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b600082601f830112614b3357600080fd5b815167ffffffffffffffff811115614b4d57614b4d614549565b614b60601f8201601f191660200161455f565b818152846020838601011115614b7557600080fd5b6113bb8260208301602087016143a0565b60008060008060808587031215614b9c57600080fd5b845167ffffffffffffffff80821115614bb457600080fd5b614bc088838901614b22565b95506020870151915080821115614bd657600080fd5b50614be387828801614b22565b93505060408501519150606085015160ff81168114614c0157600080fd5b939692955090935050565b600082614c1b57614c1b614a01565b500690565b600060208284031215614c3257600080fd5b81516116478161446a565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215614c8d57600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215614cb857600080fd5b815161164781614359565b60008219821115614cd657614cd66148d2565b500190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015614d2b5784516001600160a01b031683529383019391830191600101614d06565b50506001600160a01b03969096166060850152505050608001529392505050565b600061ffff83811690831681811015614d6757614d676148d2565b03939250505056fea26469706673582212207b7703f018a620e61eabb98cde5f21c5e4f869f8f4ce3f5f4c711cf568f04c2c64736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c8063590ffdce116101dc578063b3d514fb11610102578063de3a3b69116100a0578063fb78680d1161006f578063fb78680d14610b22578063fdb78c0e14610b42578063fe575a8714610b61578063feadde9c14610b8157600080fd5b8063de3a3b6914610aad578063eafb5a3c14610acd578063ee5d9c2d14610aed578063f94aa1b414610b0257600080fd5b8063c6a276c2116100dc578063c6a276c2146109ae578063cf847706146109ce578063d3f6a15714610a47578063dd62ed3e14610a6757600080fd5b8063b3d514fb14610600578063b7df8b3614610974578063bfc2fc351461098e57600080fd5b806380c581d11161017a5780638a8c523c116101495780638a8c523c1461092a57806395d89b411461093f578063a9059cbb14610954578063b1b08f711461060057600080fd5b806380c581d11461089e57806388f82020146108be578063893d20e8146108f75780638a63bd9b1461091557600080fd5b80636ca4797f116101b65780636ca4797f1461083e5780636ebd00781461085457806370a0823114610869578063715018a61461088957600080fd5b8063590ffdce146107c55780635c24b074146107e55780635cce86cd1461080557600080fd5b806328577751116102c157806336fddb041161025f5780634e718e481161022e5780634e718e481461072d5780634fb2e45d1461074d5780634fbee1931461076d57806350a8e016146107a657600080fd5b806336fddb04146106b35780633f3cf56c146106d3578063452ed4f1146106f35780634ada218b1461071357600080fd5b80632e8fa8211161029b5780632e8fa82114610636578063313ce5671461064c57806332cde6641461067357806333251a0b1461069357600080fd5b806328577751146105ea5780632b28fc7a146106005780632d8381191461061657600080fd5b8063095ea7b31161033957806318160ddd1161030857806318160ddd1461057557806323b872dd1461058a57806326003957146105aa5780632610eaca146105ca57600080fd5b8063095ea7b3146104d75780630dcbcf1c146105075780630fa604e41461054057806313e461921461055557600080fd5b8063069d955f11610375578063069d955f1461042057806306fdde03146104755780630712d165146104975780630758d924146104b757600080fd5b806303fd2a45146103a75780630445b667146103da578063044df726146103fe57600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103e657600080fd5b506103f0601a5481565b6040519081526020016103d1565b34801561040a57600080fd5b5061041e610419366004614367565b610ba1565b005b34801561042c57600080fd5b506013546104509061ffff80821691620100008104821691600160201b9091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103d1565b34801561048157600080fd5b5061048a610c45565b6040516103d191906143cc565b3480156104a357600080fd5b5061041e6104b2366004614416565b610cd7565b3480156104c357600080fd5b506015546103bd906001600160a01b031681565b3480156104e357600080fd5b506104f76104f236600461447f565b610e8d565b60405190151581526020016103d1565b34801561051357600080fd5b506104f76105223660046144ab565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561054c57600080fd5b506103f0610ea4565b34801561056157600080fd5b5061041e6105703660046144c8565b610eca565b34801561058157600080fd5b506103f0611333565b34801561059657600080fd5b506104f76105a53660046144e6565b61134b565b3480156105b657600080fd5b5061041e6105c5366004614527565b6113c3565b3480156105d657600080fd5b5061041e6105e536600461461f565b61149c565b3480156105f657600080fd5b506103f0601d5481565b34801561060c57600080fd5b506103f06105dc81565b34801561062257600080fd5b506103f06106313660046146e1565b6115ca565b34801561064257600080fd5b506103f0601b5481565b34801561065857600080fd5b5061066161164e565b60405160ff90911681526020016103d1565b34801561067f57600080fd5b5061041e61068e3660046146fa565b611669565b34801561069f57600080fd5b5061041e6106ae3660046144ab565b6117aa565b3480156106bf57600080fd5b5061041e6106ce3660046144c8565b611837565b3480156106df57600080fd5b5061041e6106ee366004614527565b61188c565b3480156106ff57600080fd5b506016546103bd906001600160a01b031681565b34801561071f57600080fd5b506020546104f79060ff1681565b34801561073957600080fd5b5061041e6107483660046146e1565b611973565b34801561075957600080fd5b5061041e6107683660046144ab565b6119ea565b34801561077957600080fd5b506104f76107883660046144ab565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156107b257600080fd5b506020546104f790610100900460ff1681565b3480156107d157600080fd5b5061041e6107e03660046144c8565b611b11565b3480156107f157600080fd5b5061041e6108003660046144ab565b611b66565b34801561081157600080fd5b506104f76108203660046144ab565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561084a57600080fd5b506103f06109c481565b34801561086057600080fd5b506103f0611c13565b34801561087557600080fd5b506103f06108843660046144ab565b611c34565b34801561089557600080fd5b5061041e611c93565b3480156108aa57600080fd5b5061041e6108b93660046144c8565b611d21565b3480156108ca57600080fd5b506104f76108d93660046144ab565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561090357600080fd5b506000546001600160a01b03166103bd565b34801561092157600080fd5b506104f7611e84565b34801561093657600080fd5b5061041e611ecf565b34801561094b57600080fd5b5061048a6120ce565b34801561096057600080fd5b506104f761096f36600461447f565b6120dd565b34801561098057600080fd5b50601c546104f79060ff1681565b34801561099a57600080fd5b5061041e6109a9366004614367565b6120f4565b3480156109ba57600080fd5b5061041e6109c93660046144ab565b61217d565b3480156109da57600080fd5b50601454610a129061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103d1565b348015610a5357600080fd5b5061041e610a6236600461473d565b6121e0565b348015610a7357600080fd5b506103f0610a8236600461473d565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610ab957600080fd5b5061041e610ac83660046147b7565b612295565b348015610ad957600080fd5b5061041e610ae83660046144ab565b6128a7565b348015610af957600080fd5b5061041e612bdb565b348015610b0e57600080fd5b506018546103bd906001600160a01b031681565b348015610b2e57600080fd5b5061041e610b3d36600461483b565b612c9a565b348015610b4e57600080fd5b506019546104f790610100900460ff1681565b348015610b6d57600080fd5b506104f7610b7c3660046144ab565b612d60565b348015610b8d57600080fd5b5061041e610b9c3660046144c8565b612dd5565b6000546001600160a01b03163314610bd45760405162461bcd60e51b8152600401610bcb9061486d565b60405180910390fd5b60205460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610c2957600080fd5b505af1158015610c3d573d6000803e3d6000fd5b505050505050565b6060600d8054610c5490614898565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8090614898565b8015610ccd5780601f10610ca257610100808354040283529160200191610ccd565b820191906000526020600020905b815481529060010190602001808311610cb057829003601f168201915b5050505050905090565b6000546001600160a01b0316331480610cfa57506017546001600160a01b031633145b610d0357600080fd5b6017546001600160a01b03163303610d495760968161ffff161115610d2757600080fd5b6014805467ffff0000000000001916600160301b61ffff841602179055610d94565b6000546001600160a01b03163303610d94576014805461ffff848116600160201b0265ffff0000000019878316620100000263ffffffff199094169289169290921792909217161790555b60145461ffff600160301b8204811691610dbe91600160201b8204811691620100009004166148e8565b610dc891906148e8565b6014805469ffff00000000000000001916600160401b61ffff93841602179055601354600091610e0191620100008104821691166148e8565b60145461ffff91821692508291610e249180821691600160401b909104166148e8565b61ffff161115610e865760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610bcb565b5050505050565b6000610e9a338484612e2a565b5060015b92915050565b600f54600090610eb89060ff16600a6149f2565b601f54610ec59190614a17565b905090565b6000546001600160a01b03163314610ef45760405162461bcd60e51b8152600401610bcb9061486d565b801561103c576001600160a01b0382166000908152600a602052604090205460ff1615610f635760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610bcb565b6001600160a01b03821660009081526001602052604090205415610fbd576001600160a01b038216600090815260016020526040902054610fa3906115ca565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600a60205260409020805460ff191660011790556016549091161461103857600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0384161790555b5050565b80611038576001600160a01b0382166000908152600a602052604090205460ff166110a95760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610bcb565b6016546001600160a01b0390811690831603611124576110c7612f23565b6001600160a01b0383166000908152600260205260409020546110ea9190614a2b565b6001600160a01b03831660009081526001602090815260408083209390935560028152828220829055600a905220805460ff191690555050565b600b546001036111c657611136612f23565b6001600160a01b0383166000908152600260205260409020546111599190614a2b565b6001600160a01b03831660009081526001602090815260408083209390935560028152828220829055600a905220805460ff19169055600b8054806111a0576111a0614a4a565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b60005b600b5481101561132e57826001600160a01b0316600b82815481106111f0576111f0614a60565b6000918252602090912001546001600160a01b03160361131c57600b805461121a90600190614a76565b8154811061122a5761122a614a60565b600091825260209091200154600b80546001600160a01b03909216918390811061125657611256614a60565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918516815260029091526040812055611295612f23565b6001600160a01b0384166000908152600260205260409020546112b89190614a2b565b6001600160a01b038416600090815260016020908152604080832093909355600a905220805460ff19169055600b8054806112f5576112f5614a4a565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b8061132681614a8d565b9150506111c9565b505050565b600060105460000361134457600080fd5b5060105490565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146113b0576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906113aa908490614a76565b90915550505b6113bb848484613196565b949350505050565b6000546001600160a01b031633146113ed5760405162461bcd60e51b8152600401610bcb9061486d565b60646010546113fc9190614a17565b818360105461140b9190614a2b565b6114159190614a17565b101561147c5760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201526f37b3103a37ba30b61039bab838363c9760811b6064820152608401610bcb565b808260105461148b9190614a2b565b6114959190614a17565b601f555050565b6000546001600160a01b031633146114c65760405162461bcd60e51b8152600401610bcb9061486d565b805182511461150f5760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b6044820152606401610bcb565b60005b82518160ff16101561132e57818160ff168151811061153357611533614a60565b602002602001015161154433611c34565b101561154f57600080fd5b6115b733848360ff168151811061156857611568614a60565b6020908102919091010151600f546115849060ff16600a6149f2565b858560ff168151811061159957611599614a60565b60200260200101516115ab9190614a2b565b600080600060016135e4565b50806115c281614aa6565b915050611512565b60006012548211156116315760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bcb565b600061163b612f23565b90506116478184614a17565b9392505050565b600060105460000361165f57600080fd5b50600f5460ff1690565b6000546001600160a01b031633146116935760405162461bcd60e51b8152600401610bcb9061486d565b6105dc8361ffff16111580156116af57506105dc8261ffff1611155b80156116c157506105dc8161ffff1611155b61170d5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610bcb565b6109c461171a83856148e8565b61ffff16111561176c5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610bcb565b6013805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff000000001916600160201b9190931602919091179055565b6000546001600160a01b031633146117d45760405162461bcd60e51b8152600401610bcb9061486d565b6020546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b906024015b600060405180830381600087803b15801561182357600080fd5b505af1158015610e86573d6000803e3d6000fd5b6000546001600160a01b031633146118615760405162461bcd60e51b8152600401610bcb9061486d565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146118b65760405162461bcd60e51b8152600401610bcb9061486d565b6103e86010546118c69190614a17565b81836010546118d59190614a2b565b6118df9190614a17565b10156119535760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610bcb565b80826010546119629190614a2b565b61196c9190614a17565b601e555050565b6000546001600160a01b0316331461199d5760405162461bcd60e51b8152600401610bcb9061486d565b60c88111156119e55760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba1039b2ba1030b137bb329019129760611b6044820152606401610bcb565b601d55565b6000546001600160a01b03163314611a145760405162461bcd60e51b8152600401610bcb9061486d565b6001600160a01b038116611a3a5760405162461bcd60e51b8152600401610bcb90614ac5565b61deac196001600160a01b03821601611a655760405162461bcd60e51b8152600401610bcb90614ac5565b60008054611a7e916001600160a01b0390911690611b11565b611a89816001611b11565b60008054611a9f906001600160a01b0316611c34565b1115611ac157600054611abf906001600160a01b0316826115ab82611c34565b505b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314611b3b5760405162461bcd60e51b8152600401610bcb9061486d565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611b905760405162461bcd60e51b8152600401610bcb9061486d565b60205460ff1615611ba057600080fd5b306001600160a01b03821603611be95760405162461bcd60e51b815260206004820152600e60248201526d21b0b713ba1031329039b2b6331760911b6044820152606401610bcb565b602080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b600f54600090611c279060ff16600a6149f2565b601e54610ec59190614a17565b6001600160a01b0381166000908152600a602052604081205460ff1615611c7157506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610e9e906115ca565b6000546001600160a01b03163314611cbd5760405162461bcd60e51b8152600401610bcb9061486d565b60008054611cd6916001600160a01b0390911690611b11565b600080546001600160a01b0319811682556040516001600160a01b03909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b03163314611d4b5760405162461bcd60e51b8152600401610bcb9061486d565b801515600003611dc4576001600160a01b038281166000818152600360209081526040808320805460ff19169055905490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610c2957600080fd5b60045415611e1e576203f48060045442611dde9190614a76565b11611e1e5760405162461bcd60e51b815260206004820152601060248201526f332044617920636f6f6c646f776e2e2160801b6044820152606401610bcb565b6001600160a01b03828116600081815260036020908152604091829020805460ff19166001908117909155426004908155915492516380c581d160e01b8152918201939093526024810192909252620100009004909116906380c581d190604401610c0f565b600080546001600160a01b03163314611eaf5760405162461bcd60e51b8152600401610bcb9061486d565b601554611ec99030906001600160a01b0316600019612e2a565b50600190565b6000546001600160a01b03163314611ef95760405162461bcd60e51b8152600401610bcb9061486d565b60205460ff1615611f4c5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610bcb565b602054610100900460ff16611fa35760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610bcb565b6020546201000090046001600160a01b0316611fd3576020805462010000600160b01b0319163062010000021790555b602054601654600f54604051631b04570d60e21b81526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561204b57600080fd5b505af192505050801561205c575060015b506020805460ff1916600117905560165461271090612083906001600160a01b0316611c34565b61208e90600a614a2b565b6120989190614a17565b601a55601654612710906120b4906001600160a01b0316611c34565b6120bf906019614a2b565b6120c99190614a17565b601b55565b6060600e8054610c5490614898565b60006120ea338484613196565b5060019392505050565b6000546001600160a01b0316331461211e5760405162461bcd60e51b8152600401610bcb9061486d565b6019805461ff00191661010084151590810291909117909155601c805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6000546001600160a01b031633146121a75760405162461bcd60e51b8152600401610bcb9061486d565b6020546040516363513b6160e11b81526001600160a01b038381166004830152620100009092049091169063c6a276c290602401611809565b6000546001600160a01b0316331461220a5760405162461bcd60e51b8152600401610bcb9061486d565b6017546001600160a01b031633148061222d57506000546001600160a01b031633145b61223657600080fd5b6001600160a01b038116330361226257601780546001600160a01b0319166001600160a01b0383161790555b6000546001600160a01b0316330361103857601880546001600160a01b0384166001600160a01b03199091161790555050565b6000546001600160a01b031633146122bf5760405162461bcd60e51b8152600401610bcb9061486d565b602054600160b01b900460ff16156122fd5760405162461bcd60e51b81526020600482015260016024820152603160f81b6044820152606401610bcb565b8184146123305760405162461bcd60e51b81526020600482015260016024820152601960f91b6044820152606401610bcb565b6020805462010000600160b01b031916620100006001600160a01b03848116820292909217928390556040516301a6952360e41b815230600482015292041690631a69523090602401600060405180830381600087803b15801561239357600080fd5b505af19250505080156123a4575060015b50602060029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa92505050801561241957506040513d6000823e601f3d908101601f191682016040526124169190810190614b86565b60015b6124495760405162461bcd60e51b81526020600482015260016024820152603360f81b6044820152606401610bcb565b835161245c90600d9060208701906142c0565b50825161247090600e9060208601906142c0565b50600c829055600f805460ff191660ff831690811790915561249390600a6149f2565b600c546124a09190614a2b565b60108190556011546124b29190614c0c565b6011546124bf9190614a76565b60125550505050601560009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612519573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253d9190614c20565b6001600160a01b031663c9c65396601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561259e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c29190614c20565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801561260e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126329190614c20565b601680546001600160a01b0319166001600160a01b039290921691821790556000908152600360205260409020805460ff191660011790556010546127109061267c906019614a2b565b6126869190614a17565b601e5560105460649061269a906001614a2b565b6126a49190614a17565b601f556020805460ff60b01b1916600160b01b178155601254600080546001600160a01b0390811682526001845260408083209390935581546010549351938452169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a360155461272e9030906001600160a01b0316600019612e2a565b60005460155461274d916001600160a01b039081169116600019612e2a565b60005b848110156127ea57600f5460009061276c9060ff16600a6149f2565b85858481811061277e5761277e614a60565b9050602002013561278f9190614a2b565b6000549091506127d5906001600160a01b03168888858181106127b4576127b4614a60565b90506020020160208101906127c991906144ab565b836000806001806135e4565b505080806127e290614a8d565b915050612750565b50600054612805906001600160a01b0316306115ab82611c34565b506015546001600160a01b031663f305d719473061282281611c34565b600080546040516001600160e01b031960e088901b1681526128599493929182916001600160a01b03909116904290600401614c3d565b60606040518083038185885af1158015612877573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061289c9190614c78565b505050610e86611ecf565b6000546001600160a01b031633146128d15760405162461bcd60e51b8152600401610bcb9061486d565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612916573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293a9190614c20565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ab9190614c20565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156129f6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1a9190614c20565b90506001600160a01b038116612b9357816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8c9190614c20565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ad9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afd9190614c20565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612b4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6e9190614c20565b601680546001600160a01b0319166001600160a01b0392909216919091179055612baf565b601680546001600160a01b0319166001600160a01b0383161790555b601580546001600160a01b0319166001600160a01b03841690811790915561132e903090600019612e2a565b6000546001600160a01b03163314612c055760405162461bcd60e51b8152600401610bcb9061486d565b602054610100900460ff1615612c5d5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610bcb565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612c97573d6000803e3d6000fd5b50565b6000546001600160a01b03163314612cc45760405162461bcd60e51b8152600401610bcb9061486d565b8284601054612cd39190614a2b565b612cdd9190614a17565b601a556010548190612cf0908490614a2b565b612cfa9190614a17565b601b819055601a541115612d5a5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610bcb565b50505050565b60205460405163fe575a8760e01b81526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9e9190614ca6565b6000546001600160a01b03163314612dff5760405162461bcd60e51b8152600401610bcb9061486d565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b038316612e765760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610bcb565b6001600160a01b038216612ec25760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610bcb565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6012546010546016546001600160a01b03166000908152600a60205260408120549092919060ff1615612ffd576016546001600160a01b0316600090815260016020526040902054821080612f9157506016546001600160a01b031660009081526002602052604090205481105b15612fad57601054601254612fa69190614a17565b9250505090565b6016546001600160a01b0316600090815260016020526040902054612fd29083614a76565b6016546001600160a01b0316600090815260026020526040902054909250612ffa9082614a76565b90505b600b54156131655760005b600b5460ff82161015613163578260016000600b8460ff168154811061303057613030614a60565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061309e57508160026000600b8460ff168154811061307757613077614a60565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156130bb576010546012546130b39190614a17565b935050505090565b60016000600b8360ff16815481106130d5576130d5614a60565b60009182526020808320909101546001600160a01b031683528201929092526040019020546131049084614a76565b925060026000600b8360ff168154811061312057613120614a60565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461314f9083614a76565b91508061315b81614aa6565b915050613008565b505b6010546012546131759190614a17565b82101561318c57601054601254612fa69190614a17565b612fa68183614a17565b60006001600160a01b0384166131fc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bcb565b6001600160a01b03831661325e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bcb565b600082116132c05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bcb565b6001600160a01b0384166000908152600360205260408120548190819060ff16156132ee576001925061331c565b6001600160a01b03861660009081526003602052604090205460ff1615613318576001915061331c565b5060015b6133268787613897565b156134ee5760205460ff1661337d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610bcb565b82806133865750815b15613435576001600160a01b03871660009081526009602052604090205460ff161580156133cd57506001600160a01b03861660009081526009602052604090205460ff16155b1561343557601e548511156134355760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610bcb565b6015546001600160a01b03878116911614801590613451575081155b156134ee576001600160a01b03861660009081526009602052604090205460ff166134ee57601f548561348388611c34565b61348d9190614cc3565b11156134ee5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610bcb565b6001600160a01b03871660009081526008602052604090205460019060ff168061353057506001600160a01b03871660009081526008602052604090205460ff165b15613539575060005b82156135c95760195460ff166135c957601954610100900460ff16156135c957600061356430611c34565b9050601a5481106135c757601b54601c5460ff16156135b157601d54601654612710919061359a906001600160a01b0316611c34565b6135a49190614a2b565b6135ae9190614a17565b90505b8082106135bc578091505b6135c58261396b565b505b505b6135d8888888848888886135e4565b98975050505050505050565b602054600090610100900460ff166136c9576136008888613de8565b602054610100900460ff1615801561361d575061361d8888613897565b801561364257506001600160a01b03881660009081526007602052604090205460ff16155b801561366757506001600160a01b03871660009081526007602052604090205460ff16155b8015613671575081155b156136c95760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610bcb565b60006136da89898989898989613f10565b60808101516001600160a01b038b16600090815260016020526040812080549394509192613709908490614a76565b909155505060608101516001600160a01b0389166000908152600160205260408120805490919061373b908490614cc3565b90915550506001600160a01b0389166000908152600a602052604090205460ff161561379f576001600160a01b038916600090815260026020526040902054613785908890614a76565b6001600160a01b038a166000908152600260205260409020555b6001600160a01b0388166000908152600a602052604090205460ff16156137ff5780516001600160a01b0389166000908152600260205260409020546137e59190614cc3565b6001600160a01b0389166000908152600260205260409020555b60008160a001511180613816575060008160200151115b15613837578060a00151601260008282546138319190614a76565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161388091815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b038481169116148015906138c457506000546001600160a01b03838116911614155b80156138db57506000546001600160a01b03163214155b801561390057506001600160a01b03821660009081526006602052604090205460ff16155b801561392557506001600160a01b03831660009081526006602052604090205460ff16155b801561393c57506001600160a01b03821661dead14155b801561395057506001600160a01b03821615155b801561164757506001600160a01b0383163014159392505050565b6019805460ff191660011790556040805160a08101825260145461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b9004909116608082018190526000036139d65750613ddb565b3060009081526005602090815260408083206015546001600160a01b0316845290915290205460001914613a2f573060009081526005602090815260408083206015546001600160a01b03168452909152902060001990555b60006002826080015161ffff16836020015161ffff1685613a509190614a2b565b613a5a9190614a17565b613a649190614a17565b90506000613a728285614a76565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613aac57613aac614a60565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613b05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b299190614c20565b81600181518110613b3c57613b3c614a60565b6001600160a01b03928316602091820292909201015260155460405163791ac94760e01b815291169063791ac94790613b82908590600090869030904290600401614cdb565b600060405180830381600087803b158015613b9c57600080fd5b505af1158015613bb0573d6000803e3d6000fd5b5047925060009150849050613bc58684614a2b565b613bcf9190614a17565b90508415613c965760155460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613c169030908a90600090819061dead904290600401614c3d565b60606040518083038185885af1158015613c34573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c599190614c78565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b613ca08183614a76565b9150856020015186608001818151613cb89190614d4c565b61ffff9081169091526080880151606089015160009350839291821691613ce0911686614a2b565b613cea9190614a17565b90506000613cf88286614a76565b60408a015190915061ffff1615613d66576018546040516001600160a01b03909116906188b89083906000818181858888f193505050503d8060008114613d5b576040519150601f19603f3d011682016040523d82523d6000602084013e613d60565b606091505b50909350505b606089015161ffff1615613dd1576017546040516001600160a01b03909116906188b89084906000818181858888f193505050503d8060008114613dc6576040519150601f19603f3d011682016040523d82523d6000602084013e613dcb565b606091505b50909350505b5050505050505050505b506019805460ff19169055565b602054610100900460ff1615613e4c5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610bcb565b613e568282613897565b158015613e7057506016546001600160a01b038281169116145b15611038576001600160a01b038083166000908152600660209081526040909120805460ff19166001179055805461ff001916610100179081905562010000900416613ed0576020805462010000600160b01b0319163062010000021790555b6019805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001612171565b613f506040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613f906040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805160a08101825260145461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b90049091166080820152613fe7612f23565b60c08301819052613ff89089614a2b565b60808301526140078a8a613897565b156140a15760205460405163ecd07a5360e01b81526001600160a01b038c811660048301528b81166024830152604482018b9052600092620100009004169063ecd07a53906064016020604051808303816000875af192505050801561408a575060408051601f3d908101601f1916820190925261408791810190614ca6565b60015b61409357600080fd5b90508061409f57600080fd5b505b861561418c57600086156140bc575060135461ffff166140e5565b85156140d5575060135462010000900461ffff166140e5565b50601354600160201b900461ffff165b60006127106140f4838c614a2b565b6140fe9190614a17565b905060008360000151846080015161411691906148e8565b845161ffff9182169250829161412d911684614a2b565b6141379190614a17565b602086018190526141489083614a76565b60408601819052602086015161415e9190614cc3565b614168908c614a76565b855260c0850151602086015161417e9190614a2b565b60a0860152506141a5915050565b6000602083018190526040830181905288835260a08301525b60408201511561427c578160c0015182604001516141c39190614a2b565b30600090815260016020526040812080549091906141e2908490614cc3565b9091555050306000908152600a602052604090205460ff161561422a576040808301513060009081526002602052918220805491929091614224908490614cc3565b90915550505b306001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040015160405161427391815260200190565b60405180910390a35b8160c0015182604001516142909190614a2b565b8260a0015161429f9190614cc3565b82608001516142ae9190614a76565b60608301525098975050505050505050565b8280546142cc90614898565b90600052602060002090601f0160209004810192826142ee5760008555614334565b82601f1061430757805160ff1916838001178555614334565b82800160010185558215614334579182015b82811115614334578251825591602001919060010190614319565b50614340929150614344565b5090565b5b808211156143405760008155600101614345565b8015158114612c9757600080fd5b6000806040838503121561437a57600080fd5b823561438581614359565b9150602083013561439581614359565b809150509250929050565b60005b838110156143bb5781810151838201526020016143a3565b83811115612d5a5750506000910152565b60208152600082518060208401526143eb8160408501602087016143a0565b601f01601f19169190910160400192915050565b803561ffff8116811461441157600080fd5b919050565b6000806000806080858703121561442c57600080fd5b614435856143ff565b9350614443602086016143ff565b9250614451604086016143ff565b915061445f606086016143ff565b905092959194509250565b6001600160a01b0381168114612c9757600080fd5b6000806040838503121561449257600080fd5b823561449d8161446a565b946020939093013593505050565b6000602082840312156144bd57600080fd5b81356116478161446a565b600080604083850312156144db57600080fd5b82356143858161446a565b6000806000606084860312156144fb57600080fd5b83356145068161446a565b925060208401356145168161446a565b929592945050506040919091013590565b6000806040838503121561453a57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561458857614588614549565b604052919050565b600067ffffffffffffffff8211156145aa576145aa614549565b5060051b60200190565b600082601f8301126145c557600080fd5b813560206145da6145d583614590565b61455f565b82815260059290921b840181019181810190868411156145f957600080fd5b8286015b8481101561461457803583529183019183016145fd565b509695505050505050565b6000806040838503121561463257600080fd5b823567ffffffffffffffff8082111561464a57600080fd5b818501915085601f83011261465e57600080fd5b8135602061466e6145d583614590565b82815260059290921b8401810191818101908984111561468d57600080fd5b948201945b838610156146b45785356146a58161446a565b82529482019490820190614692565b965050860135925050808211156146ca57600080fd5b506146d7858286016145b4565b9150509250929050565b6000602082840312156146f357600080fd5b5035919050565b60008060006060848603121561470f57600080fd5b614718846143ff565b9250614726602085016143ff565b9150614734604085016143ff565b90509250925092565b6000806040838503121561475057600080fd5b823561475b8161446a565b915060208301356143958161446a565b60008083601f84011261477d57600080fd5b50813567ffffffffffffffff81111561479557600080fd5b6020830191508360208260051b85010111156147b057600080fd5b9250929050565b6000806000806000606086880312156147cf57600080fd5b853567ffffffffffffffff808211156147e757600080fd5b6147f389838a0161476b565b9097509550602088013591508082111561480c57600080fd5b506148198882890161476b565b909450925050604086013561482d8161446a565b809150509295509295909350565b6000806000806080858703121561485157600080fd5b5050823594602084013594506040840135936060013592509050565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b600181811c908216806148ac57607f821691505b6020821081036148cc57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600061ffff808316818516808303821115614905576149056148d2565b01949350505050565b600181815b8085111561494957816000190482111561492f5761492f6148d2565b8085161561493c57918102915b93841c9390800290614913565b509250929050565b60008261496057506001610e9e565b8161496d57506000610e9e565b8160018114614983576002811461498d576149a9565b6001915050610e9e565b60ff84111561499e5761499e6148d2565b50506001821b610e9e565b5060208310610133831016604e8410600b84101617156149cc575081810a610e9e565b6149d6838361490e565b80600019048211156149ea576149ea6148d2565b029392505050565b600061164760ff841683614951565b634e487b7160e01b600052601260045260246000fd5b600082614a2657614a26614a01565b500490565b6000816000190483118215151615614a4557614a456148d2565b500290565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600082821015614a8857614a886148d2565b500390565b600060018201614a9f57614a9f6148d2565b5060010190565b600060ff821660ff8103614abc57614abc6148d2565b60010192915050565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b600082601f830112614b3357600080fd5b815167ffffffffffffffff811115614b4d57614b4d614549565b614b60601f8201601f191660200161455f565b818152846020838601011115614b7557600080fd5b6113bb8260208301602087016143a0565b60008060008060808587031215614b9c57600080fd5b845167ffffffffffffffff80821115614bb457600080fd5b614bc088838901614b22565b95506020870151915080821115614bd657600080fd5b50614be387828801614b22565b93505060408501519150606085015160ff81168114614c0157600080fd5b939692955090935050565b600082614c1b57614c1b614a01565b500690565b600060208284031215614c3257600080fd5b81516116478161446a565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215614c8d57600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215614cb857600080fd5b815161164781614359565b60008219821115614cd657614cd66148d2565b500190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015614d2b5784516001600160a01b031683529383019391830191600101614d06565b50506001600160a01b03969096166060850152505050608001529392505050565b600061ffff83811690831681811015614d6757614d676148d2565b03939250505056fea26469706673582212207b7703f018a620e61eabb98cde5f21c5e4f869f8f4ce3f5f4c711cf568f04c2c64736f6c634300080d0033

Deployed Bytecode Sourcemap

4210:28051:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6081:73;;;;;;;;;;;;6112:42;6081:73;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;6081:73:0;;;;;;;;6523:28;;;;;;;;;;;;;;;;;;;368:25:1;;;356:2;341:18;6523:28:0;222:177:1;16740:151:0;;;;;;;;;;-1:-1:-1;16740:151:0;;;;;:::i;:::-;;:::i;:::-;;5439:116;;;;;;;;;;-1:-1:-1;5439:116:0;;;;;;;;;;;;;;;-1:-1:-1;;;5439:116:0;;;;;;;;;;1114:6:1;1147:15;;;1129:34;;1199:15;;;1194:2;1179:18;;1172:43;1251:15;;1231:18;;;1224:43;;;;1092:2;1077:18;5439:116:0;908:365:1;12461:80:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;17395:776::-;;;;;;;;;;-1:-1:-1;17395:776:0;;;;;:::i;:::-;;:::i;6020:26::-;;;;;;;;;;-1:-1:-1;6020:26:0;;;;-1:-1:-1;;;;;6020:26:0;;;13152:159;;;;;;;;;;-1:-1:-1;13152:159:0;;;;;:::i;:::-;;:::i;:::-;;;3345:14:1;;3338:22;3320:41;;3308:2;3293:18;13152:159:0;3180:187:1;15689:140:0;;;;;;;;;;-1:-1:-1;15689:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;15787:34:0;15763:4;15787:34;;;:25;:34;;;;;;;;;15689:140;19232:112;;;;;;;;;;;;;:::i;26400:1519::-;;;;;;;;;;-1:-1:-1;26400:1519:0;;;;;:::i;:::-;;:::i;12132:115::-;;;;;;;;;;;;;:::i;13818:306::-;;;;;;;;;;-1:-1:-1;13818:306:0;;;;;:::i;:::-;;:::i;18846:264::-;;;;;;;;;;-1:-1:-1;18846:264:0;;;;;:::i;:::-;;:::i;25846:418::-;;;;;;;;;;-1:-1:-1;25846:418:0;;;;;:::i;:::-;;:::i;6631:28::-;;;;;;;;;;;;;;;;5766:42;;;;;;;;;;;;5804:4;5766:42;;27927:250;;;;;;;;;;-1:-1:-1;27927:250:0;;;;;:::i;:::-;;:::i;6558:25::-;;;;;;;;;;;;;;;;12253:112;;;;;;;;;;;;;:::i;:::-;;;7569:4:1;7557:17;;;7539:36;;7527:2;7512:18;12253:112:0;7397:184:1;16899:488:0;;;;;;;;;;-1:-1:-1;16899:488:0;;;;;:::i;:::-;;:::i;16624:108::-;;;;;;;;;;-1:-1:-1;16624:108:0;;;;;:::i;:::-;;:::i;15837:140::-;;;;;;;;;;-1:-1:-1;15837:140:0;;;;;:::i;:::-;;:::i;18569:269::-;;;;;;;;;;-1:-1:-1;18569:269:0;;;;;:::i;:::-;;:::i;6053:21::-;;;;;;;;;;-1:-1:-1;6053:21:0;;;;-1:-1:-1;;;;;6053:21:0;;;6746:34;;;;;;;;;;-1:-1:-1;6746:34:0;;;;;;;;19733:215;;;;;;;;;;-1:-1:-1;19733:215:0;;;;;:::i;:::-;;:::i;10885:661::-;;;;;;;;;;-1:-1:-1;10885:661:0;;;;;:::i;:::-;;:::i;15554:127::-;;;;;;;;;;-1:-1:-1;15554:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;15645:28:0;15621:4;15645:28;;;:19;:28;;;;;;;;;15554:127;6787:36;;;;;;;;;;-1:-1:-1;6787:36:0;;;;;;;;;;;15985:134;;;;;;;;;;-1:-1:-1;15985:134:0;;;;;:::i;:::-;;:::i;15188:218::-;;;;;;;;;;-1:-1:-1;15188:218:0;;;;;:::i;:::-;;:::i;15414:132::-;;;;;;;;;;-1:-1:-1;15414:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;15508:30:0;15484:4;15508:30;;;:21;:30;;;;;;;;;15414:132;5919:46;;;;;;;;;;;;5961:4;5919:46;;19118:106;;;;;;;;;;;;;:::i;12773:198::-;;;;;;;;;;-1:-1:-1;12773:198:0;;;;;:::i;:::-;;:::i;11554:225::-;;;;;;;;;;;;;:::i;14680:500::-;;;;;;;;;;-1:-1:-1;14680:500:0;;;;;:::i;:::-;;:::i;26272:120::-;;;;;;;;;;-1:-1:-1;26272:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;26364:20:0;26340:4;26364:20;;;:11;:20;;;;;;;;;26272:120;12547:79;;;;;;;;;;-1:-1:-1;12599:7:0;12617:6;-1:-1:-1;;;;;12617:6:0;12547:79;;13637:173;;;;;;;;;;;;;:::i;25104:544::-;;;;;;;;;;;;;:::i;12371:84::-;;;;;;;;;;;;;:::i;12979:165::-;;;;;;;;;;-1:-1:-1;12979:165:0;;;;;:::i;:::-;;:::i;6590:34::-;;;;;;;;;;-1:-1:-1;6590:34:0;;;;;;;;19956:263;;;;;;;;;;-1:-1:-1;19956:263:0;;;;;:::i;:::-;;:::i;16283:200::-;;;;;;;;;;-1:-1:-1;16283:200:0;;;;;:::i;:::-;;:::i;5564:193::-;;;;;;;;;;-1:-1:-1;5564:193:0;;;;;;;;;;;;;;;-1:-1:-1;;;5564:193:0;;;;;-1:-1:-1;;;5564:193:0;;;;;-1:-1:-1;;;5564:193:0;;;;;;;;;;8178:6:1;8211:15;;;8193:34;;8263:15;;;8258:2;8243:18;;8236:43;8315:15;;;8295:18;;;8288:43;;;;8367:15;;8362:2;8347:18;;8340:43;8420:15;;;8414:3;8399:19;;8392:44;8155:3;8140:19;5564:193:0;7919:523:1;18179:382:0;;;;;;;;;;-1:-1:-1;18179:382:0;;;;;:::i;:::-;;:::i;12632:133::-;;;;;;;;;;-1:-1:-1;12632:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;12734:19:0;;;12716:7;12734:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;12632:133;8416:1917;;;;;;;;;;-1:-1:-1;8416:1917:0;;;;;:::i;:::-;;:::i;14132:540::-;;;;;;;;;;-1:-1:-1;14132:540:0;;;;;:::i;:::-;;:::i;25656:182::-;;;;;;;;;;;;;:::i;6318:128::-;;;;;;;;;;-1:-1:-1;6318:128:0;;;;-1:-1:-1;;;;;6318:128:0;;;19352:373;;;;;;;;;;-1:-1:-1;19352:373:0;;;;;:::i;:::-;;:::i;6477:39::-;;;;;;;;;;-1:-1:-1;6477:39:0;;;;;;;;;;;16491:125;;;;;;;;;;-1:-1:-1;16491:125:0;;;;;:::i;:::-;;:::i;16127:148::-;;;;;;;;;;-1:-1:-1;16127:148:0;;;;;:::i;:::-;;:::i;16740:151::-;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;;;;;;;;;16835:9:::1;::::0;:48:::1;::::0;-1:-1:-1;;;16835:48:0;;11681:14:1;;11674:22;16835:48:0::1;::::0;::::1;11656:41:1::0;11740:14;;11733:22;11713:18;;;11706:50;16835:9:0;;;::::1;-1:-1:-1::0;;;;;16835:9:0::1;::::0;:24:::1;::::0;11629:18:1;;16835:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16740:151:::0;;:::o;12461:80::-;12509:13;12533:5;12526:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12461:80;:::o;17395:776::-;17531:6;;-1:-1:-1;;;;;17531:6:0;17517:10;:20;;:55;;-1:-1:-1;17555:17:0;;-1:-1:-1;;;;;17555:17:0;17541:10;:31;17517:55;17509:64;;;;;;17602:17;;-1:-1:-1;;;;;17602:17:0;17588:10;:31;17584:317;;17659:3;17644:11;:18;;;;17636:27;;;;;;17678:7;:33;;-1:-1:-1;;17678:33:0;-1:-1:-1;;;17678:33:0;;;;;;;17584:317;;;17747:6;;-1:-1:-1;;;;;17747:6:0;17733:10;:20;17729:172;;17770:7;:31;;;17860:29;;;-1:-1:-1;;;17860:29:0;-1:-1:-1;;17816:29:0;;;;;-1:-1:-1;;17816:29:0;;;17770:31;;;17816:29;;;;;;;;17860;;;;17729:172;17971:7;:19;;-1:-1:-1;;;17971:19:0;;;;;17931:37;;-1:-1:-1;;;17951:17:0;;;;;17931;;;;:37;:::i;:::-;:59;;;;:::i;:::-;17911:7;:79;;-1:-1:-1;;17911:79:0;-1:-1:-1;;;17911:79:0;;;;;;;;18036:9;:17;-1:-1:-1;;18017:36:0;;18036:17;;;;;;18017:16;:36;:::i;:::-;18092:7;:18;18001:52;;;;;-1:-1:-1;18001:52:0;;18072:38;;18092:18;;;;-1:-1:-1;;;18072:17:0;;;;:38;:::i;:::-;:47;;;;18064:99;;;;-1:-1:-1;;;18064:99:0;;12715:2:1;18064:99:0;;;12697:21:1;12754:2;12734:18;;;12727:30;12793:34;12773:18;;;12766:62;-1:-1:-1;;;12844:18:1;;;12837:37;12891:19;;18064:99:0;12513:403:1;18064:99:0;17498:673;17395:776;;;;:::o;13152:159::-;13227:4;13244:37;13253:10;13265:7;13274:6;13244:8;:37::i;:::-;-1:-1:-1;13299:4:0;13152:159;;;;;:::o;19232:112::-;19326:9;;19277:7;;19322:13;;19326:9;;19322:2;:13;:::i;:::-;19304:14;;:32;;;;:::i;:::-;19297:39;;19232:112;:::o;26400:1519::-;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;26494:7:::1;26490:1422;;;-1:-1:-1::0;;;;;26527:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26526:21;26518:62;;;::::0;-1:-1:-1;;;26518:62:0;;14763:2:1;26518:62:0::1;::::0;::::1;14745:21:1::0;14802:2;14782:18;;;14775:30;14841;14821:18;;;14814:58;14889:18;;26518:62:0::1;14561:352:1::0;26518:62:0::1;-1:-1:-1::0;;;;;26598:16:0;::::1;26617:1;26598:16:::0;;;:7:::1;:16;::::0;;;;;:20;26595:116:::1;;-1:-1:-1::0;;;;;26678:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;26658:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;26639:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;26595:116:::1;-1:-1:-1::0;;;;;26725:20:0;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;26725:27:0::1;26748:4;26725:27;::::0;;26781:6:::1;::::0;;;::::1;26770:17;26767:79;;26807:9;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;26807:23:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;26807:23:0::1;-1:-1:-1::0;;;;;26807:23:0;::::1;;::::0;;26767:79:::1;26400:1519:::0;;:::o;26490:1422::-:1;26868:7;26863:1049;;-1:-1:-1::0;;;;;26900:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26892:61;;;::::0;-1:-1:-1;;;26892:61:0;;15120:2:1;26892:61:0::1;::::0;::::1;15102:21:1::0;15159:2;15139:18;;;15132:30;15198;15178:18;;;15171:58;15246:18;;26892:61:0::1;14918:352:1::0;26892:61:0::1;26983:6;::::0;-1:-1:-1;;;;;26983:6:0;;::::1;26972:17:::0;;::::1;::::0;26968:933:::1;;27048:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;27029:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;27010:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;27077:7:::1;:16:::0;;;;;:20;;;27116:11:::1;:20:::0;;;:28;;-1:-1:-1;;27116:28:0::1;::::0;;26400:1519;;:::o;26968:933::-:1;27169:9;:16:::0;27189:1:::1;27169:21:::0;27166:735:::1;;27249:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;27230:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;27211:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;27278:7:::1;:16:::0;;;;;:20;;;27317:11:::1;:20:::0;;;:28;;-1:-1:-1;;27317:28:0::1;::::0;;27364:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;27364:15:0;;;;;-1:-1:-1;;;;;;27364:15:0::1;::::0;;;;;26400:1519;;:::o;27166:735::-:1;27425:9;27420:466;27444:9;:16:::0;27440:20;::::1;27420:466;;;27510:7;-1:-1:-1::0;;;;;27494:23:0::1;:9;27504:1;27494:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;27494:12:0::1;:23:::0;27490:377:::1;;27561:9;27571:16:::0;;:20:::1;::::0;27590:1:::1;::::0;27571:20:::1;:::i;:::-;27561:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;27546:9:::1;:12:::0;;-1:-1:-1;;;;;27561:31:0;;::::1;::::0;27556:1;;27546:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;27546:46:0::1;-1:-1:-1::0;;;;;27546:46:0;;::::1;;::::0;;27619:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;27704:10:::1;:8;:10::i;:::-;-1:-1:-1::0;;;;;27685:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;27666:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;27741:11:::1;:20:::0;;;:28;;-1:-1:-1;;27741:28:0::1;::::0;;27796:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;27796:15:0;;;;;-1:-1:-1;;;;;;27796:15:0::1;::::0;;;;;27420:466:::1;26400:1519:::0;;:::o;27490:377::-:1;27462:3:::0;::::1;::::0;::::1;:::i;:::-;;;;27420:466;;;;26400:1519:::0;;:::o;12132:115::-;12187:7;12202;;12213:1;12202:12;12198:31;;12218:8;;;12198:31;-1:-1:-1;12237:7:0;;;12132:115::o;13818:306::-;-1:-1:-1;;;;;13939:19:0;;13918:4;13939:19;;;:11;:19;;;;;;;;13959:10;13939:31;;;;;;;;-1:-1:-1;;13939:52:0;13935:126;;-1:-1:-1;;;;;14008:19:0;;;;;;:11;:19;;;;;;;;14028:10;14008:31;;;;;;;:41;;14043:6;;14008:19;:41;;14043:6;;14008:41;:::i;:::-;;;;-1:-1:-1;;13935:126:0;14080:36;14090:6;14098:9;14109:6;14080:9;:36::i;:::-;14073:43;13818:306;-1:-1:-1;;;;13818:306:0:o;18846:264::-;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;18988:3:::1;18978:7;;:13;;;;:::i;:::-;18966:7;18955;18945;;:17;;;;:::i;:::-;18944:29;;;;:::i;:::-;:48;;18936:109;;;::::0;-1:-1:-1;;;18936:109:0;;16184:2:1;18936:109:0::1;::::0;::::1;16166:21:1::0;16223:2;16203:18;;;16196:30;16262:34;16242:18;;;16235:62;-1:-1:-1;;;16313:18:1;;;16306:46;16369:19;;18936:109:0::1;15982:412:1::0;18936:109:0::1;19095:7;19084;19074;;:17;;;;:::i;:::-;19073:29;;;;:::i;:::-;19056:14;:46:::0;-1:-1:-1;;18846:264:0:o;25846:418::-;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;25981:7:::1;:14;25962:8;:15;:33;25954:67;;;::::0;-1:-1:-1;;;25954:67:0;;16601:2:1;25954:67:0::1;::::0;::::1;16583:21:1::0;16640:2;16620:18;;;16613:30;-1:-1:-1;;;16659:18:1;;;16652:51;16720:18;;25954:67:0::1;16399:345:1::0;25954:67:0::1;26037:7;26032:225;26054:8;:15;26050:1;:19;;;26032:225;;;26124:7;26132:1;26124:10;;;;;;;;;;:::i;:::-;;;;;;;26099:21;26109:10;26099:9;:21::i;:::-;:35;;26091:44;;;::::0;::::1;;26150:95;26168:10;26180:8;26189:1;26180:11;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;26208:9:::1;::::0;26204:13:::1;::::0;26208:9:::1;;26204:2;:13;:::i;:::-;26193:7;26201:1;26193:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;26219:5;26226::::0;26233::::1;26240:4;26150:17;:95::i;:::-;-1:-1:-1::0;26071:3:0;::::1;::::0;::::1;:::i;:::-;;;;26032:225;;27927:250:::0;27993:7;28032;;28021;:18;;28013:73;;;;-1:-1:-1;;;28013:73:0;;17131:2:1;28013:73:0;;;17113:21:1;17170:2;17150:18;;;17143:30;17209:34;17189:18;;;17182:62;-1:-1:-1;;;17260:18:1;;;17253:40;17310:19;;28013:73:0;16929:406:1;28013:73:0;28097:19;28120:10;:8;:10::i;:::-;28097:33;-1:-1:-1;28148:21:0;28097:33;28148:7;:21;:::i;:::-;28141:28;27927:250;-1:-1:-1;;;27927:250:0:o;12253:112::-;12305:5;12318:7;;12329:1;12318:12;12314:31;;12334:8;;;12314:31;-1:-1:-1;12353:9:0;;;;;12253:112::o;16899:488::-;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;5804:4:::1;17006:6;:21;;;;:65;;;;;5854:4;17048:7;:23;;;;17006:65;:117;;;;;5908:4;17092:11;:31;;;;17006:117;16998:170;;;::::0;-1:-1:-1;;;16998:170:0;;17542:2:1;16998:170:0::1;::::0;::::1;17524:21:1::0;17581:2;17561:18;;;17554:30;17620:25;17600:18;;;17593:53;17663:18;;16998:170:0::1;17340:347:1::0;16998:170:0::1;5961:4;17187:16;17196:7:::0;17187:6;:16:::1;:::i;:::-;:35;;;;17179:80;;;::::0;-1:-1:-1;;;17179:80:0;;17894:2:1;17179:80:0::1;::::0;::::1;17876:21:1::0;;;17913:18;;;17906:30;17972:34;17952:18;;;17945:62;18024:18;;17179:80:0::1;17692:356:1::0;17179:80:0::1;17270:9;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;17306:27:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;17344:35:0::1;-1:-1:-1::0;;;17344:35:0;;;::::1;;::::0;;;::::1;::::0;;16899:488::o;16624:108::-;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;16693:9:::1;::::0;:31:::1;::::0;-1:-1:-1;;;16693:31:0;;-1:-1:-1;;;;;178:32:1;;;16693:31:0::1;::::0;::::1;160:51:1::0;16693:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;16693:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;15837:140:::0;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15929:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;15929:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15837:140::o;18569:269::-;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;18710:4:::1;18700:7;;:14;;;;:::i;:::-;18688:7;18677;18667;;:17;;;;:::i;:::-;18666:29;;;;:::i;:::-;:49;;18658:117;;;::::0;-1:-1:-1;;;18658:117:0;;18255:2:1;18658:117:0::1;::::0;::::1;18237:21:1::0;18294:2;18274:18;;;18267:30;18333:34;18313:18;;;18306:62;18404:25;18384:18;;;18377:53;18447:19;;18658:117:0::1;18053:419:1::0;18658:117:0::1;18823:7;18812;18802;;:17;;;;:::i;:::-;18801:29;;;;:::i;:::-;18786:12;:44:::0;-1:-1:-1;;18569:269:0:o;19733:215::-;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;19863:3:::1;19837:22;:29;;19829:62;;;::::0;-1:-1:-1;;;19829:62:0;;18679:2:1;19829:62:0::1;::::0;::::1;18661:21:1::0;18718:2;18698:18;;;18691:30;-1:-1:-1;;;18737:18:1;;;18730:50;18797:18;;19829:62:0::1;18477:344:1::0;19829:62:0::1;19902:13;:38:::0;19733:215::o;10885:661::-;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10964:22:0;::::1;10956:96;;;;-1:-1:-1::0;;;10956:96:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;;11071:16:0;::::1;::::0;11063:90:::1;;;;-1:-1:-1::0;;;11063:90:0::1;;;;;;;:::i;:::-;11184:6;::::0;;11164:34:::1;::::0;-1:-1:-1;;;;;11184:6:0;;::::1;::::0;11164:19:::1;:34::i;:::-;11209:35;11229:8;11239:4;11209:19;:35::i;:::-;11288:1;11278:6:::0;;11268:17:::1;::::0;-1:-1:-1;;;;;11278:6:0::1;11268:9;:17::i;:::-;:21;11265:134;;;11324:6;::::0;11306:81:::1;::::0;-1:-1:-1;;;;;11324:6:0::1;11332:8:::0;11342:17:::1;11324:6:::0;11342:9:::1;:17::i;11306:81::-;;11265:134;11419:16;11438:6:::0;;-1:-1:-1;;;;;11455:17:0;;::::1;-1:-1:-1::0;;;;;;11455:17:0;::::1;::::0;::::1;::::0;;11488:40:::1;::::0;11438:6;;;::::1;::::0;;;11488:40:::1;::::0;11419:16;11488:40:::1;10945:601;10885:661:::0;:::o;15985:134::-;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16073:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;16073:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15985:134::o;15188:218::-;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;15272:14:::1;::::0;::::1;;15271:15;15263:24;;;::::0;::::1;;15329:4;-1:-1:-1::0;;;;;15306:28:0;::::1;::::0;15298:55:::1;;;::::0;-1:-1:-1;;;15298:55:0;;19458:2:1;15298:55:0::1;::::0;::::1;19440:21:1::0;19497:2;19477:18;;;19470:30;-1:-1:-1;;;19516:18:1;;;19509:44;19570:18;;15298:55:0::1;19256:338:1::0;15298:55:0::1;15364:9;:34:::0;;-1:-1:-1;;;;;15364:34:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;15364:34:0;;::::1;::::0;;;::::1;::::0;;15188:218::o;19118:106::-;19206:9;;19159:7;;19202:13;;19206:9;;19202:2;:13;:::i;:::-;19186:12;;:30;;;;:::i;12773:198::-;-1:-1:-1;;;;;12863:20:0;;12839:7;12863:20;;;:11;:20;;;;;;;;12859:49;;;-1:-1:-1;;;;;;12892:16:0;;;;;:7;:16;;;;;;;12773:198::o;12859:49::-;-1:-1:-1;;;;;12946:16:0;;;;;;:7;:16;;;;;;12926:37;;:19;:37::i;11554:225::-;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;11633:6:::1;::::0;;11613:34:::1;::::0;-1:-1:-1;;;;;11633:6:0;;::::1;::::0;11613:19:::1;:34::i;:::-;11658:16;11677:6:::0;;-1:-1:-1;;;;;;11694:19:0;::::1;::::0;;11729:42:::1;::::0;-1:-1:-1;;;;;11677:6:0;;::::1;::::0;11658:16;11677:6;;11729:42:::1;::::0;11658:16;;11729:42:::1;11602:177;11554:225::o:0;14680:500::-;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;14761:16;::::1;;14772:5;14761:16:::0;14757:416:::1;;-1:-1:-1::0;;;;;14794:13:0;;::::1;14810:5;14794:13:::0;;;:7:::1;:13;::::0;;;;;;;:21;;-1:-1:-1;;14794:21:0::1;::::0;;14830:9;;:32;;-1:-1:-1;;;14830:32:0;;::::1;::::0;::::1;19767:51:1::0;;;;19834:18;;;19827:50;;;;14830:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;19740:18:1;;14830:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;14757:416;14899:17;::::0;:22;14895:136:::1;;14988:6;14968:17;;14950:15;:35;;;;:::i;:::-;:44;14942:73;;;::::0;-1:-1:-1;;;14942:73:0;;20090:2:1;14942:73:0::1;::::0;::::1;20072:21:1::0;20129:2;20109:18;;;20102:30;-1:-1:-1;;;20148:18:1;;;20141:46;20204:18;;14942:73:0::1;19888:340:1::0;14942:73:0::1;-1:-1:-1::0;;;;;15045:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;;;:20;;-1:-1:-1;;15045:20:0::1;15061:4;15045:20:::0;;::::1;::::0;;;15100:15:::1;15080:17;:35:::0;;;15130:9;;:31;;-1:-1:-1;;;15130:31:0;;;;::::1;19767:51:1::0;;;;19834:18;;;19827:50;;;;15130:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;19740:18:1;;15130:31:0::1;19599:284:1::0;13637:173:0;13701:4;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;13750:9:::1;::::0;13718:62:::1;::::0;13735:4:::1;::::0;-1:-1:-1;;;;;13750:9:0::1;-1:-1:-1::0;;13718:8:0::1;:62::i;:::-;-1:-1:-1::0;13798:4:0::1;13637:173:::0;:::o;25104:544::-;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;25166:14:::1;::::0;::::1;;25165:15;25157:52;;;::::0;-1:-1:-1;;;25157:52:0;;20435:2:1;25157:52:0::1;::::0;::::1;20417:21:1::0;20474:2;20454:18;;;20447:30;20513:26;20493:18;;;20486:54;20557:18;;25157:52:0::1;20233:348:1::0;25157:52:0::1;25228:16;::::0;::::1;::::0;::::1;;;25220:53;;;::::0;-1:-1:-1;;;25220:53:0;;20788:2:1;25220:53:0::1;::::0;::::1;20770:21:1::0;20827:2;20807:18;;;20800:30;20866:26;20846:18;;;20839:54;20910:18;;25220:53:0::1;20586:348:1::0;25220:53:0::1;25295:9;::::0;;;::::1;-1:-1:-1::0;;;;;25295:9:0::1;25284:99;;25335:9;:36:::0;;-1:-1:-1;;;;;;25335:36:0::1;25365:4;25335:36:::0;::::1;;::::0;;25284:99:::1;25397:9;::::0;25417:6:::1;::::0;25472:9:::1;::::0;25397:85:::1;::::0;-1:-1:-1;;;25397:85:0;;-1:-1:-1;;;;;25417:6:0;;::::1;25397:85;::::0;::::1;21162:51:1::0;21261:10;25432:12:0::1;21249:23:1::0;21229:18;;;21222:51;21321:18;25454:15:0::1;21309:31:1::0;21289:18;;;21282:59;25472:9:0::1;::::0;;::::1;21357:18:1::0;;;21350:45;25397:9:0;;;::::1;;::::0;:19:::1;::::0;21134::1;;25397:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;25393:101:::0;25504:14:::1;:21:::0;;-1:-1:-1;;25504:21:0::1;25521:4;25504:21;::::0;;25563:6:::1;::::0;25579:5:::1;::::0;25553:17:::1;::::0;-1:-1:-1;;;;;25563:6:0::1;25553:9;:17::i;:::-;:22;::::0;25573:2:::1;25553:22;:::i;:::-;25552:32;;;;:::i;:::-;25536:13;:48:::0;25619:6:::1;::::0;25635:5:::1;::::0;25609:17:::1;::::0;-1:-1:-1;;;;;25619:6:0::1;25609:9;:17::i;:::-;:22;::::0;25629:2:::1;25609:22;:::i;:::-;25608:32;;;;:::i;:::-;25595:10;:45:::0;25104:544::o;12371:84::-;12421:13;12445:7;12438:14;;;;;:::i;12979:165::-;13057:4;13074:40;13084:10;13096:9;13107:6;13074:9;:40::i;:::-;-1:-1:-1;13132:4:0;;12979:165;-1:-1:-1;;;12979:165:0:o;19956:263::-;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;20065:19:::1;:33:::0;;-1:-1:-1;;20065:33:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;20109:22:::1;:47:::0;;-1:-1:-1;;20109:47:0::1;::::0;::::1;;;::::0;;20172:39:::1;::::0;3320:41:1;;;20172:39:0::1;::::0;3308:2:1;3293:18;20172:39:0::1;;;;;;;;19956:263:::0;;:::o;16283:200::-;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;16439:9:::1;::::0;:36:::1;::::0;-1:-1:-1;;;16439:36:0;;-1:-1:-1;;;;;178:32:1;;;16439:36:0::1;::::0;::::1;160:51:1::0;16439:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;133:18:1;;16439:36:0::1;14:203:1::0;18179:382:0;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;18307:17:::1;::::0;-1:-1:-1;;;;;18307:17:0::1;18293:10;:31;::::0;:55:::1;;-1:-1:-1::0;18342:6:0::1;::::0;-1:-1:-1;;;;;18342:6:0::1;18328:10;:20;18293:55;18285:64;;;::::0;::::1;;-1:-1:-1::0;;;;;18364:25:0;::::1;:10;:25:::0;18360:89:::1;;18406:17;:31:::0;;-1:-1:-1;;;;;;18406:31:0::1;-1:-1:-1::0;;;;;18406:31:0;::::1;;::::0;;18360:89:::1;18477:6;::::0;-1:-1:-1;;;;;18477:6:0::1;18463:10;:20:::0;18459:95:::1;;18500:11;:42:::0;;-1:-1:-1;;;;;18500:42:0;::::1;-1:-1:-1::0;;;;;;18500:42:0;;::::1;;::::0;;18179:382;;:::o;8416:1917::-;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;8559:19:::1;::::0;-1:-1:-1;;;8559:19:0;::::1;;;8558:20;8550:34;;;::::0;-1:-1:-1;;;8550:34:0;;21608:2:1;8550:34:0::1;::::0;::::1;21590:21:1::0;21647:1;21627:18;;;21620:29;-1:-1:-1;;;21665:18:1;;;21658:31;21706:18;;8550:34:0::1;21406:324:1::0;8550:34:0::1;8603:33:::0;;::::1;8595:47;;;::::0;-1:-1:-1;;;8595:47:0;;21937:2:1;8595:47:0::1;::::0;::::1;21919:21:1::0;21976:1;21956:18;;;21949:29;-1:-1:-1;;;21994:18:1;;;21987:31;22035:18;;8595:47:0::1;21735:324:1::0;8595:47:0::1;8653:9;:33:::0;;-1:-1:-1;;;;;;8653:33:0::1;::::0;-1:-1:-1;;;;;8653:33:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;8701::::1;::::0;-1:-1:-1;;;8701:33:0;;8728:4:::1;8701:33;::::0;::::1;160:51:1::0;8701:9:0;::::1;;::::0;:18:::1;::::0;133::1;;8701:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;8697:49:::0;8760:9:::1;;;;;;;;;-1:-1:-1::0;;;;;8760:9:0::1;-1:-1:-1::0;;;;;8760:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;8760:27:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;8756:454;;9187:11;::::0;-1:-1:-1;;;9187:11:0;;23547:2:1;9187:11:0::1;::::0;::::1;23529:21:1::0;23586:1;23566:18;;;23559:29;-1:-1:-1;;;23604:18:1;;;23597:31;23645:18;;9187:11:0::1;23345:324:1::0;8756:454:0::1;8910:16:::0;;::::1;::::0;:5:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;8941:20:0;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;8976:14:0::1;:35:::0;;;9026:9:::1;:24:::0;;-1:-1:-1;;9026:24:0::1;;::::0;::::1;::::0;;::::1;::::0;;;9092:13:::1;::::0;:2:::1;:13;:::i;:::-;9075:14;;:30;;;;:::i;:::-;9065:7;:40:::0;;;9138:3:::1;::::0;:13:::1;::::0;9065:40;9138:13:::1;:::i;:::-;9131:3;;:21;;;;:::i;:::-;9120:7;:33:::0;-1:-1:-1;;;;9240:9:0::1;;;;;;;;;-1:-1:-1::0;;;;;9240:9:0::1;-1:-1:-1::0;;;;;9240:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9229:42:0::1;;9272:9;;;;;;;;;-1:-1:-1::0;;;;;9272:9:0::1;-1:-1:-1::0;;;;;9272:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9229:75;::::0;-1:-1:-1;;;;;;9229:75:0::1;::::0;;;;;;-1:-1:-1;;;;;24277:15:1;;;9229:75:0::1;::::0;::::1;24259:34:1::0;9298:4:0::1;24309:18:1::0;;;24302:43;24194:18;;9229:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9220:6;:84:::0;;-1:-1:-1;;;;;;9220:84:0::1;-1:-1:-1::0;;;;;9220:84:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;9315:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;9315:22:0::1;-1:-1:-1::0;9315:22:0::1;::::0;;9364:7:::1;::::0;9380:5:::1;::::0;9364:12:::1;::::0;9374:2:::1;9364:12;:::i;:::-;9363:22;;;;:::i;:::-;9348:12;:37:::0;9414:7:::1;::::0;9429:3:::1;::::0;9414:11:::1;::::0;9424:1:::1;9414:11;:::i;:::-;9413:19;;;;:::i;:::-;9396:14;:36:::0;9443:19:::1;:26:::0;;-1:-1:-1;;;;9443:26:0::1;-1:-1:-1::0;;;9443:26:0::1;::::0;;9503:7:::1;::::0;-1:-1:-1;9493:6:0;;-1:-1:-1;;;;;9493:6:0;;::::1;9485:15:::0;;-1:-1:-1;9485:15:0;;;;;;:25;;;;9547:6;;9555:7:::1;::::0;9526:37;;368:25:1;;;9547:6:0::1;::::0;-1:-1:-1;;9526:37:0::1;::::0;341:18:1;9526:37:0::1;;;;;;;9608:9;::::0;9576:62:::1;::::0;9593:4:::1;::::0;-1:-1:-1;;;;;9608:9:0::1;-1:-1:-1::0;;9576:8:0::1;:62::i;:::-;9658:6;::::0;9674:9:::1;::::0;9649:55:::1;::::0;-1:-1:-1;;;;;9658:6:0;;::::1;::::0;9674:9:::1;-1:-1:-1::0;;9649:8:0::1;:55::i;:::-;9719:9;9715:201;9734:19:::0;;::::1;9715:201;;;9808:9;::::0;9774:14:::1;::::0;9804:13:::1;::::0;9808:9:::1;;9804:2;:13;:::i;:::-;9791:7;;9799:1;9791:10;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;9850:6;::::0;9774:43;;-1:-1:-1;9832:72:0::1;::::0;-1:-1:-1;;;;;9850:6:0::1;9858:8:::0;;9867:1;9858:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;9871:6;9879:5;9886::::0;9893:4:::1;9899::::0;9832:17:::1;:72::i;:::-;;9759:157;9755:3;;;;;:::i;:::-;;;;9715:201;;;-1:-1:-1::0;9946:6:0::1;::::0;9928:86:::1;::::0;-1:-1:-1;;;;;9946:6:0::1;9962:4;9969:17;9946:6:::0;9969:9:::1;:17::i;9928:86::-;-1:-1:-1::0;10027:9:0::1;::::0;-1:-1:-1;;;;;10027:9:0::1;:25;10060:21;10105:4;10125:24;10105:4:::0;10125:9:::1;:24::i;:::-;10164:1;10250:6:::0;;10027:270:::1;::::0;-1:-1:-1;;;;;;10027:270:0::1;::::0;;;;;;::::1;::::0;;;10164:1;;;-1:-1:-1;;;;;10250:6:0;;::::1;::::0;10271:15:::1;::::0;10027:270:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;10310:15;:13;:15::i;14132:540::-:0;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;14201:20:::1;14234:9;14201:43;;14255:16;14285:10;-1:-1:-1::0;;;;;14285:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14274:40:0::1;;14323:4;14330:10;-1:-1:-1::0;;;;;14330:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14274:74;::::0;-1:-1:-1;;;;;;14274:74:0::1;::::0;;;;;;-1:-1:-1;;;;;24277:15:1;;;14274:74:0::1;::::0;::::1;24259:34:1::0;24329:15;;24309:18;;;24302:43;24194:18;;14274:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14255:93:::0;-1:-1:-1;;;;;;14363:22:0;::::1;14359:200;;14422:10;-1:-1:-1::0;;;;;14422:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14411:43:0::1;;14463:4;14470:10;-1:-1:-1::0;;;;;14470:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14411:77;::::0;-1:-1:-1;;;;;;14411:77:0::1;::::0;;;;;;-1:-1:-1;;;;;24277:15:1;;;14411:77:0::1;::::0;::::1;24259:34:1::0;24329:15;;24309:18;;;24302:43;24194:18;;14411:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14402:6;:86:::0;;-1:-1:-1;;;;;;14402:86:0::1;-1:-1:-1::0;;;;;14402:86:0;;;::::1;::::0;;;::::1;::::0;;14359:200:::1;;;14530:6;:17:::0;;-1:-1:-1;;;;;;14530:17:0::1;-1:-1:-1::0;;;;;14530:17:0;::::1;;::::0;;14359:200:::1;14569:9;:22:::0;;-1:-1:-1;;;;;;14569:22:0::1;-1:-1:-1::0;;;;;14569:22:0;::::1;::::0;;::::1;::::0;;;14602:62:::1;::::0;14619:4:::1;::::0;-1:-1:-1;;14602:8:0::1;:62::i;25656:182::-:0;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;25723:16:::1;::::0;::::1;::::0;::::1;;;25722:17;25714:58;;;::::0;-1:-1:-1;;;25714:58:0;;25481:2:1;25714:58:0::1;::::0;::::1;25463:21:1::0;25520:2;25500:18;;;25493:30;25559;25539:18;;;25532:58;25607:18;;25714:58:0::1;25279:352:1::0;25714:58:0::1;25791:6;::::0;;25783:47:::1;::::0;-1:-1:-1;;;;;25791:6:0;;::::1;::::0;25808:21:::1;25783:47:::0;::::1;;;::::0;25808:21;;25783:47;25791:6;25783:47;25808:21;25791:6;25783:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25656:182::o:0;19352:373::-;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;19552:16:::1;19532;19522:7;;:26;;;;:::i;:::-;19521:47;;;;:::i;:::-;19505:13;:63:::0;19593:7:::1;::::0;19620:13;;19593:23:::1;::::0;19603:13;;19593:23:::1;:::i;:::-;19592:41;;;;:::i;:::-;19579:10;:54:::0;;;19652:13:::1;::::0;:27:::1;;19644:73;;;::::0;-1:-1:-1;;;19644:73:0;;25838:2:1;19644:73:0::1;::::0;::::1;25820:21:1::0;25877:2;25857:18;;;25850:30;25916:34;25896:18;;;25889:62;-1:-1:-1;;;25967:18:1;;;25960:31;26008:19;;19644:73:0::1;25636:397:1::0;19644:73:0::1;19352:373:::0;;;;:::o;16491:125::-;16576:9;;:32;;-1:-1:-1;;;16576:32:0;;-1:-1:-1;;;;;178:32:1;;;16576::0;;;160:51:1;16552:4:0;;16576:9;;;;;:23;;133:18:1;;16576:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16127:148::-;7215:6;;-1:-1:-1;;;;;7215:6:0;7225:10;7215:20;7207:50;;;;-1:-1:-1;;;7207:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16223:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;16223:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16127:148::o;13319:310::-;-1:-1:-1;;;;;13414:20:0;;13406:52;;;;-1:-1:-1;;;13406:52:0;;26490:2:1;13406:52:0;;;26472:21:1;26529:2;26509:18;;;26502:30;-1:-1:-1;;;26548:18:1;;;26541:49;26607:18;;13406:52:0;26288:343:1;13406:52:0;-1:-1:-1;;;;;13477:21:0;;13469:53;;;;-1:-1:-1;;;13469:53:0;;26490:2:1;13469:53:0;;;26472:21:1;26529:2;26509:18;;;26502:30;-1:-1:-1;;;26548:18:1;;;26541:49;26607:18;;13469:53:0;26288:343:1;13469:53:0;-1:-1:-1;;;;;13535:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;13588:33;;368:25:1;;;13588:33:0;;341:18:1;13588:33:0;;;;;;;13319:310;;;:::o;31440:818::-;31520:7;;31556;;31589:6;;-1:-1:-1;;;;;31589:6:0;31482:7;31577:19;;;:11;:19;;;;;;31482:7;;31520;31556;31577:19;;31574:217;;;31625:6;;-1:-1:-1;;;;;31625:6:0;31617:15;;;;:7;:15;;;;;;:25;-1:-1:-1;31617:25:0;:54;;-1:-1:-1;31654:6:0;;-1:-1:-1;;;;;31654:6:0;31646:15;;;;:7;:15;;;;;;:25;-1:-1:-1;31617:54:0;31613:84;;;31690:7;;31680;;:17;;;;:::i;:::-;31673:24;;;;31440:818;:::o;31613:84::-;31731:6;;-1:-1:-1;;;;;31731:6:0;31723:15;;;;:7;:15;;;;;;31712:26;;;;:::i;:::-;31772:6;;-1:-1:-1;;;;;31772:6:0;31764:15;;;;:7;:15;;;;;;31712:26;;-1:-1:-1;31753:26:0;;;;:::i;:::-;;;31574:217;31804:9;:16;:20;31801:347;;31846:7;31841:296;31863:9;:16;31859:20;;;;31841:296;;;31933:7;31909;:21;31917:9;31927:1;31917:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31917:12:0;31909:21;;;;;;;;;;;;;:31;;:66;;;31968:7;31944;:21;31952:9;31962:1;31952:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31952:12:0;31944:21;;;;;;;;;;;;;:31;31909:66;31905:96;;;31994:7;;31984;;:17;;;;:::i;:::-;31977:24;;;;;31440:818;:::o;31905:96::-;32040:7;:21;32048:9;32058:1;32048:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32048:12:0;32040:21;;;;;;;;;;;;;32030:31;;:7;:31;:::i;:::-;32020:41;;32100:7;:21;32108:9;32118:1;32108:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32108:12:0;32100:21;;;;;;;;;;;;;32090:31;;:7;:31;:::i;:::-;32080:41;-1:-1:-1;31881:3:0;;;;:::i;:::-;;;;31841:296;;;;31801:347;32182:7;;32172;;:17;;;;:::i;:::-;32162:7;:27;32158:57;;;32208:7;;32198;;:17;;;;:::i;32158:57::-;32233:17;32243:7;32233;:17;:::i;20593:2091::-;20672:4;-1:-1:-1;;;;;20697:18:0;;20689:68;;;;-1:-1:-1;;;20689:68:0;;26838:2:1;20689:68:0;;;26820:21:1;26877:2;26857:18;;;26850:30;26916:34;26896:18;;;26889:62;-1:-1:-1;;;26967:18:1;;;26960:35;27012:19;;20689:68:0;26636:401:1;20689:68:0;-1:-1:-1;;;;;20776:16:0;;20768:64;;;;-1:-1:-1;;;20768:64:0;;27244:2:1;20768:64:0;;;27226:21:1;27283:2;27263:18;;;27256:30;27322:34;27302:18;;;27295:62;-1:-1:-1;;;27373:18:1;;;27366:33;27416:19;;20768:64:0;27042:399:1;20768:64:0;20860:1;20851:6;:10;20843:64;;;;-1:-1:-1;;;20843:64:0;;27648:2:1;20843:64:0;;;27630:21:1;27687:2;27667:18;;;27660:30;27726:34;27706:18;;;27699:62;-1:-1:-1;;;27777:18:1;;;27770:39;27826:19;;20843:64:0;27446:405:1;20843:64:0;-1:-1:-1;;;;;21006:13:0;;20918:8;21006:13;;;:7;:13;;;;;;20918:8;;;;21006:13;;21002:162;;;21042:4;21036:10;;21002:162;;;-1:-1:-1;;;;;21068:11:0;;;;;;:7;:11;;;;;;;;21064:100;;;21103:4;21096:11;;21064:100;;;-1:-1:-1;21148:4:0;21064:100;21177:20;21188:4;21194:2;21177:10;:20::i;:::-;21174:641;;;21218:14;;;;21214:89;;21253:34;;-1:-1:-1;;;21253:34:0;;28058:2:1;21253:34:0;;;28040:21:1;28097:2;28077:18;;;28070:30;28136:26;28116:18;;;28109:54;28180:18;;21253:34:0;27856:348:1;21214:89:0;21320:3;:11;;;;21327:4;21320:11;21317:231;;;-1:-1:-1;;;;;21356:27:0;;;;;;:21;:27;;;;;;;;21355:28;:58;;;;-1:-1:-1;;;;;;21388:25:0;;;;;;:21;:25;;;;;;;;21387:26;21355:58;21351:182;;;21456:12;;21446:6;:22;;21438:75;;;;-1:-1:-1;;;21438:75:0;;28411:2:1;21438:75:0;;;28393:21:1;28450:2;28430:18;;;28423:30;28489:34;28469:18;;;28462:62;-1:-1:-1;;;28540:18:1;;;28533:38;28588:19;;21438:75:0;28209:404:1;21438:75:0;21579:9;;-1:-1:-1;;;;;21565:24:0;;;21579:9;;21565:24;;;;:33;;;21594:4;21593:5;21565:33;21562:242;;;-1:-1:-1;;;;;21624:25:0;;;;;;:21;:25;;;;;;;;21619:170;;21708:14;;21698:6;21682:13;21692:2;21682:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;21674:95;;;;-1:-1:-1;;;21674:95:0;;28953:2:1;21674:95:0;;;28935:21:1;28992:2;28972:18;;;28965:30;29031:34;29011:18;;;29004:62;-1:-1:-1;;;29082:18:1;;;29075:40;29132:19;;21674:95:0;28751:406:1;21674:95:0;-1:-1:-1;;;;;21860:25:0;;21827:12;21860:25;;;:19;:25;;;;;;21842:4;;21860:25;;;:52;;-1:-1:-1;;;;;;21889:23:0;;;;;;:19;:23;;;;;;;;21860:52;21857:98;;;-1:-1:-1;21938:5:0;21857:98;21971:4;21967:629;;;21997:6;;;;21992:593;;22027:19;;;;;;;22024:546;;;22071:28;22102:24;22120:4;22102:9;:24::i;:::-;22071:55;;22177:13;;22153:20;:37;22149:402;;22237:10;;22277:22;;;;22274:96;;;22334:13;;22324:6;;6008:5;;22334:13;22314:17;;-1:-1:-1;;;;;22324:6:0;22314:9;:17::i;:::-;:33;;;;:::i;:::-;22313:54;;;;:::i;:::-;22303:64;;22274:96;22423:7;22399:20;:31;22396:71;;22457:7;22434:30;;22396:71;22493:34;22506:20;22493:12;:34::i;:::-;22192:359;22149:402;22048:522;22024:546;22614:62;22632:4;22638:2;22642:6;22650:7;22659:3;22664:4;22670:5;22614:17;:62::i;:::-;22607:69;20593:2091;-1:-1:-1;;;;;;;;20593:2091:0:o;28418:1037::-;28575:16;;28553:4;;28575:16;;;;;28570:298;;28608:28;28627:4;28633:2;28608:18;:28::i;:::-;28656:16;;;;;;;28655:17;:41;;;;;28676:20;28687:4;28693:2;28676:10;:20::i;:::-;28655:77;;;;-1:-1:-1;;;;;;28701:31:0;;;;;;:25;:31;;;;;;;;28700:32;28655:77;:111;;;;-1:-1:-1;;;;;;28737:29:0;;;;;;:25;:29;;;;;;;;28736:30;28655:111;:121;;;;;28771:5;28770:6;28655:121;28651:206;;;28797:44;;-1:-1:-1;;;28797:44:0;;29364:2:1;28797:44:0;;;29346:21:1;29403:2;29383:18;;;29376:30;29442:34;29422:18;;;29415:62;-1:-1:-1;;;29493:18:1;;;29486:32;29535:19;;28797:44:0;29162:398:1;28651:206:0;28880:25;28908:55;28918:4;28924:2;28928:7;28937;28946:3;28951:4;28957:5;28908:9;:55::i;:::-;28993:14;;;;-1:-1:-1;;;;;28976:13:0;;;;;;:7;:13;;;;;:31;;28880:83;;-1:-1:-1;28993:14:0;;28976:31;;28993:14;;28976:31;:::i;:::-;;;;-1:-1:-1;;29033:22:0;;;;-1:-1:-1;;;;;29018:11:0;;;;;;:7;:11;;;;;:37;;:11;;;:37;;29033:22;;29018:37;:::i;:::-;;;;-1:-1:-1;;;;;;;29072:17:0;;;;;;:11;:17;;;;;;;;29068:89;;;-1:-1:-1;;;;;29122:13:0;;;;;;:7;:13;;;;;;:23;;29138:7;;29122:23;:::i;:::-;-1:-1:-1;;;;;29106:13:0;;;;;;:7;:13;;;;;:39;29068:89;-1:-1:-1;;;;;29171:15:0;;;;;;:11;:15;;;;;;;;29167:98;;;29231:22;;-1:-1:-1;;;;;29217:11:0;;29231:22;29217:11;;;:7;:11;;;;;;:36;;29231:22;29217:36;:::i;:::-;-1:-1:-1;;;;;29203:11:0;;;;;;:7;:11;;;;;:50;29167:98;29295:1;29281:6;:11;;;:15;:34;;;;29314:1;29300:6;:11;;;:15;29281:34;29277:89;;;29343:6;:11;;;29332:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;29277:89:0;29398:2;-1:-1:-1;;;;;29383:42:0;29392:4;-1:-1:-1;;;;;29383:42:0;;29402:6;:22;;;29383:42;;;;368:25:1;;356:2;341:18;;222:177;29383:42:0;;;;;;;;-1:-1:-1;29443:4:0;;28418:1037;-1:-1:-1;;;;;;;;28418:1037:0:o;20227:358::-;20296:4;20328:6;;-1:-1:-1;;;;;20320:14:0;;;20328:6;;20320:14;;;;:43;;-1:-1:-1;20357:6:0;;-1:-1:-1;;;;;20351:12:0;;;20357:6;;20351:12;;20320:43;:79;;;;-1:-1:-1;20393:6:0;;-1:-1:-1;;;;;20393:6:0;20380:9;:19;;20320:79;:118;;;;-1:-1:-1;;;;;;20417:21:0;;;;;;:17;:21;;;;;;;;20416:22;20320:118;:159;;;;-1:-1:-1;;;;;;20456:23:0;;;;;;:17;:23;;;;;;;;20455:24;20320:159;:186;;;;-1:-1:-1;;;;;;20496:10:0;;6112:42;20496:10;;20320:186;:219;;;;-1:-1:-1;;;;;;20523:16:0;;;;20320:219;:257;;;;-1:-1:-1;;;;;;20556:21:0;;20572:4;20556:21;;20313:264;20227:358;-1:-1:-1;;;20227:358:0:o;22692:1887::-;7109:6;:13;;-1:-1:-1;;7109:13:0;7118:4;7109:13;;;22776:30:::1;::::0;;::::1;::::0;::::1;::::0;;22799:7:::1;22776:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;-1:-1:-1;;;22776:30:0;::::1;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;22776:30:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22776:30:0;::::1;::::0;;::::1;::::0;;;;;;7109:6;22821:21;22817:60:::1;;22859:7;;;22817:60;22912:4;22892:26;::::0;;;:11:::1;:26;::::0;;;;;;;22927:9:::1;::::0;-1:-1:-1;;;;;22927:9:0::1;22892:46:::0;;;;;;;;-1:-1:-1;;22892:67:0::1;22889:165;;22996:4;22976:26;::::0;;;:11:::1;:26;::::0;;;;;;;23011:9:::1;::::0;-1:-1:-1;;;;;23011:9:0::1;22976:46:::0;;;;;;;-1:-1:-1;;22976:66:0;;22889:165:::1;23066:17;23151:1;23131:6;:16;;;23087:60;;23111:6;:16;;;23088:39;;:20;:39;;;;:::i;:::-;23087:60;;;;:::i;:::-;23086:66;;;;:::i;:::-;23066:86:::0;-1:-1:-1;23163:15:0::1;23181:32;23066:86:::0;23181:20;:32:::1;:::i;:::-;23258:16;::::0;;23272:1:::1;23258:16:::0;;;;;::::1;::::0;;23163:50;;-1:-1:-1;23234:21:0::1;::::0;23258:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;23258:16:0::1;23234:40;;23303:4;23285;23290:1;23285:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23285:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;23329:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;23329:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;23285:7;;23329:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23319:4;23324:1;23319:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23319:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;23358:9:::1;::::0;:186:::1;::::0;-1:-1:-1;;;23358:186:0;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;23433:7;;23358:9:::1;::::0;23471:4;;23498::::1;::::0;23518:15:::1;::::0;23358:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;23578:21:0::1;::::0;-1:-1:-1;23557:18:0::1;::::0;-1:-1:-1;23664:7:0;;-1:-1:-1;23638:22:0::1;23651:9:::0;23578:21;23638:22:::1;:::i;:::-;23637:34;;;;:::i;:::-;23610:61:::0;-1:-1:-1;23688:13:0;;23684:328:::1;;23718:9;::::0;:222:::1;::::0;-1:-1:-1;;;23718:222:0;;-1:-1:-1;;;;;23718:9:0;;::::1;::::0;:25:::1;::::0;23751:16;;23718:222:::1;::::0;23795:4:::1;::::0;23819:9;;23718::::1;::::0;;;6112:42:::1;::::0;23910:15:::1;::::0;23718:222:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23960:40:0::1;::::0;;30724:25:1;;;30780:2;30765:18;;30758:34;;;23960:40:0::1;::::0;-1:-1:-1;30697:18:1;23960:40:0::1;;;;;;;23684:328;24024:30;24038:16:::0;24024:30;::::1;:::i;:::-;;;24085:6;:16;;;24065:6;:16;;:36;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;24200:16:::1;::::0;::::1;::::0;24178:18:::1;::::0;::::1;::::0;24112:12:::1;::::0;-1:-1:-1;24112:12:0;;24164:52;;::::1;::::0;24165:31:::1;::::0;::::1;:10:::0;:31:::1;:::i;:::-;24164:52;;;;:::i;:::-;24135:81:::0;-1:-1:-1;24227:24:0::1;24254:31;24135:81:::0;24254:10;:31:::1;:::i;:::-;24300:16;::::0;::::1;::::0;24227:58;;-1:-1:-1;24300:20:0::1;;::::0;24296:133:::1;;24350:11;:21:::0;:67:::1;::::0;-1:-1:-1;;;;;24350:21:0;;::::1;::::0;24407:5:::1;::::0;24384:16;;24350:67:::1;::::0;;;24384:16;24350:21;24407:5;24350:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;24337:80:0;;-1:-1:-1;;24296:133:0::1;24443:18;::::0;::::1;::::0;:22:::1;;::::0;24439:133:::1;;24495:17;::::0;:65:::1;::::0;-1:-1:-1;;;;;24495:17:0;;::::1;::::0;24550:5:::1;::::0;24525:18;;24495:65:::1;::::0;;;24525:18;24495:17;24550:5;24495:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;24482:78:0;;-1:-1:-1;;24439:133:0::1;22765:1814;;;;;;;;;7133:1;-1:-1:-1::0;7145:6:0;:14;;-1:-1:-1;;7145:14:0;;;22692:1887::o;24587:509::-;24670:16;;;;;;;24669:17;24661:65;;;;-1:-1:-1;;;24661:65:0;;31437:2:1;24661:65:0;;;31419:21:1;31476:2;31456:18;;;31449:30;31515:34;31495:18;;;31488:62;-1:-1:-1;;;31566:18:1;;;31559:33;31609:19;;24661:65:0;31235:399:1;24661:65:0;24742:20;24753:4;24759:2;24742:10;:20::i;:::-;24741:21;:37;;;;-1:-1:-1;24772:6:0;;-1:-1:-1;;;;;24766:12:0;;;24772:6;;24766:12;24741:37;24737:352;;;-1:-1:-1;;;;;24795:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;24795:30:0;24821:4;24795:30;;;24840:23;;-1:-1:-1;;24840:23:0;24795:30;24840:23;;;;;24889:9;;;;24878:107;;24933:9;:36;;-1:-1:-1;;;;;;24933:36:0;24963:4;24933:36;;;;;24878:107;24999:19;:26;;-1:-1:-1;;24999:26:0;;;;;25045:32;;-1:-1:-1;3320:41:1;;25045:32:0;;3308:2:1;3293:18;25045:32:0;3180:187:1;29463:1969:0;29590:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29590:18:0;29621:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29621:25:0;29657:30;;;;;;;;29680:7;29657:30;;;;;;;;;;;;;;;;-1:-1:-1;;;29657:30:0;;;;;;;;;;;-1:-1:-1;;;29657:30:0;;;;;;;;-1:-1:-1;;;29657:30:0;;;;;;;;;29719:10;:8;:10::i;:::-;29698:18;;;:31;;;29759:28;;:7;:28;:::i;:::-;29742:14;;;:45;29804:20;29815:4;29821:2;29804:10;:20::i;:::-;29800:315;;;29872:9;;:38;;-1:-1:-1;;;29872:38:0;;-1:-1:-1;;;;;31897:15:1;;;29872:38:0;;;31879:34:1;31949:15;;;31929:18;;;31922:43;31981:18;;;31974:34;;;29841:12:0;;29872:9;;;;;:19;;31814:18:1;;29872:38:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;29872:38:0;;;;;;;;-1:-1:-1;;29872:38:0;;;;;;;;;;;;:::i;:::-;;;29868:164;;30008:8;;;29868:164;29961:5;-1:-1:-1;30052:7:0;30048:56;;30080:8;;;30048:56;29826:289;29800:315;30130:7;30127:867;;;30154:18;30193:3;30189:229;;;-1:-1:-1;30230:9:0;:16;;;30189:229;;;30272:4;30268:150;;;-1:-1:-1;30310:9:0;:17;;;;;;30268:150;;;-1:-1:-1;30381:9:0;:21;-1:-1:-1;;;30381:21:0;;;;30268:150;30434:17;6008:5;30455:20;30465:10;30455:7;:20;:::i;:::-;30454:41;;;;:::i;:::-;30434:61;;30510:13;30545:6;:17;;;30526:6;:16;;;:36;;;;:::i;:::-;30604:17;;30510:52;;;;;-1:-1:-1;30510:52:0;;30592:29;;;:9;:29;:::i;:::-;30591:39;;;;:::i;:::-;30577:11;;;:53;;;30660:23;;:9;:23;:::i;:::-;30645:12;;;:38;;;30734:11;;;;:26;;30645:38;30734:26;:::i;:::-;30723:38;;:7;:38;:::i;:::-;30698:63;;30806:18;;;;30792:11;;;;:32;;30806:18;30792:32;:::i;:::-;30778:11;;;:46;-1:-1:-1;30127:867:0;;-1:-1:-1;;30127:867:0;;30871:1;30857:11;;;:15;;;30887:12;;;:16;;;30918:32;;;30967:11;;;:15;30127:867;31010:12;;;;:16;31006:289;;31084:6;:18;;;31069:6;:12;;;:33;;;;:::i;:::-;31059:4;31043:22;;;;:7;:22;;;;;:59;;:22;;;:59;;;;;:::i;:::-;;;;-1:-1:-1;;31140:4:0;31120:26;;;;:11;:26;;;;;;;;31117:104;;;31193:12;;;;;31183:4;31167:22;;;;:7;:22;;;;;:38;;31193:12;;31167:22;;:38;;31193:12;;31167:38;:::i;:::-;;;;-1:-1:-1;;31117:104:0;31263:4;-1:-1:-1;;;;;31240:43:0;31249:4;-1:-1:-1;;;;;31240:43:0;;31270:6;:12;;;31240:43;;;;368:25:1;;356:2;341:18;;222:177;31240:43:0;;;;;;;;31006:289;31380:6;:18;;;31365:6;:12;;;:33;;;;:::i;:::-;31350:6;:11;;;:49;;;;:::i;:::-;31332:6;:14;;;:68;;;;:::i;:::-;31307:22;;;:93;-1:-1:-1;31307:22:0;29463:1969;-1:-1:-1;;;;;;;;29463:1969:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;404:118:1;490:5;483:13;476:21;469:5;466:32;456:60;;512:1;509;502:12;527:376;589:6;597;650:2;638:9;629:7;625:23;621:32;618:52;;;666:1;663;656:12;618:52;705:9;692:23;724:28;746:5;724:28;:::i;:::-;771:5;-1:-1:-1;828:2:1;813:18;;800:32;841:30;800:32;841:30;:::i;:::-;890:7;880:17;;;527:376;;;;;:::o;1278:258::-;1350:1;1360:113;1374:6;1371:1;1368:13;1360:113;;;1450:11;;;1444:18;1431:11;;;1424:39;1396:2;1389:10;1360:113;;;1491:6;1488:1;1485:13;1482:48;;;-1:-1:-1;;1526:1:1;1508:16;;1501:27;1278:258::o;1541:383::-;1690:2;1679:9;1672:21;1653:4;1722:6;1716:13;1765:6;1760:2;1749:9;1745:18;1738:34;1781:66;1840:6;1835:2;1824:9;1820:18;1815:2;1807:6;1803:15;1781:66;:::i;:::-;1908:2;1887:15;-1:-1:-1;;1883:29:1;1868:45;;;;1915:2;1864:54;;1541:383;-1:-1:-1;;1541:383:1:o;1929:159::-;1996:20;;2056:6;2045:18;;2035:29;;2025:57;;2078:1;2075;2068:12;2025:57;1929:159;;;:::o;2093:401::-;2175:6;2183;2191;2199;2252:3;2240:9;2231:7;2227:23;2223:33;2220:53;;;2269:1;2266;2259:12;2220:53;2292:28;2310:9;2292:28;:::i;:::-;2282:38;;2339:37;2372:2;2361:9;2357:18;2339:37;:::i;:::-;2329:47;;2395:37;2428:2;2417:9;2413:18;2395:37;:::i;:::-;2385:47;;2451:37;2484:2;2473:9;2469:18;2451:37;:::i;:::-;2441:47;;2093:401;;;;;;;:::o;2724:131::-;-1:-1:-1;;;;;2799:31:1;;2789:42;;2779:70;;2845:1;2842;2835:12;2860:315;2928:6;2936;2989:2;2977:9;2968:7;2964:23;2960:32;2957:52;;;3005:1;3002;2995:12;2957:52;3044:9;3031:23;3063:31;3088:5;3063:31;:::i;:::-;3113:5;3165:2;3150:18;;;;3137:32;;-1:-1:-1;;;2860:315:1:o;3372:247::-;3431:6;3484:2;3472:9;3463:7;3459:23;3455:32;3452:52;;;3500:1;3497;3490:12;3452:52;3539:9;3526:23;3558:31;3583:5;3558:31;:::i;3624:382::-;3689:6;3697;3750:2;3738:9;3729:7;3725:23;3721:32;3718:52;;;3766:1;3763;3756:12;3718:52;3805:9;3792:23;3824:31;3849:5;3824:31;:::i;4011:456::-;4088:6;4096;4104;4157:2;4145:9;4136:7;4132:23;4128:32;4125:52;;;4173:1;4170;4163:12;4125:52;4212:9;4199:23;4231:31;4256:5;4231:31;:::i;:::-;4281:5;-1:-1:-1;4338:2:1;4323:18;;4310:32;4351:33;4310:32;4351:33;:::i;:::-;4011:456;;4403:7;;-1:-1:-1;;;4457:2:1;4442:18;;;;4429:32;;4011:456::o;4472:248::-;4540:6;4548;4601:2;4589:9;4580:7;4576:23;4572:32;4569:52;;;4617:1;4614;4607:12;4569:52;-1:-1:-1;;4640:23:1;;;4710:2;4695:18;;;4682:32;;-1:-1:-1;4472:248:1:o;4725:127::-;4786:10;4781:3;4777:20;4774:1;4767:31;4817:4;4814:1;4807:15;4841:4;4838:1;4831:15;4857:275;4928:2;4922:9;4993:2;4974:13;;-1:-1:-1;;4970:27:1;4958:40;;5028:18;5013:34;;5049:22;;;5010:62;5007:88;;;5075:18;;:::i;:::-;5111:2;5104:22;4857:275;;-1:-1:-1;4857:275:1:o;5137:183::-;5197:4;5230:18;5222:6;5219:30;5216:56;;;5252:18;;:::i;:::-;-1:-1:-1;5297:1:1;5293:14;5309:4;5289:25;;5137:183::o;5325:662::-;5379:5;5432:3;5425:4;5417:6;5413:17;5409:27;5399:55;;5450:1;5447;5440:12;5399:55;5486:6;5473:20;5512:4;5536:60;5552:43;5592:2;5552:43;:::i;:::-;5536:60;:::i;:::-;5630:15;;;5716:1;5712:10;;;;5700:23;;5696:32;;;5661:12;;;;5740:15;;;5737:35;;;5768:1;5765;5758:12;5737:35;5804:2;5796:6;5792:15;5816:142;5832:6;5827:3;5824:15;5816:142;;;5898:17;;5886:30;;5936:12;;;;5849;;5816:142;;;-1:-1:-1;5976:5:1;5325:662;-1:-1:-1;;;;;;5325:662:1:o;5992:1215::-;6110:6;6118;6171:2;6159:9;6150:7;6146:23;6142:32;6139:52;;;6187:1;6184;6177:12;6139:52;6227:9;6214:23;6256:18;6297:2;6289:6;6286:14;6283:34;;;6313:1;6310;6303:12;6283:34;6351:6;6340:9;6336:22;6326:32;;6396:7;6389:4;6385:2;6381:13;6377:27;6367:55;;6418:1;6415;6408:12;6367:55;6454:2;6441:16;6476:4;6500:60;6516:43;6556:2;6516:43;:::i;6500:60::-;6594:15;;;6676:1;6672:10;;;;6664:19;;6660:28;;;6625:12;;;;6700:19;;;6697:39;;;6732:1;6729;6722:12;6697:39;6756:11;;;;6776:217;6792:6;6787:3;6784:15;6776:217;;;6872:3;6859:17;6889:31;6914:5;6889:31;:::i;:::-;6933:18;;6809:12;;;;6971;;;;6776:217;;;7012:5;-1:-1:-1;;7055:18:1;;7042:32;;-1:-1:-1;;7086:16:1;;;7083:36;;;7115:1;7112;7105:12;7083:36;;7138:63;7193:7;7182:8;7171:9;7167:24;7138:63;:::i;:::-;7128:73;;;5992:1215;;;;;:::o;7212:180::-;7271:6;7324:2;7312:9;7303:7;7299:23;7295:32;7292:52;;;7340:1;7337;7330:12;7292:52;-1:-1:-1;7363:23:1;;7212:180;-1:-1:-1;7212:180:1:o;7586:328::-;7660:6;7668;7676;7729:2;7717:9;7708:7;7704:23;7700:32;7697:52;;;7745:1;7742;7735:12;7697:52;7768:28;7786:9;7768:28;:::i;:::-;7758:38;;7815:37;7848:2;7837:9;7833:18;7815:37;:::i;:::-;7805:47;;7871:37;7904:2;7893:9;7889:18;7871:37;:::i;:::-;7861:47;;7586:328;;;;;:::o;8447:404::-;8531:6;8539;8592:2;8580:9;8571:7;8567:23;8563:32;8560:52;;;8608:1;8605;8598:12;8560:52;8647:9;8634:23;8666:31;8691:5;8666:31;:::i;:::-;8716:5;-1:-1:-1;8773:2:1;8758:18;;8745:32;8786:33;8745:32;8786:33;:::i;9249:367::-;9312:8;9322:6;9376:3;9369:4;9361:6;9357:17;9353:27;9343:55;;9394:1;9391;9384:12;9343:55;-1:-1:-1;9417:20:1;;9460:18;9449:30;;9446:50;;;9492:1;9489;9482:12;9446:50;9529:4;9521:6;9517:17;9505:29;;9589:3;9582:4;9572:6;9569:1;9565:14;9557:6;9553:27;9549:38;9546:47;9543:67;;;9606:1;9603;9596:12;9543:67;9249:367;;;;;:::o;9621:908::-;9752:6;9760;9768;9776;9784;9837:2;9825:9;9816:7;9812:23;9808:32;9805:52;;;9853:1;9850;9843:12;9805:52;9893:9;9880:23;9922:18;9963:2;9955:6;9952:14;9949:34;;;9979:1;9976;9969:12;9949:34;10018:70;10080:7;10071:6;10060:9;10056:22;10018:70;:::i;:::-;10107:8;;-1:-1:-1;9992:96:1;-1:-1:-1;10195:2:1;10180:18;;10167:32;;-1:-1:-1;10211:16:1;;;10208:36;;;10240:1;10237;10230:12;10208:36;;10279:72;10343:7;10332:8;10321:9;10317:24;10279:72;:::i;:::-;10370:8;;-1:-1:-1;10253:98:1;-1:-1:-1;;10455:2:1;10440:18;;10427:32;10468:31;10427:32;10468:31;:::i;:::-;10518:5;10508:15;;;9621:908;;;;;;;;:::o;10758:385::-;10844:6;10852;10860;10868;10921:3;10909:9;10900:7;10896:23;10892:33;10889:53;;;10938:1;10935;10928:12;10889:53;-1:-1:-1;;10961:23:1;;;11031:2;11016:18;;11003:32;;-1:-1:-1;11082:2:1;11067:18;;11054:32;;11133:2;11118:18;11105:32;;-1:-1:-1;10758:385:1;-1:-1:-1;10758:385:1:o;11148:341::-;11350:2;11332:21;;;11389:2;11369:18;;;11362:30;-1:-1:-1;;;11423:2:1;11408:18;;11401:47;11480:2;11465:18;;11148:341::o;11767:380::-;11846:1;11842:12;;;;11889;;;11910:61;;11964:4;11956:6;11952:17;11942:27;;11910:61;12017:2;12009:6;12006:14;11986:18;11983:38;11980:161;;12063:10;12058:3;12054:20;12051:1;12044:31;12098:4;12095:1;12088:15;12126:4;12123:1;12116:15;11980:161;;11767:380;;;:::o;12152:127::-;12213:10;12208:3;12204:20;12201:1;12194:31;12244:4;12241:1;12234:15;12268:4;12265:1;12258:15;12284:224;12323:3;12351:6;12384:2;12381:1;12377:10;12414:2;12411:1;12407:10;12445:3;12441:2;12437:12;12432:3;12429:21;12426:47;;;12453:18;;:::i;:::-;12489:13;;12284:224;-1:-1:-1;;;;12284:224:1:o;12921:422::-;13010:1;13053:5;13010:1;13067:270;13088:7;13078:8;13075:21;13067:270;;;13147:4;13143:1;13139:6;13135:17;13129:4;13126:27;13123:53;;;13156:18;;:::i;:::-;13206:7;13196:8;13192:22;13189:55;;;13226:16;;;;13189:55;13305:22;;;;13265:15;;;;13067:270;;;13071:3;12921:422;;;;;:::o;13348:806::-;13397:5;13427:8;13417:80;;-1:-1:-1;13468:1:1;13482:5;;13417:80;13516:4;13506:76;;-1:-1:-1;13553:1:1;13567:5;;13506:76;13598:4;13616:1;13611:59;;;;13684:1;13679:130;;;;13591:218;;13611:59;13641:1;13632:10;;13655:5;;;13679:130;13716:3;13706:8;13703:17;13700:43;;;13723:18;;:::i;:::-;-1:-1:-1;;13779:1:1;13765:16;;13794:5;;13591:218;;13893:2;13883:8;13880:16;13874:3;13868:4;13865:13;13861:36;13855:2;13845:8;13842:16;13837:2;13831:4;13828:12;13824:35;13821:77;13818:159;;;-1:-1:-1;13930:19:1;;;13962:5;;13818:159;14009:34;14034:8;14028:4;14009:34;:::i;:::-;14079:6;14075:1;14071:6;14067:19;14058:7;14055:32;14052:58;;;14090:18;;:::i;:::-;14128:20;;13348:806;-1:-1:-1;;;13348:806:1:o;14159:140::-;14217:5;14246:47;14287:4;14277:8;14273:19;14267:4;14246:47;:::i;14304:127::-;14365:10;14360:3;14356:20;14353:1;14346:31;14396:4;14393:1;14386:15;14420:4;14417:1;14410:15;14436:120;14476:1;14502;14492:35;;14507:18;;:::i;:::-;-1:-1:-1;14541:9:1;;14436:120::o;15275:168::-;15315:7;15381:1;15377;15373:6;15369:14;15366:1;15363:21;15358:1;15351:9;15344:17;15340:45;15337:71;;;15388:18;;:::i;:::-;-1:-1:-1;15428:9:1;;15275:168::o;15448:127::-;15509:10;15504:3;15500:20;15497:1;15490:31;15540:4;15537:1;15530:15;15564:4;15561:1;15554:15;15580:127;15641:10;15636:3;15632:20;15629:1;15622:31;15672:4;15669:1;15662:15;15696:4;15693:1;15686:15;15712:125;15752:4;15780:1;15777;15774:8;15771:34;;;15785:18;;:::i;:::-;-1:-1:-1;15822:9:1;;15712:125::o;15842:135::-;15881:3;15902:17;;;15899:43;;15922:18;;:::i;:::-;-1:-1:-1;15969:1:1;15958:13;;15842:135::o;16749:175::-;16786:3;16830:4;16823:5;16819:16;16859:4;16850:7;16847:17;16844:43;;16867:18;;:::i;:::-;16916:1;16903:15;;16749:175;-1:-1:-1;;16749:175:1:o;18826:425::-;19028:2;19010:21;;;19067:2;19047:18;;;19040:30;19106:34;19101:2;19086:18;;19079:62;19177:31;19172:2;19157:18;;19150:59;19241:3;19226:19;;18826:425::o;22064:497::-;22118:5;22171:3;22164:4;22156:6;22152:17;22148:27;22138:55;;22189:1;22186;22179:12;22138:55;22218:6;22212:13;22244:18;22240:2;22237:26;22234:52;;;22266:18;;:::i;:::-;22310:55;22353:2;22334:13;;-1:-1:-1;;22330:27:1;22359:4;22326:38;22310:55;:::i;:::-;22390:2;22381:7;22374:19;22436:3;22429:4;22424:2;22416:6;22412:15;22408:26;22405:35;22402:55;;;22453:1;22450;22443:12;22402:55;22466:64;22527:2;22520:4;22511:7;22507:18;22500:4;22492:6;22488:17;22466:64;:::i;22566:774::-;22681:6;22689;22697;22705;22758:3;22746:9;22737:7;22733:23;22729:33;22726:53;;;22775:1;22772;22765:12;22726:53;22808:9;22802:16;22837:18;22878:2;22870:6;22867:14;22864:34;;;22894:1;22891;22884:12;22864:34;22917:61;22970:7;22961:6;22950:9;22946:22;22917:61;:::i;:::-;22907:71;;23024:2;23013:9;23009:18;23003:25;22987:41;;23053:2;23043:8;23040:16;23037:36;;;23069:1;23066;23059:12;23037:36;;23092:63;23147:7;23136:8;23125:9;23121:24;23092:63;:::i;:::-;23082:73;;;23195:2;23184:9;23180:18;23174:25;23164:35;;23242:2;23231:9;23227:18;23221:25;23286:4;23279:5;23275:16;23268:5;23265:27;23255:55;;23306:1;23303;23296:12;23255:55;22566:774;;;;-1:-1:-1;22566:774:1;;-1:-1:-1;;22566:774:1:o;23674:112::-;23706:1;23732;23722:35;;23737:18;;:::i;:::-;-1:-1:-1;23771:9:1;;23674:112::o;23791:251::-;23861:6;23914:2;23902:9;23893:7;23889:23;23885:32;23882:52;;;23930:1;23927;23920:12;23882:52;23962:9;23956:16;23981:31;24006:5;23981:31;:::i;24356:607::-;-1:-1:-1;;;;;24715:15:1;;;24697:34;;24762:2;24747:18;;24740:34;;;;24805:2;24790:18;;24783:34;;;;24848:2;24833:18;;24826:34;;;;24897:15;;;24891:3;24876:19;;24869:44;24677:3;24929:19;;24922:35;;;;24646:3;24631:19;;24356:607::o;24968:306::-;25056:6;25064;25072;25125:2;25113:9;25104:7;25100:23;25096:32;25093:52;;;25141:1;25138;25131:12;25093:52;25170:9;25164:16;25154:26;;25220:2;25209:9;25205:18;25199:25;25189:35;;25264:2;25253:9;25249:18;25243:25;25233:35;;24968:306;;;;;:::o;26038:245::-;26105:6;26158:2;26146:9;26137:7;26133:23;26129:32;26126:52;;;26174:1;26171;26164:12;26126:52;26206:9;26200:16;26225:28;26247:5;26225:28;:::i;28618:128::-;28658:3;28689:1;28685:6;28682:1;28679:13;28676:39;;;28695:18;;:::i;:::-;-1:-1:-1;28731:9:1;;28618:128::o;29565:980::-;29827:4;29875:3;29864:9;29860:19;29906:6;29895:9;29888:25;29932:2;29970:6;29965:2;29954:9;29950:18;29943:34;30013:3;30008:2;29997:9;29993:18;29986:31;30037:6;30072;30066:13;30103:6;30095;30088:22;30141:3;30130:9;30126:19;30119:26;;30180:2;30172:6;30168:15;30154:29;;30201:1;30211:195;30225:6;30222:1;30219:13;30211:195;;;30290:13;;-1:-1:-1;;;;;30286:39:1;30274:52;;30381:15;;;;30346:12;;;;30322:1;30240:9;30211:195;;;-1:-1:-1;;;;;;;30462:32:1;;;;30457:2;30442:18;;30435:60;-1:-1:-1;;;30526:3:1;30511:19;30504:35;30423:3;29565:980;-1:-1:-1;;;29565:980:1:o;30803:217::-;30842:4;30871:6;30927:10;;;;30897;;30949:12;;;30946:38;;;30964:18;;:::i;:::-;31001:13;;30803:217;-1:-1:-1;;;30803:217:1:o

Swarm Source

ipfs://7b7703f018a620e61eabb98cde5f21c5e4f869f8f4ce3f5f4c711cf568f04c2c

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.