ETH Price: $2,369.17 (-0.85%)

Token

SpongeBOB (SPONGE)
 

Overview

Max Total Supply

100,000,000 SPONGE

Holders

67

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
731,095.456840005110873729 SPONGE

Value
$0.00
0x7fe3c0425178ad9ca2b9a87f59b237fbc22585b1
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:
SpongeBOB

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-17
*/

/*

https://twitter.com/SpongeBobERC
https://t.me/SpongeBobERC

  .--..--..--..--..--..--.
    .' \  (`._   (_)     _   \
  .'    |  '._)         (_)  |
  \ _.')\      .----..---.   /
  |(_.'  |    /    .-\-.  \  |
  \     0|    |   ( O| O) | o|
   |  _  |  .--.____.'._.-.  |
   \ (_) | o         -` .-`  |
    |    \   |`-._ _ _ _ _\ /
    \    |   |  `. |_||_|   |
    | o  |    \_      \     |     -.   .-.
    |.-.  \     `--..-'   O |     `.`-' .'
  _.'  .' |     `-.-'      /-.__   ' .-'
.' `-.` '.|='=.='=.='=.='=|._/_ `-'.'
`-._  `.  |________/\_____|    `-.'
   .'   ).| '=' '='\/ '=' |
   `._.`  '---------------'
           //___\   //___\
             ||       ||
             ||_.-.   ||_.-.
            (_.--__) (_.--__)

*/
// SPDX-License-Identifier: MIT                                                                               
                                                    
pragma solidity = 0.8.17;

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

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

