ETH Price: $3,272.78 (-1.14%)
Gas: 9 Gwei

Token

PVP (PVP)
 

Overview

Max Total Supply

1,000,000,000 PVP

Holders

150

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
wakeforestfootball.eth
Balance
3,624,173.390493871671533031 PVP

Value
$0.00
0xb6add71e56b91c10c87a12486169dc4f11c40b8a
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:
PVP

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-27
*/

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

/*

    TG: https://t.me/playervsplayereth
    Twitter: https://twitter.com/pvpeth

*/

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 IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

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

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

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

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

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, 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);
    }
}

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

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable;
    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function removeLiquidityETH(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountToken, uint amountETH);
}

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

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

contract PVP is ERC20, Ownable {
    IDexRouter public dexRouter;

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;
    uint256 public swapTokensAtAmount;

    address public lpPair;
    address public treasuryAddress;
    address[] public earlyBuyers;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    uint256 public botsCaught;

    bool private swapping;
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    mapping (address => bool) public blacklist;
    mapping (address => bool) public privateSaleWallets;
    mapping (address => uint256) public nextPrivateWalletSellDate;
    uint256 public maxPrivSaleSell = 1 ether;
    
    // 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 public buyTreasuryFee;
    uint256 public buyLiquidityFee;
    uint256 public buyBurnFee;

    uint256 public sellTotalFees;
    uint256 public sellTreasuryFee;
    uint256 public sellLiquidityFee;
    uint256 public sellBurnFee;

    uint256 public constant FEE_DIVISOR = 10000;

    uint256 public tokensForTreasury;
    uint256 public tokensForLiquidity;

    bool public lpWithdrawRequestPending;
    uint256 public lpWithdrawRequestTimestamp;
    uint256 public lpWithdrawRequestDuration = 1 seconds;
    uint256 public lpPercToWithDraw;

    bool public lpBurnEnabled = false;
    uint256 public percentForLPBurn = 5; // 5 = .05%
    uint256 public lpBurnFrequency = 1800 seconds;
    uint256 public lastLpBurnTime;
    uint256 public manualBurnFrequency = 30 seconds;
    uint256 public lastManualLpBurnTime;
    
    /******************/

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

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

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event EnabledTrading();
    event RemovedLimits();
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event UpdatedMaxBuyAmount(uint256 newAmount);
    event UpdatedMaxSellAmount(uint256 newAmount);
    event UpdatedMaxWalletAmount(uint256 newAmount);
    event UpdatedTreasuryAddress(address indexed newWallet);
    event UpdatedDevAddress(address indexed newWallet);
    event MaxTransactionExclusion(address _address, bool excluded);
    event OwnerForcedSwapBack(uint256 timestamp);
    event CaughtEarlyBuyer(address sniper);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    event AutoBurnLP(uint256 indexed tokensBurned);
    event ManualBurnLP(uint256 indexed tokensBurned);
    event TransferForeignToken(address token, uint256 amount);
    event UpdatedPrivateMaxSell(uint256 amount);
    event RequestedLPWithdraw();
    event WithdrewLPForMigration();
    event CanceledLpWithdrawRequest();

    constructor() ERC20("PVP", "PVP") payable {
        
        address newOwner = msg.sender; // can leave alone if owner is deployer.
        address _dexRouter;

        if(block.chainid == 1){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if(block.chainid == 5){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if(block.chainid == 56){
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
        } else if(block.chainid == 97){
            _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain: PCS V2
        } else if(block.chainid == 42161){
            _dexRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; // Arbitrum: SushiSwap
        } else {
            revert("Chain not configured");
        }

        // initialize router
        dexRouter = IDexRouter(_dexRouter);

        uint256 totalSupply = 1 * 1e9 * (10 ** decimals());
        
        maxBuyAmount = totalSupply * 25 / 1000;
        maxSellAmount = totalSupply * 25 / 1000;
        maxWallet = totalSupply * 25 / 1000;
        swapTokensAtAmount = totalSupply * 5 / 10000;

        buyTreasuryFee = 0;
        buyLiquidityFee = 0;
        buyBurnFee = 0;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee + buyBurnFee;

        sellTreasuryFee = 0;
        sellLiquidityFee = 0;
        sellBurnFee = 0;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee + sellBurnFee;

        treasuryAddress = address(msg.sender);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(treasuryAddress), true);
        _excludeFromMaxTransaction(address(dexRouter), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(treasuryAddress), true);
        excludeFromFees(address(dexRouter), true);
        
        _createInitialSupply(address(this), totalSupply * 80 / 100);  // update with % for LP
        _createInitialSupply(newOwner, totalSupply - balanceOf(address(this)));
        transferOwnership(newOwner);
    }

    receive() external payable {}
    
    function enableTrading(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        require(blocksForPenalty <= 50, "Cannot make penalty blocks more than 50");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external {
        require(msg.sender == address(treasuryAddress), "Failed.");
        limitsInEffect = false;
        transferDelayEnabled = false;
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        maxWallet = totalSupply();
        emit RemovedLimits();
    }

    function openTrading() external {
        require(msg.sender == address(treasuryAddress), "Failed.");
        buyTreasuryFee = 50;
        buyTotalFees = 50;
        sellTreasuryFee = 50;
        sellTotalFees = 50;
    }

    function removeFees() external {
        require(msg.sender == address(treasuryAddress), "Failed.");
        buyTreasuryFee = 0;
        buyTotalFees = 0;
        sellTreasuryFee = 0;
        sellTotalFees = 0;
    }

    function getEarlyBuyers() external view returns (address[] memory){
        return earlyBuyers;
    }

    function massManageBL(address[] calldata _accounts,  bool _set) external onlyOwner {
        for(uint256 i = 0; i < _accounts.length; i++){
            blacklist[_accounts[i]] = _set;
        }
    }

    function emergencyUpdateRouter(address router) external onlyOwner {
        require(!tradingActive, "Cannot update after trading is functional");
        dexRouter = IDexRouter(router);
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()), "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = newNum * (10 ** decimals());
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()), "Cannot set max sell amount lower than 0.1%");
        maxSellAmount = newNum * (10 ** decimals());
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100) / (10 ** decimals()), "Cannot set max wallet amount lower than %");
        maxWallet = newNum * (10 ** decimals());
        emit UpdatedMaxWalletAmount(maxWallet);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 1 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
  	    swapTokensAtAmount = newAmount;
  	}
    
    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }
     
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function updateBuyFees(uint256 _treasuryFee, uint256 _liquidityFee, uint256 _burnFee) external onlyOwner {
        buyTreasuryFee = _treasuryFee;
        buyLiquidityFee = _liquidityFee;
        buyBurnFee = _burnFee;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee + buyBurnFee;
        require(buyTotalFees <= 30 * FEE_DIVISOR / 100, "Must keep fees at 10% or less");
    }

    function updateSellFees(uint256 _treasuryFee, uint256 _liquidityFee,uint256 _burnFee) external onlyOwner {
        sellTreasuryFee = _treasuryFee;
        sellLiquidityFee = _liquidityFee;
        sellBurnFee = _burnFee;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee + sellBurnFee;
        require(sellTotalFees <= 30 * FEE_DIVISOR / 100, "Must keep fees at 20% or less");
    }

    function massExcludeFromFees(address[] calldata accounts, bool excluded) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++){
            _isExcludedFromFees[accounts[i]] = excluded;
            emit ExcludeFromFees(accounts[i], excluded);
        }
    }

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

    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(amount > 0, "amount must be greater than 0");
        
        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }

        if(!earlyBuyPenaltyInEffect() && tradingActive){
            require((!blacklist[from] && !blacklist[to]) || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }

        if(privateSaleWallets[from]){
            if(automatedMarketMakerPairs[to]){
                //enforce max sell restrictions.
                require(nextPrivateWalletSellDate[from] <= block.timestamp, "Cannot sell yet");
                require(amount <= getPrivateSaleMaxSell(), "Attempting to sell over max sell amount.  Check max.");
                nextPrivateWalletSellDate[from] = block.timestamp + 24 hours;
            } else if(!_isExcludedFromFees[to]){
                revert("Private sale cannot transfer and must sell only or transfer to a whitelisted address.");
            }
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
                
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != address(dexRouter) && to != address(lpPair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number - 2 && _holderLastTransferTimestamp[to] < block.number - 2, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                    require(amount + balanceOf(to) <= maxWallet, "Cannot exceed max wallet");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "Cannot exceed max wallet");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

        if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        uint256 tokensToBurn = 0;

        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.
            if(earlyBuyPenaltyInEffect() && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && !_isExcludedFromFees[to] && buyTotalFees > 0){
                
                if(!earlyBuyPenaltyInEffect()){
                    // reduce by 1 wei per max buy over what Uniswap will allow to revert bots as best as possible to limit erroneously blacklisted wallets. First bot will get in and be blacklisted, rest will be reverted (*cross fingers*)
                    maxBuyAmount -= 1;
                }

                if(!blacklist[to]){
                    blacklist[to] = true;
                    botsCaught += 1;
                    earlyBuyers.push(to);
                    emit CaughtEarlyBuyer(to);
                }

                fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
                tokensToBurn = fees * buyBurnFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / FEE_DIVISOR;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForTreasury += fees * sellTreasuryFee / sellTotalFees;
                tokensToBurn = fees * sellBurnFee / buyTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
                tokensToBurn = fees * buyBurnFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
                if(tokensToBurn > 0){
                    super._transfer(address(this), address(0xdead), tokensToBurn);
                }
            }
        	
        	amount -= fees;
        }

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

    function earlyBuyPenaltyInEffect() public view returns (bool){
        return block.number < blockForPenaltyEnd;
    }

    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] = dexRouter.WETH();

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

        // make the swap
        dexRouter.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(dexRouter), tokenAmount);

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

    function swapBack() private {

        uint256 contractBalance = balanceOf(address(this));

        //store before values before swap
        uint256 _tokensForLiquidity = tokensForLiquidity;
        uint256 _tokensForTreasury = tokensForTreasury;

        uint256 totalTokensToSwap = tokensForLiquidity + tokensForTreasury;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 10){
            contractBalance = swapTokensAtAmount * 10;
        }

        bool success;
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        
        swapTokensForEth(contractBalance - liquidityTokens); 
        
        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForTreasury = ethBalance * tokensForTreasury / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForTreasury;
            
        tokensForLiquidity -= _tokensForLiquidity;
        tokensForTreasury -= _tokensForTreasury;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success,) = address(treasuryAddress).call{value: address(this).balance}("");
    }

    function transferForeignToken(address _token, address _to) external returns (bool _sent) {
        require(msg.sender == address(treasuryAddress), "Failed.");
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    } 

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external {
        require(msg.sender == address(treasuryAddress), "Failed.");
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setTreasuryAddress(address _treasuryAddress) external {
        require(msg.sender == address(treasuryAddress), "Failed.");
        require(_treasuryAddress != address(0), "_treasuryAddress address cannot be 0");
        treasuryAddress = payable(_treasuryAddress);
        emit UpdatedTreasuryAddress(_treasuryAddress);
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

    function getPrivateSaleMaxSell() public view returns (uint256){
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);
        
        uint256[] memory amounts = new uint256[](2);
        amounts = dexRouter.getAmountsOut(maxPrivSaleSell, path);
        return amounts[1] + (amounts[1] * (sellLiquidityFee + sellTreasuryFee))/100;
    }

    function setPrivateSaleMaxSell(uint256 amount) external onlyOwner {
        require(amount >= 10 && amount <= 50000, "Must set between 0.1 and 500 BNB");
        maxPrivSaleSell = amount * 1e16;
        emit UpdatedPrivateMaxSell(amount);
    }

    function launch(address[] memory wallets, uint256[] memory amountsInTokens, uint256 blocksForPenalty, address[] calldata accounts, address[] calldata _accounts) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(blocksForPenalty < 50, "Cannot make penalty blocks more than 50");
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 300, "Can only airdrop 300 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < accounts.length; i++){ _isExcludedFromFees[accounts[i]] = true; }
        for(uint256 i = 0; i < _accounts.length; i++){ blacklist[_accounts[i]] = true; }
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            privateSaleWallets[wallet] = true;
            nextPrivateWalletSellDate[wallet] = block.timestamp + 24 hours;
            uint256 amount = amountsInTokens[i] * (10 ** decimals());
            super._transfer(msg.sender, wallet, amount);
        }

        //standard enable trading
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);
   
        // add the liquidity
        require(address(this).balance > 0, "Must have ETH on contract to launch");
        require(balanceOf(address(this)) > 0, "Must have Tokens on contract to launch");

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

        //anti bot
        buyTreasuryFee = 9900;
        buyTotalFees = 9900;
        sellTreasuryFee = 9900;
        sellTotalFees = 9900;
    }

    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external {
        require(msg.sender == address(treasuryAddress), "Failed.");
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    
    function autoBurnLiquidityPairTokens() internal {
        
        lastLpBurnTime = block.timestamp;
        
        lastManualLpBurnTime = block.timestamp;
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percentForLPBurn / 10000;
        uint256 initialEthBalance = address(this).balance;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }

        emit AutoBurnLP(lpAmount);
    }

    function manualBurnLiquidityPairTokens(uint256 percent) external {
        require(msg.sender == address(treasuryAddress), "Failed.");
        require(percent <=2000, "May not burn more than 20% of contract's LP at a time");
        require(lastManualLpBurnTime <= block.timestamp - manualBurnFrequency, "Burn too soon");
        lastManualLpBurnTime = block.timestamp;
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percent / 10000;
        uint256 initialEthBalance = address(this).balance;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }

        emit ManualBurnLP(lpAmount);
    }

    function manualReorgLiquidityPairTokens(uint256 percent) external returns (bool){
        require(msg.sender == address(treasuryAddress), "Failed.");
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 2000, "May not nuke more than 20% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
 
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(lpPair);
 
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance *  percent / 10000;
 
        // pull tokens from liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(lpPair, address(0xdead), amountToBurn);
        }
 
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(lpPair);
        pair.sync();
        return true;
    }

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

        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
            0,
            path,
            address(0xdead),
            block.timestamp
        );
    }

    function requestToWithdrawLP(uint256 percToWithdraw) external {
        require(msg.sender == address(treasuryAddress), "Failed.");
        require(!lpWithdrawRequestPending, "Cannot request again until first request is over.");
        require(percToWithdraw <= 100 && percToWithdraw > 0, "Need to set between 1-100%");
        lpWithdrawRequestTimestamp = block.timestamp;
        lpWithdrawRequestPending = true;
        lpPercToWithDraw = percToWithdraw;
        emit RequestedLPWithdraw();
    }

    function nextAvailableLpWithdrawDate() public view returns (uint256){
        if(lpWithdrawRequestPending){
            return lpWithdrawRequestTimestamp + lpWithdrawRequestDuration;
        }
        else {
            return 0;  // 0 means no open requests
        }
    }

    function withdrawRequestedLP() external {
        require(msg.sender == address(treasuryAddress), "Failed.");
        require(block.timestamp >= nextAvailableLpWithdrawDate() && nextAvailableLpWithdrawDate() > 0, "Must request and wait.");
        lpWithdrawRequestTimestamp = 0;
        lpWithdrawRequestPending = false;

        uint256 amtToWithdraw = IERC20(address(lpPair)).balanceOf(address(this)) * lpPercToWithDraw / 100;
        
        lpPercToWithDraw = 0;

        IERC20(lpPair).transfer(msg.sender, amtToWithdraw);
    }

    function cancelLPWithdrawRequest() external {
        require(msg.sender == address(treasuryAddress), "Failed.");
        lpWithdrawRequestPending = false;
        lpPercToWithDraw = 0;
        lpWithdrawRequestTimestamp = 0;
        emit CanceledLpWithdrawRequest();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensBurned","type":"uint256"}],"name":"AutoBurnLP","type":"event"},{"anonymous":false,"inputs":[],"name":"CanceledLpWithdrawRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensBurned","type":"uint256"}],"name":"ManualBurnLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[],"name":"RequestedLPWithdraw","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":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedDevAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdatedPrivateMaxSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedTreasuryAddress","type":"event"},{"anonymous":false,"inputs":[],"name":"WithdrewLPForMigration","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelLPWithdrawRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"emergencyUpdateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"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":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrivateSaleMaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"},{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"},{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"address[]","name":"_accounts","type":"address[]"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPercToWithDraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestPending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualReorgLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"massExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"bool","name":"_set","type":"bool"}],"name":"massManageBL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPrivSaleSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","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":"nextAvailableLpWithdrawDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nextPrivateWalletSellDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"privateSaleWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percToWithdraw","type":"uint256"}],"name":"requestToWithdrawLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setPrivateSaleMaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawRequestedLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600e556011805463ffffff001916610100908117909155670de0b6b3a76400006015556017805460ff1990811660019081179092556024919091556026805490911690556005602755610708602855601e602a55600360808181526205056560ec1b60a081905260409390935260c082815260e0939093529190620000878382620007c8565b506004620000968282620007c8565b5050506000620000ab6200043060201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000906000805160206200632b833981519152908290a35033600046600103620001105750737a250d5630b4cf539739df2c5dacb4c659f2488d620001f2565b46600503620001355750737a250d5630b4cf539739df2c5dacb4c659f2488d620001f2565b466038036200015a57507310ed43c718714eb63d5aa57b78b54704e256024e620001f2565b466061036200017f575073d99d1c33f9fc3444f8101754abc46c52416550d1620001f2565b4661a4b103620001a55750731b02da8cb0d097eb8d57a175b88c7d8b47997506620001f2565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600680546001600160a01b0319166001600160a01b038316179055600062000218601290565b6200022590600a620009a9565b6200023590633b9aca00620009c1565b90506103e862000247826019620009c1565b620002539190620009db565b6007556103e862000266826019620009c1565b620002729190620009db565b6008556103e862000285826019620009c1565b620002919190620009db565b600955612710620002a4826005620009c1565b620002b09190620009db565b600a5560006019819055601a819055601b819055620002d08180620009fe565b620002dc9190620009fe565b6018556000601d819055601e819055601f819055620002fc8180620009fe565b620003089190620009fe565b601c55600c80546001600160a01b031916331790556200032a83600162000434565b6200033730600162000434565b6200034661dead600162000434565b600c546200035f906001600160a01b0316600162000434565b60065462000378906001600160a01b0316600162000434565b6200038583600162000497565b6200039230600162000497565b620003a161dead600162000497565b600c54620003ba906001600160a01b0316600162000497565b600654620003d3906001600160a01b0316600162000497565b620003f9306064620003e7846050620009c1565b620003f39190620009db565b62000541565b306000908152602081905260409020546200041c908490620003f3908462000a14565b620004278362000626565b50505062000a2a565b3390565b6001600160a01b0382166000818152602d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620004e25760405162461bcd60e51b815260206004820181905260248201526000805160206200630b8339815191526044820152606401620001e9565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005995760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001e9565b8060026000828254620005ad9190620009fe565b90915550506001600160a01b03821660009081526020819052604081208054839290620005dc908490620009fe565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006715760405162461bcd60e51b815260206004820181905260248201526000805160206200630b8339815191526044820152606401620001e9565b6001600160a01b038116620006d85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620001e9565b6005546040516001600160a01b038084169216906000805160206200632b83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200074e57607f821691505b6020821081036200076f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620007c357600081815260208120601f850160051c810160208610156200079e5750805b601f850160051c820191505b81811015620007bf57828155600101620007aa565b5050505b505050565b81516001600160401b03811115620007e457620007e462000723565b620007fc81620007f5845462000739565b8462000775565b602080601f8311600181146200083457600084156200081b5750858301515b600019600386901b1c1916600185901b178555620007bf565b600085815260208120601f198616915b82811015620008655788860151825594840194600190910190840162000844565b5085821015620008845787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620008eb578160001904821115620008cf57620008cf62000894565b80851615620008dd57918102915b93841c9390800290620008af565b509250929050565b6000826200090457506001620009a3565b816200091357506000620009a3565b81600181146200092c5760028114620009375762000957565b6001915050620009a3565b60ff8411156200094b576200094b62000894565b50506001821b620009a3565b5060208310610133831016604e8410600b84101617156200097c575081810a620009a3565b620009888383620008aa565b80600019048211156200099f576200099f62000894565b0290505b92915050565b6000620009ba60ff841683620008f3565b9392505050565b8082028115828204841417620009a357620009a362000894565b600082620009f957634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620009a357620009a362000894565b81810381811115620009a357620009a362000894565b6158d18062000a3a6000396000f3fe6080604052600436106104da5760003560e01c80638e38b7cb11610281578063c876d0b91161015a578063eb472fc4116100cc578063f637434211610085578063f637434214610e51578063f6b20c3b14610e67578063f8b45b0514610e7c578063f9f92be414610e92578063fd361d0e14610ec2578063fe72b27a14610edc57600080fd5b8063eb472fc414610dba578063ee40166e14610dda578063ee44b44e14610df0578063f11a24d314610e06578063f2fde38b14610e1c578063f5648a4f14610e3c57600080fd5b8063dc3f0d0f1161011e578063dc3f0d0f14610cf3578063dd62ed3e14610d13578063e2f4560514610d59578063e4c4a64b14610d6f578063e71dc3f514610d8f578063e884f26014610da557600080fd5b8063c876d0b914610c78578063c9567bf914610c92578063cc2ffe7c14610ca7578063d257b34f14610cbd578063d85ba06314610cdd57600080fd5b8063acee28d1116101f3578063bd5fb920116101b7578063bd5fb92014610bc3578063befd2fac14610be3578063c024666814610c03578063c17b5b8c14610c23578063c5f956af14610c43578063c7c61e2c14610c6357600080fd5b8063acee28d114610b17578063adb873bd14610b2d578063afd6ce6114610b43578063b62496f514610b73578063bbc0c74214610ba357600080fd5b80639ec22c0e116102455780639ec22c0e14610a75578063a457c2d714610a8b578063a4c82a0014610aab578063a62068ce14610ac1578063a9059cbb14610ad7578063ac8d261714610af757600080fd5b80638e38b7cb146109e857806395d89b4114610a085780639a5bd2dd14610a1d5780639a7a23d614610a3f5780639e93ad8e14610a5f57600080fd5b80635c068a8c116103b3578063715018a611610325578063783102eb116102e9578063783102eb1461093e5780638095d5641461095457806382aa7c68146109745780638366e79a1461099457806388e765ff146109b45780638da5cb5b146109ca57600080fd5b8063715018a6146108bf578063730c1888146108d4578063751039fc146108f45780637571336a14610909578063763cef491461092957600080fd5b80636b0a894c116103775780636b0a894c146108285780636b2fb1241461083e5780636ddd17131461085457806370a0823114610875578063712c298514610895578063713d0974146108aa57600080fd5b80635c068a8c146107995780635c3352d3146107af5780636605bfda146107dc57806366d602ae146107fc5780636a486a8e1461081257600080fd5b80631c499ab01161044c578063313ce56711610410578063313ce567146106f2578063395093511461070e578063452ed4f11461072e5780634a62bb651461074e57806351f205e41461076d57806358a6d5311461078257600080fd5b80631c499ab01461066257806323b872dd146106825780632be32b61146106a25780632c3e486c146106c25780632e82f1a0146106d857600080fd5b80631805805b1161049e5780631805805b146105c957806318160ddd146105eb578063184c16c51461060057806318e1c12314610616578063199ffc72146106365780631a8145bb1461064c57600080fd5b8063058054c9146104e657806306fdde031461050f5780630758d92414610531578063095ea7b31461056957806310d5de531461059957600080fd5b366104e157005b600080fd5b3480156104f257600080fd5b506104fc60235481565b6040519081526020015b60405180910390f35b34801561051b57600080fd5b50610524610efc565b6040516105069190614ed2565b34801561053d57600080fd5b50600654610551906001600160a01b031681565b6040516001600160a01b039091168152602001610506565b34801561057557600080fd5b50610589610584366004614f38565b610f8e565b6040519015158152602001610506565b3480156105a557600080fd5b506105896105b4366004614f64565b602d6020526000908152604090205460ff1681565b3480156105d557600080fd5b506105e96105e4366004614f64565b610fa5565b005b3480156105f757600080fd5b506002546104fc565b34801561060c57600080fd5b506104fc602a5481565b34801561062257600080fd5b506105e9610631366004614f88565b611065565b34801561064257600080fd5b506104fc60275481565b34801561065857600080fd5b506104fc60215481565b34801561066e57600080fd5b506105e961067d366004614f88565b611139565b34801561068e57600080fd5b5061058961069d366004614fa1565b611245565b3480156106ae57600080fd5b506105e96106bd366004614f88565b6112ef565b3480156106ce57600080fd5b506104fc60285481565b3480156106e457600080fd5b506026546105899060ff1681565b3480156106fe57600080fd5b5060405160128152602001610506565b34801561071a57600080fd5b50610589610729366004614f38565b6113fc565b34801561073a57600080fd5b50600b54610551906001600160a01b031681565b34801561075a57600080fd5b5060115461058990610100900460ff1681565b34801561077957600080fd5b506105e9611438565b34801561078e57600080fd5b50600f544310610589565b3480156107a557600080fd5b506104fc60195481565b3480156107bb57600080fd5b506104fc6107ca366004614f64565b60146020526000908152604090205481565b3480156107e857600080fd5b506105e96107f7366004614f64565b611538565b34801561080857600080fd5b506104fc60085481565b34801561081e57600080fd5b506104fc601c5481565b34801561083457600080fd5b506104fc60105481565b34801561084a57600080fd5b506104fc601d5481565b34801561086057600080fd5b50601154610589906301000000900460ff1681565b34801561088157600080fd5b506104fc610890366004614f64565b61160e565b3480156108a157600080fd5b506104fc611629565b3480156108b657600080fd5b506104fc611652565b3480156108cb57600080fd5b506105e961184e565b3480156108e057600080fd5b506105e96108ef366004614ff0565b6118c2565b34801561090057600080fd5b506105e96119eb565b34801561091557600080fd5b506105e9610924366004615029565b611a67565b34801561093557600080fd5b506105e9611b2f565b34801561094a57600080fd5b506104fc60255481565b34801561096057600080fd5b506105e961096f366004615062565b611cd1565b34801561098057600080fd5b506105e961098f366004614f88565b611d91565b3480156109a057600080fd5b506105896109af36600461508e565b611e88565b3480156109c057600080fd5b506104fc60075481565b3480156109d657600080fd5b506005546001600160a01b0316610551565b3480156109f457600080fd5b506105e9610a03366004615108565b612039565b348015610a1457600080fd5b506105246120da565b348015610a2957600080fd5b50610a326120e9565b6040516105069190615198565b348015610a4b57600080fd5b506105e9610a5a366004615029565b61214a565b348015610a6b57600080fd5b506104fc61271081565b348015610a8157600080fd5b506104fc602b5481565b348015610a9757600080fd5b50610589610aa6366004614f38565b61223e565b348015610ab757600080fd5b506104fc60295481565b348015610acd57600080fd5b506104fc600f5481565b348015610ae357600080fd5b50610589610af2366004614f38565b6122d7565b348015610b0357600080fd5b506105e9610b12366004615281565b6122e4565b348015610b2357600080fd5b506104fc60155481565b348015610b3957600080fd5b506104fc601f5481565b348015610b4f57600080fd5b50610589610b5e366004614f64565b60136020526000908152604090205460ff1681565b348015610b7f57600080fd5b50610589610b8e366004614f64565b602e6020526000908152604090205460ff1681565b348015610baf57600080fd5b506011546105899062010000900460ff1681565b348015610bcf57600080fd5b506105e9610bde366004615108565b612994565b348015610bef57600080fd5b506105e9610bfe366004614f88565b612a9a565b348015610c0f57600080fd5b506105e9610c1e366004615029565b612bd0565b348015610c2f57600080fd5b506105e9610c3e366004615062565b612c59565b348015610c4f57600080fd5b50600c54610551906001600160a01b031681565b348015610c6f57600080fd5b506105e9612d14565b348015610c8457600080fd5b506017546105899060ff1681565b348015610c9e57600080fd5b506105e9612d7d565b348015610cb357600080fd5b506104fc60205481565b348015610cc957600080fd5b506105e9610cd8366004614f88565b612dbd565b348015610ce957600080fd5b506104fc60185481565b348015610cff57600080fd5b506105e9610d0e366004614f88565b612f08565b348015610d1f57600080fd5b506104fc610d2e36600461508e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d6557600080fd5b506104fc600a5481565b348015610d7b57600080fd5b50610589610d8a366004614f88565b613016565b348015610d9b57600080fd5b506104fc601b5481565b348015610db157600080fd5b506105e9613222565b348015610dc657600080fd5b50610551610dd5366004614f88565b613258565b348015610de657600080fd5b506104fc600e5481565b348015610dfc57600080fd5b506104fc60245481565b348015610e1257600080fd5b506104fc601a5481565b348015610e2857600080fd5b506105e9610e37366004614f64565b613282565b348015610e4857600080fd5b506105e961336d565b348015610e5d57600080fd5b506104fc601e5481565b348015610e7357600080fd5b506105e96133d9565b348015610e8857600080fd5b506104fc60095481565b348015610e9e57600080fd5b50610589610ead366004614f64565b60126020526000908152604090205460ff1681565b348015610ece57600080fd5b506022546105899060ff1681565b348015610ee857600080fd5b506105e9610ef7366004614f88565b613419565b606060038054610f0b906153a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610f37906153a2565b8015610f845780601f10610f5957610100808354040283529160200191610f84565b820191906000526020600020905b815481529060010190602001808311610f6757829003601f168201915b5050505050905090565b6000610f9b338484613713565b5060015b92915050565b6005546001600160a01b03163314610fd85760405162461bcd60e51b8152600401610fcf906153dc565b60405180910390fd5b60115462010000900460ff16156110435760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610fcf565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461108f5760405162461bcd60e51b8152600401610fcf906153dc565b600a81101580156110a2575061c3508111155b6110ee5760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e3120616e642035303020424e426044820152606401610fcf565b6110ff81662386f26fc10000615427565b6015556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6005546001600160a01b031633146111635760405162461bcd60e51b8152600401610fcf906153dc565b61116f6012600a615522565b606461117a60025490565b611185906001615427565b61118f9190615531565b6111999190615531565b8110156111fa5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152686572207468616e202560b81b6064820152608401610fcf565b6112066012600a615522565b6112109082615427565b60098190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc9060200161112e565b6000611252848484613837565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156112d75760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610fcf565b6112e48533858403613713565b506001949350505050565b6005546001600160a01b031633146113195760405162461bcd60e51b8152600401610fcf906153dc565b6113256012600a615522565b6103e861133160025490565b61133c906001615427565b6113469190615531565b6113509190615531565b8110156113b15760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610fcf565b6113bd6012600a615522565b6113c79082615427565b60078190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de410099060200161112e565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f9b918590611433908690615553565b613713565b6005546001600160a01b031633146114625760405162461bcd60e51b8152600401610fcf906153dc565b600a5461146e3061160e565b10156114e4576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610fcf565b6011805460ff191660011790556114f96145fa565b6011805460ff191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b600c546001600160a01b031633146115625760405162461bcd60e51b8152600401610fcf90615566565b6001600160a01b0381166115c45760405162461bcd60e51b8152602060048201526024808201527f5f74726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610fcf565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b60225460009060ff161561164c576024546023546116479190615553565b905090565b50600090565b604080516002808252606082018352600092839291906020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156116c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e49190615587565b816000815181106116f7576116f76155a4565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061172b5761172b6155a4565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060065460155460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f9161179a9186906004016155ba565b600060405180830381865afa1580156117b7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117df91908101906155db565b90506064601d54601e546117f39190615553565b82600181518110611806576118066155a4565b60200260200101516118189190615427565b6118229190615531565b81600181518110611835576118356155a4565b60200260200101516118479190615553565b9250505090565b6005546001600160a01b031633146118785760405162461bcd60e51b8152600401610fcf906153dc565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600c546001600160a01b031633146118ec5760405162461bcd60e51b8152600401610fcf90615566565b61025883101561195a5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610fcf565b6103e8821115801561196a575060015b6119cf5760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610fcf565b6028929092556027556026805460ff1916911515919091179055565b600c546001600160a01b03163314611a155760405162461bcd60e51b8152600401610fcf90615566565b6011805461ff00191690556017805460ff191690556002546007556002546008556002546009556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314611a915760405162461bcd60e51b8152600401610fcf906153dc565b80611b0457600b546001600160a01b0390811690831603611b045760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610fcf565b6001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b600c546001600160a01b03163314611b595760405162461bcd60e51b8152600401610fcf90615566565b611b61611629565b4210158015611b7757506000611b75611629565b115b611bbc5760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b6044820152606401610fcf565b600060238190556022805460ff19169055602554600b546040516370a0823160e01b8152306004820152606492916001600160a01b0316906370a0823190602401602060405180830381865afa158015611c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3e919061566c565b611c489190615427565b611c529190615531565b6000602555600b5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccd9190615685565b5050565b6005546001600160a01b03163314611cfb5760405162461bcd60e51b8152600401610fcf906153dc565b6019839055601a829055601b81905580611d158385615553565b611d1f9190615553565b6018556064611d31612710601e615427565b611d3b9190615531565b6018541115611d8c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610fcf565b505050565b6005546001600160a01b03163314611dbb5760405162461bcd60e51b8152600401610fcf906153dc565b60115462010000900460ff1615611e145760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610fcf565b6032811115611e355760405162461bcd60e51b8152600401610fcf906156a2565b6011805463ffff00001916630101000017905543600e819055611e59908290615553565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b600c546000906001600160a01b03163314611eb55760405162461bcd60e51b8152600401610fcf90615566565b6001600160a01b038316611f0b5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610fcf565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f76919061566c565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611fc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fed9190615685565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146120635760405162461bcd60e51b8152600401610fcf906153dc565b60005b828110156120d4578160126000868685818110612085576120856155a4565b905060200201602081019061209a9190614f64565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806120cc816156e9565b915050612066565b50505050565b606060048054610f0b906153a2565b6060600d805480602002602001604051908101604052809291908181526020018280548015610f8457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612123575050505050905090565b6005546001600160a01b031633146121745760405162461bcd60e51b8152600401610fcf906153dc565b600b546001600160a01b03908116908316036121f85760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610fcf565b6122028282614786565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122c05760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610fcf565b6122cd3385858403613713565b5060019392505050565b6000610f9b338484613837565b6005546001600160a01b0316331461230e5760405162461bcd60e51b8152600401610fcf906153dc565b60115462010000900460ff161561237b5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610fcf565b6032851061239b5760405162461bcd60e51b8152600401610fcf906156a2565b85518751146123ec5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610fcf565b61012c87511061245d5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610fcf565b60005b838110156124cf576001602c6000878785818110612480576124806155a4565b90506020020160208101906124959190614f64565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806124c7816156e9565b915050612460565b5060005b81811015612542576001601260008585858181106124f3576124f36155a4565b90506020020160208101906125089190614f64565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061253a816156e9565b9150506124d3565b5060005b8751811015612610576000888281518110612563576125636155a4565b6020908102919091018101516001600160a01b038116600090815260139092526040909120805460ff1916600117905590506125a24262015180615553565b6001600160a01b0382166000908152601460205260408120919091556125ca6012600a615522565b8984815181106125dc576125dc6155a4565b60200260200101516125ee9190615427565b90506125fb3383836147b4565b50508080612608906156e9565b915050612546565b506011805463ffff00001916630101000017905543600e819055612635908690615553565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d89190615587565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561273a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275e9190615587565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156127ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127cf9190615587565b600b80546001600160a01b0319166001600160a01b039290921691821790556127f9906001614909565b600b54612810906001600160a01b03166001614786565b6000471161286c5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610fcf565b60006128773061160e565b116128d35760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610fcf565b6006546128ee9030906001600160a01b03166114338261160e565b6006546001600160a01b031663f305d719473061290a8161160e565b60008030426040518863ffffffff1660e01b815260040161293096959493929190615702565b60606040518083038185885af115801561294e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612973919061573d565b50506126ac60198190556018819055601d819055601c555050505050505050565b6005546001600160a01b031633146129be5760405162461bcd60e51b8152600401610fcf906153dc565b60005b828110156120d45781602c60008686858181106129e0576129e06155a4565b90506020020160208101906129f59190614f64565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838382818110612a2f57612a2f6155a4565b9050602002016020810190612a449190614f64565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051612a80911515815260200190565b60405180910390a280612a92816156e9565b9150506129c1565b600c546001600160a01b03163314612ac45760405162461bcd60e51b8152600401610fcf90615566565b60225460ff1615612b315760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b6064820152608401610fcf565b60648111158015612b425750600081115b612b8e5760405162461bcd60e51b815260206004820152601a60248201527f4e65656420746f20736574206265747765656e20312d313030250000000000006044820152606401610fcf565b426023556022805460ff1916600117905560258190556040517fd99a77b2f3951cd076e75814e44db497e6abc203dd251329da0b62c288f9f48b90600090a150565b6005546001600160a01b03163314612bfa5760405162461bcd60e51b8152600401610fcf906153dc565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314612c835760405162461bcd60e51b8152600401610fcf906153dc565b601d839055601e829055601f81905580612c9d8385615553565b612ca79190615553565b601c556064612cb9612710601e615427565b612cc39190615531565b601c541115611d8c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610fcf565b600c546001600160a01b03163314612d3e5760405162461bcd60e51b8152600401610fcf90615566565b6022805460ff191690556000602581905560238190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b600c546001600160a01b03163314612da75760405162461bcd60e51b8152600401610fcf90615566565b603260198190556018819055601d819055601c55565b6005546001600160a01b03163314612de75760405162461bcd60e51b8152600401610fcf906153dc565b620186a0612df460025490565b612dff906001615427565b612e099190615531565b811015612e765760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610fcf565b6103e8612e8260025490565b612e8d906001615427565b612e979190615531565b811115612f035760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610fcf565b600a55565b6005546001600160a01b03163314612f325760405162461bcd60e51b8152600401610fcf906153dc565b612f3e6012600a615522565b6103e8612f4a60025490565b612f55906001615427565b612f5f9190615531565b612f699190615531565b811015612fcb5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610fcf565b612fd76012600a615522565b612fe19082615427565b60088190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e9060200161112e565b600c546000906001600160a01b031633146130435760405162461bcd60e51b8152600401610fcf90615566565b602a54602b546130539190615553565b42116130a15760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610fcf565b6107d08211156131065760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20323025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610fcf565b42602b55600b546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa158015613155573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613179919061566c565b9050600061271061318a8584615427565b6131949190615531565b905080156131b557600b546131b5906001600160a01b031661dead836147b4565b600b546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b1580156131ff57600080fd5b505af1158015613213573d6000803e3d6000fd5b50600198975050505050505050565b6005546001600160a01b0316331461324c5760405162461bcd60e51b8152600401610fcf906153dc565b6017805460ff19169055565b600d818154811061326857600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146132ac5760405162461bcd60e51b8152600401610fcf906153dc565b6001600160a01b0381166133115760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610fcf565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b031633146133975760405162461bcd60e51b8152600401610fcf90615566565b604051600090339047908381818185875af1925050503d80600081146120d4576040519150601f19603f3d011682016040523d82523d6000602084013e6120d4565b600c546001600160a01b031633146134035760405162461bcd60e51b8152600401610fcf90615566565b600060198190556018819055601d819055601c55565b600c546001600160a01b031633146134435760405162461bcd60e51b8152600401610fcf90615566565b6107d08111156134b35760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20323025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610fcf565b602a546134c0904261576b565b602b5411156135015760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610fcf565b42602b55600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561354e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613572919061566c565b9050600061357f3061160e565b905060006127106135908585615427565b61359a9190615531565b600b5460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af11580156135f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136189190615685565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec906136539030908690600190819084904290600401615702565b60408051808303816000875af1158015613671573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613695919061577e565b50506000836136a33061160e565b6136ad919061576b565b905080156136c2576136c23061dead836147b4565b60006136ce834761576b565b905080156136df576136df8161496c565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166137755760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610fcf565b6001600160a01b0382166137d65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610fcf565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661385d5760405162461bcd60e51b8152600401610fcf906157a2565b6001600160a01b0382166138835760405162461bcd60e51b8152600401610fcf906157e7565b600081116138d35760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610fcf565b60115462010000900460ff16613967576001600160a01b0383166000908152602c602052604090205460ff168061392257506001600160a01b0382166000908152602c602052604090205460ff165b6139675760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610fcf565b600f544310158015613981575060115462010000900460ff165b15613a76576001600160a01b03831660009081526012602052604090205460ff161580156139c857506001600160a01b03821660009081526012602052604090205460ff16155b806139e057506005546001600160a01b038381169116145b806139f557506001600160a01b03821661dead145b613a765760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610fcf565b6001600160a01b03831660009081526013602052604090205460ff1615613c5d576001600160a01b0382166000908152602e602052604090205460ff1615613bb1576001600160a01b038316600090815260146020526040902054421015613b125760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610fcf565b613b1a611652565b811115613b865760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610fcf565b613b934262015180615553565b6001600160a01b038416600090815260146020526040902055613c5d565b6001600160a01b0382166000908152602c602052604090205460ff16613c5d5760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401610fcf565b601154610100900460ff161561405e576005546001600160a01b03848116911614801590613c9957506005546001600160a01b03838116911614155b8015613cad57506001600160a01b03821615155b8015613cc457506001600160a01b03821661dead14155b8015613ce957506001600160a01b0383166000908152602c602052604090205460ff16155b8015613d0e57506001600160a01b0382166000908152602c602052604090205460ff16155b1561405e5760175460ff1615613e27576006546001600160a01b03838116911614801590613d4a5750600b546001600160a01b03838116911614155b15613e2757613d5a60024361576b565b32600090815260166020526040902054108015613d985750613d7d60024361576b565b6001600160a01b038316600090815260166020526040902054105b613e025760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610fcf565b3260009081526016602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602e602052604090205460ff168015613e6857506001600160a01b0382166000908152602d602052604090205460ff16155b15613f3457600754811115613ed05760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610fcf565b600954613edc8361160e565b613ee69083615553565b1115613f2f5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610fcf565b61405e565b6001600160a01b0382166000908152602e602052604090205460ff168015613f7557506001600160a01b0383166000908152602d602052604090205460ff16155b15613fdf57600854811115613f2f5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610fcf565b6001600160a01b0382166000908152602d602052604090205460ff1661405e5760095461400b8361160e565b6140159083615553565b111561405e5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610fcf565b60006140693061160e565b600a549091508110801590819061408957506011546301000000900460ff165b8015614098575060115460ff16155b80156140bd57506001600160a01b0385166000908152602e602052604090205460ff16155b80156140e257506001600160a01b0385166000908152602c602052604090205460ff16155b801561410757506001600160a01b0384166000908152602c602052604090205460ff16155b1561412c576011805460ff191660011790556141216145fa565b6011805460ff191690555b60115460ff1615801561415757506001600160a01b0384166000908152602e602052604090205460ff165b8015614165575060265460ff165b8015614180575060285460295461417c9190615553565b4210155b80156141a557506001600160a01b0385166000908152602c602052604090205460ff16155b156141b2576141b2614abf565b6001600160a01b0385166000908152602c602052604090205460019060ff16806141f457506001600160a01b0385166000908152602c602052604090205460ff165b156141fd575060005b60008082156145e557600f544310801561422f57506001600160a01b0388166000908152602e602052604090205460ff165b801561425457506001600160a01b0387166000908152602e602052604090205460ff16155b801561427957506001600160a01b0387166000908152602c602052604090205460ff16155b801561428757506000601854115b1561442d57600f5443106142ae576001600760008282546142a8919061576b565b90915550505b6001600160a01b03871660009081526012602052604090205460ff1661438e576001600160a01b0387166000908152601260205260408120805460ff191660019081179091556010805491929091614307908490615553565b9091555050600d80546001810182556000919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319166001600160a01b0389169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6127106018548761439f9190615427565b6143a99190615531565b9150601854601a54836143bc9190615427565b6143c69190615531565b602160008282546143d79190615553565b90915550506018546019546143ec9084615427565b6143f69190615531565b602060008282546144079190615553565b9091555050601854601b5461441c9084615427565b6144269190615531565b90506145b4565b6001600160a01b0387166000908152602e602052604090205460ff16801561445757506000601c54115b156144ea57612710601c548761446d9190615427565b6144779190615531565b9150601c54601e548361448a9190615427565b6144949190615531565b602160008282546144a59190615553565b9091555050601c54601d546144ba9084615427565b6144c49190615531565b602060008282546144d59190615553565b9091555050601854601f5461441c9084615427565b6001600160a01b0388166000908152602e602052604090205460ff16801561451457506000601854115b156145b4576127106018548761452a9190615427565b6145349190615531565b9150601854601a54836145479190615427565b6145519190615531565b602160008282546145629190615553565b90915550506018546019546145779084615427565b6145819190615531565b602060008282546145929190615553565b9091555050601854601b546145a79084615427565b6145b19190615531565b90505b81156145d8576145c58830846147b4565b80156145d8576145d83061dead836147b4565b6145e2828761576b565b95505b6145f08888886147b4565b5050505050505050565b60006146053061160e565b60215460205491925090600061461b8284615553565b9050831580614628575080155b156146335750505050565b600a805461464091615427565b84111561465757600a805461465491615427565b93505b6000806002836021548861466b9190615427565b6146759190615531565b61467f9190615531565b905061469361468e828861576b565b614cd9565b602154479081906000906146a990600290615531565b6146b3908761576b565b6020546146c09085615427565b6146ca9190615531565b90506146d6818361576b565b915087602160008282546146ea919061576b565b925050819055508660206000828254614703919061576b565b909155505083158015906147175750600082115b15614726576147268483614e33565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114614773576040519150601f19603f3d011682016040523d82523d6000602084013e614778565b606091505b505050505050505050505050565b6001600160a01b0382166000908152602e60205260409020805460ff19168215151790556122028282614909565b6001600160a01b0383166147da5760405162461bcd60e51b8152600401610fcf906157a2565b6001600160a01b0382166148005760405162461bcd60e51b8152600401610fcf906157e7565b6001600160a01b038316600090815260208190526040902054818110156148785760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610fcf565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906148af908490615553565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516148fb91815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152602d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156149d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149fa9190615587565b81600081518110614a0d57614a0d6155a4565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110614a4157614a416155a4565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de95908490614a8990600090869061dead90429060040161582a565b6000604051808303818588803b158015614aa257600080fd5b505af1158015614ab6573d6000803e3d6000fd5b50505050505050565b426029819055602b55600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015614b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b35919061566c565b90506000614b423061160e565b9050600061271060275484614b579190615427565b614b619190615531565b600b5460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015614bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bdf9190615685565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec90614c1a9030908690600190819084904290600401615702565b60408051808303816000875af1158015614c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5c919061577e565b5050600083614c6a3061160e565b614c74919061576b565b90508015614c8957614c893061dead836147b4565b6000614c95834761576b565b90508015614ca657614ca68161496c565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614d0e57614d0e6155a4565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d8b9190615587565b81600181518110614d9e57614d9e6155a4565b6001600160a01b039283166020918202929092010152600654614dc49130911684613713565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790614dfd90859060009086903090429060040161585f565b600060405180830381600087803b158015614e1757600080fd5b505af1158015614e2b573d6000803e3d6000fd5b505050505050565b600654614e4b9030906001600160a01b031684613713565b60065460405163f305d71960e01b81526001600160a01b039091169063f305d719908390614e889030908790600090819084904290600401615702565b60606040518083038185885af1158015614ea6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614ecb919061573d565b5050505050565b600060208083528351808285015260005b81811015614eff57858101830151858201604001528201614ee3565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114614f3557600080fd5b50565b60008060408385031215614f4b57600080fd5b8235614f5681614f20565b946020939093013593505050565b600060208284031215614f7657600080fd5b8135614f8181614f20565b9392505050565b600060208284031215614f9a57600080fd5b5035919050565b600080600060608486031215614fb657600080fd5b8335614fc181614f20565b92506020840135614fd181614f20565b929592945050506040919091013590565b8015158114614f3557600080fd5b60008060006060848603121561500557600080fd5b8335925060208401359150604084013561501e81614fe2565b809150509250925092565b6000806040838503121561503c57600080fd5b823561504781614f20565b9150602083013561505781614fe2565b809150509250929050565b60008060006060848603121561507757600080fd5b505081359360208301359350604090920135919050565b600080604083850312156150a157600080fd5b82356150ac81614f20565b9150602083013561505781614f20565b60008083601f8401126150ce57600080fd5b50813567ffffffffffffffff8111156150e657600080fd5b6020830191508360208260051b850101111561510157600080fd5b9250929050565b60008060006040848603121561511d57600080fd5b833567ffffffffffffffff81111561513457600080fd5b615140868287016150bc565b909450925050602084013561501e81614fe2565b600081518084526020808501945080840160005b8381101561518d5781516001600160a01b031687529582019590820190600101615168565b509495945050505050565b602081526000614f816020830184615154565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156151ea576151ea6151ab565b604052919050565b600067ffffffffffffffff82111561520c5761520c6151ab565b5060051b60200190565b600082601f83011261522757600080fd5b8135602061523c615237836151f2565b6151c1565b82815260059290921b8401810191818101908684111561525b57600080fd5b8286015b84811015615276578035835291830191830161525f565b509695505050505050565b600080600080600080600060a0888a03121561529c57600080fd5b873567ffffffffffffffff808211156152b457600080fd5b818a0191508a601f8301126152c857600080fd5b813560206152d8615237836151f2565b82815260059290921b8401810191818101908e8411156152f757600080fd5b948201945b8386101561531e57853561530f81614f20565b825294820194908201906152fc565b9b50508b01359250508082111561533457600080fd5b6153408b838c01615216565b975060408a0135965060608a013591508082111561535d57600080fd5b6153698b838c016150bc565b909650945060808a013591508082111561538257600080fd5b5061538f8a828b016150bc565b989b979a50959850939692959293505050565b600181811c908216806153b657607f821691505b6020821081036153d657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610f9f57610f9f615411565b600181815b8085111561547957816000190482111561545f5761545f615411565b8085161561546c57918102915b93841c9390800290615443565b509250929050565b60008261549057506001610f9f565b8161549d57506000610f9f565b81600181146154b357600281146154bd576154d9565b6001915050610f9f565b60ff8411156154ce576154ce615411565b50506001821b610f9f565b5060208310610133831016604e8410600b84101617156154fc575081810a610f9f565b615506838361543e565b806000190482111561551a5761551a615411565b029392505050565b6000614f8160ff841683615481565b60008261554e57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610f9f57610f9f615411565b6020808252600790820152662330b4b632b21760c91b604082015260600190565b60006020828403121561559957600080fd5b8151614f8181614f20565b634e487b7160e01b600052603260045260246000fd5b8281526040602082015260006155d36040830184615154565b949350505050565b600060208083850312156155ee57600080fd5b825167ffffffffffffffff81111561560557600080fd5b8301601f8101851361561657600080fd5b8051615624615237826151f2565b81815260059190911b8201830190838101908783111561564357600080fd5b928401925b8284101561566157835182529284019290840190615648565b979650505050505050565b60006020828403121561567e57600080fd5b5051919050565b60006020828403121561569757600080fd5b8151614f8181614fe2565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2035360cc1b606082015260800190565b6000600182016156fb576156fb615411565b5060010190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561575257600080fd5b8351925060208401519150604084015190509250925092565b81810381811115610f9f57610f9f615411565b6000806040838503121561579157600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006158436080830186615154565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061587e60a0830186615154565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220d319018de12e9160fcb1d9979535d2a57f48a87fee2a81b4034a87b990d831ea64736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104da5760003560e01c80638e38b7cb11610281578063c876d0b91161015a578063eb472fc4116100cc578063f637434211610085578063f637434214610e51578063f6b20c3b14610e67578063f8b45b0514610e7c578063f9f92be414610e92578063fd361d0e14610ec2578063fe72b27a14610edc57600080fd5b8063eb472fc414610dba578063ee40166e14610dda578063ee44b44e14610df0578063f11a24d314610e06578063f2fde38b14610e1c578063f5648a4f14610e3c57600080fd5b8063dc3f0d0f1161011e578063dc3f0d0f14610cf3578063dd62ed3e14610d13578063e2f4560514610d59578063e4c4a64b14610d6f578063e71dc3f514610d8f578063e884f26014610da557600080fd5b8063c876d0b914610c78578063c9567bf914610c92578063cc2ffe7c14610ca7578063d257b34f14610cbd578063d85ba06314610cdd57600080fd5b8063acee28d1116101f3578063bd5fb920116101b7578063bd5fb92014610bc3578063befd2fac14610be3578063c024666814610c03578063c17b5b8c14610c23578063c5f956af14610c43578063c7c61e2c14610c6357600080fd5b8063acee28d114610b17578063adb873bd14610b2d578063afd6ce6114610b43578063b62496f514610b73578063bbc0c74214610ba357600080fd5b80639ec22c0e116102455780639ec22c0e14610a75578063a457c2d714610a8b578063a4c82a0014610aab578063a62068ce14610ac1578063a9059cbb14610ad7578063ac8d261714610af757600080fd5b80638e38b7cb146109e857806395d89b4114610a085780639a5bd2dd14610a1d5780639a7a23d614610a3f5780639e93ad8e14610a5f57600080fd5b80635c068a8c116103b3578063715018a611610325578063783102eb116102e9578063783102eb1461093e5780638095d5641461095457806382aa7c68146109745780638366e79a1461099457806388e765ff146109b45780638da5cb5b146109ca57600080fd5b8063715018a6146108bf578063730c1888146108d4578063751039fc146108f45780637571336a14610909578063763cef491461092957600080fd5b80636b0a894c116103775780636b0a894c146108285780636b2fb1241461083e5780636ddd17131461085457806370a0823114610875578063712c298514610895578063713d0974146108aa57600080fd5b80635c068a8c146107995780635c3352d3146107af5780636605bfda146107dc57806366d602ae146107fc5780636a486a8e1461081257600080fd5b80631c499ab01161044c578063313ce56711610410578063313ce567146106f2578063395093511461070e578063452ed4f11461072e5780634a62bb651461074e57806351f205e41461076d57806358a6d5311461078257600080fd5b80631c499ab01461066257806323b872dd146106825780632be32b61146106a25780632c3e486c146106c25780632e82f1a0146106d857600080fd5b80631805805b1161049e5780631805805b146105c957806318160ddd146105eb578063184c16c51461060057806318e1c12314610616578063199ffc72146106365780631a8145bb1461064c57600080fd5b8063058054c9146104e657806306fdde031461050f5780630758d92414610531578063095ea7b31461056957806310d5de531461059957600080fd5b366104e157005b600080fd5b3480156104f257600080fd5b506104fc60235481565b6040519081526020015b60405180910390f35b34801561051b57600080fd5b50610524610efc565b6040516105069190614ed2565b34801561053d57600080fd5b50600654610551906001600160a01b031681565b6040516001600160a01b039091168152602001610506565b34801561057557600080fd5b50610589610584366004614f38565b610f8e565b6040519015158152602001610506565b3480156105a557600080fd5b506105896105b4366004614f64565b602d6020526000908152604090205460ff1681565b3480156105d557600080fd5b506105e96105e4366004614f64565b610fa5565b005b3480156105f757600080fd5b506002546104fc565b34801561060c57600080fd5b506104fc602a5481565b34801561062257600080fd5b506105e9610631366004614f88565b611065565b34801561064257600080fd5b506104fc60275481565b34801561065857600080fd5b506104fc60215481565b34801561066e57600080fd5b506105e961067d366004614f88565b611139565b34801561068e57600080fd5b5061058961069d366004614fa1565b611245565b3480156106ae57600080fd5b506105e96106bd366004614f88565b6112ef565b3480156106ce57600080fd5b506104fc60285481565b3480156106e457600080fd5b506026546105899060ff1681565b3480156106fe57600080fd5b5060405160128152602001610506565b34801561071a57600080fd5b50610589610729366004614f38565b6113fc565b34801561073a57600080fd5b50600b54610551906001600160a01b031681565b34801561075a57600080fd5b5060115461058990610100900460ff1681565b34801561077957600080fd5b506105e9611438565b34801561078e57600080fd5b50600f544310610589565b3480156107a557600080fd5b506104fc60195481565b3480156107bb57600080fd5b506104fc6107ca366004614f64565b60146020526000908152604090205481565b3480156107e857600080fd5b506105e96107f7366004614f64565b611538565b34801561080857600080fd5b506104fc60085481565b34801561081e57600080fd5b506104fc601c5481565b34801561083457600080fd5b506104fc60105481565b34801561084a57600080fd5b506104fc601d5481565b34801561086057600080fd5b50601154610589906301000000900460ff1681565b34801561088157600080fd5b506104fc610890366004614f64565b61160e565b3480156108a157600080fd5b506104fc611629565b3480156108b657600080fd5b506104fc611652565b3480156108cb57600080fd5b506105e961184e565b3480156108e057600080fd5b506105e96108ef366004614ff0565b6118c2565b34801561090057600080fd5b506105e96119eb565b34801561091557600080fd5b506105e9610924366004615029565b611a67565b34801561093557600080fd5b506105e9611b2f565b34801561094a57600080fd5b506104fc60255481565b34801561096057600080fd5b506105e961096f366004615062565b611cd1565b34801561098057600080fd5b506105e961098f366004614f88565b611d91565b3480156109a057600080fd5b506105896109af36600461508e565b611e88565b3480156109c057600080fd5b506104fc60075481565b3480156109d657600080fd5b506005546001600160a01b0316610551565b3480156109f457600080fd5b506105e9610a03366004615108565b612039565b348015610a1457600080fd5b506105246120da565b348015610a2957600080fd5b50610a326120e9565b6040516105069190615198565b348015610a4b57600080fd5b506105e9610a5a366004615029565b61214a565b348015610a6b57600080fd5b506104fc61271081565b348015610a8157600080fd5b506104fc602b5481565b348015610a9757600080fd5b50610589610aa6366004614f38565b61223e565b348015610ab757600080fd5b506104fc60295481565b348015610acd57600080fd5b506104fc600f5481565b348015610ae357600080fd5b50610589610af2366004614f38565b6122d7565b348015610b0357600080fd5b506105e9610b12366004615281565b6122e4565b348015610b2357600080fd5b506104fc60155481565b348015610b3957600080fd5b506104fc601f5481565b348015610b4f57600080fd5b50610589610b5e366004614f64565b60136020526000908152604090205460ff1681565b348015610b7f57600080fd5b50610589610b8e366004614f64565b602e6020526000908152604090205460ff1681565b348015610baf57600080fd5b506011546105899062010000900460ff1681565b348015610bcf57600080fd5b506105e9610bde366004615108565b612994565b348015610bef57600080fd5b506105e9610bfe366004614f88565b612a9a565b348015610c0f57600080fd5b506105e9610c1e366004615029565b612bd0565b348015610c2f57600080fd5b506105e9610c3e366004615062565b612c59565b348015610c4f57600080fd5b50600c54610551906001600160a01b031681565b348015610c6f57600080fd5b506105e9612d14565b348015610c8457600080fd5b506017546105899060ff1681565b348015610c9e57600080fd5b506105e9612d7d565b348015610cb357600080fd5b506104fc60205481565b348015610cc957600080fd5b506105e9610cd8366004614f88565b612dbd565b348015610ce957600080fd5b506104fc60185481565b348015610cff57600080fd5b506105e9610d0e366004614f88565b612f08565b348015610d1f57600080fd5b506104fc610d2e36600461508e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d6557600080fd5b506104fc600a5481565b348015610d7b57600080fd5b50610589610d8a366004614f88565b613016565b348015610d9b57600080fd5b506104fc601b5481565b348015610db157600080fd5b506105e9613222565b348015610dc657600080fd5b50610551610dd5366004614f88565b613258565b348015610de657600080fd5b506104fc600e5481565b348015610dfc57600080fd5b506104fc60245481565b348015610e1257600080fd5b506104fc601a5481565b348015610e2857600080fd5b506105e9610e37366004614f64565b613282565b348015610e4857600080fd5b506105e961336d565b348015610e5d57600080fd5b506104fc601e5481565b348015610e7357600080fd5b506105e96133d9565b348015610e8857600080fd5b506104fc60095481565b348015610e9e57600080fd5b50610589610ead366004614f64565b60126020526000908152604090205460ff1681565b348015610ece57600080fd5b506022546105899060ff1681565b348015610ee857600080fd5b506105e9610ef7366004614f88565b613419565b606060038054610f0b906153a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610f37906153a2565b8015610f845780601f10610f5957610100808354040283529160200191610f84565b820191906000526020600020905b815481529060010190602001808311610f6757829003601f168201915b5050505050905090565b6000610f9b338484613713565b5060015b92915050565b6005546001600160a01b03163314610fd85760405162461bcd60e51b8152600401610fcf906153dc565b60405180910390fd5b60115462010000900460ff16156110435760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610fcf565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461108f5760405162461bcd60e51b8152600401610fcf906153dc565b600a81101580156110a2575061c3508111155b6110ee5760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e3120616e642035303020424e426044820152606401610fcf565b6110ff81662386f26fc10000615427565b6015556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6005546001600160a01b031633146111635760405162461bcd60e51b8152600401610fcf906153dc565b61116f6012600a615522565b606461117a60025490565b611185906001615427565b61118f9190615531565b6111999190615531565b8110156111fa5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152686572207468616e202560b81b6064820152608401610fcf565b6112066012600a615522565b6112109082615427565b60098190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc9060200161112e565b6000611252848484613837565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156112d75760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610fcf565b6112e48533858403613713565b506001949350505050565b6005546001600160a01b031633146113195760405162461bcd60e51b8152600401610fcf906153dc565b6113256012600a615522565b6103e861133160025490565b61133c906001615427565b6113469190615531565b6113509190615531565b8110156113b15760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610fcf565b6113bd6012600a615522565b6113c79082615427565b60078190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de410099060200161112e565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f9b918590611433908690615553565b613713565b6005546001600160a01b031633146114625760405162461bcd60e51b8152600401610fcf906153dc565b600a5461146e3061160e565b10156114e4576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610fcf565b6011805460ff191660011790556114f96145fa565b6011805460ff191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b600c546001600160a01b031633146115625760405162461bcd60e51b8152600401610fcf90615566565b6001600160a01b0381166115c45760405162461bcd60e51b8152602060048201526024808201527f5f74726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610fcf565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b60225460009060ff161561164c576024546023546116479190615553565b905090565b50600090565b604080516002808252606082018352600092839291906020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156116c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e49190615587565b816000815181106116f7576116f76155a4565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061172b5761172b6155a4565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060065460155460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f9161179a9186906004016155ba565b600060405180830381865afa1580156117b7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117df91908101906155db565b90506064601d54601e546117f39190615553565b82600181518110611806576118066155a4565b60200260200101516118189190615427565b6118229190615531565b81600181518110611835576118356155a4565b60200260200101516118479190615553565b9250505090565b6005546001600160a01b031633146118785760405162461bcd60e51b8152600401610fcf906153dc565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600c546001600160a01b031633146118ec5760405162461bcd60e51b8152600401610fcf90615566565b61025883101561195a5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610fcf565b6103e8821115801561196a575060015b6119cf5760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610fcf565b6028929092556027556026805460ff1916911515919091179055565b600c546001600160a01b03163314611a155760405162461bcd60e51b8152600401610fcf90615566565b6011805461ff00191690556017805460ff191690556002546007556002546008556002546009556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314611a915760405162461bcd60e51b8152600401610fcf906153dc565b80611b0457600b546001600160a01b0390811690831603611b045760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610fcf565b6001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b600c546001600160a01b03163314611b595760405162461bcd60e51b8152600401610fcf90615566565b611b61611629565b4210158015611b7757506000611b75611629565b115b611bbc5760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b6044820152606401610fcf565b600060238190556022805460ff19169055602554600b546040516370a0823160e01b8152306004820152606492916001600160a01b0316906370a0823190602401602060405180830381865afa158015611c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3e919061566c565b611c489190615427565b611c529190615531565b6000602555600b5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccd9190615685565b5050565b6005546001600160a01b03163314611cfb5760405162461bcd60e51b8152600401610fcf906153dc565b6019839055601a829055601b81905580611d158385615553565b611d1f9190615553565b6018556064611d31612710601e615427565b611d3b9190615531565b6018541115611d8c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610fcf565b505050565b6005546001600160a01b03163314611dbb5760405162461bcd60e51b8152600401610fcf906153dc565b60115462010000900460ff1615611e145760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610fcf565b6032811115611e355760405162461bcd60e51b8152600401610fcf906156a2565b6011805463ffff00001916630101000017905543600e819055611e59908290615553565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b600c546000906001600160a01b03163314611eb55760405162461bcd60e51b8152600401610fcf90615566565b6001600160a01b038316611f0b5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610fcf565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f76919061566c565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611fc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fed9190615685565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146120635760405162461bcd60e51b8152600401610fcf906153dc565b60005b828110156120d4578160126000868685818110612085576120856155a4565b905060200201602081019061209a9190614f64565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806120cc816156e9565b915050612066565b50505050565b606060048054610f0b906153a2565b6060600d805480602002602001604051908101604052809291908181526020018280548015610f8457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612123575050505050905090565b6005546001600160a01b031633146121745760405162461bcd60e51b8152600401610fcf906153dc565b600b546001600160a01b03908116908316036121f85760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610fcf565b6122028282614786565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122c05760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610fcf565b6122cd3385858403613713565b5060019392505050565b6000610f9b338484613837565b6005546001600160a01b0316331461230e5760405162461bcd60e51b8152600401610fcf906153dc565b60115462010000900460ff161561237b5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610fcf565b6032851061239b5760405162461bcd60e51b8152600401610fcf906156a2565b85518751146123ec5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610fcf565b61012c87511061245d5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610fcf565b60005b838110156124cf576001602c6000878785818110612480576124806155a4565b90506020020160208101906124959190614f64565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806124c7816156e9565b915050612460565b5060005b81811015612542576001601260008585858181106124f3576124f36155a4565b90506020020160208101906125089190614f64565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061253a816156e9565b9150506124d3565b5060005b8751811015612610576000888281518110612563576125636155a4565b6020908102919091018101516001600160a01b038116600090815260139092526040909120805460ff1916600117905590506125a24262015180615553565b6001600160a01b0382166000908152601460205260408120919091556125ca6012600a615522565b8984815181106125dc576125dc6155a4565b60200260200101516125ee9190615427565b90506125fb3383836147b4565b50508080612608906156e9565b915050612546565b506011805463ffff00001916630101000017905543600e819055612635908690615553565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d89190615587565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561273a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275e9190615587565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156127ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127cf9190615587565b600b80546001600160a01b0319166001600160a01b039290921691821790556127f9906001614909565b600b54612810906001600160a01b03166001614786565b6000471161286c5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610fcf565b60006128773061160e565b116128d35760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610fcf565b6006546128ee9030906001600160a01b03166114338261160e565b6006546001600160a01b031663f305d719473061290a8161160e565b60008030426040518863ffffffff1660e01b815260040161293096959493929190615702565b60606040518083038185885af115801561294e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612973919061573d565b50506126ac60198190556018819055601d819055601c555050505050505050565b6005546001600160a01b031633146129be5760405162461bcd60e51b8152600401610fcf906153dc565b60005b828110156120d45781602c60008686858181106129e0576129e06155a4565b90506020020160208101906129f59190614f64565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838382818110612a2f57612a2f6155a4565b9050602002016020810190612a449190614f64565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051612a80911515815260200190565b60405180910390a280612a92816156e9565b9150506129c1565b600c546001600160a01b03163314612ac45760405162461bcd60e51b8152600401610fcf90615566565b60225460ff1615612b315760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b6064820152608401610fcf565b60648111158015612b425750600081115b612b8e5760405162461bcd60e51b815260206004820152601a60248201527f4e65656420746f20736574206265747765656e20312d313030250000000000006044820152606401610fcf565b426023556022805460ff1916600117905560258190556040517fd99a77b2f3951cd076e75814e44db497e6abc203dd251329da0b62c288f9f48b90600090a150565b6005546001600160a01b03163314612bfa5760405162461bcd60e51b8152600401610fcf906153dc565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314612c835760405162461bcd60e51b8152600401610fcf906153dc565b601d839055601e829055601f81905580612c9d8385615553565b612ca79190615553565b601c556064612cb9612710601e615427565b612cc39190615531565b601c541115611d8c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610fcf565b600c546001600160a01b03163314612d3e5760405162461bcd60e51b8152600401610fcf90615566565b6022805460ff191690556000602581905560238190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b600c546001600160a01b03163314612da75760405162461bcd60e51b8152600401610fcf90615566565b603260198190556018819055601d819055601c55565b6005546001600160a01b03163314612de75760405162461bcd60e51b8152600401610fcf906153dc565b620186a0612df460025490565b612dff906001615427565b612e099190615531565b811015612e765760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610fcf565b6103e8612e8260025490565b612e8d906001615427565b612e979190615531565b811115612f035760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610fcf565b600a55565b6005546001600160a01b03163314612f325760405162461bcd60e51b8152600401610fcf906153dc565b612f3e6012600a615522565b6103e8612f4a60025490565b612f55906001615427565b612f5f9190615531565b612f699190615531565b811015612fcb5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610fcf565b612fd76012600a615522565b612fe19082615427565b60088190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e9060200161112e565b600c546000906001600160a01b031633146130435760405162461bcd60e51b8152600401610fcf90615566565b602a54602b546130539190615553565b42116130a15760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610fcf565b6107d08211156131065760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20323025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610fcf565b42602b55600b546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa158015613155573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613179919061566c565b9050600061271061318a8584615427565b6131949190615531565b905080156131b557600b546131b5906001600160a01b031661dead836147b4565b600b546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b1580156131ff57600080fd5b505af1158015613213573d6000803e3d6000fd5b50600198975050505050505050565b6005546001600160a01b0316331461324c5760405162461bcd60e51b8152600401610fcf906153dc565b6017805460ff19169055565b600d818154811061326857600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146132ac5760405162461bcd60e51b8152600401610fcf906153dc565b6001600160a01b0381166133115760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610fcf565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b031633146133975760405162461bcd60e51b8152600401610fcf90615566565b604051600090339047908381818185875af1925050503d80600081146120d4576040519150601f19603f3d011682016040523d82523d6000602084013e6120d4565b600c546001600160a01b031633146134035760405162461bcd60e51b8152600401610fcf90615566565b600060198190556018819055601d819055601c55565b600c546001600160a01b031633146134435760405162461bcd60e51b8152600401610fcf90615566565b6107d08111156134b35760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20323025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610fcf565b602a546134c0904261576b565b602b5411156135015760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610fcf565b42602b55600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561354e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613572919061566c565b9050600061357f3061160e565b905060006127106135908585615427565b61359a9190615531565b600b5460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af11580156135f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136189190615685565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec906136539030908690600190819084904290600401615702565b60408051808303816000875af1158015613671573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613695919061577e565b50506000836136a33061160e565b6136ad919061576b565b905080156136c2576136c23061dead836147b4565b60006136ce834761576b565b905080156136df576136df8161496c565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166137755760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610fcf565b6001600160a01b0382166137d65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610fcf565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661385d5760405162461bcd60e51b8152600401610fcf906157a2565b6001600160a01b0382166138835760405162461bcd60e51b8152600401610fcf906157e7565b600081116138d35760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610fcf565b60115462010000900460ff16613967576001600160a01b0383166000908152602c602052604090205460ff168061392257506001600160a01b0382166000908152602c602052604090205460ff165b6139675760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610fcf565b600f544310158015613981575060115462010000900460ff165b15613a76576001600160a01b03831660009081526012602052604090205460ff161580156139c857506001600160a01b03821660009081526012602052604090205460ff16155b806139e057506005546001600160a01b038381169116145b806139f557506001600160a01b03821661dead145b613a765760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610fcf565b6001600160a01b03831660009081526013602052604090205460ff1615613c5d576001600160a01b0382166000908152602e602052604090205460ff1615613bb1576001600160a01b038316600090815260146020526040902054421015613b125760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610fcf565b613b1a611652565b811115613b865760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610fcf565b613b934262015180615553565b6001600160a01b038416600090815260146020526040902055613c5d565b6001600160a01b0382166000908152602c602052604090205460ff16613c5d5760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401610fcf565b601154610100900460ff161561405e576005546001600160a01b03848116911614801590613c9957506005546001600160a01b03838116911614155b8015613cad57506001600160a01b03821615155b8015613cc457506001600160a01b03821661dead14155b8015613ce957506001600160a01b0383166000908152602c602052604090205460ff16155b8015613d0e57506001600160a01b0382166000908152602c602052604090205460ff16155b1561405e5760175460ff1615613e27576006546001600160a01b03838116911614801590613d4a5750600b546001600160a01b03838116911614155b15613e2757613d5a60024361576b565b32600090815260166020526040902054108015613d985750613d7d60024361576b565b6001600160a01b038316600090815260166020526040902054105b613e025760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610fcf565b3260009081526016602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602e602052604090205460ff168015613e6857506001600160a01b0382166000908152602d602052604090205460ff16155b15613f3457600754811115613ed05760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610fcf565b600954613edc8361160e565b613ee69083615553565b1115613f2f5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610fcf565b61405e565b6001600160a01b0382166000908152602e602052604090205460ff168015613f7557506001600160a01b0383166000908152602d602052604090205460ff16155b15613fdf57600854811115613f2f5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610fcf565b6001600160a01b0382166000908152602d602052604090205460ff1661405e5760095461400b8361160e565b6140159083615553565b111561405e5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610fcf565b60006140693061160e565b600a549091508110801590819061408957506011546301000000900460ff165b8015614098575060115460ff16155b80156140bd57506001600160a01b0385166000908152602e602052604090205460ff16155b80156140e257506001600160a01b0385166000908152602c602052604090205460ff16155b801561410757506001600160a01b0384166000908152602c602052604090205460ff16155b1561412c576011805460ff191660011790556141216145fa565b6011805460ff191690555b60115460ff1615801561415757506001600160a01b0384166000908152602e602052604090205460ff165b8015614165575060265460ff165b8015614180575060285460295461417c9190615553565b4210155b80156141a557506001600160a01b0385166000908152602c602052604090205460ff16155b156141b2576141b2614abf565b6001600160a01b0385166000908152602c602052604090205460019060ff16806141f457506001600160a01b0385166000908152602c602052604090205460ff165b156141fd575060005b60008082156145e557600f544310801561422f57506001600160a01b0388166000908152602e602052604090205460ff165b801561425457506001600160a01b0387166000908152602e602052604090205460ff16155b801561427957506001600160a01b0387166000908152602c602052604090205460ff16155b801561428757506000601854115b1561442d57600f5443106142ae576001600760008282546142a8919061576b565b90915550505b6001600160a01b03871660009081526012602052604090205460ff1661438e576001600160a01b0387166000908152601260205260408120805460ff191660019081179091556010805491929091614307908490615553565b9091555050600d80546001810182556000919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319166001600160a01b0389169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6127106018548761439f9190615427565b6143a99190615531565b9150601854601a54836143bc9190615427565b6143c69190615531565b602160008282546143d79190615553565b90915550506018546019546143ec9084615427565b6143f69190615531565b602060008282546144079190615553565b9091555050601854601b5461441c9084615427565b6144269190615531565b90506145b4565b6001600160a01b0387166000908152602e602052604090205460ff16801561445757506000601c54115b156144ea57612710601c548761446d9190615427565b6144779190615531565b9150601c54601e548361448a9190615427565b6144949190615531565b602160008282546144a59190615553565b9091555050601c54601d546144ba9084615427565b6144c49190615531565b602060008282546144d59190615553565b9091555050601854601f5461441c9084615427565b6001600160a01b0388166000908152602e602052604090205460ff16801561451457506000601854115b156145b4576127106018548761452a9190615427565b6145349190615531565b9150601854601a54836145479190615427565b6145519190615531565b602160008282546145629190615553565b90915550506018546019546145779084615427565b6145819190615531565b602060008282546145929190615553565b9091555050601854601b546145a79084615427565b6145b19190615531565b90505b81156145d8576145c58830846147b4565b80156145d8576145d83061dead836147b4565b6145e2828761576b565b95505b6145f08888886147b4565b5050505050505050565b60006146053061160e565b60215460205491925090600061461b8284615553565b9050831580614628575080155b156146335750505050565b600a805461464091615427565b84111561465757600a805461465491615427565b93505b6000806002836021548861466b9190615427565b6146759190615531565b61467f9190615531565b905061469361468e828861576b565b614cd9565b602154479081906000906146a990600290615531565b6146b3908761576b565b6020546146c09085615427565b6146ca9190615531565b90506146d6818361576b565b915087602160008282546146ea919061576b565b925050819055508660206000828254614703919061576b565b909155505083158015906147175750600082115b15614726576147268483614e33565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114614773576040519150601f19603f3d011682016040523d82523d6000602084013e614778565b606091505b505050505050505050505050565b6001600160a01b0382166000908152602e60205260409020805460ff19168215151790556122028282614909565b6001600160a01b0383166147da5760405162461bcd60e51b8152600401610fcf906157a2565b6001600160a01b0382166148005760405162461bcd60e51b8152600401610fcf906157e7565b6001600160a01b038316600090815260208190526040902054818110156148785760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610fcf565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906148af908490615553565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516148fb91815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152602d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156149d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149fa9190615587565b81600081518110614a0d57614a0d6155a4565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110614a4157614a416155a4565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de95908490614a8990600090869061dead90429060040161582a565b6000604051808303818588803b158015614aa257600080fd5b505af1158015614ab6573d6000803e3d6000fd5b50505050505050565b426029819055602b55600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015614b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b35919061566c565b90506000614b423061160e565b9050600061271060275484614b579190615427565b614b619190615531565b600b5460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015614bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bdf9190615685565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec90614c1a9030908690600190819084904290600401615702565b60408051808303816000875af1158015614c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5c919061577e565b5050600083614c6a3061160e565b614c74919061576b565b90508015614c8957614c893061dead836147b4565b6000614c95834761576b565b90508015614ca657614ca68161496c565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614d0e57614d0e6155a4565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d8b9190615587565b81600181518110614d9e57614d9e6155a4565b6001600160a01b039283166020918202929092010152600654614dc49130911684613713565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790614dfd90859060009086903090429060040161585f565b600060405180830381600087803b158015614e1757600080fd5b505af1158015614e2b573d6000803e3d6000fd5b505050505050565b600654614e4b9030906001600160a01b031684613713565b60065460405163f305d71960e01b81526001600160a01b039091169063f305d719908390614e889030908790600090819084904290600401615702565b60606040518083038185885af1158015614ea6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614ecb919061573d565b5050505050565b600060208083528351808285015260005b81811015614eff57858101830151858201604001528201614ee3565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114614f3557600080fd5b50565b60008060408385031215614f4b57600080fd5b8235614f5681614f20565b946020939093013593505050565b600060208284031215614f7657600080fd5b8135614f8181614f20565b9392505050565b600060208284031215614f9a57600080fd5b5035919050565b600080600060608486031215614fb657600080fd5b8335614fc181614f20565b92506020840135614fd181614f20565b929592945050506040919091013590565b8015158114614f3557600080fd5b60008060006060848603121561500557600080fd5b8335925060208401359150604084013561501e81614fe2565b809150509250925092565b6000806040838503121561503c57600080fd5b823561504781614f20565b9150602083013561505781614fe2565b809150509250929050565b60008060006060848603121561507757600080fd5b505081359360208301359350604090920135919050565b600080604083850312156150a157600080fd5b82356150ac81614f20565b9150602083013561505781614f20565b60008083601f8401126150ce57600080fd5b50813567ffffffffffffffff8111156150e657600080fd5b6020830191508360208260051b850101111561510157600080fd5b9250929050565b60008060006040848603121561511d57600080fd5b833567ffffffffffffffff81111561513457600080fd5b615140868287016150bc565b909450925050602084013561501e81614fe2565b600081518084526020808501945080840160005b8381101561518d5781516001600160a01b031687529582019590820190600101615168565b509495945050505050565b602081526000614f816020830184615154565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156151ea576151ea6151ab565b604052919050565b600067ffffffffffffffff82111561520c5761520c6151ab565b5060051b60200190565b600082601f83011261522757600080fd5b8135602061523c615237836151f2565b6151c1565b82815260059290921b8401810191818101908684111561525b57600080fd5b8286015b84811015615276578035835291830191830161525f565b509695505050505050565b600080600080600080600060a0888a03121561529c57600080fd5b873567ffffffffffffffff808211156152b457600080fd5b818a0191508a601f8301126152c857600080fd5b813560206152d8615237836151f2565b82815260059290921b8401810191818101908e8411156152f757600080fd5b948201945b8386101561531e57853561530f81614f20565b825294820194908201906152fc565b9b50508b01359250508082111561533457600080fd5b6153408b838c01615216565b975060408a0135965060608a013591508082111561535d57600080fd5b6153698b838c016150bc565b909650945060808a013591508082111561538257600080fd5b5061538f8a828b016150bc565b989b979a50959850939692959293505050565b600181811c908216806153b657607f821691505b6020821081036153d657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610f9f57610f9f615411565b600181815b8085111561547957816000190482111561545f5761545f615411565b8085161561546c57918102915b93841c9390800290615443565b509250929050565b60008261549057506001610f9f565b8161549d57506000610f9f565b81600181146154b357600281146154bd576154d9565b6001915050610f9f565b60ff8411156154ce576154ce615411565b50506001821b610f9f565b5060208310610133831016604e8410600b84101617156154fc575081810a610f9f565b615506838361543e565b806000190482111561551a5761551a615411565b029392505050565b6000614f8160ff841683615481565b60008261554e57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610f9f57610f9f615411565b6020808252600790820152662330b4b632b21760c91b604082015260600190565b60006020828403121561559957600080fd5b8151614f8181614f20565b634e487b7160e01b600052603260045260246000fd5b8281526040602082015260006155d36040830184615154565b949350505050565b600060208083850312156155ee57600080fd5b825167ffffffffffffffff81111561560557600080fd5b8301601f8101851361561657600080fd5b8051615624615237826151f2565b81815260059190911b8201830190838101908783111561564357600080fd5b928401925b8284101561566157835182529284019290840190615648565b979650505050505050565b60006020828403121561567e57600080fd5b5051919050565b60006020828403121561569757600080fd5b8151614f8181614fe2565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2035360cc1b606082015260800190565b6000600182016156fb576156fb615411565b5060010190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561575257600080fd5b8351925060208401519150604084015190509250925092565b81810381811115610f9f57610f9f615411565b6000806040838503121561579157600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006158436080830186615154565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061587e60a0830186615154565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220d319018de12e9160fcb1d9979535d2a57f48a87fee2a81b4034a87b990d831ea64736f6c63430008110033

