ETH Price: $3,335.01 (+2.15%)
Gas: 6 Gwei

Token

TRUNKS INU (TRINU)
 

Overview

Max Total Supply

1,000,000,000,000,000 TRINU

Holders

164

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
898,207,547,132.701020192 TRINU

Value
$0.00
0x4d6789ada4bb287308b2b1044c997cf77c450f55
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
TRINU

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-08
*/

/* Telegram @ TrunksInuERC
   Website : https://www.trunksinu.com/
*/
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IUniswapV2Factory {
    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 IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function factory() external view returns (address);
}

interface IUniswapV2Router01 {
    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);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract TRINU is Context, IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isSniperOrBlacklisted;
    mapping (address => bool) private _liquidityHolders;

    uint256 private startingSupply = 1_000_000_000_000_000;

    string private _name = "TRUNKS INU";
    string private _symbol = "TRINU";

    uint256 public _buyFee = 1000;
    uint256 public _sellFee = 1000;
    uint256 public _transferFee = 3500;

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

    uint256 public _liquidityRatio = 2;
    uint256 public _marketingRatio = 5;
    uint256 public _devRatio = 3;

    uint256 private constant masterTaxDivisor = 10000;

    uint256 private constant MAX = ~uint256(0);
    uint8 constant private _decimals = 9;
    uint256 constant private _decimalsMul = _decimals;
    uint256 private _tTotal = startingSupply * 10**_decimalsMul;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    // UNI ROUTER
    address private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address payable private _marketingWallet = payable(0xB8d0bc7de3A2C84809549bdF7D7d99387B1155CD);
    address payable private _devWallet = payable(0x00f08665f75011A7Da3B4Db9650B419EA2843BCb);
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 private maxTxPercent = 1;
    uint256 private maxTxDivisor = 100;
    uint256 private _maxTxAmount = (_tTotal * maxTxPercent) / maxTxDivisor;
    uint256 public maxTxAmountUI = (startingSupply * maxTxPercent) / maxTxDivisor;

    uint256 private maxWalletPercent = 2;
    uint256 private maxWalletDivisor = 100;
    uint256 private _maxWalletSize = (_tTotal * maxWalletPercent) / maxWalletDivisor;
    uint256 public maxWalletSizeUI = (startingSupply * maxWalletPercent) / maxWalletDivisor;

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

    bool private sniperProtection = true;
    bool public _hasLiqBeenAdded = false;
    uint256 private _liqAddStatus = 0;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    uint256 private _initialLiquidityAmount = 0;
    uint256 private snipeBlockAmt = 0;
    uint256 public snipersCaught = 0;
    bool private sameBlockActive = true;
    mapping (address => uint256) private lastTrade;

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

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

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

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;

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

        // Approve the owner for PancakeSwap, timesaver.
        _approve(_msgSender(), _routerAddress, _tTotal);

        // Ever-growing sniper/tool blacklist
        _isSniperOrBlacklisted[0xE4882975f933A199C92b5A925C9A8fE65d599Aa8] = true;
        _isSniperOrBlacklisted[0x86C70C4a3BC775FB4030448c9fdb73Dc09dd8444] = true;
        _isSniperOrBlacklisted[0xa4A25AdcFCA938aa030191C297321323C57148Bd] = true;
        _isSniperOrBlacklisted[0x20C00AFf15Bb04cC631DB07ee9ce361ae91D12f8] = true;
        _isSniperOrBlacklisted[0x0538856b6d0383cde1709c6531B9a0437185462b] = true;
        _isSniperOrBlacklisted[0x6e44DdAb5c29c9557F275C9DB6D12d670125FE17] = true;
        _isSniperOrBlacklisted[0x90484Bb9bc05fD3B5FF1fe412A492676cd81790C] = true;
        _isSniperOrBlacklisted[0xA62c5bA4D3C95b3dDb247EAbAa2C8E56BAC9D6dA] = true;
        _isSniperOrBlacklisted[0xA94E56EFc384088717bb6edCccEc289A72Ec2381] = true;
        _isSniperOrBlacklisted[0x3066Cc1523dE539D36f94597e233719727599693] = true;
        _isSniperOrBlacklisted[0xf13FFadd3682feD42183AF8F3f0b409A9A0fdE31] = true;
        _isSniperOrBlacklisted[0x376a6EFE8E98f3ae2af230B3D45B8Cc5e962bC27] = true;
        _isSniperOrBlacklisted[0x0538856b6d0383cde1709c6531B9a0437185462b] = true;
        _isSniperOrBlacklisted[0x90484Bb9bc05fD3B5FF1fe412A492676cd81790C] = true;
        _isSniperOrBlacklisted[0xA62c5bA4D3C95b3dDb247EAbAa2C8E56BAC9D6dA] = true;
        _isSniperOrBlacklisted[0xA94E56EFc384088717bb6edCccEc289A72Ec2381] = true;
        _isSniperOrBlacklisted[0x3066Cc1523dE539D36f94597e233719727599693] = true;
        _isSniperOrBlacklisted[0xf13FFadd3682feD42183AF8F3f0b409A9A0fdE31] = true;
        _isSniperOrBlacklisted[0x376a6EFE8E98f3ae2af230B3D45B8Cc5e962bC27] = true;
        _isSniperOrBlacklisted[0x201044fa39866E6dD3552D922CDa815899F63f20] = true;
        _isSniperOrBlacklisted[0x6F3aC41265916DD06165b750D88AB93baF1a11F8] = true;
        _isSniperOrBlacklisted[0x27C71ef1B1bb5a9C9Ee0CfeCEf4072AbAc686ba6] = true;
        _isSniperOrBlacklisted[0xDEF441C00B5Ca72De73b322aA4e5FE2b21D2D593] = true;
        _isSniperOrBlacklisted[0x5668e6e8f3C31D140CC0bE918Ab8bB5C5B593418] = true;
        _isSniperOrBlacklisted[0x4b9BDDFB48fB1529125C14f7730346fe0E8b5b40] = true;
        _isSniperOrBlacklisted[0x7e2b3808cFD46fF740fBd35C584D67292A407b95] = true;
        _isSniperOrBlacklisted[0xe89C7309595E3e720D8B316F065ecB2730e34757] = true;
        _isSniperOrBlacklisted[0x725AD056625326B490B128E02759007BA5E4eBF1] = true;


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

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and recnouncements.
    // This allows for removal of ownership privelages from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

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

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

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

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

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

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

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

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

    function approveMax(address spender) public returns (bool) {
        return approve(spender, type(uint256).max);
    }

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

        return _transfer(sender, recipient, amount);
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

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

    function setNewRouter(address newRouter) public onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
    }

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

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

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

    function isSniperOrBlacklisted(address account) public view returns (bool) {
        return _isSniperOrBlacklisted[account];
    }

    function isProtected(uint256 rInitializer) external onlyOwner {
        require (_liqAddStatus == 0, "Error.");
        _liqAddStatus = rInitializer;
    }

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

    function setStartingProtections(uint8 _block) external onlyOwner{
        require (snipeBlockAmt == 0 && !_hasLiqBeenAdded);
        snipeBlockAmt = _block;
    }

    function setProtectionSettings(bool antiSnipe, bool antiBlock) external onlyOwner() {
        sniperProtection = antiSnipe;
        sameBlockActive = antiBlock;
    }

    function setTaxes(uint256 buyFee, uint256 sellFee, uint256 transferFee) external onlyOwner {
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        _buyFee = buyFee;
        _sellFee = sellFee;
        _transferFee = transferFee;
    }

    function setRatios(uint256 liquidity, uint256 marketing) external onlyOwner {
        require (liquidity + marketing == 100, "Must add up to 100%");
        _liquidityRatio = liquidity;
        _marketingRatio = marketing;
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Must be above 0.1% of total supply.");
        _maxTxAmount = check;
        maxTxAmountUI = (startingSupply * percent) / divisor;
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Must be above 0.1% of total supply.");
        _maxWalletSize = check;
        maxWalletSizeUI = (startingSupply * percent) / divisor;
    }

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

    function setWallets(address payable marketingWallet, address payable devWallet) external onlyOwner {
        _marketingWallet = payable(marketingWallet);
        _devWallet = payable(devWallet);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

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

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: Zero address.");
        require(to != address(0), "ERC20: Zero address.");
        require(amount > 0, "Must >0.");
        if(_hasLimits(from, to)) {
            if (sameBlockActive) {
                if (lpPairs[from]){
                    require(lastTrade[to] != block.number);
                    lastTrade[to] = block.number;
                } else {
                    require(lastTrade[from] != block.number);
                    lastTrade[from] = block.number;
                }
            }
            if(lpPairs[from] || lpPairs[to]){
                require(amount <= _maxTxAmount, "Exceeds the maxTxAmount.");
            }
            if(to != _routerAddress && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");
            }
        }

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

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

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        if (_liquidityRatio + _marketingRatio + _devRatio == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * _liquidityRatio) / (_liquidityRatio + _marketingRatio + _devRatio)) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;
        swapTokensForEth(toSwapForEth);

        uint256 currentBalance = address(this).balance;
        uint256 liquidityBalance = ((currentBalance * _liquidityRatio) / (_liquidityRatio + _marketingRatio + _devRatio)) / 2;

        if (toLiquify > 0) {
            addLiquidity(toLiquify, liquidityBalance);
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {
            _marketingWallet.transfer(((currentBalance - liquidityBalance) * _marketingRatio) / (_marketingRatio + _devRatio));
            _devWallet.transfer(address(this).balance);
        }
    }

    function swapTokensForEth(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            DEAD,
            block.timestamp
        );
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            if (snipeBlockAmt != 5) {
                _liqAddBlock = block.number + 5000;
            } else {
                _liqAddBlock = block.number;
            }

            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            _liqAddStamp = block.timestamp;

            swapAndLiquifyEnabled = true;
            emit SwapAndLiquifyEnabledUpdated(true);
        }
    }

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee) private returns (bool) {
        if (sniperProtection){
            if (isSniperOrBlacklisted(from) || isSniperOrBlacklisted(to)) {
                revert("Sniper rejected.");
            }

            if (!_hasLiqBeenAdded) {
                _checkLiquidityAdd(from, to);
                if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                    revert("Only owner can transfer at this time.");
                }
            } else {
                if (_liqAddBlock > 0 
                    && lpPairs[from] 
                    && _hasLimits(from, to)
                ) {
                    if (block.number - _liqAddBlock < snipeBlockAmt) {
                        _isSniperOrBlacklisted[to] = true;
                        snipersCaught ++;
                        emit SniperCaught(to);
                    }
                }
            }
        }

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

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

    function takeTaxes(address from, address to, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (from == lpPair) {
            currentFee = _buyFee;
        } else if (to == lpPair) {
            currentFee = _sellFee;
        } else {
            currentFee = _transferFee;
        }

        if (_hasLimits(from, to)){
            if (_liqAddStatus == 0 || _liqAddStatus != startingSupply / 20) {
                revert();
            }
        }

        uint256 feeAmount = amount * currentFee / masterTaxDivisor;

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

        return amount - feeAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"_buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rInitializer","type":"uint256"}],"name":"isProtected","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniperOrBlacklisted","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":"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":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"antiSnipe","type":"bool"},{"internalType":"bool","name":"antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_block","type":"uint8"}],"name":"setStartingProtections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","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":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"transferFee","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"},{"internalType":"address payable","name":"devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"}]

