ETH Price: $2,970.08 (-4.03%)
Gas: 1 Gwei

Token

PEPEGOLD (PEPE)
 

Overview

Max Total Supply

10,000,000,000 PEPE

Holders

480 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$157,244.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
110,000 PEPE

Value
$1.73 ( ~0.000582476051093082 Eth) [0.0011%]
0xbbf5252d7b1b95b179fc073c29c5d7ff2a35655a
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The memeable, community-driven token on Ethereum.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PEPEGOLD

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-13
*/

// SPDX-License-Identifier: MIT                                                                               
// The most memeable token on ethereum
//https://pepe.gold/
//https://t.me/PEPEGOLDERC20
/*                            .-----.
                            /7  .  (
                           /   .-.  \
                          /   /   \  \
                         / `  )   (   )
                        / `   )   ).  \
                      .'  _.   \_/  . |
     .--.           .' _.' )`.        |
    (    `---...._.'   `---.'_)    ..  \
     \            `----....___    `. \  |
      `.           _ ----- _   `._  )/  |
        `.       /"  \   /"  \`.  `._   |
          `.    ((O)` ) ((O)` ) `.   `._\
            `-- '`---'   `---' )  `.    `-.
               /                  ` \      `-.
             .'                      `.       `.
            /                     `  ` `.       `-.
     .--.   \ ===._____.======. `    `   `. .___.--`     .''''.
    ' .` `-. `.                )`. `   ` ` \          .' . '  8)
   (8  .  ` `-.`.               ( .  ` `  .`\      .'  '    ' /
    \  `. `    `-.               ) ` .   ` ` \  .'   ' .  '  /
     \ ` `.  ` . \`.    .--.     |  ` ) `   .``/   '  // .  /
      `.  ``. .   \ \   .-- `.  (  ` /_   ` . / ' .  '/   .'
        `. ` \  `  \ \  '-.   `-'  .'  `-.  `   .  .'/  .'
          \ `.`.  ` \ \    ) /`._.`       `.  ` .  .'  /
    LGB    |  `.`. . \ \  (.'               `.   .'  .'
        __/  .. \ \ ` ) \                     \.' .. \__
 .-._.-'     '"  ) .-'   `.                   (  '"     `-._.--.
(_________.-====' / .' /\_)`--..__________..-- `====-. _________)
                 (.'(.'
*/                     
pragma solidity 0.8.15;

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

