ETH Price: $2,731.10 (-4.27%)

Token

Nichibotsu (SUNSET)
 

Overview

Max Total Supply

1,000,000,000 SUNSET

Holders

24

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

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:
Nichibotsu

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-29
*/

/**
Nichibotsu (SUNSET)
3/3 tax: 1% lp, 2% marketing
@SunsetERC
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.11;

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

    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;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        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 addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract Nichibotsu is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    mapping (address => bool) private _isSniper;
    bool private _swapping;
    uint256 private _launchTime;

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

    uint256 public buyTotalFees;
    uint256 private _buyMarketingFee;
    uint256 private _buyLiquidityFee;
    
    uint256 public sellTotalFees;
    uint256 private _sellMarketingFee;
    uint256 private _sellLiquidityFee;
    
    uint256 private _tokensForMarketing;
    uint256 private _tokensForLiquidity;
    
    // exclude 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 feeWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);
    event AutoNukeLP();
    event ManualNukeLP();

    constructor() ERC20("Nichibotsu", "SUNSET") {
        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 = 2;
        uint256 buyLiquidityFee = 1;

        uint256 sellMarketingFee = 2;
        uint256 sellLiquidityFee = 1;
        
        uint256 totalSupply = 1e9 * 1e9;
        
        maxTransactionAmount = totalSupply * 2 / 100; // 2% maxTransactionAmountTxn
        maxWallet = totalSupply * 2 / 100; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 3 / 1000;

        _buyMarketingFee = buyMarketingFee;
        _buyLiquidityFee = buyLiquidityFee;
        buyTotalFees = _buyMarketingFee + _buyLiquidityFee;
        
        _sellMarketingFee = sellMarketingFee;
        _sellLiquidityFee = sellLiquidityFee;
        sellTotalFees = _sellMarketingFee + _sellLiquidityFee;
        
        feeWallet = address(owner()); // set as fee wallet

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

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        _launchTime = block.timestamp;
    }
    
    // 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() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / 1e9, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * 1e9;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e9, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * 1e9;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    function updateBuyFees(uint256 marketingFee, uint256 liquidityFee) external onlyOwner {
        _buyMarketingFee = marketingFee;
        _buyLiquidityFee = liquidityFee;
        buyTotalFees = _buyMarketingFee + _buyLiquidityFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }
    
    function updateSellFees(uint256 marketingFee, uint256 liquidityFee) external onlyOwner {
        _sellMarketingFee = marketingFee;
        _sellLiquidityFee = liquidityFee;
        sellTotalFees = _sellMarketingFee + _sellLiquidityFee;
        require(sellTotalFees <= 15, "Must keep fees at 15% 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 updateFeeWallet(address newWallet) external onlyOwner {
        emit feeWalletUpdated(newWallet, feeWallet);
        feeWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function setSnipers(address[] memory snipers_) public onlyOwner() {
        for (uint i = 0; i < snipers_.length; i++) {
            if (snipers_[i] != uniswapV2Pair && snipers_[i] != address(uniswapV2Router)) {
                _isSniper[snipers_[i]] = true;
            }
        }
    }
    
    function delSnipers(address[] memory snipers_) public onlyOwner() {
        for (uint i = 0; i < snipers_.length; i++) {
            _isSniper[snipers_[i]] = false;
        }
    }
    
    function isSniper(address addr) public view returns (bool) {
        return _isSniper[addr];
    }

    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(!_isSniper[from], "Your address has been marked as a sniper, you are unable to transfer or swap.");
        
         if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if (block.timestamp == _launchTime) _isSniper[to] = true;
        
        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 &&
            !_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.mul(sellTotalFees).div(100);
                _tokensForLiquidity += fees * _sellLiquidityFee / sellTotalFees;
                _tokensForMarketing += fees * _sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    _tokensForLiquidity += fees * _buyLiquidityFee / 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
            owner(),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForMarketing;
        
        if (contractBalance == 0 || totalTokensToSwap == 0) return;
        if (contractBalance > swapTokensAtAmount * 20) {
          contractBalance = swapTokensAtAmount * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * _tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        _swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing;
        
        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;
                
        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, _tokensForLiquidity);
        }
    }

    function withdrawFees() external {
        payable(feeWallet).transfer(address(this).balance);
    }

    receive() external payable {}
}

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":[],"name":"AutoNukeLP","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":[],"name":"ManualNukeLP","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":"feeWalletUpdated","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":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address[]","name":"snipers_","type":"address[]"}],"name":"delSnipers","outputs":[],"stateMutability":"nonpayable","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":[],"name":"feeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"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":[{"internalType":"address[]","name":"snipers_","type":"address[]"}],"name":"setSnipers","outputs":[],"stateMutability":"nonpayable","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":"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"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateFeeWallet","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"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600d60006101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200004757600080fd5b506040518060400160405280600a81526020017f4e69636869626f747375000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f53554e53455400000000000000000000000000000000000000000000000000008152508160039080519060200190620000cc92919062000acc565b508060049080519060200190620000e592919062000acc565b5050506000620000fa6200059860201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001c5816001620005a060201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026b919062000be6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f9919062000be6565b6040518363ffffffff1660e01b81526004016200031892919062000c29565b6020604051808303816000875af115801562000338573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035e919062000be6565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003a660a0516001620005a060201b60201c565b620003bb60a05160016200069d60201b60201c565b6000600290506000600190506000600290506000600190506000670de0b6b3a764000090506064600282620003f1919062000c8f565b620003fd919062000d1f565b600a81905550606460028262000414919062000c8f565b62000420919062000d1f565b600c819055506103e860038262000438919062000c8f565b62000444919062000d1f565b600b8190555084601181905550836012819055506012546011546200046a919062000d57565b601081905550826014819055508160158190555060155460145462000490919062000d57565b601381905550620004a66200073e60201b60201c565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000508620004fa6200073e60201b60201c565b60016200076860201b60201c565b6200051b3060016200076860201b60201c565b6200053061dead60016200076860201b60201c565b62000552620005446200073e60201b60201c565b6001620005a060201b60201c565b62000565306001620005a060201b60201c565b6200057a61dead6001620005a060201b60201c565b6200058c3382620008b560201b60201c565b50505050505062000fe8565b600033905090565b620005b06200059860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000642576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006399062000e15565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007786200059860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200080a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008019062000e15565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008a9919062000e54565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000928576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200091f9062000ec1565b60405180910390fd5b6200093c6000838362000a6460201b60201c565b620009588160025462000a6960201b620024471790919060201c565b600281905550620009b6816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a6960201b620024471790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a58919062000ef4565b60405180910390a35050565b505050565b600080828462000a7a919062000d57565b90508381101562000ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ab99062000f61565b60405180910390fd5b8091505092915050565b82805462000ada9062000fb2565b90600052602060002090601f01602090048101928262000afe576000855562000b4a565b82601f1062000b1957805160ff191683800117855562000b4a565b8280016001018555821562000b4a579182015b8281111562000b4957825182559160200191906001019062000b2c565b5b50905062000b59919062000b5d565b5090565b5b8082111562000b7857600081600090555060010162000b5e565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bae8262000b81565b9050919050565b62000bc08162000ba1565b811462000bcc57600080fd5b50565b60008151905062000be08162000bb5565b92915050565b60006020828403121562000bff5762000bfe62000b7c565b5b600062000c0f8482850162000bcf565b91505092915050565b62000c238162000ba1565b82525050565b600060408201905062000c40600083018562000c18565b62000c4f602083018462000c18565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c9c8262000c56565b915062000ca98362000c56565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000ce55762000ce462000c60565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d2c8262000c56565b915062000d398362000c56565b92508262000d4c5762000d4b62000cf0565b5b828204905092915050565b600062000d648262000c56565b915062000d718362000c56565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000da95762000da862000c60565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000dfd60208362000db4565b915062000e0a8262000dc5565b602082019050919050565b6000602082019050818103600083015262000e308162000dee565b9050919050565b60008115159050919050565b62000e4e8162000e37565b82525050565b600060208201905062000e6b600083018462000e43565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ea9601f8362000db4565b915062000eb68262000e71565b602082019050919050565b6000602082019050818103600083015262000edc8162000e9a565b9050919050565b62000eee8162000c56565b82525050565b600060208201905062000f0b600083018462000ee3565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000f49601b8362000db4565b915062000f568262000f11565b602082019050919050565b6000602082019050818103600083015262000f7c8162000f3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fcb57607f821691505b6020821081141562000fe25762000fe162000f83565b5b50919050565b60805160a0516154236200105460003960008181610fde0152818161110e01528181611b620152612b20015260008181610c8e0152818161117f01528181612ac801528181613a4d01528181613b2e01528181613b5501528181613bf10152613c1801526154236000f3fe60806040526004361061026b5760003560e01c80637571336a11610144578063c18bc195116100b6578063dd62ed3e1161007a578063dd62ed3e1461094f578063e2f456051461098c578063e884f260146109b7578063f25f4b56146109e2578063f2fde38b14610a0d578063f8b45b0514610a3657610272565b8063c18bc19514610868578063c876d0b914610891578063c8c8ebe4146108bc578063d257b34f146108e7578063d85ba0631461092457610272565b80639a7a23d6116101085780639a7a23d614610734578063a457c2d71461075d578063a9059cbb1461079a578063b62496f5146107d7578063bbc0c74214610814578063c02466681461083f57610272565b80637571336a14610675578063892ba4081461069e5780638a8c523c146106c75780638da5cb5b146106de57806395d89b411461070957610272565b8063476343ee116101dd57806366718524116101a1578063667185241461057957806366ca9b83146105a25780636a486a8e146105cb57806370a08231146105f6578063715018a614610633578063751039fc1461064a57610272565b8063476343ee146104a657806349bd5a5e146104bd5780634a62bb65146104e85780634fbee193146105135780635e80148e1461055057610272565b80631694505e1161022f5780631694505e1461038257806318160ddd146103ad578063203e727e146103d857806323b872dd14610401578063313ce5671461043e578063395093511461046957610272565b806302dbd8f81461027757806306fdde03146102a0578063095ea7b3146102cb5780630f3a325f1461030857806310d5de531461034557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613d79565b610a61565b005b3480156102ac57600080fd5b506102b5610b66565b6040516102c29190613e52565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed9190613ed2565b610bf8565b6040516102ff9190613f2d565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613f48565b610c16565b60405161033c9190613f2d565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190613f48565b610c6c565b6040516103799190613f2d565b60405180910390f35b34801561038e57600080fd5b50610397610c8c565b6040516103a49190613fd4565b60405180910390f35b3480156103b957600080fd5b506103c2610cb0565b6040516103cf9190613ffe565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190614019565b610cba565b005b34801561040d57600080fd5b5061042860048036038101906104239190614046565b610ddc565b6040516104359190613f2d565b60405180910390f35b34801561044a57600080fd5b50610453610eb5565b60405161046091906140b5565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190613ed2565b610ebe565b60405161049d9190613f2d565b60405180910390f35b3480156104b257600080fd5b506104bb610f71565b005b3480156104c957600080fd5b506104d2610fdc565b6040516104df91906140df565b60405180910390f35b3480156104f457600080fd5b506104fd611000565b60405161050a9190613f2d565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190613f48565b611013565b6040516105479190613f2d565b60405180910390f35b34801561055c57600080fd5b5061057760048036038101906105729190614242565b611069565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613f48565b611277565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190613d79565b6113ce565b005b3480156105d757600080fd5b506105e06114d3565b6040516105ed9190613ffe565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190613f48565b6114d9565b60405161062a9190613ffe565b60405180910390f35b34801561063f57600080fd5b50610648611521565b005b34801561065657600080fd5b5061065f611679565b60405161066c9190613f2d565b60405180910390f35b34801561068157600080fd5b5061069c600480360381019061069791906142b7565b611734565b005b3480156106aa57600080fd5b506106c560048036038101906106c09190614242565b611826565b005b3480156106d357600080fd5b506106dc611952565b005b3480156106ea57600080fd5b506106f3611a0d565b60405161070091906140df565b60405180910390f35b34801561071557600080fd5b5061071e611a37565b60405161072b9190613e52565b60405180910390f35b34801561074057600080fd5b5061075b600480360381019061075691906142b7565b611ac9565b005b34801561076957600080fd5b50610784600480360381019061077f9190613ed2565b611bfd565b6040516107919190613f2d565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc9190613ed2565b611cca565b6040516107ce9190613f2d565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f99190613f48565b611ce8565b60405161080b9190613f2d565b60405180910390f35b34801561082057600080fd5b50610829611d08565b6040516108369190613f2d565b60405180910390f35b34801561084b57600080fd5b50610866600480360381019061086191906142b7565b611d1b565b005b34801561087457600080fd5b5061088f600480360381019061088a9190614019565b611e5b565b005b34801561089d57600080fd5b506108a6611f7d565b6040516108b39190613f2d565b60405180910390f35b3480156108c857600080fd5b506108d1611f90565b6040516108de9190613ffe565b60405180910390f35b3480156108f357600080fd5b5061090e60048036038101906109099190614019565b611f96565b60405161091b9190613f2d565b60405180910390f35b34801561093057600080fd5b50610939612106565b6040516109469190613ffe565b60405180910390f35b34801561095b57600080fd5b50610976600480360381019061097191906142f7565b61210c565b6040516109839190613ffe565b60405180910390f35b34801561099857600080fd5b506109a1612193565b6040516109ae9190613ffe565b60405180910390f35b3480156109c357600080fd5b506109cc612199565b6040516109d99190613f2d565b60405180910390f35b3480156109ee57600080fd5b506109f7612254565b604051610a0491906140df565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190613f48565b61227a565b005b348015610a4257600080fd5b50610a4b612441565b604051610a589190613ffe565b60405180910390f35b610a696124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef90614383565b60405180910390fd5b8160148190555080601581905550601554601454610b1691906143d2565b601381905550600f6013541115610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5990614474565b60405180910390fd5b5050565b606060038054610b75906144c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba1906144c3565b8015610bee5780601f10610bc357610100808354040283529160200191610bee565b820191906000526020600020905b815481529060010190602001808311610bd157829003601f168201915b5050505050905090565b6000610c0c610c056124a5565b84846124ad565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610cc26124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4890614383565b60405180910390fd5b633b9aca006103e86001610d63610cb0565b610d6d91906144f5565b610d77919061457e565b610d81919061457e565b811015610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba90614621565b60405180910390fd5b633b9aca0081610dd391906144f5565b600a8190555050565b6000610de9848484612678565b610eaa84610df56124a5565b610ea5856040518060600160405280602881526020016153a160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e5b6124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6124ad565b600190509392505050565b60006009905090565b6000610f67610ecb6124a5565b84610f628560016000610edc6124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244790919063ffffffff16565b6124ad565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fd9573d6000803e3d6000fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110716124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790614383565b60405180910390fd5b60005b8151811015611273577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1682828151811061115657611155614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156111e857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168282815181106111c7576111c6614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b156112605760016006600084848151811061120657611205614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b808061126b90614670565b915050611103565b5050565b61127f6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130590614383565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113d66124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c90614383565b60405180910390fd5b816011819055508060128190555060125460115461148391906143d2565b601081905550600a60105411156114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c690614705565b60405180910390fd5b5050565b60135481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115296124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af90614383565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006116836124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170990614383565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b61173c6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c290614383565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61182e6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490614383565b60405180910390fd5b60005b815181101561194e576000600660008484815181106118e2576118e1614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061194690614670565b9150506118c0565b5050565b61195a6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e090614383565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555042600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611a46906144c3565b80601f0160208091040260200160405190810160405280929190818152602001828054611a72906144c3565b8015611abf5780601f10611a9457610100808354040283529160200191611abf565b820191906000526020600020905b815481529060010190602001808311611aa257829003601f168201915b5050505050905090565b611ad16124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5790614383565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be690614797565b60405180910390fd5b611bf982826133e8565b5050565b6000611cc0611c0a6124a5565b84611cbb856040518060600160405280602581526020016153c96025913960016000611c346124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6124ad565b6001905092915050565b6000611cde611cd76124a5565b8484612678565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611d236124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da990614383565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e4f9190613f2d565b60405180910390a25050565b611e636124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee990614383565b60405180910390fd5b633b9aca006103e86005611f04610cb0565b611f0e91906144f5565b611f18919061457e565b611f22919061457e565b811015611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b90614829565b60405180910390fd5b633b9aca0081611f7491906144f5565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b6000611fa06124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461202f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202690614383565b60405180910390fd5b620186a0600161203d610cb0565b61204791906144f5565b612051919061457e565b821015612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a906148bb565b60405180910390fd5b6103e860056120a0610cb0565b6120aa91906144f5565b6120b4919061457e565b8211156120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed9061494d565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b60006121a36124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222990614383565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122826124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890614383565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612381576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612378906149df565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b600080828461245691906143d2565b90508381101561249b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249290614a4b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561251d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251490614add565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561258d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258490614b6f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161266b9190613ffe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126df90614c01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274f90614c93565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dc90614d4b565b60405180910390fd5b60008114156127ff576127fa83836000613489565b61337f565b600854421415612862576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600d60009054906101000a900460ff1615612f255761287f611a0d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128ed57506128bd611a0d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129265750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612960575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129795750600760009054906101000a900460ff16155b15612f2457600d60019054906101000a900460ff16612a7357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a335750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6990614db7565b60405180910390fd5b5b600f60009054906101000a900460ff1615612c3b57612a90611a0d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b1757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b6f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c3a5743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bec90614e6f565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cde5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8557600a54811115612d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1f90614f01565b60405180910390fd5b600c54612d34836114d9565b82612d3f91906143d2565b1115612d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7790614f6d565b60405180910390fd5b612f23565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e285750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e7757600a54811115612e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6990614fff565b60405180910390fd5b612f22565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f2157600c54612ed4836114d9565b82612edf91906143d2565b1115612f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1790614f6d565b60405180910390fd5b5b5b5b5b5b6000612f30306114d9565b90506000600b548210159050808015612f565750600760009054906101000a900460ff16155b8015612fac5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130025750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130585750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561309c576001600760006101000a81548160ff02191690831515021790555061308061371e565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131525750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561315c57600090505b6000811561336f57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131bf57506000601354115b15613259576131ec60646131de6013548861389a90919063ffffffff16565b61391590919063ffffffff16565b9050601354601554826131ff91906144f5565b613209919061457e565b6017600082825461321a91906143d2565b925050819055506013546014548261323291906144f5565b61323c919061457e565b6016600082825461324d91906143d2565b9250508190555061334b565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132b457506000601054115b1561334a576132e160646132d36010548861389a90919063ffffffff16565b61391590919063ffffffff16565b9050601054601254826132f491906144f5565b6132fe919061457e565b6017600082825461330f91906143d2565b925050819055506010546011548261332791906144f5565b613331919061457e565b6016600082825461334291906143d2565b925050819055505b5b60008111156133605761335f873083613489565b5b808561336c919061501f565b94505b61337a878787613489565b505050505b505050565b60008383111582906133cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c39190613e52565b60405180910390fd5b50600083856133db919061501f565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f090614c01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356090614c93565b60405180910390fd5b61357483838361395f565b6135df8160405180606001604052806026815260200161537b602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613672816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137119190613ffe565b60405180910390a3505050565b6000613729306114d9565b9050600060165460175461373d91906143d2565b9050600082148061374e5750600081145b1561375a575050613898565b6014600b5461376991906144f5565b821115613782576014600b5461377f91906144f5565b91505b60006002826017548561379591906144f5565b61379f919061457e565b6137a9919061457e565b905060006137c0828561396490919063ffffffff16565b905060004790506137d0826139ae565b60006137e5824761396490919063ffffffff16565b90506000613810866138026016548561389a90919063ffffffff16565b61391590919063ffffffff16565b905060008183613820919061501f565b9050600060178190555060006016819055506000861180156138425750600081115b1561388f576138518682613beb565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260175460405161388693929190615053565b60405180910390a15b50505050505050505b565b6000808314156138ad576000905061390f565b600082846138bb91906144f5565b90508284826138ca919061457e565b1461390a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613901906150fc565b60405180910390fd5b809150505b92915050565b600061395783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ccc565b905092915050565b505050565b60006139a683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613384565b905092915050565b6000600267ffffffffffffffff8111156139cb576139ca6140ff565b5b6040519080825280602002602001820160405280156139f95781602001602082028036833780820191505090505b5090503081600081518110613a1157613a10614641565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ada9190615131565b81600181518110613aee57613aed614641565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b53307f0000000000000000000000000000000000000000000000000000000000000000846124ad565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bb5959493929190615257565b600060405180830381600087803b158015613bcf57600080fd5b505af1158015613be3573d6000803e3d6000fd5b505050505050565b613c16307f0000000000000000000000000000000000000000000000000000000000000000846124ad565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613c60611a0d565b426040518863ffffffff1660e01b8152600401613c82969594939291906152b1565b60606040518083038185885af1158015613ca0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613cc59190615327565b5050505050565b60008083118290613d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0a9190613e52565b60405180910390fd5b5060008385613d22919061457e565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613d5681613d43565b8114613d6157600080fd5b50565b600081359050613d7381613d4d565b92915050565b60008060408385031215613d9057613d8f613d39565b5b6000613d9e85828601613d64565b9250506020613daf85828601613d64565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613df3578082015181840152602081019050613dd8565b83811115613e02576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e2482613db9565b613e2e8185613dc4565b9350613e3e818560208601613dd5565b613e4781613e08565b840191505092915050565b60006020820190508181036000830152613e6c8184613e19565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e9f82613e74565b9050919050565b613eaf81613e94565b8114613eba57600080fd5b50565b600081359050613ecc81613ea6565b92915050565b60008060408385031215613ee957613ee8613d39565b5b6000613ef785828601613ebd565b9250506020613f0885828601613d64565b9150509250929050565b60008115159050919050565b613f2781613f12565b82525050565b6000602082019050613f426000830184613f1e565b92915050565b600060208284031215613f5e57613f5d613d39565b5b6000613f6c84828501613ebd565b91505092915050565b6000819050919050565b6000613f9a613f95613f9084613e74565b613f75565b613e74565b9050919050565b6000613fac82613f7f565b9050919050565b6000613fbe82613fa1565b9050919050565b613fce81613fb3565b82525050565b6000602082019050613fe96000830184613fc5565b92915050565b613ff881613d43565b82525050565b60006020820190506140136000830184613fef565b92915050565b60006020828403121561402f5761402e613d39565b5b600061403d84828501613d64565b91505092915050565b60008060006060848603121561405f5761405e613d39565b5b600061406d86828701613ebd565b935050602061407e86828701613ebd565b925050604061408f86828701613d64565b9150509250925092565b600060ff82169050919050565b6140af81614099565b82525050565b60006020820190506140ca60008301846140a6565b92915050565b6140d981613e94565b82525050565b60006020820190506140f460008301846140d0565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61413782613e08565b810181811067ffffffffffffffff82111715614156576141556140ff565b5b80604052505050565b6000614169613d2f565b9050614175828261412e565b919050565b600067ffffffffffffffff821115614195576141946140ff565b5b602082029050602081019050919050565b600080fd5b60006141be6141b98461417a565b61415f565b905080838252602082019050602084028301858111156141e1576141e06141a6565b5b835b8181101561420a57806141f68882613ebd565b8452602084019350506020810190506141e3565b5050509392505050565b600082601f830112614229576142286140fa565b5b81356142398482602086016141ab565b91505092915050565b60006020828403121561425857614257613d39565b5b600082013567ffffffffffffffff81111561427657614275613d3e565b5b61428284828501614214565b91505092915050565b61429481613f12565b811461429f57600080fd5b50565b6000813590506142b18161428b565b92915050565b600080604083850312156142ce576142cd613d39565b5b60006142dc85828601613ebd565b92505060206142ed858286016142a2565b9150509250929050565b6000806040838503121561430e5761430d613d39565b5b600061431c85828601613ebd565b925050602061432d85828601613ebd565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061436d602083613dc4565b915061437882614337565b602082019050919050565b6000602082019050818103600083015261439c81614360565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143dd82613d43565b91506143e883613d43565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561441d5761441c6143a3565b5b828201905092915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b600061445e601d83613dc4565b915061446982614428565b602082019050919050565b6000602082019050818103600083015261448d81614451565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144db57607f821691505b602082108114156144ef576144ee614494565b5b50919050565b600061450082613d43565b915061450b83613d43565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614544576145436143a3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061458982613d43565b915061459483613d43565b9250826145a4576145a361454f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061460b602f83613dc4565b9150614616826145af565b604082019050919050565b6000602082019050818103600083015261463a816145fe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061467b82613d43565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146ae576146ad6143a3565b5b600182019050919050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006146ef601d83613dc4565b91506146fa826146b9565b602082019050919050565b6000602082019050818103600083015261471e816146e2565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614781603983613dc4565b915061478c82614725565b604082019050919050565b600060208201905081810360008301526147b081614774565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614813602483613dc4565b915061481e826147b7565b604082019050919050565b6000602082019050818103600083015261484281614806565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006148a5603583613dc4565b91506148b082614849565b604082019050919050565b600060208201905081810360008301526148d481614898565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614937603483613dc4565b9150614942826148db565b604082019050919050565b600060208201905081810360008301526149668161492a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006149c9602683613dc4565b91506149d48261496d565b604082019050919050565b600060208201905081810360008301526149f8816149bc565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614a35601b83613dc4565b9150614a40826149ff565b602082019050919050565b60006020820190508181036000830152614a6481614a28565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ac7602483613dc4565b9150614ad282614a6b565b604082019050919050565b60006020820190508181036000830152614af681614aba565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b59602283613dc4565b9150614b6482614afd565b604082019050919050565b60006020820190508181036000830152614b8881614b4c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614beb602583613dc4565b9150614bf682614b8f565b604082019050919050565b60006020820190508181036000830152614c1a81614bde565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c7d602383613dc4565b9150614c8882614c21565b604082019050919050565b60006020820190508181036000830152614cac81614c70565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614d35604d83613dc4565b9150614d4082614cb3565b606082019050919050565b60006020820190508181036000830152614d6481614d28565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614da1601683613dc4565b9150614dac82614d6b565b602082019050919050565b60006020820190508181036000830152614dd081614d94565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614e59604983613dc4565b9150614e6482614dd7565b606082019050919050565b60006020820190508181036000830152614e8881614e4c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614eeb603583613dc4565b9150614ef682614e8f565b604082019050919050565b60006020820190508181036000830152614f1a81614ede565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f57601383613dc4565b9150614f6282614f21565b602082019050919050565b60006020820190508181036000830152614f8681614f4a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614fe9603683613dc4565b9150614ff482614f8d565b604082019050919050565b6000602082019050818103600083015261501881614fdc565b9050919050565b600061502a82613d43565b915061503583613d43565b925082821015615048576150476143a3565b5b828203905092915050565b60006060820190506150686000830186613fef565b6150756020830185613fef565b6150826040830184613fef565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006150e6602183613dc4565b91506150f18261508a565b604082019050919050565b60006020820190508181036000830152615115816150d9565b9050919050565b60008151905061512b81613ea6565b92915050565b60006020828403121561514757615146613d39565b5b60006151558482850161511c565b91505092915050565b6000819050919050565b600061518361517e6151798461515e565b613f75565b613d43565b9050919050565b61519381615168565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151ce81613e94565b82525050565b60006151e083836151c5565b60208301905092915050565b6000602082019050919050565b600061520482615199565b61520e81856151a4565b9350615219836151b5565b8060005b8381101561524a57815161523188826151d4565b975061523c836151ec565b92505060018101905061521d565b5085935050505092915050565b600060a08201905061526c6000830188613fef565b615279602083018761518a565b818103604083015261528b81866151f9565b905061529a60608301856140d0565b6152a76080830184613fef565b9695505050505050565b600060c0820190506152c660008301896140d0565b6152d36020830188613fef565b6152e0604083018761518a565b6152ed606083018661518a565b6152fa60808301856140d0565b61530760a0830184613fef565b979650505050505050565b60008151905061532181613d4d565b92915050565b6000806000606084860312156153405761533f613d39565b5b600061534e86828701615312565b935050602061535f86828701615312565b925050604061537086828701615312565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203726291b17a2d67270ce52c6723df0430bfd5986ea25c23ffb0c2565f48a0cbd64736f6c634300080b0033

Deployed Bytecode

0x60806040526004361061026b5760003560e01c80637571336a11610144578063c18bc195116100b6578063dd62ed3e1161007a578063dd62ed3e1461094f578063e2f456051461098c578063e884f260146109b7578063f25f4b56146109e2578063f2fde38b14610a0d578063f8b45b0514610a3657610272565b8063c18bc19514610868578063c876d0b914610891578063c8c8ebe4146108bc578063d257b34f146108e7578063d85ba0631461092457610272565b80639a7a23d6116101085780639a7a23d614610734578063a457c2d71461075d578063a9059cbb1461079a578063b62496f5146107d7578063bbc0c74214610814578063c02466681461083f57610272565b80637571336a14610675578063892ba4081461069e5780638a8c523c146106c75780638da5cb5b146106de57806395d89b411461070957610272565b8063476343ee116101dd57806366718524116101a1578063667185241461057957806366ca9b83146105a25780636a486a8e146105cb57806370a08231146105f6578063715018a614610633578063751039fc1461064a57610272565b8063476343ee146104a657806349bd5a5e146104bd5780634a62bb65146104e85780634fbee193146105135780635e80148e1461055057610272565b80631694505e1161022f5780631694505e1461038257806318160ddd146103ad578063203e727e146103d857806323b872dd14610401578063313ce5671461043e578063395093511461046957610272565b806302dbd8f81461027757806306fdde03146102a0578063095ea7b3146102cb5780630f3a325f1461030857806310d5de531461034557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613d79565b610a61565b005b3480156102ac57600080fd5b506102b5610b66565b6040516102c29190613e52565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed9190613ed2565b610bf8565b6040516102ff9190613f2d565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613f48565b610c16565b60405161033c9190613f2d565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190613f48565b610c6c565b6040516103799190613f2d565b60405180910390f35b34801561038e57600080fd5b50610397610c8c565b6040516103a49190613fd4565b60405180910390f35b3480156103b957600080fd5b506103c2610cb0565b6040516103cf9190613ffe565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190614019565b610cba565b005b34801561040d57600080fd5b5061042860048036038101906104239190614046565b610ddc565b6040516104359190613f2d565b60405180910390f35b34801561044a57600080fd5b50610453610eb5565b60405161046091906140b5565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190613ed2565b610ebe565b60405161049d9190613f2d565b60405180910390f35b3480156104b257600080fd5b506104bb610f71565b005b3480156104c957600080fd5b506104d2610fdc565b6040516104df91906140df565b60405180910390f35b3480156104f457600080fd5b506104fd611000565b60405161050a9190613f2d565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190613f48565b611013565b6040516105479190613f2d565b60405180910390f35b34801561055c57600080fd5b5061057760048036038101906105729190614242565b611069565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613f48565b611277565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190613d79565b6113ce565b005b3480156105d757600080fd5b506105e06114d3565b6040516105ed9190613ffe565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190613f48565b6114d9565b60405161062a9190613ffe565b60405180910390f35b34801561063f57600080fd5b50610648611521565b005b34801561065657600080fd5b5061065f611679565b60405161066c9190613f2d565b60405180910390f35b34801561068157600080fd5b5061069c600480360381019061069791906142b7565b611734565b005b3480156106aa57600080fd5b506106c560048036038101906106c09190614242565b611826565b005b3480156106d357600080fd5b506106dc611952565b005b3480156106ea57600080fd5b506106f3611a0d565b60405161070091906140df565b60405180910390f35b34801561071557600080fd5b5061071e611a37565b60405161072b9190613e52565b60405180910390f35b34801561074057600080fd5b5061075b600480360381019061075691906142b7565b611ac9565b005b34801561076957600080fd5b50610784600480360381019061077f9190613ed2565b611bfd565b6040516107919190613f2d565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc9190613ed2565b611cca565b6040516107ce9190613f2d565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f99190613f48565b611ce8565b60405161080b9190613f2d565b60405180910390f35b34801561082057600080fd5b50610829611d08565b6040516108369190613f2d565b60405180910390f35b34801561084b57600080fd5b50610866600480360381019061086191906142b7565b611d1b565b005b34801561087457600080fd5b5061088f600480360381019061088a9190614019565b611e5b565b005b34801561089d57600080fd5b506108a6611f7d565b6040516108b39190613f2d565b60405180910390f35b3480156108c857600080fd5b506108d1611f90565b6040516108de9190613ffe565b60405180910390f35b3480156108f357600080fd5b5061090e60048036038101906109099190614019565b611f96565b60405161091b9190613f2d565b60405180910390f35b34801561093057600080fd5b50610939612106565b6040516109469190613ffe565b60405180910390f35b34801561095b57600080fd5b50610976600480360381019061097191906142f7565b61210c565b6040516109839190613ffe565b60405180910390f35b34801561099857600080fd5b506109a1612193565b6040516109ae9190613ffe565b60405180910390f35b3480156109c357600080fd5b506109cc612199565b6040516109d99190613f2d565b60405180910390f35b3480156109ee57600080fd5b506109f7612254565b604051610a0491906140df565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190613f48565b61227a565b005b348015610a4257600080fd5b50610a4b612441565b604051610a589190613ffe565b60405180910390f35b610a696124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef90614383565b60405180910390fd5b8160148190555080601581905550601554601454610b1691906143d2565b601381905550600f6013541115610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5990614474565b60405180910390fd5b5050565b606060038054610b75906144c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba1906144c3565b8015610bee5780601f10610bc357610100808354040283529160200191610bee565b820191906000526020600020905b815481529060010190602001808311610bd157829003601f168201915b5050505050905090565b6000610c0c610c056124a5565b84846124ad565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610cc26124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4890614383565b60405180910390fd5b633b9aca006103e86001610d63610cb0565b610d6d91906144f5565b610d77919061457e565b610d81919061457e565b811015610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba90614621565b60405180910390fd5b633b9aca0081610dd391906144f5565b600a8190555050565b6000610de9848484612678565b610eaa84610df56124a5565b610ea5856040518060600160405280602881526020016153a160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e5b6124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6124ad565b600190509392505050565b60006009905090565b6000610f67610ecb6124a5565b84610f628560016000610edc6124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244790919063ffffffff16565b6124ad565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fd9573d6000803e3d6000fd5b50565b7f00000000000000000000000056ed3636bc12339a017774de453443cf5a545dde81565b600d60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110716124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790614383565b60405180910390fd5b60005b8151811015611273577f00000000000000000000000056ed3636bc12339a017774de453443cf5a545dde73ffffffffffffffffffffffffffffffffffffffff1682828151811061115657611155614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156111e857507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168282815181106111c7576111c6614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b156112605760016006600084848151811061120657611205614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b808061126b90614670565b915050611103565b5050565b61127f6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130590614383565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113d66124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c90614383565b60405180910390fd5b816011819055508060128190555060125460115461148391906143d2565b601081905550600a60105411156114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c690614705565b60405180910390fd5b5050565b60135481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115296124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af90614383565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006116836124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170990614383565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b61173c6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c290614383565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61182e6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490614383565b60405180910390fd5b60005b815181101561194e576000600660008484815181106118e2576118e1614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061194690614670565b9150506118c0565b5050565b61195a6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e090614383565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555042600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611a46906144c3565b80601f0160208091040260200160405190810160405280929190818152602001828054611a72906144c3565b8015611abf5780601f10611a9457610100808354040283529160200191611abf565b820191906000526020600020905b815481529060010190602001808311611aa257829003601f168201915b5050505050905090565b611ad16124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5790614383565b60405180910390fd5b7f00000000000000000000000056ed3636bc12339a017774de453443cf5a545dde73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be690614797565b60405180910390fd5b611bf982826133e8565b5050565b6000611cc0611c0a6124a5565b84611cbb856040518060600160405280602581526020016153c96025913960016000611c346124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6124ad565b6001905092915050565b6000611cde611cd76124a5565b8484612678565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611d236124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da990614383565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e4f9190613f2d565b60405180910390a25050565b611e636124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee990614383565b60405180910390fd5b633b9aca006103e86005611f04610cb0565b611f0e91906144f5565b611f18919061457e565b611f22919061457e565b811015611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b90614829565b60405180910390fd5b633b9aca0081611f7491906144f5565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b6000611fa06124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461202f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202690614383565b60405180910390fd5b620186a0600161203d610cb0565b61204791906144f5565b612051919061457e565b821015612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a906148bb565b60405180910390fd5b6103e860056120a0610cb0565b6120aa91906144f5565b6120b4919061457e565b8211156120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed9061494d565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b60006121a36124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222990614383565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122826124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890614383565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612381576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612378906149df565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b600080828461245691906143d2565b90508381101561249b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249290614a4b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561251d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251490614add565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561258d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258490614b6f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161266b9190613ffe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126df90614c01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274f90614c93565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dc90614d4b565b60405180910390fd5b60008114156127ff576127fa83836000613489565b61337f565b600854421415612862576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600d60009054906101000a900460ff1615612f255761287f611a0d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128ed57506128bd611a0d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129265750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612960575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129795750600760009054906101000a900460ff16155b15612f2457600d60019054906101000a900460ff16612a7357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a335750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6990614db7565b60405180910390fd5b5b600f60009054906101000a900460ff1615612c3b57612a90611a0d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b1757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b6f57507f00000000000000000000000056ed3636bc12339a017774de453443cf5a545dde73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c3a5743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bec90614e6f565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cde5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8557600a54811115612d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1f90614f01565b60405180910390fd5b600c54612d34836114d9565b82612d3f91906143d2565b1115612d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7790614f6d565b60405180910390fd5b612f23565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e285750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e7757600a54811115612e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6990614fff565b60405180910390fd5b612f22565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f2157600c54612ed4836114d9565b82612edf91906143d2565b1115612f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1790614f6d565b60405180910390fd5b5b5b5b5b5b6000612f30306114d9565b90506000600b548210159050808015612f565750600760009054906101000a900460ff16155b8015612fac5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130025750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130585750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561309c576001600760006101000a81548160ff02191690831515021790555061308061371e565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131525750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561315c57600090505b6000811561336f57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131bf57506000601354115b15613259576131ec60646131de6013548861389a90919063ffffffff16565b61391590919063ffffffff16565b9050601354601554826131ff91906144f5565b613209919061457e565b6017600082825461321a91906143d2565b925050819055506013546014548261323291906144f5565b61323c919061457e565b6016600082825461324d91906143d2565b9250508190555061334b565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132b457506000601054115b1561334a576132e160646132d36010548861389a90919063ffffffff16565b61391590919063ffffffff16565b9050601054601254826132f491906144f5565b6132fe919061457e565b6017600082825461330f91906143d2565b925050819055506010546011548261332791906144f5565b613331919061457e565b6016600082825461334291906143d2565b925050819055505b5b60008111156133605761335f873083613489565b5b808561336c919061501f565b94505b61337a878787613489565b505050505b505050565b60008383111582906133cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c39190613e52565b60405180910390fd5b50600083856133db919061501f565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f090614c01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356090614c93565b60405180910390fd5b61357483838361395f565b6135df8160405180606001604052806026815260200161537b602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613672816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137119190613ffe565b60405180910390a3505050565b6000613729306114d9565b9050600060165460175461373d91906143d2565b9050600082148061374e5750600081145b1561375a575050613898565b6014600b5461376991906144f5565b821115613782576014600b5461377f91906144f5565b91505b60006002826017548561379591906144f5565b61379f919061457e565b6137a9919061457e565b905060006137c0828561396490919063ffffffff16565b905060004790506137d0826139ae565b60006137e5824761396490919063ffffffff16565b90506000613810866138026016548561389a90919063ffffffff16565b61391590919063ffffffff16565b905060008183613820919061501f565b9050600060178190555060006016819055506000861180156138425750600081115b1561388f576138518682613beb565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260175460405161388693929190615053565b60405180910390a15b50505050505050505b565b6000808314156138ad576000905061390f565b600082846138bb91906144f5565b90508284826138ca919061457e565b1461390a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613901906150fc565b60405180910390fd5b809150505b92915050565b600061395783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ccc565b905092915050565b505050565b60006139a683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613384565b905092915050565b6000600267ffffffffffffffff8111156139cb576139ca6140ff565b5b6040519080825280602002602001820160405280156139f95781602001602082028036833780820191505090505b5090503081600081518110613a1157613a10614641565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ada9190615131565b81600181518110613aee57613aed614641565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b53307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124ad565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bb5959493929190615257565b600060405180830381600087803b158015613bcf57600080fd5b505af1158015613be3573d6000803e3d6000fd5b505050505050565b613c16307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124ad565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613c60611a0d565b426040518863ffffffff1660e01b8152600401613c82969594939291906152b1565b60606040518083038185885af1158015613ca0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613cc59190615327565b5050505050565b60008083118290613d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0a9190613e52565b60405180910390fd5b5060008385613d22919061457e565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613d5681613d43565b8114613d6157600080fd5b50565b600081359050613d7381613d4d565b92915050565b60008060408385031215613d9057613d8f613d39565b5b6000613d9e85828601613d64565b9250506020613daf85828601613d64565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613df3578082015181840152602081019050613dd8565b83811115613e02576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e2482613db9565b613e2e8185613dc4565b9350613e3e818560208601613dd5565b613e4781613e08565b840191505092915050565b60006020820190508181036000830152613e6c8184613e19565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e9f82613e74565b9050919050565b613eaf81613e94565b8114613eba57600080fd5b50565b600081359050613ecc81613ea6565b92915050565b60008060408385031215613ee957613ee8613d39565b5b6000613ef785828601613ebd565b9250506020613f0885828601613d64565b9150509250929050565b60008115159050919050565b613f2781613f12565b82525050565b6000602082019050613f426000830184613f1e565b92915050565b600060208284031215613f5e57613f5d613d39565b5b6000613f6c84828501613ebd565b91505092915050565b6000819050919050565b6000613f9a613f95613f9084613e74565b613f75565b613e74565b9050919050565b6000613fac82613f7f565b9050919050565b6000613fbe82613fa1565b9050919050565b613fce81613fb3565b82525050565b6000602082019050613fe96000830184613fc5565b92915050565b613ff881613d43565b82525050565b60006020820190506140136000830184613fef565b92915050565b60006020828403121561402f5761402e613d39565b5b600061403d84828501613d64565b91505092915050565b60008060006060848603121561405f5761405e613d39565b5b600061406d86828701613ebd565b935050602061407e86828701613ebd565b925050604061408f86828701613d64565b9150509250925092565b600060ff82169050919050565b6140af81614099565b82525050565b60006020820190506140ca60008301846140a6565b92915050565b6140d981613e94565b82525050565b60006020820190506140f460008301846140d0565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61413782613e08565b810181811067ffffffffffffffff82111715614156576141556140ff565b5b80604052505050565b6000614169613d2f565b9050614175828261412e565b919050565b600067ffffffffffffffff821115614195576141946140ff565b5b602082029050602081019050919050565b600080fd5b60006141be6141b98461417a565b61415f565b905080838252602082019050602084028301858111156141e1576141e06141a6565b5b835b8181101561420a57806141f68882613ebd565b8452602084019350506020810190506141e3565b5050509392505050565b600082601f830112614229576142286140fa565b5b81356142398482602086016141ab565b91505092915050565b60006020828403121561425857614257613d39565b5b600082013567ffffffffffffffff81111561427657614275613d3e565b5b61428284828501614214565b91505092915050565b61429481613f12565b811461429f57600080fd5b50565b6000813590506142b18161428b565b92915050565b600080604083850312156142ce576142cd613d39565b5b60006142dc85828601613ebd565b92505060206142ed858286016142a2565b9150509250929050565b6000806040838503121561430e5761430d613d39565b5b600061431c85828601613ebd565b925050602061432d85828601613ebd565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061436d602083613dc4565b915061437882614337565b602082019050919050565b6000602082019050818103600083015261439c81614360565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143dd82613d43565b91506143e883613d43565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561441d5761441c6143a3565b5b828201905092915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b600061445e601d83613dc4565b915061446982614428565b602082019050919050565b6000602082019050818103600083015261448d81614451565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144db57607f821691505b602082108114156144ef576144ee614494565b5b50919050565b600061450082613d43565b915061450b83613d43565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614544576145436143a3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061458982613d43565b915061459483613d43565b9250826145a4576145a361454f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061460b602f83613dc4565b9150614616826145af565b604082019050919050565b6000602082019050818103600083015261463a816145fe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061467b82613d43565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146ae576146ad6143a3565b5b600182019050919050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006146ef601d83613dc4565b91506146fa826146b9565b602082019050919050565b6000602082019050818103600083015261471e816146e2565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614781603983613dc4565b915061478c82614725565b604082019050919050565b600060208201905081810360008301526147b081614774565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614813602483613dc4565b915061481e826147b7565b604082019050919050565b6000602082019050818103600083015261484281614806565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006148a5603583613dc4565b91506148b082614849565b604082019050919050565b600060208201905081810360008301526148d481614898565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614937603483613dc4565b9150614942826148db565b604082019050919050565b600060208201905081810360008301526149668161492a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006149c9602683613dc4565b91506149d48261496d565b604082019050919050565b600060208201905081810360008301526149f8816149bc565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614a35601b83613dc4565b9150614a40826149ff565b602082019050919050565b60006020820190508181036000830152614a6481614a28565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ac7602483613dc4565b9150614ad282614a6b565b604082019050919050565b60006020820190508181036000830152614af681614aba565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b59602283613dc4565b9150614b6482614afd565b604082019050919050565b60006020820190508181036000830152614b8881614b4c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614beb602583613dc4565b9150614bf682614b8f565b604082019050919050565b60006020820190508181036000830152614c1a81614bde565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c7d602383613dc4565b9150614c8882614c21565b604082019050919050565b60006020820190508181036000830152614cac81614c70565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614d35604d83613dc4565b9150614d4082614cb3565b606082019050919050565b60006020820190508181036000830152614d6481614d28565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614da1601683613dc4565b9150614dac82614d6b565b602082019050919050565b60006020820190508181036000830152614dd081614d94565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614e59604983613dc4565b9150614e6482614dd7565b606082019050919050565b60006020820190508181036000830152614e8881614e4c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614eeb603583613dc4565b9150614ef682614e8f565b604082019050919050565b60006020820190508181036000830152614f1a81614ede565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f57601383613dc4565b9150614f6282614f21565b602082019050919050565b60006020820190508181036000830152614f8681614f4a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614fe9603683613dc4565b9150614ff482614f8d565b604082019050919050565b6000602082019050818103600083015261501881614fdc565b9050919050565b600061502a82613d43565b915061503583613d43565b925082821015615048576150476143a3565b5b828203905092915050565b60006060820190506150686000830186613fef565b6150756020830185613fef565b6150826040830184613fef565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006150e6602183613dc4565b91506150f18261508a565b604082019050919050565b60006020820190508181036000830152615115816150d9565b9050919050565b60008151905061512b81613ea6565b92915050565b60006020828403121561514757615146613d39565b5b60006151558482850161511c565b91505092915050565b6000819050919050565b600061518361517e6151798461515e565b613f75565b613d43565b9050919050565b61519381615168565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151ce81613e94565b82525050565b60006151e083836151c5565b60208301905092915050565b6000602082019050919050565b600061520482615199565b61520e81856151a4565b9350615219836151b5565b8060005b8381101561524a57815161523188826151d4565b975061523c836151ec565b92505060018101905061521d565b5085935050505092915050565b600060a08201905061526c6000830188613fef565b615279602083018761518a565b818103604083015261528b81866151f9565b905061529a60608301856140d0565b6152a76080830184613fef565b9695505050505050565b600060c0820190506152c660008301896140d0565b6152d36020830188613fef565b6152e0604083018761518a565b6152ed606083018661518a565b6152fa60808301856140d0565b61530760a0830184613fef565b979650505050505050565b60008151905061532181613d4d565b92915050565b6000806000606084860312156153405761533f613d39565b5b600061534e86828701615312565b935050602061535f86828701615312565b925050604061537086828701615312565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203726291b17a2d67270ce52c6723df0430bfd5986ea25c23ffb0c2565f48a0cbd64736f6c634300080b0033

Deployed Bytecode Sourcemap

17579:14486:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23474:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5000:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5913:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25245:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18785:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17659:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5320:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22537:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6090:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5220:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6453:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31923:102;;;;;;;;;;;;;:::i;:::-;;17717:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18039:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24606:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24743:294;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24441:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23152:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18461:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5436:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10955:148;;;;;;;;;;;;;:::i;:::-;;21747:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22996:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25049:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21568:123;;;;;;;;;;;;;:::i;:::-;;10741:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5108:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23989:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6679:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5571:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19007:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18079:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23799:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22775:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18295:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17916:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22143:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18343:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5754:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17958:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21933:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17879:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11111:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17998:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23474:317;10878:12;:10;:12::i;:::-;10868:22;;:6;;;;;;;;;;;:22;;;10860:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23592:12:::1;23572:17;:32;;;;23635:12;23615:17;:32;;;;23694:17;;23674;;:37;;;;:::i;:::-;23658:13;:53;;;;23747:2;23730:13;;:19;;23722:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23474:317:::0;;:::o;5000:100::-;5054:13;5087:5;5080:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5000:100;:::o;5913:169::-;5996:4;6013:39;6022:12;:10;:12::i;:::-;6036:7;6045:6;6013:8;:39::i;:::-;6070:4;6063:11;;5913:169;;;;:::o;25245:100::-;25298:4;25322:9;:15;25332:4;25322:15;;;;;;;;;;;;;;;;;;;;;;;;;25315:22;;25245:100;;;:::o;18785:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17659:51::-;;;:::o;5320:108::-;5381:7;5408:12;;5401:19;;5320:108;:::o;22537:230::-;10878:12;:10;:12::i;:::-;10868:22;;:6;;;;;;;;;;;:22;;;10860:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22658:3:::1;22650:4;22646:1;22630:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22629:32;;;;:::i;:::-;22619:6;:42;;22611:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22756:3;22747:6;:12;;;;:::i;:::-;22724:20;:35;;;;22537:230:::0;:::o;6090:355::-;6230:4;6247:36;6257:6;6265:9;6276:6;6247:9;:36::i;:::-;6294:121;6303:6;6311:12;:10;:12::i;:::-;6325:89;6363:6;6325:89;;;;;;;;;;;;;;;;;:11;:19;6337:6;6325:19;;;;;;;;;;;;;;;:33;6345:12;:10;:12::i;:::-;6325:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6294:8;:121::i;:::-;6433:4;6426:11;;6090:355;;;;;:::o;5220:92::-;5278:5;5303:1;5296:8;;5220:92;:::o;6453:218::-;6541:4;6558:83;6567:12;:10;:12::i;:::-;6581:7;6590:50;6629:10;6590:11;:25;6602:12;:10;:12::i;:::-;6590:25;;;;;;;;;;;;;;;:34;6616:7;6590:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6558:8;:83::i;:::-;6659:4;6652:11;;6453:218;;;;:::o;31923:102::-;31975:9;;;;;;;;;;;31967:27;;:50;31995:21;31967:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31923:102::o;17717:38::-;;;:::o;18039:33::-;;;;;;;;;;;;;:::o;24606:125::-;24671:4;24695:19;:28;24715:7;24695:28;;;;;;;;;;;;;;;;;;;;;;;;;24688:35;;24606:125;;;:::o;24743:294::-;10878:12;:10;:12::i;:::-;10868:22;;:6;;;;;;;;;;;:22;;;10860:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24825:6:::1;24820:210;24841:8;:15;24837:1;:19;24820:210;;;24897:13;24882:28;;:8;24891:1;24882:11;;;;;;;;:::i;:::-;;;;;;;;:28;;;;:71;;;;;24937:15;24914:39;;:8;24923:1;24914:11;;;;;;;;:::i;:::-;;;;;;;;:39;;;;24882:71;24878:141;;;24999:4;24974:9;:22;24984:8;24993:1;24984:11;;;;;;;;:::i;:::-;;;;;;;;24974:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;24878:141;24858:3;;;;;:::i;:::-;;;;24820:210;;;;24743:294:::0;:::o;24441:157::-;10878:12;:10;:12::i;:::-;10868:22;;:6;;;;;;;;;;;:22;;;10860:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24548:9:::1;;;;;;;;;;;24520:38;;24537:9;24520:38;;;;;;;;;;;;24581:9;24569;;:21;;;;;;;;;;;;;;;;;;24441:157:::0;:::o;23152:310::-;10878:12;:10;:12::i;:::-;10868:22;;:6;;;;;;;;;;;:22;;;10860:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23268:12:::1;23249:16;:31;;;;23310:12;23291:16;:31;;;;23367:16;;23348;;:35;;;;:::i;:::-;23333:12;:50;;;;23418:2;23402:12;;:18;;23394:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;23152:310:::0;;:::o;18461:28::-;;;;:::o;5436:127::-;5510:7;5537:9;:18;5547:7;5537:18;;;;;;;;;;;;;;;;5530:25;;5436:127;;;:::o;10955:148::-;10878:12;:10;:12::i;:::-;10868:22;;:6;;;;;;;;;;;:22;;;10860:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11062:1:::1;11025:40;;11046:6;;;;;;;;;;;11025:40;;;;;;;;;;;;11093:1;11076:6;;:19;;;;;;;;;;;;;;;;;;10955:148::o:0;21747:121::-;21799:4;10878:12;:10;:12::i;:::-;10868:22;;:6;;;;;;;;;;;:22;;;10860:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21833:5:::1;21816:14;;:22;;;;;;;;;;;;;;;;;;21856:4;21849:11;;21747:121:::0;:::o;22996:144::-;10878:12;:10;:12::i;:::-;10868:22;;:6;;;;;;;;;;;:22;;;10860:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23128:4:::1;23086:31;:39;23118:6;23086:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22996:144:::0;;:::o;25049:184::-;10878:12;:10;:12::i;:::-;10868:22;;:6;;;;;;;;;;;:22;;;10860:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25131:6:::1;25126:100;25147:8;:15;25143:1;:19;25126:100;;;25209:5;25184:9;:22;25194:8;25203:1;25194:11;;;;;;;;:::i;:::-;;;;;;;;25184:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;25164:3;;;;;:::i;:::-;;;;25126:100;;;;25049:184:::0;:::o;21568:123::-;10878:12;:10;:12::i;:::-;10868:22;;:6;;;;;;;;;;;:22;;;10860:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21639:4:::1;21623:13;;:20;;;;;;;;;;;;;;;;;;21668:15;21654:11;:29;;;;21568:123::o:0;10741:79::-;10779:7;10806:6;;;;;;;;;;;10799:13;;10741:79;:::o;5108:104::-;5164:13;5197:7;5190:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5108:104;:::o;23989:244::-;10878:12;:10;:12::i;:::-;10868:22;;:6;;;;;;;;;;;:22;;;10860:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24096:13:::1;24088:21;;:4;:21;;;;24080:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;24184:41;24213:4;24219:5;24184:28;:41::i;:::-;23989:244:::0;;:::o;6679:269::-;6772:4;6789:129;6798:12;:10;:12::i;:::-;6812:7;6821:96;6860:15;6821:96;;;;;;;;;;;;;;;;;:11;:25;6833:12;:10;:12::i;:::-;6821:25;;;;;;;;;;;;;;;:34;6847:7;6821:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6789:8;:129::i;:::-;6936:4;6929:11;;6679:269;;;;:::o;5571:175::-;5657:4;5674:42;5684:12;:10;:12::i;:::-;5698:9;5709:6;5674:9;:42::i;:::-;5734:4;5727:11;;5571:175;;;;:::o;19007:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;18079:25::-;;;;;;;;;;;;;:::o;23799:182::-;10878:12;:10;:12::i;:::-;10868:22;;:6;;;;;;;;;;;:22;;;10860:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23915:8:::1;23884:19;:28;23904:7;23884:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23955:7;23939:34;;;23964:8;23939:34;;;;;;:::i;:::-;;;;;;;;23799:182:::0;;:::o;22775:209::-;10878:12;:10;:12::i;:::-;10868:22;;:6;;;;;;;;;;;:22;;;10860:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22897:3:::1;22891:4;22887:1;22871:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22870:30;;;;:::i;:::-;22860:6;:40;;22852:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;22973:3;22964:6;:12;;;;:::i;:::-;22952:9;:24;;;;22775:209:::0;:::o;18295:39::-;;;;;;;;;;;;;:::o;17916:35::-;;;;:::o;22143:382::-;22224:4;10878:12;:10;:12::i;:::-;10868:22;;:6;;;;;;;;;;;:22;;;10860:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22281:6:::1;22277:1;22261:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;22248:9;:39;;22240:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;22396:4;22392:1;22376:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22363:9;:37;;22355:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22488:9;22467:18;:30;;;;22514:4;22507:11;;22143:382:::0;;;:::o;18343:27::-;;;;:::o;5754:151::-;5843:7;5870:11;:18;5882:5;5870:18;;;;;;;;;;;;;;;:27;5889:7;5870:27;;;;;;;;;;;;;;;;5863:34;;5754:151;;;;:::o;17958:33::-;;;;:::o;21933:135::-;21993:4;10878:12;:10;:12::i;:::-;10868:22;;:6;;;;;;;;;;;:22;;;10860:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22033:5:::1;22010:20;;:28;;;;;;;;;;;;;;;;;;22056:4;22049:11;;21933:135:::0;:::o;17879:24::-;;;;;;;;;;;;;:::o;11111:244::-;10878:12;:10;:12::i;:::-;10868:22;;:6;;;;;;;;;;;:22;;;10860:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11220:1:::1;11200:22;;:8;:22;;;;11192:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11310:8;11281:38;;11302:6;;;;;;;;;;;11281:38;;;;;;;;;;;;11339:8;11330:6;;:17;;;;;;;;;;;;;;;;;;11111:244:::0;:::o;17998:24::-;;;;:::o;8893:181::-;8951:7;8971:9;8987:1;8983;:5;;;;:::i;:::-;8971:17;;9012:1;9007;:6;;8999:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;9065:1;9058:8;;;8893:181;;;;:::o;169:98::-;222:7;249:10;242:17;;169:98;:::o;8349:380::-;8502:1;8485:19;;:5;:19;;;;8477:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8583:1;8564:21;;:7;:21;;;;8556:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8667:6;8637:11;:18;8649:5;8637:18;;;;;;;;;;;;;;;:27;8656:7;8637:27;;;;;;;;;;;;;;;:36;;;;8705:7;8689:32;;8698:5;8689:32;;;8714:6;8689:32;;;;;;:::i;:::-;;;;;;;;8349:380;;;:::o;25353:4131::-;25501:1;25485:18;;:4;:18;;;;25477:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25578:1;25564:16;;:2;:16;;;;25556:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25640:9;:15;25650:4;25640:15;;;;;;;;;;;;;;;;;;;;;;;;;25639:16;25631:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;25773:1;25763:6;:11;25759:93;;;25791:28;25807:4;25813:2;25817:1;25791:15;:28::i;:::-;25834:7;;25759:93;25895:11;;25876:15;:30;25872:56;;;25924:4;25908:9;:13;25918:2;25908:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;25872:56;25953:14;;;;;;;;;;;25949:1838;;;26014:7;:5;:7::i;:::-;26006:15;;:4;:15;;;;:49;;;;;26048:7;:5;:7::i;:::-;26042:13;;:2;:13;;;;26006:49;:86;;;;;26090:1;26076:16;;:2;:16;;;;26006:86;:128;;;;;26127:6;26113:21;;:2;:21;;;;26006:128;:159;;;;;26156:9;;;;;;;;;;;26155:10;26006:159;25984:1792;;;26205:13;;;;;;;;;;;26200:150;;26251:19;:25;26271:4;26251:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26280:19;:23;26300:2;26280:23;;;;;;;;;;;;;;;;;;;;;;;;;26251:52;26243:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;26200:150;26508:20;;;;;;;;;;;26504:423;;;26562:7;:5;:7::i;:::-;26556:13;;:2;:13;;;;:47;;;;;26587:15;26573:30;;:2;:30;;;;26556:47;:79;;;;;26621:13;26607:28;;:2;:28;;;;26556:79;26552:356;;;26713:12;26671:28;:39;26700:9;26671:39;;;;;;;;;;;;;;;;:54;26663:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26872:12;26830:28;:39;26859:9;26830:39;;;;;;;;;;;;;;;:54;;;;26552:356;26504:423;26997:25;:31;27023:4;26997:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;27033:31;:35;27065:2;27033:35;;;;;;;;;;;;;;;;;;;;;;;;;27032:36;26997:71;26993:768;;;27111:20;;27101:6;:30;;27093:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;27246:9;;27229:13;27239:2;27229:9;:13::i;:::-;27220:6;:22;;;;:::i;:::-;:35;;27212:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26993:768;;;27374:25;:29;27400:2;27374:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;27408:31;:37;27440:4;27408:37;;;;;;;;;;;;;;;;;;;;;;;;;27407:38;27374:71;27370:391;;;27488:20;;27478:6;:30;;27470:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;27370:391;;;27615:31;:35;27647:2;27615:35;;;;;;;;;;;;;;;;;;;;;;;;;27610:151;;27708:9;;27691:13;27701:2;27691:9;:13::i;:::-;27682:6;:22;;;;:::i;:::-;:35;;27674:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27610:151;27370:391;26993:768;25984:1792;25949:1838;27801:28;27832:24;27850:4;27832:9;:24::i;:::-;27801:55;;27867:12;27906:18;;27882:20;:42;;27867:57;;27953:7;:34;;;;;27978:9;;;;;;;;;;;27977:10;27953:34;:83;;;;;28005:25;:31;28031:4;28005:31;;;;;;;;;;;;;;;;;;;;;;;;;28004:32;27953:83;:126;;;;;28054:19;:25;28074:4;28054:25;;;;;;;;;;;;;;;;;;;;;;;;;28053:26;27953:126;:167;;;;;28097:19;:23;28117:2;28097:23;;;;;;;;;;;;;;;;;;;;;;;;;28096:24;27953:167;27935:297;;;28159:4;28147:9;;:16;;;;;;;;;;;;;;;;;;28178:10;:8;:10::i;:::-;28215:5;28203:9;;:17;;;;;;;;;;;;;;;;;;27935:297;28244:12;28260:9;;;;;;;;;;;28259:10;28244:25;;28371:19;:25;28391:4;28371:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28400:19;:23;28420:2;28400:23;;;;;;;;;;;;;;;;;;;;;;;;;28371:52;28367:100;;;28450:5;28440:15;;28367:100;28487:12;28592:7;28588:843;;;28644:25;:29;28670:2;28644:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;28693:1;28677:13;;:17;28644:50;28640:624;;;28722:34;28752:3;28722:25;28733:13;;28722:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;28715:41;;28825:13;;28805:17;;28798:4;:24;;;;:::i;:::-;:40;;;;:::i;:::-;28775:19;;:63;;;;;;;:::i;:::-;;;;;;;;28907:13;;28887:17;;28880:4;:24;;;;:::i;:::-;:40;;;;:::i;:::-;28857:19;;:63;;;;;;;:::i;:::-;;;;;;;;28640:624;;;28982:25;:31;29008:4;28982:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;29032:1;29017:12;;:16;28982:51;28978:286;;;29058:33;29087:3;29058:24;29069:12;;29058:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;29051:40;;29156:12;;29137:16;;29130:4;:23;;;;:::i;:::-;:38;;;;:::i;:::-;29107:19;;:61;;;;;;;:::i;:::-;;;;;;;;29236:12;;29217:16;;29210:4;:23;;;;:::i;:::-;:38;;;;:::i;:::-;29187:19;;:61;;;;;;;:::i;:::-;;;;;;;;28978:286;28640:624;29303:1;29296:4;:8;29292:91;;;29325:42;29341:4;29355;29362;29325:15;:42::i;:::-;29292:91;29415:4;29405:14;;;;;:::i;:::-;;;28588:843;29443:33;29459:4;29465:2;29469:6;29443:15;:33::i;:::-;25466:4018;;;;25353:4131;;;;:::o;9226:192::-;9312:7;9345:1;9340;:6;;9348:12;9332:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9372:9;9388:1;9384;:5;;;;:::i;:::-;9372:17;;9409:1;9402:8;;;9226:192;;;;;:::o;24241:188::-;24358:5;24324:25;:31;24350:4;24324:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24415:5;24381:40;;24409:4;24381:40;;;;;;;;;;;;24241:188;;:::o;6956:573::-;7114:1;7096:20;;:6;:20;;;;7088:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7198:1;7177:23;;:9;:23;;;;7169:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7253:47;7274:6;7282:9;7293:6;7253:20;:47::i;:::-;7333:71;7355:6;7333:71;;;;;;;;;;;;;;;;;:9;:17;7343:6;7333:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7313:9;:17;7323:6;7313:17;;;;;;;;;;;;;;;:91;;;;7438:32;7463:6;7438:9;:20;7448:9;7438:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7415:9;:20;7425:9;7415:20;;;;;;;;;;;;;;;:55;;;;7503:9;7486:35;;7495:6;7486:35;;;7514:6;7486:35;;;;;;:::i;:::-;;;;;;;;6956:573;;;:::o;30616:1299::-;30655:23;30681:24;30699:4;30681:9;:24::i;:::-;30655:50;;30716:25;30766:19;;30744;;:41;;;;:::i;:::-;30716:69;;30829:1;30810:15;:20;:46;;;;30855:1;30834:17;:22;30810:46;30806:59;;;30858:7;;;;30806:59;30918:2;30897:18;;:23;;;;:::i;:::-;30879:15;:41;30875:113;;;30974:2;30953:18;;:23;;;;:::i;:::-;30935:41;;30875:113;31057:23;31143:1;31123:17;31101:19;;31083:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;31057:87;;31155:26;31184:36;31204:15;31184;:19;;:36;;;;:::i;:::-;31155:65;;31241:25;31269:21;31241:49;;31303:37;31321:18;31303:17;:37::i;:::-;31362:18;31383:44;31409:17;31383:21;:25;;:44;;;;:::i;:::-;31362:65;;31438:23;31464:58;31504:17;31464:35;31479:19;;31464:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;31438:84;;31533:23;31572:15;31559:10;:28;;;;:::i;:::-;31533:54;;31630:1;31608:19;:23;;;;31664:1;31642:19;:23;;;;31716:1;31698:15;:19;:42;;;;;31739:1;31721:15;:19;31698:42;31694:214;;;31757:47;31771:15;31788;31757:13;:47::i;:::-;31824:72;31839:18;31859:15;31876:19;;31824:72;;;;;;;;:::i;:::-;;;;;;;;31694:214;30644:1271;;;;;;;;30616:1299;:::o;9426:250::-;9484:7;9513:1;9508;:6;9504:47;;;9538:1;9531:8;;;;9504:47;9563:9;9579:1;9575;:5;;;;:::i;:::-;9563:17;;9608:1;9603;9599;:5;;;;:::i;:::-;:10;9591:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9667:1;9660:8;;;9426:250;;;;;:::o;9684:132::-;9742:7;9769:39;9773:1;9776;9769:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9762:46;;9684:132;;;;:::o;8737:125::-;;;;:::o;9082:136::-;9140:7;9167:43;9171:1;9174;9167:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9160:50;;9082:136;;;;:::o;29492:590::-;29619:21;29657:1;29643:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29619:40;;29688:4;29670;29675:1;29670:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29714:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29704:4;29709:1;29704:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29749:62;29766:4;29781:15;29799:11;29749:8;:62::i;:::-;29850:15;:66;;;29931:11;29957:1;30001:4;30028;30048:15;29850:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29548:534;29492:590;:::o;30094:514::-;30243:62;30260:4;30275:15;30293:11;30243:8;:62::i;:::-;30348:15;:31;;;30387:9;30420:4;30440:11;30466:1;30509;30552:7;:5;:7::i;:::-;30574:15;30348:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30094:514;;:::o;9824:278::-;9910:7;9942:1;9938;:5;9945:12;9930:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9969:9;9985:1;9981;:5;;;;:::i;:::-;9969:17;;10093:1;10086:8;;;9824:278;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:329::-;4033:6;4082:2;4070:9;4061:7;4057:23;4053:32;4050:119;;;4088:79;;:::i;:::-;4050:119;4208:1;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4179:117;3974:329;;;;:::o;4309:60::-;4337:3;4358:5;4351:12;;4309:60;;;:::o;4375:142::-;4425:9;4458:53;4476:34;4485:24;4503:5;4485:24;:::i;:::-;4476:34;:::i;:::-;4458:53;:::i;:::-;4445:66;;4375:142;;;:::o;4523:126::-;4573:9;4606:37;4637:5;4606:37;:::i;:::-;4593:50;;4523:126;;;:::o;4655:153::-;4732:9;4765:37;4796:5;4765:37;:::i;:::-;4752:50;;4655:153;;;:::o;4814:185::-;4928:64;4986:5;4928:64;:::i;:::-;4923:3;4916:77;4814:185;;:::o;5005:276::-;5125:4;5163:2;5152:9;5148:18;5140:26;;5176:98;5271:1;5260:9;5256:17;5247:6;5176:98;:::i;:::-;5005:276;;;;:::o;5287:118::-;5374:24;5392:5;5374:24;:::i;:::-;5369:3;5362:37;5287:118;;:::o;5411:222::-;5504:4;5542:2;5531:9;5527:18;5519:26;;5555:71;5623:1;5612:9;5608:17;5599:6;5555:71;:::i;:::-;5411:222;;;;:::o;5639:329::-;5698:6;5747:2;5735:9;5726:7;5722:23;5718:32;5715:119;;;5753:79;;:::i;:::-;5715:119;5873:1;5898:53;5943:7;5934:6;5923:9;5919:22;5898:53;:::i;:::-;5888:63;;5844:117;5639:329;;;;:::o;5974:619::-;6051:6;6059;6067;6116:2;6104:9;6095:7;6091:23;6087:32;6084:119;;;6122:79;;:::i;:::-;6084:119;6242:1;6267:53;6312:7;6303:6;6292:9;6288:22;6267:53;:::i;:::-;6257:63;;6213:117;6369:2;6395:53;6440:7;6431:6;6420:9;6416:22;6395:53;:::i;:::-;6385:63;;6340:118;6497:2;6523:53;6568:7;6559:6;6548:9;6544:22;6523:53;:::i;:::-;6513:63;;6468:118;5974:619;;;;;:::o;6599:86::-;6634:7;6674:4;6667:5;6663:16;6652:27;;6599:86;;;:::o;6691:112::-;6774:22;6790:5;6774:22;:::i;:::-;6769:3;6762:35;6691:112;;:::o;6809:214::-;6898:4;6936:2;6925:9;6921:18;6913:26;;6949:67;7013:1;7002:9;6998:17;6989:6;6949:67;:::i;:::-;6809:214;;;;:::o;7029:118::-;7116:24;7134:5;7116:24;:::i;:::-;7111:3;7104:37;7029:118;;:::o;7153:222::-;7246:4;7284:2;7273:9;7269:18;7261:26;;7297:71;7365:1;7354:9;7350:17;7341:6;7297:71;:::i;:::-;7153:222;;;;:::o;7381:117::-;7490:1;7487;7480:12;7504:180;7552:77;7549:1;7542:88;7649:4;7646:1;7639:15;7673:4;7670:1;7663:15;7690:281;7773:27;7795:4;7773:27;:::i;:::-;7765:6;7761:40;7903:6;7891:10;7888:22;7867:18;7855:10;7852:34;7849:62;7846:88;;;7914:18;;:::i;:::-;7846:88;7954:10;7950:2;7943:22;7733:238;7690:281;;:::o;7977:129::-;8011:6;8038:20;;:::i;:::-;8028:30;;8067:33;8095:4;8087:6;8067:33;:::i;:::-;7977:129;;;:::o;8112:311::-;8189:4;8279:18;8271:6;8268:30;8265:56;;;8301:18;;:::i;:::-;8265:56;8351:4;8343:6;8339:17;8331:25;;8411:4;8405;8401:15;8393:23;;8112:311;;;:::o;8429:117::-;8538:1;8535;8528:12;8569:710;8665:5;8690:81;8706:64;8763:6;8706:64;:::i;:::-;8690:81;:::i;:::-;8681:90;;8791:5;8820:6;8813:5;8806:21;8854:4;8847:5;8843:16;8836:23;;8907:4;8899:6;8895:17;8887:6;8883:30;8936:3;8928:6;8925:15;8922:122;;;8955:79;;:::i;:::-;8922:122;9070:6;9053:220;9087:6;9082:3;9079:15;9053:220;;;9162:3;9191:37;9224:3;9212:10;9191:37;:::i;:::-;9186:3;9179:50;9258:4;9253:3;9249:14;9242:21;;9129:144;9113:4;9108:3;9104:14;9097:21;;9053:220;;;9057:21;8671:608;;8569:710;;;;;:::o;9302:370::-;9373:5;9422:3;9415:4;9407:6;9403:17;9399:27;9389:122;;9430:79;;:::i;:::-;9389:122;9547:6;9534:20;9572:94;9662:3;9654:6;9647:4;9639:6;9635:17;9572:94;:::i;:::-;9563:103;;9379:293;9302:370;;;;:::o;9678:539::-;9762:6;9811:2;9799:9;9790:7;9786:23;9782:32;9779:119;;;9817:79;;:::i;:::-;9779:119;9965:1;9954:9;9950:17;9937:31;9995:18;9987:6;9984:30;9981:117;;;10017:79;;:::i;:::-;9981:117;10122:78;10192:7;10183:6;10172:9;10168:22;10122:78;:::i;:::-;10112:88;;9908:302;9678:539;;;;:::o;10223:116::-;10293:21;10308:5;10293:21;:::i;:::-;10286:5;10283:32;10273:60;;10329:1;10326;10319:12;10273:60;10223:116;:::o;10345:133::-;10388:5;10426:6;10413:20;10404:29;;10442:30;10466:5;10442:30;:::i;:::-;10345:133;;;;:::o;10484:468::-;10549:6;10557;10606:2;10594:9;10585:7;10581:23;10577:32;10574:119;;;10612:79;;:::i;:::-;10574:119;10732:1;10757:53;10802:7;10793:6;10782:9;10778:22;10757:53;:::i;:::-;10747:63;;10703:117;10859:2;10885:50;10927:7;10918:6;10907:9;10903:22;10885:50;:::i;:::-;10875:60;;10830:115;10484:468;;;;;:::o;10958:474::-;11026:6;11034;11083:2;11071:9;11062:7;11058:23;11054:32;11051:119;;;11089:79;;:::i;:::-;11051:119;11209:1;11234:53;11279:7;11270:6;11259:9;11255:22;11234:53;:::i;:::-;11224:63;;11180:117;11336:2;11362:53;11407:7;11398:6;11387:9;11383:22;11362:53;:::i;:::-;11352:63;;11307:118;10958:474;;;;;:::o;11438:182::-;11578:34;11574:1;11566:6;11562:14;11555:58;11438:182;:::o;11626:366::-;11768:3;11789:67;11853:2;11848:3;11789:67;:::i;:::-;11782:74;;11865:93;11954:3;11865:93;:::i;:::-;11983:2;11978:3;11974:12;11967:19;;11626:366;;;:::o;11998:419::-;12164:4;12202:2;12191:9;12187:18;12179:26;;12251:9;12245:4;12241:20;12237:1;12226:9;12222:17;12215:47;12279:131;12405:4;12279:131;:::i;:::-;12271:139;;11998:419;;;:::o;12423:180::-;12471:77;12468:1;12461:88;12568:4;12565:1;12558:15;12592:4;12589:1;12582:15;12609:305;12649:3;12668:20;12686:1;12668:20;:::i;:::-;12663:25;;12702:20;12720:1;12702:20;:::i;:::-;12697:25;;12856:1;12788:66;12784:74;12781:1;12778:81;12775:107;;;12862:18;;:::i;:::-;12775:107;12906:1;12903;12899:9;12892:16;;12609:305;;;;:::o;12920:179::-;13060:31;13056:1;13048:6;13044:14;13037:55;12920:179;:::o;13105:366::-;13247:3;13268:67;13332:2;13327:3;13268:67;:::i;:::-;13261:74;;13344:93;13433:3;13344:93;:::i;:::-;13462:2;13457:3;13453:12;13446:19;;13105:366;;;:::o;13477:419::-;13643:4;13681:2;13670:9;13666:18;13658:26;;13730:9;13724:4;13720:20;13716:1;13705:9;13701:17;13694:47;13758:131;13884:4;13758:131;:::i;:::-;13750:139;;13477:419;;;:::o;13902:180::-;13950:77;13947:1;13940:88;14047:4;14044:1;14037:15;14071:4;14068:1;14061:15;14088:320;14132:6;14169:1;14163:4;14159:12;14149:22;;14216:1;14210:4;14206:12;14237:18;14227:81;;14293:4;14285:6;14281:17;14271:27;;14227:81;14355:2;14347:6;14344:14;14324:18;14321:38;14318:84;;;14374:18;;:::i;:::-;14318:84;14139:269;14088:320;;;:::o;14414:348::-;14454:7;14477:20;14495:1;14477:20;:::i;:::-;14472:25;;14511:20;14529:1;14511:20;:::i;:::-;14506:25;;14699:1;14631:66;14627:74;14624:1;14621:81;14616:1;14609:9;14602:17;14598:105;14595:131;;;14706:18;;:::i;:::-;14595:131;14754:1;14751;14747:9;14736:20;;14414:348;;;;:::o;14768:180::-;14816:77;14813:1;14806:88;14913:4;14910:1;14903:15;14937:4;14934:1;14927:15;14954:185;14994:1;15011:20;15029:1;15011:20;:::i;:::-;15006:25;;15045:20;15063:1;15045:20;:::i;:::-;15040:25;;15084:1;15074:35;;15089:18;;:::i;:::-;15074:35;15131:1;15128;15124:9;15119:14;;14954:185;;;;:::o;15145:234::-;15285:34;15281:1;15273:6;15269:14;15262:58;15354:17;15349:2;15341:6;15337:15;15330:42;15145:234;:::o;15385:366::-;15527:3;15548:67;15612:2;15607:3;15548:67;:::i;:::-;15541:74;;15624:93;15713:3;15624:93;:::i;:::-;15742:2;15737:3;15733:12;15726:19;;15385:366;;;:::o;15757:419::-;15923:4;15961:2;15950:9;15946:18;15938:26;;16010:9;16004:4;16000:20;15996:1;15985:9;15981:17;15974:47;16038:131;16164:4;16038:131;:::i;:::-;16030:139;;15757:419;;;:::o;16182:180::-;16230:77;16227:1;16220:88;16327:4;16324:1;16317:15;16351:4;16348:1;16341:15;16368:233;16407:3;16430:24;16448:5;16430:24;:::i;:::-;16421:33;;16476:66;16469:5;16466:77;16463:103;;;16546:18;;:::i;:::-;16463:103;16593:1;16586:5;16582:13;16575:20;;16368:233;;;:::o;16607:179::-;16747:31;16743:1;16735:6;16731:14;16724:55;16607:179;:::o;16792:366::-;16934:3;16955:67;17019:2;17014:3;16955:67;:::i;:::-;16948:74;;17031:93;17120:3;17031:93;:::i;:::-;17149:2;17144:3;17140:12;17133:19;;16792:366;;;:::o;17164:419::-;17330:4;17368:2;17357:9;17353:18;17345:26;;17417:9;17411:4;17407:20;17403:1;17392:9;17388:17;17381:47;17445:131;17571:4;17445:131;:::i;:::-;17437:139;;17164:419;;;:::o;17589:244::-;17729:34;17725:1;17717:6;17713:14;17706:58;17798:27;17793:2;17785:6;17781:15;17774:52;17589:244;:::o;17839:366::-;17981:3;18002:67;18066:2;18061:3;18002:67;:::i;:::-;17995:74;;18078:93;18167:3;18078:93;:::i;:::-;18196:2;18191:3;18187:12;18180:19;;17839:366;;;:::o;18211:419::-;18377:4;18415:2;18404:9;18400:18;18392:26;;18464:9;18458:4;18454:20;18450:1;18439:9;18435:17;18428:47;18492:131;18618:4;18492:131;:::i;:::-;18484:139;;18211:419;;;:::o;18636:223::-;18776:34;18772:1;18764:6;18760:14;18753:58;18845:6;18840:2;18832:6;18828:15;18821:31;18636:223;:::o;18865:366::-;19007:3;19028:67;19092:2;19087:3;19028:67;:::i;:::-;19021:74;;19104:93;19193:3;19104:93;:::i;:::-;19222:2;19217:3;19213:12;19206:19;;18865:366;;;:::o;19237:419::-;19403:4;19441:2;19430:9;19426:18;19418:26;;19490:9;19484:4;19480:20;19476:1;19465:9;19461:17;19454:47;19518:131;19644:4;19518:131;:::i;:::-;19510:139;;19237:419;;;:::o;19662:240::-;19802:34;19798:1;19790:6;19786:14;19779:58;19871:23;19866:2;19858:6;19854:15;19847:48;19662:240;:::o;19908:366::-;20050:3;20071:67;20135:2;20130:3;20071:67;:::i;:::-;20064:74;;20147:93;20236:3;20147:93;:::i;:::-;20265:2;20260:3;20256:12;20249:19;;19908:366;;;:::o;20280:419::-;20446:4;20484:2;20473:9;20469:18;20461:26;;20533:9;20527:4;20523:20;20519:1;20508:9;20504:17;20497:47;20561:131;20687:4;20561:131;:::i;:::-;20553:139;;20280:419;;;:::o;20705:239::-;20845:34;20841:1;20833:6;20829:14;20822:58;20914:22;20909:2;20901:6;20897:15;20890:47;20705:239;:::o;20950:366::-;21092:3;21113:67;21177:2;21172:3;21113:67;:::i;:::-;21106:74;;21189:93;21278:3;21189:93;:::i;:::-;21307:2;21302:3;21298:12;21291:19;;20950:366;;;:::o;21322:419::-;21488:4;21526:2;21515:9;21511:18;21503:26;;21575:9;21569:4;21565:20;21561:1;21550:9;21546:17;21539:47;21603:131;21729:4;21603:131;:::i;:::-;21595:139;;21322:419;;;:::o;21747:225::-;21887:34;21883:1;21875:6;21871:14;21864:58;21956:8;21951:2;21943:6;21939:15;21932:33;21747:225;:::o;21978:366::-;22120:3;22141:67;22205:2;22200:3;22141:67;:::i;:::-;22134:74;;22217:93;22306:3;22217:93;:::i;:::-;22335:2;22330:3;22326:12;22319:19;;21978:366;;;:::o;22350:419::-;22516:4;22554:2;22543:9;22539:18;22531:26;;22603:9;22597:4;22593:20;22589:1;22578:9;22574:17;22567:47;22631:131;22757:4;22631:131;:::i;:::-;22623:139;;22350:419;;;:::o;22775:177::-;22915:29;22911:1;22903:6;22899:14;22892:53;22775:177;:::o;22958:366::-;23100:3;23121:67;23185:2;23180:3;23121:67;:::i;:::-;23114:74;;23197:93;23286:3;23197:93;:::i;:::-;23315:2;23310:3;23306:12;23299:19;;22958:366;;;:::o;23330:419::-;23496:4;23534:2;23523:9;23519:18;23511:26;;23583:9;23577:4;23573:20;23569:1;23558:9;23554:17;23547:47;23611:131;23737:4;23611:131;:::i;:::-;23603:139;;23330:419;;;:::o;23755:223::-;23895:34;23891:1;23883:6;23879:14;23872:58;23964:6;23959:2;23951:6;23947:15;23940:31;23755:223;:::o;23984:366::-;24126:3;24147:67;24211:2;24206:3;24147:67;:::i;:::-;24140:74;;24223:93;24312:3;24223:93;:::i;:::-;24341:2;24336:3;24332:12;24325:19;;23984:366;;;:::o;24356:419::-;24522:4;24560:2;24549:9;24545:18;24537:26;;24609:9;24603:4;24599:20;24595:1;24584:9;24580:17;24573:47;24637:131;24763:4;24637:131;:::i;:::-;24629:139;;24356:419;;;:::o;24781:221::-;24921:34;24917:1;24909:6;24905:14;24898:58;24990:4;24985:2;24977:6;24973:15;24966:29;24781:221;:::o;25008:366::-;25150:3;25171:67;25235:2;25230:3;25171:67;:::i;:::-;25164:74;;25247:93;25336:3;25247:93;:::i;:::-;25365:2;25360:3;25356:12;25349:19;;25008:366;;;:::o;25380:419::-;25546:4;25584:2;25573:9;25569:18;25561:26;;25633:9;25627:4;25623:20;25619:1;25608:9;25604:17;25597:47;25661:131;25787:4;25661:131;:::i;:::-;25653:139;;25380:419;;;:::o;25805:224::-;25945:34;25941:1;25933:6;25929:14;25922:58;26014:7;26009:2;26001:6;25997:15;25990:32;25805:224;:::o;26035:366::-;26177:3;26198:67;26262:2;26257:3;26198:67;:::i;:::-;26191:74;;26274:93;26363:3;26274:93;:::i;:::-;26392:2;26387:3;26383:12;26376:19;;26035:366;;;:::o;26407:419::-;26573:4;26611:2;26600:9;26596:18;26588:26;;26660:9;26654:4;26650:20;26646:1;26635:9;26631:17;26624:47;26688:131;26814:4;26688:131;:::i;:::-;26680:139;;26407:419;;;:::o;26832:222::-;26972:34;26968:1;26960:6;26956:14;26949:58;27041:5;27036:2;27028:6;27024:15;27017:30;26832:222;:::o;27060:366::-;27202:3;27223:67;27287:2;27282:3;27223:67;:::i;:::-;27216:74;;27299:93;27388:3;27299:93;:::i;:::-;27417:2;27412:3;27408:12;27401:19;;27060:366;;;:::o;27432:419::-;27598:4;27636:2;27625:9;27621:18;27613:26;;27685:9;27679:4;27675:20;27671:1;27660:9;27656:17;27649:47;27713:131;27839:4;27713:131;:::i;:::-;27705:139;;27432:419;;;:::o;27857:301::-;27997:34;27993:1;27985:6;27981:14;27974:58;28066:34;28061:2;28053:6;28049:15;28042:59;28135:15;28130:2;28122:6;28118:15;28111:40;27857:301;:::o;28164:366::-;28306:3;28327:67;28391:2;28386:3;28327:67;:::i;:::-;28320:74;;28403:93;28492:3;28403:93;:::i;:::-;28521:2;28516:3;28512:12;28505:19;;28164:366;;;:::o;28536:419::-;28702:4;28740:2;28729:9;28725:18;28717:26;;28789:9;28783:4;28779:20;28775:1;28764:9;28760:17;28753:47;28817:131;28943:4;28817:131;:::i;:::-;28809:139;;28536:419;;;:::o;28961:172::-;29101:24;29097:1;29089:6;29085:14;29078:48;28961:172;:::o;29139:366::-;29281:3;29302:67;29366:2;29361:3;29302:67;:::i;:::-;29295:74;;29378:93;29467:3;29378:93;:::i;:::-;29496:2;29491:3;29487:12;29480:19;;29139:366;;;:::o;29511:419::-;29677:4;29715:2;29704:9;29700:18;29692:26;;29764:9;29758:4;29754:20;29750:1;29739:9;29735:17;29728:47;29792:131;29918:4;29792:131;:::i;:::-;29784:139;;29511:419;;;:::o;29936:297::-;30076:34;30072:1;30064:6;30060:14;30053:58;30145:34;30140:2;30132:6;30128:15;30121:59;30214:11;30209:2;30201:6;30197:15;30190:36;29936:297;:::o;30239:366::-;30381:3;30402:67;30466:2;30461:3;30402:67;:::i;:::-;30395:74;;30478:93;30567:3;30478:93;:::i;:::-;30596:2;30591:3;30587:12;30580:19;;30239:366;;;:::o;30611:419::-;30777:4;30815:2;30804:9;30800:18;30792:26;;30864:9;30858:4;30854:20;30850:1;30839:9;30835:17;30828:47;30892:131;31018:4;30892:131;:::i;:::-;30884:139;;30611:419;;;:::o;31036:240::-;31176:34;31172:1;31164:6;31160:14;31153:58;31245:23;31240:2;31232:6;31228:15;31221:48;31036:240;:::o;31282:366::-;31424:3;31445:67;31509:2;31504:3;31445:67;:::i;:::-;31438:74;;31521:93;31610:3;31521:93;:::i;:::-;31639:2;31634:3;31630:12;31623:19;;31282:366;;;:::o;31654:419::-;31820:4;31858:2;31847:9;31843:18;31835:26;;31907:9;31901:4;31897:20;31893:1;31882:9;31878:17;31871:47;31935:131;32061:4;31935:131;:::i;:::-;31927:139;;31654:419;;;:::o;32079:169::-;32219:21;32215:1;32207:6;32203:14;32196:45;32079:169;:::o;32254:366::-;32396:3;32417:67;32481:2;32476:3;32417:67;:::i;:::-;32410:74;;32493:93;32582:3;32493:93;:::i;:::-;32611:2;32606:3;32602:12;32595:19;;32254:366;;;:::o;32626:419::-;32792:4;32830:2;32819:9;32815:18;32807:26;;32879:9;32873:4;32869:20;32865:1;32854:9;32850:17;32843:47;32907:131;33033:4;32907:131;:::i;:::-;32899:139;;32626:419;;;:::o;33051:241::-;33191:34;33187:1;33179:6;33175:14;33168:58;33260:24;33255:2;33247:6;33243:15;33236:49;33051:241;:::o;33298:366::-;33440:3;33461:67;33525:2;33520:3;33461:67;:::i;:::-;33454:74;;33537:93;33626:3;33537:93;:::i;:::-;33655:2;33650:3;33646:12;33639:19;;33298:366;;;:::o;33670:419::-;33836:4;33874:2;33863:9;33859:18;33851:26;;33923:9;33917:4;33913:20;33909:1;33898:9;33894:17;33887:47;33951:131;34077:4;33951:131;:::i;:::-;33943:139;;33670:419;;;:::o;34095:191::-;34135:4;34155:20;34173:1;34155:20;:::i;:::-;34150:25;;34189:20;34207:1;34189:20;:::i;:::-;34184:25;;34228:1;34225;34222:8;34219:34;;;34233:18;;:::i;:::-;34219:34;34278:1;34275;34271:9;34263:17;;34095:191;;;;:::o;34292:442::-;34441:4;34479:2;34468:9;34464:18;34456:26;;34492:71;34560:1;34549:9;34545:17;34536:6;34492:71;:::i;:::-;34573:72;34641:2;34630:9;34626:18;34617:6;34573:72;:::i;:::-;34655;34723:2;34712:9;34708:18;34699:6;34655:72;:::i;:::-;34292:442;;;;;;:::o;34740:220::-;34880:34;34876:1;34868:6;34864:14;34857:58;34949:3;34944:2;34936:6;34932:15;34925:28;34740:220;:::o;34966:366::-;35108:3;35129:67;35193:2;35188:3;35129:67;:::i;:::-;35122:74;;35205:93;35294:3;35205:93;:::i;:::-;35323:2;35318:3;35314:12;35307:19;;34966:366;;;:::o;35338:419::-;35504:4;35542:2;35531:9;35527:18;35519:26;;35591:9;35585:4;35581:20;35577:1;35566:9;35562:17;35555:47;35619:131;35745:4;35619:131;:::i;:::-;35611:139;;35338:419;;;:::o;35763:143::-;35820:5;35851:6;35845:13;35836:22;;35867:33;35894:5;35867:33;:::i;:::-;35763:143;;;;:::o;35912:351::-;35982:6;36031:2;36019:9;36010:7;36006:23;36002:32;35999:119;;;36037:79;;:::i;:::-;35999:119;36157:1;36182:64;36238:7;36229:6;36218:9;36214:22;36182:64;:::i;:::-;36172:74;;36128:128;35912:351;;;;:::o;36269:85::-;36314:7;36343:5;36332:16;;36269:85;;;:::o;36360:158::-;36418:9;36451:61;36469:42;36478:32;36504:5;36478:32;:::i;:::-;36469:42;:::i;:::-;36451:61;:::i;:::-;36438:74;;36360:158;;;:::o;36524:147::-;36619:45;36658:5;36619:45;:::i;:::-;36614:3;36607:58;36524:147;;:::o;36677:114::-;36744:6;36778:5;36772:12;36762:22;;36677:114;;;:::o;36797:184::-;36896:11;36930:6;36925:3;36918:19;36970:4;36965:3;36961:14;36946:29;;36797:184;;;;:::o;36987:132::-;37054:4;37077:3;37069:11;;37107:4;37102:3;37098:14;37090:22;;36987:132;;;:::o;37125:108::-;37202:24;37220:5;37202:24;:::i;:::-;37197:3;37190:37;37125:108;;:::o;37239:179::-;37308:10;37329:46;37371:3;37363:6;37329:46;:::i;:::-;37407:4;37402:3;37398:14;37384:28;;37239:179;;;;:::o;37424:113::-;37494:4;37526;37521:3;37517:14;37509:22;;37424:113;;;:::o;37573:732::-;37692:3;37721:54;37769:5;37721:54;:::i;:::-;37791:86;37870:6;37865:3;37791:86;:::i;:::-;37784:93;;37901:56;37951:5;37901:56;:::i;:::-;37980:7;38011:1;37996:284;38021:6;38018:1;38015:13;37996:284;;;38097:6;38091:13;38124:63;38183:3;38168:13;38124:63;:::i;:::-;38117:70;;38210:60;38263:6;38210:60;:::i;:::-;38200:70;;38056:224;38043:1;38040;38036:9;38031:14;;37996:284;;;38000:14;38296:3;38289:10;;37697:608;;;37573:732;;;;:::o;38311:831::-;38574:4;38612:3;38601:9;38597:19;38589:27;;38626:71;38694:1;38683:9;38679:17;38670:6;38626:71;:::i;:::-;38707:80;38783:2;38772:9;38768:18;38759:6;38707:80;:::i;:::-;38834:9;38828:4;38824:20;38819:2;38808:9;38804:18;38797:48;38862:108;38965:4;38956:6;38862:108;:::i;:::-;38854:116;;38980:72;39048:2;39037:9;39033:18;39024:6;38980:72;:::i;:::-;39062:73;39130:3;39119:9;39115:19;39106:6;39062:73;:::i;:::-;38311:831;;;;;;;;:::o;39148:807::-;39397:4;39435:3;39424:9;39420:19;39412:27;;39449:71;39517:1;39506:9;39502:17;39493:6;39449:71;:::i;:::-;39530:72;39598:2;39587:9;39583:18;39574:6;39530:72;:::i;:::-;39612:80;39688:2;39677:9;39673:18;39664:6;39612:80;:::i;:::-;39702;39778:2;39767:9;39763:18;39754:6;39702:80;:::i;:::-;39792:73;39860:3;39849:9;39845:19;39836:6;39792:73;:::i;:::-;39875;39943:3;39932:9;39928:19;39919:6;39875:73;:::i;:::-;39148:807;;;;;;;;;:::o;39961:143::-;40018:5;40049:6;40043:13;40034:22;;40065:33;40092:5;40065:33;:::i;:::-;39961:143;;;;:::o;40110:663::-;40198:6;40206;40214;40263:2;40251:9;40242:7;40238:23;40234:32;40231:119;;;40269:79;;:::i;:::-;40231:119;40389:1;40414:64;40470:7;40461:6;40450:9;40446:22;40414:64;:::i;:::-;40404:74;;40360:128;40527:2;40553:64;40609:7;40600:6;40589:9;40585:22;40553:64;:::i;:::-;40543:74;;40498:129;40666:2;40692:64;40748:7;40739:6;40728:9;40724:22;40692:64;:::i;:::-;40682:74;;40637:129;40110:663;;;;;:::o

Swarm Source

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