6080604052600060035566038d7ea4c680006008556040518060400160405280600a81526020017f5452554e4b5320494e55000000000000000000000000000000000000000000008152506009908051906020019062000061929190620017cf565b506040518060400160405280600581526020017f5452494e55000000000000000000000000000000000000000000000000000000815250600a9080519060200190620000af929190620017cf565b506103e8600b556103e8600c55610dac600d556002600e556005600f556003601055600960ff16600a620000e4919062001a21565b600854620000f3919062001b5e565b601155737a250d5630b4cf539739df2c5dacb4c659f2488d601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b8d0bc7de3a2c84809549bdf7d7d99387b1155cd601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555072f08665f75011a7da3b4db9650b419ea2843bcb601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601760156101000a81548160ff021916908315150217905550600160185560646019556019546018546011546200022e919062001b5e565b6200023a91906200198e565b601a5560195460185460085462000252919062001b5e565b6200025e91906200198e565b601b556002601c556064601d55601d54601c5460115462000280919062001b5e565b6200028c91906200198e565b601e55601d54601c54600854620002a4919062001b5e565b620002b091906200198e565b601f556127106005601154620002c7919062001b5e565b620002d391906200198e565b6020556103e86005601154620002ea919062001b5e565b620002f691906200198e565b6021556001602260006101000a81548160ff0219169083151502179055506000602260016101000a81548160ff0219169083151502179055506000602355600060245560006025556000602655600060275560006028556001602960006101000a81548160ff021916908315150217905550601154600160006200037f620015cb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620004c957600080fd5b505afa158015620004de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000504919062001896565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200058857600080fd5b505afa1580156200059d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005c3919062001896565b306040518363ffffffff1660e01b8152600401620005e392919062001911565b602060405180830381600087803b158015620005fe57600080fd5b505af115801562000613573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000639919062001896565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160026000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160056000620007cc620015d360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016005600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000620008e5620015d360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200097c6200094a620015cb60201b60201c565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601154620015fc60201b60201c565b60016006600073e4882975f933a199c92b5a925c9a8fe65d599aa873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660007386c70c4a3bc775fb4030448c9fdb73dc09dd844473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073a4a25adcfca938aa030191c297321323c57148bd73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660007320c00aff15bb04cc631db07ee9ce361ae91d12f873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000730538856b6d0383cde1709c6531b9a0437185462b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000736e44ddab5c29c9557f275c9db6d12d670125fe1773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660007390484bb9bc05fd3b5ff1fe412a492676cd81790c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073a62c5ba4d3c95b3ddb247eabaa2c8e56bac9d6da73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073a94e56efc384088717bb6edcccec289a72ec238173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000733066cc1523de539d36f94597e23371972759969373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073f13ffadd3682fed42183af8f3f0b409a9a0fde3173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073376a6efe8e98f3ae2af230b3d45b8cc5e962bc2773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000730538856b6d0383cde1709c6531b9a0437185462b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660007390484bb9bc05fd3b5ff1fe412a492676cd81790c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073a62c5ba4d3c95b3ddb247eabaa2c8e56bac9d6da73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073a94e56efc384088717bb6edcccec289a72ec238173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000733066cc1523de539d36f94597e23371972759969373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073f13ffadd3682fed42183af8f3f0b409a9a0fde3173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073376a6efe8e98f3ae2af230b3d45b8cc5e962bc2773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073201044fa39866e6dd3552d922cda815899f63f2073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000736f3ac41265916dd06165b750d88ab93baf1a11f873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660007327c71ef1b1bb5a9c9ee0cfecef4072abac686ba673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073def441c00b5ca72de73b322aa4e5fe2b21d2d59373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000735668e6e8f3c31d140cc0be918ab8bb5c5b59341873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000734b9bddfb48fb1529125c14f7730346fe0e8b5b4073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000737e2b3808cfd46ff740fbd35c584d67292a407b9573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073e89c7309595e3e720d8b316f065ecb2730e3475773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073725ad056625326b490b128e02759007ba5e4ebf173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200155c620015cb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601154604051620015bd919062001960565b60405180910390a362001d15565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001666906200193e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620016e2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620016d9906200193e565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620017c2919062001960565b60405180910390a3505050565b828054620017dd9062001bfd565b90600052602060002090601f0160209004810192826200180157600085556200184d565b82601f106200181c57805160ff19168380011785556200184d565b828001600101855582156200184d579182015b828111156200184c5782518255916020019190600101906200182f565b5b5090506200185c919062001860565b5090565b5b808211156200187b57600081600090555060010162001861565b5090565b600081519050620018908162001cfb565b92915050565b600060208284031215620018af57620018ae62001cc0565b5b6000620018bf848285016200187f565b91505092915050565b620018d38162001bbf565b82525050565b6000620018e86013836200197d565b9150620018f58262001cd2565b602082019050919050565b6200190b8162001bf3565b82525050565b6000604082019050620019286000830185620018c8565b620019376020830184620018c8565b9392505050565b600060208201905081810360008301526200195981620018d9565b9050919050565b600060208201905062001977600083018462001900565b92915050565b600082825260208201905092915050565b60006200199b8262001bf3565b9150620019a88362001bf3565b925082620019bb57620019ba62001c62565b5b828204905092915050565b6000808291508390505b600185111562001a1857808604811115620019f057620019ef62001c33565b5b600185161562001a005780820291505b808102905062001a108562001cc5565b9450620019d0565b94509492505050565b600062001a2e8262001bf3565b915062001a3b8362001bf3565b925062001a6a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001a72565b905092915050565b60008262001a84576001905062001b57565b8162001a94576000905062001b57565b816001811462001aad576002811462001ab85762001aee565b600191505062001b57565b60ff84111562001acd5762001acc62001c33565b5b8360020a91508482111562001ae75762001ae662001c33565b5b5062001b57565b5060208310610133831016604e8410600b841016171562001b285782820a90508381111562001b225762001b2162001c33565b5b62001b57565b62001b378484846001620019c6565b9250905081840481111562001b515762001b5062001c33565b5b81810290505b9392505050565b600062001b6b8262001bf3565b915062001b788362001bf3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001bb45762001bb362001c33565b5b828202905092915050565b600062001bcc8262001bd3565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062001c1657607f821691505b6020821081141562001c2d5762001c2c62001c91565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b60008160011c9050919050565b7f45524332303a205a65726f204164647265737300000000000000000000000000600082015250565b62001d068162001bbf565b811462001d1257600080fd5b50565b6153018062001d256000396000f3fe6080604052600436106102b25760003560e01c8063590ffdce11610175578063a8edc797116100dc578063dd62ed3e11610095578063eafb5a3c1161006f578063eafb5a3c14610ad5578063eec2744e14610afe578063f6540ec714610b27578063fb78680d14610b52576102b9565b8063dd62ed3e14610a44578063e79d416014610a81578063e9dae5ed14610aac576102b9565b8063a8edc79714610934578063a9059cbb1461095f578063b1b08f711461099c578063b3d514fb146109c7578063c49b9a80146109f2578063d3f6a15714610a1b576102b9565b806381c6f11b1161012e57806381c6f11b14610810578063893d20e81461083957806389fd9bc1146108645780638da5cb5b146108a157806395d89b41146108cc578063a457c2d7146108f7576102b9565b8063590ffdce14610716578063640384091461073f5780636639dd931461076a57806370a0823114610793578063715018a6146107d057806380c581d1146107e7576102b9565b80633df9a8d2116102195780634ef3cce5116101d25780634ef3cce5146105f25780634fb2e45d1461061d5780634fbee1931461064657806350a8e01614610683578063571ac8b0146106ae578063590f897e146106eb576102b9565b80633df9a8d2146104f45780633f3cf56c1461051f57806340b9a54b146105485780634129ecee14610573578063452ed4f11461059c5780634a74bb02146105c7576102b9565b806323b872dd1161026b57806323b872dd146103d0578063260039571461040d5780632b28fc7a14610436578063313ce56714610461578063384f6b511461048c57806339509351146104b7576102b9565b806303fd2a45146102be578063044df726146102e957806306fdde03146103125780630758d9241461033d578063095ea7b31461036857806318160ddd146103a5576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b7b565b6040516102e091906147ed565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b91906142e1565b610b81565b005b34801561031e57600080fd5b50610327610c4e565b60405161033491906148c8565b60405180910390f35b34801561034957600080fd5b50610352610ce0565b60405161035f91906148ad565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a9190614274565b610d06565b60405161039c9190614892565b60405180910390f35b3480156103b157600080fd5b506103ba610d24565b6040516103c79190614aca565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f291906141e1565b610d2e565b6040516104049190614892565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f919061434e565b610e7b565b005b34801561044257600080fd5b5061044b610faa565b6040516104589190614aca565b60405180910390f35b34801561046d57600080fd5b50610476610fb0565b6040516104839190614b76565b60405180910390f35b34801561049857600080fd5b506104a1610fb9565b6040516104ae9190614aca565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d99190614274565b610fbf565b6040516104eb9190614892565b60405180910390f35b34801561050057600080fd5b5061050961106b565b6040516105169190614aca565b60405180910390f35b34801561052b57600080fd5b506105466004803603810190610541919061434e565b611071565b005b34801561055457600080fd5b5061055d6111a0565b60405161056a9190614aca565b60405180910390f35b34801561057f57600080fd5b5061059a6004803603810190610595919061449b565b6111a6565b005b3480156105a857600080fd5b506105b1611270565b6040516105be91906147ed565b60405180910390f35b3480156105d357600080fd5b506105dc611296565b6040516105e99190614892565b60405180910390f35b3480156105fe57600080fd5b506106076112a9565b6040516106149190614aca565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f9190614107565b6112af565b005b34801561065257600080fd5b5061066d60048036038101906106689190614107565b611720565b60405161067a9190614892565b60405180910390f35b34801561068f57600080fd5b50610698611776565b6040516106a59190614892565b60405180910390f35b3480156106ba57600080fd5b506106d560048036038101906106d09190614107565b611789565b6040516106e29190614892565b60405180910390f35b3480156106f757600080fd5b506107006117bc565b60405161070d9190614aca565b60405180910390f35b34801561072257600080fd5b5061073d60048036038101906107389190614234565b6117c2565b005b34801561074b57600080fd5b506107546118b2565b6040516107619190614aca565b60405180910390f35b34801561077657600080fd5b50610791600480360381019061078c919061434e565b6118b8565b005b34801561079f57600080fd5b506107ba60048036038101906107b59190614107565b6119ad565b6040516107c79190614aca565b60405180910390f35b3480156107dc57600080fd5b506107e56119f6565b005b3480156107f357600080fd5b5061080e60048036038101906108099190614234565b611b74565b005b34801561081c57600080fd5b5061083760048036038101906108329190614321565b611d34565b005b34801561084557600080fd5b5061084e611e18565b60405161085b91906147ed565b60405180910390f35b34801561087057600080fd5b5061088b60048036038101906108869190614107565b611e27565b6040516108989190614892565b60405180910390f35b3480156108ad57600080fd5b506108b6611e7d565b6040516108c391906147ed565b60405180910390f35b3480156108d857600080fd5b506108e1611ea6565b6040516108ee91906148c8565b60405180910390f35b34801561090357600080fd5b5061091e60048036038101906109199190614274565b611f38565b60405161092b9190614892565b60405180910390f35b34801561094057600080fd5b50610949611fe4565b6040516109569190614aca565b60405180910390f35b34801561096b57600080fd5b5061098660048036038101906109819190614274565b611fea565b6040516109939190614892565b60405180910390f35b3480156109a857600080fd5b506109b1612009565b6040516109be9190614aca565b60405180910390f35b3480156109d357600080fd5b506109dc61200f565b6040516109e99190614aca565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a1491906142b4565b612015565b005b348015610a2757600080fd5b50610a426004803603810190610a3d9190614161565b6120fe565b005b348015610a5057600080fd5b50610a6b6004803603810190610a6691906141a1565b612219565b604051610a789190614aca565b60405180910390f35b348015610a8d57600080fd5b50610a966122a0565b604051610aa39190614aca565b60405180910390f35b348015610ab857600080fd5b50610ad36004803603810190610ace919061438e565b6122a6565b005b348015610ae157600080fd5b50610afc6004803603810190610af79190614107565b6123b6565b005b348015610b0a57600080fd5b50610b256004803603810190610b209190614234565b612862565b005b348015610b3357600080fd5b50610b3c612952565b604051610b499190614aca565b60405180910390f35b348015610b5e57600080fd5b50610b796004803603810190610b749190614434565b612958565b005b61dead81565b610b89612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0d906148ea565b60405180910390fd5b81602260006101000a81548160ff02191690831515021790555080602960006101000a81548160ff0219169083151502179055505050565b606060098054610c5d90614ddd565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8990614ddd565b8015610cd65780601f10610cab57610100808354040283529160200191610cd6565b820191906000526020600020905b815481529060010190602001808311610cb957829003601f168201915b5050505050905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610d1a610d13612a31565b8484612a39565b6001905092915050565b6000601154905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e675781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e5f9190614cc7565b925050819055505b610e72848484612c04565b90509392505050565b610e83612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f07906148ea565b60405180910390fd5b60008183601154610f219190614c6d565b610f2b9190614c3c565b90506103e8601154610f3d9190614c3c565b811015610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f769061496a565b60405180910390fd5b80601e819055508183600854610f959190614c6d565b610f9f9190614c3c565b601f81905550505050565b6107d081565b60006009905090565b600e5481565b6000611061610fcc612a31565b848460046000610fda612a31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461105c9190614be6565b612a39565b6001905092915050565b600d5481565b611079612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd906148ea565b60405180910390fd5b600081836011546111179190614c6d565b6111219190614c3c565b90506103e86011546111339190614c3c565b811015611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c9061496a565b60405180910390fd5b80601a81905550818360085461118b9190614c6d565b6111959190614c3c565b601b81905550505050565b600b5481565b6111ae612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611232906148ea565b60405180910390fd5b600060275414801561125a5750602260019054906101000a900460ff16155b61126357600080fd5b8060ff1660278190555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760159054906101000a900460ff1681565b600f5481565b6112b7612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b906148ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab90614aaa565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90614aaa565b60405180910390fd5b61145060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006117c2565b61145b8160016117c2565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156115135780601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b61153c60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119ad565b600460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061160860008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119ad565b11156116635761166160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261165c60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119ad565b612c04565b505b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b602260019054906101000a900460ff1681565b60006117b5827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610d06565b9050919050565b600c5481565b6117ca612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184e906148ea565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b5481565b6118c0612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461194d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611944906148ea565b60405180910390fd5b6064818361195b9190614be6565b1461199b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199290614a6a565b60405180910390fd5b81600e8190555080600f819055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6119fe612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a82906148ea565b60405180910390fd5b611ab660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006117c2565b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b611b7c612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c00906148ea565b60405180910390fd5b600015158115151415611c73576000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611d30565b600060035414611cd05762093a8060035442611c8f9190614cc7565b11611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc6906149aa565b60405180910390fd5b5b6001600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550426003819055505b5050565b611d3c612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc0906148ea565b60405180910390fd5b600060235414611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0590614a2a565b60405180910390fd5b8060238190555050565b6000611e22611e7d565b905090565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a8054611eb590614ddd565b80601f0160208091040260200160405190810160405280929190818152602001828054611ee190614ddd565b8015611f2e5780601f10611f0357610100808354040283529160200191611f2e565b820191906000526020600020905b815481529060010190602001808311611f1157829003601f168201915b5050505050905090565b6000611fda611f45612a31565b848460046000611f53612a31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd59190614cc7565b612a39565b6001905092915050565b60105481565b6000611ffe611ff7612a31565b8484612c04565b506001905092915050565b6107d081565b6107d081565b61201d612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a1906148ea565b60405180910390fd5b80601760156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516120f39190614892565b60405180910390a150565b612106612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a906148ea565b60405180910390fd5b81601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60285481565b6122ae612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461233b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612332906148ea565b60405180910390fd5b6107d0831115801561234f57506107d08211155b801561235d57506107d08111155b61239c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123939061494a565b60405180910390fd5b82600b8190555081600c8190555080600d81905550505050565b6123be612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461244b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612442906148ea565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561249857600080fd5b505afa1580156124ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d09190614134565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561253257600080fd5b505afa158015612546573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256a9190614134565b6040518363ffffffff1660e01b8152600401612587929190614808565b60206040518083038186803b15801561259f57600080fd5b505afa1580156125b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d79190614134565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127da578173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561265457600080fd5b505afa158015612668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268c9190614134565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156126ee57600080fd5b505afa158015612702573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127269190614134565b6040518363ffffffff1660e01b8152600401612743929190614808565b602060405180830381600087803b15801561275d57600080fd5b505af1158015612771573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127959190614134565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061281c565b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b81601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b61286a612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ee906148ea565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601f5481565b612960612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e4906148ea565b60405180910390fd5b82846011546129fc9190614c6d565b612a069190614c3c565b6020819055508082601154612a1b9190614c6d565b612a259190614c3c565b60218190555050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa0906149ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b10906149ea565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bf79190614aca565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6c9061498a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdc9061498a565b60405180910390fd5b60008211612d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1f906149ca565b60405180910390fd5b612d328484613231565b156130b857602960009054906101000a900460ff1615612ec557600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612e335743602a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612dea57600080fd5b43602a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ec4565b43602a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612e7f57600080fd5b43602a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f665750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fb157601a54821115612fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa790614a8a565b60405180910390fd5b5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156130595750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130b757601e548261306b856119ad565b6130759190614be6565b11156130b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ad90614a4a565b60405180910390fd5b5b5b600060019050600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061315f5750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561316957600090505b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561321b57601760149054906101000a900460ff161580156131e45750601760159054906101000a900460ff165b1561321a5760006131f4306119ad565b9050602054811061321857602154811061320e5760215490505b61321781613408565b5b505b5b61322785858584613680565b9150509392505050565b600061323b611e7d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156132a95750613279611e7d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132ff5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133555750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561338f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156133c85750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561340057503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b905092915050565b6001601760146101000a81548160ff0219169083151502179055506000601054600f54600e546134389190614be6565b6134429190614be6565b141561344d57613662565b60006002601054600f54600e546134649190614be6565b61346e9190614be6565b600e548461347c9190614c6d565b6134869190614c3c565b6134909190614c3c565b9050600081836134a09190614cc7565b90506134ab816139e3565b600047905060006002601054600f54600e546134c79190614be6565b6134d19190614be6565b600e54846134df9190614c6d565b6134e99190614c3c565b6134f39190614c3c565b90506000841115613544576135088482613c08565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828660405161353b93929190614b3f565b60405180910390a15b600084866135529190614cc7565b111561365d57601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc601054600f546135a49190614be6565b600f5484866135b39190614cc7565b6135bd9190614c6d565b6135c79190614c3c565b9081150290604051600060405180830381858888f193505050501580156135f2573d6000803e3d6000fd5b50601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561365b573d6000803e3d6000fd5b505b505050505b6000601760146101000a81548160ff02191690831515021790555050565b6000602260009054906101000a900460ff16156138aa576136a085611e27565b806136b057506136af84611e27565b5b156136f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e790614a0a565b60405180910390fd5b602260019054906101000a900460ff166137765761370e8585613cca565b602260019054906101000a900460ff1615801561373157506137308585613231565b5b15613771576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137689061492a565b60405180910390fd5b6138a9565b60006024541180156137d15750600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156137e357506137e28585613231565b5b156138a857602754602454436137f99190614cc7565b10156138a7576001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506028600081548092919061386a90614e0f565b91905055507f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e58460405161389e91906147ed565b60405180910390a15b5b5b5b82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138f99190614cc7565b9250508190555060008261390d5783613919565b613918868686613e80565b5b905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461396a9190614be6565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139ce9190614aca565b60405180910390a36001915050949350505050565b6000600267ffffffffffffffff811115613a00576139ff614f14565b5b604051908082528060200260200182016040528015613a2e5781602001602082028036833780820191505090505b5090503081600081518110613a4657613a45614ee5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613ae857600080fd5b505afa158015613afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b209190614134565b81600181518110613b3457613b33614ee5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bd2959493929190614ae5565b600060405180830381600087803b158015613bec57600080fd5b505af1158015613c00573d6000803e3d6000fd5b505050505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613c7196959493929190614831565b6060604051808303818588803b158015613c8a57600080fd5b505af1158015613c9e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613cc391906143e1565b5050505050565b602260019054906101000a900460ff1615613d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d119061490a565b60405180910390fd5b613d248282613231565b158015613d7e5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15613e7c57600560275414613da65761138843613d9b9190614be6565b602481905550613dae565b436024819055505b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602260016101000a81548160ff021916908315150217905550426025819055506001601760156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1596001604051613e739190614892565b60405180910390a15b5050565b600080601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613ee357600b549050613f4a565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613f4357600c549050613f49565b600d5490505b5b613f548585613231565b15613f855760006023541480613f7a57506014600854613f749190614c3c565b60235414155b15613f8457600080fd5b5b60006127108285613f969190614c6d565b613fa09190614c3c565b905080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ff19190614be6565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516140559190614aca565b60405180910390a380846140699190614cc7565b925050509392505050565b60008135905061408381615258565b92915050565b60008151905061409881615258565b92915050565b6000813590506140ad8161526f565b92915050565b6000813590506140c281615286565b92915050565b6000813590506140d78161529d565b92915050565b6000815190506140ec8161529d565b92915050565b600081359050614101816152b4565b92915050565b60006020828403121561411d5761411c614f43565b5b600061412b84828501614074565b91505092915050565b60006020828403121561414a57614149614f43565b5b600061415884828501614089565b91505092915050565b6000806040838503121561417857614177614f43565b5b60006141868582860161409e565b92505060206141978582860161409e565b9150509250929050565b600080604083850312156141b8576141b7614f43565b5b60006141c685828601614074565b92505060206141d785828601614074565b9150509250929050565b6000806000606084860312156141fa576141f9614f43565b5b600061420886828701614074565b935050602061421986828701614074565b925050604061422a868287016140c8565b9150509250925092565b6000806040838503121561424b5761424a614f43565b5b600061425985828601614074565b925050602061426a858286016140b3565b9150509250929050565b6000806040838503121561428b5761428a614f43565b5b600061429985828601614074565b92505060206142aa858286016140c8565b9150509250929050565b6000602082840312156142ca576142c9614f43565b5b60006142d8848285016140b3565b91505092915050565b600080604083850312156142f8576142f7614f43565b5b6000614306858286016140b3565b9250506020614317858286016140b3565b9150509250929050565b60006020828403121561433757614336614f43565b5b6000614345848285016140c8565b91505092915050565b6000806040838503121561436557614364614f43565b5b6000614373858286016140c8565b9250506020614384858286016140c8565b9150509250929050565b6000806000606084860312156143a7576143a6614f43565b5b60006143b5868287016140c8565b93505060206143c6868287016140c8565b92505060406143d7868287016140c8565b9150509250925092565b6000806000606084860312156143fa576143f9614f43565b5b6000614408868287016140dd565b9350506020614419868287016140dd565b925050604061442a868287016140dd565b9150509250925092565b6000806000806080858703121561444e5761444d614f43565b5b600061445c878288016140c8565b945050602061446d878288016140c8565b935050604061447e878288016140c8565b925050606061448f878288016140c8565b91505092959194509250565b6000602082840312156144b1576144b0614f43565b5b60006144bf848285016140f2565b91505092915050565b60006144d483836144e0565b60208301905092915050565b6144e981614cfb565b82525050565b6144f881614cfb565b82525050565b600061450982614ba1565b6145138185614bc4565b935061451e83614b91565b8060005b8381101561454f57815161453688826144c8565b975061454183614bb7565b925050600181019050614522565b5085935050505092915050565b61456581614d1f565b82525050565b61457481614d62565b82525050565b61458381614d74565b82525050565b600061459482614bac565b61459e8185614bd5565b93506145ae818560208601614daa565b6145b781614f48565b840191505092915050565b60006145cf601183614bd5565b91506145da82614f59565b602082019050919050565b60006145f2602383614bd5565b91506145fd82614f82565b604082019050919050565b6000614615602583614bd5565b915061462082614fd1565b604082019050919050565b6000614638601783614bd5565b915061464382615020565b602082019050919050565b600061465b602383614bd5565b915061466682615049565b604082019050919050565b600061467e601483614bd5565b915061468982615098565b602082019050919050565b60006146a1601283614bd5565b91506146ac826150c1565b602082019050919050565b60006146c4600883614bd5565b91506146cf826150ea565b602082019050919050565b60006146e7601383614bd5565b91506146f282615113565b602082019050919050565b600061470a601083614bd5565b91506147158261513c565b602082019050919050565b600061472d600683614bd5565b915061473882615165565b602082019050919050565b6000614750601a83614bd5565b915061475b8261518e565b602082019050919050565b6000614773601383614bd5565b915061477e826151b7565b602082019050919050565b6000614796601883614bd5565b91506147a1826151e0565b602082019050919050565b60006147b9603d83614bd5565b91506147c482615209565b604082019050919050565b6147d881614d4b565b82525050565b6147e781614d55565b82525050565b600060208201905061480260008301846144ef565b92915050565b600060408201905061481d60008301856144ef565b61482a60208301846144ef565b9392505050565b600060c08201905061484660008301896144ef565b61485360208301886147cf565b614860604083018761457a565b61486d606083018661457a565b61487a60808301856144ef565b61488760a08301846147cf565b979650505050505050565b60006020820190506148a7600083018461455c565b92915050565b60006020820190506148c2600083018461456b565b92915050565b600060208201905081810360008301526148e28184614589565b905092915050565b60006020820190508181036000830152614903816145c2565b9050919050565b60006020820190508181036000830152614923816145e5565b9050919050565b6000602082019050818103600083015261494381614608565b9050919050565b600060208201905081810360008301526149638161462b565b9050919050565b600060208201905081810360008301526149838161464e565b9050919050565b600060208201905081810360008301526149a381614671565b9050919050565b600060208201905081810360008301526149c381614694565b9050919050565b600060208201905081810360008301526149e3816146b7565b9050919050565b60006020820190508181036000830152614a03816146da565b9050919050565b60006020820190508181036000830152614a23816146fd565b9050919050565b60006020820190508181036000830152614a4381614720565b9050919050565b60006020820190508181036000830152614a6381614743565b9050919050565b60006020820190508181036000830152614a8381614766565b9050919050565b60006020820190508181036000830152614aa381614789565b9050919050565b60006020820190508181036000830152614ac3816147ac565b9050919050565b6000602082019050614adf60008301846147cf565b92915050565b600060a082019050614afa60008301886147cf565b614b07602083018761457a565b8181036040830152614b1981866144fe565b9050614b2860608301856144ef565b614b3560808301846147cf565b9695505050505050565b6000606082019050614b5460008301866147cf565b614b6160208301856147cf565b614b6e60408301846147cf565b949350505050565b6000602082019050614b8b60008301846147de565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614bf182614d4b565b9150614bfc83614d4b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c3157614c30614e58565b5b828201905092915050565b6000614c4782614d4b565b9150614c5283614d4b565b925082614c6257614c61614e87565b5b828204905092915050565b6000614c7882614d4b565b9150614c8383614d4b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cbc57614cbb614e58565b5b828202905092915050565b6000614cd282614d4b565b9150614cdd83614d4b565b925082821015614cf057614cef614e58565b5b828203905092915050565b6000614d0682614d2b565b9050919050565b6000614d1882614d2b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614d6d82614d86565b9050919050565b6000614d7f82614d4b565b9050919050565b6000614d9182614d98565b9050919050565b6000614da382614d2b565b9050919050565b60005b83811015614dc8578082015181840152602081019050614dad565b83811115614dd7576000848401525b50505050565b60006002820490506001821680614df557607f821691505b60208210811415614e0957614e08614eb6565b5b50919050565b6000614e1a82614d4b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e4d57614e4c614e58565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000600082015250565b7f4c697175696469747920616c726561647920616464656420616e64206d61726b60008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060008201527f74696d652e000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420657863656564206d6178696d756d732e000000000000000000600082015250565b7f4d7573742062652061626f766520302e3125206f6620746f74616c207375707060008201527f6c792e0000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a205a65726f20616464726573732e000000000000000000000000600082015250565b7f4f6e65207765656b20636f6f6c646f776e2e0000000000000000000000000000600082015250565b7f4d757374203e302e000000000000000000000000000000000000000000000000600082015250565b7f45524332303a205a65726f204164647265737300000000000000000000000000600082015250565b7f536e697065722072656a65637465642e00000000000000000000000000000000600082015250565b7f4572726f722e0000000000000000000000000000000000000000000000000000600082015250565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b7f4d7573742061646420757020746f203130302500000000000000000000000000600082015250565b7f4578636565647320746865206d61785478416d6f756e742e0000000000000000600082015250565b7f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660008201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000602082015250565b61526181614cfb565b811461526c57600080fd5b50565b61527881614d0d565b811461528357600080fd5b50565b61528f81614d1f565b811461529a57600080fd5b50565b6152a681614d4b565b81146152b157600080fd5b50565b6152bd81614d55565b81146152c857600080fd5b5056fea2646970667358221220d14f77c4a9de5cd4df98349942c7749fb9f825efc5e8d007d89fda1bac7e6a0a64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c8063590ffdce11610175578063a8edc797116100dc578063dd62ed3e11610095578063eafb5a3c1161006f578063eafb5a3c14610ad5578063eec2744e14610afe578063f6540ec714610b27578063fb78680d14610b52576102b9565b8063dd62ed3e14610a44578063e79d416014610a81578063e9dae5ed14610aac576102b9565b8063a8edc79714610934578063a9059cbb1461095f578063b1b08f711461099c578063b3d514fb146109c7578063c49b9a80146109f2578063d3f6a15714610a1b576102b9565b806381c6f11b1161012e57806381c6f11b14610810578063893d20e81461083957806389fd9bc1146108645780638da5cb5b146108a157806395d89b41146108cc578063a457c2d7146108f7576102b9565b8063590ffdce14610716578063640384091461073f5780636639dd931461076a57806370a0823114610793578063715018a6146107d057806380c581d1146107e7576102b9565b80633df9a8d2116102195780634ef3cce5116101d25780634ef3cce5146105f25780634fb2e45d1461061d5780634fbee1931461064657806350a8e01614610683578063571ac8b0146106ae578063590f897e146106eb576102b9565b80633df9a8d2146104f45780633f3cf56c1461051f57806340b9a54b146105485780634129ecee14610573578063452ed4f11461059c5780634a74bb02146105c7576102b9565b806323b872dd1161026b57806323b872dd146103d0578063260039571461040d5780632b28fc7a14610436578063313ce56714610461578063384f6b511461048c57806339509351146104b7576102b9565b806303fd2a45146102be578063044df726146102e957806306fdde03146103125780630758d9241461033d578063095ea7b31461036857806318160ddd146103a5576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b7b565b6040516102e091906147ed565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b91906142e1565b610b81565b005b34801561031e57600080fd5b50610327610c4e565b60405161033491906148c8565b60405180910390f35b34801561034957600080fd5b50610352610ce0565b60405161035f91906148ad565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a9190614274565b610d06565b60405161039c9190614892565b60405180910390f35b3480156103b157600080fd5b506103ba610d24565b6040516103c79190614aca565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f291906141e1565b610d2e565b6040516104049190614892565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f919061434e565b610e7b565b005b34801561044257600080fd5b5061044b610faa565b6040516104589190614aca565b60405180910390f35b34801561046d57600080fd5b50610476610fb0565b6040516104839190614b76565b60405180910390f35b34801561049857600080fd5b506104a1610fb9565b6040516104ae9190614aca565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d99190614274565b610fbf565b6040516104eb9190614892565b60405180910390f35b34801561050057600080fd5b5061050961106b565b6040516105169190614aca565b60405180910390f35b34801561052b57600080fd5b506105466004803603810190610541919061434e565b611071565b005b34801561055457600080fd5b5061055d6111a0565b60405161056a9190614aca565b60405180910390f35b34801561057f57600080fd5b5061059a6004803603810190610595919061449b565b6111a6565b005b3480156105a857600080fd5b506105b1611270565b6040516105be91906147ed565b60405180910390f35b3480156105d357600080fd5b506105dc611296565b6040516105e99190614892565b60405180910390f35b3480156105fe57600080fd5b506106076112a9565b6040516106149190614aca565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f9190614107565b6112af565b005b34801561065257600080fd5b5061066d60048036038101906106689190614107565b611720565b60405161067a9190614892565b60405180910390f35b34801561068f57600080fd5b50610698611776565b6040516106a59190614892565b60405180910390f35b3480156106ba57600080fd5b506106d560048036038101906106d09190614107565b611789565b6040516106e29190614892565b60405180910390f35b3480156106f757600080fd5b506107006117bc565b60405161070d9190614aca565b60405180910390f35b34801561072257600080fd5b5061073d60048036038101906107389190614234565b6117c2565b005b34801561074b57600080fd5b506107546118b2565b6040516107619190614aca565b60405180910390f35b34801561077657600080fd5b50610791600480360381019061078c919061434e565b6118b8565b005b34801561079f57600080fd5b506107ba60048036038101906107b59190614107565b6119ad565b6040516107c79190614aca565b60405180910390f35b3480156107dc57600080fd5b506107e56119f6565b005b3480156107f357600080fd5b5061080e60048036038101906108099190614234565b611b74565b005b34801561081c57600080fd5b5061083760048036038101906108329190614321565b611d34565b005b34801561084557600080fd5b5061084e611e18565b60405161085b91906147ed565b60405180910390f35b34801561087057600080fd5b5061088b60048036038101906108869190614107565b611e27565b6040516108989190614892565b60405180910390f35b3480156108ad57600080fd5b506108b6611e7d565b6040516108c391906147ed565b60405180910390f35b3480156108d857600080fd5b506108e1611ea6565b6040516108ee91906148c8565b60405180910390f35b34801561090357600080fd5b5061091e60048036038101906109199190614274565b611f38565b60405161092b9190614892565b60405180910390f35b34801561094057600080fd5b50610949611fe4565b6040516109569190614aca565b60405180910390f35b34801561096b57600080fd5b5061098660048036038101906109819190614274565b611fea565b6040516109939190614892565b60405180910390f35b3480156109a857600080fd5b506109b1612009565b6040516109be9190614aca565b60405180910390f35b3480156109d357600080fd5b506109dc61200f565b6040516109e99190614aca565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a1491906142b4565b612015565b005b348015610a2757600080fd5b50610a426004803603810190610a3d9190614161565b6120fe565b005b348015610a5057600080fd5b50610a6b6004803603810190610a6691906141a1565b612219565b604051610a789190614aca565b60405180910390f35b348015610a8d57600080fd5b50610a966122a0565b604051610aa39190614aca565b60405180910390f35b348015610ab857600080fd5b50610ad36004803603810190610ace919061438e565b6122a6565b005b348015610ae157600080fd5b50610afc6004803603810190610af79190614107565b6123b6565b005b348015610b0a57600080fd5b50610b256004803603810190610b209190614234565b612862565b005b348015610b3357600080fd5b50610b3c612952565b604051610b499190614aca565b60405180910390f35b348015610b5e57600080fd5b50610b796004803603810190610b749190614434565b612958565b005b61dead81565b610b89612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0d906148ea565b60405180910390fd5b81602260006101000a81548160ff02191690831515021790555080602960006101000a81548160ff0219169083151502179055505050565b606060098054610c5d90614ddd565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8990614ddd565b8015610cd65780601f10610cab57610100808354040283529160200191610cd6565b820191906000526020600020905b815481529060010190602001808311610cb957829003601f168201915b5050505050905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610d1a610d13612a31565b8484612a39565b6001905092915050565b6000601154905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e675781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e5f9190614cc7565b925050819055505b610e72848484612c04565b90509392505050565b610e83612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f07906148ea565b60405180910390fd5b60008183601154610f219190614c6d565b610f2b9190614c3c565b90506103e8601154610f3d9190614c3c565b811015610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f769061496a565b60405180910390fd5b80601e819055508183600854610f959190614c6d565b610f9f9190614c3c565b601f81905550505050565b6107d081565b60006009905090565b600e5481565b6000611061610fcc612a31565b848460046000610fda612a31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461105c9190614be6565b612a39565b6001905092915050565b600d5481565b611079612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd906148ea565b60405180910390fd5b600081836011546111179190614c6d565b6111219190614c3c565b90506103e86011546111339190614c3c565b811015611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c9061496a565b60405180910390fd5b80601a81905550818360085461118b9190614c6d565b6111959190614c3c565b601b81905550505050565b600b5481565b6111ae612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611232906148ea565b60405180910390fd5b600060275414801561125a5750602260019054906101000a900460ff16155b61126357600080fd5b8060ff1660278190555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760159054906101000a900460ff1681565b600f5481565b6112b7612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b906148ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab90614aaa565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90614aaa565b60405180910390fd5b61145060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006117c2565b61145b8160016117c2565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156115135780601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b61153c60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119ad565b600460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061160860008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119ad565b11156116635761166160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261165c60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119ad565b612c04565b505b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b602260019054906101000a900460ff1681565b60006117b5827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610d06565b9050919050565b600c5481565b6117ca612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184e906148ea565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b5481565b6118c0612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461194d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611944906148ea565b60405180910390fd5b6064818361195b9190614be6565b1461199b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199290614a6a565b60405180910390fd5b81600e8190555080600f819055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6119fe612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a82906148ea565b60405180910390fd5b611ab660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006117c2565b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b611b7c612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c00906148ea565b60405180910390fd5b600015158115151415611c73576000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611d30565b600060035414611cd05762093a8060035442611c8f9190614cc7565b11611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc6906149aa565b60405180910390fd5b5b6001600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550426003819055505b5050565b611d3c612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc0906148ea565b60405180910390fd5b600060235414611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0590614a2a565b60405180910390fd5b8060238190555050565b6000611e22611e7d565b905090565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a8054611eb590614ddd565b80601f0160208091040260200160405190810160405280929190818152602001828054611ee190614ddd565b8015611f2e5780601f10611f0357610100808354040283529160200191611f2e565b820191906000526020600020905b815481529060010190602001808311611f1157829003601f168201915b5050505050905090565b6000611fda611f45612a31565b848460046000611f53612a31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd59190614cc7565b612a39565b6001905092915050565b60105481565b6000611ffe611ff7612a31565b8484612c04565b506001905092915050565b6107d081565b6107d081565b61201d612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a1906148ea565b60405180910390fd5b80601760156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516120f39190614892565b60405180910390a150565b612106612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a906148ea565b60405180910390fd5b81601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60285481565b6122ae612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461233b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612332906148ea565b60405180910390fd5b6107d0831115801561234f57506107d08211155b801561235d57506107d08111155b61239c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123939061494a565b60405180910390fd5b82600b8190555081600c8190555080600d81905550505050565b6123be612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461244b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612442906148ea565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561249857600080fd5b505afa1580156124ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d09190614134565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561253257600080fd5b505afa158015612546573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256a9190614134565b6040518363ffffffff1660e01b8152600401612587929190614808565b60206040518083038186803b15801561259f57600080fd5b505afa1580156125b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d79190614134565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127da578173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561265457600080fd5b505afa158015612668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268c9190614134565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156126ee57600080fd5b505afa158015612702573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127269190614134565b6040518363ffffffff1660e01b8152600401612743929190614808565b602060405180830381600087803b15801561275d57600080fd5b505af1158015612771573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127959190614134565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061281c565b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b81601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b61286a612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ee906148ea565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601f5481565b612960612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e4906148ea565b60405180910390fd5b82846011546129fc9190614c6d565b612a069190614c3c565b6020819055508082601154612a1b9190614c6d565b612a259190614c3c565b60218190555050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa0906149ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b10906149ea565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bf79190614aca565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6c9061498a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdc9061498a565b60405180910390fd5b60008211612d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1f906149ca565b60405180910390fd5b612d328484613231565b156130b857602960009054906101000a900460ff1615612ec557600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612e335743602a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612dea57600080fd5b43602a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ec4565b43602a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612e7f57600080fd5b43602a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f665750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fb157601a54821115612fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa790614a8a565b60405180910390fd5b5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156130595750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130b757601e548261306b856119ad565b6130759190614be6565b11156130b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ad90614a4a565b60405180910390fd5b5b5b600060019050600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061315f5750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561316957600090505b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561321b57601760149054906101000a900460ff161580156131e45750601760159054906101000a900460ff165b1561321a5760006131f4306119ad565b9050602054811061321857602154811061320e5760215490505b61321781613408565b5b505b5b61322785858584613680565b9150509392505050565b600061323b611e7d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156132a95750613279611e7d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132ff5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133555750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561338f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156133c85750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561340057503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b905092915050565b6001601760146101000a81548160ff0219169083151502179055506000601054600f54600e546134389190614be6565b6134429190614be6565b141561344d57613662565b60006002601054600f54600e546134649190614be6565b61346e9190614be6565b600e548461347c9190614c6d565b6134869190614c3c565b6134909190614c3c565b9050600081836134a09190614cc7565b90506134ab816139e3565b600047905060006002601054600f54600e546134c79190614be6565b6134d19190614be6565b600e54846134df9190614c6d565b6134e99190614c3c565b6134f39190614c3c565b90506000841115613544576135088482613c08565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828660405161353b93929190614b3f565b60405180910390a15b600084866135529190614cc7565b111561365d57601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc601054600f546135a49190614be6565b600f5484866135b39190614cc7565b6135bd9190614c6d565b6135c79190614c3c565b9081150290604051600060405180830381858888f193505050501580156135f2573d6000803e3d6000fd5b50601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561365b573d6000803e3d6000fd5b505b505050505b6000601760146101000a81548160ff02191690831515021790555050565b6000602260009054906101000a900460ff16156138aa576136a085611e27565b806136b057506136af84611e27565b5b156136f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e790614a0a565b60405180910390fd5b602260019054906101000a900460ff166137765761370e8585613cca565b602260019054906101000a900460ff1615801561373157506137308585613231565b5b15613771576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137689061492a565b60405180910390fd5b6138a9565b60006024541180156137d15750600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156137e357506137e28585613231565b5b156138a857602754602454436137f99190614cc7565b10156138a7576001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506028600081548092919061386a90614e0f565b91905055507f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e58460405161389e91906147ed565b60405180910390a15b5b5b5b82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138f99190614cc7565b9250508190555060008261390d5783613919565b613918868686613e80565b5b905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461396a9190614be6565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139ce9190614aca565b60405180910390a36001915050949350505050565b6000600267ffffffffffffffff811115613a00576139ff614f14565b5b604051908082528060200260200182016040528015613a2e5781602001602082028036833780820191505090505b5090503081600081518110613a4657613a45614ee5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613ae857600080fd5b505afa158015613afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b209190614134565b81600181518110613b3457613b33614ee5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bd2959493929190614ae5565b600060405180830381600087803b158015613bec57600080fd5b505af1158015613c00573d6000803e3d6000fd5b505050505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613c7196959493929190614831565b6060604051808303818588803b158015613c8a57600080fd5b505af1158015613c9e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613cc391906143e1565b5050505050565b602260019054906101000a900460ff1615613d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d119061490a565b60405180910390fd5b613d248282613231565b158015613d7e5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15613e7c57600560275414613da65761138843613d9b9190614be6565b602481905550613dae565b436024819055505b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602260016101000a81548160ff021916908315150217905550426025819055506001601760156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1596001604051613e739190614892565b60405180910390a15b5050565b600080601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613ee357600b549050613f4a565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613f4357600c549050613f49565b600d5490505b5b613f548585613231565b15613f855760006023541480613f7a57506014600854613f749190614c3c565b60235414155b15613f8457600080fd5b5b60006127108285613f969190614c6d565b613fa09190614c3c565b905080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ff19190614be6565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516140559190614aca565b60405180910390a380846140699190614cc7565b925050509392505050565b60008135905061408381615258565b92915050565b60008151905061409881615258565b92915050565b6000813590506140ad8161526f565b92915050565b6000813590506140c281615286565b92915050565b6000813590506140d78161529d565b92915050565b6000815190506140ec8161529d565b92915050565b600081359050614101816152b4565b92915050565b60006020828403121561411d5761411c614f43565b5b600061412b84828501614074565b91505092915050565b60006020828403121561414a57614149614f43565b5b600061415884828501614089565b91505092915050565b6000806040838503121561417857614177614f43565b5b60006141868582860161409e565b92505060206141978582860161409e565b9150509250929050565b600080604083850312156141b8576141b7614f43565b5b60006141c685828601614074565b92505060206141d785828601614074565b9150509250929050565b6000806000606084860312156141fa576141f9614f43565b5b600061420886828701614074565b935050602061421986828701614074565b925050604061422a868287016140c8565b9150509250925092565b6000806040838503121561424b5761424a614f43565b5b600061425985828601614074565b925050602061426a858286016140b3565b9150509250929050565b6000806040838503121561428b5761428a614f43565b5b600061429985828601614074565b92505060206142aa858286016140c8565b9150509250929050565b6000602082840312156142ca576142c9614f43565b5b60006142d8848285016140b3565b91505092915050565b600080604083850312156142f8576142f7614f43565b5b6000614306858286016140b3565b9250506020614317858286016140b3565b9150509250929050565b60006020828403121561433757614336614f43565b5b6000614345848285016140c8565b91505092915050565b6000806040838503121561436557614364614f43565b5b6000614373858286016140c8565b9250506020614384858286016140c8565b9150509250929050565b6000806000606084860312156143a7576143a6614f43565b5b60006143b5868287016140c8565b93505060206143c6868287016140c8565b92505060406143d7868287016140c8565b9150509250925092565b6000806000606084860312156143fa576143f9614f43565b5b6000614408868287016140dd565b9350506020614419868287016140dd565b925050604061442a868287016140dd565b9150509250925092565b6000806000806080858703121561444e5761444d614f43565b5b600061445c878288016140c8565b945050602061446d878288016140c8565b935050604061447e878288016140c8565b925050606061448f878288016140c8565b91505092959194509250565b6000602082840312156144b1576144b0614f43565b5b60006144bf848285016140f2565b91505092915050565b60006144d483836144e0565b60208301905092915050565b6144e981614cfb565b82525050565b6144f881614cfb565b82525050565b600061450982614ba1565b6145138185614bc4565b935061451e83614b91565b8060005b8381101561454f57815161453688826144c8565b975061454183614bb7565b925050600181019050614522565b5085935050505092915050565b61456581614d1f565b82525050565b61457481614d62565b82525050565b61458381614d74565b82525050565b600061459482614bac565b61459e8185614bd5565b93506145ae818560208601614daa565b6145b781614f48565b840191505092915050565b60006145cf601183614bd5565b91506145da82614f59565b602082019050919050565b60006145f2602383614bd5565b91506145fd82614f82565b604082019050919050565b6000614615602583614bd5565b915061462082614fd1565b604082019050919050565b6000614638601783614bd5565b915061464382615020565b602082019050919050565b600061465b602383614bd5565b915061466682615049565b604082019050919050565b600061467e601483614bd5565b915061468982615098565b602082019050919050565b60006146a1601283614bd5565b91506146ac826150c1565b602082019050919050565b60006146c4600883614bd5565b91506146cf826150ea565b602082019050919050565b60006146e7601383614bd5565b91506146f282615113565b602082019050919050565b600061470a601083614bd5565b91506147158261513c565b602082019050919050565b600061472d600683614bd5565b915061473882615165565b602082019050919050565b6000614750601a83614bd5565b915061475b8261518e565b602082019050919050565b6000614773601383614bd5565b915061477e826151b7565b602082019050919050565b6000614796601883614bd5565b91506147a1826151e0565b602082019050919050565b60006147b9603d83614bd5565b91506147c482615209565b604082019050919050565b6147d881614d4b565b82525050565b6147e781614d55565b82525050565b600060208201905061480260008301846144ef565b92915050565b600060408201905061481d60008301856144ef565b61482a60208301846144ef565b9392505050565b600060c08201905061484660008301896144ef565b61485360208301886147cf565b614860604083018761457a565b61486d606083018661457a565b61487a60808301856144ef565b61488760a08301846147cf565b979650505050505050565b60006020820190506148a7600083018461455c565b92915050565b60006020820190506148c2600083018461456b565b92915050565b600060208201905081810360008301526148e28184614589565b905092915050565b60006020820190508181036000830152614903816145c2565b9050919050565b60006020820190508181036000830152614923816145e5565b9050919050565b6000602082019050818103600083015261494381614608565b9050919050565b600060208201905081810360008301526149638161462b565b9050919050565b600060208201905081810360008301526149838161464e565b9050919050565b600060208201905081810360008301526149a381614671565b9050919050565b600060208201905081810360008301526149c381614694565b9050919050565b600060208201905081810360008301526149e3816146b7565b9050919050565b60006020820190508181036000830152614a03816146da565b9050919050565b60006020820190508181036000830152614a23816146fd565b9050919050565b60006020820190508181036000830152614a4381614720565b9050919050565b60006020820190508181036000830152614a6381614743565b9050919050565b60006020820190508181036000830152614a8381614766565b9050919050565b60006020820190508181036000830152614aa381614789565b9050919050565b60006020820190508181036000830152614ac3816147ac565b9050919050565b6000602082019050614adf60008301846147cf565b92915050565b600060a082019050614afa60008301886147cf565b614b07602083018761457a565b8181036040830152614b1981866144fe565b9050614b2860608301856144ef565b614b3560808301846147cf565b9695505050505050565b6000606082019050614b5460008301866147cf565b614b6160208301856147cf565b614b6e60408301846147cf565b949350505050565b6000602082019050614b8b60008301846147de565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614bf182614d4b565b9150614bfc83614d4b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c3157614c30614e58565b5b828201905092915050565b6000614c4782614d4b565b9150614c5283614d4b565b925082614c6257614c61614e87565b5b828204905092915050565b6000614c7882614d4b565b9150614c8383614d4b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cbc57614cbb614e58565b5b828202905092915050565b6000614cd282614d4b565b9150614cdd83614d4b565b925082821015614cf057614cef614e58565b5b828203905092915050565b6000614d0682614d2b565b9050919050565b6000614d1882614d2b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614d6d82614d86565b9050919050565b6000614d7f82614d4b565b9050919050565b6000614d9182614d98565b9050919050565b6000614da382614d2b565b9050919050565b60005b83811015614dc8578082015181840152602081019050614dad565b83811115614dd7576000848401525b50505050565b60006002820490506001821680614df557607f821691505b60208210811415614e0957614e08614eb6565b5b50919050565b6000614e1a82614d4b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e4d57614e4c614e58565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000600082015250565b7f4c697175696469747920616c726561647920616464656420616e64206d61726b60008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060008201527f74696d652e000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420657863656564206d6178696d756d732e000000000000000000600082015250565b7f4d7573742062652061626f766520302e3125206f6620746f74616c207375707060008201527f6c792e0000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a205a65726f20616464726573732e000000000000000000000000600082015250565b7f4f6e65207765656b20636f6f6c646f776e2e0000000000000000000000000000600082015250565b7f4d757374203e302e000000000000000000000000000000000000000000000000600082015250565b7f45524332303a205a65726f204164647265737300000000000000000000000000600082015250565b7f536e697065722072656a65637465642e00000000000000000000000000000000600082015250565b7f4572726f722e0000000000000000000000000000000000000000000000000000600082015250565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b7f4d7573742061646420757020746f203130302500000000000000000000000000600082015250565b7f4578636565647320746865206d61785478416d6f756e742e0000000000000000600082015250565b7f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660008201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000602082015250565b61526181614cfb565b811461526c57600080fd5b50565b61527881614d0d565b811461528357600080fd5b50565b61528f81614d1f565b811461529a57600080fd5b50565b6152a681614d4b565b81146152b157600080fd5b50565b6152bd81614d55565b81146152c857600080fd5b5056fea2646970667358221220d14f77c4a9de5cd4df98349942c7749fb9f825efc5e8d007d89fda1bac7e6a0a64736f6c63430008070033