contract PEPEGOLD is ERC20, Ownable {

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public communityAddress;
    address public devAddress;

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

    bool public tradingActive = false;
    bool public swapEnabled = false;

    uint256 public buyTotalFees;
    uint256 public buyCommunityFee;
    uint256 public buyLiquidityFee;
    uint256 public buyBurnFee;

    uint256 public sellTotalFees;
    uint256 public sellCommunityFee;
    uint256 public sellLiquidityFee;
    uint256 public sellBurnFee;

    uint256 public constant FEE_DIVISOR = 10000;

    uint256 public tokensForCommunity;
    uint256 public tokensForLiquidity;

    uint256 public lpWithdrawRequestTimestamp;
    uint256 public lpWithdrawRequestDuration = 30 days;
    bool public lpWithdrawRequestPending;
    uint256 public lpPercToWithDraw;

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 360000 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 1 seconds;
    uint256 public lastManualLpBurnTime;
    
    /******************/

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

    // 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 ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedCommunityAddress(address indexed newWallet);

    event UpdatedDevAddress(address indexed newWallet);

    event OwnerForcedSwapBack(uint256 timestamp);

    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 RequestedLPWithdraw();
    
    event WithdrewLPForMigration();

    event CanceledLpWithdrawRequest();

    constructor() ERC20("PEPEGOLD", "PEPE") 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 == 4){
            _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);
        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());
        _setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = 10 * 1e9 * (10 ** decimals());
        
        swapTokensAtAmount = totalSupply * 25 / 100000;

        buyCommunityFee = 100;
        buyLiquidityFee = 100;
        buyBurnFee = 50;
        buyTotalFees = buyCommunityFee + buyLiquidityFee + buyBurnFee;

        sellCommunityFee = 450;
        sellLiquidityFee = 500;
        sellBurnFee = 50;
        sellTotalFees = sellCommunityFee + sellLiquidityFee + sellBurnFee;

        communityAddress = address(msg.sender);
        devAddress = address(msg.sender);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(communityAddress), true);
        excludeFromFees(address(dexRouter), true);

        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}
    
    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        emit EnabledTrading();
    }

    // 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 airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 600, "Can only airdrop 600 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 < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            super._transfer(msg.sender, wallet, amount);
        }
    }

    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;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function updateSellFees(uint256 _communityFee, uint256 _liquidityFee, uint256 _burnFee) external onlyOwner {
        sellCommunityFee = _communityFee;
        sellLiquidityFee = _liquidityFee;
        sellBurnFee = _burnFee;
        sellTotalFees = sellCommunityFee + sellLiquidityFee + sellBurnFee;
        require(sellTotalFees <= 3 * FEE_DIVISOR / 100, "Must keep fees at 3% 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.");
        }

        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){
            // on sell
           if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / FEE_DIVISOR;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForCommunity += fees * sellCommunityFee / sellTotalFees;
                tokensToBurn = fees * sellBurnFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForCommunity += fees * buyCommunityFee / 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 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));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForCommunity;
        
        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 ethForCommunity = ethBalance * tokensForCommunity / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForCommunity;
            
        tokensForLiquidity = 0;
        tokensForCommunity = 0;
       
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

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

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require((_token != address(this) && _token != address(lpPair)) || !tradingActive, "Can't withdraw native tokens or LP while trading is active");
        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 onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setCommunityAddress(address _communityAddress) external onlyOwner {
        require(_communityAddress != address(0), "_communityAddress address cannot be 0");
        communityAddress = payable(_communityAddress);
        emit UpdatedCommunityAddress(_communityAddress);
    }

    // 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 setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        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 onlyOwner {
        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 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 onlyOwner {
        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 onlyOwner {
        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 onlyOwner {
        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":[],"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":"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":"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":"UpdatedCommunityAddress","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":[],"name":"WithdrewLPForMigration","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCommunityFee","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":"cancelLPWithdrawRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"communityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":[],"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":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"massExcludeFromFees","outputs":[],"stateMutability":"nonpayable","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":[],"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":[],"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":"sellCommunityFee","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":[{"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":"address","name":"_communityAddress","type":"address"}],"name":"setCommunityAddress","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":"tokensForCommunity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"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":[{"internalType":"uint256","name":"_communityFee","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":"_communityFee","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"}]

6000600b55600c805461ffff1916905562278d006018556019601b55601c805460ff1916905562057e40601d556001601f5560086080908152671411541151d3d31160c21b60a052610100604052600460c0908152635045504560e01b60e05260036200006d83826200084c565b5060046200007c82826200084c565b505050600062000091620004c360201b60201c565b600580546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620042cf833981519152908290a35033600046600103620000f65750737a250d5630b4cf539739df2c5dacb4c659f2488d620001d8565b466004036200011b5750737a250d5630b4cf539739df2c5dacb4c659f2488d620001d8565b466038036200014057507310ed43c718714eb63d5aa57b78b54704e256024e620001d8565b4660610362000165575073d99d1c33f9fc3444f8101754abc46c52416550d1620001d8565b4661a4b1036200018b5750731b02da8cb0d097eb8d57a175b88c7d8b47997506620001d8565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000232573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000258919062000918565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e1919062000918565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200032f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000355919062000918565b600780546001600160a01b0319166001600160a01b0392909216918217905562000381906001620004c7565b6000620003916012600a62000a5f565b620003a2906402540be40062000a70565b9050620186a0620003b582601962000a70565b620003c1919062000a92565b6008556064600e819055600f8190556032601081905590620003e4908062000ab5565b620003f0919062000ab5565b600d556101c260128190556101f46013819055603260148190559162000417919062000ab5565b62000423919062000ab5565b60115560098054336001600160a01b03199182168117909255600a80549091169091179055620004558360016200051b565b620004623060016200051b565b6200047161dead60016200051b565b6009546200048a906001600160a01b031660016200051b565b600654620004a3906001600160a01b031660016200051b565b620004af8382620005c5565b620004ba83620006aa565b50505062000ad0565b3390565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005665760405162461bcd60e51b81526020600482018190526024820152600080516020620042af8339815191526044820152606401620001cf565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200061d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001cf565b806002600082825462000631919062000ab5565b90915550506001600160a01b038216600090815260208190526040812080548392906200066090849062000ab5565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006f55760405162461bcd60e51b81526020600482018190526024820152600080516020620042af8339815191526044820152606401620001cf565b6001600160a01b0381166200075c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620001cf565b6005546040516001600160a01b03808416921690600080516020620042cf83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007d257607f821691505b602082108103620007f357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200084757600081815260208120601f850160051c81016020861015620008225750805b601f850160051c820191505b8181101562000843578281556001016200082e565b5050505b505050565b81516001600160401b03811115620008685762000868620007a7565b6200088081620008798454620007bd565b84620007f9565b602080601f831160018114620008b857600084156200089f5750858301515b600019600386901b1c1916600185901b17855562000843565b600085815260208120601f198616915b82811015620008e957888601518255948401946001909101908401620008c8565b5085821015620009085787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200092b57600080fd5b81516001600160a01b03811681146200094357600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620009a15781600019048211156200098557620009856200094a565b808516156200099357918102915b93841c939080029062000965565b509250929050565b600082620009ba5750600162000a59565b81620009c95750600062000a59565b8160018114620009e25760028114620009ed5762000a0d565b600191505062000a59565b60ff84111562000a015762000a016200094a565b50506001821b62000a59565b5060208310610133831016604e8410600b841016171562000a32575081810a62000a59565b62000a3e838362000960565b806000190482111562000a555762000a556200094a565b0290505b92915050565b60006200094360ff841683620009a9565b600081600019048311821515161562000a8d5762000a8d6200094a565b500290565b60008262000ab057634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000acb5762000acb6200094a565b500190565b6137cf8062000ae06000396000f3fe6080604052600436106103b15760003560e01c80639a7a23d6116101e7578063c17b5b8c1161010d578063ee44b44e116100a0578063f63743421161006f578063f637434214610a34578063f7ce447914610a4a578063fd361d0e14610a6a578063fe72b27a14610a8457600080fd5b8063ee44b44e146109d3578063f11a24d3146109e9578063f2fde38b146109ff578063f5648a4f14610a1f57600080fd5b8063dd62ed3e116100dc578063dd62ed3e1461094b578063e2f4560514610991578063e71dc3f5146109a7578063ee40166e146109bd57600080fd5b8063c17b5b8c146108e0578063c7c61e2c14610900578063d257b34f14610915578063d85ba0631461093557600080fd5b8063b53aee9711610185578063bd5fb92011610154578063bd5fb9201461086a578063befd2fac1461088a578063bf6146cd146108aa578063c0246668146108c057600080fd5b8063b53aee97146107f4578063b62496f51461080a578063b8fad1471461083a578063bbc0c7421461085057600080fd5b8063a457c2d7116101c1578063a457c2d714610788578063a4c82a00146107a8578063a9059cbb146107be578063adb873bd146107de57600080fd5b80639a7a23d61461073c5780639e93ad8e1461075c5780639ec22c0e1461077257600080fd5b8063452ed4f1116102d7578063763cef491161026a57806386e476dd1161023957806386e476dd146106d45780638a8c523c146106f45780638da5cb5b1461070957806395d89b411461072757600080fd5b8063763cef4914610669578063783102eb1461067e5780638095d564146106945780638366e79a146106b457600080fd5b806370a08231116102a657806370a08231146105ff578063712c29851461061f578063715018a614610634578063730c18881461064957600080fd5b8063452ed4f11461059557806351f205e4146105b55780636a486a8e146105ca5780636ddd1713146105e057600080fd5b80631a8145bb1161034f5780632e82f1a01161031e5780632e82f1a01461051f578063313ce5671461053957806339509351146105555780633ad10ef61461057557600080fd5b80631a8145bb146104b15780632307b441146104c757806323b872dd146104e95780632c3e486c1461050957600080fd5b8063095ea7b31161038b578063095ea7b31461044057806318160ddd14610470578063184c16c514610485578063199ffc721461049b57600080fd5b8063058054c9146103bd57806306fdde03146103e65780630758d9241461040857600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103d360175481565b6040519081526020015b60405180910390f35b3480156103f257600080fd5b506103fb610aa4565b6040516103dd9190613054565b34801561041457600080fd5b50600654610428906001600160a01b031681565b6040516001600160a01b0390911681526020016103dd565b34801561044c57600080fd5b5061046061045b3660046130c1565b610b36565b60405190151581526020016103dd565b34801561047c57600080fd5b506002546103d3565b34801561049157600080fd5b506103d3601f5481565b3480156104a757600080fd5b506103d3601b5481565b3480156104bd57600080fd5b506103d360165481565b3480156104d357600080fd5b506104e76104e23660046131c3565b610b4c565b005b3480156104f557600080fd5b50610460610504366004613285565b610cae565b34801561051557600080fd5b506103d3601d5481565b34801561052b57600080fd5b50601c546104609060ff1681565b34801561054557600080fd5b50604051601281526020016103dd565b34801561056157600080fd5b506104606105703660046130c1565b610d58565b34801561058157600080fd5b50600a54610428906001600160a01b031681565b3480156105a157600080fd5b50600754610428906001600160a01b031681565b3480156105c157600080fd5b506104e7610d94565b3480156105d657600080fd5b506103d360115481565b3480156105ec57600080fd5b50600c5461046090610100900460ff1681565b34801561060b57600080fd5b506103d361061a3660046132c6565b610e9d565b34801561062b57600080fd5b506103d3610eb8565b34801561064057600080fd5b506104e7610ee1565b34801561065557600080fd5b506104e76106643660046132f8565b610f55565b34801561067557600080fd5b506104e761107e565b34801561068a57600080fd5b506103d3601a5481565b3480156106a057600080fd5b506104e76106af366004613331565b611220565b3480156106c057600080fd5b506104606106cf36600461335d565b6112db565b3480156106e057600080fd5b50600954610428906001600160a01b031681565b34801561070057600080fd5b506104e7611533565b34801561071557600080fd5b506005546001600160a01b0316610428565b34801561073357600080fd5b506103fb6115ee565b34801561074857600080fd5b506104e7610757366004613396565b6115fd565b34801561076857600080fd5b506103d361271081565b34801561077e57600080fd5b506103d360205481565b34801561079457600080fd5b506104606107a33660046130c1565b6116f1565b3480156107b457600080fd5b506103d3601e5481565b3480156107ca57600080fd5b506104606107d93660046130c1565b61178a565b3480156107ea57600080fd5b506103d360145481565b34801561080057600080fd5b506103d360125481565b34801561081657600080fd5b506104606108253660046132c6565b60226020526000908152604090205460ff1681565b34801561084657600080fd5b506103d3600e5481565b34801561085c57600080fd5b50600c546104609060ff1681565b34801561087657600080fd5b506104e76108853660046133c4565b611797565b34801561089657600080fd5b506104e76108a536600461343f565b6118a3565b3480156108b657600080fd5b506103d360155481565b3480156108cc57600080fd5b506104e76108db366004613396565b6119d9565b3480156108ec57600080fd5b506104e76108fb366004613331565b611a62565b34801561090c57600080fd5b506104e7611b1d565b34801561092157600080fd5b506104e761093036600461343f565b611b86565b34801561094157600080fd5b506103d3600d5481565b34801561095757600080fd5b506103d361096636600461335d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561099d57600080fd5b506103d360085481565b3480156109b357600080fd5b506103d360105481565b3480156109c957600080fd5b506103d3600b5481565b3480156109df57600080fd5b506103d360185481565b3480156109f557600080fd5b506103d3600f5481565b348015610a0b57600080fd5b506104e7610a1a3660046132c6565b611cd1565b348015610a2b57600080fd5b506104e7611dbc565b348015610a4057600080fd5b506103d360135481565b348015610a5657600080fd5b506104e7610a653660046132c6565b611e28565b348015610a7657600080fd5b506019546104609060ff1681565b348015610a9057600080fd5b506104e7610a9f36600461343f565b611f00565b606060038054610ab390613458565b80601f0160208091040260200160405190810160405280929190818152602001828054610adf90613458565b8015610b2c5780601f10610b0157610100808354040283529160200191610b2c565b820191906000526020600020905b815481529060010190602001808311610b0f57829003601f168201915b5050505050905090565b6000610b433384846121fa565b50600192915050565b6005546001600160a01b03163314610b7f5760405162461bcd60e51b8152600401610b7690613492565b60405180910390fd5b8051825114610bd05760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610b76565b610258825110610c415760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610b76565b60005b8251811015610ca9576000838281518110610c6157610c616134c7565b602002602001015190506000838381518110610c7f57610c7f6134c7565b60200260200101519050610c9433838361231e565b50508080610ca1906134f3565b915050610c44565b505050565b6000610cbb848484612473565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d405760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b76565b610d4d85338584036121fa565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b43918590610d8f90869061350c565b6121fa565b6005546001600160a01b03163314610dbe5760405162461bcd60e51b8152600401610b7690613492565b600854610dca30610e9d565b1015610e40576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610b76565b6007805460ff60a01b1916600160a01b179055610e5b612938565b6007805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6001600160a01b031660009081526020819052604090205490565b60195460009060ff1615610edb57601854601754610ed6919061350c565b905090565b50600090565b6005546001600160a01b03163314610f0b5760405162461bcd60e51b8152600401610b7690613492565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610f7f5760405162461bcd60e51b8152600401610b7690613492565b610258831015610fed5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610b76565b6103e88211158015610ffd575060015b6110625760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610b76565b601d92909255601b55601c805460ff1916911515919091179055565b6005546001600160a01b031633146110a85760405162461bcd60e51b8152600401610b7690613492565b6110b0610eb8565b42101580156110c6575060006110c4610eb8565b115b61110b5760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b6044820152606401610b76565b600060178190556019805460ff19169055601a546007546040516370a0823160e01b8152306004820152606492916001600160a01b0316906370a0823190602401602060405180830381865afa158015611169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118d9190613524565b611197919061353d565b6111a1919061355c565b6000601a5560075460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156111f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121c919061357e565b5050565b6005546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610b7690613492565b600e839055600f829055601081905580611264838561350c565b61126e919061350c565b600d556064611280612710600361353d565b61128a919061355c565b600d541115610ca95760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203325206f72206c657373000000006044820152606401610b76565b6005546000906001600160a01b031633146113085760405162461bcd60e51b8152600401610b7690613492565b6001600160a01b03831661135e5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b76565b6001600160a01b038316301480159061138557506007546001600160a01b03848116911614155b806113935750600c5460ff16155b6114055760405162461bcd60e51b815260206004820152603a60248201527f43616e2774207769746864726177206e617469766520746f6b656e73206f722060448201527f4c50207768696c652074726164696e67206973206163746976650000000000006064820152608401610b76565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561144c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114709190613524565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156114c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e7919061357e565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461155d5760405162461bcd60e51b8152600401610b7690613492565b600c5460ff16156115b05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610b76565b600c805461ffff191661010117905543600b556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610ab390613458565b6005546001600160a01b031633146116275760405162461bcd60e51b8152600401610b7690613492565b6007546001600160a01b03908116908316036116ab5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b76565b6116b58282612a9a565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156117735760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b76565b61178033858584036121fa565b5060019392505050565b6000610b43338484612473565b6005546001600160a01b031633146117c15760405162461bcd60e51b8152600401610b7690613492565b60005b8281101561189d5781602160008686858181106117e3576117e36134c7565b90506020020160208101906117f891906132c6565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838382818110611832576118326134c7565b905060200201602081019061184791906132c6565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051611883911515815260200190565b60405180910390a280611895816134f3565b9150506117c4565b50505050565b6005546001600160a01b031633146118cd5760405162461bcd60e51b8152600401610b7690613492565b60195460ff161561193a5760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b6064820152608401610b76565b6064811115801561194b5750600081115b6119975760405162461bcd60e51b815260206004820152601a60248201527f4e65656420746f20736574206265747765656e20312d313030250000000000006044820152606401610b76565b426017556019805460ff19166001179055601a8190556040517fd99a77b2f3951cd076e75814e44db497e6abc203dd251329da0b62c288f9f48b90600090a150565b6005546001600160a01b03163314611a035760405162461bcd60e51b8152600401610b7690613492565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611a8c5760405162461bcd60e51b8152600401610b7690613492565b60128390556013829055601481905580611aa6838561350c565b611ab0919061350c565b6011556064611ac2612710600361353d565b611acc919061355c565b6011541115610ca95760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203325206f72206c657373000000006044820152606401610b76565b6005546001600160a01b03163314611b475760405162461bcd60e51b8152600401610b7690613492565b6019805460ff191690556000601a81905560178190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b6005546001600160a01b03163314611bb05760405162461bcd60e51b8152600401610b7690613492565b620186a0611bbd60025490565b611bc890600161353d565b611bd2919061355c565b811015611c3f5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b76565b6103e8611c4b60025490565b611c5690600161353d565b611c60919061355c565b811115611ccc5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610b76565b600855565b6005546001600160a01b03163314611cfb5760405162461bcd60e51b8152600401610b7690613492565b6001600160a01b038116611d605760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b76565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611de65760405162461bcd60e51b8152600401610b7690613492565b604051600090339047908381818185875af1925050503d806000811461189d576040519150601f19603f3d011682016040523d82523d6000602084013e61189d565b6005546001600160a01b03163314611e525760405162461bcd60e51b8152600401610b7690613492565b6001600160a01b038116611eb65760405162461bcd60e51b815260206004820152602560248201527f5f636f6d6d756e6974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610b76565b600980546001600160a01b0319166001600160a01b0383169081179091556040517fe7f4d7e428b365576306cf2023fd3729dbbe89131a6e105179b7971fc561f49090600090a250565b6005546001600160a01b03163314611f2a5760405162461bcd60e51b8152600401610b7690613492565b6107d0811115611f9a5760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20323025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610b76565b601f54611fa7904261359b565b6020541115611fe85760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610b76565b426020556007546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612035573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120599190613524565b9050600061206630610e9d565b90506000612710612077858561353d565b612081919061355c565b60075460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af11580156120db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ff919061357e565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec9061213a90309086906001908190849042906004016135b2565b60408051808303816000875af1158015612158573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217c91906135ed565b505060008361218a30610e9d565b612194919061359b565b905080156121a9576121a93061dead8361231e565b60006121b5834761359b565b905080156121c6576121c681612aee565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b03831661225c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b76565b6001600160a01b0382166122bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b76565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123445760405162461bcd60e51b8152600401610b7690613611565b6001600160a01b03821661236a5760405162461bcd60e51b8152600401610b7690613656565b6001600160a01b038316600090815260208190526040902054818110156123e25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b76565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061241990849061350c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161246591815260200190565b60405180910390a350505050565b6001600160a01b0383166124995760405162461bcd60e51b8152600401610b7690613611565b6001600160a01b0382166124bf5760405162461bcd60e51b8152600401610b7690613656565b6000811161250f5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b76565b600c5460ff1661259d576001600160a01b03831660009081526021602052604090205460ff168061255857506001600160a01b03821660009081526021602052604090205460ff165b61259d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b76565b60006125a830610e9d565b600854909150811080159081906125c65750600c54610100900460ff165b80156125dc5750600754600160a01b900460ff16155b801561260157506001600160a01b03851660009081526022602052604090205460ff16155b801561262657506001600160a01b03851660009081526021602052604090205460ff16155b801561264b57506001600160a01b03841660009081526021602052604090205460ff16155b15612679576007805460ff60a01b1916600160a01b17905561266b612938565b6007805460ff60a01b191690555b600754600160a01b900460ff161580156126ab57506001600160a01b03841660009081526022602052604090205460ff165b80156126b95750601c5460ff165b80156126d45750601d54601e546126d0919061350c565b4210155b80156126f957506001600160a01b03851660009081526021602052604090205460ff16155b1561270657612706612c41565b6001600160a01b03851660009081526021602052604090205460019060ff168061274857506001600160a01b03851660009081526021602052604090205460ff165b15612751575060005b6000808215612923576001600160a01b03871660009081526022602052604090205460ff16801561278457506000601154115b15612828576127106011548761279a919061353d565b6127a4919061355c565b9150601154601354836127b7919061353d565b6127c1919061355c565b601660008282546127d2919061350c565b90915550506011546012546127e7908461353d565b6127f1919061355c565b60156000828254612802919061350c565b9091555050601154601454612817908461353d565b612821919061355c565b90506128f2565b6001600160a01b03881660009081526022602052604090205460ff16801561285257506000600d54115b156128f257612710600d5487612868919061353d565b612872919061355c565b9150600d54600f5483612885919061353d565b61288f919061355c565b601660008282546128a0919061350c565b9091555050600d54600e546128b5908461353d565b6128bf919061355c565b601560008282546128d0919061350c565b9091555050600d546010546128e5908461353d565b6128ef919061355c565b90505b81156129165761290388308461231e565b8015612916576129163061dead8361231e565b612920828761359b565b95505b61292e88888861231e565b5050505050505050565b600061294330610e9d565b90506000601554601654612957919061350c565b9050811580612964575080155b1561296d575050565b60085461297b90600a61353d565b8211156129935760085461299090600a61353d565b91505b600080600283601654866129a7919061353d565b6129b1919061355c565b6129bb919061355c565b90506129cf6129ca828661359b565b612e5b565b601654479081906000906129e59060029061355c565b6129ef908761359b565b6015546129fc908561353d565b612a06919061355c565b9050612a12818361359b565b6000601681905560155591508315801590612a2d5750600082115b15612a3c57612a3c8483612fb5565b6009546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612a89576040519150601f19603f3d011682016040523d82523d6000602084013e612a8e565b606091505b50505050505050505050565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b7c9190613699565b81600081518110612b8f57612b8f6134c7565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612bc357612bc36134c7565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de95908490612c0b90600090869061dead9042906004016136fa565b6000604051808303818588803b158015612c2457600080fd5b505af1158015612c38573d6000803e3d6000fd5b50505050505050565b42601e8190556020556007546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb79190613524565b90506000612cc430610e9d565b90506000612710601b5484612cd9919061353d565b612ce3919061355c565b60075460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015612d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d61919061357e565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec90612d9c90309086906001908190849042906004016135b2565b60408051808303816000875af1158015612dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dde91906135ed565b5050600083612dec30610e9d565b612df6919061359b565b90508015612e0b57612e0b3061dead8361231e565b6000612e17834761359b565b90508015612e2857612e2881612aee565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e9057612e906134c7565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f0d9190613699565b81600181518110612f2057612f206134c7565b6001600160a01b039283166020918202929092010152600654612f4691309116846121fa565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f7f90859060009086903090429060040161372f565b600060405180830381600087803b158015612f9957600080fd5b505af1158015612fad573d6000803e3d6000fd5b505050505050565b600654612fcd9030906001600160a01b0316846121fa565b60065460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061300a90309087906000908190849042906004016135b2565b60606040518083038185885af1158015613028573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061304d919061376b565b5050505050565b600060208083528351808285015260005b8181101561308157858101830151858201604001528201613065565b81811115613093576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146130be57600080fd5b50565b600080604083850312156130d457600080fd5b82356130df816130a9565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561312c5761312c6130ed565b604052919050565b600067ffffffffffffffff82111561314e5761314e6130ed565b5060051b60200190565b600082601f83011261316957600080fd5b8135602061317e61317983613134565b613103565b82815260059290921b8401810191818101908684111561319d57600080fd5b8286015b848110156131b857803583529183019183016131a1565b509695505050505050565b600080604083850312156131d657600080fd5b823567ffffffffffffffff808211156131ee57600080fd5b818501915085601f83011261320257600080fd5b8135602061321261317983613134565b82815260059290921b8401810191818101908984111561323157600080fd5b948201945b83861015613258578535613249816130a9565b82529482019490820190613236565b9650508601359250508082111561326e57600080fd5b5061327b85828601613158565b9150509250929050565b60008060006060848603121561329a57600080fd5b83356132a5816130a9565b925060208401356132b5816130a9565b929592945050506040919091013590565b6000602082840312156132d857600080fd5b81356132e3816130a9565b9392505050565b80151581146130be57600080fd5b60008060006060848603121561330d57600080fd5b83359250602084013591506040840135613326816132ea565b809150509250925092565b60008060006060848603121561334657600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561337057600080fd5b823561337b816130a9565b9150602083013561338b816130a9565b809150509250929050565b600080604083850312156133a957600080fd5b82356133b4816130a9565b9150602083013561338b816132ea565b6000806000604084860312156133d957600080fd5b833567ffffffffffffffff808211156133f157600080fd5b818601915086601f83011261340557600080fd5b81358181111561341457600080fd5b8760208260051b850101111561342957600080fd5b60209283019550935050840135613326816132ea565b60006020828403121561345157600080fd5b5035919050565b600181811c9082168061346c57607f821691505b60208210810361348c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613505576135056134dd565b5060010190565b6000821982111561351f5761351f6134dd565b500190565b60006020828403121561353657600080fd5b5051919050565b6000816000190483118215151615613557576135576134dd565b500290565b60008261357957634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561359057600080fd5b81516132e3816132ea565b6000828210156135ad576135ad6134dd565b500390565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806040838503121561360057600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000602082840312156136ab57600080fd5b81516132e3816130a9565b600081518084526020808501945080840160005b838110156136ef5781516001600160a01b0316875295820195908201906001016136ca565b509495945050505050565b84815260806020820152600061371360808301866136b6565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061374e60a08301866136b6565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561378057600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220afcc6e131e24d856b2d0a4b7e920d4676e856f0362d0e28f1d0f9619989fceee64736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103b15760003560e01c80639a7a23d6116101e7578063c17b5b8c1161010d578063ee44b44e116100a0578063f63743421161006f578063f637434214610a34578063f7ce447914610a4a578063fd361d0e14610a6a578063fe72b27a14610a8457600080fd5b8063ee44b44e146109d3578063f11a24d3146109e9578063f2fde38b146109ff578063f5648a4f14610a1f57600080fd5b8063dd62ed3e116100dc578063dd62ed3e1461094b578063e2f4560514610991578063e71dc3f5146109a7578063ee40166e146109bd57600080fd5b8063c17b5b8c146108e0578063c7c61e2c14610900578063d257b34f14610915578063d85ba0631461093557600080fd5b8063b53aee9711610185578063bd5fb92011610154578063bd5fb9201461086a578063befd2fac1461088a578063bf6146cd146108aa578063c0246668146108c057600080fd5b8063b53aee97146107f4578063b62496f51461080a578063b8fad1471461083a578063bbc0c7421461085057600080fd5b8063a457c2d7116101c1578063a457c2d714610788578063a4c82a00146107a8578063a9059cbb146107be578063adb873bd146107de57600080fd5b80639a7a23d61461073c5780639e93ad8e1461075c5780639ec22c0e1461077257600080fd5b8063452ed4f1116102d7578063763cef491161026a57806386e476dd1161023957806386e476dd146106d45780638a8c523c146106f45780638da5cb5b1461070957806395d89b411461072757600080fd5b8063763cef4914610669578063783102eb1461067e5780638095d564146106945780638366e79a146106b457600080fd5b806370a08231116102a657806370a08231146105ff578063712c29851461061f578063715018a614610634578063730c18881461064957600080fd5b8063452ed4f11461059557806351f205e4146105b55780636a486a8e146105ca5780636ddd1713146105e057600080fd5b80631a8145bb1161034f5780632e82f1a01161031e5780632e82f1a01461051f578063313ce5671461053957806339509351146105555780633ad10ef61461057557600080fd5b80631a8145bb146104b15780632307b441146104c757806323b872dd146104e95780632c3e486c1461050957600080fd5b8063095ea7b31161038b578063095ea7b31461044057806318160ddd14610470578063184c16c514610485578063199ffc721461049b57600080fd5b8063058054c9146103bd57806306fdde03146103e65780630758d9241461040857600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103d360175481565b6040519081526020015b60405180910390f35b3480156103f257600080fd5b506103fb610aa4565b6040516103dd9190613054565b34801561041457600080fd5b50600654610428906001600160a01b031681565b6040516001600160a01b0390911681526020016103dd565b34801561044c57600080fd5b5061046061045b3660046130c1565b610b36565b60405190151581526020016103dd565b34801561047c57600080fd5b506002546103d3565b34801561049157600080fd5b506103d3601f5481565b3480156104a757600080fd5b506103d3601b5481565b3480156104bd57600080fd5b506103d360165481565b3480156104d357600080fd5b506104e76104e23660046131c3565b610b4c565b005b3480156104f557600080fd5b50610460610504366004613285565b610cae565b34801561051557600080fd5b506103d3601d5481565b34801561052b57600080fd5b50601c546104609060ff1681565b34801561054557600080fd5b50604051601281526020016103dd565b34801561056157600080fd5b506104606105703660046130c1565b610d58565b34801561058157600080fd5b50600a54610428906001600160a01b031681565b3480156105a157600080fd5b50600754610428906001600160a01b031681565b3480156105c157600080fd5b506104e7610d94565b3480156105d657600080fd5b506103d360115481565b3480156105ec57600080fd5b50600c5461046090610100900460ff1681565b34801561060b57600080fd5b506103d361061a3660046132c6565b610e9d565b34801561062b57600080fd5b506103d3610eb8565b34801561064057600080fd5b506104e7610ee1565b34801561065557600080fd5b506104e76106643660046132f8565b610f55565b34801561067557600080fd5b506104e761107e565b34801561068a57600080fd5b506103d3601a5481565b3480156106a057600080fd5b506104e76106af366004613331565b611220565b3480156106c057600080fd5b506104606106cf36600461335d565b6112db565b3480156106e057600080fd5b50600954610428906001600160a01b031681565b34801561070057600080fd5b506104e7611533565b34801561071557600080fd5b506005546001600160a01b0316610428565b34801561073357600080fd5b506103fb6115ee565b34801561074857600080fd5b506104e7610757366004613396565b6115fd565b34801561076857600080fd5b506103d361271081565b34801561077e57600080fd5b506103d360205481565b34801561079457600080fd5b506104606107a33660046130c1565b6116f1565b3480156107b457600080fd5b506103d3601e5481565b3480156107ca57600080fd5b506104606107d93660046130c1565b61178a565b3480156107ea57600080fd5b506103d360145481565b34801561080057600080fd5b506103d360125481565b34801561081657600080fd5b506104606108253660046132c6565b60226020526000908152604090205460ff1681565b34801561084657600080fd5b506103d3600e5481565b34801561085c57600080fd5b50600c546104609060ff1681565b34801561087657600080fd5b506104e76108853660046133c4565b611797565b34801561089657600080fd5b506104e76108a536600461343f565b6118a3565b3480156108b657600080fd5b506103d360155481565b3480156108cc57600080fd5b506104e76108db366004613396565b6119d9565b3480156108ec57600080fd5b506104e76108fb366004613331565b611a62565b34801561090c57600080fd5b506104e7611b1d565b34801561092157600080fd5b506104e761093036600461343f565b611b86565b34801561094157600080fd5b506103d3600d5481565b34801561095757600080fd5b506103d361096636600461335d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561099d57600080fd5b506103d360085481565b3480156109b357600080fd5b506103d360105481565b3480156109c957600080fd5b506103d3600b5481565b3480156109df57600080fd5b506103d360185481565b3480156109f557600080fd5b506103d3600f5481565b348015610a0b57600080fd5b506104e7610a1a3660046132c6565b611cd1565b348015610a2b57600080fd5b506104e7611dbc565b348015610a4057600080fd5b506103d360135481565b348015610a5657600080fd5b506104e7610a653660046132c6565b611e28565b348015610a7657600080fd5b506019546104609060ff1681565b348015610a9057600080fd5b506104e7610a9f36600461343f565b611f00565b606060038054610ab390613458565b80601f0160208091040260200160405190810160405280929190818152602001828054610adf90613458565b8015610b2c5780601f10610b0157610100808354040283529160200191610b2c565b820191906000526020600020905b815481529060010190602001808311610b0f57829003601f168201915b5050505050905090565b6000610b433384846121fa565b50600192915050565b6005546001600160a01b03163314610b7f5760405162461bcd60e51b8152600401610b7690613492565b60405180910390fd5b8051825114610bd05760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610b76565b610258825110610c415760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610b76565b60005b8251811015610ca9576000838281518110610c6157610c616134c7565b602002602001015190506000838381518110610c7f57610c7f6134c7565b60200260200101519050610c9433838361231e565b50508080610ca1906134f3565b915050610c44565b505050565b6000610cbb848484612473565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d405760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b76565b610d4d85338584036121fa565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b43918590610d8f90869061350c565b6121fa565b6005546001600160a01b03163314610dbe5760405162461bcd60e51b8152600401610b7690613492565b600854610dca30610e9d565b1015610e40576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610b76565b6007805460ff60a01b1916600160a01b179055610e5b612938565b6007805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6001600160a01b031660009081526020819052604090205490565b60195460009060ff1615610edb57601854601754610ed6919061350c565b905090565b50600090565b6005546001600160a01b03163314610f0b5760405162461bcd60e51b8152600401610b7690613492565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610f7f5760405162461bcd60e51b8152600401610b7690613492565b610258831015610fed5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610b76565b6103e88211158015610ffd575060015b6110625760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610b76565b601d92909255601b55601c805460ff1916911515919091179055565b6005546001600160a01b031633146110a85760405162461bcd60e51b8152600401610b7690613492565b6110b0610eb8565b42101580156110c6575060006110c4610eb8565b115b61110b5760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b6044820152606401610b76565b600060178190556019805460ff19169055601a546007546040516370a0823160e01b8152306004820152606492916001600160a01b0316906370a0823190602401602060405180830381865afa158015611169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118d9190613524565b611197919061353d565b6111a1919061355c565b6000601a5560075460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156111f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121c919061357e565b5050565b6005546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610b7690613492565b600e839055600f829055601081905580611264838561350c565b61126e919061350c565b600d556064611280612710600361353d565b61128a919061355c565b600d541115610ca95760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203325206f72206c657373000000006044820152606401610b76565b6005546000906001600160a01b031633146113085760405162461bcd60e51b8152600401610b7690613492565b6001600160a01b03831661135e5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b76565b6001600160a01b038316301480159061138557506007546001600160a01b03848116911614155b806113935750600c5460ff16155b6114055760405162461bcd60e51b815260206004820152603a60248201527f43616e2774207769746864726177206e617469766520746f6b656e73206f722060448201527f4c50207768696c652074726164696e67206973206163746976650000000000006064820152608401610b76565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561144c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114709190613524565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156114c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e7919061357e565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461155d5760405162461bcd60e51b8152600401610b7690613492565b600c5460ff16156115b05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610b76565b600c805461ffff191661010117905543600b556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610ab390613458565b6005546001600160a01b031633146116275760405162461bcd60e51b8152600401610b7690613492565b6007546001600160a01b03908116908316036116ab5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b76565b6116b58282612a9a565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156117735760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b76565b61178033858584036121fa565b5060019392505050565b6000610b43338484612473565b6005546001600160a01b031633146117c15760405162461bcd60e51b8152600401610b7690613492565b60005b8281101561189d5781602160008686858181106117e3576117e36134c7565b90506020020160208101906117f891906132c6565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838382818110611832576118326134c7565b905060200201602081019061184791906132c6565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051611883911515815260200190565b60405180910390a280611895816134f3565b9150506117c4565b50505050565b6005546001600160a01b031633146118cd5760405162461bcd60e51b8152600401610b7690613492565b60195460ff161561193a5760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b6064820152608401610b76565b6064811115801561194b5750600081115b6119975760405162461bcd60e51b815260206004820152601a60248201527f4e65656420746f20736574206265747765656e20312d313030250000000000006044820152606401610b76565b426017556019805460ff19166001179055601a8190556040517fd99a77b2f3951cd076e75814e44db497e6abc203dd251329da0b62c288f9f48b90600090a150565b6005546001600160a01b03163314611a035760405162461bcd60e51b8152600401610b7690613492565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611a8c5760405162461bcd60e51b8152600401610b7690613492565b60128390556013829055601481905580611aa6838561350c565b611ab0919061350c565b6011556064611ac2612710600361353d565b611acc919061355c565b6011541115610ca95760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203325206f72206c657373000000006044820152606401610b76565b6005546001600160a01b03163314611b475760405162461bcd60e51b8152600401610b7690613492565b6019805460ff191690556000601a81905560178190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b6005546001600160a01b03163314611bb05760405162461bcd60e51b8152600401610b7690613492565b620186a0611bbd60025490565b611bc890600161353d565b611bd2919061355c565b811015611c3f5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b76565b6103e8611c4b60025490565b611c5690600161353d565b611c60919061355c565b811115611ccc5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610b76565b600855565b6005546001600160a01b03163314611cfb5760405162461bcd60e51b8152600401610b7690613492565b6001600160a01b038116611d605760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b76565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611de65760405162461bcd60e51b8152600401610b7690613492565b604051600090339047908381818185875af1925050503d806000811461189d576040519150601f19603f3d011682016040523d82523d6000602084013e61189d565b6005546001600160a01b03163314611e525760405162461bcd60e51b8152600401610b7690613492565b6001600160a01b038116611eb65760405162461bcd60e51b815260206004820152602560248201527f5f636f6d6d756e6974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610b76565b600980546001600160a01b0319166001600160a01b0383169081179091556040517fe7f4d7e428b365576306cf2023fd3729dbbe89131a6e105179b7971fc561f49090600090a250565b6005546001600160a01b03163314611f2a5760405162461bcd60e51b8152600401610b7690613492565b6107d0811115611f9a5760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20323025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610b76565b601f54611fa7904261359b565b6020541115611fe85760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610b76565b426020556007546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612035573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120599190613524565b9050600061206630610e9d565b90506000612710612077858561353d565b612081919061355c565b60075460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af11580156120db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ff919061357e565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec9061213a90309086906001908190849042906004016135b2565b60408051808303816000875af1158015612158573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217c91906135ed565b505060008361218a30610e9d565b612194919061359b565b905080156121a9576121a93061dead8361231e565b60006121b5834761359b565b905080156121c6576121c681612aee565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b03831661225c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b76565b6001600160a01b0382166122bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b76565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123445760405162461bcd60e51b8152600401610b7690613611565b6001600160a01b03821661236a5760405162461bcd60e51b8152600401610b7690613656565b6001600160a01b038316600090815260208190526040902054818110156123e25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b76565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061241990849061350c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161246591815260200190565b60405180910390a350505050565b6001600160a01b0383166124995760405162461bcd60e51b8152600401610b7690613611565b6001600160a01b0382166124bf5760405162461bcd60e51b8152600401610b7690613656565b6000811161250f5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b76565b600c5460ff1661259d576001600160a01b03831660009081526021602052604090205460ff168061255857506001600160a01b03821660009081526021602052604090205460ff165b61259d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b76565b60006125a830610e9d565b600854909150811080159081906125c65750600c54610100900460ff165b80156125dc5750600754600160a01b900460ff16155b801561260157506001600160a01b03851660009081526022602052604090205460ff16155b801561262657506001600160a01b03851660009081526021602052604090205460ff16155b801561264b57506001600160a01b03841660009081526021602052604090205460ff16155b15612679576007805460ff60a01b1916600160a01b17905561266b612938565b6007805460ff60a01b191690555b600754600160a01b900460ff161580156126ab57506001600160a01b03841660009081526022602052604090205460ff165b80156126b95750601c5460ff165b80156126d45750601d54601e546126d0919061350c565b4210155b80156126f957506001600160a01b03851660009081526021602052604090205460ff16155b1561270657612706612c41565b6001600160a01b03851660009081526021602052604090205460019060ff168061274857506001600160a01b03851660009081526021602052604090205460ff165b15612751575060005b6000808215612923576001600160a01b03871660009081526022602052604090205460ff16801561278457506000601154115b15612828576127106011548761279a919061353d565b6127a4919061355c565b9150601154601354836127b7919061353d565b6127c1919061355c565b601660008282546127d2919061350c565b90915550506011546012546127e7908461353d565b6127f1919061355c565b60156000828254612802919061350c565b9091555050601154601454612817908461353d565b612821919061355c565b90506128f2565b6001600160a01b03881660009081526022602052604090205460ff16801561285257506000600d54115b156128f257612710600d5487612868919061353d565b612872919061355c565b9150600d54600f5483612885919061353d565b61288f919061355c565b601660008282546128a0919061350c565b9091555050600d54600e546128b5908461353d565b6128bf919061355c565b601560008282546128d0919061350c565b9091555050600d546010546128e5908461353d565b6128ef919061355c565b90505b81156129165761290388308461231e565b8015612916576129163061dead8361231e565b612920828761359b565b95505b61292e88888861231e565b5050505050505050565b600061294330610e9d565b90506000601554601654612957919061350c565b9050811580612964575080155b1561296d575050565b60085461297b90600a61353d565b8211156129935760085461299090600a61353d565b91505b600080600283601654866129a7919061353d565b6129b1919061355c565b6129bb919061355c565b90506129cf6129ca828661359b565b612e5b565b601654479081906000906129e59060029061355c565b6129ef908761359b565b6015546129fc908561353d565b612a06919061355c565b9050612a12818361359b565b6000601681905560155591508315801590612a2d5750600082115b15612a3c57612a3c8483612fb5565b6009546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612a89576040519150601f19603f3d011682016040523d82523d6000602084013e612a8e565b606091505b50505050505050505050565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b7c9190613699565b81600081518110612b8f57612b8f6134c7565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612bc357612bc36134c7565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de95908490612c0b90600090869061dead9042906004016136fa565b6000604051808303818588803b158015612c2457600080fd5b505af1158015612c38573d6000803e3d6000fd5b50505050505050565b42601e8190556020556007546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb79190613524565b90506000612cc430610e9d565b90506000612710601b5484612cd9919061353d565b612ce3919061355c565b60075460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015612d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d61919061357e565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec90612d9c90309086906001908190849042906004016135b2565b60408051808303816000875af1158015612dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dde91906135ed565b5050600083612dec30610e9d565b612df6919061359b565b90508015612e0b57612e0b3061dead8361231e565b6000612e17834761359b565b90508015612e2857612e2881612aee565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e9057612e906134c7565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f0d9190613699565b81600181518110612f2057612f206134c7565b6001600160a01b039283166020918202929092010152600654612f4691309116846121fa565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f7f90859060009086903090429060040161372f565b600060405180830381600087803b158015612f9957600080fd5b505af1158015612fad573d6000803e3d6000fd5b505050505050565b600654612fcd9030906001600160a01b0316846121fa565b60065460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061300a90309087906000908190849042906004016135b2565b60606040518083038185885af1158015613028573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061304d919061376b565b5050505050565b600060208083528351808285015260005b8181101561308157858101830151858201604001528201613065565b81811115613093576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146130be57600080fd5b50565b600080604083850312156130d457600080fd5b82356130df816130a9565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561312c5761312c6130ed565b604052919050565b600067ffffffffffffffff82111561314e5761314e6130ed565b5060051b60200190565b600082601f83011261316957600080fd5b8135602061317e61317983613134565b613103565b82815260059290921b8401810191818101908684111561319d57600080fd5b8286015b848110156131b857803583529183019183016131a1565b509695505050505050565b600080604083850312156131d657600080fd5b823567ffffffffffffffff808211156131ee57600080fd5b818501915085601f83011261320257600080fd5b8135602061321261317983613134565b82815260059290921b8401810191818101908984111561323157600080fd5b948201945b83861015613258578535613249816130a9565b82529482019490820190613236565b9650508601359250508082111561326e57600080fd5b5061327b85828601613158565b9150509250929050565b60008060006060848603121561329a57600080fd5b83356132a5816130a9565b925060208401356132b5816130a9565b929592945050506040919091013590565b6000602082840312156132d857600080fd5b81356132e3816130a9565b9392505050565b80151581146130be57600080fd5b60008060006060848603121561330d57600080fd5b83359250602084013591506040840135613326816132ea565b809150509250925092565b60008060006060848603121561334657600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561337057600080fd5b823561337b816130a9565b9150602083013561338b816130a9565b809150509250929050565b600080604083850312156133a957600080fd5b82356133b4816130a9565b9150602083013561338b816132ea565b6000806000604084860312156133d957600080fd5b833567ffffffffffffffff808211156133f157600080fd5b818601915086601f83011261340557600080fd5b81358181111561341457600080fd5b8760208260051b850101111561342957600080fd5b60209283019550935050840135613326816132ea565b60006020828403121561345157600080fd5b5035919050565b600181811c9082168061346c57607f821691505b60208210810361348c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613505576135056134dd565b5060010190565b6000821982111561351f5761351f6134dd565b500190565b60006020828403121561353657600080fd5b5051919050565b6000816000190483118215151615613557576135576134dd565b500290565b60008261357957634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561359057600080fd5b81516132e3816132ea565b6000828210156135ad576135ad6134dd565b500390565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806040838503121561360057600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000602082840312156136ab57600080fd5b81516132e3816130a9565b600081518084526020808501945080840160005b838110156136ef5781516001600160a01b0316875295820195908201906001016136ca565b509495945050505050565b84815260806020820152600061371360808301866136b6565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061374e60a08301866136b6565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561378057600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220afcc6e131e24d856b2d0a4b7e920d4676e856f0362d0e28f1d0f9619989fceee64736f6c634300080f0033

Deployed Bytecode Sourcemap

11245:19201:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12077:41;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;12077:41:0;;;;;;;;5646:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11290:27::-;;;;;;;;;;-1:-1:-1;11290:27:0;;;;-1:-1:-1;;;;;11290:27:0;;;;;;-1:-1:-1;;;;;980:32:1;;;962:51;;950:2;935:18;11290:27:0;798:221:1;6560:169:0;;;;;;;;;;-1:-1:-1;6560:169:0;;;;;:::i;:::-;;:::i;:::-;;;1645:14:1;;1638:22;1620:41;;1608:2;1593:18;6560:169:0;1480:187:1;5967:108:0;;;;;;;;;;-1:-1:-1;6055:12:0;;5967:108;;12457:46;;;;;;;;;;;;;;;;12265:36;;;;;;;;;;;;;;;;12035:33;;;;;;;;;;;;;;;;16673:618;;;;;;;;;;-1:-1:-1;16673:618:0;;;;;:::i;:::-;;:::i;:::-;;6737:492;;;;;;;;;;-1:-1:-1;6737:492:0;;;;;:::i;:::-;;:::i;12361:47::-;;;;;;;;;;;;;;;;12321:33;;;;;;;;;;-1:-1:-1;12321:33:0;;;;;;;;5866:93;;;;;;;;;;-1:-1:-1;5866:93:0;;5949:2;4762:36:1;;4750:2;4735:18;5866:93:0;4620:184:1;7237:215:0;;;;;;;;;;-1:-1:-1;7237:215:0;;;;;:::i;:::-;;:::i;11462:25::-;;;;;;;;;;-1:-1:-1;11462:25:0;;;;-1:-1:-1;;;;;11462:25:0;;;11324:21;;;;;;;;;;-1:-1:-1;11324:21:0;;;;-1:-1:-1;;;;;11324:21:0;;;25147:312;;;;;;;;;;;;;:::i;11797:28::-;;;;;;;;;;;;;;;;11615:31;;;;;;;;;;-1:-1:-1;11615:31:0;;;;;;;;;;;6083:127;;;;;;;;;;-1:-1:-1;6083:127:0;;;;;:::i;:::-;;:::i;29439:281::-;;;;;;;;;;;;;:::i;9727:150::-;;;;;;;;;;;;;:::i;25467:447::-;;;;;;;;;;-1:-1:-1;25467:447:0;;;;;:::i;:::-;;:::i;29728:487::-;;;;;;;;;;;;;:::i;12225:31::-;;;;;;;;;;;;;;;;17794:391;;;;;;;;;;-1:-1:-1;17794:391:0;;;;;:::i;:::-;;:::i;24033:535::-;;;;;;;;;;-1:-1:-1;24033:535:0;;;;;:::i;:::-;;:::i;11424:31::-;;;;;;;;;;-1:-1:-1;11424:31:0;;;;-1:-1:-1;;;;;11424:31:0;;;15996:249;;;;;;;;;;;;;:::i;9513:79::-;;;;;;;;;;-1:-1:-1;9578:6:0;;-1:-1:-1;;;;;9578:6:0;9513:79;;5754:104;;;;;;;;;;;;;:::i;17299:293::-;;;;;;;;;;-1:-1:-1;17299:293:0;;;;;:::i;:::-;;:::i;11943:43::-;;;;;;;;;;;;11981:5;11943:43;;12510:35;;;;;;;;;;;;;;;;7460:413;;;;;;;;;;-1:-1:-1;7460:413:0;;;;;:::i;:::-;;:::i;12415:29::-;;;;;;;;;;;;;;;;6218:175;;;;;;;;;;-1:-1:-1;6218:175:0;;;;;:::i;:::-;;:::i;11908:26::-;;;;;;;;;;;;;;;;11832:31;;;;;;;;;;;;;;;;12850:58;;;;;;;;;;-1:-1:-1;12850:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11689:30;;;;;;;;;;;;;;;;11575:33;;;;;;;;;;-1:-1:-1;11575:33:0;;;;;;;;18601:282;;;;;;;;;;-1:-1:-1;18601:282:0;;;;;:::i;:::-;;:::i;28982:449::-;;;;;;;;;;-1:-1:-1;28982:449:0;;;;;:::i;:::-;;:::i;11995:33::-;;;;;;;;;;;;;;;;18891:182;;;;;;;;;;-1:-1:-1;18891:182:0;;;;;:::i;:::-;;:::i;18193:400::-;;;;;;;;;;-1:-1:-1;18193:400:0;;;;;:::i;:::-;;:::i;30223:220::-;;;;;;;;;;;;;:::i;16315:346::-;;;;;;;;;;-1:-1:-1;16315:346:0;;;;;:::i;:::-;;:::i;11655:27::-;;;;;;;;;;;;;;;;6401:151;;;;;;;;;;-1:-1:-1;6401:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;6517:18:0;;;6490:7;6517:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6401:151;11382:33;;;;;;;;;;;;;;;;11763:25;;;;;;;;;;;;;;;;11496:37;;;;;;;;;;;;;;;;12125:50;;;;;;;;;;;;;;;;11726:30;;;;;;;;;;;;;;;;9885:244;;;;;;;;;;-1:-1:-1;9885:244:0;;;;;:::i;:::-;;:::i;24638:160::-;;;;;;;;;;;;;:::i;11870:31::-;;;;;;;;;;;;;;;;24806:289;;;;;;;;;;-1:-1:-1;24806:289:0;;;;;:::i;:::-;;:::i;12182:36::-;;;;;;;;;;-1:-1:-1;12182:36:0;;;;;;;;27186:1398;;;;;;;;;;-1:-1:-1;27186:1398:0;;;;;:::i;:::-;;:::i;5646:100::-;5700:13;5733:5;5726:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5646:100;:::o;6560:169::-;6643:4;6660:39;1875:10;6683:7;6692:6;6660:8;:39::i;:::-;-1:-1:-1;6717:4:0;6560:169;;;;:::o;16673:618::-;9640:6;;-1:-1:-1;;;;;9640:6:0;1875:10;9640:22;9632:67;;;;-1:-1:-1;;;9632:67:0;;;;;;;:::i;:::-;;;;;;;;;16815:15:::1;:22;16797:7;:14;:40;16789:83;;;::::0;-1:-1:-1;;;16789:83:0;;8763:2:1;16789:83:0::1;::::0;::::1;8745:21:1::0;8802:2;8782:18;;;8775:30;8841:32;8821:18;;;8814:60;8891:18;;16789:83:0::1;8561:354:1::0;16789:83:0::1;16908:3;16891:7;:14;:20;16883:87;;;::::0;-1:-1:-1;;;16883:87:0;;9122:2:1;16883:87:0::1;::::0;::::1;9104:21:1::0;9161:2;9141:18;;;9134:30;9200:34;9180:18;;;9173:62;-1:-1:-1;;;9251:18:1;;;9244:52;9313:19;;16883:87:0::1;8920:418:1::0;16883:87:0::1;17083:9;17079:205;17102:7;:14;17098:1;:18;17079:205;;;17137:14;17154:7;17162:1;17154:10;;;;;;;;:::i;:::-;;;;;;;17137:27;;17179:14;17196:15;17212:1;17196:18;;;;;;;;:::i;:::-;;;;;;;17179:35;;17229:43;17245:10;17257:6;17265;17229:15;:43::i;:::-;17122:162;;17118:3;;;;;:::i;:::-;;;;17079:205;;;;16673:618:::0;;:::o;6737:492::-;6877:4;6894:36;6904:6;6912:9;6923:6;6894:9;:36::i;:::-;-1:-1:-1;;;;;6970:19:0;;6943:24;6970:19;;;:11;:19;;;;;;;;1875:10;6970:33;;;;;;;;7022:26;;;;7014:79;;;;-1:-1:-1;;;7014:79:0;;9949:2:1;7014:79:0;;;9931:21:1;9988:2;9968:18;;;9961:30;10027:34;10007:18;;;10000:62;-1:-1:-1;;;10078:18:1;;;10071:38;10126:19;;7014:79:0;9747:404:1;7014:79:0;7129:57;7138:6;1875:10;7179:6;7160:16;:25;7129:8;:57::i;:::-;-1:-1:-1;7217:4:0;;6737:492;-1:-1:-1;;;;6737:492:0:o;7237:215::-;1875:10;7325:4;7374:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7374:34:0;;;;;;;;;;7325:4;;7342:80;;7365:7;;7374:47;;7411:10;;7374:47;:::i;:::-;7342:8;:80::i;25147:312::-;9640:6;;-1:-1:-1;;;;;9640:6:0;1875:10;9640:22;9632:67;;;;-1:-1:-1;;;9632:67:0;;;;;;;:::i;:::-;25238:18:::1;;25210:24;25228:4;25210:9;:24::i;:::-;:46;;25202:123;;;::::0;;-1:-1:-1;;;25202:123:0;;10491:2:1;25202:123:0::1;::::0;::::1;10473:21:1::0;10510:18;;;10503:30;;;;10569:34;10549:18;;;10542:62;10640:34;10620:18;;;10613:62;10692:19;;25202:123:0::1;10289:428:1::0;25202:123:0::1;25336:8;:15:::0;;-1:-1:-1;;;;25336:15:0::1;-1:-1:-1::0;;;25336:15:0::1;::::0;;25362:10:::1;:8;:10::i;:::-;25383:8;:16:::0;;-1:-1:-1;;;;25383:16:0::1;::::0;;25415:36:::1;::::0;25435:15:::1;160:25:1::0;;25415:36:0::1;::::0;148:2:1;133:18;25415:36:0::1;;;;;;;25147:312::o:0;6083:127::-;-1:-1:-1;;;;;6184:18:0;6157:7;6184:18;;;;;;;;;;;;6083:127::o;29439:281::-;29521:24;;29499:7;;29521:24;;29518:195;;;29597:25;;29568:26;;:54;;;;:::i;:::-;29561:61;;29439:281;:::o;29518:195::-;-1:-1:-1;29671:1:0;;29439:281::o;9727:150::-;9640:6;;-1:-1:-1;;;;;9640:6:0;1875:10;9640:22;9632:67;;;;-1:-1:-1;;;9632:67:0;;;;;;;:::i;:::-;9820:6:::1;::::0;9799:40:::1;::::0;9836:1:::1;::::0;-1:-1:-1;;;;;9820:6:0::1;::::0;9799:40:::1;::::0;9836:1;;9799:40:::1;9850:6;:19:::0;;-1:-1:-1;;;;;;9850:19:0::1;::::0;;9727:150::o;25467:447::-;9640:6;;-1:-1:-1;;;;;9640:6:0;1875:10;9640:22;9632:67;;;;-1:-1:-1;;;9632:67:0;;;;;;;:::i;:::-;25621:3:::1;25598:19;:26;;25590:90;;;::::0;-1:-1:-1;;;25590:90:0;;10924:2:1;25590:90:0::1;::::0;::::1;10906:21:1::0;10963:2;10943:18;;;10936:30;11002:34;10982:18;;;10975:62;-1:-1:-1;;;11053:18:1;;;11046:49;11112:19;;25590:90:0::1;10722:415:1::0;25590:90:0::1;25711:4;25699:8;:16;;:33;;;;-1:-1:-1::0;25719:13:0;25699:33:::1;25691:94;;;::::0;-1:-1:-1;;;25691:94:0;;11344:2:1;25691:94:0::1;::::0;::::1;11326:21:1::0;11383:2;11363:18;;;11356:30;11422:34;11402:18;;;11395:62;-1:-1:-1;;;11473:18:1;;;11466:46;11529:19;;25691:94:0::1;11142:412:1::0;25691:94:0::1;25796:15;:37:::0;;;;25844:16:::1;:27:::0;25882:13:::1;:24:::0;;-1:-1:-1;;25882:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25467:447::o;29728:487::-;9640:6;;-1:-1:-1;;;;;9640:6:0;1875:10;9640:22;9632:67;;;;-1:-1:-1;;;9632:67:0;;;;;;;:::i;:::-;29816:29:::1;:27;:29::i;:::-;29797:15;:48;;:85;;;;;29881:1;29849:29;:27;:29::i;:::-;:33;29797:85;29789:120;;;::::0;-1:-1:-1;;;29789:120:0;;11761:2:1;29789:120:0::1;::::0;::::1;11743:21:1::0;11800:2;11780:18;;;11773:30;-1:-1:-1;;;11819:18:1;;;11812:52;11881:18;;29789:120:0::1;11559:346:1::0;29789:120:0::1;29949:1;29920:26;:30:::0;;;29961:24:::1;:32:::0;;-1:-1:-1;;29961:32:0::1;::::0;;30081:16:::1;::::0;30045:6:::1;::::0;30030:48:::1;::::0;-1:-1:-1;;;30030:48:0;;30072:4:::1;30030:48;::::0;::::1;962:51:1::0;30100:3:0::1;::::0;30081:16;-1:-1:-1;;;;;30045:6:0::1;::::0;30030:33:::1;::::0;935:18:1;;30030:48:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;;;:::i;:::-;:73;;;;:::i;:::-;30143:1;30124:16;:20:::0;30164:6:::1;::::0;30157:50:::1;::::0;-1:-1:-1;;;30157:50:0;;30181:10:::1;30157:50;::::0;::::1;12668:51:1::0;12735:18;;;12728:34;;;30006:97:0;;-1:-1:-1;;;;;;30164:6:0::1;::::0;30157:23:::1;::::0;12641:18:1;;30157:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29778:437;29728:487::o:0;17794:391::-;9640:6;;-1:-1:-1;;;;;9640:6:0;1875:10;9640:22;9632:67;;;;-1:-1:-1;;;9632:67:0;;;;;;;:::i;:::-;17911:15:::1;:31:::0;;;17953:15:::1;:31:::0;;;17995:10:::1;:21:::0;;;18008:8;18042:33:::1;17971:13:::0;17929;18042:33:::1;:::i;:::-;:46;;;;:::i;:::-;18027:12;:61:::0;18141:3:::1;18123:15;11981:5;18123:1;:15;:::i;:::-;:21;;;;:::i;:::-;18107:12;;:37;;18099:78;;;::::0;-1:-1:-1;;;18099:78:0;;13225:2:1;18099:78:0::1;::::0;::::1;13207:21:1::0;13264:2;13244:18;;;13237:30;13303;13283:18;;;13276:58;13351:18;;18099:78:0::1;13023:352:1::0;24033:535:0;9640:6;;24120:10;;-1:-1:-1;;;;;9640:6:0;1875:10;9640:22;9632:67;;;;-1:-1:-1;;;9632:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24151:20:0;::::1;24143:59;;;::::0;-1:-1:-1;;;24143:59:0;;13582:2:1;24143:59:0::1;::::0;::::1;13564:21:1::0;13621:2;13601:18;;;13594:30;13660:28;13640:18;;;13633:56;13706:18;;24143:59:0::1;13380:350:1::0;24143:59:0::1;-1:-1:-1::0;;;;;24222:23:0;::::1;24240:4;24222:23;::::0;::::1;::::0;:52:::1;;-1:-1:-1::0;24267:6:0::1;::::0;-1:-1:-1;;;;;24249:25:0;;::::1;24267:6:::0;::::1;24249:25;;24222:52;24221:72;;;-1:-1:-1::0;24280:13:0::1;::::0;::::1;;24279:14;24221:72;24213:143;;;::::0;-1:-1:-1;;;24213:143:0;;13937:2:1;24213:143:0::1;::::0;::::1;13919:21:1::0;13976:2;13956:18;;;13949:30;14015:34;13995:18;;;13988:62;14086:28;14066:18;;;14059:56;14132:19;;24213:143:0::1;13735:422:1::0;24213:143:0::1;24394:39;::::0;-1:-1:-1;;;24394:39:0;;24427:4:::1;24394:39;::::0;::::1;962:51:1::0;24367:24:0::1;::::0;-1:-1:-1;;;;;24394:24:0;::::1;::::0;::::1;::::0;935:18:1;;24394:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24452:46;::::0;-1:-1:-1;;;24452:46:0;;-1:-1:-1;;;;;12686:32:1;;;24452:46:0::1;::::0;::::1;12668:51:1::0;12735:18;;;12728:34;;;24367:66:0;;-1:-1:-1;24452:23:0;;::::1;::::0;::::1;::::0;12641:18:1;;24452:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24514;::::0;;-1:-1:-1;;;;;12686:32:1;;12668:51;;12750:2;12735:18;;12728:34;;;24444:54:0;;-1:-1:-1;24514:46:0::1;::::0;12641:18:1;24514:46:0::1;;;;;;;24132:436;24033:535:::0;;;;:::o;15996:249::-;9640:6;;-1:-1:-1;;;;;9640:6:0;1875:10;9640:22;9632:67;;;;-1:-1:-1;;;9632:67:0;;;;;;;:::i;:::-;16060:13:::1;::::0;::::1;;16059:14;16051:50;;;::::0;-1:-1:-1;;;16051:50:0;;14364:2:1;16051:50:0::1;::::0;::::1;14346:21:1::0;14403:2;14383:18;;;14376:30;14442:25;14422:18;;;14415:53;14485:18;;16051:50:0::1;14162:347:1::0;16051:50:0::1;16112:13;:20:::0;;-1:-1:-1;;16143:18:0;;;;;16193:12:::1;16172:18;:33:::0;16221:16:::1;::::0;::::1;::::0;-1:-1:-1;;16221:16:0::1;15996:249::o:0;5754:104::-;5810:13;5843:7;5836:14;;;;;:::i;17299:293::-;9640:6;;-1:-1:-1;;;;;9640:6:0;1875:10;9640:22;9632:67;;;;-1:-1:-1;;;9632:67:0;;;;;;;:::i;:::-;17408:6:::1;::::0;-1:-1:-1;;;;;17408:6:0;;::::1;17400:14:::0;;::::1;::::0;17392:84:::1;;;::::0;-1:-1:-1;;;17392:84:0;;14716:2:1;17392:84:0::1;::::0;::::1;14698:21:1::0;14755:2;14735:18;;;14728:30;14794:34;14774:18;;;14767:62;14865:27;14845:18;;;14838:55;14910:19;;17392:84:0::1;14514:421:1::0;17392:84:0::1;17487:41;17516:4;17522:5;17487:28;:41::i;:::-;17544:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;17544:40:0;::::1;::::0;::::1;::::0;;;::::1;17299:293:::0;;:::o;7460:413::-;1875:10;7553:4;7597:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7597:34:0;;;;;;;;;;7650:35;;;;7642:85;;;;-1:-1:-1;;;7642:85:0;;15142:2:1;7642:85:0;;;15124:21:1;15181:2;15161:18;;;15154:30;15220:34;15200:18;;;15193:62;-1:-1:-1;;;15271:18:1;;;15264:35;15316:19;;7642:85:0;14940:401:1;7642:85:0;7763:67;1875:10;7786:7;7814:15;7795:16;:34;7763:8;:67::i;:::-;-1:-1:-1;7861:4:0;;7460:413;-1:-1:-1;;;7460:413:0:o;6218:175::-;6304:4;6321:42;1875:10;6345:9;6356:6;6321:9;:42::i;18601:282::-;9640:6;;-1:-1:-1;;;;;9640:6:0;1875:10;9640:22;9632:67;;;;-1:-1:-1;;;9632:67:0;;;;;;;:::i;:::-;18708:9:::1;18704:172;18723:19:::0;;::::1;18704:172;;;18798:8;18763:19;:32;18783:8;;18792:1;18783:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18763:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18763:32:0;:43;;-1:-1:-1;;18763:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18842:8;;18851:1;18842:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18826:38:0::1;;18855:8;18826:38;;;;1645:14:1::0;1638:22;1620:41;;1608:2;1593:18;;1480:187;18826:38:0::1;;;;;;;;18744:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18704:172;;;;18601:282:::0;;;:::o;28982:449::-;9640:6;;-1:-1:-1;;;;;9640:6:0;1875:10;9640:22;9632:67;;;;-1:-1:-1;;;9632:67:0;;;;;;;:::i;:::-;29074:24:::1;::::0;::::1;;29073:25;29065:87;;;::::0;-1:-1:-1;;;29065:87:0;;15548:2:1;29065:87:0::1;::::0;::::1;15530:21:1::0;15587:2;15567:18;;;15560:30;15626:34;15606:18;;;15599:62;-1:-1:-1;;;15677:18:1;;;15670:47;15734:19;;29065:87:0::1;15346:413:1::0;29065:87:0::1;29189:3;29171:14;:21;;:43;;;;;29213:1;29196:14;:18;29171:43;29163:82;;;::::0;-1:-1:-1;;;29163:82:0;;15966:2:1;29163:82:0::1;::::0;::::1;15948:21:1::0;16005:2;15985:18;;;15978:30;16044:28;16024:18;;;16017:56;16090:18;;29163:82:0::1;15764:350:1::0;29163:82:0::1;29285:15;29256:26;:44:::0;29311:24:::1;:31:::0;;-1:-1:-1;;29311:31:0::1;29338:4;29311:31;::::0;;29353:16:::1;:33:::0;;;29402:21:::1;::::0;::::1;::::0;29311:24:::1;::::0;29402:21:::1;28982:449:::0;:::o;18891:182::-;9640:6;;-1:-1:-1;;;;;9640:6:0;1875:10;9640:22;9632:67;;;;-1:-1:-1;;;9632:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18976:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;18976:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19031:34;;1620:41:1;;;19031:34:0::1;::::0;1593:18:1;19031:34:0::1;;;;;;;18891:182:::0;;:::o;18193:400::-;9640:6;;-1:-1:-1;;;;;9640:6:0;1875:10;9640:22;9632:67;;;;-1:-1:-1;;;9632:67:0;;;;;;;:::i;:::-;18311:16:::1;:32:::0;;;18354:16:::1;:32:::0;;;18397:11:::1;:22:::0;;;18411:8;18446:35:::1;18373:13:::0;18330;18446:35:::1;:::i;:::-;:49;;;;:::i;:::-;18430:13;:65:::0;18549:3:::1;18531:15;11981:5;18531:1;:15;:::i;:::-;:21;;;;:::i;:::-;18514:13;;:38;;18506:79;;;::::0;-1:-1:-1;;;18506:79:0;;13225:2:1;18506:79:0::1;::::0;::::1;13207:21:1::0;13264:2;13244:18;;;13237:30;13303;13283:18;;;13276:58;13351:18;;18506:79:0::1;13023:352:1::0;30223:220:0;9640:6;;-1:-1:-1;;;;;9640:6:0;1875:10;9640:22;9632:67;;;;-1:-1:-1;;;9632:67:0;;;;;;;:::i;:::-;30288:24:::1;:32:::0;;-1:-1:-1;;30288:32:0::1;::::0;;30315:5:::1;30331:16;:20:::0;;;30362:26:::1;:30:::0;;;30408:27:::1;::::0;::::1;::::0;30315:5;30408:27:::1;30223:220::o:0;16315:346::-;9640:6;;-1:-1:-1;;;;;9640:6:0;1875:10;9640:22;9632:67;;;;-1:-1:-1;;;9632:67:0;;;;;;;:::i;:::-;16438:6:::1;16418:13;6055:12:::0;;;5967:108;16418:13:::1;:17;::::0;16434:1:::1;16418:17;:::i;:::-;:26;;;;:::i;:::-;16405:9;:39;;16397:105;;;::::0;-1:-1:-1;;;16397:105:0;;16321:2:1;16397:105:0::1;::::0;::::1;16303:21:1::0;16360:2;16340:18;;;16333:30;16399:34;16379:18;;;16372:62;-1:-1:-1;;;16450:18:1;;;16443:51;16511:19;;16397:105:0::1;16119:417:1::0;16397:105:0::1;16553:4;16533:13;6055:12:::0;;;5967:108;16533:13:::1;:17;::::0;16549:1:::1;16533:17;:::i;:::-;:24;;;;:::i;:::-;16520:9;:37;;16512:102;;;::::0;-1:-1:-1;;;16512:102:0;;16743:2:1;16512:102:0::1;::::0;::::1;16725:21:1::0;16782:2;16762:18;;;16755:30;16821:34;16801:18;;;16794:62;-1:-1:-1;;;16872:18:1;;;16865:50;16932:19;;16512:102:0::1;16541:416:1::0;16512:102:0::1;16624:18;:30:::0;16315:346::o;9885:244::-;9640:6;;-1:-1:-1;;;;;9640:6:0;1875:10;9640:22;9632:67;;;;-1:-1:-1;;;9632:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9974:22:0;::::1;9966:73;;;::::0;-1:-1:-1;;;9966:73:0;;17164:2:1;9966:73:0::1;::::0;::::1;17146:21:1::0;17203:2;17183:18;;;17176:30;17242:34;17222:18;;;17215:62;-1:-1:-1;;;17293:18:1;;;17286:36;17339:19;;9966:73:0::1;16962:402:1::0;9966:73:0::1;10076:6;::::0;10055:38:::1;::::0;-1:-1:-1;;;;;10055:38:0;;::::1;::::0;10076:6:::1;::::0;10055:38:::1;::::0;10076:6:::1;::::0;10055:38:::1;10104:6;:17:::0;;-1:-1:-1;;;;;;10104:17:0::1;-1:-1:-1::0;;;;;10104:17:0;;;::::1;::::0;;;::::1;::::0;;9885:244::o;24638:160::-;9640:6;;-1:-1:-1;;;;;9640:6:0;1875:10;9640:22;9632:67;;;;-1:-1:-1;;;9632:67:0;;;;;;;:::i;:::-;24732:58:::1;::::0;24696:12:::1;::::0;24740:10:::1;::::0;24764:21:::1;::::0;24696:12;24732:58;24696:12;24732:58;24764:21;24740:10;24732:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24806:289:::0;9640:6;;-1:-1:-1;;;;;9640:6:0;1875:10;9640:22;9632:67;;;;-1:-1:-1;;;9632:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24900:31:0;::::1;24892:81;;;::::0;-1:-1:-1;;;24892:81:0;;17781:2:1;24892:81:0::1;::::0;::::1;17763:21:1::0;17820:2;17800:18;;;17793:30;17859:34;17839:18;;;17832:62;-1:-1:-1;;;17910:18:1;;;17903:35;17955:19;;24892:81:0::1;17579:401:1::0;24892:81:0::1;24984:16;:45:::0;;-1:-1:-1;;;;;;24984:45:0::1;-1:-1:-1::0;;;;;24984:45:0;::::1;::::0;;::::1;::::0;;;25045:42:::1;::::0;::::1;::::0;-1:-1:-1;;25045:42:0::1;24806:289:::0;:::o;27186:1398::-;9640:6;;-1:-1:-1;;;;;9640:6:0;1875:10;9640:22;9632:67;;;;-1:-1:-1;;;9632:67:0;;;;;;;:::i;:::-;27290:4:::1;27280:7;:14;;27272:80;;;::::0;-1:-1:-1;;;27272:80:0;;18187:2:1;27272:80:0::1;::::0;::::1;18169:21:1::0;18226:2;18206:18;;;18199:30;18265:34;18245:18;;;18238:62;-1:-1:-1;;;18316:18:1;;;18309:51;18377:19;;27272:80:0::1;17985:417:1::0;27272:80:0::1;27413:19;::::0;27395:37:::1;::::0;:15:::1;:37;:::i;:::-;27371:20;;:61;;27363:87;;;::::0;-1:-1:-1;;;27363:87:0;;18739:2:1;27363:87:0::1;::::0;::::1;18721:21:1::0;18778:2;18758:18;;;18751:30;-1:-1:-1;;;18797:18:1;;;18790:43;18850:18;;27363:87:0::1;18537:337:1::0;27363:87:0::1;27484:15;27461:20;:38:::0;27537:6:::1;::::0;27530:39:::1;::::0;-1:-1:-1;;;27530:39:0;;27563:4:::1;27530:39;::::0;::::1;962:51:1::0;27510:17:0::1;::::0;-1:-1:-1;;;;;27537:6:0::1;::::0;27530:24:::1;::::0;935:18:1;;27530:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27510:59;;27580:20;27603:24;27621:4;27603:9;:24::i;:::-;27580:47:::0;-1:-1:-1;27638:16:0::1;27679:5;27657:19;27669:7:::0;27657:9;:19:::1;:::i;:::-;:27;;;;:::i;:::-;27831:6;::::0;27855:9:::1;::::0;27824:52:::1;::::0;-1:-1:-1;;;27824:52:0;;-1:-1:-1;;;;;27855:9:0;;::::1;27824:52;::::0;::::1;12668:51:1::0;12735:18;;;12728:34;;;27638:46:0;;-1:-1:-1;27723:21:0::1;::::0;27831:6;::::1;::::0;27824:22:::1;::::0;12641:18:1;;27824:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;27922:9:0::1;::::0;:234:::1;::::0;-1:-1:-1;;;27922:234:0;;-1:-1:-1;;;;;27922:9:0;;::::1;::::0;:28:::1;::::0;:234:::1;::::0;27973:4:::1;::::0;27993:8;;27922:9;;;;27973:4;;28130:15:::1;::::0;27922:234:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;28169:25;28224:12;28197:24;28215:4;28197:9;:24::i;:::-;:39;;;;:::i;:::-;28169:67:::0;-1:-1:-1;28250:21:0;;28247:118:::1;;28287:66;28311:4;28326:6;28335:17;28287:15;:66::i;:::-;28377:23;28403:41;28427:17:::0;28403:21:::1;:41;:::i;:::-;28377:67:::0;-1:-1:-1;28460:19:0;;28457:80:::1;;28495:30;28509:15;28495:13;:30::i;:::-;28554:22;::::0;28567:8;;28554:22:::1;::::0;;;::::1;27261:1323;;;;;;27186:1398:::0;:::o;8802:380::-;-1:-1:-1;;;;;8938:19:0;;8930:68;;;;-1:-1:-1;;;8930:68:0;;19943:2:1;8930:68:0;;;19925:21:1;19982:2;19962:18;;;19955:30;20021:34;20001:18;;;19994:62;-1:-1:-1;;;20072:18:1;;;20065:34;20116:19;;8930:68:0;19741:400:1;8930:68:0;-1:-1:-1;;;;;9017:21:0;;9009:68;;;;-1:-1:-1;;;9009:68:0;;20348:2:1;9009:68:0;;;20330:21:1;20387:2;20367:18;;;20360:30;20426:34;20406:18;;;20399:62;-1:-1:-1;;;20477:18:1;;;20470:32;20519:19;;9009:68:0;20146:398:1;9009:68:0;-1:-1:-1;;;;;9090:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9142:32;;160:25:1;;;9142:32:0;;133:18:1;9142:32:0;;;;;;;8802:380;;;:::o;7881:614::-;-1:-1:-1;;;;;8021:20:0;;8013:70;;;;-1:-1:-1;;;8013:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8102:23:0;;8094:71;;;;-1:-1:-1;;;8094:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8202:17:0;;8178:21;8202:17;;;;;;;;;;;8238:23;;;;8230:74;;;;-1:-1:-1;;;8230:74:0;;21561:2:1;8230:74:0;;;21543:21:1;21600:2;21580:18;;;21573:30;21639:34;21619:18;;;21612:62;-1:-1:-1;;;21690:18:1;;;21683:36;21736:19;;8230:74:0;21359:402:1;8230:74:0;-1:-1:-1;;;;;8340:17:0;;;:9;:17;;;;;;;;;;;8360:22;;;8340:42;;8404:20;;;;;;;;:30;;8376:6;;8340:9;8404:30;;8376:6;;8404:30;:::i;:::-;;;;;;;;8469:9;-1:-1:-1;;;;;8452:35:0;8461:6;-1:-1:-1;;;;;8452:35:0;;8480:6;8452:35;;;;160:25:1;;148:2;133:18;;14:177;8452:35:0;;;;;;;;8002:493;7881:614;;;:::o;19081:2608::-;-1:-1:-1;;;;;19181:18:0;;19173:68;;;;-1:-1:-1;;;19173:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19260:16:0;;19252:64;;;;-1:-1:-1;;;19252:64:0;;;;;;;:::i;:::-;19344:1;19335:6;:10;19327:52;;;;-1:-1:-1;;;19327:52:0;;21968:2:1;19327:52:0;;;21950:21:1;22007:2;21987:18;;;21980:30;22046:31;22026:18;;;22019:59;22095:18;;19327:52:0;21766:353:1;19327:52:0;19404:13;;;;19400:132;;-1:-1:-1;;;;;19441:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;19470:23:0;;;;;;:19;:23;;;;;;;;19441:52;19433:87;;;;-1:-1:-1;;;19433:87:0;;22326:2:1;19433:87:0;;;22308:21:1;22365:2;22345:18;;;22338:30;-1:-1:-1;;;22384:18:1;;;22377:52;22446:18;;19433:87:0;22124:346:1;19433:87:0;19544:28;19575:24;19593:4;19575:9;:24::i;:::-;19659:18;;19544:55;;-1:-1:-1;19635:42:0;;;;;;;19693:22;;-1:-1:-1;19704:11:0;;;;;;;19693:22;:35;;;;-1:-1:-1;19720:8:0;;-1:-1:-1;;;19720:8:0;;;;19719:9;19693:35;:71;;;;-1:-1:-1;;;;;;19733:31:0;;;;;;:25;:31;;;;;;;;19732:32;19693:71;:101;;;;-1:-1:-1;;;;;;19769:25:0;;;;;;:19;:25;;;;;;;;19768:26;19693:101;:129;;;;-1:-1:-1;;;;;;19799:23:0;;;;;;:19;:23;;;;;;;;19798:24;19693:129;19690:232;;;19839:8;:15;;-1:-1:-1;;;;19839:15:0;-1:-1:-1;;;19839:15:0;;;19869:10;:8;:10::i;:::-;19894:8;:16;;-1:-1:-1;;;;19894:16:0;;;19690:232;19938:8;;-1:-1:-1;;;19938:8:0;;;;19937:9;:42;;;;-1:-1:-1;;;;;;19950:29:0;;;;;;:25;:29;;;;;;;;19937:42;:59;;;;-1:-1:-1;19983:13:0;;;;19937:59;:114;;;;;20036:15;;20019:14;;:32;;;;:::i;:::-;20000:15;:51;;19937:114;:144;;;;-1:-1:-1;;;;;;20056:25:0;;;;;;:19;:25;;;;;;;;20055:26;19937:144;19934:204;;;20097:29;:27;:29::i;:::-;-1:-1:-1;;;;;20268:25:0;;20150:12;20268:25;;;:19;:25;;;;;;20165:4;;20268:25;;;:52;;-1:-1:-1;;;;;;20297:23:0;;;;;;:19;:23;;;;;;;;20268:52;20265:99;;;-1:-1:-1;20347:5:0;20265:99;20384:12;20411:20;20525:7;20522:1114;;;-1:-1:-1;;;;;20575:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;20624:1;20608:13;;:17;20575:50;20571:754;;;11981:5;20661:13;;20652:6;:22;;;;:::i;:::-;:36;;;;:::i;:::-;20645:43;;20755:13;;20736:16;;20729:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;20707:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;20835:13:0;;20816:16;;20809:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;20787:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;20903:13:0;;20889:11;;20882:18;;:4;:18;:::i;:::-;:34;;;;:::i;:::-;20867:49;;20571:754;;;-1:-1:-1;;;;;20979:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;21029:1;21014:12;;:16;20979:51;20976:349;;;11981:5;21064:12;;21055:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;21048:42;;21153:12;;21135:15;;21128:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;21106:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;21231:12:0;;21213:15;;21206:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;21184:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;21297:12:0;;21284:10;;21277:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;21262:47;;20976:349;21356:8;;21353:235;;21388:42;21404:4;21418;21425;21388:15;:42::i;:::-;21452:16;;21449:124;;21492:61;21516:4;21531:6;21540:12;21492:15;:61::i;:::-;21610:14;21620:4;21610:14;;:::i;:::-;;;20522:1114;21648:33;21664:4;21670:2;21674:6;21648:15;:33::i;:::-;19160:2529;;;;;19081:2608;;;:::o;22797:1228::-;22838:23;22864:24;22882:4;22864:9;:24::i;:::-;22838:50;;22899:25;22948:18;;22927;;:39;;;;:::i;:::-;22899:67;-1:-1:-1;22990:20:0;;;:46;;-1:-1:-1;23014:22:0;;22990:46;22987:60;;;23039:7;;22797:1228::o;22987:60::-;23080:18;;:23;;23101:2;23080:23;:::i;:::-;23062:15;:41;23059:113;;;23137:18;;:23;;23158:2;23137:23;:::i;:::-;23119:41;;23059:113;23184:12;23266:23;23351:1;23331:17;23310:18;;23292:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;23266:86;-1:-1:-1;23373:51:0;23390:33;23266:86;23390:15;:33;:::i;:::-;23373:16;:51::i;:::-;23630:18;;23467:21;;;;23446:18;;23630:20;;23649:1;;23630:20;:::i;:::-;23609:42;;:17;:42;:::i;:::-;23587:18;;23574:31;;:10;:31;:::i;:::-;:78;;;;:::i;:::-;23548:104;-1:-1:-1;23665:34:0;23548:104;23665:34;;:::i;:::-;23745:1;23724:18;:22;;;23757:18;:22;23665:34;-1:-1:-1;23812:19:0;;;;;:42;;;23853:1;23835:15;:19;23812:42;23809:119;;;23870:46;23883:15;23900;23870:12;:46::i;:::-;23961:16;;23953:64;;-1:-1:-1;;;;;23961:16:0;;;;23991:21;;23953:64;;;;23991:21;23961:16;23953:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;22797:1228:0:o;17600:186::-;-1:-1:-1;;;;;17683:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;17683:39:0;;;;;;;;;;17738:40;;17683:39;;:31;17738:40;;;17600:186;;:::o;28592:382::-;28680:16;;;28694:1;28680:16;;;;;;;;28656:21;;28680:16;;;;;;;;-1:-1:-1;;28717:9:0;;:16;;;-1:-1:-1;;;28717:16:0;;;;28656:40;;-1:-1:-1;;;;;;28717:9:0;;;;:14;;-1:-1:-1;28717:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28707:4;28712:1;28707:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;28707:26:0;;;-1:-1:-1;;;;;28707:26:0;;;;;28762:4;28744;28749:1;28744:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28744:23:0;;;:7;;;;;;;;;:23;28780:9;;:186;;-1:-1:-1;;;28780:186:0;;:9;;;:60;;28848:11;;28780:186;;:9;;28891:4;;28918:6;;28940:15;;28780:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28645:329;28592:382;:::o;25926:1252::-;26012:15;25995:14;:32;;;26048:20;:38;26124:6;;26117:39;;-1:-1:-1;;;26117:39:0;;26150:4;26117:39;;;962:51:1;-1:-1:-1;;;;;;;26124:6:0;;26117:24;;935:18:1;;26117:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26097:59;;26167:20;26190:24;26208:4;26190:9;:24::i;:::-;26167:47;;26225:16;26275:5;26256:16;;26244:9;:28;;;;:::i;:::-;:36;;;;:::i;:::-;26427:6;;26451:9;;26420:52;;-1:-1:-1;;;26420:52:0;;-1:-1:-1;;;;;26451:9:0;;;26420:52;;;12668:51:1;12735:18;;;12728:34;;;26225:55:0;;-1:-1:-1;26319:21:0;;26427:6;;;26420:22;;12641:18:1;;26420:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;26518:9:0;;:234;;-1:-1:-1;;;26518:234:0;;-1:-1:-1;;;;;26518:9:0;;;;:28;;:234;;26569:4;;26589:8;;26518:9;;;;26569:4;;26726:15;;26518:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;26765:25;26820:12;26793:24;26811:4;26793:9;:24::i;:::-;:39;;;;:::i;:::-;26765:67;-1:-1:-1;26846:21:0;;26843:118;;26883:66;26907:4;26922:6;26931:17;26883:15;:66::i;:::-;26973:23;26999:41;27023:17;26999:21;:41;:::i;:::-;26973:67;-1:-1:-1;27056:19:0;;27053:80;;27091:30;27105:15;27091:13;:30::i;:::-;27150:20;;27161:8;;27150:20;;;;;25974:1204;;;;;;25926:1252::o;21697:573::-;21849:16;;;21863:1;21849:16;;;;;;;;21825:21;;21849:16;;;;;;;;;;-1:-1:-1;21849:16:0;21825:40;;21894:4;21876;21881:1;21876:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21876:23:0;;;:7;;;;;;;;;;:23;;;;21920:9;;:16;;;-1:-1:-1;;;21920:16:0;;;;:9;;;;;:14;;:16;;;;;21876:7;;21920:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21910:4;21915:1;21910:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21910:26:0;;;:7;;;;;;;;;:26;21981:9;;21949:56;;21966:4;;21981:9;21993:11;21949:8;:56::i;:::-;22044:9;;:218;;-1:-1:-1;;;22044:218:0;;-1:-1:-1;;;;;22044:9:0;;;;:60;;:218;;22119:11;;22044:9;;22189:4;;22216;;22236:15;;22044:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21752:518;21697:573;:::o;22282:507::-;22462:9;;22430:56;;22447:4;;-1:-1:-1;;;;;22462:9:0;22474:11;22430:8;:56::i;:::-;22529:9;;:252;;-1:-1:-1;;;22529:252:0;;-1:-1:-1;;;;;22529:9:0;;;;:25;;22562:9;;22529:252;;22595:4;;22615:11;;22529:9;;;;22595:4;;22755:15;;22529:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22282:507;;:::o;196:597: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;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;1024:131::-;-1:-1:-1;;;;;1099:31:1;;1089:42;;1079:70;;1145:1;1142;1135:12;1079:70;1024:131;:::o;1160:315::-;1228:6;1236;1289:2;1277:9;1268:7;1264:23;1260:32;1257:52;;;1305:1;1302;1295:12;1257:52;1344:9;1331:23;1363:31;1388:5;1363:31;:::i;:::-;1413:5;1465:2;1450:18;;;;1437:32;;-1:-1:-1;;;1160:315:1:o;1672:127::-;1733:10;1728:3;1724:20;1721:1;1714:31;1764:4;1761:1;1754:15;1788:4;1785:1;1778:15;1804:275;1875:2;1869:9;1940:2;1921:13;;-1:-1:-1;;1917:27:1;1905:40;;1975:18;1960:34;;1996:22;;;1957:62;1954:88;;;2022:18;;:::i;:::-;2058:2;2051:22;1804:275;;-1:-1:-1;1804:275:1:o;2084:183::-;2144:4;2177:18;2169:6;2166:30;2163:56;;;2199:18;;:::i;:::-;-1:-1:-1;2244:1:1;2240:14;2256:4;2236:25;;2084:183::o;2272:662::-;2326:5;2379:3;2372:4;2364:6;2360:17;2356:27;2346:55;;2397:1;2394;2387:12;2346:55;2433:6;2420:20;2459:4;2483:60;2499:43;2539:2;2499:43;:::i;:::-;2483:60;:::i;:::-;2577:15;;;2663:1;2659:10;;;;2647:23;;2643:32;;;2608:12;;;;2687:15;;;2684:35;;;2715:1;2712;2705:12;2684:35;2751:2;2743:6;2739:15;2763:142;2779:6;2774:3;2771:15;2763:142;;;2845:17;;2833:30;;2883:12;;;;2796;;2763:142;;;-1:-1:-1;2923:5:1;2272:662;-1:-1:-1;;;;;;2272:662:1:o;2939:1215::-;3057:6;3065;3118:2;3106:9;3097:7;3093:23;3089:32;3086:52;;;3134:1;3131;3124:12;3086:52;3174:9;3161:23;3203:18;3244:2;3236:6;3233:14;3230:34;;;3260:1;3257;3250:12;3230:34;3298:6;3287:9;3283:22;3273:32;;3343:7;3336:4;3332:2;3328:13;3324:27;3314:55;;3365:1;3362;3355:12;3314:55;3401:2;3388:16;3423:4;3447:60;3463:43;3503:2;3463:43;:::i;3447:60::-;3541:15;;;3623:1;3619:10;;;;3611:19;;3607:28;;;3572:12;;;;3647:19;;;3644:39;;;3679:1;3676;3669:12;3644:39;3703:11;;;;3723:217;3739:6;3734:3;3731:15;3723:217;;;3819:3;3806:17;3836:31;3861:5;3836:31;:::i;:::-;3880:18;;3756:12;;;;3918;;;;3723:217;;;3959:5;-1:-1:-1;;4002:18:1;;3989:32;;-1:-1:-1;;4033:16:1;;;4030:36;;;4062:1;4059;4052:12;4030:36;;4085:63;4140:7;4129:8;4118:9;4114:24;4085:63;:::i;:::-;4075:73;;;2939:1215;;;;;:::o;4159:456::-;4236:6;4244;4252;4305:2;4293:9;4284:7;4280:23;4276:32;4273:52;;;4321:1;4318;4311:12;4273:52;4360:9;4347:23;4379:31;4404:5;4379:31;:::i;:::-;4429:5;-1:-1:-1;4486:2:1;4471:18;;4458:32;4499:33;4458:32;4499:33;:::i;:::-;4159:456;;4551:7;;-1:-1:-1;;;4605:2:1;4590:18;;;;4577:32;;4159:456::o;5017:247::-;5076:6;5129:2;5117:9;5108:7;5104:23;5100:32;5097:52;;;5145:1;5142;5135:12;5097:52;5184:9;5171:23;5203:31;5228:5;5203:31;:::i;:::-;5253:5;5017:247;-1:-1:-1;;;5017:247:1:o;5269:118::-;5355:5;5348:13;5341:21;5334:5;5331:32;5321:60;;5377:1;5374;5367:12;5392:377;5466:6;5474;5482;5535:2;5523:9;5514:7;5510:23;5506:32;5503:52;;;5551:1;5548;5541:12;5503:52;5587:9;5574:23;5564:33;;5644:2;5633:9;5629:18;5616:32;5606:42;;5698:2;5687:9;5683:18;5670:32;5711:28;5733:5;5711:28;:::i;:::-;5758:5;5748:15;;;5392:377;;;;;:::o;5774:316::-;5851:6;5859;5867;5920:2;5908:9;5899:7;5895:23;5891:32;5888:52;;;5936:1;5933;5926:12;5888:52;-1:-1:-1;;5959:23:1;;;6029:2;6014:18;;6001:32;;-1:-1:-1;6080:2:1;6065:18;;;6052:32;;5774:316;-1:-1:-1;5774:316:1:o;6095:388::-;6163:6;6171;6224:2;6212:9;6203:7;6199:23;6195:32;6192:52;;;6240:1;6237;6230:12;6192:52;6279:9;6266:23;6298:31;6323:5;6298:31;:::i;:::-;6348:5;-1:-1:-1;6405:2:1;6390:18;;6377:32;6418:33;6377:32;6418:33;:::i;:::-;6470:7;6460:17;;;6095:388;;;;;:::o;6488:382::-;6553:6;6561;6614:2;6602:9;6593:7;6589:23;6585:32;6582:52;;;6630:1;6627;6620:12;6582:52;6669:9;6656:23;6688:31;6713:5;6688:31;:::i;:::-;6738:5;-1:-1:-1;6795:2:1;6780:18;;6767:32;6808:30;6767:32;6808:30;:::i;6875:750::-;6967:6;6975;6983;7036:2;7024:9;7015:7;7011:23;7007:32;7004:52;;;7052:1;7049;7042:12;7004:52;7092:9;7079:23;7121:18;7162:2;7154:6;7151:14;7148:34;;;7178:1;7175;7168:12;7148:34;7216:6;7205:9;7201:22;7191:32;;7261:7;7254:4;7250:2;7246:13;7242:27;7232:55;;7283:1;7280;7273:12;7232:55;7323:2;7310:16;7349:2;7341:6;7338:14;7335:34;;;7365:1;7362;7355:12;7335:34;7420:7;7413:4;7403:6;7400:1;7396:14;7392:2;7388:23;7384:34;7381:47;7378:67;;;7441:1;7438;7431:12;7378:67;7472:4;7464:13;;;;-1:-1:-1;7496:6:1;-1:-1:-1;;7537:20:1;;7524:34;7567:28;7524:34;7567:28;:::i;7630:180::-;7689:6;7742:2;7730:9;7721:7;7717:23;7713:32;7710:52;;;7758:1;7755;7748:12;7710:52;-1:-1:-1;7781:23:1;;7630:180;-1:-1:-1;7630:180:1:o;7815:380::-;7894:1;7890:12;;;;7937;;;7958:61;;8012:4;8004:6;8000:17;7990:27;;7958:61;8065:2;8057:6;8054:14;8034:18;8031:38;8028:161;;8111:10;8106:3;8102:20;8099:1;8092:31;8146:4;8143:1;8136:15;8174:4;8171:1;8164:15;8028:161;;7815:380;;;:::o;8200:356::-;8402:2;8384:21;;;8421:18;;;8414:30;8480:34;8475:2;8460:18;;8453:62;8547:2;8532:18;;8200:356::o;9343:127::-;9404:10;9399:3;9395:20;9392:1;9385:31;9435:4;9432:1;9425:15;9459:4;9456:1;9449:15;9475:127;9536:10;9531:3;9527:20;9524:1;9517:31;9567:4;9564:1;9557:15;9591:4;9588:1;9581:15;9607:135;9646:3;9667:17;;;9664:43;;9687:18;;:::i;:::-;-1:-1:-1;9734:1:1;9723:13;;9607:135::o;10156:128::-;10196:3;10227:1;10223:6;10220:1;10217:13;10214:39;;;10233:18;;:::i;:::-;-1:-1:-1;10269:9:1;;10156:128::o;11910:184::-;11980:6;12033:2;12021:9;12012:7;12008:23;12004:32;12001:52;;;12049:1;12046;12039:12;12001:52;-1:-1:-1;12072:16:1;;11910:184;-1:-1:-1;11910:184:1:o;12099:168::-;12139:7;12205:1;12201;12197:6;12193:14;12190:1;12187:21;12182:1;12175:9;12168:17;12164:45;12161:71;;;12212:18;;:::i;:::-;-1:-1:-1;12252:9:1;;12099:168::o;12272:217::-;12312:1;12338;12328:132;;12382:10;12377:3;12373:20;12370:1;12363:31;12417:4;12414:1;12407:15;12445:4;12442:1;12435:15;12328:132;-1:-1:-1;12474:9:1;;12272:217::o;12773:245::-;12840:6;12893:2;12881:9;12872:7;12868:23;12864:32;12861:52;;;12909:1;12906;12899:12;12861:52;12941:9;12935:16;12960:28;12982:5;12960:28;:::i;18407:125::-;18447:4;18475:1;18472;18469:8;18466:34;;;18480:18;;:::i;:::-;-1:-1:-1;18517:9:1;;18407:125::o;18879:607::-;-1:-1:-1;;;;;19238:15:1;;;19220:34;;19285:2;19270:18;;19263:34;;;;19328:2;19313:18;;19306:34;;;;19371:2;19356:18;;19349:34;;;;19420:15;;;19414:3;19399:19;;19392:44;19200:3;19452:19;;19445:35;;;;19169:3;19154:19;;18879:607::o;19491:245::-;19570:6;19578;19631:2;19619:9;19610:7;19606:23;19602:32;19599:52;;;19647:1;19644;19637:12;19599:52;-1:-1:-1;;19670:16:1;;19726:2;19711:18;;;19705:25;19670:16;;19705:25;;-1:-1:-1;19491:245:1:o;20549:401::-;20751:2;20733:21;;;20790:2;20770:18;;;20763:30;20829:34;20824:2;20809:18;;20802:62;-1:-1:-1;;;20895:2:1;20880:18;;20873:35;20940:3;20925:19;;20549:401::o;20955:399::-;21157:2;21139:21;;;21196:2;21176:18;;;21169:30;21235:34;21230:2;21215:18;;21208:62;-1:-1:-1;;;21301:2:1;21286:18;;21279:33;21344:3;21329:19;;20955:399::o;22475:251::-;22545:6;22598:2;22586:9;22577:7;22573:23;22569:32;22566:52;;;22614:1;22611;22604:12;22566:52;22646:9;22640:16;22665:31;22690:5;22665:31;:::i;22731:461::-;22784:3;22822:5;22816:12;22849:6;22844:3;22837:19;22875:4;22904:2;22899:3;22895:12;22888:19;;22941:2;22934:5;22930:14;22962:1;22972:195;22986:6;22983:1;22980:13;22972:195;;;23051:13;;-1:-1:-1;;;;;23047:39:1;23035:52;;23107:12;;;;23142:15;;;;23083:1;23001:9;22972:195;;;-1:-1:-1;23183:3:1;;22731:461;-1:-1:-1;;;;;22731:461:1:o;23197:510::-;23468:6;23457:9;23450:25;23511:3;23506:2;23495:9;23491:18;23484:31;23431:4;23532:57;23584:3;23573:9;23569:19;23561:6;23532:57;:::i;:::-;-1:-1:-1;;;;;23625:32:1;;;;23620:2;23605:18;;23598:60;-1:-1:-1;23689:2:1;23674:18;23667:34;23524:65;23197:510;-1:-1:-1;;23197:510:1:o;23712:582::-;24011:6;24000:9;23993:25;24054:6;24049:2;24038:9;24034:18;24027:34;24097:3;24092:2;24081:9;24077:18;24070:31;23974:4;24118:57;24170:3;24159:9;24155:19;24147:6;24118:57;:::i;:::-;-1:-1:-1;;;;;24211:32:1;;;;24206:2;24191:18;;24184:60;-1:-1:-1;24275:3:1;24260:19;24253:35;24110:65;23712:582;-1:-1:-1;;;23712:582:1:o;24911:306::-;24999:6;25007;25015;25068:2;25056:9;25047:7;25043:23;25039:32;25036:52;;;25084:1;25081;25074:12;25036:52;25113:9;25107:16;25097:26;;25163:2;25152:9;25148:18;25142:25;25132:35;;25207:2;25196:9;25192:18;25186:25;25176:35;;24911:306;;;;;:::o

Swarm Source

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