interface IUniswapV2Pair {
    function factory() external view returns (address);
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function name() public view virtual override returns (string memory) {return _name;}
    function symbol() public view virtual override returns (string memory) {return _symbol;}
    function decimals() public view virtual override returns (uint8) {return 18;}
    function totalSupply() public view virtual override returns (uint256) {return _totalSupply;}
    function balanceOf(address account) public view virtual override returns (uint256) {return _balances[account];}
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        _beforeTokenTransfer(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        _beforeTokenTransfer(account, address(0), amount);
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view returns (address) {return _owner;}
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != -1 || a != MIN_INT256);
        return a / b;
    }
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract SpongeBOB is ERC20, Ownable {

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    mapping (address => bool) public isBlacklisted;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("SpongeBOB", "SPONGE") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 35;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 35;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
        
        uint256 totalSupply = 100000000 * 1e18; 
        
        maxTransactionAmount = totalSupply * 25 / 1000; // 2.5% maxTransactionAmountTxn
        maxWallet = totalSupply * 25 / 1000; // 2.5% maxWallet
        swapTokensAtAmount = totalSupply * 2 / 1000; // 0.2% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        
        marketingWallet = address(owner());
        devWallet = address(owner()); 

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 2 / 100, "Swap amount cannot be higher than 2% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 30, "Must keep fees at 30% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 30, "Must keep fees at 30% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
    
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
    

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

    function manage_blacklist(address _address, bool status) external onlyOwner {
        require(_address != address(0),"Address should not be 0");
        isBlacklisted[_address] = status;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!isBlacklisted[from] && !isBlacklisted[to],"Blacklisted");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            
            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees/100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees/100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;

        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;
        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance - initialETHBalance;
        uint256 ethForMarketing = ethBalance * tokensForMarketing/totalTokensToSwap;
        uint256 ethForDev = ethBalance * tokensForDev/totalTokensToSwap;
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        (success,) = address(devWallet).call{value: ethForDev}("");
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
    

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600981526020017f53706f6e6765424f4200000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f53504f4e474500000000000000000000000000000000000000000000000000008152508160039081620000fb919062000dea565b5080600490816200010d919062000dea565b5050506000620001226200063d60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001ed8160016200064560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000293919062000f3b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000321919062000f3b565b6040518363ffffffff1660e01b81526004016200034092919062000f7e565b6020604051808303816000875af115801562000360573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000386919062000f3b565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003ce60a05160016200064560201b60201c565b620003e360a05160016200074260201b60201c565b60006023905060008060006023905060008060006a52b7d2dcc80cd2e400000090506103e860198262000417919062000fda565b62000423919062001054565b6008819055506103e86019826200043b919062000fda565b62000447919062001054565b600a819055506103e86002826200045f919062000fda565b6200046b919062001054565b6009819055508660108190555085601181905550846012819055506012546011546010546200049b91906200108c565b620004a791906200108c565b600f81905550836014819055508260158190555081601681905550601654601554601454620004d791906200108c565b620004e391906200108c565b601381905550620004f9620007e360201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000549620007e360201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005ab6200059d620007e360201b60201c565b60016200080d60201b60201c565b620005be3060016200080d60201b60201c565b620005d361dead60016200080d60201b60201c565b620005f5620005e7620007e360201b60201c565b60016200064560201b60201c565b620006083060016200064560201b60201c565b6200061d61dead60016200064560201b60201c565b6200062f33826200095a60201b60201c565b505050505050505062001296565b600033905090565b620006556200063d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006de9062001128565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200081d6200063d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008a69062001128565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200094e919062001167565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009c390620011d4565b60405180910390fd5b620009e06000838362000b0860201b60201c565b620009fc8160025462000b0d60201b620027b21790919060201c565b60028190555062000a5a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b0d60201b620027b21790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000afc919062001207565b60405180910390a35050565b505050565b600080828462000b1e91906200108c565b90508381101562000b66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b5d9062001274565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bf257607f821691505b60208210810362000c085762000c0762000baa565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c33565b62000c7e868362000c33565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ccb62000cc562000cbf8462000c96565b62000ca0565b62000c96565b9050919050565b6000819050919050565b62000ce78362000caa565b62000cff62000cf68262000cd2565b84845462000c40565b825550505050565b600090565b62000d1662000d07565b62000d2381848462000cdc565b505050565b5b8181101562000d4b5762000d3f60008262000d0c565b60018101905062000d29565b5050565b601f82111562000d9a5762000d648162000c0e565b62000d6f8462000c23565b8101602085101562000d7f578190505b62000d9762000d8e8562000c23565b83018262000d28565b50505b505050565b600082821c905092915050565b600062000dbf6000198460080262000d9f565b1980831691505092915050565b600062000dda838362000dac565b9150826002028217905092915050565b62000df58262000b70565b67ffffffffffffffff81111562000e115762000e1062000b7b565b5b62000e1d825462000bd9565b62000e2a82828562000d4f565b600060209050601f83116001811462000e62576000841562000e4d578287015190505b62000e59858262000dcc565b86555062000ec9565b601f19841662000e728662000c0e565b60005b8281101562000e9c5784890151825560018201915060208501945060208101905062000e75565b8683101562000ebc578489015162000eb8601f89168262000dac565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f038262000ed6565b9050919050565b62000f158162000ef6565b811462000f2157600080fd5b50565b60008151905062000f358162000f0a565b92915050565b60006020828403121562000f545762000f5362000ed1565b5b600062000f648482850162000f24565b91505092915050565b62000f788162000ef6565b82525050565b600060408201905062000f95600083018562000f6d565b62000fa4602083018462000f6d565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000fe78262000c96565b915062000ff48362000c96565b9250828202620010048162000c96565b915082820484148315176200101e576200101d62000fab565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010618262000c96565b91506200106e8362000c96565b92508262001081576200108062001025565b5b828204905092915050565b6000620010998262000c96565b9150620010a68362000c96565b9250828201905080821115620010c157620010c062000fab565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001110602083620010c7565b91506200111d82620010d8565b602082019050919050565b60006020820190508181036000830152620011438162001101565b9050919050565b60008115159050919050565b62001161816200114a565b82525050565b60006020820190506200117e600083018462001156565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011bc601f83620010c7565b9150620011c98262001184565b602082019050919050565b60006020820190508181036000830152620011ef81620011ad565b9050919050565b620012018162000c96565b82525050565b60006020820190506200121e6000830184620011f6565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200125c601b83620010c7565b9150620012698262001224565b602082019050919050565b600060208201905081810360008301526200128f816200124d565b9050919050565b60805160a051615550620012f4600039600081816112a301528181611c3f0152612e79015260008181610e4d01528181612e2101528181613e3801528181613f1901528181613f4001528181613fdc015261400301526155506000f3fe60806040526004361061036f5760003560e01c80638ea5220f116101c6578063c17b5b8c116100f7578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b14610cbf578063f637434214610ce8578063f8b45b0514610d13578063fe575a8714610d3e57610376565b8063e2f4560514610c3e578063e884f26014610c69578063f11a24d314610c9457610376565b8063c8c8ebe4116100d1578063c8c8ebe414610b6e578063d257b34f14610b99578063d85ba06314610bd6578063dd62ed3e14610c0157610376565b8063c17b5b8c14610af1578063c18bc19514610b1a578063c876d0b914610b4357610376565b8063a0d82dc511610164578063aacebbe31161013e578063aacebbe314610a37578063b62496f514610a60578063bbc0c74214610a9d578063c024666814610ac857610376565b8063a0d82dc514610992578063a457c2d7146109bd578063a9059cbb146109fa57610376565b806395d89b41116101a057806395d89b41146108e85780639a7a23d6146109135780639c3b4fdc1461093c5780639fccce321461096757610376565b80638ea5220f146108695780639213691314610894578063924de9b7146108bf57610376565b80634a62bb65116102a05780637571336a1161023e5780637bce5a04116102185780637bce5a04146107d35780638095d564146107fe5780638a8c523c146108275780638da5cb5b1461083e57610376565b80637571336a1461075657806375f0a8741461077f5780637804389f146107aa57610376565b80636ddd17131161027a5780636ddd1713146106ac57806370a08231146106d7578063715018a614610714578063751039fc1461072b57610376565b80634a62bb65146106195780634fbee193146106445780636a486a8e1461068157610376565b80631f3fed8f1161030d57806327c8f835116102e757806327c8f8351461055b578063313ce5671461058657806339509351146105b157806349bd5a5e146105ee57610376565b80631f3fed8f146104ca578063203e727e146104f557806323b872dd1461051e57610376565b80631694505e116103495780631694505e1461042057806318160ddd1461044b5780631816467f146104765780631a8145bb1461049f57610376565b806306fdde031461037b578063095ea7b3146103a657806310d5de53146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d7b565b60405161039d9190614142565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906141fd565b610e0d565b6040516103da9190614258565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190614273565b610e2b565b6040516104179190614258565b60405180910390f35b34801561042c57600080fd5b50610435610e4b565b60405161044291906142ff565b60405180910390f35b34801561045757600080fd5b50610460610e6f565b60405161046d9190614329565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190614273565b610e79565b005b3480156104ab57600080fd5b506104b4610fd0565b6040516104c19190614329565b60405180910390f35b3480156104d657600080fd5b506104df610fd6565b6040516104ec9190614329565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190614344565b610fdc565b005b34801561052a57600080fd5b5061054560048036038101906105409190614371565b611106565b6040516105529190614258565b60405180910390f35b34801561056757600080fd5b506105706111df565b60405161057d91906143d3565b60405180910390f35b34801561059257600080fd5b5061059b6111e5565b6040516105a8919061440a565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d391906141fd565b6111ee565b6040516105e59190614258565b60405180910390f35b3480156105fa57600080fd5b506106036112a1565b60405161061091906143d3565b60405180910390f35b34801561062557600080fd5b5061062e6112c5565b60405161063b9190614258565b60405180910390f35b34801561065057600080fd5b5061066b60048036038101906106669190614273565b6112d8565b6040516106789190614258565b60405180910390f35b34801561068d57600080fd5b5061069661132e565b6040516106a39190614329565b60405180910390f35b3480156106b857600080fd5b506106c1611334565b6040516106ce9190614258565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190614273565b611347565b60405161070b9190614329565b60405180910390f35b34801561072057600080fd5b5061072961138f565b005b34801561073757600080fd5b506107406114e7565b60405161074d9190614258565b60405180910390f35b34801561076257600080fd5b5061077d60048036038101906107789190614451565b6115a2565b005b34801561078b57600080fd5b50610794611694565b6040516107a191906143d3565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc9190614451565b6116ba565b005b3480156107df57600080fd5b506107e861181b565b6040516107f59190614329565b60405180910390f35b34801561080a57600080fd5b5061082560048036038101906108209190614491565b611821565b005b34801561083357600080fd5b5061083c61193b565b005b34801561084a57600080fd5b50610853611a0a565b60405161086091906143d3565b60405180910390f35b34801561087557600080fd5b5061087e611a34565b60405161088b91906143d3565b60405180910390f35b3480156108a057600080fd5b506108a9611a5a565b6040516108b69190614329565b60405180910390f35b3480156108cb57600080fd5b506108e660048036038101906108e191906144e4565b611a60565b005b3480156108f457600080fd5b506108fd611b14565b60405161090a9190614142565b60405180910390f35b34801561091f57600080fd5b5061093a60048036038101906109359190614451565b611ba6565b005b34801561094857600080fd5b50610951611cd9565b60405161095e9190614329565b60405180910390f35b34801561097357600080fd5b5061097c611cdf565b6040516109899190614329565b60405180910390f35b34801561099e57600080fd5b506109a7611ce5565b6040516109b49190614329565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df91906141fd565b611ceb565b6040516109f19190614258565b60405180910390f35b348015610a0657600080fd5b50610a216004803603810190610a1c91906141fd565b611db8565b604051610a2e9190614258565b60405180910390f35b348015610a4357600080fd5b50610a5e6004803603810190610a599190614273565b611dd6565b005b348015610a6c57600080fd5b50610a876004803603810190610a829190614273565b611f2d565b604051610a949190614258565b60405180910390f35b348015610aa957600080fd5b50610ab2611f4d565b604051610abf9190614258565b60405180910390f35b348015610ad457600080fd5b50610aef6004803603810190610aea9190614451565b611f60565b005b348015610afd57600080fd5b50610b186004803603810190610b139190614491565b6120a0565b005b348015610b2657600080fd5b50610b416004803603810190610b3c9190614344565b6121ba565b005b348015610b4f57600080fd5b50610b586122e4565b604051610b659190614258565b60405180910390f35b348015610b7a57600080fd5b50610b836122f7565b604051610b909190614329565b60405180910390f35b348015610ba557600080fd5b50610bc06004803603810190610bbb9190614344565b6122fd565b604051610bcd9190614258565b60405180910390f35b348015610be257600080fd5b50610beb61246c565b604051610bf89190614329565b60405180910390f35b348015610c0d57600080fd5b50610c286004803603810190610c239190614511565b612472565b604051610c359190614329565b60405180910390f35b348015610c4a57600080fd5b50610c536124f9565b604051610c609190614329565b60405180910390f35b348015610c7557600080fd5b50610c7e6124ff565b604051610c8b9190614258565b60405180910390f35b348015610ca057600080fd5b50610ca96125ba565b604051610cb69190614329565b60405180910390f35b348015610ccb57600080fd5b50610ce66004803603810190610ce19190614273565b6125c0565b005b348015610cf457600080fd5b50610cfd612786565b604051610d0a9190614329565b60405180910390f35b348015610d1f57600080fd5b50610d2861278c565b604051610d359190614329565b60405180910390f35b348015610d4a57600080fd5b50610d656004803603810190610d609190614273565b612792565b604051610d729190614258565b60405180910390f35b606060038054610d8a90614580565b80601f0160208091040260200160405190810160405280929190818152602001828054610db690614580565b8015610e035780601f10610dd857610100808354040283529160200191610e03565b820191906000526020600020905b815481529060010190602001808311610de657829003601f168201915b5050505050905090565b6000610e21610e1a612810565b8484612818565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610e81612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f07906145fd565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60175481565b610fe4612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a906145fd565b60405180910390fd5b670de0b6b3a76400006103e86001611089610e6f565b611093919061464c565b61109d91906146bd565b6110a791906146bd565b8110156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614760565b60405180910390fd5b670de0b6b3a7640000816110fd919061464c565b60088190555050565b60006111138484846129e1565b6111d48461111f612810565b6111cf856040518060600160405280602881526020016154ce60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611185612810565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461373f9092919063ffffffff16565b612818565b600190509392505050565b61dead81565b60006012905090565b60006112976111fb612810565b84611292856001600061120c612810565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b290919063ffffffff16565b612818565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611397612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d906145fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114f1612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611580576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611577906145fd565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6115aa612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611639576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611630906145fd565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116c2612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611751576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611748906145fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b7906147cc565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b611829612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af906145fd565b60405180910390fd5b8260108190555081601181905550806012819055506012546011546010546118e091906147ec565b6118ea91906147ec565b600f81905550601e600f541115611936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192d9061486c565b60405180910390fd5b505050565b611943612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c9906145fd565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611a68612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aee906145fd565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611b2390614580565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4f90614580565b8015611b9c5780601f10611b7157610100808354040283529160200191611b9c565b820191906000526020600020905b815481529060010190602001808311611b7f57829003601f168201915b5050505050905090565b611bae612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c34906145fd565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc2906148fe565b60405180910390fd5b611cd582826137a3565b5050565b60125481565b60195481565b60165481565b6000611dae611cf8612810565b84611da9856040518060600160405280602581526020016154f66025913960016000611d22612810565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461373f9092919063ffffffff16565b612818565b6001905092915050565b6000611dcc611dc5612810565b84846129e1565b6001905092915050565b611dde612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e64906145fd565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611f68612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fee906145fd565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120949190614258565b60405180910390a25050565b6120a8612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e906145fd565b60405180910390fd5b82601481905550816015819055508060168190555060165460155460145461215f91906147ec565b61216991906147ec565b601381905550601e60135411156121b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ac9061486c565b60405180910390fd5b505050565b6121c2612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612251576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612248906145fd565b60405180910390fd5b670de0b6b3a76400006103e86005612267610e6f565b612271919061464c565b61227b91906146bd565b61228591906146bd565b8110156122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be90614990565b60405180910390fd5b670de0b6b3a7640000816122db919061464c565b600a8190555050565b600e60009054906101000a900460ff1681565b60085481565b6000612307612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238d906145fd565b60405180910390fd5b620186a060016123a4610e6f565b6123ae919061464c565b6123b891906146bd565b8210156123fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f190614a22565b60405180910390fd5b60646002612406610e6f565b612410919061464c565b61241a91906146bd565b82111561245c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245390614ab4565b60405180910390fd5b8160098190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000612509612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258f906145fd565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b6125c8612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264e906145fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bd90614b46565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600a5481565b600d6020528060005260406000206000915054906101000a900460ff1681565b60008082846127c191906147ec565b905083811015612806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fd90614bb2565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287e90614c44565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ed90614cd6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129d49190614329565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4790614d68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab690614dfa565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b635750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9990614e66565b60405180910390fd5b60008103612bbb57612bb683836000613844565b61373a565b600b60009054906101000a900460ff161561327e57612bd8611a0a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c465750612c16611a0a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c7f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cb9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cd25750600560149054906101000a900460ff16155b1561327d57600b60019054906101000a900460ff16612dcc57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d8c5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc290614ed2565b60405180910390fd5b5b600e60009054906101000a900460ff1615612f9457612de9611a0a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e7057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ec857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f935743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4590614f8a565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130375750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130de57600854811115613081576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130789061501c565b60405180910390fd5b600a5461308d83611347565b8261309891906147ec565b11156130d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d090615088565b60405180910390fd5b61327c565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131815750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d0576008548111156131cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c29061511a565b60405180910390fd5b61327b565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661327a57600a5461322d83611347565b8261323891906147ec565b1115613279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327090615088565b60405180910390fd5b5b5b5b5b5b600061328930611347565b9050600060095482101590508080156132ae5750600b60029054906101000a900460ff165b80156132c75750600560149054906101000a900460ff16155b801561331d5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133735750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133c95750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561340d576001600560146101000a81548160ff0219169083151502179055506133f1613ad7565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134c35750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134cd57600090505b6000811561372a57601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561353057506000601354115b156135ef57606460135486613545919061464c565b61354f91906146bd565b905060135460155482613562919061464c565b61356c91906146bd565b6018600082825461357d91906147ec565b9250508190555060135460165482613595919061464c565b61359f91906146bd565b601960008282546135b091906147ec565b92505081905550601354601454826135c8919061464c565b6135d291906146bd565b601760008282546135e391906147ec565b92505081905550613706565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561364a57506000600f54115b15613705576064600f548661365f919061464c565b61366991906146bd565b9050600f546011548261367c919061464c565b61368691906146bd565b6018600082825461369791906147ec565b92505081905550600f54601254826136af919061464c565b6136b991906146bd565b601960008282546136ca91906147ec565b92505081905550600f54601054826136e2919061464c565b6136ec91906146bd565b601760008282546136fd91906147ec565b925050819055505b5b600081111561371b5761371a873083613844565b5b8085613727919061513a565b94505b613735878787613844565b505050505b505050565b6000838311158290613787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377e9190614142565b60405180910390fd5b5060008385613796919061513a565b9050809150509392505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036138b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138aa90614d68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613922576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391990614dfa565b60405180910390fd5b61392d838383613d94565b613998816040518060600160405280602681526020016154a8602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461373f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a2b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613aca9190614329565b60405180910390a3505050565b6000613ae230611347565b90506000601954601754601854613af991906147ec565b613b0391906147ec565b9050600080831480613b155750600082145b15613b2257505050613d92565b6014600954613b31919061464c565b831115613b4a576014600954613b47919061464c565b92505b600060028360185486613b5d919061464c565b613b6791906146bd565b613b7191906146bd565b905060008185613b81919061513a565b90506000479050613b9182613d99565b60008147613b9f919061513a565b905060008660175483613bb2919061464c565b613bbc91906146bd565b905060008760195484613bcf919061464c565b613bd991906146bd565b90506000818385613bea919061513a565b613bf4919061513a565b9050600060188190555060006017819055506000601981905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613c549061519f565b60006040518083038185875af1925050503d8060008114613c91576040519150601f19603f3d011682016040523d82523d6000602084013e613c96565b606091505b505080985050600087118015613cac5750600081115b15613cf957613cbb8782613fd6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613cf0939291906151b4565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613d3f9061519f565b60006040518083038185875af1925050503d8060008114613d7c576040519150601f19603f3d011682016040523d82523d6000602084013e613d81565b606091505b505080985050505050505050505050505b565b505050565b6000600267ffffffffffffffff811115613db657613db56151eb565b5b604051908082528060200260200182016040528015613de45781602001602082028036833780820191505090505b5090503081600081518110613dfc57613dfb61521a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec5919061525e565b81600181518110613ed957613ed861521a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f3e307f000000000000000000000000000000000000000000000000000000000000000084612818565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613fa0959493929190615384565b600060405180830381600087803b158015613fba57600080fd5b505af1158015613fce573d6000803e3d6000fd5b505050505050565b614001307f000000000000000000000000000000000000000000000000000000000000000084612818565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401614068969594939291906153de565b60606040518083038185885af1158015614086573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140ab9190615454565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156140ec5780820151818401526020810190506140d1565b60008484015250505050565b6000601f19601f8301169050919050565b6000614114826140b2565b61411e81856140bd565b935061412e8185602086016140ce565b614137816140f8565b840191505092915050565b6000602082019050818103600083015261415c8184614109565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061419482614169565b9050919050565b6141a481614189565b81146141af57600080fd5b50565b6000813590506141c18161419b565b92915050565b6000819050919050565b6141da816141c7565b81146141e557600080fd5b50565b6000813590506141f7816141d1565b92915050565b6000806040838503121561421457614213614164565b5b6000614222858286016141b2565b9250506020614233858286016141e8565b9150509250929050565b60008115159050919050565b6142528161423d565b82525050565b600060208201905061426d6000830184614249565b92915050565b60006020828403121561428957614288614164565b5b6000614297848285016141b2565b91505092915050565b6000819050919050565b60006142c56142c06142bb84614169565b6142a0565b614169565b9050919050565b60006142d7826142aa565b9050919050565b60006142e9826142cc565b9050919050565b6142f9816142de565b82525050565b600060208201905061431460008301846142f0565b92915050565b614323816141c7565b82525050565b600060208201905061433e600083018461431a565b92915050565b60006020828403121561435a57614359614164565b5b6000614368848285016141e8565b91505092915050565b60008060006060848603121561438a57614389614164565b5b6000614398868287016141b2565b93505060206143a9868287016141b2565b92505060406143ba868287016141e8565b9150509250925092565b6143cd81614189565b82525050565b60006020820190506143e860008301846143c4565b92915050565b600060ff82169050919050565b614404816143ee565b82525050565b600060208201905061441f60008301846143fb565b92915050565b61442e8161423d565b811461443957600080fd5b50565b60008135905061444b81614425565b92915050565b6000806040838503121561446857614467614164565b5b6000614476858286016141b2565b92505060206144878582860161443c565b9150509250929050565b6000806000606084860312156144aa576144a9614164565b5b60006144b8868287016141e8565b93505060206144c9868287016141e8565b92505060406144da868287016141e8565b9150509250925092565b6000602082840312156144fa576144f9614164565b5b60006145088482850161443c565b91505092915050565b6000806040838503121561452857614527614164565b5b6000614536858286016141b2565b9250506020614547858286016141b2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061459857607f821691505b6020821081036145ab576145aa614551565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145e76020836140bd565b91506145f2826145b1565b602082019050919050565b60006020820190508181036000830152614616816145da565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614657826141c7565b9150614662836141c7565b9250828202614670816141c7565b915082820484148315176146875761468661461d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146c8826141c7565b91506146d3836141c7565b9250826146e3576146e261468e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061474a602f836140bd565b9150614755826146ee565b604082019050919050565b600060208201905081810360008301526147798161473d565b9050919050565b7f416464726573732073686f756c64206e6f742062652030000000000000000000600082015250565b60006147b66017836140bd565b91506147c182614780565b602082019050919050565b600060208201905081810360008301526147e5816147a9565b9050919050565b60006147f7826141c7565b9150614802836141c7565b925082820190508082111561481a5761481961461d565b5b92915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000614856601d836140bd565b915061486182614820565b602082019050919050565b6000602082019050818103600083015261488581614849565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006148e86039836140bd565b91506148f38261488c565b604082019050919050565b60006020820190508181036000830152614917816148db565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061497a6024836140bd565b91506149858261491e565b604082019050919050565b600060208201905081810360008301526149a98161496d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614a0c6035836140bd565b9150614a17826149b0565b604082019050919050565b60006020820190508181036000830152614a3b816149ff565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20322520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614a9e6032836140bd565b9150614aa982614a42565b604082019050919050565b60006020820190508181036000830152614acd81614a91565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b306026836140bd565b9150614b3b82614ad4565b604082019050919050565b60006020820190508181036000830152614b5f81614b23565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614b9c601b836140bd565b9150614ba782614b66565b602082019050919050565b60006020820190508181036000830152614bcb81614b8f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c2e6024836140bd565b9150614c3982614bd2565b604082019050919050565b60006020820190508181036000830152614c5d81614c21565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cc06022836140bd565b9150614ccb82614c64565b604082019050919050565b60006020820190508181036000830152614cef81614cb3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614d526025836140bd565b9150614d5d82614cf6565b604082019050919050565b60006020820190508181036000830152614d8181614d45565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614de46023836140bd565b9150614def82614d88565b604082019050919050565b60006020820190508181036000830152614e1381614dd7565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000614e50600b836140bd565b9150614e5b82614e1a565b602082019050919050565b60006020820190508181036000830152614e7f81614e43565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ebc6016836140bd565b9150614ec782614e86565b602082019050919050565b60006020820190508181036000830152614eeb81614eaf565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614f746049836140bd565b9150614f7f82614ef2565b606082019050919050565b60006020820190508181036000830152614fa381614f67565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006150066035836140bd565b915061501182614faa565b604082019050919050565b6000602082019050818103600083015261503581614ff9565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006150726013836140bd565b915061507d8261503c565b602082019050919050565b600060208201905081810360008301526150a181615065565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006151046036836140bd565b915061510f826150a8565b604082019050919050565b60006020820190508181036000830152615133816150f7565b9050919050565b6000615145826141c7565b9150615150836141c7565b92508282039050818111156151685761516761461d565b5b92915050565b600081905092915050565b50565b600061518960008361516e565b915061519482615179565b600082019050919050565b60006151aa8261517c565b9150819050919050565b60006060820190506151c9600083018661431a565b6151d6602083018561431a565b6151e3604083018461431a565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506152588161419b565b92915050565b60006020828403121561527457615273614164565b5b600061528284828501615249565b91505092915050565b6000819050919050565b60006152b06152ab6152a68461528b565b6142a0565b6141c7565b9050919050565b6152c081615295565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6152fb81614189565b82525050565b600061530d83836152f2565b60208301905092915050565b6000602082019050919050565b6000615331826152c6565b61533b81856152d1565b9350615346836152e2565b8060005b8381101561537757815161535e8882615301565b975061536983615319565b92505060018101905061534a565b5085935050505092915050565b600060a082019050615399600083018861431a565b6153a660208301876152b7565b81810360408301526153b88186615326565b90506153c760608301856143c4565b6153d4608083018461431a565b9695505050505050565b600060c0820190506153f360008301896143c4565b615400602083018861431a565b61540d60408301876152b7565b61541a60608301866152b7565b61542760808301856143c4565b61543460a083018461431a565b979650505050505050565b60008151905061544e816141d1565b92915050565b60008060006060848603121561546d5761546c614164565b5b600061547b8682870161543f565b935050602061548c8682870161543f565b925050604061549d8682870161543f565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209106ee36b94d93d861a85403cf82db697b8bef95bd0b1b770caa0e732109521d64736f6c63430008110033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c80638ea5220f116101c6578063c17b5b8c116100f7578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b14610cbf578063f637434214610ce8578063f8b45b0514610d13578063fe575a8714610d3e57610376565b8063e2f4560514610c3e578063e884f26014610c69578063f11a24d314610c9457610376565b8063c8c8ebe4116100d1578063c8c8ebe414610b6e578063d257b34f14610b99578063d85ba06314610bd6578063dd62ed3e14610c0157610376565b8063c17b5b8c14610af1578063c18bc19514610b1a578063c876d0b914610b4357610376565b8063a0d82dc511610164578063aacebbe31161013e578063aacebbe314610a37578063b62496f514610a60578063bbc0c74214610a9d578063c024666814610ac857610376565b8063a0d82dc514610992578063a457c2d7146109bd578063a9059cbb146109fa57610376565b806395d89b41116101a057806395d89b41146108e85780639a7a23d6146109135780639c3b4fdc1461093c5780639fccce321461096757610376565b80638ea5220f146108695780639213691314610894578063924de9b7146108bf57610376565b80634a62bb65116102a05780637571336a1161023e5780637bce5a04116102185780637bce5a04146107d35780638095d564146107fe5780638a8c523c146108275780638da5cb5b1461083e57610376565b80637571336a1461075657806375f0a8741461077f5780637804389f146107aa57610376565b80636ddd17131161027a5780636ddd1713146106ac57806370a08231146106d7578063715018a614610714578063751039fc1461072b57610376565b80634a62bb65146106195780634fbee193146106445780636a486a8e1461068157610376565b80631f3fed8f1161030d57806327c8f835116102e757806327c8f8351461055b578063313ce5671461058657806339509351146105b157806349bd5a5e146105ee57610376565b80631f3fed8f146104ca578063203e727e146104f557806323b872dd1461051e57610376565b80631694505e116103495780631694505e1461042057806318160ddd1461044b5780631816467f146104765780631a8145bb1461049f57610376565b806306fdde031461037b578063095ea7b3146103a657806310d5de53146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d7b565b60405161039d9190614142565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906141fd565b610e0d565b6040516103da9190614258565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190614273565b610e2b565b6040516104179190614258565b60405180910390f35b34801561042c57600080fd5b50610435610e4b565b60405161044291906142ff565b60405180910390f35b34801561045757600080fd5b50610460610e6f565b60405161046d9190614329565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190614273565b610e79565b005b3480156104ab57600080fd5b506104b4610fd0565b6040516104c19190614329565b60405180910390f35b3480156104d657600080fd5b506104df610fd6565b6040516104ec9190614329565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190614344565b610fdc565b005b34801561052a57600080fd5b5061054560048036038101906105409190614371565b611106565b6040516105529190614258565b60405180910390f35b34801561056757600080fd5b506105706111df565b60405161057d91906143d3565b60405180910390f35b34801561059257600080fd5b5061059b6111e5565b6040516105a8919061440a565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d391906141fd565b6111ee565b6040516105e59190614258565b60405180910390f35b3480156105fa57600080fd5b506106036112a1565b60405161061091906143d3565b60405180910390f35b34801561062557600080fd5b5061062e6112c5565b60405161063b9190614258565b60405180910390f35b34801561065057600080fd5b5061066b60048036038101906106669190614273565b6112d8565b6040516106789190614258565b60405180910390f35b34801561068d57600080fd5b5061069661132e565b6040516106a39190614329565b60405180910390f35b3480156106b857600080fd5b506106c1611334565b6040516106ce9190614258565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190614273565b611347565b60405161070b9190614329565b60405180910390f35b34801561072057600080fd5b5061072961138f565b005b34801561073757600080fd5b506107406114e7565b60405161074d9190614258565b60405180910390f35b34801561076257600080fd5b5061077d60048036038101906107789190614451565b6115a2565b005b34801561078b57600080fd5b50610794611694565b6040516107a191906143d3565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc9190614451565b6116ba565b005b3480156107df57600080fd5b506107e861181b565b6040516107f59190614329565b60405180910390f35b34801561080a57600080fd5b5061082560048036038101906108209190614491565b611821565b005b34801561083357600080fd5b5061083c61193b565b005b34801561084a57600080fd5b50610853611a0a565b60405161086091906143d3565b60405180910390f35b34801561087557600080fd5b5061087e611a34565b60405161088b91906143d3565b60405180910390f35b3480156108a057600080fd5b506108a9611a5a565b6040516108b69190614329565b60405180910390f35b3480156108cb57600080fd5b506108e660048036038101906108e191906144e4565b611a60565b005b3480156108f457600080fd5b506108fd611b14565b60405161090a9190614142565b60405180910390f35b34801561091f57600080fd5b5061093a60048036038101906109359190614451565b611ba6565b005b34801561094857600080fd5b50610951611cd9565b60405161095e9190614329565b60405180910390f35b34801561097357600080fd5b5061097c611cdf565b6040516109899190614329565b60405180910390f35b34801561099e57600080fd5b506109a7611ce5565b6040516109b49190614329565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df91906141fd565b611ceb565b6040516109f19190614258565b60405180910390f35b348015610a0657600080fd5b50610a216004803603810190610a1c91906141fd565b611db8565b604051610a2e9190614258565b60405180910390f35b348015610a4357600080fd5b50610a5e6004803603810190610a599190614273565b611dd6565b005b348015610a6c57600080fd5b50610a876004803603810190610a829190614273565b611f2d565b604051610a949190614258565b60405180910390f35b348015610aa957600080fd5b50610ab2611f4d565b604051610abf9190614258565b60405180910390f35b348015610ad457600080fd5b50610aef6004803603810190610aea9190614451565b611f60565b005b348015610afd57600080fd5b50610b186004803603810190610b139190614491565b6120a0565b005b348015610b2657600080fd5b50610b416004803603810190610b3c9190614344565b6121ba565b005b348015610b4f57600080fd5b50610b586122e4565b604051610b659190614258565b60405180910390f35b348015610b7a57600080fd5b50610b836122f7565b604051610b909190614329565b60405180910390f35b348015610ba557600080fd5b50610bc06004803603810190610bbb9190614344565b6122fd565b604051610bcd9190614258565b60405180910390f35b348015610be257600080fd5b50610beb61246c565b604051610bf89190614329565b60405180910390f35b348015610c0d57600080fd5b50610c286004803603810190610c239190614511565b612472565b604051610c359190614329565b60405180910390f35b348015610c4a57600080fd5b50610c536124f9565b604051610c609190614329565b60405180910390f35b348015610c7557600080fd5b50610c7e6124ff565b604051610c8b9190614258565b60405180910390f35b348015610ca057600080fd5b50610ca96125ba565b604051610cb69190614329565b60405180910390f35b348015610ccb57600080fd5b50610ce66004803603810190610ce19190614273565b6125c0565b005b348015610cf457600080fd5b50610cfd612786565b604051610d0a9190614329565b60405180910390f35b348015610d1f57600080fd5b50610d2861278c565b604051610d359190614329565b60405180910390f35b348015610d4a57600080fd5b50610d656004803603810190610d609190614273565b612792565b604051610d729190614258565b60405180910390f35b606060038054610d8a90614580565b80601f0160208091040260200160405190810160405280929190818152602001828054610db690614580565b8015610e035780601f10610dd857610100808354040283529160200191610e03565b820191906000526020600020905b815481529060010190602001808311610de657829003601f168201915b5050505050905090565b6000610e21610e1a612810565b8484612818565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610e81612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f07906145fd565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60175481565b610fe4612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a906145fd565b60405180910390fd5b670de0b6b3a76400006103e86001611089610e6f565b611093919061464c565b61109d91906146bd565b6110a791906146bd565b8110156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614760565b60405180910390fd5b670de0b6b3a7640000816110fd919061464c565b60088190555050565b60006111138484846129e1565b6111d48461111f612810565b6111cf856040518060600160405280602881526020016154ce60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611185612810565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461373f9092919063ffffffff16565b612818565b600190509392505050565b61dead81565b60006012905090565b60006112976111fb612810565b84611292856001600061120c612810565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b290919063ffffffff16565b612818565b6001905092915050565b7f0000000000000000000000004efd3c749861a7ec889ce5b702ea153ee10a33c081565b600b60009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611397612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d906145fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114f1612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611580576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611577906145fd565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6115aa612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611639576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611630906145fd565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116c2612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611751576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611748906145fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b7906147cc565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b611829612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af906145fd565b60405180910390fd5b8260108190555081601181905550806012819055506012546011546010546118e091906147ec565b6118ea91906147ec565b600f81905550601e600f541115611936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192d9061486c565b60405180910390fd5b505050565b611943612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c9906145fd565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611a68612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aee906145fd565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611b2390614580565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4f90614580565b8015611b9c5780601f10611b7157610100808354040283529160200191611b9c565b820191906000526020600020905b815481529060010190602001808311611b7f57829003601f168201915b5050505050905090565b611bae612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c34906145fd565b60405180910390fd5b7f0000000000000000000000004efd3c749861a7ec889ce5b702ea153ee10a33c073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc2906148fe565b60405180910390fd5b611cd582826137a3565b5050565b60125481565b60195481565b60165481565b6000611dae611cf8612810565b84611da9856040518060600160405280602581526020016154f66025913960016000611d22612810565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461373f9092919063ffffffff16565b612818565b6001905092915050565b6000611dcc611dc5612810565b84846129e1565b6001905092915050565b611dde612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e64906145fd565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611f68612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fee906145fd565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120949190614258565b60405180910390a25050565b6120a8612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e906145fd565b60405180910390fd5b82601481905550816015819055508060168190555060165460155460145461215f91906147ec565b61216991906147ec565b601381905550601e60135411156121b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ac9061486c565b60405180910390fd5b505050565b6121c2612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612251576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612248906145fd565b60405180910390fd5b670de0b6b3a76400006103e86005612267610e6f565b612271919061464c565b61227b91906146bd565b61228591906146bd565b8110156122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be90614990565b60405180910390fd5b670de0b6b3a7640000816122db919061464c565b600a8190555050565b600e60009054906101000a900460ff1681565b60085481565b6000612307612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238d906145fd565b60405180910390fd5b620186a060016123a4610e6f565b6123ae919061464c565b6123b891906146bd565b8210156123fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f190614a22565b60405180910390fd5b60646002612406610e6f565b612410919061464c565b61241a91906146bd565b82111561245c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245390614ab4565b60405180910390fd5b8160098190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000612509612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258f906145fd565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b6125c8612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264e906145fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bd90614b46565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600a5481565b600d6020528060005260406000206000915054906101000a900460ff1681565b60008082846127c191906147ec565b905083811015612806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fd90614bb2565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287e90614c44565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ed90614cd6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129d49190614329565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4790614d68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab690614dfa565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b635750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9990614e66565b60405180910390fd5b60008103612bbb57612bb683836000613844565b61373a565b600b60009054906101000a900460ff161561327e57612bd8611a0a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c465750612c16611a0a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c7f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cb9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cd25750600560149054906101000a900460ff16155b1561327d57600b60019054906101000a900460ff16612dcc57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d8c5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc290614ed2565b60405180910390fd5b5b600e60009054906101000a900460ff1615612f9457612de9611a0a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e7057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ec857507f0000000000000000000000004efd3c749861a7ec889ce5b702ea153ee10a33c073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f935743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4590614f8a565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130375750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130de57600854811115613081576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130789061501c565b60405180910390fd5b600a5461308d83611347565b8261309891906147ec565b11156130d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d090615088565b60405180910390fd5b61327c565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131815750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d0576008548111156131cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c29061511a565b60405180910390fd5b61327b565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661327a57600a5461322d83611347565b8261323891906147ec565b1115613279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327090615088565b60405180910390fd5b5b5b5b5b5b600061328930611347565b9050600060095482101590508080156132ae5750600b60029054906101000a900460ff165b80156132c75750600560149054906101000a900460ff16155b801561331d5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133735750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133c95750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561340d576001600560146101000a81548160ff0219169083151502179055506133f1613ad7565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134c35750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134cd57600090505b6000811561372a57601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561353057506000601354115b156135ef57606460135486613545919061464c565b61354f91906146bd565b905060135460155482613562919061464c565b61356c91906146bd565b6018600082825461357d91906147ec565b9250508190555060135460165482613595919061464c565b61359f91906146bd565b601960008282546135b091906147ec565b92505081905550601354601454826135c8919061464c565b6135d291906146bd565b601760008282546135e391906147ec565b92505081905550613706565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561364a57506000600f54115b15613705576064600f548661365f919061464c565b61366991906146bd565b9050600f546011548261367c919061464c565b61368691906146bd565b6018600082825461369791906147ec565b92505081905550600f54601254826136af919061464c565b6136b991906146bd565b601960008282546136ca91906147ec565b92505081905550600f54601054826136e2919061464c565b6136ec91906146bd565b601760008282546136fd91906147ec565b925050819055505b5b600081111561371b5761371a873083613844565b5b8085613727919061513a565b94505b613735878787613844565b505050505b505050565b6000838311158290613787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377e9190614142565b60405180910390fd5b5060008385613796919061513a565b9050809150509392505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036138b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138aa90614d68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613922576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391990614dfa565b60405180910390fd5b61392d838383613d94565b613998816040518060600160405280602681526020016154a8602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461373f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a2b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613aca9190614329565b60405180910390a3505050565b6000613ae230611347565b90506000601954601754601854613af991906147ec565b613b0391906147ec565b9050600080831480613b155750600082145b15613b2257505050613d92565b6014600954613b31919061464c565b831115613b4a576014600954613b47919061464c565b92505b600060028360185486613b5d919061464c565b613b6791906146bd565b613b7191906146bd565b905060008185613b81919061513a565b90506000479050613b9182613d99565b60008147613b9f919061513a565b905060008660175483613bb2919061464c565b613bbc91906146bd565b905060008760195484613bcf919061464c565b613bd991906146bd565b90506000818385613bea919061513a565b613bf4919061513a565b9050600060188190555060006017819055506000601981905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613c549061519f565b60006040518083038185875af1925050503d8060008114613c91576040519150601f19603f3d011682016040523d82523d6000602084013e613c96565b606091505b505080985050600087118015613cac5750600081115b15613cf957613cbb8782613fd6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613cf0939291906151b4565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613d3f9061519f565b60006040518083038185875af1925050503d8060008114613d7c576040519150601f19603f3d011682016040523d82523d6000602084013e613d81565b606091505b505080985050505050505050505050505b565b505050565b6000600267ffffffffffffffff811115613db657613db56151eb565b5b604051908082528060200260200182016040528015613de45781602001602082028036833780820191505090505b5090503081600081518110613dfc57613dfb61521a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec5919061525e565b81600181518110613ed957613ed861521a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f3e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612818565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613fa0959493929190615384565b600060405180830381600087803b158015613fba57600080fd5b505af1158015613fce573d6000803e3d6000fd5b505050505050565b614001307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612818565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401614068969594939291906153de565b60606040518083038185885af1158015614086573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140ab9190615454565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156140ec5780820151818401526020810190506140d1565b60008484015250505050565b6000601f19601f8301169050919050565b6000614114826140b2565b61411e81856140bd565b935061412e8185602086016140ce565b614137816140f8565b840191505092915050565b6000602082019050818103600083015261415c8184614109565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061419482614169565b9050919050565b6141a481614189565b81146141af57600080fd5b50565b6000813590506141c18161419b565b92915050565b6000819050919050565b6141da816141c7565b81146141e557600080fd5b50565b6000813590506141f7816141d1565b92915050565b6000806040838503121561421457614213614164565b5b6000614222858286016141b2565b9250506020614233858286016141e8565b9150509250929050565b60008115159050919050565b6142528161423d565b82525050565b600060208201905061426d6000830184614249565b92915050565b60006020828403121561428957614288614164565b5b6000614297848285016141b2565b91505092915050565b6000819050919050565b60006142c56142c06142bb84614169565b6142a0565b614169565b9050919050565b60006142d7826142aa565b9050919050565b60006142e9826142cc565b9050919050565b6142f9816142de565b82525050565b600060208201905061431460008301846142f0565b92915050565b614323816141c7565b82525050565b600060208201905061433e600083018461431a565b92915050565b60006020828403121561435a57614359614164565b5b6000614368848285016141e8565b91505092915050565b60008060006060848603121561438a57614389614164565b5b6000614398868287016141b2565b93505060206143a9868287016141b2565b92505060406143ba868287016141e8565b9150509250925092565b6143cd81614189565b82525050565b60006020820190506143e860008301846143c4565b92915050565b600060ff82169050919050565b614404816143ee565b82525050565b600060208201905061441f60008301846143fb565b92915050565b61442e8161423d565b811461443957600080fd5b50565b60008135905061444b81614425565b92915050565b6000806040838503121561446857614467614164565b5b6000614476858286016141b2565b92505060206144878582860161443c565b9150509250929050565b6000806000606084860312156144aa576144a9614164565b5b60006144b8868287016141e8565b93505060206144c9868287016141e8565b92505060406144da868287016141e8565b9150509250925092565b6000602082840312156144fa576144f9614164565b5b60006145088482850161443c565b91505092915050565b6000806040838503121561452857614527614164565b5b6000614536858286016141b2565b9250506020614547858286016141b2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061459857607f821691505b6020821081036145ab576145aa614551565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145e76020836140bd565b91506145f2826145b1565b602082019050919050565b60006020820190508181036000830152614616816145da565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614657826141c7565b9150614662836141c7565b9250828202614670816141c7565b915082820484148315176146875761468661461d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146c8826141c7565b91506146d3836141c7565b9250826146e3576146e261468e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061474a602f836140bd565b9150614755826146ee565b604082019050919050565b600060208201905081810360008301526147798161473d565b9050919050565b7f416464726573732073686f756c64206e6f742062652030000000000000000000600082015250565b60006147b66017836140bd565b91506147c182614780565b602082019050919050565b600060208201905081810360008301526147e5816147a9565b9050919050565b60006147f7826141c7565b9150614802836141c7565b925082820190508082111561481a5761481961461d565b5b92915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000614856601d836140bd565b915061486182614820565b602082019050919050565b6000602082019050818103600083015261488581614849565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006148e86039836140bd565b91506148f38261488c565b604082019050919050565b60006020820190508181036000830152614917816148db565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061497a6024836140bd565b91506149858261491e565b604082019050919050565b600060208201905081810360008301526149a98161496d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614a0c6035836140bd565b9150614a17826149b0565b604082019050919050565b60006020820190508181036000830152614a3b816149ff565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20322520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614a9e6032836140bd565b9150614aa982614a42565b604082019050919050565b60006020820190508181036000830152614acd81614a91565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b306026836140bd565b9150614b3b82614ad4565b604082019050919050565b60006020820190508181036000830152614b5f81614b23565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614b9c601b836140bd565b9150614ba782614b66565b602082019050919050565b60006020820190508181036000830152614bcb81614b8f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c2e6024836140bd565b9150614c3982614bd2565b604082019050919050565b60006020820190508181036000830152614c5d81614c21565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cc06022836140bd565b9150614ccb82614c64565b604082019050919050565b60006020820190508181036000830152614cef81614cb3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614d526025836140bd565b9150614d5d82614cf6565b604082019050919050565b60006020820190508181036000830152614d8181614d45565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614de46023836140bd565b9150614def82614d88565b604082019050919050565b60006020820190508181036000830152614e1381614dd7565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000614e50600b836140bd565b9150614e5b82614e1a565b602082019050919050565b60006020820190508181036000830152614e7f81614e43565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ebc6016836140bd565b9150614ec782614e86565b602082019050919050565b60006020820190508181036000830152614eeb81614eaf565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614f746049836140bd565b9150614f7f82614ef2565b606082019050919050565b60006020820190508181036000830152614fa381614f67565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006150066035836140bd565b915061501182614faa565b604082019050919050565b6000602082019050818103600083015261503581614ff9565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006150726013836140bd565b915061507d8261503c565b602082019050919050565b600060208201905081810360008301526150a181615065565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006151046036836140bd565b915061510f826150a8565b604082019050919050565b60006020820190508181036000830152615133816150f7565b9050919050565b6000615145826141c7565b9150615150836141c7565b92508282039050818111156151685761516761461d565b5b92915050565b600081905092915050565b50565b600061518960008361516e565b915061519482615179565b600082019050919050565b60006151aa8261517c565b9150819050919050565b60006060820190506151c9600083018661431a565b6151d6602083018561431a565b6151e3604083018461431a565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506152588161419b565b92915050565b60006020828403121561527457615273614164565b5b600061528284828501615249565b91505092915050565b6000819050919050565b60006152b06152ab6152a68461528b565b6142a0565b6141c7565b9050919050565b6152c081615295565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6152fb81614189565b82525050565b600061530d83836152f2565b60208301905092915050565b6000602082019050919050565b6000615331826152c6565b61533b81856152d1565b9350615346836152e2565b8060005b8381101561537757815161535e8882615301565b975061536983615319565b92505060018101905061534a565b5085935050505092915050565b600060a082019050615399600083018861431a565b6153a660208301876152b7565b81810360408301526153b88186615326565b90506153c760608301856143c4565b6153d4608083018461431a565b9695505050505050565b600060c0820190506153f360008301896143c4565b615400602083018861431a565b61540d60408301876152b7565b61541a60608301866152b7565b61542760808301856143c4565b61543460a083018461431a565b979650505050505050565b60008151905061544e816141d1565b92915050565b60008060006060848603121561546d5761546c614164565b5b600061547b8682870161543f565b935050602061548c8682870161543f565b925050604061549d8682870161543f565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209106ee36b94d93d861a85403cf82db697b8bef95bd0b1b770caa0e732109521d64736f6c63430008110033

Deployed Bytecode Sourcemap

11066:15225:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2923:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3743:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12455:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11112:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3190:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18978:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12234:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12194;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16527:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3918:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11215:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3107:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4279:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11170:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11496:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19149:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12045:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11576:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3288:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8618:148;;;;;;;;;;;;;:::i;:::-;;15743:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16996:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11307:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19282:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11934:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17353:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15575:112;;;;;;;;;;;;;:::i;:::-;;8424:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11344:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12080:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17240:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3013:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18310:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12008:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12274:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12156:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4503:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3405:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18758:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12677:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11536:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18120:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17734:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16769:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11852:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11381:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16137:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11900:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3586:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11423:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15928:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11971:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8772:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12118:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11463:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11799:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2923:84;2977:13;3000:5;2993:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2923:84;:::o;3743:169::-;3826:4;3843:39;3852:12;:10;:12::i;:::-;3866:7;3875:6;3843:8;:39::i;:::-;3900:4;3893:11;;3743:169;;;;:::o;12455:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;11112:51::-;;;:::o;3190:92::-;3251:7;3268:12;;3261:19;;3190:92;:::o;18978:157::-;8543:12;:10;:12::i;:::-;8533:22;;:6;;;;;;;;;;;:22;;;8525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19085:9:::1;;;;;;;;;;;19057:38;;19074:9;19057:38;;;;;;;;;;;;19118:9;19106;;:21;;;;;;;;;;;;;;;;;;18978:157:::0;:::o;12234:33::-;;;;:::o;12194:::-;;;;:::o;16527:234::-;8543:12;:10;:12::i;:::-;8533:22;;:6;;;;;;;;;;;:22;;;8525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16646:4:::1;16640;16636:1;16620:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;16619:31;;;;:::i;:::-;16609:6;:41;;16601:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;16746:6;16736;:17;;;;:::i;:::-;16713:20;:40;;;;16527:234:::0;:::o;3918:355::-;4058:4;4075:36;4085:6;4093:9;4104:6;4075:9;:36::i;:::-;4122:121;4131:6;4139:12;:10;:12::i;:::-;4153:89;4191:6;4153:89;;;;;;;;;;;;;;;;;:11;:19;4165:6;4153:19;;;;;;;;;;;;;;;:33;4173:12;:10;:12::i;:::-;4153:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;4122:8;:121::i;:::-;4261:4;4254:11;;3918:355;;;;;:::o;11215:53::-;11261:6;11215:53;:::o;3107:77::-;3165:5;3180:2;3173:9;;3107:77;:::o;4279:218::-;4367:4;4384:83;4393:12;:10;:12::i;:::-;4407:7;4416:50;4455:10;4416:11;:25;4428:12;:10;:12::i;:::-;4416:25;;;;;;;;;;;;;;;:34;4442:7;4416:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;4384:8;:83::i;:::-;4485:4;4478:11;;4279:218;;;;:::o;11170:38::-;;;:::o;11496:33::-;;;;;;;;;;;;;:::o;19149:125::-;19214:4;19238:19;:28;19258:7;19238:28;;;;;;;;;;;;;;;;;;;;;;;;;19231:35;;19149:125;;;:::o;12045:28::-;;;;:::o;11576:31::-;;;;;;;;;;;;;:::o;3288:111::-;3362:7;3379:9;:18;3389:7;3379:18;;;;;;;;;;;;;;;;3372:25;;3288:111;;;:::o;8618:148::-;8543:12;:10;:12::i;:::-;8533:22;;:6;;;;;;;;;;;:22;;;8525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8725:1:::1;8688:40;;8709:6;;;;;;;;;;;8688:40;;;;;;;;;;;;8756:1;8739:6;;:19;;;;;;;;;;;;;;;;;;8618:148::o:0;15743:120::-;15795:4;8543:12;:10;:12::i;:::-;8533:22;;:6;;;;;;;;;;;:22;;;8525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15828:5:::1;15811:14;;:22;;;;;;;;;;;;;;;;;;15851:4;15844:11;;15743:120:::0;:::o;16996:144::-;8543:12;:10;:12::i;:::-;8533:22;;:6;;;;;;;;;;;:22;;;8525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17128:4:::1;17086:31;:39;17118:6;17086:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;16996:144:::0;;:::o;11307:30::-;;;;;;;;;;;;;:::o;19282:195::-;8543:12;:10;:12::i;:::-;8533:22;;:6;;;;;;;;;;;:22;;;8525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19397:1:::1;19377:22;;:8;:22;;::::0;19369:57:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19463:6;19437:13;:23;19451:8;19437:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;19282:195:::0;;:::o;11934:30::-;;;;:::o;17353:369::-;8543:12;:10;:12::i;:::-;8533:22;;:6;;;;;;;;;;;:22;;;8525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17487:13:::1;17469:15;:31;;;;17529:13;17511:15;:31;;;;17565:7;17553:9;:19;;;;17634:9;;17616:15;;17598;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;17583:12;:60;;;;17678:2;17662:12;;:18;;17654:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;17353:369:::0;;;:::o;15575:112::-;8543:12;:10;:12::i;:::-;8533:22;;:6;;;;;;;;;;;:22;;;8525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15646:4:::1;15630:13;;:20;;;;;;;;;;;;;;;;;;15675:4;15661:11;;:18;;;;;;;;;;;;;;;;;;15575:112::o:0;8424:63::-;8462:7;8479:6;;;;;;;;;;;8472:13;;8424:63;:::o;11344:24::-;;;;;;;;;;;;;:::o;12080:31::-;;;;:::o;17240:101::-;8543:12;:10;:12::i;:::-;8533:22;;:6;;;;;;;;;;;:22;;;8525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17326:7:::1;17312:11;;:21;;;;;;;;;;;;;;;;;;17240:101:::0;:::o;3013:88::-;3069:13;3092:7;3085:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3013:88;:::o;18310:244::-;8543:12;:10;:12::i;:::-;8533:22;;:6;;;;;;;;;;;:22;;;8525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18417:13:::1;18409:21;;:4;:21;;::::0;18401:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18505:41;18534:4;18540:5;18505:28;:41::i;:::-;18310:244:::0;;:::o;12008:24::-;;;;:::o;12274:27::-;;;;:::o;12156:25::-;;;;:::o;4503:269::-;4596:4;4613:129;4622:12;:10;:12::i;:::-;4636:7;4645:96;4684:15;4645:96;;;;;;;;;;;;;;;;;:11;:25;4657:12;:10;:12::i;:::-;4645:25;;;;;;;;;;;;;;;:34;4671:7;4645:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;4613:8;:129::i;:::-;4760:4;4753:11;;4503:269;;;;:::o;3405:175::-;3491:4;3508:42;3518:12;:10;:12::i;:::-;3532:9;3543:6;3508:9;:42::i;:::-;3568:4;3561:11;;3405:175;;;;:::o;18758:208::-;8543:12;:10;:12::i;:::-;8533:22;;:6;;;;;;;;;;;:22;;;8525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18895:15:::1;;;;;;;;;;;18852:59;;18875:18;18852:59;;;;;;;;;;;;18940:18;18922:15;;:36;;;;;;;;;;;;;;;;;;18758:208:::0;:::o;12677:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;11536:33::-;;;;;;;;;;;;;:::o;18120:182::-;8543:12;:10;:12::i;:::-;8533:22;;:6;;;;;;;;;;;:22;;;8525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18236:8:::1;18205:19;:28;18225:7;18205:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;18276:7;18260:34;;;18285:8;18260:34;;;;;;:::i;:::-;;;;;;;;18120:182:::0;;:::o;17734:378::-;8543:12;:10;:12::i;:::-;8533:22;;:6;;;;;;;;;;;:22;;;8525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17870:13:::1;17851:16;:32;;;;17913:13;17894:16;:32;;;;17950:7;17937:10;:20;;;;18022:10;;18003:16;;17984;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;17968:13;:64;;;;18068:2;18051:13;;:19;;18043:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;17734:378:::0;;;:::o;16769:215::-;8543:12;:10;:12::i;:::-;8533:22;;:6;;;;;;;;;;;:22;;;8525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16891:4:::1;16885;16881:1;16865:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;16864:31;;;;:::i;:::-;16854:6;:41;;16846:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;16969:6;16959;:17;;;;:::i;:::-;16947:9;:29;;;;16769:215:::0;:::o;11852:39::-;;;;;;;;;;;;;:::o;11381:35::-;;;;:::o;16137:378::-;16218:4;8543:12;:10;:12::i;:::-;8533:22;;:6;;;;;;;;;;;:22;;;8525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16274:6:::1;16270:1;16254:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;16241:9;:39;;16233:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;16389:3;16385:1;16369:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;16356:9;:36;;16348:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;16478:9;16457:18;:30;;;;16504:4;16497:11;;16137:378:::0;;;:::o;11900:27::-;;;;:::o;3586:151::-;3675:7;3702:11;:18;3714:5;3702:18;;;;;;;;;;;;;;;:27;3721:7;3702:27;;;;;;;;;;;;;;;;3695:34;;3586:151;;;;:::o;11423:33::-;;;;:::o;15928:134::-;15988:4;8543:12;:10;:12::i;:::-;8533:22;;:6;;;;;;;;;;;:22;;;8525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16027:5:::1;16004:20;;:28;;;;;;;;;;;;;;;;;;16050:4;16043:11;;15928:134:::0;:::o;11971:30::-;;;;:::o;8772:244::-;8543:12;:10;:12::i;:::-;8533:22;;:6;;;;;;;;;;;:22;;;8525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8881:1:::1;8861:22;;:8;:22;;::::0;8853:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;8971:8;8942:38;;8963:6;;;;;;;;;;;8942:38;;;;;;;;;;;;9000:8;8991:6;;:17;;;;;;;;;;;;;;;;;;8772:244:::0;:::o;12118:31::-;;;;:::o;11463:24::-;;;;:::o;11799:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;6693:179::-;6751:7;6771:9;6787:1;6783;:5;;;;:::i;:::-;6771:17;;6812:1;6807;:6;;6799:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;6863:1;6856:8;;;6693:179;;;;:::o;996:98::-;1049:7;1076:10;1069:17;;996:98;:::o;6153:378::-;6306:1;6289:19;;:5;:19;;;6281:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6387:1;6368:21;;:7;:21;;;6360:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6469:6;6439:11;:18;6451:5;6439:18;;;;;;;;;;;;;;;:27;6458:7;6439:27;;;;;;;;;;;;;;;:36;;;;6507:7;6491:32;;6500:5;6491:32;;;6516:6;6491:32;;;;;;:::i;:::-;;;;;;;;6153:378;;;:::o;19485:4174::-;19633:1;19617:18;;:4;:18;;;19609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19710:1;19696:16;;:2;:16;;;19688:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;19772:13;:19;19786:4;19772:19;;;;;;;;;;;;;;;;;;;;;;;;;19771:20;:42;;;;;19796:13;:17;19810:2;19796:17;;;;;;;;;;;;;;;;;;;;;;;;;19795:18;19771:42;19763:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;19863:1;19853:6;:11;19850:92;;19881:28;19897:4;19903:2;19907:1;19881:15;:28::i;:::-;19924:7;;19850:92;19965:14;;;;;;;;;;;19962:1841;;;20025:7;:5;:7::i;:::-;20017:15;;:4;:15;;;;:49;;;;;20059:7;:5;:7::i;:::-;20053:13;;:2;:13;;;;20017:49;:86;;;;;20101:1;20087:16;;:2;:16;;;;20017:86;:128;;;;;20138:6;20124:21;;:2;:21;;;;20017:128;:158;;;;;20167:8;;;;;;;;;;;20166:9;20017:158;19995:1797;;;20213:13;;;;;;;;;;;20209:148;;20258:19;:25;20278:4;20258:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;20287:19;:23;20307:2;20287:23;;;;;;;;;;;;;;;;;;;;;;;;;20258:52;20250:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;20209:148;20515:20;;;;;;;;;;;20511:423;;;20569:7;:5;:7::i;:::-;20563:13;;:2;:13;;;;:47;;;;;20594:15;20580:30;;:2;:30;;;;20563:47;:79;;;;;20628:13;20614:28;;:2;:28;;;;20563:79;20559:356;;;20720:12;20678:28;:39;20707:9;20678:39;;;;;;;;;;;;;;;;:54;20670:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;20879:12;20837:28;:39;20866:9;20837:39;;;;;;;;;;;;;;;:54;;;;20559:356;20511:423;21003:25;:31;21029:4;21003:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;21039:31;:35;21071:2;21039:35;;;;;;;;;;;;;;;;;;;;;;;;;21038:36;21003:71;20999:778;;;21121:20;;21111:6;:30;;21103:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;21260:9;;21243:13;21253:2;21243:9;:13::i;:::-;21234:6;:22;;;;:::i;:::-;:35;;21226:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20999:778;;;21387:25;:29;21413:2;21387:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;21421:31;:37;21453:4;21421:37;;;;;;;;;;;;;;;;;;;;;;;;;21420:38;21387:71;21383:394;;;21505:20;;21495:6;:30;;21487:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;21383:394;;;21631:31;:35;21663:2;21631:35;;;;;;;;;;;;;;;;;;;;;;;;;21627:150;;21724:9;;21707:13;21717:2;21707:9;:13::i;:::-;21698:6;:22;;;;:::i;:::-;:35;;21690:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21627:150;21383:394;20999:778;19995:1797;19962:1841;21817:28;21848:24;21866:4;21848:9;:24::i;:::-;21817:55;;21893:12;21932:18;;21908:20;:42;;21893:57;;21981:7;:35;;;;;22005:11;;;;;;;;;;;21981:35;:61;;;;;22034:8;;;;;;;;;;;22033:9;21981:61;:110;;;;;22060:25;:31;22086:4;22060:31;;;;;;;;;;;;;;;;;;;;;;;;;22059:32;21981:110;:153;;;;;22109:19;:25;22129:4;22109:25;;;;;;;;;;;;;;;;;;;;;;;;;22108:26;21981:153;:194;;;;;22152:19;:23;22172:2;22152:23;;;;;;;;;;;;;;;;;;;;;;;;;22151:24;21981:194;21963:338;;;22213:4;22202:8;;:15;;;;;;;;;;;;;;;;;;22246:10;:8;:10::i;:::-;22284:5;22273:8;;:16;;;;;;;;;;;;;;;;;;21963:338;22313:12;22329:8;;;;;;;;;;;22328:9;22313:24;;22438:19;:25;22458:4;22438:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;22467:19;:23;22487:2;22467:23;;;;;;;;;;;;;;;;;;;;;;;;;22438:52;22435:99;;;22517:5;22507:15;;22435:99;22554:12;22658:7;22655:951;;;22709:25;:29;22735:2;22709:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;22758:1;22742:13;;:17;22709:50;22705:732;;;22809:3;22795:13;;22786:6;:22;;;;:::i;:::-;:26;;;;:::i;:::-;22779:33;;22879:13;;22860:16;;22853:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;22831:18;;:61;;;;;;;:::i;:::-;;;;;;;;22947:13;;22934:10;;22927:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;22911:12;;:49;;;;;;;:::i;:::-;;;;;;;;23027:13;;23008:16;;23001:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;22979:18;;:61;;;;;;;:::i;:::-;;;;;;;;22705:732;;;23101:25;:31;23127:4;23101:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;23151:1;23136:12;;:16;23101:51;23098:339;;;23199:3;23186:12;;23177:6;:21;;;;:::i;:::-;:25;;;;:::i;:::-;23170:32;;23265:12;;23247:15;;23240:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;23218:18;;:59;;;;;;;:::i;:::-;;;;;;;;23331:12;;23319:9;;23312:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;23296:12;;:47;;;;;;;:::i;:::-;;;;;;;;23409:12;;23391:15;;23384:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;23362:18;;:59;;;;;;;:::i;:::-;;;;;;;;23098:339;22705:732;23475:1;23468:4;:8;23465:93;;;23500:42;23516:4;23530;23537;23500:15;:42::i;:::-;23465:93;23590:4;23580:14;;;;;:::i;:::-;;;22655:951;23618:33;23634:4;23640:2;23644:6;23618:15;:33::i;:::-;19598:4061;;;;19485:4174;;;;:::o;7020:190::-;7106:7;7139:1;7134;:6;;7142:12;7126:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7166:9;7182:1;7178;:5;;;;:::i;:::-;7166:17;;7201:1;7194:8;;;7020:190;;;;;:::o;18562:188::-;18679:5;18645:25;:31;18671:4;18645:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;18736:5;18702:40;;18730:4;18702:40;;;;;;;;;;;;18562:188;;:::o;4778:569::-;4936:1;4918:20;;:6;:20;;;4910:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5020:1;4999:23;;:9;:23;;;4991:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5073:47;5094:6;5102:9;5113:6;5073:20;:47::i;:::-;5151:71;5173:6;5151:71;;;;;;;;;;;;;;;;;:9;:17;5161:6;5151:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;5131:9;:17;5141:6;5131:17;;;;;;;;;;;;;;;:91;;;;5256:32;5281:6;5256:9;:20;5266:9;5256:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;5233:9;:20;5243:9;5233:20;;;;;;;;;;;;;;;:55;;;;5321:9;5304:35;;5313:6;5304:35;;;5332:6;5304:35;;;;;;:::i;:::-;;;;;;;;4778:569;;;:::o;24817:1463::-;24856:23;24882:24;24900:4;24882:9;:24::i;:::-;24856:50;;24917:25;24987:12;;24966:18;;24945;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;24917:82;;25010:12;25057:1;25038:15;:20;:46;;;;25083:1;25062:17;:22;25038:46;25035:60;;;25087:7;;;;;25035:60;25147:2;25126:18;;:23;;;;:::i;:::-;25108:15;:41;25105:111;;;25202:2;25181:18;;:23;;;;:::i;:::-;25163:41;;25105:111;25226:23;25311:1;25291:17;25270:18;;25252:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;25226:86;;25323:26;25370:15;25352;:33;;;;:::i;:::-;25323:62;;25396:25;25424:21;25396:49;;25456:36;25473:18;25456:16;:36::i;:::-;25504:18;25549:17;25525:21;:41;;;;:::i;:::-;25504:62;;25577:23;25635:17;25616:18;;25603:10;:31;;;;:::i;:::-;:49;;;;:::i;:::-;25577:75;;25663:17;25709;25696:12;;25683:10;:25;;;;:::i;:::-;:43;;;;:::i;:::-;25663:63;;25737:23;25794:9;25776:15;25763:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;25737:66;;25835:1;25814:18;:22;;;;25868:1;25847:18;:22;;;;25895:1;25880:12;:16;;;;25928:9;;;;;;;;;;;25920:23;;25951:9;25920:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25907:58;;;;;25997:1;25979:15;:19;:42;;;;;26020:1;26002:15;:19;25979:42;25976:210;;;26037:46;26050:15;26067;26037:12;:46::i;:::-;26103:71;26118:18;26138:15;26155:18;;26103:71;;;;;;;;:::i;:::-;;;;;;;;25976:210;26217:15;;;;;;;;;;;26209:29;;26246:21;26209:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26196:76;;;;;24845:1435;;;;;;;;;;24817:1463;:::o;6537:125::-;;;;:::o;23667:601::-;23795:21;23833:1;23819:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23795:40;;23864:4;23846;23851:1;23846:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;23890:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23880:4;23885:1;23880:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;23925:62;23942:4;23957:15;23975:11;23925:8;:62::i;:::-;24026:15;:66;;;24107:11;24133:1;24177:4;24204;24224:15;24026:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23722:546;23667:601;:::o;24292:517::-;24440:62;24457:4;24472:15;24490:11;24440:8;:62::i;:::-;24545:15;:31;;;24584:9;24617:4;24637:11;24663:1;24706;11261:6;24775:15;24545:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24292:517;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:182::-;9674:34;9670:1;9662:6;9658:14;9651:58;9534:182;:::o;9722:366::-;9864:3;9885:67;9949:2;9944:3;9885:67;:::i;:::-;9878:74;;9961:93;10050:3;9961:93;:::i;:::-;10079:2;10074:3;10070:12;10063:19;;9722:366;;;:::o;10094:419::-;10260:4;10298:2;10287:9;10283:18;10275:26;;10347:9;10341:4;10337:20;10333:1;10322:9;10318:17;10311:47;10375:131;10501:4;10375:131;:::i;:::-;10367:139;;10094:419;;;:::o;10519:180::-;10567:77;10564:1;10557:88;10664:4;10661:1;10654:15;10688:4;10685:1;10678:15;10705:410;10745:7;10768:20;10786:1;10768:20;:::i;:::-;10763:25;;10802:20;10820:1;10802:20;:::i;:::-;10797:25;;10857:1;10854;10850:9;10879:30;10897:11;10879:30;:::i;:::-;10868:41;;11058:1;11049:7;11045:15;11042:1;11039:22;11019:1;11012:9;10992:83;10969:139;;11088:18;;:::i;:::-;10969:139;10753:362;10705:410;;;;:::o;11121:180::-;11169:77;11166:1;11159:88;11266:4;11263:1;11256:15;11290:4;11287:1;11280:15;11307:185;11347:1;11364:20;11382:1;11364:20;:::i;:::-;11359:25;;11398:20;11416:1;11398:20;:::i;:::-;11393:25;;11437:1;11427:35;;11442:18;;:::i;:::-;11427:35;11484:1;11481;11477:9;11472:14;;11307:185;;;;:::o;11498:234::-;11638:34;11634:1;11626:6;11622:14;11615:58;11707:17;11702:2;11694:6;11690:15;11683:42;11498:234;:::o;11738:366::-;11880:3;11901:67;11965:2;11960:3;11901:67;:::i;:::-;11894:74;;11977:93;12066:3;11977:93;:::i;:::-;12095:2;12090:3;12086:12;12079:19;;11738:366;;;:::o;12110:419::-;12276:4;12314:2;12303:9;12299:18;12291:26;;12363:9;12357:4;12353:20;12349:1;12338:9;12334:17;12327:47;12391:131;12517:4;12391:131;:::i;:::-;12383:139;;12110:419;;;:::o;12535:173::-;12675:25;12671:1;12663:6;12659:14;12652:49;12535:173;:::o;12714:366::-;12856:3;12877:67;12941:2;12936:3;12877:67;:::i;:::-;12870:74;;12953:93;13042:3;12953:93;:::i;:::-;13071:2;13066:3;13062:12;13055:19;;12714:366;;;:::o;13086:419::-;13252:4;13290:2;13279:9;13275:18;13267:26;;13339:9;13333:4;13329:20;13325:1;13314:9;13310:17;13303:47;13367:131;13493:4;13367:131;:::i;:::-;13359:139;;13086:419;;;:::o;13511:191::-;13551:3;13570:20;13588:1;13570:20;:::i;:::-;13565:25;;13604:20;13622:1;13604:20;:::i;:::-;13599:25;;13647:1;13644;13640:9;13633:16;;13668:3;13665:1;13662:10;13659:36;;;13675:18;;:::i;:::-;13659:36;13511:191;;;;:::o;13708:179::-;13848:31;13844:1;13836:6;13832:14;13825:55;13708:179;:::o;13893:366::-;14035:3;14056:67;14120:2;14115:3;14056:67;:::i;:::-;14049:74;;14132:93;14221:3;14132:93;:::i;:::-;14250:2;14245:3;14241:12;14234:19;;13893:366;;;:::o;14265:419::-;14431:4;14469:2;14458:9;14454:18;14446:26;;14518:9;14512:4;14508:20;14504:1;14493:9;14489:17;14482:47;14546:131;14672:4;14546:131;:::i;:::-;14538:139;;14265:419;;;:::o;14690:244::-;14830:34;14826:1;14818:6;14814:14;14807:58;14899:27;14894:2;14886:6;14882:15;14875:52;14690:244;:::o;14940:366::-;15082:3;15103:67;15167:2;15162:3;15103:67;:::i;:::-;15096:74;;15179:93;15268:3;15179:93;:::i;:::-;15297:2;15292:3;15288:12;15281:19;;14940:366;;;:::o;15312:419::-;15478:4;15516:2;15505:9;15501:18;15493:26;;15565:9;15559:4;15555:20;15551:1;15540:9;15536:17;15529:47;15593:131;15719:4;15593:131;:::i;:::-;15585:139;;15312:419;;;:::o;15737:223::-;15877:34;15873:1;15865:6;15861:14;15854:58;15946:6;15941:2;15933:6;15929:15;15922:31;15737:223;:::o;15966:366::-;16108:3;16129:67;16193:2;16188:3;16129:67;:::i;:::-;16122:74;;16205:93;16294:3;16205:93;:::i;:::-;16323:2;16318:3;16314:12;16307:19;;15966:366;;;:::o;16338:419::-;16504:4;16542:2;16531:9;16527:18;16519:26;;16591:9;16585:4;16581:20;16577:1;16566:9;16562:17;16555:47;16619:131;16745:4;16619:131;:::i;:::-;16611:139;;16338:419;;;:::o;16763:240::-;16903:34;16899:1;16891:6;16887:14;16880:58;16972:23;16967:2;16959:6;16955:15;16948:48;16763:240;:::o;17009:366::-;17151:3;17172:67;17236:2;17231:3;17172:67;:::i;:::-;17165:74;;17248:93;17337:3;17248:93;:::i;:::-;17366:2;17361:3;17357:12;17350:19;;17009:366;;;:::o;17381:419::-;17547:4;17585:2;17574:9;17570:18;17562:26;;17634:9;17628:4;17624:20;17620:1;17609:9;17605:17;17598:47;17662:131;17788:4;17662:131;:::i;:::-;17654:139;;17381:419;;;:::o;17806:237::-;17946:34;17942:1;17934:6;17930:14;17923:58;18015:20;18010:2;18002:6;17998:15;17991:45;17806:237;:::o;18049:366::-;18191:3;18212:67;18276:2;18271:3;18212:67;:::i;:::-;18205:74;;18288:93;18377:3;18288:93;:::i;:::-;18406:2;18401:3;18397:12;18390:19;;18049:366;;;:::o;18421:419::-;18587:4;18625:2;18614:9;18610:18;18602:26;;18674:9;18668:4;18664:20;18660:1;18649:9;18645:17;18638:47;18702:131;18828:4;18702:131;:::i;:::-;18694:139;;18421:419;;;:::o;18846:225::-;18986:34;18982:1;18974:6;18970:14;18963:58;19055:8;19050:2;19042:6;19038:15;19031:33;18846:225;:::o;19077:366::-;19219:3;19240:67;19304:2;19299:3;19240:67;:::i;:::-;19233:74;;19316:93;19405:3;19316:93;:::i;:::-;19434:2;19429:3;19425:12;19418:19;;19077:366;;;:::o;19449:419::-;19615:4;19653:2;19642:9;19638:18;19630:26;;19702:9;19696:4;19692:20;19688:1;19677:9;19673:17;19666:47;19730:131;19856:4;19730:131;:::i;:::-;19722:139;;19449:419;;;:::o;19874:177::-;20014:29;20010:1;20002:6;19998:14;19991:53;19874:177;:::o;20057:366::-;20199:3;20220:67;20284:2;20279:3;20220:67;:::i;:::-;20213:74;;20296:93;20385:3;20296:93;:::i;:::-;20414:2;20409:3;20405:12;20398:19;;20057:366;;;:::o;20429:419::-;20595:4;20633:2;20622:9;20618:18;20610:26;;20682:9;20676:4;20672:20;20668:1;20657:9;20653:17;20646:47;20710:131;20836:4;20710:131;:::i;:::-;20702:139;;20429:419;;;:::o;20854:223::-;20994:34;20990:1;20982:6;20978:14;20971:58;21063:6;21058:2;21050:6;21046:15;21039:31;20854:223;:::o;21083:366::-;21225:3;21246:67;21310:2;21305:3;21246:67;:::i;:::-;21239:74;;21322:93;21411:3;21322:93;:::i;:::-;21440:2;21435:3;21431:12;21424:19;;21083:366;;;:::o;21455:419::-;21621:4;21659:2;21648:9;21644:18;21636:26;;21708:9;21702:4;21698:20;21694:1;21683:9;21679:17;21672:47;21736:131;21862:4;21736:131;:::i;:::-;21728:139;;21455:419;;;:::o;21880:221::-;22020:34;22016:1;22008:6;22004:14;21997:58;22089:4;22084:2;22076:6;22072:15;22065:29;21880:221;:::o;22107:366::-;22249:3;22270:67;22334:2;22329:3;22270:67;:::i;:::-;22263:74;;22346:93;22435:3;22346:93;:::i;:::-;22464:2;22459:3;22455:12;22448:19;;22107:366;;;:::o;22479:419::-;22645:4;22683:2;22672:9;22668:18;22660:26;;22732:9;22726:4;22722:20;22718:1;22707:9;22703:17;22696:47;22760:131;22886:4;22760:131;:::i;:::-;22752:139;;22479:419;;;:::o;22904:224::-;23044:34;23040:1;23032:6;23028:14;23021:58;23113:7;23108:2;23100:6;23096:15;23089:32;22904:224;:::o;23134:366::-;23276:3;23297:67;23361:2;23356:3;23297:67;:::i;:::-;23290:74;;23373:93;23462:3;23373:93;:::i;:::-;23491:2;23486:3;23482:12;23475:19;;23134:366;;;:::o;23506:419::-;23672:4;23710:2;23699:9;23695:18;23687:26;;23759:9;23753:4;23749:20;23745:1;23734:9;23730:17;23723:47;23787:131;23913:4;23787:131;:::i;:::-;23779:139;;23506:419;;;:::o;23931:222::-;24071:34;24067:1;24059:6;24055:14;24048:58;24140:5;24135:2;24127:6;24123:15;24116:30;23931:222;:::o;24159:366::-;24301:3;24322:67;24386:2;24381:3;24322:67;:::i;:::-;24315:74;;24398:93;24487:3;24398:93;:::i;:::-;24516:2;24511:3;24507:12;24500:19;;24159:366;;;:::o;24531:419::-;24697:4;24735:2;24724:9;24720:18;24712:26;;24784:9;24778:4;24774:20;24770:1;24759:9;24755:17;24748:47;24812:131;24938:4;24812:131;:::i;:::-;24804:139;;24531:419;;;:::o;24956:161::-;25096:13;25092:1;25084:6;25080:14;25073:37;24956:161;:::o;25123:366::-;25265:3;25286:67;25350:2;25345:3;25286:67;:::i;:::-;25279:74;;25362:93;25451:3;25362:93;:::i;:::-;25480:2;25475:3;25471:12;25464:19;;25123:366;;;:::o;25495:419::-;25661:4;25699:2;25688:9;25684:18;25676:26;;25748:9;25742:4;25738:20;25734:1;25723:9;25719:17;25712:47;25776:131;25902:4;25776:131;:::i;:::-;25768:139;;25495:419;;;:::o;25920:172::-;26060:24;26056:1;26048:6;26044:14;26037:48;25920:172;:::o;26098:366::-;26240:3;26261:67;26325:2;26320:3;26261:67;:::i;:::-;26254:74;;26337:93;26426:3;26337:93;:::i;:::-;26455:2;26450:3;26446:12;26439:19;;26098:366;;;:::o;26470:419::-;26636:4;26674:2;26663:9;26659:18;26651:26;;26723:9;26717:4;26713:20;26709:1;26698:9;26694:17;26687:47;26751:131;26877:4;26751:131;:::i;:::-;26743:139;;26470:419;;;:::o;26895:297::-;27035:34;27031:1;27023:6;27019:14;27012:58;27104:34;27099:2;27091:6;27087:15;27080:59;27173:11;27168:2;27160:6;27156:15;27149:36;26895:297;:::o;27198:366::-;27340:3;27361:67;27425:2;27420:3;27361:67;:::i;:::-;27354:74;;27437:93;27526:3;27437:93;:::i;:::-;27555:2;27550:3;27546:12;27539:19;;27198:366;;;:::o;27570:419::-;27736:4;27774:2;27763:9;27759:18;27751:26;;27823:9;27817:4;27813:20;27809:1;27798:9;27794:17;27787:47;27851:131;27977:4;27851:131;:::i;:::-;27843:139;;27570:419;;;:::o;27995:240::-;28135:34;28131:1;28123:6;28119:14;28112:58;28204:23;28199:2;28191:6;28187:15;28180:48;27995:240;:::o;28241:366::-;28383:3;28404:67;28468:2;28463:3;28404:67;:::i;:::-;28397:74;;28480:93;28569:3;28480:93;:::i;:::-;28598:2;28593:3;28589:12;28582:19;;28241:366;;;:::o;28613:419::-;28779:4;28817:2;28806:9;28802:18;28794:26;;28866:9;28860:4;28856:20;28852:1;28841:9;28837:17;28830:47;28894:131;29020:4;28894:131;:::i;:::-;28886:139;;28613:419;;;:::o;29038:169::-;29178:21;29174:1;29166:6;29162:14;29155:45;29038:169;:::o;29213:366::-;29355:3;29376:67;29440:2;29435:3;29376:67;:::i;:::-;29369:74;;29452:93;29541:3;29452:93;:::i;:::-;29570:2;29565:3;29561:12;29554:19;;29213:366;;;:::o;29585:419::-;29751:4;29789:2;29778:9;29774:18;29766:26;;29838:9;29832:4;29828:20;29824:1;29813:9;29809:17;29802:47;29866:131;29992:4;29866:131;:::i;:::-;29858:139;;29585:419;;;:::o;30010:241::-;30150:34;30146:1;30138:6;30134:14;30127:58;30219:24;30214:2;30206:6;30202:15;30195:49;30010:241;:::o;30257:366::-;30399:3;30420:67;30484:2;30479:3;30420:67;:::i;:::-;30413:74;;30496:93;30585:3;30496:93;:::i;:::-;30614:2;30609:3;30605:12;30598:19;;30257:366;;;:::o;30629:419::-;30795:4;30833:2;30822:9;30818:18;30810:26;;30882:9;30876:4;30872:20;30868:1;30857:9;30853:17;30846:47;30910:131;31036:4;30910:131;:::i;:::-;30902:139;;30629:419;;;:::o;31054:194::-;31094:4;31114:20;31132:1;31114:20;:::i;:::-;31109:25;;31148:20;31166:1;31148:20;:::i;:::-;31143:25;;31192:1;31189;31185:9;31177:17;;31216:1;31210:4;31207:11;31204:37;;;31221:18;;:::i;:::-;31204:37;31054:194;;;;:::o;31254:147::-;31355:11;31392:3;31377:18;;31254:147;;;;:::o;31407:114::-;;:::o;31527:398::-;31686:3;31707:83;31788:1;31783:3;31707:83;:::i;:::-;31700:90;;31799:93;31888:3;31799:93;:::i;:::-;31917:1;31912:3;31908:11;31901:18;;31527:398;;;:::o;31931:379::-;32115:3;32137:147;32280:3;32137:147;:::i;:::-;32130:154;;32301:3;32294:10;;31931:379;;;:::o;32316:442::-;32465:4;32503:2;32492:9;32488:18;32480:26;;32516:71;32584:1;32573:9;32569:17;32560:6;32516:71;:::i;:::-;32597:72;32665:2;32654:9;32650:18;32641:6;32597:72;:::i;:::-;32679;32747:2;32736:9;32732:18;32723:6;32679:72;:::i;:::-;32316:442;;;;;;:::o;32764:180::-;32812:77;32809:1;32802:88;32909:4;32906:1;32899:15;32933:4;32930:1;32923:15;32950:180;32998:77;32995:1;32988:88;33095:4;33092:1;33085:15;33119:4;33116:1;33109:15;33136:143;33193:5;33224:6;33218:13;33209:22;;33240:33;33267:5;33240:33;:::i;:::-;33136:143;;;;:::o;33285:351::-;33355:6;33404:2;33392:9;33383:7;33379:23;33375:32;33372:119;;;33410:79;;:::i;:::-;33372:119;33530:1;33555:64;33611:7;33602:6;33591:9;33587:22;33555:64;:::i;:::-;33545:74;;33501:128;33285:351;;;;:::o;33642:85::-;33687:7;33716:5;33705:16;;33642:85;;;:::o;33733:158::-;33791:9;33824:61;33842:42;33851:32;33877:5;33851:32;:::i;:::-;33842:42;:::i;:::-;33824:61;:::i;:::-;33811:74;;33733:158;;;:::o;33897:147::-;33992:45;34031:5;33992:45;:::i;:::-;33987:3;33980:58;33897:147;;:::o;34050:114::-;34117:6;34151:5;34145:12;34135:22;;34050:114;;;:::o;34170:184::-;34269:11;34303:6;34298:3;34291:19;34343:4;34338:3;34334:14;34319:29;;34170:184;;;;:::o;34360:132::-;34427:4;34450:3;34442:11;;34480:4;34475:3;34471:14;34463:22;;34360:132;;;:::o;34498:108::-;34575:24;34593:5;34575:24;:::i;:::-;34570:3;34563:37;34498:108;;:::o;34612:179::-;34681:10;34702:46;34744:3;34736:6;34702:46;:::i;:::-;34780:4;34775:3;34771:14;34757:28;;34612:179;;;;:::o;34797:113::-;34867:4;34899;34894:3;34890:14;34882:22;;34797:113;;;:::o;34946:732::-;35065:3;35094:54;35142:5;35094:54;:::i;:::-;35164:86;35243:6;35238:3;35164:86;:::i;:::-;35157:93;;35274:56;35324:5;35274:56;:::i;:::-;35353:7;35384:1;35369:284;35394:6;35391:1;35388:13;35369:284;;;35470:6;35464:13;35497:63;35556:3;35541:13;35497:63;:::i;:::-;35490:70;;35583:60;35636:6;35583:60;:::i;:::-;35573:70;;35429:224;35416:1;35413;35409:9;35404:14;;35369:284;;;35373:14;35669:3;35662:10;;35070:608;;;34946:732;;;;:::o;35684:831::-;35947:4;35985:3;35974:9;35970:19;35962:27;;35999:71;36067:1;36056:9;36052:17;36043:6;35999:71;:::i;:::-;36080:80;36156:2;36145:9;36141:18;36132:6;36080:80;:::i;:::-;36207:9;36201:4;36197:20;36192:2;36181:9;36177:18;36170:48;36235:108;36338:4;36329:6;36235:108;:::i;:::-;36227:116;;36353:72;36421:2;36410:9;36406:18;36397:6;36353:72;:::i;:::-;36435:73;36503:3;36492:9;36488:19;36479:6;36435:73;:::i;:::-;35684:831;;;;;;;;:::o;36521:807::-;36770:4;36808:3;36797:9;36793:19;36785:27;;36822:71;36890:1;36879:9;36875:17;36866:6;36822:71;:::i;:::-;36903:72;36971:2;36960:9;36956:18;36947:6;36903:72;:::i;:::-;36985:80;37061:2;37050:9;37046:18;37037:6;36985:80;:::i;:::-;37075;37151:2;37140:9;37136:18;37127:6;37075:80;:::i;:::-;37165:73;37233:3;37222:9;37218:19;37209:6;37165:73;:::i;:::-;37248;37316:3;37305:9;37301:19;37292:6;37248:73;:::i;:::-;36521:807;;;;;;;;;:::o;37334:143::-;37391:5;37422:6;37416:13;37407:22;;37438:33;37465:5;37438:33;:::i;:::-;37334:143;;;;:::o;37483:663::-;37571:6;37579;37587;37636:2;37624:9;37615:7;37611:23;37607:32;37604:119;;;37642:79;;:::i;:::-;37604:119;37762:1;37787:64;37843:7;37834:6;37823:9;37819:22;37787:64;:::i;:::-;37777:74;;37733:128;37900:2;37926:64;37982:7;37973:6;37962:9;37958:22;37926:64;:::i;:::-;37916:74;;37871:129;38039:2;38065:64;38121:7;38112:6;38101:9;38097:22;38065:64;:::i;:::-;38055:74;;38010:129;37483:663;;;;;:::o

Swarm Source

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