Deployed Bytecode Sourcemap

5781:21345:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7325:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18643:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14816:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7150:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15429:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14551:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16043:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19769:325;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6569:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14640:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6724:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16357:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6526:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19441:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6453:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18470:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7192:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7635:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6765:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13234:761;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17740:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8364:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15915:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6489:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17873:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7846:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19201:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15129:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14003:195;;;;;;;;;;;;;:::i;:::-;;17322:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18155:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14902:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18015:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13147:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14726:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16580:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6806:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15254:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6668:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6618:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20610:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20399:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14988:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8615:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18820:373;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16813:501;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18321:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8107:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20102:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7325:73;7356:42;7325:73;:::o;18643:169::-;9319:12;:10;:12::i;:::-;9309:22;;:6;;;;;;;;;;:22;;;9301:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;18757:9:::1;18738:16;;:28;;;;;;;;;;;;;;;;;;18795:9;18777:15;;:27;;;;;;;;;;;;;;;;;;18643:169:::0;;:::o;14816:80::-;14864:13;14888:5;14881:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14816:80;:::o;7150:35::-;;;;;;;;;;;;;:::o;15429:161::-;15504:4;15521:39;15530:12;:10;:12::i;:::-;15544:7;15553:6;15521:8;:39::i;:::-;15578:4;15571:11;;15429:161;;;;:::o;14551:83::-;14606:7;14624;;14617:14;;14551:83;:::o;16043:306::-;16143:4;16199:17;16164:11;:19;16176:6;16164:19;;;;;;;;;;;;;;;:31;16184:10;16164:31;;;;;;;;;;;;;;;;:52;16160:126;;16268:6;16233:11;:19;16245:6;16233:19;;;;;;;;;;;;;;;:31;16253:10;16233:31;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;16160:126;16305:36;16315:6;16323:9;16334:6;16305:9;:36::i;:::-;16298:43;;16043:306;;;;;:::o;19769:325::-;9319:12;:10;:12::i;:::-;9309:22;;:6;;;;;;;;;;:22;;;9301:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;19859:13:::1;19897:7;19886;19876;;:17;;;;:::i;:::-;19875:29;;;;:::i;:::-;19859:45;;19943:4;19933:7;;:14;;;;:::i;:::-;19923:5;:25;;19915:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20016:5;19999:14;:22;;;;20079:7;20068;20051:14;;:24;;;;:::i;:::-;20050:36;;;;:::i;:::-;20032:15;:54;;;;19848:246;19769:325:::0;;:::o;6569:42::-;6607:4;6569:42;:::o;14640:80::-;14692:5;6985:1;14701:16;;14640:80;:::o;6724:34::-;;;;:::o;16357:215::-;16445:4;16462:80;16471:12;:10;:12::i;:::-;16485:7;16531:10;16494:11;:25;16506:12;:10;:12::i;:::-;16494:25;;;;;;;;;;;;;;;:34;16520:7;16494:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;16462:8;:80::i;:::-;16560:4;16553:11;;16357:215;;;;:::o;6526:34::-;;;;:::o;19441:320::-;9319:12;:10;:12::i;:::-;9309:22;;:6;;;;;;;;;;:22;;;9301:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;19530:13:::1;19568:7;19557;19547;;:17;;;;:::i;:::-;19546:29;;;;:::i;:::-;19530:45;;19614:4;19604:7;;:14;;;;:::i;:::-;19594:5;:25;;19586:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19685:5;19670:12;:20;;;;19746:7;19735;19718:14;;:24;;;;:::i;:::-;19717:36;;;;:::i;:::-;19701:13;:52;;;;19519:242;19441:320:::0;;:::o;6453:29::-;;;;:::o;18470:165::-;9319:12;:10;:12::i;:::-;9309:22;;:6;;;;;;;;;;:22;;;9301:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;18571:1:::1;18554:13;;:18;:39;;;;;18577:16;;;;;;;;;;;18576:17;18554:39;18545:49;;;::::0;::::1;;18621:6;18605:22;;:13;:22;;;;18470:165:::0;:::o;7192:21::-;;;;;;;;;;;;;:::o;7635:41::-;;;;;;;;;;;;;:::o;6765:34::-;;;;:::o;13234:761::-;9319:12;:10;:12::i;:::-;9309:22;;:6;;;;;;;;;;:22;;;9301:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;13335:1:::1;13315:22;;:8;:22;;;;13307:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;7356:42;13422:16;;:8;:16;;;;13414:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;13515:34;13535:6;::::0;::::1;;;;;;;;13543:5;13515:19;:34::i;:::-;13560:35;13580:8;13590:4;13560:19;:35::i;:::-;13648:6;::::0;::::1;;;;;;;;13620:35;;:16;;;;;;;;;;;:35;;;13616:90;;;13697:8;13670:16;;:36;;;;;;;;;;;;;;;;;;13616:90;13759:17;13769:6;::::0;::::1;;;;;;;;13759:9;:17::i;:::-;13727:11;:19;13739:6:::0;::::1;;;;;;;;;;13727:19;;;;;;;;;;;;;;;:29;13747:8;13727:29;;;;;;;;;;;;;;;:49;;;;13810:1;13790:17;13800:6;::::0;::::1;;;;;;;;13790:9;:17::i;:::-;:21;13787:99;;;13828:46;13838:6;::::0;::::1;;;;;;;;13846:8;13856:17;13866:6;::::0;::::1;;;;;;;;13856:9;:17::i;:::-;13828:9;:46::i;:::-;;13787:99;13915:8;13906:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;13968:8;13939:38;;13960:6;::::0;::::1;;;;;;;;13939:38;;;;;;;;;;;;13234:761:::0;:::o;17740:125::-;17805:4;17829:19;:28;17849:7;17829:28;;;;;;;;;;;;;;;;;;;;;;;;;17822:35;;17740:125;;;:::o;8364:36::-;;;;;;;;;;;;;:::o;15915:120::-;15968:4;15992:35;16000:7;16009:17;15992:7;:35::i;:::-;15985:42;;15915:120;;;:::o;6489:30::-;;;;:::o;17873:134::-;9319:12;:10;:12::i;:::-;9309:22;;:6;;;;;;;;;;:22;;;9301:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;17992:7:::1;17961:19;:28;17981:7;17961:28;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;17873:134:::0;;:::o;7846:77::-;;;;:::o;19201:232::-;9319:12;:10;:12::i;:::-;9309:22;;:6;;;;;;;;;;:22;;;9301:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;19322:3:::1;19309:9;19297;:21;;;;:::i;:::-;:28;19288:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;19378:9;19360:15;:27;;;;19416:9;19398:15;:27;;;;19201:232:::0;;:::o;15129:117::-;15195:7;15222;:16;15230:7;15222:16;;;;;;;;;;;;;;;;15215:23;;15129:117;;;:::o;14003:195::-;9319:12;:10;:12::i;:::-;9309:22;;:6;;;;;;;;;;:22;;;9301:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;14070:34:::1;14090:6;::::0;::::1;;;;;;;;14098:5;14070:19;:34::i;:::-;14132:1;14115:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;14187:1;14150:40;;14171:6;::::0;::::1;;;;;;;;14150:40;;;;;;;;;;;;14003:195::o:0;17322:410::-;9319:12;:10;:12::i;:::-;9309:22;;:6;;;;;;;;;;:22;;;9301:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;17414:5:::1;17403:16;;:7;:16;;;17399:326;;;17452:5;17436:7;:13;17444:4;17436:13;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;17399:326;;;17515:1;17494:17;;:22;17490:139;;17583:7;17563:17;;17545:15;:35;;;;:::i;:::-;:45;17537:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;17490:139;17659:4;17643:7;:13;17651:4;17643:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;17698:15;17678:17;:35;;;;17399:326;17322:410:::0;;:::o;18155:158::-;9319:12;:10;:12::i;:::-;9309:22;;:6;;;;;;;;;;:22;;;9301:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;18254:1:::1;18237:13;;:18;18228:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;18293:12;18277:13;:28;;;;18155:158:::0;:::o;14902:80::-;14954:7;14972;:5;:7::i;:::-;14965:14;;14902:80;:::o;18015:132::-;18084:4;18108:22;:31;18131:7;18108:31;;;;;;;;;;;;;;;;;;;;;;;;;18101:38;;18015:132;;;:::o;13147:79::-;13185:7;13212:6;;;;;;;;;;;13205:13;;13147:79;:::o;14726:84::-;14776:13;14800:7;14793:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14726:84;:::o;16580:225::-;16673:4;16690:85;16699:12;:10;:12::i;:::-;16713:7;16759:15;16722:11;:25;16734:12;:10;:12::i;:::-;16722:25;;;;;;;;;;;;;;;:34;16748:7;16722:34;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;16690:8;:85::i;:::-;16793:4;16786:11;;16580:225;;;;:::o;6806:28::-;;;;:::o;15254:167::-;15332:4;15349:42;15359:12;:10;:12::i;:::-;15373:9;15384:6;15349:9;:42::i;:::-;;15409:4;15402:11;;15254:167;;;;:::o;6668:47::-;6711:4;6668:47;:::o;6618:43::-;6657:4;6618:43;:::o;20610:171::-;9319:12;:10;:12::i;:::-;9309:22;;:6;;;;;;;;;;:22;;;9301:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;20711:8:::1;20687:21;;:32;;;;;;;;;;;;;;;;;;20735:38;20764:8;20735:38;;;;;;:::i;:::-;;;;;;;;20610:171:::0;:::o;20399:203::-;9319:12;:10;:12::i;:::-;9309:22;;:6;;;;;;;;;;:22;;;9301:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;20536:15:::1;20509:16;;:43;;;;;;;;;;;;;;;;;;20584:9;20563:10;;:31;;;;;;;;;;;;;;;;;;20399:203:::0;;:::o;14988:133::-;15072:7;15090:11;:19;15102:6;15090:19;;;;;;;;;;;;;;;:28;15110:7;15090:28;;;;;;;;;;;;;;;;15083:35;;14988:133;;;;:::o;8615:32::-;;;;:::o;18820:373::-;9319:12;:10;:12::i;:::-;9309:22;;:6;;;;;;;;;;:22;;;9301:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;6607:4:::1;18930:6;:21;;:65;;;;;6657:4;18972:7;:23;;18930:65;:117;;;;;6711:4;19016:11;:31;;18930:117;18922:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;19113:6;19103:7;:16;;;;19141:7;19130:8;:18;;;;19174:11;19159:12;:26;;;;18820:373:::0;;;:::o;16813:501::-;9319:12;:10;:12::i;:::-;9309:22;;:6;;;;;;;;;;:22;;;9301:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;16884:29:::1;16935:9;16884:61;;16956:16;16993:10;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16975:47;;;17031:4;17038:10;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16975:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16956:100;;17091:1;17071:22;;:8;:22;;;17067:207;;;17137:10;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17119:50;;;17178:4;17185:10;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17119:84;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17110:6;;:93;;;;;;;;;;;;;;;;;;17067:207;;;17254:8;17245:6;;:17;;;;;;;;;;;;;;;;;;17067:207;17296:10;17284:9;;:22;;;;;;;;;;;;;;;;;;16873:441;;16813:501:::0;:::o;18321:141::-;9319:12;:10;:12::i;:::-;9309:22;;:6;;;;;;;;;;:22;;;9301:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;18447:7:::1;18413:22;:31;18436:7;18413:31;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;18321:141:::0;;:::o;8107:87::-;;;;:::o;20102:289::-;9319:12;:10;:12::i;:::-;9309:22;;:6;;;;;;;;;;:22;;;9301:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;20302:16:::1;20282;20272:7;;:26;;;;:::i;:::-;20271:47;;;;:::i;:::-;20255:13;:63;;;;20370:13;20353;20343:7;;:23;;;;:::i;:::-;20342:41;;;;:::i;:::-;20329:10;:54;;;;20102:289:::0;;;;:::o;174:107::-;219:15;262:10;247:26;;174:107;:::o;15598:309::-;15710:1;15692:20;;:6;:20;;;;15684:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;15774:1;15755:21;;:7;:21;;;;15747:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;15844:6;15813:11;:19;15825:6;15813:19;;;;;;;;;;;;;;;:28;15833:7;15813:28;;;;;;;;;;;;;;;:37;;;;15883:7;15866:33;;15875:6;15866:33;;;15892:6;15866:33;;;;;;:::i;:::-;;;;;;;;15598:309;;;:::o;21120:1646::-;21199:4;21240:1;21224:18;;:4;:18;;;;21216:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;21300:1;21286:16;;:2;:16;;;;21278:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;21355:1;21346:6;:10;21338:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;21383:20;21394:4;21400:2;21383:10;:20::i;:::-;21380:707;;;21424:15;;;;;;;;;;;21420:347;;;21464:7;:13;21472:4;21464:13;;;;;;;;;;;;;;;;;;;;;;;;;21460:292;;;21526:12;21509:9;:13;21519:2;21509:13;;;;;;;;;;;;;;;;:29;;21501:38;;;;;;21578:12;21562:9;:13;21572:2;21562:13;;;;;;;;;;;;;;;:28;;;;21460:292;;;21666:12;21647:9;:15;21657:4;21647:15;;;;;;;;;;;;;;;;:31;;21639:40;;;;;;21720:12;21702:9;:15;21712:4;21702:15;;;;;;;;;;;;;;;:30;;;;21460:292;21420:347;21784:7;:13;21792:4;21784:13;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;;21801:7;:11;21809:2;21801:11;;;;;;;;;;;;;;;;;;;;;;;;;21784:28;21781:126;;;21850:12;;21840:6;:22;;21832:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;21781:126;21930:14;;;;;;;;;;;21924:20;;:2;:20;;;;:36;;;;;21949:7;:11;21957:2;21949:11;;;;;;;;;;;;;;;;;;;;;;;;;21948:12;21924:36;21921:155;;;22015:14;;22005:6;21989:13;21999:2;21989:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;21981:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;21921:155;21380:707;22099:12;22114:4;22099:19;;22132;:25;22152:4;22132:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;22161:19;:23;22181:2;22161:23;;;;;;;;;;;;;;;;;;;;;;;;;22132:52;22129:98;;;22210:5;22200:15;;22129:98;22243:7;:11;22251:2;22243:11;;;;;;;;;;;;;;;;;;;;;;;;;22239:457;;;22276:16;;;;;;;;;;;22275:17;:59;;;;;22313:21;;;;;;;;;;;22275:59;22271:408;;;22369:28;22400:24;22418:4;22400:9;:24::i;:::-;22369:55;;22471:13;;22447:20;:37;22443:221;;22536:10;;22512:20;:34;22509:77;;22573:10;;22550:33;;22509:77;22608:36;22623:20;22608:14;:36::i;:::-;22443:221;22350:329;22271:408;22239:457;22714:44;22732:4;22738:2;22742:6;22750:7;22714:17;:44::i;:::-;22707:51;;;21120:1646;;;;;:::o;20789:323::-;20857:4;20889:7;:5;:7::i;:::-;20881:15;;:4;:15;;;;:45;;;;;20919:7;:5;:7::i;:::-;20913:13;;:2;:13;;;;20881:45;:84;;;;;20944:17;:21;20962:2;20944:21;;;;;;;;;;;;;;;;;;;;;;;;;20943:22;20881:84;:125;;;;;20983:17;:23;21001:4;20983:23;;;;;;;;;;;;;;;;;;;;;;;;;20982:24;20881:125;:152;;;;;7356:42;21023:10;;:2;:10;;;;20881:152;:185;;;;;21064:1;21050:16;;:2;:16;;;;20881:185;:223;;;;;21099:4;21083:21;;:4;:21;;;;20881:223;20874:230;;20789:323;;;;:::o;22774:1014::-;9202:4;9183:16;;:23;;;;;;;;;;;;;;;;;;22912:1:::1;22899:9;;22881:15;;22863;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;:50;22859:76;;;22928:7;;22859:76;22945:17;23060:1;23046:9;;23028:15;;23010;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;22990:15;;22967:20;:38;;;;:::i;:::-;22966:90;;;;:::i;:::-;22965:96;;;;:::i;:::-;22945:116;;23074:20;23120:9;23097:20;:32;;;;:::i;:::-;23074:55;;23140:30;23157:12;23140:16;:30::i;:::-;23183:22;23208:21;23183:46;;23240:24;23356:1;23342:9;;23324:15;;23306;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;23286:15;;23269:14;:32;;;;:::i;:::-;23268:84;;;;:::i;:::-;23267:90;;;;:::i;:::-;23240:117;;23386:1;23374:9;:13;23370:161;;;23404:41;23417:9;23428:16;23404:12;:41::i;:::-;23465:54;23480:9;23491:16;23509:9;23465:54;;;;;;;;:::i;:::-;;;;;;;;23370:161;23580:1;23568:9;23545:20;:32;;;;:::i;:::-;:36;23541:240;;;23598:16;;;;;;;;;;;:25;;:114;23701:9;;23683:15;;:27;;;;:::i;:::-;23663:15;;23643:16;23626:14;:33;;;;:::i;:::-;23625:53;;;;:::i;:::-;23624:87;;;;:::i;:::-;23598:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;23727:10;;;;;;;;;;;:19;;:42;23747:21;23727:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;23541:240;22848:940;;;;9217:1;9248:5:::0;9229:16;;:24;;;;;;;;;;;;;;;;;;22774:1014;:::o;25184:1216::-;25284:4;25305:16;;;;;;;;;;;25301:858;;;25341:27;25363:4;25341:21;:27::i;:::-;:56;;;;25372:25;25394:2;25372:21;:25::i;:::-;25341:56;25337:123;;;25418:26;;;;;;;;;;:::i;:::-;;;;;;;;25337:123;25481:16;;;;;;;;;;;25476:672;;25518:28;25537:4;25543:2;25518:18;:28::i;:::-;25570:16;;;;;;;;;;;25569:17;:41;;;;;25590:20;25601:4;25607:2;25590:10;:20::i;:::-;25569:41;25565:137;;;25635:47;;;;;;;;;;:::i;:::-;;;;;;;;25565:137;25476:672;;;25761:1;25746:12;;:16;:55;;;;;25788:7;:13;25796:4;25788:13;;;;;;;;;;;;;;;;;;;;;;;;;25746:55;:101;;;;;25827:20;25838:4;25844:2;25827:10;:20::i;:::-;25746:101;25742:391;;;25924:13;;25909:12;;25894;:27;;;;:::i;:::-;:43;25890:224;;;25995:4;25966:22;:26;25989:2;25966:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;26026:13;;:16;;;;;;;;;:::i;:::-;;;;;;26074;26087:2;26074:16;;;;;;:::i;:::-;;;;;;;;25890:224;25742:391;25476:672;25301:858;26188:6;26171:7;:13;26179:4;26171:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;26205:22;26231:7;26230:48;;26272:6;26230:48;;;26242:27;26252:4;26258:2;26262:6;26242:9;:27::i;:::-;26230:48;26205:73;;26304:14;26289:7;:11;26297:2;26289:11;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;26351:2;26336:34;;26345:4;26336:34;;;26355:14;26336:34;;;;;;:::i;:::-;;;;;;;;26388:4;26381:11;;;25184:1216;;;;;;:::o;23796:417::-;23863:21;23901:1;23887:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23863:40;;23932:4;23914;23919:1;23914:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;23958:9;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23948:4;23953:1;23948:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;23987:9;;;;;;;;;;;:60;;;24062:11;24088:1;24132:4;24159;24179:15;23987:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23852:361;23796:417;:::o;24221:332::-;24302:9;;;;;;;;;;;:25;;;24335:9;24368:4;24388:11;24414:1;24457;7356:42;24519:15;24302:243;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24221:332;;:::o;24561:615::-;24643:16;;;;;;;;;;;24642:17;24634:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;24715:20;24726:4;24732:2;24715:10;:20::i;:::-;24714:21;:37;;;;;24745:6;;;;;;;;;;;24739:12;;:2;:12;;;24714:37;24710:459;;;24789:1;24772:13;;:18;24768:161;;24841:4;24826:12;:19;;;;:::i;:::-;24811:12;:34;;;;24768:161;;;24901:12;24886;:27;;;;24768:161;24971:4;24945:17;:23;24963:4;24945:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;25009:4;24990:16;;:23;;;;;;;;;;;;;;;;;;25043:15;25028:12;:30;;;;25099:4;25075:21;;:28;;;;;;;;;;;;;;;;;;25123:34;25152:4;25123:34;;;;;;:::i;:::-;;;;;;;;24710:459;24561:615;;:::o;26408:715::-;26487:7;26507:18;26548:6;;;;;;;;;;;26540:14;;:4;:14;;;26536:197;;;26584:7;;26571:20;;26536:197;;;26619:6;;;;;;;;;;;26613:12;;:2;:12;;;26609:124;;;26655:8;;26642:21;;26609:124;;;26709:12;;26696:25;;26609:124;26536:197;26749:20;26760:4;26766:2;26749:10;:20::i;:::-;26745:158;;;26806:1;26789:13;;:18;:58;;;;26845:2;26828:14;;:19;;;;:::i;:::-;26811:13;;:36;;26789:58;26785:107;;;26868:8;;;26785:107;26745:158;26915:17;6887:5;26944:10;26935:6;:19;;;;:::i;:::-;:38;;;;:::i;:::-;26915:58;;27012:9;26986:7;:22;27002:4;26986:22;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;27060:4;27037:40;;27046:4;27037:40;;;27067:9;27037:40;;;;;;:::i;:::-;;;;;;;;27106:9;27097:6;:18;;;;:::i;:::-;27090:25;;;;26408:715;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:155::-;355:5;393:6;380:20;371:29;;409:41;444:5;409:41;:::i;:::-;301:155;;;;:::o;462:133::-;505:5;543:6;530:20;521:29;;559:30;583:5;559:30;:::i;:::-;462:133;;;;:::o;601:139::-;647:5;685:6;672:20;663:29;;701:33;728:5;701:33;:::i;:::-;601:139;;;;:::o;746:143::-;803:5;834:6;828:13;819:22;;850:33;877:5;850:33;:::i;:::-;746:143;;;;:::o;895:135::-;939:5;977:6;964:20;955:29;;993:31;1018:5;993:31;:::i;:::-;895:135;;;;:::o;1036:329::-;1095:6;1144:2;1132:9;1123:7;1119:23;1115:32;1112:119;;;1150:79;;:::i;:::-;1112:119;1270:1;1295:53;1340:7;1331:6;1320:9;1316:22;1295:53;:::i;:::-;1285:63;;1241:117;1036:329;;;;:::o;1371:351::-;1441:6;1490:2;1478:9;1469:7;1465:23;1461:32;1458:119;;;1496:79;;:::i;:::-;1458:119;1616:1;1641:64;1697:7;1688:6;1677:9;1673:22;1641:64;:::i;:::-;1631:74;;1587:128;1371:351;;;;:::o;1728:506::-;1812:6;1820;1869:2;1857:9;1848:7;1844:23;1840:32;1837:119;;;1875:79;;:::i;:::-;1837:119;1995:1;2020:61;2073:7;2064:6;2053:9;2049:22;2020:61;:::i;:::-;2010:71;;1966:125;2130:2;2156:61;2209:7;2200:6;2189:9;2185:22;2156:61;:::i;:::-;2146:71;;2101:126;1728:506;;;;;:::o;2240:474::-;2308:6;2316;2365:2;2353:9;2344:7;2340:23;2336:32;2333:119;;;2371:79;;:::i;:::-;2333:119;2491:1;2516:53;2561:7;2552:6;2541:9;2537:22;2516:53;:::i;:::-;2506:63;;2462:117;2618:2;2644:53;2689:7;2680:6;2669:9;2665:22;2644:53;:::i;:::-;2634:63;;2589:118;2240:474;;;;;:::o;2720:619::-;2797:6;2805;2813;2862:2;2850:9;2841:7;2837:23;2833:32;2830:119;;;2868:79;;:::i;:::-;2830:119;2988:1;3013:53;3058:7;3049:6;3038:9;3034:22;3013:53;:::i;:::-;3003:63;;2959:117;3115:2;3141:53;3186:7;3177:6;3166:9;3162:22;3141:53;:::i;:::-;3131:63;;3086:118;3243:2;3269:53;3314:7;3305:6;3294:9;3290:22;3269:53;:::i;:::-;3259:63;;3214:118;2720:619;;;;;:::o;3345:468::-;3410:6;3418;3467:2;3455:9;3446:7;3442:23;3438:32;3435:119;;;3473:79;;:::i;:::-;3435:119;3593:1;3618:53;3663:7;3654:6;3643:9;3639:22;3618:53;:::i;:::-;3608:63;;3564:117;3720:2;3746:50;3788:7;3779:6;3768:9;3764:22;3746:50;:::i;:::-;3736:60;;3691:115;3345:468;;;;;:::o;3819:474::-;3887:6;3895;3944:2;3932:9;3923:7;3919:23;3915:32;3912:119;;;3950:79;;:::i;:::-;3912:119;4070:1;4095:53;4140:7;4131:6;4120:9;4116:22;4095:53;:::i;:::-;4085:63;;4041:117;4197:2;4223:53;4268:7;4259:6;4248:9;4244:22;4223:53;:::i;:::-;4213:63;;4168:118;3819:474;;;;;:::o;4299:323::-;4355:6;4404:2;4392:9;4383:7;4379:23;4375:32;4372:119;;;4410:79;;:::i;:::-;4372:119;4530:1;4555:50;4597:7;4588:6;4577:9;4573:22;4555:50;:::i;:::-;4545:60;;4501:114;4299:323;;;;:::o;4628:462::-;4690:6;4698;4747:2;4735:9;4726:7;4722:23;4718:32;4715:119;;;4753:79;;:::i;:::-;4715:119;4873:1;4898:50;4940:7;4931:6;4920:9;4916:22;4898:50;:::i;:::-;4888:60;;4844:114;4997:2;5023:50;5065:7;5056:6;5045:9;5041:22;5023:50;:::i;:::-;5013:60;;4968:115;4628:462;;;;;:::o;5096:329::-;5155:6;5204:2;5192:9;5183:7;5179:23;5175:32;5172:119;;;5210:79;;:::i;:::-;5172:119;5330:1;5355:53;5400:7;5391:6;5380:9;5376:22;5355:53;:::i;:::-;5345:63;;5301:117;5096:329;;;;:::o;5431:474::-;5499:6;5507;5556:2;5544:9;5535:7;5531:23;5527:32;5524:119;;;5562:79;;:::i;:::-;5524:119;5682:1;5707:53;5752:7;5743:6;5732:9;5728:22;5707:53;:::i;:::-;5697:63;;5653:117;5809:2;5835:53;5880:7;5871:6;5860:9;5856:22;5835:53;:::i;:::-;5825:63;;5780:118;5431:474;;;;;:::o;5911:619::-;5988:6;5996;6004;6053:2;6041:9;6032:7;6028:23;6024:32;6021:119;;;6059:79;;:::i;:::-;6021:119;6179:1;6204:53;6249:7;6240:6;6229:9;6225:22;6204:53;:::i;:::-;6194:63;;6150:117;6306:2;6332:53;6377:7;6368:6;6357:9;6353:22;6332:53;:::i;:::-;6322:63;;6277:118;6434:2;6460:53;6505:7;6496:6;6485:9;6481:22;6460:53;:::i;:::-;6450:63;;6405:118;5911:619;;;;;:::o;6536:663::-;6624:6;6632;6640;6689:2;6677:9;6668:7;6664:23;6660:32;6657:119;;;6695:79;;:::i;:::-;6657:119;6815:1;6840:64;6896:7;6887:6;6876:9;6872:22;6840:64;:::i;:::-;6830:74;;6786:128;6953:2;6979:64;7035:7;7026:6;7015:9;7011:22;6979:64;:::i;:::-;6969:74;;6924:129;7092:2;7118:64;7174:7;7165:6;7154:9;7150:22;7118:64;:::i;:::-;7108:74;;7063:129;6536:663;;;;;:::o;7205:765::-;7291:6;7299;7307;7315;7364:3;7352:9;7343:7;7339:23;7335:33;7332:120;;;7371:79;;:::i;:::-;7332:120;7491:1;7516:53;7561:7;7552:6;7541:9;7537:22;7516:53;:::i;:::-;7506:63;;7462:117;7618:2;7644:53;7689:7;7680:6;7669:9;7665:22;7644:53;:::i;:::-;7634:63;;7589:118;7746:2;7772:53;7817:7;7808:6;7797:9;7793:22;7772:53;:::i;:::-;7762:63;;7717:118;7874:2;7900:53;7945:7;7936:6;7925:9;7921:22;7900:53;:::i;:::-;7890:63;;7845:118;7205:765;;;;;;;:::o;7976:325::-;8033:6;8082:2;8070:9;8061:7;8057:23;8053:32;8050:119;;;8088:79;;:::i;:::-;8050:119;8208:1;8233:51;8276:7;8267:6;8256:9;8252:22;8233:51;:::i;:::-;8223:61;;8179:115;7976:325;;;;:::o;8307:179::-;8376:10;8397:46;8439:3;8431:6;8397:46;:::i;:::-;8475:4;8470:3;8466:14;8452:28;;8307:179;;;;:::o;8492:108::-;8569:24;8587:5;8569:24;:::i;:::-;8564:3;8557:37;8492:108;;:::o;8606:118::-;8693:24;8711:5;8693:24;:::i;:::-;8688:3;8681:37;8606:118;;:::o;8760:732::-;8879:3;8908:54;8956:5;8908:54;:::i;:::-;8978:86;9057:6;9052:3;8978:86;:::i;:::-;8971:93;;9088:56;9138:5;9088:56;:::i;:::-;9167:7;9198:1;9183:284;9208:6;9205:1;9202:13;9183:284;;;9284:6;9278:13;9311:63;9370:3;9355:13;9311:63;:::i;:::-;9304:70;;9397:60;9450:6;9397:60;:::i;:::-;9387:70;;9243:224;9230:1;9227;9223:9;9218:14;;9183:284;;;9187:14;9483:3;9476:10;;8884:608;;;8760:732;;;;:::o;9498:109::-;9579:21;9594:5;9579:21;:::i;:::-;9574:3;9567:34;9498:109;;:::o;9613:183::-;9726:63;9783:5;9726:63;:::i;:::-;9721:3;9714:76;9613:183;;:::o;9802:147::-;9897:45;9936:5;9897:45;:::i;:::-;9892:3;9885:58;9802:147;;:::o;9955:364::-;10043:3;10071:39;10104:5;10071:39;:::i;:::-;10126:71;10190:6;10185:3;10126:71;:::i;:::-;10119:78;;10206:52;10251:6;10246:3;10239:4;10232:5;10228:16;10206:52;:::i;:::-;10283:29;10305:6;10283:29;:::i;:::-;10278:3;10274:39;10267:46;;10047:272;9955:364;;;;:::o;10325:366::-;10467:3;10488:67;10552:2;10547:3;10488:67;:::i;:::-;10481:74;;10564:93;10653:3;10564:93;:::i;:::-;10682:2;10677:3;10673:12;10666:19;;10325:366;;;:::o;10697:::-;10839:3;10860:67;10924:2;10919:3;10860:67;:::i;:::-;10853:74;;10936:93;11025:3;10936:93;:::i;:::-;11054:2;11049:3;11045:12;11038:19;;10697:366;;;:::o;11069:::-;11211:3;11232:67;11296:2;11291:3;11232:67;:::i;:::-;11225:74;;11308:93;11397:3;11308:93;:::i;:::-;11426:2;11421:3;11417:12;11410:19;;11069:366;;;:::o;11441:::-;11583:3;11604:67;11668:2;11663:3;11604:67;:::i;:::-;11597:74;;11680:93;11769:3;11680:93;:::i;:::-;11798:2;11793:3;11789:12;11782:19;;11441:366;;;:::o;11813:::-;11955:3;11976:67;12040:2;12035:3;11976:67;:::i;:::-;11969:74;;12052:93;12141:3;12052:93;:::i;:::-;12170:2;12165:3;12161:12;12154:19;;11813:366;;;:::o;12185:::-;12327:3;12348:67;12412:2;12407:3;12348:67;:::i;:::-;12341:74;;12424:93;12513:3;12424:93;:::i;:::-;12542:2;12537:3;12533:12;12526:19;;12185:366;;;:::o;12557:::-;12699:3;12720:67;12784:2;12779:3;12720:67;:::i;:::-;12713:74;;12796:93;12885:3;12796:93;:::i;:::-;12914:2;12909:3;12905:12;12898:19;;12557:366;;;:::o;12929:365::-;13071:3;13092:66;13156:1;13151:3;13092:66;:::i;:::-;13085:73;;13167:93;13256:3;13167:93;:::i;:::-;13285:2;13280:3;13276:12;13269:19;;12929:365;;;:::o;13300:366::-;13442:3;13463:67;13527:2;13522:3;13463:67;:::i;:::-;13456:74;;13539:93;13628:3;13539:93;:::i;:::-;13657:2;13652:3;13648:12;13641:19;;13300:366;;;:::o;13672:::-;13814:3;13835:67;13899:2;13894:3;13835:67;:::i;:::-;13828:74;;13911:93;14000:3;13911:93;:::i;:::-;14029:2;14024:3;14020:12;14013:19;;13672:366;;;:::o;14044:365::-;14186:3;14207:66;14271:1;14266:3;14207:66;:::i;:::-;14200:73;;14282:93;14371:3;14282:93;:::i;:::-;14400:2;14395:3;14391:12;14384:19;;14044:365;;;:::o;14415:366::-;14557:3;14578:67;14642:2;14637:3;14578:67;:::i;:::-;14571:74;;14654:93;14743:3;14654:93;:::i;:::-;14772:2;14767:3;14763:12;14756:19;;14415:366;;;:::o;14787:::-;14929:3;14950:67;15014:2;15009:3;14950:67;:::i;:::-;14943:74;;15026:93;15115:3;15026:93;:::i;:::-;15144:2;15139:3;15135:12;15128:19;;14787:366;;;:::o;15159:::-;15301:3;15322:67;15386:2;15381:3;15322:67;:::i;:::-;15315:74;;15398:93;15487:3;15398:93;:::i;:::-;15516:2;15511:3;15507:12;15500:19;;15159:366;;;:::o;15531:::-;15673:3;15694:67;15758:2;15753:3;15694:67;:::i;:::-;15687:74;;15770:93;15859:3;15770:93;:::i;:::-;15888:2;15883:3;15879:12;15872:19;;15531:366;;;:::o;15903:118::-;15990:24;16008:5;15990:24;:::i;:::-;15985:3;15978:37;15903:118;;:::o;16027:112::-;16110:22;16126:5;16110:22;:::i;:::-;16105:3;16098:35;16027:112;;:::o;16145:222::-;16238:4;16276:2;16265:9;16261:18;16253:26;;16289:71;16357:1;16346:9;16342:17;16333:6;16289:71;:::i;:::-;16145:222;;;;:::o;16373:332::-;16494:4;16532:2;16521:9;16517:18;16509:26;;16545:71;16613:1;16602:9;16598:17;16589:6;16545:71;:::i;:::-;16626:72;16694:2;16683:9;16679:18;16670:6;16626:72;:::i;:::-;16373:332;;;;;:::o;16711:807::-;16960:4;16998:3;16987:9;16983:19;16975:27;;17012:71;17080:1;17069:9;17065:17;17056:6;17012:71;:::i;:::-;17093:72;17161:2;17150:9;17146:18;17137:6;17093:72;:::i;:::-;17175:80;17251:2;17240:9;17236:18;17227:6;17175:80;:::i;:::-;17265;17341:2;17330:9;17326:18;17317:6;17265:80;:::i;:::-;17355:73;17423:3;17412:9;17408:19;17399:6;17355:73;:::i;:::-;17438;17506:3;17495:9;17491:19;17482:6;17438:73;:::i;:::-;16711:807;;;;;;;;;:::o;17524:210::-;17611:4;17649:2;17638:9;17634:18;17626:26;;17662:65;17724:1;17713:9;17709:17;17700:6;17662:65;:::i;:::-;17524:210;;;;:::o;17740:274::-;17859:4;17897:2;17886:9;17882:18;17874:26;;17910:97;18004:1;17993:9;17989:17;17980:6;17910:97;:::i;:::-;17740:274;;;;:::o;18020:313::-;18133:4;18171:2;18160:9;18156:18;18148:26;;18220:9;18214:4;18210:20;18206:1;18195:9;18191:17;18184:47;18248:78;18321:4;18312:6;18248:78;:::i;:::-;18240:86;;18020:313;;;;:::o;18339:419::-;18505:4;18543:2;18532:9;18528:18;18520:26;;18592:9;18586:4;18582:20;18578:1;18567:9;18563:17;18556:47;18620:131;18746:4;18620:131;:::i;:::-;18612:139;;18339:419;;;:::o;18764:::-;18930:4;18968:2;18957:9;18953:18;18945:26;;19017:9;19011:4;19007:20;19003:1;18992:9;18988:17;18981:47;19045:131;19171:4;19045:131;:::i;:::-;19037:139;;18764:419;;;:::o;19189:::-;19355:4;19393:2;19382:9;19378:18;19370:26;;19442:9;19436:4;19432:20;19428:1;19417:9;19413:17;19406:47;19470:131;19596:4;19470:131;:::i;:::-;19462:139;;19189:419;;;:::o;19614:::-;19780:4;19818:2;19807:9;19803:18;19795:26;;19867:9;19861:4;19857:20;19853:1;19842:9;19838:17;19831:47;19895:131;20021:4;19895:131;:::i;:::-;19887:139;;19614:419;;;:::o;20039:::-;20205:4;20243:2;20232:9;20228:18;20220:26;;20292:9;20286:4;20282:20;20278:1;20267:9;20263:17;20256:47;20320:131;20446:4;20320:131;:::i;:::-;20312:139;;20039:419;;;:::o;20464:::-;20630:4;20668:2;20657:9;20653:18;20645:26;;20717:9;20711:4;20707:20;20703:1;20692:9;20688:17;20681:47;20745:131;20871:4;20745:131;:::i;:::-;20737:139;;20464:419;;;:::o;20889:::-;21055:4;21093:2;21082:9;21078:18;21070:26;;21142:9;21136:4;21132:20;21128:1;21117:9;21113:17;21106:47;21170:131;21296:4;21170:131;:::i;:::-;21162:139;;20889:419;;;:::o;21314:::-;21480:4;21518:2;21507:9;21503:18;21495:26;;21567:9;21561:4;21557:20;21553:1;21542:9;21538:17;21531:47;21595:131;21721:4;21595:131;:::i;:::-;21587:139;;21314:419;;;:::o;21739:::-;21905:4;21943:2;21932:9;21928:18;21920:26;;21992:9;21986:4;21982:20;21978:1;21967:9;21963:17;21956:47;22020:131;22146:4;22020:131;:::i;:::-;22012:139;;21739:419;;;:::o;22164:::-;22330:4;22368:2;22357:9;22353:18;22345:26;;22417:9;22411:4;22407:20;22403:1;22392:9;22388:17;22381:47;22445:131;22571:4;22445:131;:::i;:::-;22437:139;;22164:419;;;:::o;22589:::-;22755:4;22793:2;22782:9;22778:18;22770:26;;22842:9;22836:4;22832:20;22828:1;22817:9;22813:17;22806:47;22870:131;22996:4;22870:131;:::i;:::-;22862:139;;22589:419;;;:::o;23014:::-;23180:4;23218:2;23207:9;23203:18;23195:26;;23267:9;23261:4;23257:20;23253:1;23242:9;23238:17;23231:47;23295:131;23421:4;23295:131;:::i;:::-;23287:139;;23014:419;;;:::o;23439:::-;23605:4;23643:2;23632:9;23628:18;23620:26;;23692:9;23686:4;23682:20;23678:1;23667:9;23663:17;23656:47;23720:131;23846:4;23720:131;:::i;:::-;23712:139;;23439:419;;;:::o;23864:::-;24030:4;24068:2;24057:9;24053:18;24045:26;;24117:9;24111:4;24107:20;24103:1;24092:9;24088:17;24081:47;24145:131;24271:4;24145:131;:::i;:::-;24137:139;;23864:419;;;:::o;24289:::-;24455:4;24493:2;24482:9;24478:18;24470:26;;24542:9;24536:4;24532:20;24528:1;24517:9;24513:17;24506:47;24570:131;24696:4;24570:131;:::i;:::-;24562:139;;24289:419;;;:::o;24714:222::-;24807:4;24845:2;24834:9;24830:18;24822:26;;24858:71;24926:1;24915:9;24911:17;24902:6;24858:71;:::i;:::-;24714:222;;;;:::o;24942:831::-;25205:4;25243:3;25232:9;25228:19;25220:27;;25257:71;25325:1;25314:9;25310:17;25301:6;25257:71;:::i;:::-;25338:80;25414:2;25403:9;25399:18;25390:6;25338:80;:::i;:::-;25465:9;25459:4;25455:20;25450:2;25439:9;25435:18;25428:48;25493:108;25596:4;25587:6;25493:108;:::i;:::-;25485:116;;25611:72;25679:2;25668:9;25664:18;25655:6;25611:72;:::i;:::-;25693:73;25761:3;25750:9;25746:19;25737:6;25693:73;:::i;:::-;24942:831;;;;;;;;:::o;25779:442::-;25928:4;25966:2;25955:9;25951:18;25943:26;;25979:71;26047:1;26036:9;26032:17;26023:6;25979:71;:::i;:::-;26060:72;26128:2;26117:9;26113:18;26104:6;26060:72;:::i;:::-;26142;26210:2;26199:9;26195:18;26186:6;26142:72;:::i;:::-;25779:442;;;;;;:::o;26227:214::-;26316:4;26354:2;26343:9;26339:18;26331:26;;26367:67;26431:1;26420:9;26416:17;26407:6;26367:67;:::i;:::-;26227:214;;;;:::o;26528:132::-;26595:4;26618:3;26610:11;;26648:4;26643:3;26639:14;26631:22;;26528:132;;;:::o;26666:114::-;26733:6;26767:5;26761:12;26751:22;;26666:114;;;:::o;26786:99::-;26838:6;26872:5;26866:12;26856:22;;26786:99;;;:::o;26891:113::-;26961:4;26993;26988:3;26984:14;26976:22;;26891:113;;;:::o;27010:184::-;27109:11;27143:6;27138:3;27131:19;27183:4;27178:3;27174:14;27159:29;;27010:184;;;;:::o;27200:169::-;27284:11;27318:6;27313:3;27306:19;27358:4;27353:3;27349:14;27334:29;;27200:169;;;;:::o;27375:305::-;27415:3;27434:20;27452:1;27434:20;:::i;:::-;27429:25;;27468:20;27486:1;27468:20;:::i;:::-;27463:25;;27622:1;27554:66;27550:74;27547:1;27544:81;27541:107;;;27628:18;;:::i;:::-;27541:107;27672:1;27669;27665:9;27658:16;;27375:305;;;;:::o;27686:185::-;27726:1;27743:20;27761:1;27743:20;:::i;:::-;27738:25;;27777:20;27795:1;27777:20;:::i;:::-;27772:25;;27816:1;27806:35;;27821:18;;:::i;:::-;27806:35;27863:1;27860;27856:9;27851:14;;27686:185;;;;:::o;27877:348::-;27917:7;27940:20;27958:1;27940:20;:::i;:::-;27935:25;;27974:20;27992:1;27974:20;:::i;:::-;27969:25;;28162:1;28094:66;28090:74;28087:1;28084:81;28079:1;28072:9;28065:17;28061:105;28058:131;;;28169:18;;:::i;:::-;28058:131;28217:1;28214;28210:9;28199:20;;27877:348;;;;:::o;28231:191::-;28271:4;28291:20;28309:1;28291:20;:::i;:::-;28286:25;;28325:20;28343:1;28325:20;:::i;:::-;28320:25;;28364:1;28361;28358:8;28355:34;;;28369:18;;:::i;:::-;28355:34;28414:1;28411;28407:9;28399:17;;28231:191;;;;:::o;28428:96::-;28465:7;28494:24;28512:5;28494:24;:::i;:::-;28483:35;;28428:96;;;:::o;28530:104::-;28575:7;28604:24;28622:5;28604:24;:::i;:::-;28593:35;;28530:104;;;:::o;28640:90::-;28674:7;28717:5;28710:13;28703:21;28692:32;;28640:90;;;:::o;28736:126::-;28773:7;28813:42;28806:5;28802:54;28791:65;;28736:126;;;:::o;28868:77::-;28905:7;28934:5;28923:16;;28868:77;;;:::o;28951:86::-;28986:7;29026:4;29019:5;29015:16;29004:27;;28951:86;;;:::o;29043:152::-;29119:9;29152:37;29183:5;29152:37;:::i;:::-;29139:50;;29043:152;;;:::o;29201:121::-;29259:9;29292:24;29310:5;29292:24;:::i;:::-;29279:37;;29201:121;;;:::o;29328:126::-;29378:9;29411:37;29442:5;29411:37;:::i;:::-;29398:50;;29328:126;;;:::o;29460:113::-;29510:9;29543:24;29561:5;29543:24;:::i;:::-;29530:37;;29460:113;;;:::o;29579:307::-;29647:1;29657:113;29671:6;29668:1;29665:13;29657:113;;;29756:1;29751:3;29747:11;29741:18;29737:1;29732:3;29728:11;29721:39;29693:2;29690:1;29686:10;29681:15;;29657:113;;;29788:6;29785:1;29782:13;29779:101;;;29868:1;29859:6;29854:3;29850:16;29843:27;29779:101;29628:258;29579:307;;;:::o;29892:320::-;29936:6;29973:1;29967:4;29963:12;29953:22;;30020:1;30014:4;30010:12;30041:18;30031:81;;30097:4;30089:6;30085:17;30075:27;;30031:81;30159:2;30151:6;30148:14;30128:18;30125:38;30122:84;;;30178:18;;:::i;:::-;30122:84;29943:269;29892:320;;;:::o;30218:233::-;30257:3;30280:24;30298:5;30280:24;:::i;:::-;30271:33;;30326:66;30319:5;30316:77;30313:103;;;30396:18;;:::i;:::-;30313:103;30443:1;30436:5;30432:13;30425:20;;30218:233;;;:::o;30457:180::-;30505:77;30502:1;30495:88;30602:4;30599:1;30592:15;30626:4;30623:1;30616:15;30643:180;30691:77;30688:1;30681:88;30788:4;30785:1;30778:15;30812:4;30809:1;30802:15;30829:180;30877:77;30874:1;30867:88;30974:4;30971:1;30964:15;30998:4;30995:1;30988:15;31015:180;31063:77;31060:1;31053:88;31160:4;31157:1;31150:15;31184:4;31181:1;31174:15;31201:180;31249:77;31246:1;31239:88;31346:4;31343:1;31336:15;31370:4;31367:1;31360:15;31510:117;31619:1;31616;31609:12;31633:102;31674:6;31725:2;31721:7;31716:2;31709:5;31705:14;31701:28;31691:38;;31633:102;;;:::o;31741:167::-;31881:19;31877:1;31869:6;31865:14;31858:43;31741:167;:::o;31914:222::-;32054:34;32050:1;32042:6;32038:14;32031:58;32123:5;32118:2;32110:6;32106:15;32099:30;31914:222;:::o;32142:224::-;32282:34;32278:1;32270:6;32266:14;32259:58;32351:7;32346:2;32338:6;32334:15;32327:32;32142:224;:::o;32372:173::-;32512:25;32508:1;32500:6;32496:14;32489:49;32372:173;:::o;32551:222::-;32691:34;32687:1;32679:6;32675:14;32668:58;32760:5;32755:2;32747:6;32743:15;32736:30;32551:222;:::o;32779:170::-;32919:22;32915:1;32907:6;32903:14;32896:46;32779:170;:::o;32955:168::-;33095:20;33091:1;33083:6;33079:14;33072:44;32955:168;:::o;33129:158::-;33269:10;33265:1;33257:6;33253:14;33246:34;33129:158;:::o;33293:169::-;33433:21;33429:1;33421:6;33417:14;33410:45;33293:169;:::o;33468:166::-;33608:18;33604:1;33596:6;33592:14;33585:42;33468:166;:::o;33640:156::-;33780:8;33776:1;33768:6;33764:14;33757:32;33640:156;:::o;33802:176::-;33942:28;33938:1;33930:6;33926:14;33919:52;33802:176;:::o;33984:169::-;34124:21;34120:1;34112:6;34108:14;34101:45;33984:169;:::o;34159:174::-;34299:26;34295:1;34287:6;34283:14;34276:50;34159:174;:::o;34339:248::-;34479:34;34475:1;34467:6;34463:14;34456:58;34548:31;34543:2;34535:6;34531:15;34524:56;34339:248;:::o;34593:122::-;34666:24;34684:5;34666:24;:::i;:::-;34659:5;34656:35;34646:63;;34705:1;34702;34695:12;34646:63;34593:122;:::o;34721:138::-;34802:32;34828:5;34802:32;:::i;:::-;34795:5;34792:43;34782:71;;34849:1;34846;34839:12;34782:71;34721:138;:::o;34865:116::-;34935:21;34950:5;34935:21;:::i;:::-;34928:5;34925:32;34915:60;;34971:1;34968;34961:12;34915:60;34865:116;:::o;34987:122::-;35060:24;35078:5;35060:24;:::i;:::-;35053:5;35050:35;35040:63;;35099:1;35096;35089:12;35040:63;34987:122;:::o;35115:118::-;35186:22;35202:5;35186:22;:::i;:::-;35179:5;35176:33;35166:61;;35223:1;35220;35213:12;35166:61;35115:118;:::o

Swarm Source

ipfs://d14f77c4a9de5cd4df98349942c7749fb9f825efc5e8d007d89fda1bac7e6a0a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.