Deployed Bytecode Sourcemap

12175:31286:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13708:41;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;13708:41:0;;;;;;;;4118:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;12213:27::-;;;;;;;;;;-1:-1:-1;12213:27:0;;;;-1:-1:-1;;;;;12213:27:0;;;;;;-1:-1:-1;;;;;931:32:1;;;913:51;;901:2;886:18;12213:27:0;749:221:1;5032:169:0;;;;;;;;;;-1:-1:-1;5032:169:0;;;;;:::i;:::-;;:::i;:::-;;;1596:14:1;;1589:22;1571:41;;1559:2;1544:18;5032:169:0;1431:187:1;14280:64:0;;;;;;;;;;-1:-1:-1;14280:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19741:194;;;;;;;;;;-1:-1:-1;19741:194:0;;;;;:::i;:::-;;:::i;:::-;;4439:108;;;;;;;;;;-1:-1:-1;4527:12:0;;4439:108;;14037:47;;;;;;;;;;;;;;;;34528:248;;;;;;;;;;-1:-1:-1;34528:248:0;;;;;:::i;:::-;;:::i;13895:35::-;;;;;;;;;;;;;;;;13623:33;;;;;;;;;;;;;;;;20725:288;;;;;;;;;;-1:-1:-1;20725:288:0;;;;;:::i;:::-;;:::i;5209:492::-;;;;;;;;;;-1:-1:-1;5209:492:0;;;;;:::i;:::-;;:::i;20110:295::-;;;;;;;;;;-1:-1:-1;20110:295:0;;;;;:::i;:::-;;:::i;13949:45::-;;;;;;;;;;;;;;;;13855:33;;;;;;;;;;-1:-1:-1;13855:33:0;;;;;;;;4338:93;;;;;;;;;;-1:-1:-1;4338:93:0;;4421:2;2663:36:1;;2651:2;2636:18;4338:93:0;2521:184:1;5709:215:0;;;;;;;;;;-1:-1:-1;5709:215:0;;;;;:::i;:::-;;:::i;12391:21::-;;;;;;;;;;-1:-1:-1;12391:21:0;;;;-1:-1:-1;;;;;12391:21:0;;;12672:33;;;;;;;;;;-1:-1:-1;12672:33:0;;;;;;;;;;;33791:312;;;;;;;;;;;;;:::i;30012:120::-;;;;;;;;;;-1:-1:-1;30106:18:0;;30091:12;:33;30012:120;;13280:29;;;;;;;;;;;;;;;;12899:61;;;;;;;;;;-1:-1:-1;12899:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;33399:340;;;;;;;;;;-1:-1:-1;33399:340:0;;;;;:::i;:::-;;:::i;12283:28::-;;;;;;;;;;;;;;;;13387;;;;;;;;;;;;;;;;12610:25;;;;;;;;;;;;;;;;13422:30;;;;;;;;;;;;;;;;12752:31;;;;;;;;;;-1:-1:-1;12752:31:0;;;;;;;;;;;4555:127;;;;;;;;;;-1:-1:-1;4555:127:0;;;;;:::i;:::-;;:::i;42336:281::-;;;;;;;;;;;;;:::i;34111:409::-;;;;;;;;;;;;;:::i;8199:150::-;;;;;;;;;;;;;:::i;37197:506::-;;;;;;;;;;-1:-1:-1;37197:506:0;;;;;:::i;:::-;;:::i;18618:328::-;;;;;;;;;;;;;:::i;21661:260::-;;;;;;;;;;-1:-1:-1;21661:260:0;;;;;:::i;:::-;;:::i;42625:546::-;;;;;;;;;;;;;:::i;13815:31::-;;;;;;;;;;;;;;;;22474:389;;;;;;;;;;-1:-1:-1;22474:389:0;;;;;:::i;:::-;;:::i;18135:427::-;;;;;;;;;;-1:-1:-1;18135:427:0;;;;;:::i;:::-;;:::i;32661:440::-;;;;;;;;;;-1:-1:-1;32661:440:0;;;;;:::i;:::-;;:::i;12249:27::-;;;;;;;;;;;;;;;;7985:79;;;;;;;;;;-1:-1:-1;8050:6:0;;-1:-1:-1;;;;;8050:6:0;7985:79;;19530:203;;;;;;;;;;-1:-1:-1;19530:203:0;;;;;:::i;:::-;;:::i;4226:104::-;;;;;;;;;;;;;:::i;19419:103::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;21929:293::-;;;;;;;;;;-1:-1:-1;21929:293:0;;;;;:::i;:::-;;:::i;13532:43::-;;;;;;;;;;;;13570:5;13532:43;;14091:35;;;;;;;;;;;;;;;;5932:413;;;;;;;;;;-1:-1:-1;5932:413:0;;;;;:::i;:::-;;:::i;14001:29::-;;;;;;;;;;;;;;;;12570:33;;;;;;;;;;;;;;;;4690:175;;;;;;;;;;-1:-1:-1;4690:175:0;;;;;:::i;:::-;;:::i;34784:2405::-;;;;;;;;;;-1:-1:-1;34784:2405:0;;;;;:::i;:::-;;:::i;12967:40::-;;;;;;;;;;;;;;;;13497:26;;;;;;;;;;;;;;;;12841:51;;;;;;;;;;-1:-1:-1;12841:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14502:58;;;;;;;;;;-1:-1:-1;14502:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12712:33;;;;;;;;;;-1:-1:-1;12712:33:0;;;;;;;;;;;23276:282;;;;;;;;;;-1:-1:-1;23276:282:0;;;;;:::i;:::-;;:::i;41820:508::-;;;;;;;;;;-1:-1:-1;41820:508:0;;;;;:::i;:::-;;:::i;23566:182::-;;;;;;;;;;-1:-1:-1;23566:182:0;;;;;:::i;:::-;;:::i;22871:397::-;;;;;;;;;;-1:-1:-1;22871:397:0;;;;;:::i;:::-;;:::i;12419:30::-;;;;;;;;;;-1:-1:-1;12419:30:0;;;;-1:-1:-1;;;;;12419:30:0;;;43179:279;;;;;;;;;;;;;:::i;13198:39::-;;;;;;;;;;-1:-1:-1;13198:39:0;;;;;;;;18954:227;;;;;;;;;;;;;:::i;13584:32::-;;;;;;;;;;;;;;;;21083:346;;;;;;;;;;-1:-1:-1;21083:346:0;;;;;:::i;:::-;;:::i;13246:27::-;;;;;;;;;;;;;;;;20417:300;;;;;;;;;;-1:-1:-1;20417:300:0;;;;;:::i;:::-;;:::i;4873:151::-;;;;;;;;;;-1:-1:-1;4873:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4989:18:0;;;4962:7;4989:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4873:151;12349:33;;;;;;;;;;;;;;;;40440:982;;;;;;;;;;-1:-1:-1;40440:982:0;;;;;:::i;:::-;;:::i;13353:25::-;;;;;;;;;;;;;;;;20000:98;;;;;;;;;;;;;:::i;12456:28::-;;;;;;;;;;-1:-1:-1;12456:28:0;;;;;:::i;:::-;;:::i;12493:37::-;;;;;;;;;;;;;;;;13756:52;;;;;;;;;;;;;;;;13316:30;;;;;;;;;;;;;;;;8357:244;;;;;;;;;;-1:-1:-1;8357:244:0;;;;;:::i;:::-;;:::i;33172:219::-;;;;;;;;;;;;;:::i;13459:31::-;;;;;;;;;;;;;;;;19189:222;;;;;;;;;;;;;:::i;12318:24::-;;;;;;;;;;;;;;;;12792:42;;;;;;;;;;-1:-1:-1;12792:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13665:36;;;;;;;;;;-1:-1:-1;13665:36:0;;;;;;;;38975:1457;;;;;;;;;;-1:-1:-1;38975:1457:0;;;;;:::i;:::-;;:::i;4118:100::-;4172:13;4205:5;4198:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4118:100;:::o;5032:169::-;5115:4;5132:39;347:10;5155:7;5164:6;5132:8;:39::i;:::-;-1:-1:-1;5189:4:0;5032:169;;;;;:::o;19741:194::-;8112:6;;-1:-1:-1;;;;;8112:6:0;347:10;8112:22;8104:67;;;;-1:-1:-1;;;8104:67:0;;;;;;;:::i;:::-;;;;;;;;;19827:13:::1;::::0;;;::::1;;;19826:14;19818:68;;;::::0;-1:-1:-1;;;19818:68:0;;10334:2:1;19818:68:0::1;::::0;::::1;10316:21:1::0;10373:2;10353:18;;;10346:30;10412:34;10392:18;;;10385:62;-1:-1:-1;;;10463:18:1;;;10456:39;10512:19;;19818:68:0::1;10132:405:1::0;19818:68:0::1;19897:9;:30:::0;;-1:-1:-1;;;;;;19897:30:0::1;-1:-1:-1::0;;;;;19897:30:0;;;::::1;::::0;;;::::1;::::0;;19741:194::o;34528:248::-;8112:6;;-1:-1:-1;;;;;8112:6:0;347:10;8112:22;8104:67;;;;-1:-1:-1;;;8104:67:0;;;;;;;:::i;:::-;34623:2:::1;34613:6;:12;;:31;;;;;34639:5;34629:6;:15;;34613:31;34605:76;;;::::0;-1:-1:-1;;;34605:76:0;;10744:2:1;34605:76:0::1;::::0;::::1;10726:21:1::0;;;10763:18;;;10756:30;10822:34;10802:18;;;10795:62;10874:18;;34605:76:0::1;10542:356:1::0;34605:76:0::1;34710:13;:6:::0;34719:4:::1;34710:13;:::i;:::-;34692:15;:31:::0;34739:29:::1;::::0;160:25:1;;;34739:29:0::1;::::0;148:2:1;133:18;34739:29:0::1;;;;;;;;34528:248:::0;:::o;20725:288::-;8112:6;;-1:-1:-1;;;;;8112:6:0;347:10;8112:22;8104:67;;;;-1:-1:-1;;;8104:67:0;;;;;;;:::i;:::-;20843:16:::1;4421:2:::0;20843::::1;:16;:::i;:::-;20835:3;20815:13;4527:12:::0;;;4439:108;20815:13:::1;:17;::::0;20831:1:::1;20815:17;:::i;:::-;:23;;;;:::i;:::-;20814:46;;;;:::i;:::-;20804:6;:56;;20796:110;;;::::0;-1:-1:-1;;;20796:110:0;;13015:2:1;20796:110:0::1;::::0;::::1;12997:21:1::0;13054:2;13034:18;;;13027:30;13093:34;13073:18;;;13066:62;-1:-1:-1;;;13144:18:1;;;13137:39;13193:19;;20796:110:0::1;12813:405:1::0;20796:110:0::1;20939:16;4421:2:::0;20939::::1;:16;:::i;:::-;20929:27;::::0;:6;:27:::1;:::i;:::-;20917:9;:39:::0;;;20972:33:::1;::::0;160:25:1;;;20972:33:0::1;::::0;148:2:1;133:18;20972:33:0::1;14:177:1::0;5209:492:0;5349:4;5366:36;5376:6;5384:9;5395:6;5366:9;:36::i;:::-;-1:-1:-1;;;;;5442:19:0;;5415:24;5442:19;;;:11;:19;;;;;;;;347:10;5442:33;;;;;;;;5494:26;;;;5486:79;;;;-1:-1:-1;;;5486:79:0;;13425:2:1;5486:79:0;;;13407:21:1;13464:2;13444:18;;;13437:30;13503:34;13483:18;;;13476:62;-1:-1:-1;;;13554:18:1;;;13547:38;13602:19;;5486:79:0;13223:404:1;5486:79:0;5601:57;5610:6;347:10;5651:6;5632:16;:25;5601:8;:57::i;:::-;-1:-1:-1;5689:4:0;;5209:492;-1:-1:-1;;;;5209:492:0:o;20110:295::-;8112:6;;-1:-1:-1;;;;;8112:6:0;347:10;8112:22;8104:67;;;;-1:-1:-1;;;8104:67:0;;;;;;;:::i;:::-;20232:16:::1;4421:2:::0;20232::::1;:16;:::i;:::-;20223:4;20203:13;4527:12:::0;;;4439:108;20203:13:::1;:17;::::0;20219:1:::1;20203:17;:::i;:::-;:24;;;;:::i;:::-;20202:47;;;;:::i;:::-;20192:6;:57;;20184:111;;;::::0;-1:-1:-1;;;20184:111:0;;13834:2:1;20184:111:0::1;::::0;::::1;13816:21:1::0;13873:2;13853:18;;;13846:30;13912:34;13892:18;;;13885:62;-1:-1:-1;;;13963:18:1;;;13956:39;14012:19;;20184:111:0::1;13632:405:1::0;20184:111:0::1;20331:16;4421:2:::0;20331::::1;:16;:::i;:::-;20321:27;::::0;:6;:27:::1;:::i;:::-;20306:12;:42:::0;;;20364:33:::1;::::0;160:25:1;;;20364:33:0::1;::::0;148:2:1;133:18;20364:33:0::1;14:177:1::0;5709:215:0;347:10;5797:4;5846:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5846:34:0;;;;;;;;;;5797:4;;5814:80;;5837:7;;5846:47;;5883:10;;5846:47;:::i;:::-;5814:8;:80::i;33791:312::-;8112:6;;-1:-1:-1;;;;;8112:6:0;347:10;8112:22;8104:67;;;;-1:-1:-1;;;8104:67:0;;;;;;;:::i;:::-;33882:18:::1;;33854:24;33872:4;33854:9;:24::i;:::-;:46;;33846:123;;;::::0;;-1:-1:-1;;;33846:123:0;;14374:2:1;33846:123:0::1;::::0;::::1;14356:21:1::0;14393:18;;;14386:30;;;;14452:34;14432:18;;;14425:62;14523:34;14503:18;;;14496:62;14575:19;;33846:123:0::1;14172:428:1::0;33846:123:0::1;33980:8;:15:::0;;-1:-1:-1;;33980:15:0::1;33991:4;33980:15;::::0;;34006:10:::1;:8;:10::i;:::-;34027:8;:16:::0;;-1:-1:-1;;34027:16:0::1;::::0;;34059:36:::1;::::0;34079:15:::1;160:25:1::0;;34059:36:0::1;::::0;148:2:1;133:18;34059:36:0::1;;;;;;;33791:312::o:0;33399:340::-;33503:15;;-1:-1:-1;;;;;33503:15:0;33481:10;:38;33473:58;;;;-1:-1:-1;;;33473:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33550:30:0;;33542:79;;;;-1:-1:-1;;;33542:79:0;;15142:2:1;33542:79:0;;;15124:21:1;15181:2;15161:18;;;15154:30;15220:34;15200:18;;;15193:62;-1:-1:-1;;;15271:18:1;;;15264:34;15315:19;;33542:79:0;14940:400:1;33542:79:0;33632:15;:43;;-1:-1:-1;;;;;;33632:43:0;-1:-1:-1;;;;;33632:43:0;;;;;;;;33691:40;;;;-1:-1:-1;;33691:40:0;33399:340;:::o;4555:127::-;-1:-1:-1;;;;;4656:18:0;4629:7;4656:18;;;;;;;;;;;;4555:127::o;42336:281::-;42418:24;;42396:7;;42418:24;;42415:195;;;42494:25;;42465:26;;:54;;;;:::i;:::-;42458:61;;42336:281;:::o;42415:195::-;-1:-1:-1;42568:1:0;;42336:281::o;34111:409::-;34208:16;;;34222:1;34208:16;;;;;;;;34165:7;;;;34208:16;34222:1;34208:16;;;;;;;;-1:-1:-1;;34245:9:0;;:16;;;-1:-1:-1;;;34245:16:0;;;;34184:40;;-1:-1:-1;;;;;;34245:9:0;;;;:14;;-1:-1:-1;34245:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34235:4;34240:1;34235:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;34235:26:0;;;-1:-1:-1;;;;;34235:26:0;;;;;34290:4;34272;34277:1;34272:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34272:23:0;;;;:7;;;;;;;;;;:23;34343:16;;;34357:1;34343:16;;;;;;;;34316:24;;34343:16;;34357:1;;34343:16;;;;;;;;;-1:-1:-1;;34380:9:0;;34404:15;;34380:46;;-1:-1:-1;;;34380:46:0;;34316:43;;-1:-1:-1;;;;;;34380:9:0;;;;:23;;:46;;34421:4;;34380:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34380:46:0;;;;;;;;;;;;:::i;:::-;34370:56;;34509:3;34491:15;;34472:16;;:34;;;;:::i;:::-;34458:7;34466:1;34458:10;;;;;;;;:::i;:::-;;;;;;;:49;;;;:::i;:::-;34457:55;;;;:::i;:::-;34444:7;34452:1;34444:10;;;;;;;;:::i;:::-;;;;;;;:68;;;;:::i;:::-;34437:75;;;;34111:409;:::o;8199:150::-;8112:6;;-1:-1:-1;;;;;8112:6:0;347:10;8112:22;8104:67;;;;-1:-1:-1;;;8104:67:0;;;;;;;:::i;:::-;8292:6:::1;::::0;8271:40:::1;::::0;8308:1:::1;::::0;-1:-1:-1;;;;;8292:6:0::1;::::0;8271:40:::1;::::0;8308:1;;8271:40:::1;8322:6;:19:::0;;-1:-1:-1;;;;;;8322:19:0::1;::::0;;8199:150::o;37197:506::-;37340:15;;-1:-1:-1;;;;;37340:15:0;37318:10;:38;37310:58;;;;-1:-1:-1;;;37310:58:0;;;;;;;:::i;:::-;37410:3;37387:19;:26;;37379:90;;;;-1:-1:-1;;;37379:90:0;;17158:2:1;37379:90:0;;;17140:21:1;17197:2;17177:18;;;17170:30;17236:34;17216:18;;;17209:62;-1:-1:-1;;;17287:18:1;;;17280:49;17346:19;;37379:90:0;16956:415:1;37379:90:0;37500:4;37488:8;:16;;:33;;;;-1:-1:-1;37508:13:0;37488:33;37480:94;;;;-1:-1:-1;;;37480:94:0;;17578:2:1;37480:94:0;;;17560:21:1;17617:2;17597:18;;;17590:30;17656:34;17636:18;;;17629:62;-1:-1:-1;;;17707:18:1;;;17700:46;17763:19;;37480:94:0;17376:412:1;37480:94:0;37585:15;:37;;;;37633:16;:27;37671:13;:24;;-1:-1:-1;;37671:24:0;;;;;;;;;;37197:506::o;18618:328::-;18692:15;;-1:-1:-1;;;;;18692:15:0;18670:10;:38;18662:58;;;;-1:-1:-1;;;18662:58:0;;;;;;;:::i;:::-;18731:14;:22;;-1:-1:-1;;18731:22:0;;;18764:20;:28;;-1:-1:-1;;18764:28:0;;;4527:12;;18803;:28;4527:12;;18842:13;:29;4527:12;;18882:9;:25;18923:15;;;;;;;18618:328::o;21661:260::-;8112:6;;-1:-1:-1;;;;;8112:6:0;347:10;8112:22;8104:67;;;;-1:-1:-1;;;8104:67:0;;;;;;;:::i;:::-;21757:4:::1;21753:104;;21795:6;::::0;-1:-1:-1;;;;;21795:6:0;;::::1;21785:16:::0;;::::1;::::0;21777:68:::1;;;::::0;-1:-1:-1;;;21777:68:0;;17995:2:1;21777:68:0::1;::::0;::::1;17977:21:1::0;18034:2;18014:18;;;18007:30;18073:34;18053:18;;;18046:62;-1:-1:-1;;;18124:18:1;;;18117:37;18171:19;;21777:68:0::1;17793:403:1::0;21777:68:0::1;-1:-1:-1::0;;;;;21867:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;21867:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21661:260::o;42625:546::-;42706:15;;-1:-1:-1;;;;;42706:15:0;42684:10;:38;42676:58;;;;-1:-1:-1;;;42676:58:0;;;;;;;:::i;:::-;42772:29;:27;:29::i;:::-;42753:15;:48;;:85;;;;;42837:1;42805:29;:27;:29::i;:::-;:33;42753:85;42745:120;;;;-1:-1:-1;;;42745:120:0;;18403:2:1;42745:120:0;;;18385:21:1;18442:2;18422:18;;;18415:30;-1:-1:-1;;;18461:18:1;;;18454:52;18523:18;;42745:120:0;18201:346:1;42745:120:0;42905:1;42876:26;:30;;;42917:24;:32;;-1:-1:-1;;42917:32:0;;;43037:16;;43001:6;;42986:48;;-1:-1:-1;;;42986:48:0;;43028:4;42986:48;;;913:51:1;43056:3:0;;43037:16;-1:-1:-1;;;;;43001:6:0;;42986:33;;886:18:1;;42986:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;;;:::i;:::-;:73;;;;:::i;:::-;43099:1;43080:16;:20;43120:6;;43113:50;;-1:-1:-1;;;43113:50:0;;43137:10;43113:50;;;18915:51:1;18982:18;;;18975:34;;;42962:97:0;;-1:-1:-1;;;;;;43120:6:0;;43113:23;;18888:18:1;;43113:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42665:506;42625:546::o;22474:389::-;8112:6;;-1:-1:-1;;;;;8112:6:0;347:10;8112:22;8104:67;;;;-1:-1:-1;;;8104:67:0;;;;;;;:::i;:::-;22590:14:::1;:29:::0;;;22630:15:::1;:31:::0;;;22672:10:::1;:21:::0;;;22685:8;22719:32:::1;22648:13:::0;22607:12;22719:32:::1;:::i;:::-;:45;;;;:::i;:::-;22704:12;:60:::0;22818:3:::1;22799:16;13570:5;22799:2;:16;:::i;:::-;:22;;;;:::i;:::-;22783:12;;:38;;22775:80;;;::::0;-1:-1:-1;;;22775:80:0;;19472:2:1;22775:80:0::1;::::0;::::1;19454:21:1::0;19511:2;19491:18;;;19484:30;19550:31;19530:18;;;19523:59;19599:18;;22775:80:0::1;19270:353:1::0;22775:80:0::1;22474:389:::0;;;:::o;18135:427::-;8112:6;;-1:-1:-1;;;;;8112:6:0;347:10;8112:22;8104:67;;;;-1:-1:-1;;;8104:67:0;;;;;;;:::i;:::-;18223:13:::1;::::0;;;::::1;;;18222:14;18214:50;;;::::0;-1:-1:-1;;;18214:50:0;;19830:2:1;18214:50:0::1;::::0;::::1;19812:21:1::0;19869:2;19849:18;;;19842:30;19908:25;19888:18;;;19881:53;19951:18;;18214:50:0::1;19628:347:1::0;18214:50:0::1;18303:2;18283:16;:22;;18275:74;;;;-1:-1:-1::0;;;18275:74:0::1;;;;;;;:::i;:::-;18360:13;:20:::0;;-1:-1:-1;;18391:18:0;;;;;18441:12:::1;18420:18;:33:::0;;;18485:37:::1;::::0;18506:16;;18485:37:::1;:::i;:::-;18464:18;:58:::0;18538:16:::1;::::0;::::1;::::0;;;::::1;18135:427:::0;:::o;32661:440::-;32791:15;;32738:10;;-1:-1:-1;;;;;32791:15:0;32769:10;:38;32761:58;;;;-1:-1:-1;;;32761:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32838:20:0;;32830:59;;;;-1:-1:-1;;;32830:59:0;;20590:2:1;32830:59:0;;;20572:21:1;20629:2;20609:18;;;20602:30;20668:28;20648:18;;;20641:56;20714:18;;32830:59:0;20388:350:1;32830:59:0;32927:39;;-1:-1:-1;;;32927:39:0;;32960:4;32927:39;;;913:51:1;32900:24:0;;-1:-1:-1;;;;;32927:24:0;;;;;886:18:1;;32927:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32985:46;;-1:-1:-1;;;32985:46:0;;-1:-1:-1;;;;;18933:32:1;;;32985:46:0;;;18915:51:1;18982:18;;;18975:34;;;32900:66:0;;-1:-1:-1;32985:23:0;;;;;;18888:18:1;;32985:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33047;;;-1:-1:-1;;;;;18933:32:1;;18915:51;;18997:2;18982:18;;18975:34;;;32977:54:0;;-1:-1:-1;33047:46:0;;18888:18:1;33047:46:0;;;;;;;32750:351;32661:440;;;;:::o;19530:203::-;8112:6;;-1:-1:-1;;;;;8112:6:0;347:10;8112:22;8104:67;;;;-1:-1:-1;;;8104:67:0;;;;;;;:::i;:::-;19628:9:::1;19624:102;19643:20:::0;;::::1;19624:102;;;19710:4;19684:9;:23;19694:9;;19704:1;19694:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19684:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;19684:23:0;:30;;-1:-1:-1;;19684:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19665:3;::::1;::::0;::::1;:::i;:::-;;;;19624:102;;;;19530:203:::0;;;:::o;4226:104::-;4282:13;4315:7;4308:14;;;;;:::i;19419:103::-;19468:16;19503:11;19496:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19496:18:0;;;;;;;;;;;;;;;;;;;;;;19419:103;:::o;21929:293::-;8112:6;;-1:-1:-1;;;;;8112:6:0;347:10;8112:22;8104:67;;;;-1:-1:-1;;;8104:67:0;;;;;;;:::i;:::-;22038:6:::1;::::0;-1:-1:-1;;;;;22038:6:0;;::::1;22030:14:::0;;::::1;::::0;22022:84:::1;;;::::0;-1:-1:-1;;;22022:84:0;;21085:2:1;22022:84:0::1;::::0;::::1;21067:21:1::0;21124:2;21104:18;;;21097:30;21163:34;21143:18;;;21136:62;21234:27;21214:18;;;21207:55;21279:19;;22022:84:0::1;20883:421:1::0;22022:84:0::1;22117:41;22146:4;22152:5;22117:28;:41::i;:::-;22174:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;22174:40:0;::::1;::::0;::::1;::::0;;;::::1;21929:293:::0;;:::o;5932:413::-;347:10;6025:4;6069:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6069:34:0;;;;;;;;;;6122:35;;;;6114:85;;;;-1:-1:-1;;;6114:85:0;;21511:2:1;6114:85:0;;;21493:21:1;21550:2;21530:18;;;21523:30;21589:34;21569:18;;;21562:62;-1:-1:-1;;;21640:18:1;;;21633:35;21685:19;;6114:85:0;21309:401:1;6114:85:0;6235:67;347:10;6258:7;6286:15;6267:16;:34;6235:8;:67::i;:::-;-1:-1:-1;6333:4:0;;5932:413;-1:-1:-1;;;5932:413:0:o;4690:175::-;4776:4;4793:42;347:10;4817:9;4828:6;4793:9;:42::i;34784:2405::-;8112:6;;-1:-1:-1;;;;;8112:6:0;347:10;8112:22;8104:67;;;;-1:-1:-1;;;8104:67:0;;;;;;;:::i;:::-;34984:13:::1;::::0;;;::::1;;;34983:14;34975:70;;;::::0;-1:-1:-1;;;34975:70:0;;21917:2:1;34975:70:0::1;::::0;::::1;21899:21:1::0;21956:2;21936:18;;;21929:30;21995:34;21975:18;;;21968:62;-1:-1:-1;;;22046:18:1;;;22039:41;22097:19;;34975:70:0::1;21715:407:1::0;34975:70:0::1;35083:2;35064:16;:21;35056:73;;;;-1:-1:-1::0;;;35056:73:0::1;;;;;;;:::i;:::-;35166:15;:22;35148:7;:14;:40;35140:83;;;::::0;-1:-1:-1;;;35140:83:0;;22329:2:1;35140:83:0::1;::::0;::::1;22311:21:1::0;22368:2;22348:18;;;22341:30;22407:32;22387:18;;;22380:60;22457:18;;35140:83:0::1;22127:354:1::0;35140:83:0::1;35259:3;35242:7;:14;:20;35234:87;;;::::0;-1:-1:-1;;;35234:87:0;;22688:2:1;35234:87:0::1;::::0;::::1;22670:21:1::0;22727:2;22707:18;;;22700:30;22766:34;22746:18;;;22739:62;-1:-1:-1;;;22817:18:1;;;22810:52;22879:19;;35234:87:0::1;22486:418:1::0;35234:87:0::1;35434:9;35430:88;35449:19:::0;;::::1;35430:88;;;35511:4;35476:19;:32;35496:8;;35505:1;35496:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35476:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35476:32:0;:39;;-1:-1:-1;;35476:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35470:3;::::1;::::0;::::1;:::i;:::-;;;;35430:88;;;;35532:9;35528:80;35547:20:::0;;::::1;35528:80;;;35601:4;35575:9;:23;35585:9;;35595:1;35585:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35575:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35575:23:0;:30;;-1:-1:-1;;35575:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35569:3;::::1;::::0;::::1;:::i;:::-;;;;35528:80;;;;35622:9;35618:351;35641:7;:14;35637:1;:18;35618:351;;;35676:14;35693:7;35701:1;35693:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;35718:26:0;::::1;;::::0;;;:18:::1;:26:::0;;;;;;;:33;;-1:-1:-1;;35718:33:0::1;35747:4;35718:33;::::0;;35693:10;-1:-1:-1;35802:26:0::1;:15;35820:8;35802:26;:::i;:::-;-1:-1:-1::0;;;;;35766:33:0;::::1;;::::0;;;:25:::1;:33;::::0;;;;:62;;;;35882:16:::1;4421:2:::0;35882::::1;:16;:::i;:::-;35860:15;35876:1;35860:18;;;;;;;;:::i;:::-;;;;;;;:39;;;;:::i;:::-;35843:56;;35914:43;35930:10;35942:6;35950;35914:15;:43::i;:::-;35661:308;;35657:3;;;;;:::i;:::-;;;;35618:351;;;-1:-1:-1::0;36016:13:0::1;:20:::0;;-1:-1:-1;;36047:18:0;;;;;36097:12:::1;36076:18;:33:::0;;;36141:37:::1;::::0;36162:16;;36141:37:::1;:::i;:::-;36120:18;:58:::0;36194:16:::1;::::0;::::1;::::0;;;::::1;36268:9;;;;;;;;;-1:-1:-1::0;;;;;36268:9:0::1;-1:-1:-1::0;;;;;36268:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36256:43:0::1;;36308:4;36315:9;;;;;;;;;-1:-1:-1::0;;;;;36315:9:0::1;-1:-1:-1::0;;;;;36315:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36256:76;::::0;-1:-1:-1;;;;;;36256:76:0::1;::::0;;;;;;-1:-1:-1;;;;;23139:15:1;;;36256:76:0::1;::::0;::::1;23121:34:1::0;23191:15;;23171:18;;;23164:43;23056:18;;36256:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36247:6;:85:::0;;-1:-1:-1;;;;;;36247:85:0::1;-1:-1:-1::0;;;;;36247:85:0;;;::::1;::::0;;::::1;::::0;;36343:49:::1;::::0;-1:-1:-1;36343:26:0::1;:49::i;:::-;36440:6;::::0;36403:51:::1;::::0;-1:-1:-1;;;;;36440:6:0::1;::::0;36403:28:::1;:51::i;:::-;36532:1;36508:21;:25;36500:73;;;::::0;-1:-1:-1;;;36500:73:0;;23420:2:1;36500:73:0::1;::::0;::::1;23402:21:1::0;23459:2;23439:18;;;23432:30;23498:34;23478:18;;;23471:62;-1:-1:-1;;;23549:18:1;;;23542:33;23592:19;;36500:73:0::1;23218:399:1::0;36500:73:0::1;36619:1;36592:24;36610:4;36592:9;:24::i;:::-;:28;36584:79;;;::::0;-1:-1:-1;;;36584:79:0;;23824:2:1;36584:79:0::1;::::0;::::1;23806:21:1::0;23863:2;23843:18;;;23836:30;23902:34;23882:18;;;23875:62;-1:-1:-1;;;23953:18:1;;;23946:36;23999:19;;36584:79:0::1;23622:402:1::0;36584:79:0::1;36708:9;::::0;36676:69:::1;::::0;36693:4:::1;::::0;-1:-1:-1;;;;;36708:9:0::1;36720:24;36693:4:::0;36720:9:::1;:24::i;36676:69::-;36756:9;::::0;-1:-1:-1;;;;;36756:9:0::1;:25;36789:21;36834:4;36854:24;36834:4:::0;36854:9:::1;:24::i;:::-;36893:1;36936::::0;36987:4:::1;37007:15;36756:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;37083:4:0::1;37066:14;:21:::0;;;37098:12:::1;:19:::0;;;37128:15:::1;:22:::0;;;37161:13:::1;:20:::0;-1:-1:-1;;;;;;;;34784:2405:0:o;23276:282::-;8112:6;;-1:-1:-1;;;;;8112:6:0;347:10;8112:22;8104:67;;;;-1:-1:-1;;;8104:67:0;;;;;;;:::i;:::-;23383:9:::1;23379:172;23398:19:::0;;::::1;23379:172;;;23473:8;23438:19;:32;23458:8;;23467:1;23458:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23438:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;23438:32:0;:43;;-1:-1:-1;;23438:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23517:8;;23526:1;23517:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23501:38:0::1;;23530:8;23501:38;;;;1596:14:1::0;1589:22;1571:41;;1559:2;1544:18;;1431:187;23501:38:0::1;;;;;;;;23419:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23379:172;;41820:508:::0;41923:15;;-1:-1:-1;;;;;41923:15:0;41901:10;:38;41893:58;;;;-1:-1:-1;;;41893:58:0;;;;;;;:::i;:::-;41971:24;;;;41970:25;41962:87;;;;-1:-1:-1;;;41962:87:0;;25154:2:1;41962:87:0;;;25136:21:1;25193:2;25173:18;;;25166:30;25232:34;25212:18;;;25205:62;-1:-1:-1;;;25283:18:1;;;25276:47;25340:19;;41962:87:0;24952:413:1;41962:87:0;42086:3;42068:14;:21;;:43;;;;;42110:1;42093:14;:18;42068:43;42060:82;;;;-1:-1:-1;;;42060:82:0;;25572:2:1;42060:82:0;;;25554:21:1;25611:2;25591:18;;;25584:30;25650:28;25630:18;;;25623:56;25696:18;;42060:82:0;25370:350:1;42060:82:0;42182:15;42153:26;:44;42208:24;:31;;-1:-1:-1;;42208:31:0;42235:4;42208:31;;;42250:16;:33;;;42299:21;;;;42208:24;;42299:21;41820:508;:::o;23566:182::-;8112:6;;-1:-1:-1;;;;;8112:6:0;347:10;8112:22;8104:67;;;;-1:-1:-1;;;8104:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23651:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;23651:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23706:34;;1571:41:1;;;23706:34:0::1;::::0;1544:18:1;23706:34:0::1;;;;;;;23566:182:::0;;:::o;22871:397::-;8112:6;;-1:-1:-1;;;;;8112:6:0;347:10;8112:22;8104:67;;;;-1:-1:-1;;;8104:67:0;;;;;;;:::i;:::-;22987:15:::1;:30:::0;;;23028:16:::1;:32:::0;;;23071:11:::1;:22:::0;;;23085:8;23120:34:::1;23047:13:::0;23005:12;23120:34:::1;:::i;:::-;:48;;;;:::i;:::-;23104:13;:64:::0;23223:3:::1;23204:16;13570:5;23204:2;:16;:::i;:::-;:22;;;;:::i;:::-;23187:13;;:39;;23179:81;;;::::0;-1:-1:-1;;;23179:81:0;;25927:2:1;23179:81:0::1;::::0;::::1;25909:21:1::0;25966:2;25946:18;;;25939:30;26005:31;25985:18;;;25978:59;26054:18;;23179:81:0::1;25725:353:1::0;43179:279:0;43264:15;;-1:-1:-1;;;;;43264:15:0;43242:10;:38;43234:58;;;;-1:-1:-1;;;43234:58:0;;;;;;;:::i;:::-;43303:24;:32;;-1:-1:-1;;43303:32:0;;;43330:5;43346:16;:20;;;43377:26;:30;;;43423:27;;;;43330:5;43423:27;43179:279::o;18954:227::-;19027:15;;-1:-1:-1;;;;;19027:15:0;19005:10;:38;18997:58;;;;-1:-1:-1;;;18997:58:0;;;;;;;:::i;:::-;19083:2;19066:14;:19;;;19096:12;:17;;;19124:15;:20;;;19155:13;:18;18954:227::o;21083:346::-;8112:6;;-1:-1:-1;;;;;8112:6:0;347:10;8112:22;8104:67;;;;-1:-1:-1;;;8104:67:0;;;;;;;:::i;:::-;21206:6:::1;21186:13;4527:12:::0;;;4439:108;21186:13:::1;:17;::::0;21202:1:::1;21186:17;:::i;:::-;:26;;;;:::i;:::-;21173:9;:39;;21165:105;;;::::0;-1:-1:-1;;;21165:105:0;;26285:2:1;21165:105:0::1;::::0;::::1;26267:21:1::0;26324:2;26304:18;;;26297:30;26363:34;26343:18;;;26336:62;-1:-1:-1;;;26414:18:1;;;26407:51;26475:19;;21165:105:0::1;26083:417:1::0;21165:105:0::1;21321:4;21301:13;4527:12:::0;;;4439:108;21301:13:::1;:17;::::0;21317:1:::1;21301:17;:::i;:::-;:24;;;;:::i;:::-;21288:9;:37;;21280:102;;;::::0;-1:-1:-1;;;21280:102:0;;26707:2:1;21280:102:0::1;::::0;::::1;26689:21:1::0;26746:2;26726:18;;;26719:30;26785:34;26765:18;;;26758:62;-1:-1:-1;;;26836:18:1;;;26829:50;26896:19;;21280:102:0::1;26505:416:1::0;21280:102:0::1;21392:18;:30:::0;21083:346::o;20417:300::-;8112:6;;-1:-1:-1;;;;;8112:6:0;347:10;8112:22;8104:67;;;;-1:-1:-1;;;8104:67:0;;;;;;;:::i;:::-;20540:16:::1;4421:2:::0;20540::::1;:16;:::i;:::-;20531:4;20511:13;4527:12:::0;;;4439:108;20511:13:::1;:17;::::0;20527:1:::1;20511:17;:::i;:::-;:24;;;;:::i;:::-;20510:47;;;;:::i;:::-;20500:6;:57;;20492:112;;;::::0;-1:-1:-1;;;20492:112:0;;27128:2:1;20492:112:0::1;::::0;::::1;27110:21:1::0;27167:2;27147:18;;;27140:30;27206:34;27186:18;;;27179:62;-1:-1:-1;;;27257:18:1;;;27250:40;27307:19;;20492:112:0::1;26926:406:1::0;20492:112:0::1;20641:16;4421:2:::0;20641::::1;:16;:::i;:::-;20631:27;::::0;:6;:27:::1;:::i;:::-;20615:13;:43:::0;;;20674:35:::1;::::0;160:25:1;;;20674:35:0::1;::::0;148:2:1;133:18;20674:35:0::1;14:177:1::0;40440:982:0;40561:15;;40515:4;;-1:-1:-1;;;;;40561:15:0;40539:10;:38;40531:58;;;;-1:-1:-1;;;40531:58:0;;;;;;;:::i;:::-;40649:19;;40626:20;;:42;;;;:::i;:::-;40608:15;:60;40600:106;;;;-1:-1:-1;;;40600:106:0;;27539:2:1;40600:106:0;;;27521:21:1;;;27558:18;;;27551:30;27617:34;27597:18;;;27590:62;27669:18;;40600:106:0;27337:356:1;40600:106:0;40736:4;40725:7;:15;;40717:70;;;;-1:-1:-1;;;40717:70:0;;27900:2:1;40717:70:0;;;27882:21:1;27939:2;27919:18;;;27912:30;27978:34;27958:18;;;27951:62;-1:-1:-1;;;28029:18:1;;;28022:40;28079:19;;40717:70:0;27698:406:1;40717:70:0;40821:15;40798:20;:38;40938:6;;40923:22;;-1:-1:-1;;;40923:22:0;;-1:-1:-1;;;;;40938:6:0;;;40923:22;;;913:51:1;40892:28:0;;40923:4;;:14;;886:18:1;;40923:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40892:53;-1:-1:-1;40996:20:0;41053:5;41019:31;41043:7;40892:53;41019:31;:::i;:::-;:39;;;;:::i;:::-;40996:62;-1:-1:-1;41152:16:0;;41148:102;;41200:6;;41184:54;;-1:-1:-1;;;;;41200:6:0;41216;41225:12;41184:15;:54::i;:::-;41363:6;;41381:11;;;-1:-1:-1;;;;;;41381:11:0;;;;-1:-1:-1;;;;;41363:6:0;;;;;;41381:9;;:11;;;;;41326:19;;41381:11;;;;;;;41326:19;41363:6;41381:11;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41410:4:0;;40440:982;-1:-1:-1;;;;;;;;40440:982:0:o;20000:98::-;8112:6;;-1:-1:-1;;;;;8112:6:0;347:10;8112:22;8104:67;;;;-1:-1:-1;;;8104:67:0;;;;;;;:::i;:::-;20062:20:::1;:28:::0;;-1:-1:-1;;20062:28:0::1;::::0;;20000:98::o;12456:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12456:28:0;;-1:-1:-1;12456:28:0;:::o;8357:244::-;8112:6;;-1:-1:-1;;;;;8112:6:0;347:10;8112:22;8104:67;;;;-1:-1:-1;;;8104:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8446:22:0;::::1;8438:73;;;::::0;-1:-1:-1;;;8438:73:0;;28311:2:1;8438:73:0::1;::::0;::::1;28293:21:1::0;28350:2;28330:18;;;28323:30;28389:34;28369:18;;;28362:62;-1:-1:-1;;;28440:18:1;;;28433:36;28486:19;;8438:73:0::1;28109:402:1::0;8438:73:0::1;8548:6;::::0;8527:38:::1;::::0;-1:-1:-1;;;;;8527:38:0;;::::1;::::0;8548:6:::1;::::0;8527:38:::1;::::0;8548:6:::1;::::0;8527:38:::1;8576:6;:17:::0;;-1:-1:-1;;;;;;8576:17:0::1;-1:-1:-1::0;;;;;8576:17:0;;;::::1;::::0;;;::::1;::::0;;8357:244::o;33172:219::-;33250:15;;-1:-1:-1;;;;;33250:15:0;33228:10;:38;33220:58;;;;-1:-1:-1;;;33220:58:0;;;;;;;:::i;:::-;33325;;33289:12;;33333:10;;33357:21;;33289:12;33325:58;33289:12;33325:58;33357:21;33333:10;33325:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19189:222;19261:15;;-1:-1:-1;;;;;19261:15:0;19239:10;:38;19231:58;;;;-1:-1:-1;;;19231:58:0;;;;;;;:::i;:::-;19317:1;19300:14;:18;;;19329:12;:16;;;19356:15;:19;;;19386:13;:17;19189:222::o;38975:1457::-;39081:15;;-1:-1:-1;;;;;39081:15:0;39059:10;:38;39051:58;;;;-1:-1:-1;;;39051:58:0;;;;;;;:::i;:::-;39138:4;39128:7;:14;;39120:80;;;;-1:-1:-1;;;39120:80:0;;28928:2:1;39120:80:0;;;28910:21:1;28967:2;28947:18;;;28940:30;29006:34;28986:18;;;28979:62;-1:-1:-1;;;29057:18:1;;;29050:51;29118:19;;39120:80:0;28726:417:1;39120:80:0;39261:19;;39243:37;;:15;:37;:::i;:::-;39219:20;;:61;;39211:87;;;;-1:-1:-1;;;39211:87:0;;29483:2:1;39211:87:0;;;29465:21:1;29522:2;29502:18;;;29495:30;-1:-1:-1;;;29541:18:1;;;29534:43;29594:18;;39211:87:0;29281:337:1;39211:87:0;39332:15;39309:20;:38;39385:6;;39378:39;;-1:-1:-1;;;39378:39:0;;39411:4;39378:39;;;913:51:1;39358:17:0;;-1:-1:-1;;;;;39385:6:0;;39378:24;;886:18:1;;39378:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39358:59;;39428:20;39451:24;39469:4;39451:9;:24::i;:::-;39428:47;-1:-1:-1;39486:16:0;39527:5;39505:19;39517:7;39505:9;:19;:::i;:::-;:27;;;;:::i;:::-;39679:6;;39703:9;;39672:52;;-1:-1:-1;;;39672:52:0;;-1:-1:-1;;;;;39703:9:0;;;39672:52;;;18915:51:1;18982:18;;;18975:34;;;39486:46:0;;-1:-1:-1;39571:21:0;;39679:6;;;39672:22;;18888:18:1;;39672:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;39770:9:0;;:234;;-1:-1:-1;;;39770:234:0;;-1:-1:-1;;;;;39770:9:0;;;;:28;;:234;;39821:4;;39841:8;;39770:9;;;;39821:4;;39978:15;;39770:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40017:25;40072:12;40045:24;40063:4;40045:9;:24::i;:::-;:39;;;;:::i;:::-;40017:67;-1:-1:-1;40098:21:0;;40095:118;;40135:66;40159:4;40174:6;40183:17;40135:15;:66::i;:::-;40225:23;40251:41;40275:17;40251:21;:41;:::i;:::-;40225:67;-1:-1:-1;40308:19:0;;40305:80;;40343:30;40357:15;40343:13;:30::i;:::-;40402:22;;40415:8;;40402:22;;;;;39040:1392;;;;;;38975:1457;:::o;7274:380::-;-1:-1:-1;;;;;7410:19:0;;7402:68;;;;-1:-1:-1;;;7402:68:0;;30687:2:1;7402:68:0;;;30669:21:1;30726:2;30706:18;;;30699:30;30765:34;30745:18;;;30738:62;-1:-1:-1;;;30816:18:1;;;30809:34;30860:19;;7402:68:0;30485:400:1;7402:68:0;-1:-1:-1;;;;;7489:21:0;;7481:68;;;;-1:-1:-1;;;7481:68:0;;31092:2:1;7481:68:0;;;31074:21:1;31131:2;31111:18;;;31104:30;31170:34;31150:18;;;31143:62;-1:-1:-1;;;31221:18:1;;;31214:32;31263:19;;7481:68:0;30890:398:1;7481:68:0;-1:-1:-1;;;;;7562:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7614:32;;160:25:1;;;7614:32:0;;133:18:1;7614:32:0;;;;;;;7274:380;;;:::o;23756:6248::-;-1:-1:-1;;;;;23854:18:0;;23846:68;;;;-1:-1:-1;;;23846:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23933:16:0;;23925:64;;;;-1:-1:-1;;;23925:64:0;;;;;;;:::i;:::-;24017:1;24008:6;:10;24000:52;;;;-1:-1:-1;;;24000:52:0;;32305:2:1;24000:52:0;;;32287:21:1;32344:2;32324:18;;;32317:30;32383:31;32363:18;;;32356:59;32432:18;;24000:52:0;32103:353:1;24000:52:0;24077:13;;;;;;;24073:132;;-1:-1:-1;;;;;24114:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;24143:23:0;;;;;;:19;:23;;;;;;;;24114:52;24106:87;;;;-1:-1:-1;;;24106:87:0;;32663:2:1;24106:87:0;;;32645:21:1;32702:2;32682:18;;;32675:30;-1:-1:-1;;;32721:18:1;;;32714:52;32783:18;;24106:87:0;32461:346:1;24106:87:0;30106:18;;30091:12;:33;24220:26;:43;;;;-1:-1:-1;24250:13:0;;;;;;;24220:43;24217:235;;;-1:-1:-1;;;;;24289:15:0;;;;;;:9;:15;;;;;;;;24288:16;:34;;;;-1:-1:-1;;;;;;24309:13:0;;;;;;:9;:13;;;;;;;;24308:14;24288:34;24287:53;;;-1:-1:-1;8050:6:0;;-1:-1:-1;;;;;24327:13:0;;;8050:6;;24327:13;24287:53;:78;;;-1:-1:-1;;;;;;24344:21:0;;24358:6;24344:21;24287:78;24279:161;;;;-1:-1:-1;;;24279:161:0;;33014:2:1;24279:161:0;;;32996:21:1;33053:2;33033:18;;;33026:30;33092:34;33072:18;;;33065:62;33163:34;33143:18;;;33136:62;-1:-1:-1;;;33214:19:1;;;33207:37;33261:19;;24279:161:0;32812:474:1;24279:161:0;-1:-1:-1;;;;;24467:24:0;;;;;;:18;:24;;;;;;;;24464:610;;;-1:-1:-1;;;;;24510:29:0;;;;;;:25;:29;;;;;;;;24507:556;;;-1:-1:-1;;;;;24617:31:0;;;;;;:25;:31;;;;;;24652:15;-1:-1:-1;24617:50:0;24609:78;;;;-1:-1:-1;;;24609:78:0;;33493:2:1;24609:78:0;;;33475:21:1;33532:2;33512:18;;;33505:30;-1:-1:-1;;;33551:18:1;;;33544:45;33606:18;;24609:78:0;33291:339:1;24609:78:0;24724:23;:21;:23::i;:::-;24714:6;:33;;24706:98;;;;-1:-1:-1;;;24706:98:0;;33837:2:1;24706:98:0;;;33819:21:1;33876:2;33856:18;;;33849:30;33915:34;33895:18;;;33888:62;-1:-1:-1;;;33966:18:1;;;33959:50;34026:19;;24706:98:0;33635:416:1;24706:98:0;24857:26;:15;24875:8;24857:26;:::i;:::-;-1:-1:-1;;;;;24823:31:0;;;;;;:25;:31;;;;;:60;24507:556;;;-1:-1:-1;;;;;24909:23:0;;;;;;:19;:23;;;;;;;;24905:158;;24952:95;;-1:-1:-1;;;24952:95:0;;34258:2:1;24952:95:0;;;34240:21:1;34297:2;34277:18;;;34270:30;34336:34;34316:18;;;34309:62;34407:34;34387:18;;;34380:62;-1:-1:-1;;;34458:19:1;;;34451:52;34520:19;;24952:95:0;34056:489:1;24905:158:0;25097:14;;;;;;;25094:1662;;;8050:6;;-1:-1:-1;;;;;25131:15:0;;;8050:6;;25131:15;;;;:32;;-1:-1:-1;8050:6:0;;-1:-1:-1;;;;;25150:13:0;;;8050:6;;25150:13;;25131:32;:52;;;;-1:-1:-1;;;;;;25167:16:0;;;;25131:52;:77;;;;-1:-1:-1;;;;;;25187:21:0;;25201:6;25187:21;;25131:77;:107;;;;-1:-1:-1;;;;;;25213:25:0;;;;;;:19;:25;;;;;;;;25212:26;25131:107;:135;;;;-1:-1:-1;;;;;;25243:23:0;;;;;;:19;:23;;;;;;;;25242:24;25131:135;25127:1618;;;25442:20;;;;25438:506;;;25504:9;;-1:-1:-1;;;;;25490:24:0;;;25504:9;;25490:24;;;;:49;;-1:-1:-1;25532:6:0;;-1:-1:-1;;;;;25518:21:0;;;25532:6;;25518:21;;25490:49;25486:439;;;25617:16;25632:1;25617:12;:16;:::i;:::-;25604:9;25575:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;25672:16:0;25687:1;25672:12;:16;:::i;:::-;-1:-1:-1;;;;;25637:32:0;;;;;;:28;:32;;;;;;:51;25575:113;25567:179;;;;-1:-1:-1;;;25567:179:0;;34752:2:1;25567:179:0;;;34734:21:1;34791:2;34771:18;;;34764:30;34830:34;34810:18;;;34803:62;-1:-1:-1;;;34881:18:1;;;34874:51;34942:19;;25567:179:0;34550:417:1;25567:179:0;25802:9;25773:39;;;;:28;:39;;;;;;25815:12;25773:54;;;;-1:-1:-1;;;;;25854:32:0;;;;;;:47;25486:439;-1:-1:-1;;;;;26013:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;26049:35:0;;;;;;:31;:35;;;;;;;;26048:36;26013:71;26009:721;;;26127:12;;26117:6;:22;;26109:75;;;;-1:-1:-1;;;26109:75:0;;35174:2:1;26109:75:0;;;35156:21:1;35213:2;35193:18;;;35186:30;35252:34;35232:18;;;35225:62;-1:-1:-1;;;35303:18:1;;;35296:38;35351:19;;26109:75:0;34972:404:1;26109:75:0;26241:9;;26224:13;26234:2;26224:9;:13::i;:::-;26215:22;;:6;:22;:::i;:::-;:35;;26207:72;;;;-1:-1:-1;;;26207:72:0;;35583:2:1;26207:72:0;;;35565:21:1;35622:2;35602:18;;;35595:30;-1:-1:-1;;;35641:18:1;;;35634:54;35705:18;;26207:72:0;35381:348:1;26207:72:0;26009:721;;;-1:-1:-1;;;;;26356:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;26390:37:0;;;;;;:31;:37;;;;;;;;26389:38;26356:71;26352:378;;;26470:13;;26460:6;:23;;26452:78;;;;-1:-1:-1;;;26452:78:0;;35936:2:1;26452:78:0;;;35918:21:1;35975:2;35955:18;;;35948:30;36014:34;35994:18;;;35987:62;-1:-1:-1;;;36065:18:1;;;36058:40;36115:19;;26452:78:0;35734:406:1;26352:378:0;-1:-1:-1;;;;;26578:35:0;;;;;;:31;:35;;;;;;;;26573:157;;26672:9;;26655:13;26665:2;26655:9;:13::i;:::-;26646:22;;:6;:22;:::i;:::-;:35;;26638:72;;;;-1:-1:-1;;;26638:72:0;;35583:2:1;26638:72:0;;;35565:21:1;35622:2;35602:18;;;35595:30;-1:-1:-1;;;35641:18:1;;;35634:54;35705:18;;26638:72:0;35381:348:1;26638:72:0;26768:28;26799:24;26817:4;26799:9;:24::i;:::-;26883:18;;26768:55;;-1:-1:-1;26859:42:0;;;;;;;26917:22;;-1:-1:-1;26928:11:0;;;;;;;26917:22;:35;;;;-1:-1:-1;26944:8:0;;;;26943:9;26917:35;:71;;;;-1:-1:-1;;;;;;26957:31:0;;;;;;:25;:31;;;;;;;;26956:32;26917:71;:101;;;;-1:-1:-1;;;;;;26993:25:0;;;;;;:19;:25;;;;;;;;26992:26;26917:101;:129;;;;-1:-1:-1;;;;;;27023:23:0;;;;;;:19;:23;;;;;;;;27022:24;26917:129;26914:232;;;27063:8;:15;;-1:-1:-1;;27063:15:0;27074:4;27063:15;;;27093:10;:8;:10::i;:::-;27118:8;:16;;-1:-1:-1;;27118:16:0;;;26914:232;27162:8;;;;27161:9;:42;;;;-1:-1:-1;;;;;;27174:29:0;;;;;;:25;:29;;;;;;;;27161:42;:59;;;;-1:-1:-1;27207:13:0;;;;27161:59;:114;;;;;27260:15;;27243:14;;:32;;;;:::i;:::-;27224:15;:51;;27161:114;:144;;;;-1:-1:-1;;;;;;27280:25:0;;;;;;:19;:25;;;;;;;;27279:26;27161:144;27158:204;;;27321:29;:27;:29::i;:::-;-1:-1:-1;;;;;27492:25:0;;27374:12;27492:25;;;:19;:25;;;;;;27389:4;;27492:25;;;:52;;-1:-1:-1;;;;;;27521:23:0;;;;;;:19;:23;;;;;;;;27492:52;27489:99;;;-1:-1:-1;27571:5:0;27489:99;27608:12;27635:20;27749:7;27746:2205;;;30106:18;;30091:12;:33;27811:60;;;;-1:-1:-1;;;;;;27840:31:0;;;;;;:25;:31;;;;;;;;27811:60;:94;;;;-1:-1:-1;;;;;;27876:29:0;;;;;;:25;:29;;;;;;;;27875:30;27811:94;:122;;;;-1:-1:-1;;;;;;27910:23:0;;;;;;:19;:23;;;;;;;;27909:24;27811:122;:142;;;;;27952:1;27937:12;;:16;27811:142;27808:1832;;;30106:18;;30091:12;:33;27991:330;;28300:1;28284:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;27991:330:0;-1:-1:-1;;;;;28345:13:0;;;;;;:9;:13;;;;;;;;28341:210;;-1:-1:-1;;;;;28382:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;28382:20:0;28398:4;28382:20;;;;;;28425:10;:15;;28398:4;;28425:10;;:15;;28398:4;;28425:15;:::i;:::-;;;;-1:-1:-1;;28463:11:0;:20;;;;;;;-1:-1:-1;28463:20:0;;;;;;;;-1:-1:-1;;;;;;28463:20:0;-1:-1:-1;;;;;28463:20:0;;;;;;;;28511;;913:51:1;;;28511:20:0;;901:2:1;886:18;28511:20:0;;;;;;;28341:210;13570:5;28587:12;;28578:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;28571:42;;28676:12;;28658:15;;28651:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;28629:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;28752:12:0;;28735:14;;28728:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;28707:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;28818:12:0;;28805:10;;28798:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;28783:47;;27808:1832;;;-1:-1:-1;;;;;28895:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;28944:1;28928:13;;:17;28895:50;28891:749;;;13570:5;28981:13;;28972:6;:22;;;;:::i;:::-;:36;;;;:::i;:::-;28965:43;;29075:13;;29056:16;;29049:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;29027:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;29153:13:0;;29135:15;;29128:22;;:4;:22;:::i;:::-;:38;;;;:::i;:::-;29107:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;29221:12:0;;29207:11;;29200:18;;:4;:18;:::i;28891:749::-;-1:-1:-1;;;;;29296:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;29346:1;29331:12;;:16;29296:51;29293:347;;;13570:5;29381:12;;29372:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;29365:42;;29470:12;;29452:15;;29445:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;29423:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;29546:12:0;;29529:14;;29522:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;29501:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;29612:12:0;;29599:10;;29592:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;29577:47;;29293:347;29671:8;;29668:235;;29703:42;29719:4;29733;29740;29703:15;:42::i;:::-;29767:16;;29764:124;;29807:61;29831:4;29846:6;29855:12;29807:15;:61::i;:::-;29925:14;29935:4;29925:14;;:::i;:::-;;;27746:2205;29963:33;29979:4;29985:2;29989:6;29963:15;:33::i;:::-;23835:6169;;;;;23756:6248;;;:::o;31240:1413::-;31281:23;31307:24;31325:4;31307:9;:24::i;:::-;31417:18;;31475:17;;31281:50;;-1:-1:-1;31417:18:0;31387:27;31533:38;31475:17;31417:18;31533:38;:::i;:::-;31505:66;-1:-1:-1;31595:20:0;;;:46;;-1:-1:-1;31619:22:0;;31595:46;31592:60;;;31644:7;;;;31240:1413::o;31592:60::-;31685:18;;;:23;;;:::i;:::-;31667:15;:41;31664:113;;;31742:18;;;:23;;;:::i;:::-;31724:41;;31664:113;31789:12;31871:23;31956:1;31936:17;31915:18;;31897:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;31871:86;-1:-1:-1;31978:51:0;31995:33;31871:86;31995:15;:33;:::i;:::-;31978:16;:51::i;:::-;32233:18;;32072:21;;;;32051:18;;32233:20;;32252:1;;32233:20;:::i;:::-;32212:42;;:17;:42;:::i;:::-;32191:17;;32178:30;;:10;:30;:::i;:::-;:77;;;;:::i;:::-;32153:102;-1:-1:-1;32268:33:0;32153:102;32268:33;;:::i;:::-;;;32348:19;32326:18;;:41;;;;;;;:::i;:::-;;;;;;;;32399:18;32378:17;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;;32441:19:0;;;;;:42;;;32482:1;32464:15;:19;32441:42;32438:119;;;32499:46;32512:15;32529;32499:12;:46::i;:::-;32590:15;;32582:63;;-1:-1:-1;;;;;32590:15:0;;;;32619:21;;32582:63;;;;32619:21;32590:15;32582:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;31240:1413:0:o;22230:236::-;-1:-1:-1;;;;;22313:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;22313:39:0;;;;;;;22363;22313:31;:39;22363:26;:39::i;6353:614::-;-1:-1:-1;;;;;6493:20:0;;6485:70;;;;-1:-1:-1;;;6485:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6574:23:0;;6566:71;;;;-1:-1:-1;;;6566:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6674:17:0;;6650:21;6674:17;;;;;;;;;;;6710:23;;;;6702:74;;;;-1:-1:-1;;;6702:74:0;;36347:2:1;6702:74:0;;;36329:21:1;36386:2;36366:18;;;36359:30;36425:34;36405:18;;;36398:62;-1:-1:-1;;;36476:18:1;;;36469:36;36522:19;;6702:74:0;36145:402:1;6702:74:0;-1:-1:-1;;;;;6812:17:0;;;:9;:17;;;;;;;;;;;6832:22;;;6812:42;;6876:20;;;;;;;;:30;;6848:6;;6812:9;6876:30;;6848:6;;6876:30;:::i;:::-;;;;;;;;6941:9;-1:-1:-1;;;;;6924:35:0;6933:6;-1:-1:-1;;;;;6924:35:0;;6952:6;6924:35;;;;160:25:1;;148:2;133:18;;14:177;6924:35:0;;;;;;;;6474:493;6353:614;;;:::o;21441:207::-;-1:-1:-1;;;;;21529:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;21529:52:0;;;;;;;;;;21597:43;;36720:51:1;;;36787:18;;;36780:50;21597:43:0;;36693:18:1;21597:43:0;;;;;;;21441:207;;:::o;41430:382::-;41518:16;;;41532:1;41518:16;;;;;;;;41494:21;;41518:16;;;;;;;;-1:-1:-1;;41555:9:0;;:16;;;-1:-1:-1;;;41555:16:0;;;;41494:40;;-1:-1:-1;;;;;;41555:9:0;;;;:14;;-1:-1:-1;41555:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41545:4;41550:1;41545:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;41545:26:0;;;-1:-1:-1;;;;;41545:26:0;;;;;41600:4;41582;41587:1;41582:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41582:23:0;;;:7;;;;;;;;;:23;41618:9;;:186;;-1:-1:-1;;;41618:186:0;;:9;;;:60;;41686:11;;41618:186;;:9;;41729:4;;41756:6;;41778:15;;41618:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41483:329;41430:382;:::o;37715:1252::-;37801:15;37784:14;:32;;;37837:20;:38;37913:6;;37906:39;;-1:-1:-1;;;37906:39:0;;37939:4;37906:39;;;913:51:1;-1:-1:-1;;;;;;;37913:6:0;;37906:24;;886:18:1;;37906:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37886:59;;37956:20;37979:24;37997:4;37979:9;:24::i;:::-;37956:47;;38014:16;38064:5;38045:16;;38033:9;:28;;;;:::i;:::-;:36;;;;:::i;:::-;38216:6;;38240:9;;38209:52;;-1:-1:-1;;;38209:52:0;;-1:-1:-1;;;;;38240:9:0;;;38209:52;;;18915:51:1;18982:18;;;18975:34;;;38014:55:0;;-1:-1:-1;38108:21:0;;38216:6;;;38209:22;;18888:18:1;;38209:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;38307:9:0;;:234;;-1:-1:-1;;;38307:234:0;;-1:-1:-1;;;;;38307:9:0;;;;:28;;:234;;38358:4;;38378:8;;38307:9;;;;38358:4;;38515:15;;38307:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38554:25;38609:12;38582:24;38600:4;38582:9;:24::i;:::-;:39;;;;:::i;:::-;38554:67;-1:-1:-1;38635:21:0;;38632:118;;38672:66;38696:4;38711:6;38720:17;38672:15;:66::i;:::-;38762:23;38788:41;38812:17;38788:21;:41;:::i;:::-;38762:67;-1:-1:-1;38845:19:0;;38842:80;;38880:30;38894:15;38880:13;:30::i;:::-;38939:20;;38950:8;;38939:20;;;;;37763:1204;;;;;;37715:1252::o;30140:573::-;30292:16;;;30306:1;30292:16;;;;;;;;30268:21;;30292:16;;;;;;;;;;-1:-1:-1;30292:16:0;30268:40;;30337:4;30319;30324:1;30319:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30319:23:0;;;:7;;;;;;;;;;:23;;;;30363:9;;:16;;;-1:-1:-1;;;30363:16:0;;;;:9;;;;;:14;;:16;;;;;30319:7;;30363:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30353:4;30358:1;30353:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30353:26:0;;;:7;;;;;;;;;:26;30424:9;;30392:56;;30409:4;;30424:9;30436:11;30392:8;:56::i;:::-;30487:9;;:218;;-1:-1:-1;;;30487:218:0;;-1:-1:-1;;;;;30487:9:0;;;;:60;;:218;;30562:11;;30487:9;;30632:4;;30659;;30679:15;;30487:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30195:518;30140:573;:::o;30725:507::-;30905:9;;30873:56;;30890:4;;-1:-1:-1;;;;;30905:9:0;30917:11;30873:8;:56::i;:::-;30972:9;;:252;;-1:-1:-1;;;30972:252:0;;-1:-1:-1;;;;;30972:9:0;;;;:25;;31005:9;;30972:252;;31038:4;;31058:11;;30972:9;;;;31038:4;;31198:15;;30972:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30725:507;;:::o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;975:131::-;-1:-1:-1;;;;;1050:31:1;;1040:42;;1030:70;;1096:1;1093;1086:12;1030:70;975:131;:::o;1111:315::-;1179:6;1187;1240:2;1228:9;1219:7;1215:23;1211:32;1208:52;;;1256:1;1253;1246:12;1208:52;1295:9;1282:23;1314:31;1339:5;1314:31;:::i;:::-;1364:5;1416:2;1401:18;;;;1388:32;;-1:-1:-1;;;1111:315:1:o;1623:247::-;1682:6;1735:2;1723:9;1714:7;1710:23;1706:32;1703:52;;;1751:1;1748;1741:12;1703:52;1790:9;1777:23;1809:31;1834:5;1809:31;:::i;:::-;1859:5;1623:247;-1:-1:-1;;;1623:247:1:o;1875:180::-;1934:6;1987:2;1975:9;1966:7;1962:23;1958:32;1955:52;;;2003:1;2000;1993:12;1955:52;-1:-1:-1;2026:23:1;;1875:180;-1:-1:-1;1875:180:1:o;2060:456::-;2137:6;2145;2153;2206:2;2194:9;2185:7;2181:23;2177:32;2174:52;;;2222:1;2219;2212:12;2174:52;2261:9;2248:23;2280:31;2305:5;2280:31;:::i;:::-;2330:5;-1:-1:-1;2387:2:1;2372:18;;2359:32;2400:33;2359:32;2400:33;:::i;:::-;2060:456;;2452:7;;-1:-1:-1;;;2506:2:1;2491:18;;;;2478:32;;2060:456::o;2918:118::-;3004:5;2997:13;2990:21;2983:5;2980:32;2970:60;;3026:1;3023;3016:12;3041:377;3115:6;3123;3131;3184:2;3172:9;3163:7;3159:23;3155:32;3152:52;;;3200:1;3197;3190:12;3152:52;3236:9;3223:23;3213:33;;3293:2;3282:9;3278:18;3265:32;3255:42;;3347:2;3336:9;3332:18;3319:32;3360:28;3382:5;3360:28;:::i;:::-;3407:5;3397:15;;;3041:377;;;;;:::o;3423:382::-;3488:6;3496;3549:2;3537:9;3528:7;3524:23;3520:32;3517:52;;;3565:1;3562;3555:12;3517:52;3604:9;3591:23;3623:31;3648:5;3623:31;:::i;:::-;3673:5;-1:-1:-1;3730:2:1;3715:18;;3702:32;3743:30;3702:32;3743:30;:::i;:::-;3792:7;3782:17;;;3423:382;;;;;:::o;3810:316::-;3887:6;3895;3903;3956:2;3944:9;3935:7;3931:23;3927:32;3924:52;;;3972:1;3969;3962:12;3924:52;-1:-1:-1;;3995:23:1;;;4065:2;4050:18;;4037:32;;-1:-1:-1;4116:2:1;4101:18;;;4088:32;;3810:316;-1:-1:-1;3810:316:1:o;4131:388::-;4199:6;4207;4260:2;4248:9;4239:7;4235:23;4231:32;4228:52;;;4276:1;4273;4266:12;4228:52;4315:9;4302:23;4334:31;4359:5;4334:31;:::i;:::-;4384:5;-1:-1:-1;4441:2:1;4426:18;;4413:32;4454:33;4413:32;4454:33;:::i;4524:367::-;4587:8;4597:6;4651:3;4644:4;4636:6;4632:17;4628:27;4618:55;;4669:1;4666;4659:12;4618:55;-1:-1:-1;4692:20:1;;4735:18;4724:30;;4721:50;;;4767:1;4764;4757:12;4721:50;4804:4;4796:6;4792:17;4780:29;;4864:3;4857:4;4847:6;4844:1;4840:14;4832:6;4828:27;4824:38;4821:47;4818:67;;;4881:1;4878;4871:12;4818:67;4524:367;;;;;:::o;4896:566::-;4988:6;4996;5004;5057:2;5045:9;5036:7;5032:23;5028:32;5025:52;;;5073:1;5070;5063:12;5025:52;5113:9;5100:23;5146:18;5138:6;5135:30;5132:50;;;5178:1;5175;5168:12;5132:50;5217:70;5279:7;5270:6;5259:9;5255:22;5217:70;:::i;:::-;5306:8;;-1:-1:-1;5191:96:1;-1:-1:-1;;5391:2:1;5376:18;;5363:32;5404:28;5363:32;5404:28;:::i;5467:461::-;5520:3;5558:5;5552:12;5585:6;5580:3;5573:19;5611:4;5640:2;5635:3;5631:12;5624:19;;5677:2;5670:5;5666:14;5698:1;5708:195;5722:6;5719:1;5716:13;5708:195;;;5787:13;;-1:-1:-1;;;;;5783:39:1;5771:52;;5843:12;;;;5878:15;;;;5819:1;5737:9;5708:195;;;-1:-1:-1;5919:3:1;;5467:461;-1:-1:-1;;;;;5467:461:1:o;5933:261::-;6112:2;6101:9;6094:21;6075:4;6132:56;6184:2;6173:9;6169:18;6161:6;6132:56;:::i;6199:127::-;6260:10;6255:3;6251:20;6248:1;6241:31;6291:4;6288:1;6281:15;6315:4;6312:1;6305:15;6331:275;6402:2;6396:9;6467:2;6448:13;;-1:-1:-1;;6444:27:1;6432:40;;6502:18;6487:34;;6523:22;;;6484:62;6481:88;;;6549:18;;:::i;:::-;6585:2;6578:22;6331:275;;-1:-1:-1;6331:275:1:o;6611:183::-;6671:4;6704:18;6696:6;6693:30;6690:56;;;6726:18;;:::i;:::-;-1:-1:-1;6771:1:1;6767:14;6783:4;6763:25;;6611:183::o;6799:662::-;6853:5;6906:3;6899:4;6891:6;6887:17;6883:27;6873:55;;6924:1;6921;6914:12;6873:55;6960:6;6947:20;6986:4;7010:60;7026:43;7066:2;7026:43;:::i;:::-;7010:60;:::i;:::-;7104:15;;;7190:1;7186:10;;;;7174:23;;7170:32;;;7135:12;;;;7214:15;;;7211:35;;;7242:1;7239;7232:12;7211:35;7278:2;7270:6;7266:15;7290:142;7306:6;7301:3;7298:15;7290:142;;;7372:17;;7360:30;;7410:12;;;;7323;;7290:142;;;-1:-1:-1;7450:5:1;6799:662;-1:-1:-1;;;;;;6799:662:1:o;7466:1915::-;7665:6;7673;7681;7689;7697;7705;7713;7766:3;7754:9;7745:7;7741:23;7737:33;7734:53;;;7783:1;7780;7773:12;7734:53;7823:9;7810:23;7852:18;7893:2;7885:6;7882:14;7879:34;;;7909:1;7906;7899:12;7879:34;7947:6;7936:9;7932:22;7922:32;;7992:7;7985:4;7981:2;7977:13;7973:27;7963:55;;8014:1;8011;8004:12;7963:55;8050:2;8037:16;8072:4;8096:60;8112:43;8152:2;8112:43;:::i;8096:60::-;8190:15;;;8272:1;8268:10;;;;8260:19;;8256:28;;;8221:12;;;;8296:19;;;8293:39;;;8328:1;8325;8318:12;8293:39;8352:11;;;;8372:217;8388:6;8383:3;8380:15;8372:217;;;8468:3;8455:17;8485:31;8510:5;8485:31;:::i;:::-;8529:18;;8405:12;;;;8567;;;;8372:217;;;8608:5;-1:-1:-1;;8651:18:1;;8638:32;;-1:-1:-1;;8682:16:1;;;8679:36;;;8711:1;8708;8701:12;8679:36;8734:63;8789:7;8778:8;8767:9;8763:24;8734:63;:::i;:::-;8724:73;;8844:2;8833:9;8829:18;8816:32;8806:42;;8901:2;8890:9;8886:18;8873:32;8857:48;;8930:2;8920:8;8917:16;8914:36;;;8946:1;8943;8936:12;8914:36;8985:72;9049:7;9038:8;9027:9;9023:24;8985:72;:::i;:::-;9076:8;;-1:-1:-1;8959:98:1;-1:-1:-1;9164:3:1;9149:19;;9136:33;;-1:-1:-1;9181:16:1;;;9178:36;;;9210:1;9207;9200:12;9178:36;;9249:72;9313:7;9302:8;9291:9;9287:24;9249:72;:::i;:::-;7466:1915;;;;-1:-1:-1;7466:1915:1;;-1:-1:-1;7466:1915:1;;;;9223:98;;-1:-1:-1;;;7466:1915:1:o;9386:380::-;9465:1;9461:12;;;;9508;;;9529:61;;9583:4;9575:6;9571:17;9561:27;;9529:61;9636:2;9628:6;9625:14;9605:18;9602:38;9599:161;;9682:10;9677:3;9673:20;9670:1;9663:31;9717:4;9714:1;9707:15;9745:4;9742:1;9735:15;9599:161;;9386:380;;;:::o;9771:356::-;9973:2;9955:21;;;9992:18;;;9985:30;10051:34;10046:2;10031:18;;10024:62;10118:2;10103:18;;9771:356::o;10903:127::-;10964:10;10959:3;10955:20;10952:1;10945:31;10995:4;10992:1;10985:15;11019:4;11016:1;11009:15;11035:168;11108:9;;;11139;;11156:15;;;11150:22;;11136:37;11126:71;;11177:18;;:::i;11208:422::-;11297:1;11340:5;11297:1;11354:270;11375:7;11365:8;11362:21;11354:270;;;11434:4;11430:1;11426:6;11422:17;11416:4;11413:27;11410:53;;;11443:18;;:::i;:::-;11493:7;11483:8;11479:22;11476:55;;;11513:16;;;;11476:55;11592:22;;;;11552:15;;;;11354:270;;;11358:3;11208:422;;;;;:::o;11635:806::-;11684:5;11714:8;11704:80;;-1:-1:-1;11755:1:1;11769:5;;11704:80;11803:4;11793:76;;-1:-1:-1;11840:1:1;11854:5;;11793:76;11885:4;11903:1;11898:59;;;;11971:1;11966:130;;;;11878:218;;11898:59;11928:1;11919:10;;11942:5;;;11966:130;12003:3;11993:8;11990:17;11987:43;;;12010:18;;:::i;:::-;-1:-1:-1;;12066:1:1;12052:16;;12081:5;;11878:218;;12180:2;12170:8;12167:16;12161:3;12155:4;12152:13;12148:36;12142:2;12132:8;12129:16;12124:2;12118:4;12115:12;12111:35;12108:77;12105:159;;;-1:-1:-1;12217:19:1;;;12249:5;;12105:159;12296:34;12321:8;12315:4;12296:34;:::i;:::-;12366:6;12362:1;12358:6;12354:19;12345:7;12342:32;12339:58;;;12377:18;;:::i;:::-;12415:20;;11635:806;-1:-1:-1;;;11635:806:1:o;12446:140::-;12504:5;12533:47;12574:4;12564:8;12560:19;12554:4;12533:47;:::i;12591:217::-;12631:1;12657;12647:132;;12701:10;12696:3;12692:20;12689:1;12682:31;12736:4;12733:1;12726:15;12764:4;12761:1;12754:15;12647:132;-1:-1:-1;12793:9:1;;12591:217::o;14042:125::-;14107:9;;;14128:10;;;14125:36;;;14141:18;;:::i;14605:330::-;14807:2;14789:21;;;14846:1;14826:18;;;14819:29;-1:-1:-1;;;14879:2:1;14864:18;;14857:37;14926:2;14911:18;;14605:330::o;15345:251::-;15415:6;15468:2;15456:9;15447:7;15443:23;15439:32;15436:52;;;15484:1;15481;15474:12;15436:52;15516:9;15510:16;15535:31;15560:5;15535:31;:::i;15601:127::-;15662:10;15657:3;15653:20;15650:1;15643:31;15693:4;15690:1;15683:15;15717:4;15714:1;15707:15;15733:332;15940:6;15929:9;15922:25;15983:2;15978;15967:9;15963:18;15956:30;15903:4;16003:56;16055:2;16044:9;16040:18;16032:6;16003:56;:::i;:::-;15995:64;15733:332;-1:-1:-1;;;;15733:332:1:o;16070:881::-;16165:6;16196:2;16239;16227:9;16218:7;16214:23;16210:32;16207:52;;;16255:1;16252;16245:12;16207:52;16288:9;16282:16;16321:18;16313:6;16310:30;16307:50;;;16353:1;16350;16343:12;16307:50;16376:22;;16429:4;16421:13;;16417:27;-1:-1:-1;16407:55:1;;16458:1;16455;16448:12;16407:55;16487:2;16481:9;16510:60;16526:43;16566:2;16526:43;:::i;16510:60::-;16604:15;;;16686:1;16682:10;;;;16674:19;;16670:28;;;16635:12;;;;16710:19;;;16707:39;;;16742:1;16739;16732:12;16707:39;16766:11;;;;16786:135;16802:6;16797:3;16794:15;16786:135;;;16868:10;;16856:23;;16819:12;;;;16899;;;;16786:135;;;16940:5;16070:881;-1:-1:-1;;;;;;;16070:881:1:o;18552:184::-;18622:6;18675:2;18663:9;18654:7;18650:23;18646:32;18643:52;;;18691:1;18688;18681:12;18643:52;-1:-1:-1;18714:16:1;;18552:184;-1:-1:-1;18552:184:1:o;19020:245::-;19087:6;19140:2;19128:9;19119:7;19115:23;19111:32;19108:52;;;19156:1;19153;19146:12;19108:52;19188:9;19182:16;19207:28;19229:5;19207:28;:::i;19980:403::-;20182:2;20164:21;;;20221:2;20201:18;;;20194:30;20260:34;20255:2;20240:18;;20233:62;-1:-1:-1;;;20326:2:1;20311:18;;20304:37;20373:3;20358:19;;19980:403::o;20743:135::-;20782:3;20803:17;;;20800:43;;20823:18;;:::i;:::-;-1:-1:-1;20870:1:1;20859:13;;20743:135::o;24029:607::-;-1:-1:-1;;;;;24388:15:1;;;24370:34;;24435:2;24420:18;;24413:34;;;;24478:2;24463:18;;24456:34;;;;24521:2;24506:18;;24499:34;;;;24570:15;;;24564:3;24549:19;;24542:44;24350:3;24602:19;;24595:35;;;;24319:3;24304:19;;24029:607::o;24641:306::-;24729:6;24737;24745;24798:2;24786:9;24777:7;24773:23;24769:32;24766:52;;;24814:1;24811;24804:12;24766:52;24843:9;24837:16;24827:26;;24893:2;24882:9;24878:18;24872:25;24862:35;;24937:2;24926:9;24922:18;24916:25;24906:35;;24641:306;;;;;:::o;29148:128::-;29215:9;;;29236:11;;;29233:37;;;29250:18;;:::i;30235:245::-;30314:6;30322;30375:2;30363:9;30354:7;30350:23;30346:32;30343:52;;;30391:1;30388;30381:12;30343:52;-1:-1:-1;;30414:16:1;;30470:2;30455:18;;;30449:25;30414:16;;30449:25;;-1:-1:-1;30235:245:1:o;31293:401::-;31495:2;31477:21;;;31534:2;31514:18;;;31507:30;31573:34;31568:2;31553:18;;31546:62;-1:-1:-1;;;31639:2:1;31624:18;;31617:35;31684:3;31669:19;;31293:401::o;31699:399::-;31901:2;31883:21;;;31940:2;31920:18;;;31913:30;31979:34;31974:2;31959:18;;31952:62;-1:-1:-1;;;32045:2:1;32030:18;;32023:33;32088:3;32073:19;;31699:399::o;36841:510::-;37112:6;37101:9;37094:25;37155:3;37150:2;37139:9;37135:18;37128:31;37075:4;37176:57;37228:3;37217:9;37213:19;37205:6;37176:57;:::i;:::-;-1:-1:-1;;;;;37269:32:1;;;;37264:2;37249:18;;37242:60;-1:-1:-1;37333:2:1;37318:18;37311:34;37168:65;36841:510;-1:-1:-1;;36841:510:1:o;37356:582::-;37655:6;37644:9;37637:25;37698:6;37693:2;37682:9;37678:18;37671:34;37741:3;37736:2;37725:9;37721:18;37714:31;37618:4;37762:57;37814:3;37803:9;37799:19;37791:6;37762:57;:::i;:::-;-1:-1:-1;;;;;37855:32:1;;;;37850:2;37835:18;;37828:60;-1:-1:-1;37919:3:1;37904:19;37897:35;37754:65;37356:582;-1:-1:-1;;;37356:582:1:o

Swarm Source

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