ETH Price: $3,111.19 (-0.29%)
Gas: 6.7 Gwei

Token

Swype (SWP)
 

Overview

Max Total Supply

1,000,000,000 SWP

Holders

430

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
190,000.000000000000184632 SWP

Value
$0.00
0x52B3148508eD3a52FFF07E900603288b6ec909D5
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
SWP

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-19
*/

/**
        Twitter @CryptoSwype 
        Web http://crypto-swype.com
        TG t.me/cryptoswype
 */

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

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(
        bool confirmRenounce
    ) external virtual onlyOwner {
        require(confirmRenounce, "Please confirm renounce!");
        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 ILpPair {
    function sync() external;
}

interface IDexRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 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(
        uint256 amountIn,
        address[] calldata path
    ) external view returns (uint256[] memory amounts);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);
}

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

contract SWP is ERC20, Ownable {
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    address public operationsAddress;

    uint256 public tradingActiveBlock = 0;
    uint256 public blockForPenaltyEnd;
    mapping(address => bool) public flaggedAsBot;
    address[] public botBuyers;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public highTaxModeEnabled = true;
    bool public flagBotsEnabled = true;

    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;

    uint256 private defaultOperationsFee;
    uint256 private defaultLiquidityFee;
    uint256 private defaultOperationsSellFee;
    uint256 private defaultLiquiditySellFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event TransferForeignToken(address token, uint256 amount);

    event DisabledHighTaxModeForever();

    constructor() payable ERC20("Swype", "SWP") {
        address newOwner = msg.sender;

        address _dexRouter;

        if (block.chainid == 1) {
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if (block.chainid == 5) {
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Goerli
        } else if (block.chainid == 56) {
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BSC
        } else {
            revert("Chain not configured");
        }

        // initialize router
        dexRouter = IDexRouter(_dexRouter);

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(
            address(this),
            dexRouter.WETH()
        );
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = 1 * 1e9 * 1e18;

        maxBuyAmount = (totalSupply * 15) / 1000;
        maxSellAmount = (totalSupply * 15) / 1000;
        maxWallet = (totalSupply * 15) / 1000;
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05 %

        buyOperationsFee = 90;
        buyLiquidityFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;

        defaultOperationsFee = 0;
        defaultLiquidityFee = 0;
        defaultOperationsSellFee = 0;
        defaultLiquiditySellFee = 0;

        sellOperationsFee = 90;
        sellLiquidityFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;

        operationsAddress = address(msg.sender);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(operationsAddress), true);
        _excludeFromMaxTransaction(address(dexRouter), true);
        _excludeFromMaxTransaction(
            address(0x6C8c5525050E951214E88104914D39bD1c78FBa4),
            true
        ); // CEX/DEX
        _excludeFromMaxTransaction(
            address(0x7D288Eb6B00305be7e3C9829e3eDD1347EB7da00),
            true
        );
        _excludeFromMaxTransaction(
            address(0xE236DfD3cE57C88aea3C5916aB34C06Fc3483C27),
            true
        );
        _excludeFromMaxTransaction(
            address(0xC6a06c7E49c6e7Db6e6ac1bed735033E3ac2fFD9),
            true
        );
        _excludeFromMaxTransaction(
            address(0xe37081896190B141b6BB76a7b0BF486436500768),
            true
        );

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(operationsAddress), true);
        excludeFromFees(address(dexRouter), true);
        excludeFromFees(
            address(0x6C8c5525050E951214E88104914D39bD1c78FBa4),
            true
        ); // CEX/DEX
        excludeFromFees(
            address(0x7D288Eb6B00305be7e3C9829e3eDD1347EB7da00),
            true
        );
        excludeFromFees(
            address(0xE236DfD3cE57C88aea3C5916aB34C06Fc3483C27),
            true
        );
        excludeFromFees(
            address(0xC6a06c7E49c6e7Db6e6ac1bed735033E3ac2fFD9),
            true
        );
        excludeFromFees(
            address(0xe37081896190B141b6BB76a7b0BF486436500768),
            true
        );

        _createInitialSupply(address(this), (totalSupply * 65) / 100);
        _createInitialSupply(newOwner, (totalSupply * 6) / 100);
        _createInitialSupply(newOwner, (totalSupply * 29) / 100); // CEX DEX

        transferOwnership(newOwner);
    }

    receive() external payable {}

    function getBotBuyers() external view returns (address[] memory) {
        return botBuyers;
    }

    function unflagBot(address wallet) external onlyOwner {
        require(flaggedAsBot[wallet], "Wallet is already not flagged.");
        flaggedAsBot[wallet] = false;
    }

    function flagBot(address wallet) external onlyOwner {
        require(
            flagBotsEnabled,
            "Flag bot functionality has been disabled forever!"
        );

        require(!flaggedAsBot[wallet], "Wallet is already flagged.");
        flaggedAsBot[wallet] = true;
    }

    function disableFlagBotsForever() external onlyOwner {
        require(
            flagBotsEnabled,
            "Flag bot functionality already disabled forever!!"
        );

        flagBotsEnabled = false;
    }

    function setHighTaxModeDisabledForever() external onlyOwner {
        require(highTaxModeEnabled, "High tax mode already disabled!!");

        highTaxModeEnabled = false;
        emit DisabledHighTaxModeForever();
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function massExclude(address[] memory wallets) external onlyOwner {
        for (uint256 i = 0; i < wallets.length; i++) {
            address wallet = wallets[i];
            excludeFromFees(wallet, true);
            _excludeFromMaxTransaction(wallet, true);
        }
    }

    function _excludeFromMaxTransaction(
        address updAds,
        bool isExcluded
    ) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) external onlyOwner {
        if (!isEx) {
            require(
                updAds != lpPair,
                "Cannot remove uniswap pair from max txn"
            );
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

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

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

    function updateBuyFees(
        uint256 _operationsFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }

    function updateSellFees(
        uint256 _operationsFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;
        require(sellTotalFees <= 20, "Must keep fees at 20% or less");
    }

    function updateBuyAndSellTax(uint256 buy, uint256 sell) external onlyOwner {
        require(highTaxModeEnabled, "High tax mode disabled for ever!");

        buyOperationsFee = buy;
        buyLiquidityFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;

        sellOperationsFee = sell;
        sellLiquidityFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");

        if (!tradingActive) {
            require(
                _isExcludedFromFees[from] || _isExcludedFromFees[to],
                "Trading is not active."
            );
        }

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                if (transferDelayEnabled) {
                    if (to != address(dexRouter) && to != address(lpPair)) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[to] <
                                block.number - 2,
                            "_transfer:: Transfer Delay enabled.  Try again later."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxBuyAmount,
                        "Buy transfer amount exceeds the max buy."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max Wallet Exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxSellAmount,
                        "Sell transfer amount exceeds the max sell."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max Wallet Exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

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

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

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

                fees = (amount * 99) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForOperations +=
                    (fees * sellOperationsFee) /
                    sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

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

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

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

        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 ethForOperations = (ethBalance * tokensForOperations) /
            (totalTokensToSwap - (tokensForLiquidity / 2));

        ethForLiquidity -= ethForOperations;

        tokensForLiquidity = 0;
        tokensForOperations = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success, ) = address(operationsAddress).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) || !tradingActive,
            "Can't withdraw native tokens 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 setOperationsAddress(
        address _operationsAddress
    ) external onlyOwner {
        require(
            _operationsAddress != address(0),
            "_operationsAddress address cannot be 0"
        );
        operationsAddress = payable(_operationsAddress);
        emit UpdatedOperationsAddress(_operationsAddress);
    }

    function removeLimits() external onlyOwner {
        limitsInEffect = false;
    }

    function restoreLimits() external onlyOwner {
        limitsInEffect = true;
    }

    function enableTrading(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        require(
            blocksForPenalty <= 10,
            "Cannot make penalty blocks more than 10"
        );
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();
    }

    function removeSomeLP(uint256 percent) external onlyOwner {
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));

        require(lpBalance > 0, "No LP tokens in contract");

        uint256 lpAmount = (lpBalance * percent) / 10000;

        // 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
            msg.sender,
            block.timestamp
        );
    }

    function addLP(bool confirmAddLp) external onlyOwner {
        require(confirmAddLp, "Please confirm adding of the LP");
        require(!tradingActive, "Trading is already active, cannot relaunch.");

        // add the liquidity
        require(
            address(this).balance > 0,
            "Must have ETH on contract to launch"
        );
        require(
            balanceOf(address(this)) > 0,
            "Must have Tokens on contract to launch"
        );

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"DisabledHighTaxModeForever","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":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"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":"UpdatedOperationsAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmAddLp","type":"bool"}],"name":"addLP","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":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"botBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","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":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableFlagBotsForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"flagBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flagBotsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"flaggedAsBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBotBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"highTaxModeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"massExclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"removeSomeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmRenounce","type":"bool"}],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setHighTaxModeDisabledForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"unflagBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"name":"updateBuyAndSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600d556012805464ffffffffff19166401010000011790556014805460ff191660011790556005608090815264537779706560d81b60a052610100604052600360c08181526205357560ec1b60e052906200005d838262000a8d565b5060046200006c828262000a8d565b5050506000620000816200068960201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004490833981519152908290a35033600046600103620000e65750737a250d5630b4cf539739df2c5dacb4c659f2488d6200017d565b466005036200010b5750737a250d5630b4cf539739df2c5dacb4c659f2488d6200017d565b466038036200013057507310ed43c718714eb63d5aa57b78b54704e256024e6200017d565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fd919062000b59565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000260573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000286919062000b59565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fa919062000b59565b600a80546001600160a01b0319166001600160a01b03929092169182179055620003269060016200068d565b600a546200033f906001600160a01b03166001620006f0565b6b033b2e3c9fd0803ce80000006103e86200035c82600f62000ba1565b62000368919062000bc1565b6006556103e86200037b82600f62000ba1565b62000387919062000bc1565b6007556103e86200039a82600f62000ba1565b620003a6919062000bc1565b600855612710620003b982600562000ba1565b620003c5919062000bc1565b600b55605a601681905560006017819055620003e19162000be4565b601555600060188190556019819055601a819055601b819055605a601d819055601e82905562000412919062000be4565b601c55600c80546001600160a01b03191633179055620004348360016200068d565b620004413060016200068d565b6200045061dead60016200068d565b600c5462000469906001600160a01b031660016200068d565b60095462000482906001600160a01b031660016200068d565b620004a3736c8c5525050e951214e88104914d39bd1c78fba460016200068d565b620004c4737d288eb6b00305be7e3c9829e3edd1347eb7da0060016200068d565b620004e573e236dfd3ce57c88aea3c5916ab34c06fc3483c2760016200068d565b6200050673c6a06c7e49c6e7db6e6ac1bed735033e3ac2ffd960016200068d565b6200052773e37081896190b141b6bb76a7b0bf48643650076860016200068d565b620005348360016200075c565b620005413060016200075c565b6200055061dead60016200075c565b600c5462000569906001600160a01b031660016200075c565b60095462000582906001600160a01b031660016200075c565b620005a3736c8c5525050e951214e88104914d39bd1c78fba460016200075c565b620005c4737d288eb6b00305be7e3c9829e3edd1347eb7da0060016200075c565b620005e573e236dfd3ce57c88aea3c5916ab34c06fc3483c2760016200075c565b6200060673c6a06c7e49c6e7db6e6ac1bed735033e3ac2ffd960016200075c565b6200062773e37081896190b141b6bb76a7b0bf48643650076860016200075c565b6200064d3060646200063b84604162000ba1565b62000647919062000bc1565b62000806565b620006618360646200063b84600662000ba1565b620006758360646200063b84601d62000ba1565b6200068083620008eb565b50505062000bfa565b3390565b6001600160a01b038216600081815260226020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602360205260409020805460ff19168215151790556200072082826200068d565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620007a75760405162461bcd60e51b8152602060048201819052602482015260008051602062004470833981519152604482015260640162000174565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200085e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000174565b806002600082825462000872919062000be4565b90915550506001600160a01b03821660009081526020819052604081208054839290620008a190849062000be4565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620009365760405162461bcd60e51b8152602060048201819052602482015260008051602062004470833981519152604482015260640162000174565b6001600160a01b0381166200099d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000174565b6005546040516001600160a01b038084169216906000805160206200449083398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000a1357607f821691505b60208210810362000a3457634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a8857600081815260208120601f850160051c8101602086101562000a635750805b601f850160051c820191505b8181101562000a845782815560010162000a6f565b5050505b505050565b81516001600160401b0381111562000aa95762000aa9620009e8565b62000ac18162000aba8454620009fe565b8462000a3a565b602080601f83116001811462000af9576000841562000ae05750858301515b600019600386901b1c1916600185901b17855562000a84565b600085815260208120601f198616915b8281101562000b2a5788860151825594840194600190910190840162000b09565b508582101562000b495787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000b6c57600080fd5b81516001600160a01b038116811462000b8457600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000bbb5762000bbb62000b8b565b92915050565b60008262000bdf57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000bbb5762000bbb62000b8b565b6138668062000c0a6000396000f3fe6080604052600436106103c75760003560e01c806382aa7c68116101f2578063d5fb5b171161010d578063f11a24d3116100a0578063f8b45b051161006f578063f8b45b0514610af3578063fb002c9714610b09578063fc9e80e914610b1f578063fed20c7814610b3f57600080fd5b8063f11a24d314610a92578063f2fde38b14610aa8578063f5648a4f14610ac8578063f637434214610add57600080fd5b8063e2f45605116100dc578063e2f4560514610a31578063e884f26014610a47578063ea4cfe1214610a5c578063ee40166e14610a7c57600080fd5b8063d5fb5b1714610995578063d85ba063146109b5578063dbf4b6ef146109cb578063dd62ed3e146109eb57600080fd5b8063a62068ce11610185578063b987553911610154578063b98755391461091c578063bbc0c7421461093c578063c02466681461095b578063c876d0b91461097b57600080fd5b8063a62068ce14610896578063a9059cbb146108ac578063ab202c7a146108cc578063b62496f5146108ec57600080fd5b806395d89b41116101c157806395d89b411461082c5780639a7a23d614610841578063a28e86d314610861578063a457c2d71461087657600080fd5b806382aa7c68146107b85780638366e79a146107d857806388e765ff146107f85780638da5cb5b1461080e57600080fd5b80634a62bb65116102e25780636b0a894c11610275578063751039fc11610244578063751039fc146107415780637571336a146107565780637c08fcd0146107765780637e926b4b1461079857600080fd5b80636b0a894c146106d65780636bd62d7d146106ec5780636ddd17131461070157806370a082311461072157600080fd5b806366ca9b83116102b157806366ca9b831461066857806366d602ae146106885780636a11afc61461069e5780636a486a8e146106c057600080fd5b80634a62bb651461060b5780634f77f6c01461062557806358a6d5311461063b5780635a139dd41461065257600080fd5b806323b872dd1161035a578063395093511161032957806339509351146105965780633951e44e146105b6578063452ed4f1146105cb578063499b8394146105eb57600080fd5b806323b872dd14610519578063243c20f7146105395780632a5f43ad14610559578063313ce5671461057a57600080fd5b8063095ea7b311610396578063095ea7b31461049457806310d5de53146104b457806318160ddd146104e45780631a8145bb1461050357600080fd5b8063017e0192146103d357806302dbd8f81461041857806306fdde031461043a5780630758d9241461045c57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506104036103ee36600461329b565b600f6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561042457600080fd5b506104386104333660046132bf565b610b5f565b005b34801561044657600080fd5b5061044f610bff565b60405161040f91906132e1565b34801561046857600080fd5b5060095461047c906001600160a01b031681565b6040516001600160a01b03909116815260200161040f565b3480156104a057600080fd5b506104036104af36600461332f565b610c91565b3480156104c057600080fd5b506104036104cf36600461329b565b60226020526000908152604090205460ff1681565b3480156104f057600080fd5b506002545b60405190815260200161040f565b34801561050f57600080fd5b506104f560205481565b34801561052557600080fd5b5061040361053436600461335b565b610ca8565b34801561054557600080fd5b5061043861055436600461329b565b610d52565b34801561056557600080fd5b50601254610403906301000000900460ff1681565b34801561058657600080fd5b506040516012815260200161040f565b3480156105a257600080fd5b506104036105b136600461332f565b610e7d565b3480156105c257600080fd5b50610438610eb9565b3480156105d757600080fd5b50600a5461047c906001600160a01b031681565b3480156105f757600080fd5b5061043861060636600461329b565b610f67565b34801561061757600080fd5b506012546104039060ff1681565b34801561063157600080fd5b506104f5601d5481565b34801561064757600080fd5b50600e544310610403565b34801561065e57600080fd5b506104f560165481565b34801561067457600080fd5b506104386106833660046132bf565b611040565b34801561069457600080fd5b506104f560075481565b3480156106aa57600080fd5b506106b36110d3565b60405161040f91906133e0565b3480156106cc57600080fd5b506104f5601c5481565b3480156106e257600080fd5b506104f560115481565b3480156106f857600080fd5b50610438611134565b34801561070d57600080fd5b506012546104039062010000900460ff1681565b34801561072d57600080fd5b506104f561073c36600461329b565b6111ef565b34801561074d57600080fd5b5061043861120a565b34801561076257600080fd5b50610438610771366004613401565b611240565b34801561078257600080fd5b5060125461040390640100000000900460ff1681565b3480156107a457600080fd5b506104386107b336600461343a565b611308565b3480156107c457600080fd5b506104386107d3366004613457565b6113ca565b3480156107e457600080fd5b506104036107f3366004613470565b6114fe565b34801561080457600080fd5b506104f560065481565b34801561081a57600080fd5b506005546001600160a01b031661047c565b34801561083857600080fd5b5061044f611738565b34801561084d57600080fd5b5061043861085c366004613401565b611747565b34801561086d57600080fd5b5061043861183b565b34801561088257600080fd5b5061040361089136600461332f565b611874565b3480156108a257600080fd5b506104f5600e5481565b3480156108b857600080fd5b506104036108c736600461332f565b61190d565b3480156108d857600080fd5b506104386108e73660046134b4565b61191a565b3480156108f857600080fd5b5061040361090736600461329b565b60236020526000908152604090205460ff1681565b34801561092857600080fd5b5061043861093736600461343a565b611997565b34801561094857600080fd5b5060125461040390610100900460ff1681565b34801561096757600080fd5b50610438610976366004613401565b611be3565b34801561098757600080fd5b506014546104039060ff1681565b3480156109a157600080fd5b5061047c6109b0366004613457565b611c6c565b3480156109c157600080fd5b506104f560155481565b3480156109d757600080fd5b506104386109e6366004613457565b611c96565b3480156109f757600080fd5b506104f5610a06366004613470565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a3d57600080fd5b506104f5600b5481565b348015610a5357600080fd5b50610438611e97565b348015610a6857600080fd5b50600c5461047c906001600160a01b031681565b348015610a8857600080fd5b506104f5600d5481565b348015610a9e57600080fd5b506104f560175481565b348015610ab457600080fd5b50610438610ac336600461329b565b611ecd565b348015610ad457600080fd5b50610438611fb8565b348015610ae957600080fd5b506104f5601e5481565b348015610aff57600080fd5b506104f560085481565b348015610b1557600080fd5b506104f5601f5481565b348015610b2b57600080fd5b50610438610b3a3660046132bf565b612024565b348015610b4b57600080fd5b50610438610b5a36600461329b565b6120dd565b6005546001600160a01b03163314610b925760405162461bcd60e51b8152600401610b8990613579565b60405180910390fd5b601d829055601e819055610ba681836135c4565b601c81905560141015610bfb5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610b89565b5050565b606060038054610c0e906135d7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3a906135d7565b8015610c875780601f10610c5c57610100808354040283529160200191610c87565b820191906000526020600020905b815481529060010190602001808311610c6a57829003601f168201915b5050505050905090565b6000610c9e338484612190565b5060015b92915050565b6000610cb58484846122b4565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d3a5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b89565b610d478533858403612190565b506001949350505050565b6005546001600160a01b03163314610d7c5760405162461bcd60e51b8152600401610b8990613579565b601254640100000000900460ff16610df05760405162461bcd60e51b815260206004820152603160248201527f466c616720626f742066756e6374696f6e616c69747920686173206265656e2060448201527064697361626c656420666f72657665722160781b6064820152608401610b89565b6001600160a01b0381166000908152600f602052604090205460ff1615610e595760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610b89565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c9e918590610eb49086906135c4565b612190565b6005546001600160a01b03163314610ee35760405162461bcd60e51b8152600401610b8990613579565b601254640100000000900460ff16610f575760405162461bcd60e51b815260206004820152603160248201527f466c616720626f742066756e6374696f6e616c69747920616c72656164792064604482015270697361626c656420666f7265766572212160781b6064820152608401610b89565b6012805464ff0000000019169055565b6005546001600160a01b03163314610f915760405162461bcd60e51b8152600401610b8990613579565b6001600160a01b038116610ff65760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610b89565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b0316331461106a5760405162461bcd60e51b8152600401610b8990613579565b6016829055601781905561107e81836135c4565b6015819055600f1015610bfb5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610b89565b60606010805480602002602001604051908101604052809291908181526020018280548015610c8757602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161110d575050505050905090565b6005546001600160a01b0316331461115e5760405162461bcd60e51b8152600401610b8990613579565b6012546301000000900460ff166111b75760405162461bcd60e51b815260206004820181905260248201527f4869676820746178206d6f646520616c72656164792064697361626c656421216044820152606401610b89565b6012805463ff000000191690556040517fca3625aacc6ff58610754d78cf8e59adacd2752c6d6292edcb6068d395997ba090600090a1565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146112345760405162461bcd60e51b8152600401610b8990613579565b6012805460ff19169055565b6005546001600160a01b0316331461126a5760405162461bcd60e51b8152600401610b8990613579565b806112dd57600a546001600160a01b03908116908316036112dd5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b89565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146113325760405162461bcd60e51b8152600401610b8990613579565b8061137f5760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610b89565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b031633146113f45760405162461bcd60e51b8152600401610b8990613579565b601254610100900460ff161561144c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610b89565b600a8111156114ad5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610b89565b6012805462ffff0019166201010017905543600d8190556114cf9082906135c4565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b0316331461152b5760405162461bcd60e51b8152600401610b8990613579565b6001600160a01b0383166115815760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b89565b6001600160a01b038316301415806115a15750601254610100900460ff16155b61160a5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610b89565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611651573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116759190613611565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156116c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ec919061362a565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610c0e906135d7565b6005546001600160a01b031633146117715760405162461bcd60e51b8152600401610b8990613579565b600a546001600160a01b03908116908316036117f55760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b89565b6117ff8282612d3b565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146118655760405162461bcd60e51b8152600401610b8990613579565b6012805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118f65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b89565b6119033385858403612190565b5060019392505050565b6000610c9e3384846122b4565b6005546001600160a01b031633146119445760405162461bcd60e51b8152600401610b8990613579565b60005b8151811015610bfb57600082828151811061196457611964613647565b60200260200101519050611979816001611be3565b611984816001612d65565b508061198f8161365d565b915050611947565b6005546001600160a01b031633146119c15760405162461bcd60e51b8152600401610b8990613579565b80611a0e5760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610b89565b601254610100900460ff1615611a7a5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610b89565b60004711611ad65760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610b89565b6000611ae1306111ef565b11611b3d5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610b89565b600954611b589030906001600160a01b0316610eb4826111ef565b6009546001600160a01b031663f305d7194730611b74816111ef565b60008030426040518863ffffffff1660e01b8152600401611b9a96959493929190613676565b60606040518083038185885af1158015611bb8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611bdd91906136b1565b50505050565b6005546001600160a01b03163314611c0d5760405162461bcd60e51b8152600401610b8990613579565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60108181548110611c7c57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314611cc05760405162461bcd60e51b8152600401610b8990613579565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611d09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2d9190613611565b905060008111611d7f5760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610b89565b6000612710611d8e84846136df565b611d9891906136f6565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015611def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e13919061362a565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec90611e4e9030908590600190819033904290600401613676565b60408051808303816000875af1158015611e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e909190613718565b5050505050565b6005546001600160a01b03163314611ec15760405162461bcd60e51b8152600401610b8990613579565b6014805460ff19169055565b6005546001600160a01b03163314611ef75760405162461bcd60e51b8152600401610b8990613579565b6001600160a01b038116611f5c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b89565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611fe25760405162461bcd60e51b8152600401610b8990613579565b604051600090339047908381818185875af1925050503d8060008114611bdd576040519150601f19603f3d011682016040523d82523d6000602084013e611bdd565b6005546001600160a01b0316331461204e5760405162461bcd60e51b8152600401610b8990613579565b6012546301000000900460ff166120a75760405162461bcd60e51b815260206004820181905260248201527f4869676820746178206d6f64652064697361626c656420666f722065766572216044820152606401610b89565b6016829055600060178190556120bd90836135c4565b601555601d8190556000601e8190556120d690826135c4565b601c555050565b6005546001600160a01b031633146121075760405162461bcd60e51b8152600401610b8990613579565b6001600160a01b0381166000908152600f602052604090205460ff1661216f5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610b89565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6001600160a01b0383166121f25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b89565b6001600160a01b0382166122535760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b89565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166122da5760405162461bcd60e51b8152600401610b899061373c565b6001600160a01b0382166123005760405162461bcd60e51b8152600401610b8990613781565b600081116123505760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b89565b601254610100900460ff166123e3576001600160a01b03831660009081526021602052604090205460ff168061239e57506001600160a01b03821660009081526021602052604090205460ff165b6123e35760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b89565b600e5443101580156123fc5750601254610100900460ff165b156124cc576001600160a01b0383166000908152600f602052604090205460ff16158061243657506005546001600160a01b038381169116145b8061244b57506001600160a01b03821661dead145b6124cc5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610b89565b60125460ff16156128aa576005546001600160a01b0384811691161480159061250357506005546001600160a01b03838116911614155b801561251a57506001600160a01b03821661dead14155b801561253f57506001600160a01b03831660009081526021602052604090205460ff16155b801561256457506001600160a01b03821660009081526021602052604090205460ff16155b156128aa5760145460ff161561267d576009546001600160a01b038381169116148015906125a05750600a546001600160a01b03838116911614155b1561267d576125b06002436137c4565b326000908152601360205260409020541080156125ee57506125d36002436137c4565b6001600160a01b038316600090815260136020526040902054105b6126585760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610b89565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526023602052604090205460ff1680156126be57506001600160a01b03821660009081526022602052604090205460ff16155b15612785576006548111156127265760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b89565b600854612732836111ef565b61273c90836135c4565b11156127805760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b89565b6128aa565b6001600160a01b03821660009081526023602052604090205460ff1680156127c657506001600160a01b03831660009081526022602052604090205460ff16155b15612830576007548111156127805760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b89565b6001600160a01b03821660009081526022602052604090205460ff166128aa5760085461285c836111ef565b61286690836135c4565b11156128aa5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b89565b60006128b5306111ef565b600b54909150811080159081906128d4575060125462010000900460ff165b80156128ea5750600a54600160a01b900460ff16155b801561290e57506001600160a01b03841660009081526023602052604090205460ff165b1561293c57600a805460ff60a01b1916600160a01b17905561292e612dc8565b600a805460ff60a01b191690555b6001600160a01b03851660009081526021602052604090205460019060ff168061297e57506001600160a01b03851660009081526021602052604090205460ff165b15612987575060005b60008115612d2757600e544310806129cd5750670c7d713b49da00006006546129b091906137c4565b85101580156129cd575043600e5460086129ca91906135c4565b10155b80156129f157506001600160a01b03871660009081526023602052604090205460ff165b8015612a1657506001600160a01b03861660009081526023602052604090205460ff16155b8015612a3b57506001600160a01b03861660009081526021602052604090205460ff16155b8015612a4957506000601554115b15612bd057600e544310612a7057600160066000828254612a6a91906137c4565b90915550505b6001600160a01b0386166000908152600f602052604090205460ff16612b50576001600160a01b0386166000908152600f60205260408120805460ff191660019081179091556011805491929091612ac99084906135c4565b9091555050601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612b5d8660636136df565b612b6791906136f6565b905060155460175482612b7a91906136df565b612b8491906136f6565b60206000828254612b9591906135c4565b9091555050601554601654612baa90836136df565b612bb491906136f6565b601f6000828254612bc591906135c4565b90915550612d099050565b6001600160a01b03861660009081526023602052604090205460ff168015612bfa57506000601c54115b15612c5c576064601c5486612c0f91906136df565b612c1991906136f6565b9050601c54601e5482612c2c91906136df565b612c3691906136f6565b60206000828254612c4791906135c4565b9091555050601c54601d54612baa90836136df565b6001600160a01b03871660009081526023602052604090205460ff168015612c8657506000601554115b15612d0957606460155486612c9b91906136df565b612ca591906136f6565b905060155460175482612cb891906136df565b612cc291906136f6565b60206000828254612cd391906135c4565b9091555050601554601654612ce890836136df565b612cf291906136f6565b601f6000828254612d0391906135c4565b90915550505b8015612d1a57612d1a873083612f2a565b612d2481866137c4565b94505b612d32878787612f2a565b50505050505050565b6001600160a01b0382166000908152602360205260409020805460ff19168215151790556117ff82825b6001600160a01b038216600081815260226020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6000612dd3306111ef565b90506000601f54602054612de791906135c4565b9050811580612df4575080155b15612dfd575050565b600b54612e0b90600f6136df565b821115612e2357600b54612e2090600f6136df565b91505b60008060028360205486612e3791906136df565b612e4191906136f6565b612e4b91906136f6565b9050612e5f612e5a82866137c4565b61307f565b60205447908190600090612e75906002906136f6565b612e7f90876137c4565b601f54612e8c90856136df565b612e9691906136f6565b9050612ea281836137c4565b60006020819055601f5591508315801590612ebd5750600082115b15612ecc57612ecc84836131d9565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612f19576040519150601f19603f3d011682016040523d82523d6000602084013e612f1e565b606091505b50505050505050505050565b6001600160a01b038316612f505760405162461bcd60e51b8152600401610b899061373c565b6001600160a01b038216612f765760405162461bcd60e51b8152600401610b8990613781565b6001600160a01b03831660009081526020819052604090205481811015612fee5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b89565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906130259084906135c4565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161307191815260200190565b60405180910390a350505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130b4576130b4613647565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561310d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061313191906137d7565b8160018151811061314457613144613647565b6001600160a01b03928316602091820292909201015260095461316a9130911684612190565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906131a39085906000908690309042906004016137f4565b600060405180830381600087803b1580156131bd57600080fd5b505af11580156131d1573d6000803e3d6000fd5b505050505050565b6009546131f19030906001600160a01b031684612190565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906132309030908790600090819061dead904290600401613676565b60606040518083038185885af115801561324e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e9091906136b1565b6001600160a01b038116811461328857600080fd5b50565b803561329681613273565b919050565b6000602082840312156132ad57600080fd5b81356132b881613273565b9392505050565b600080604083850312156132d257600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561330e578581018301518582016040015282016132f2565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561334257600080fd5b823561334d81613273565b946020939093013593505050565b60008060006060848603121561337057600080fd5b833561337b81613273565b9250602084013561338b81613273565b929592945050506040919091013590565b600081518084526020808501945080840160005b838110156133d55781516001600160a01b0316875295820195908201906001016133b0565b509495945050505050565b6020815260006132b8602083018461339c565b801515811461328857600080fd5b6000806040838503121561341457600080fd5b823561341f81613273565b9150602083013561342f816133f3565b809150509250929050565b60006020828403121561344c57600080fd5b81356132b8816133f3565b60006020828403121561346957600080fd5b5035919050565b6000806040838503121561348357600080fd5b823561348e81613273565b9150602083013561342f81613273565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156134c757600080fd5b823567ffffffffffffffff808211156134df57600080fd5b818501915085601f8301126134f357600080fd5b8135818111156135055761350561349e565b8060051b604051601f19603f8301168101818110858211171561352a5761352a61349e565b60405291825284820192508381018501918883111561354857600080fd5b938501935b8285101561356d5761355e8561328b565b8452938501939285019261354d565b98975050505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ca257610ca26135ae565b600181811c908216806135eb57607f821691505b60208210810361360b57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561362357600080fd5b5051919050565b60006020828403121561363c57600080fd5b81516132b8816133f3565b634e487b7160e01b600052603260045260246000fd5b60006001820161366f5761366f6135ae565b5060010190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156136c657600080fd5b8351925060208401519150604084015190509250925092565b8082028115828204841417610ca257610ca26135ae565b60008261371357634e487b7160e01b600052601260045260246000fd5b500490565b6000806040838503121561372b57600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ca257610ca26135ae565b6000602082840312156137e957600080fd5b81516132b881613273565b85815284602082015260a06040820152600061381360a083018661339c565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220c26fad9d8ed3eae24b94a31e4908bda73662fd43f9139d64bde5c3ec3a7a52e664736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806382aa7c68116101f2578063d5fb5b171161010d578063f11a24d3116100a0578063f8b45b051161006f578063f8b45b0514610af3578063fb002c9714610b09578063fc9e80e914610b1f578063fed20c7814610b3f57600080fd5b8063f11a24d314610a92578063f2fde38b14610aa8578063f5648a4f14610ac8578063f637434214610add57600080fd5b8063e2f45605116100dc578063e2f4560514610a31578063e884f26014610a47578063ea4cfe1214610a5c578063ee40166e14610a7c57600080fd5b8063d5fb5b1714610995578063d85ba063146109b5578063dbf4b6ef146109cb578063dd62ed3e146109eb57600080fd5b8063a62068ce11610185578063b987553911610154578063b98755391461091c578063bbc0c7421461093c578063c02466681461095b578063c876d0b91461097b57600080fd5b8063a62068ce14610896578063a9059cbb146108ac578063ab202c7a146108cc578063b62496f5146108ec57600080fd5b806395d89b41116101c157806395d89b411461082c5780639a7a23d614610841578063a28e86d314610861578063a457c2d71461087657600080fd5b806382aa7c68146107b85780638366e79a146107d857806388e765ff146107f85780638da5cb5b1461080e57600080fd5b80634a62bb65116102e25780636b0a894c11610275578063751039fc11610244578063751039fc146107415780637571336a146107565780637c08fcd0146107765780637e926b4b1461079857600080fd5b80636b0a894c146106d65780636bd62d7d146106ec5780636ddd17131461070157806370a082311461072157600080fd5b806366ca9b83116102b157806366ca9b831461066857806366d602ae146106885780636a11afc61461069e5780636a486a8e146106c057600080fd5b80634a62bb651461060b5780634f77f6c01461062557806358a6d5311461063b5780635a139dd41461065257600080fd5b806323b872dd1161035a578063395093511161032957806339509351146105965780633951e44e146105b6578063452ed4f1146105cb578063499b8394146105eb57600080fd5b806323b872dd14610519578063243c20f7146105395780632a5f43ad14610559578063313ce5671461057a57600080fd5b8063095ea7b311610396578063095ea7b31461049457806310d5de53146104b457806318160ddd146104e45780631a8145bb1461050357600080fd5b8063017e0192146103d357806302dbd8f81461041857806306fdde031461043a5780630758d9241461045c57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506104036103ee36600461329b565b600f6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561042457600080fd5b506104386104333660046132bf565b610b5f565b005b34801561044657600080fd5b5061044f610bff565b60405161040f91906132e1565b34801561046857600080fd5b5060095461047c906001600160a01b031681565b6040516001600160a01b03909116815260200161040f565b3480156104a057600080fd5b506104036104af36600461332f565b610c91565b3480156104c057600080fd5b506104036104cf36600461329b565b60226020526000908152604090205460ff1681565b3480156104f057600080fd5b506002545b60405190815260200161040f565b34801561050f57600080fd5b506104f560205481565b34801561052557600080fd5b5061040361053436600461335b565b610ca8565b34801561054557600080fd5b5061043861055436600461329b565b610d52565b34801561056557600080fd5b50601254610403906301000000900460ff1681565b34801561058657600080fd5b506040516012815260200161040f565b3480156105a257600080fd5b506104036105b136600461332f565b610e7d565b3480156105c257600080fd5b50610438610eb9565b3480156105d757600080fd5b50600a5461047c906001600160a01b031681565b3480156105f757600080fd5b5061043861060636600461329b565b610f67565b34801561061757600080fd5b506012546104039060ff1681565b34801561063157600080fd5b506104f5601d5481565b34801561064757600080fd5b50600e544310610403565b34801561065e57600080fd5b506104f560165481565b34801561067457600080fd5b506104386106833660046132bf565b611040565b34801561069457600080fd5b506104f560075481565b3480156106aa57600080fd5b506106b36110d3565b60405161040f91906133e0565b3480156106cc57600080fd5b506104f5601c5481565b3480156106e257600080fd5b506104f560115481565b3480156106f857600080fd5b50610438611134565b34801561070d57600080fd5b506012546104039062010000900460ff1681565b34801561072d57600080fd5b506104f561073c36600461329b565b6111ef565b34801561074d57600080fd5b5061043861120a565b34801561076257600080fd5b50610438610771366004613401565b611240565b34801561078257600080fd5b5060125461040390640100000000900460ff1681565b3480156107a457600080fd5b506104386107b336600461343a565b611308565b3480156107c457600080fd5b506104386107d3366004613457565b6113ca565b3480156107e457600080fd5b506104036107f3366004613470565b6114fe565b34801561080457600080fd5b506104f560065481565b34801561081a57600080fd5b506005546001600160a01b031661047c565b34801561083857600080fd5b5061044f611738565b34801561084d57600080fd5b5061043861085c366004613401565b611747565b34801561086d57600080fd5b5061043861183b565b34801561088257600080fd5b5061040361089136600461332f565b611874565b3480156108a257600080fd5b506104f5600e5481565b3480156108b857600080fd5b506104036108c736600461332f565b61190d565b3480156108d857600080fd5b506104386108e73660046134b4565b61191a565b3480156108f857600080fd5b5061040361090736600461329b565b60236020526000908152604090205460ff1681565b34801561092857600080fd5b5061043861093736600461343a565b611997565b34801561094857600080fd5b5060125461040390610100900460ff1681565b34801561096757600080fd5b50610438610976366004613401565b611be3565b34801561098757600080fd5b506014546104039060ff1681565b3480156109a157600080fd5b5061047c6109b0366004613457565b611c6c565b3480156109c157600080fd5b506104f560155481565b3480156109d757600080fd5b506104386109e6366004613457565b611c96565b3480156109f757600080fd5b506104f5610a06366004613470565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a3d57600080fd5b506104f5600b5481565b348015610a5357600080fd5b50610438611e97565b348015610a6857600080fd5b50600c5461047c906001600160a01b031681565b348015610a8857600080fd5b506104f5600d5481565b348015610a9e57600080fd5b506104f560175481565b348015610ab457600080fd5b50610438610ac336600461329b565b611ecd565b348015610ad457600080fd5b50610438611fb8565b348015610ae957600080fd5b506104f5601e5481565b348015610aff57600080fd5b506104f560085481565b348015610b1557600080fd5b506104f5601f5481565b348015610b2b57600080fd5b50610438610b3a3660046132bf565b612024565b348015610b4b57600080fd5b50610438610b5a36600461329b565b6120dd565b6005546001600160a01b03163314610b925760405162461bcd60e51b8152600401610b8990613579565b60405180910390fd5b601d829055601e819055610ba681836135c4565b601c81905560141015610bfb5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610b89565b5050565b606060038054610c0e906135d7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3a906135d7565b8015610c875780601f10610c5c57610100808354040283529160200191610c87565b820191906000526020600020905b815481529060010190602001808311610c6a57829003601f168201915b5050505050905090565b6000610c9e338484612190565b5060015b92915050565b6000610cb58484846122b4565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d3a5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b89565b610d478533858403612190565b506001949350505050565b6005546001600160a01b03163314610d7c5760405162461bcd60e51b8152600401610b8990613579565b601254640100000000900460ff16610df05760405162461bcd60e51b815260206004820152603160248201527f466c616720626f742066756e6374696f6e616c69747920686173206265656e2060448201527064697361626c656420666f72657665722160781b6064820152608401610b89565b6001600160a01b0381166000908152600f602052604090205460ff1615610e595760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610b89565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c9e918590610eb49086906135c4565b612190565b6005546001600160a01b03163314610ee35760405162461bcd60e51b8152600401610b8990613579565b601254640100000000900460ff16610f575760405162461bcd60e51b815260206004820152603160248201527f466c616720626f742066756e6374696f6e616c69747920616c72656164792064604482015270697361626c656420666f7265766572212160781b6064820152608401610b89565b6012805464ff0000000019169055565b6005546001600160a01b03163314610f915760405162461bcd60e51b8152600401610b8990613579565b6001600160a01b038116610ff65760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610b89565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b0316331461106a5760405162461bcd60e51b8152600401610b8990613579565b6016829055601781905561107e81836135c4565b6015819055600f1015610bfb5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610b89565b60606010805480602002602001604051908101604052809291908181526020018280548015610c8757602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161110d575050505050905090565b6005546001600160a01b0316331461115e5760405162461bcd60e51b8152600401610b8990613579565b6012546301000000900460ff166111b75760405162461bcd60e51b815260206004820181905260248201527f4869676820746178206d6f646520616c72656164792064697361626c656421216044820152606401610b89565b6012805463ff000000191690556040517fca3625aacc6ff58610754d78cf8e59adacd2752c6d6292edcb6068d395997ba090600090a1565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146112345760405162461bcd60e51b8152600401610b8990613579565b6012805460ff19169055565b6005546001600160a01b0316331461126a5760405162461bcd60e51b8152600401610b8990613579565b806112dd57600a546001600160a01b03908116908316036112dd5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b89565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146113325760405162461bcd60e51b8152600401610b8990613579565b8061137f5760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610b89565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b031633146113f45760405162461bcd60e51b8152600401610b8990613579565b601254610100900460ff161561144c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610b89565b600a8111156114ad5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610b89565b6012805462ffff0019166201010017905543600d8190556114cf9082906135c4565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b0316331461152b5760405162461bcd60e51b8152600401610b8990613579565b6001600160a01b0383166115815760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b89565b6001600160a01b038316301415806115a15750601254610100900460ff16155b61160a5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610b89565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611651573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116759190613611565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156116c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ec919061362a565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610c0e906135d7565b6005546001600160a01b031633146117715760405162461bcd60e51b8152600401610b8990613579565b600a546001600160a01b03908116908316036117f55760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b89565b6117ff8282612d3b565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146118655760405162461bcd60e51b8152600401610b8990613579565b6012805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118f65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b89565b6119033385858403612190565b5060019392505050565b6000610c9e3384846122b4565b6005546001600160a01b031633146119445760405162461bcd60e51b8152600401610b8990613579565b60005b8151811015610bfb57600082828151811061196457611964613647565b60200260200101519050611979816001611be3565b611984816001612d65565b508061198f8161365d565b915050611947565b6005546001600160a01b031633146119c15760405162461bcd60e51b8152600401610b8990613579565b80611a0e5760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610b89565b601254610100900460ff1615611a7a5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610b89565b60004711611ad65760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610b89565b6000611ae1306111ef565b11611b3d5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610b89565b600954611b589030906001600160a01b0316610eb4826111ef565b6009546001600160a01b031663f305d7194730611b74816111ef565b60008030426040518863ffffffff1660e01b8152600401611b9a96959493929190613676565b60606040518083038185885af1158015611bb8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611bdd91906136b1565b50505050565b6005546001600160a01b03163314611c0d5760405162461bcd60e51b8152600401610b8990613579565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60108181548110611c7c57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314611cc05760405162461bcd60e51b8152600401610b8990613579565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611d09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2d9190613611565b905060008111611d7f5760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610b89565b6000612710611d8e84846136df565b611d9891906136f6565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015611def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e13919061362a565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec90611e4e9030908590600190819033904290600401613676565b60408051808303816000875af1158015611e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e909190613718565b5050505050565b6005546001600160a01b03163314611ec15760405162461bcd60e51b8152600401610b8990613579565b6014805460ff19169055565b6005546001600160a01b03163314611ef75760405162461bcd60e51b8152600401610b8990613579565b6001600160a01b038116611f5c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b89565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611fe25760405162461bcd60e51b8152600401610b8990613579565b604051600090339047908381818185875af1925050503d8060008114611bdd576040519150601f19603f3d011682016040523d82523d6000602084013e611bdd565b6005546001600160a01b0316331461204e5760405162461bcd60e51b8152600401610b8990613579565b6012546301000000900460ff166120a75760405162461bcd60e51b815260206004820181905260248201527f4869676820746178206d6f64652064697361626c656420666f722065766572216044820152606401610b89565b6016829055600060178190556120bd90836135c4565b601555601d8190556000601e8190556120d690826135c4565b601c555050565b6005546001600160a01b031633146121075760405162461bcd60e51b8152600401610b8990613579565b6001600160a01b0381166000908152600f602052604090205460ff1661216f5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610b89565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6001600160a01b0383166121f25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b89565b6001600160a01b0382166122535760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b89565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166122da5760405162461bcd60e51b8152600401610b899061373c565b6001600160a01b0382166123005760405162461bcd60e51b8152600401610b8990613781565b600081116123505760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b89565b601254610100900460ff166123e3576001600160a01b03831660009081526021602052604090205460ff168061239e57506001600160a01b03821660009081526021602052604090205460ff165b6123e35760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b89565b600e5443101580156123fc5750601254610100900460ff165b156124cc576001600160a01b0383166000908152600f602052604090205460ff16158061243657506005546001600160a01b038381169116145b8061244b57506001600160a01b03821661dead145b6124cc5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610b89565b60125460ff16156128aa576005546001600160a01b0384811691161480159061250357506005546001600160a01b03838116911614155b801561251a57506001600160a01b03821661dead14155b801561253f57506001600160a01b03831660009081526021602052604090205460ff16155b801561256457506001600160a01b03821660009081526021602052604090205460ff16155b156128aa5760145460ff161561267d576009546001600160a01b038381169116148015906125a05750600a546001600160a01b03838116911614155b1561267d576125b06002436137c4565b326000908152601360205260409020541080156125ee57506125d36002436137c4565b6001600160a01b038316600090815260136020526040902054105b6126585760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610b89565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526023602052604090205460ff1680156126be57506001600160a01b03821660009081526022602052604090205460ff16155b15612785576006548111156127265760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b89565b600854612732836111ef565b61273c90836135c4565b11156127805760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b89565b6128aa565b6001600160a01b03821660009081526023602052604090205460ff1680156127c657506001600160a01b03831660009081526022602052604090205460ff16155b15612830576007548111156127805760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b89565b6001600160a01b03821660009081526022602052604090205460ff166128aa5760085461285c836111ef565b61286690836135c4565b11156128aa5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b89565b60006128b5306111ef565b600b54909150811080159081906128d4575060125462010000900460ff165b80156128ea5750600a54600160a01b900460ff16155b801561290e57506001600160a01b03841660009081526023602052604090205460ff165b1561293c57600a805460ff60a01b1916600160a01b17905561292e612dc8565b600a805460ff60a01b191690555b6001600160a01b03851660009081526021602052604090205460019060ff168061297e57506001600160a01b03851660009081526021602052604090205460ff165b15612987575060005b60008115612d2757600e544310806129cd5750670c7d713b49da00006006546129b091906137c4565b85101580156129cd575043600e5460086129ca91906135c4565b10155b80156129f157506001600160a01b03871660009081526023602052604090205460ff165b8015612a1657506001600160a01b03861660009081526023602052604090205460ff16155b8015612a3b57506001600160a01b03861660009081526021602052604090205460ff16155b8015612a4957506000601554115b15612bd057600e544310612a7057600160066000828254612a6a91906137c4565b90915550505b6001600160a01b0386166000908152600f602052604090205460ff16612b50576001600160a01b0386166000908152600f60205260408120805460ff191660019081179091556011805491929091612ac99084906135c4565b9091555050601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612b5d8660636136df565b612b6791906136f6565b905060155460175482612b7a91906136df565b612b8491906136f6565b60206000828254612b9591906135c4565b9091555050601554601654612baa90836136df565b612bb491906136f6565b601f6000828254612bc591906135c4565b90915550612d099050565b6001600160a01b03861660009081526023602052604090205460ff168015612bfa57506000601c54115b15612c5c576064601c5486612c0f91906136df565b612c1991906136f6565b9050601c54601e5482612c2c91906136df565b612c3691906136f6565b60206000828254612c4791906135c4565b9091555050601c54601d54612baa90836136df565b6001600160a01b03871660009081526023602052604090205460ff168015612c8657506000601554115b15612d0957606460155486612c9b91906136df565b612ca591906136f6565b905060155460175482612cb891906136df565b612cc291906136f6565b60206000828254612cd391906135c4565b9091555050601554601654612ce890836136df565b612cf291906136f6565b601f6000828254612d0391906135c4565b90915550505b8015612d1a57612d1a873083612f2a565b612d2481866137c4565b94505b612d32878787612f2a565b50505050505050565b6001600160a01b0382166000908152602360205260409020805460ff19168215151790556117ff82825b6001600160a01b038216600081815260226020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6000612dd3306111ef565b90506000601f54602054612de791906135c4565b9050811580612df4575080155b15612dfd575050565b600b54612e0b90600f6136df565b821115612e2357600b54612e2090600f6136df565b91505b60008060028360205486612e3791906136df565b612e4191906136f6565b612e4b91906136f6565b9050612e5f612e5a82866137c4565b61307f565b60205447908190600090612e75906002906136f6565b612e7f90876137c4565b601f54612e8c90856136df565b612e9691906136f6565b9050612ea281836137c4565b60006020819055601f5591508315801590612ebd5750600082115b15612ecc57612ecc84836131d9565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612f19576040519150601f19603f3d011682016040523d82523d6000602084013e612f1e565b606091505b50505050505050505050565b6001600160a01b038316612f505760405162461bcd60e51b8152600401610b899061373c565b6001600160a01b038216612f765760405162461bcd60e51b8152600401610b8990613781565b6001600160a01b03831660009081526020819052604090205481811015612fee5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b89565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906130259084906135c4565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161307191815260200190565b60405180910390a350505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130b4576130b4613647565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561310d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061313191906137d7565b8160018151811061314457613144613647565b6001600160a01b03928316602091820292909201015260095461316a9130911684612190565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906131a39085906000908690309042906004016137f4565b600060405180830381600087803b1580156131bd57600080fd5b505af11580156131d1573d6000803e3d6000fd5b505050505050565b6009546131f19030906001600160a01b031684612190565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906132309030908790600090819061dead904290600401613676565b60606040518083038185885af115801561324e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e9091906136b1565b6001600160a01b038116811461328857600080fd5b50565b803561329681613273565b919050565b6000602082840312156132ad57600080fd5b81356132b881613273565b9392505050565b600080604083850312156132d257600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561330e578581018301518582016040015282016132f2565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561334257600080fd5b823561334d81613273565b946020939093013593505050565b60008060006060848603121561337057600080fd5b833561337b81613273565b9250602084013561338b81613273565b929592945050506040919091013590565b600081518084526020808501945080840160005b838110156133d55781516001600160a01b0316875295820195908201906001016133b0565b509495945050505050565b6020815260006132b8602083018461339c565b801515811461328857600080fd5b6000806040838503121561341457600080fd5b823561341f81613273565b9150602083013561342f816133f3565b809150509250929050565b60006020828403121561344c57600080fd5b81356132b8816133f3565b60006020828403121561346957600080fd5b5035919050565b6000806040838503121561348357600080fd5b823561348e81613273565b9150602083013561342f81613273565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156134c757600080fd5b823567ffffffffffffffff808211156134df57600080fd5b818501915085601f8301126134f357600080fd5b8135818111156135055761350561349e565b8060051b604051601f19603f8301168101818110858211171561352a5761352a61349e565b60405291825284820192508381018501918883111561354857600080fd5b938501935b8285101561356d5761355e8561328b565b8452938501939285019261354d565b98975050505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ca257610ca26135ae565b600181811c908216806135eb57607f821691505b60208210810361360b57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561362357600080fd5b5051919050565b60006020828403121561363c57600080fd5b81516132b8816133f3565b634e487b7160e01b600052603260045260246000fd5b60006001820161366f5761366f6135ae565b5060010190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156136c657600080fd5b8351925060208401519150604084015190509250925092565b8082028115828204841417610ca257610ca26135ae565b60008261371357634e487b7160e01b600052601260045260246000fd5b500490565b6000806040838503121561372b57600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ca257610ca26135ae565b6000602082840312156137e957600080fd5b81516132b881613273565b85815284602082015260a06040820152600061381360a083018661339c565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220c26fad9d8ed3eae24b94a31e4908bda73662fd43f9139d64bde5c3ec3a7a52e664736f6c63430008130033

Deployed Bytecode Sourcemap

10621:21716:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11018:44;;;;;;;;;;-1:-1:-1;11018:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;706:14:1;;699:22;681:41;;669:2;654:18;11018:44:0;;;;;;;;19666:346;;;;;;;;;;-1:-1:-1;19666:346:0;;;;;:::i;:::-;;:::i;:::-;;4137:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10761:27::-;;;;;;;;;;-1:-1:-1;10761:27:0;;;;-1:-1:-1;;;;;10761:27:0;;;;;;-1:-1:-1;;;;;1721:32:1;;;1703:51;;1691:2;1676:18;10761:27:0;1539:221:1;5117:194:0;;;;;;;;;;-1:-1:-1;5117:194:0;;;;;:::i;:::-;;:::i;12007:63::-;;;;;;;;;;-1:-1:-1;12007:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4458:108;;;;;;;;;;-1:-1:-1;4546:12:0;;4458:108;;;2231:25:1;;;2219:2;2204:18;4458:108:0;2085:177:1;11906:33:0;;;;;;;;;;;;;;;;5319:529;;;;;;;;;;-1:-1:-1;5319:529:0;;;;;:::i;:::-;;:::i;16912:296::-;;;;;;;;;;-1:-1:-1;16912:296:0;;;;;:::i;:::-;;:::i;11254:37::-;;;;;;;;;;-1:-1:-1;11254:37:0;;;;;;;;;;;4357:93;;;;;;;;;;-1:-1:-1;4357:93:0;;4440:2;2870:36:1;;2858:2;2843:18;4357:93:0;2728:184:1;5856:290:0;;;;;;;;;;-1:-1:-1;5856:290:0;;;;;:::i;:::-;;:::i;17216:222::-;;;;;;;;;;;;;:::i;10795:21::-;;;;;;;;;;-1:-1:-1;10795:21:0;;;;-1:-1:-1;;;;;10795:21:0;;;29782:350;;;;;;;;;;-1:-1:-1;29782:350:0;;;;;:::i;:::-;;:::i;11136:33::-;;;;;;;;;;-1:-1:-1;11136:33:0;;;;;;;;11786:32;;;;;;;;;;;;;;;;26457:121;;;;;;;;;;-1:-1:-1;26552:18:0;;26537:12;:33;26457:121;;11494:31;;;;;;;;;;;;;;;;19319:339;;;;;;;;;;-1:-1:-1;19319:339:0;;;;;:::i;:::-;;:::i;10693:28::-;;;;;;;;;;;;;;;;16621:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11751:28::-;;;;;;;;;;;;;;;;11102:25;;;;;;;;;;;;;;;;17446:225;;;;;;;;;;;;;:::i;11216:31::-;;;;;;;;;;-1:-1:-1;11216:31:0;;;;;;;;;;;4574:143;;;;;;;;;;-1:-1:-1;4574:143:0;;;;;:::i;:::-;;:::i;30140:84::-;;;;;;;;;;;;;:::i;18368:336::-;;;;;;;;;;-1:-1:-1;18368:336:0;;;;;:::i;:::-;;:::i;11298:34::-;;;;;;;;;;-1:-1:-1;11298:34:0;;;;;;;;;;;8565:249;;;;;;;;;;-1:-1:-1;8565:249:0;;;;;:::i;:::-;;:::i;30324:464::-;;;;;;;;;;-1:-1:-1;30324:464:0;;;;;:::i;:::-;;:::i;28959:560::-;;;;;;;;;;-1:-1:-1;28959:560:0;;;;;:::i;:::-;;:::i;10659:27::-;;;;;;;;;;;;;;;;8351:79;;;;;;;;;;-1:-1:-1;8416:6:0;;-1:-1:-1;;;;;8416:6:0;8351:79;;4245:104;;;;;;;;;;;;;:::i;18712:355::-;;;;;;;;;;-1:-1:-1;18712:355:0;;;;;:::i;:::-;;:::i;30232:84::-;;;;;;;;;;;;;:::i;6154:475::-;;;;;;;;;;-1:-1:-1;6154:475:0;;;;;:::i;:::-;;:::i;10978:33::-;;;;;;;;;;;;;;;;4725:200;;;;;;;;;;-1:-1:-1;4725:200:0;;;;;:::i;:::-;;:::i;17838:282::-;;;;;;;;;;-1:-1:-1;17838:282:0;;;;;:::i;:::-;;:::i;12077:57::-;;;;;;;;;;-1:-1:-1;12077:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31473:861;;;;;;;;;;-1:-1:-1;31473:861:0;;;;;:::i;:::-;;:::i;11176:33::-;;;;;;;;;;-1:-1:-1;11176:33:0;;;;;;;;;;;20441:182;;;;;;;;;;-1:-1:-1;20441:182:0;;;;;:::i;:::-;;:::i;11412:39::-;;;;;;;;;;-1:-1:-1;11412:39:0;;;;;;;;11069:26;;;;;;;;;;-1:-1:-1;11069:26:0;;;;;:::i;:::-;;:::i;11460:27::-;;;;;;;;;;;;;;;;30796:669;;;;;;;;;;-1:-1:-1;30796:669:0;;;;;:::i;:::-;;:::i;4933:176::-;;;;;;;;;;-1:-1:-1;4933:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;5074:18:0;;;5047:7;5074:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4933:176;10853:33;;;;;;;;;;;;;;;;17732:98;;;;;;;;;;;;;:::i;10893:32::-;;;;;;;;;;-1:-1:-1;10893:32:0;;;;-1:-1:-1;;;;;10893:32:0;;;10934:37;;;;;;;;;;;;;;;;11532:30;;;;;;;;;;;;;;;;8822:281;;;;;;;;;;-1:-1:-1;8822:281:0;;;;;:::i;:::-;;:::i;29589:185::-;;;;;;;;;;;;;:::i;11825:31::-;;;;;;;;;;;;;;;;10728:24;;;;;;;;;;;;;;;;11865:34;;;;;;;;;;;;;;;;20020:413;;;;;;;;;;-1:-1:-1;20020:413:0;;;;;:::i;:::-;;:::i;16729:175::-;;;;;;;;;;-1:-1:-1;16729:175:0;;;;;:::i;:::-;;:::i;19666:346::-;8478:6;;-1:-1:-1;;;;;8478:6:0;282:10;8478:22;8470:67;;;;-1:-1:-1;;;8470:67:0;;;;;;;:::i;:::-;;;;;;;;;19792:17:::1;:34:::0;;;19837:16:::1;:32:::0;;;19896:36:::1;19856:13:::0;19812:14;19896:36:::1;:::i;:::-;19880:13;:52:::0;;;19968:2:::1;-1:-1:-1::0;19951:19:0::1;19943:61;;;::::0;-1:-1:-1;;;19943:61:0;;7274:2:1;19943:61:0::1;::::0;::::1;7256:21:1::0;7313:2;7293:18;;;7286:30;7352:31;7332:18;;;7325:59;7401:18;;19943:61:0::1;7072:353:1::0;19943:61:0::1;19666:346:::0;;:::o;4137:100::-;4191:13;4224:5;4217:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4137:100;:::o;5117:194::-;5225:4;5242:39;282:10;5265:7;5274:6;5242:8;:39::i;:::-;-1:-1:-1;5299:4:0;5117:194;;;;;:::o;5319:529::-;5459:4;5476:36;5486:6;5494:9;5505:6;5476:9;:36::i;:::-;-1:-1:-1;;;;;5552:19:0;;5525:24;5552:19;;;:11;:19;;;;;;;;282:10;5552:33;;;;;;;;5618:26;;;;5596:116;;;;-1:-1:-1;;;5596:116:0;;8017:2:1;5596:116:0;;;7999:21:1;8056:2;8036:18;;;8029:30;8095:34;8075:18;;;8068:62;-1:-1:-1;;;8146:18:1;;;8139:38;8194:19;;5596:116:0;7815:404:1;5596:116:0;5748:57;5757:6;282:10;5798:6;5779:16;:25;5748:8;:57::i;:::-;-1:-1:-1;5836:4:0;;5319:529;-1:-1:-1;;;;5319:529:0:o;16912:296::-;8478:6;;-1:-1:-1;;;;;8478:6:0;282:10;8478:22;8470:67;;;;-1:-1:-1;;;8470:67:0;;;;;;;:::i;:::-;16997:15:::1;::::0;;;::::1;;;16975:114;;;::::0;-1:-1:-1;;;16975:114:0;;8426:2:1;16975:114:0::1;::::0;::::1;8408:21:1::0;8465:2;8445:18;;;8438:30;8504:34;8484:18;;;8477:62;-1:-1:-1;;;8555:18:1;;;8548:47;8612:19;;16975:114:0::1;8224:413:1::0;16975:114:0::1;-1:-1:-1::0;;;;;17111:20:0;::::1;;::::0;;;:12:::1;:20;::::0;;;;;::::1;;17110:21;17102:60;;;::::0;-1:-1:-1;;;17102:60:0;;8844:2:1;17102:60:0::1;::::0;::::1;8826:21:1::0;8883:2;8863:18;;;8856:30;8922:28;8902:18;;;8895:56;8968:18;;17102:60:0::1;8642:350:1::0;17102:60:0::1;-1:-1:-1::0;;;;;17173:20:0::1;;::::0;;;:12:::1;:20;::::0;;;;:27;;-1:-1:-1;;17173:27:0::1;17196:4;17173:27;::::0;;16912:296::o;5856:290::-;282:10;5969:4;6058:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6058:34:0;;;;;;;;;;5969:4;;5986:130;;6036:7;;6058:47;;6095:10;;6058:47;:::i;:::-;5986:8;:130::i;17216:222::-;8478:6;;-1:-1:-1;;;;;8478:6:0;282:10;8478:22;8470:67;;;;-1:-1:-1;;;8470:67:0;;;;;;;:::i;:::-;17302:15:::1;::::0;;;::::1;;;17280:114;;;::::0;-1:-1:-1;;;17280:114:0;;9199:2:1;17280:114:0::1;::::0;::::1;9181:21:1::0;9238:2;9218:18;;;9211:30;9277:34;9257:18;;;9250:62;-1:-1:-1;;;9328:18:1;;;9321:47;9385:19;;17280:114:0::1;8997:413:1::0;17280:114:0::1;17407:15;:23:::0;;-1:-1:-1;;17407:23:0::1;::::0;;17216:222::o;29782:350::-;8478:6;;-1:-1:-1;;;;;8478:6:0;282:10;8478:22;8470:67;;;;-1:-1:-1;;;8470:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29908:32:0;::::1;29886:120;;;::::0;-1:-1:-1;;;29886:120:0;;9617:2:1;29886:120:0::1;::::0;::::1;9599:21:1::0;9656:2;9636:18;;;9629:30;9695:34;9675:18;;;9668:62;-1:-1:-1;;;9746:18:1;;;9739:36;9792:19;;29886:120:0::1;9415:402:1::0;29886:120:0::1;30017:17;:47:::0;;-1:-1:-1;;;;;;30017:47:0::1;-1:-1:-1::0;;;;;30017:47:0;::::1;::::0;;::::1;::::0;;;30080:44:::1;::::0;::::1;::::0;-1:-1:-1;;30080:44:0::1;29782:350:::0;:::o;19319:339::-;8478:6;;-1:-1:-1;;;;;8478:6:0;282:10;8478:22;8470:67;;;;-1:-1:-1;;;8470:67:0;;;;;;;:::i;:::-;19444:16:::1;:33:::0;;;19488:15:::1;:31:::0;;;19545:34:::1;19506:13:::0;19463:14;19545:34:::1;:::i;:::-;19530:12;:49:::0;;;19614:2:::1;-1:-1:-1::0;19598:18:0::1;19590:60;;;::::0;-1:-1:-1;;;19590:60:0;;10024:2:1;19590:60:0::1;::::0;::::1;10006:21:1::0;10063:2;10043:18;;;10036:30;10102:31;10082:18;;;10075:59;10151:18;;19590:60:0::1;9822:353:1::0;16621:100:0;16668:16;16704:9;16697:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16697:16:0;;;;;;;;;;;;;;;;;;;;;;16621:100;:::o;17446:225::-;8478:6;;-1:-1:-1;;;;;8478:6:0;282:10;8478:22;8470:67;;;;-1:-1:-1;;;8470:67:0;;;;;;;:::i;:::-;17525:18:::1;::::0;;;::::1;;;17517:63;;;::::0;-1:-1:-1;;;17517:63:0;;10382:2:1;17517:63:0::1;::::0;::::1;10364:21:1::0;;;10401:18;;;10394:30;10460:34;10440:18;;;10433:62;10512:18;;17517:63:0::1;10180:356:1::0;17517:63:0::1;17593:18;:26:::0;;-1:-1:-1;;17593:26:0::1;::::0;;17635:28:::1;::::0;::::1;::::0;17614:5:::1;::::0;17635:28:::1;17446:225::o:0;4574:143::-;-1:-1:-1;;;;;4691:18:0;4664:7;4691:18;;;;;;;;;;;;4574:143::o;30140:84::-;8478:6;;-1:-1:-1;;;;;8478:6:0;282:10;8478:22;8470:67;;;;-1:-1:-1;;;8470:67:0;;;;;;;:::i;:::-;30194:14:::1;:22:::0;;-1:-1:-1;;30194:22:0::1;::::0;;30140:84::o;18368:336::-;8478:6;;-1:-1:-1;;;;;8478:6:0;282:10;8478:22;8470:67;;;;-1:-1:-1;;;8470:67:0;;;;;;;:::i;:::-;18490:4:::1;18485:155;;18547:6;::::0;-1:-1:-1;;;;;18547:6:0;;::::1;18537:16:::0;;::::1;::::0;18511:117:::1;;;::::0;-1:-1:-1;;;18511:117:0;;10743:2:1;18511:117:0::1;::::0;::::1;10725:21:1::0;10782:2;10762:18;;;10755:30;10821:34;10801:18;;;10794:62;-1:-1:-1;;;10872:18:1;;;10865:37;10919:19;;18511:117:0::1;10541:403:1::0;18511:117:0::1;-1:-1:-1::0;;;;;18650:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;18650:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18368:336::o;8565:249::-;8478:6;;-1:-1:-1;;;;;8478:6:0;282:10;8478:22;8470:67;;;;-1:-1:-1;;;8470:67:0;;;;;;;:::i;:::-;8676:15:::1;8668:52;;;::::0;-1:-1:-1;;;8668:52:0;;11151:2:1;8668:52:0::1;::::0;::::1;11133:21:1::0;11190:2;11170:18;;;11163:30;11229:26;11209:18;;;11202:54;11273:18;;8668:52:0::1;10949:348:1::0;8668:52:0::1;8757:6;::::0;8736:40:::1;::::0;8773:1:::1;::::0;-1:-1:-1;;;;;8757:6:0::1;::::0;8736:40:::1;::::0;8773:1;;8736:40:::1;-1:-1:-1::0;8787:6:0::1;:19:::0;;-1:-1:-1;;;;;;8787:19:0::1;::::0;;8565:249::o;30324:464::-;8478:6;;-1:-1:-1;;;;;8478:6:0;282:10;8478:22;8470:67;;;;-1:-1:-1;;;8470:67:0;;;;;;;:::i;:::-;30412:13:::1;::::0;::::1;::::0;::::1;;;30411:14;30403:50;;;::::0;-1:-1:-1;;;30403:50:0;;11504:2:1;30403:50:0::1;::::0;::::1;11486:21:1::0;11543:2;11523:18;;;11516:30;11582:25;11562:18;;;11555:53;11625:18;;30403:50:0::1;11302:347:1::0;30403:50:0::1;30506:2;30486:16;:22;;30464:111;;;::::0;-1:-1:-1;;;30464:111:0;;11856:2:1;30464:111:0::1;::::0;::::1;11838:21:1::0;11895:2;11875:18;;;11868:30;11934:34;11914:18;;;11907:62;-1:-1:-1;;;11985:18:1;;;11978:37;12032:19;;30464:111:0::1;11654:403:1::0;30464:111:0::1;30586:13;:20:::0;;-1:-1:-1;;30617:18:0;;;;;30667:12:::1;30646:18;:33:::0;;;30711:37:::1;::::0;30732:16;;30711:37:::1;:::i;:::-;30690:18;:58:::0;30764:16:::1;::::0;::::1;::::0;;;::::1;30324:464:::0;:::o;28959:560::-;8478:6;;29071:10;;-1:-1:-1;;;;;8478:6:0;282:10;8478:22;8470:67;;;;-1:-1:-1;;;8470:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29102:20:0;::::1;29094:59;;;::::0;-1:-1:-1;;;29094:59:0;;12264:2:1;29094:59:0::1;::::0;::::1;12246:21:1::0;12303:2;12283:18;;;12276:30;12342:28;12322:18;;;12315:56;12388:18;;29094:59:0::1;12062:350:1::0;29094:59:0::1;-1:-1:-1::0;;;;;29186:23:0;::::1;29204:4;29186:23;;::::0;:41:::1;;-1:-1:-1::0;29214:13:0::1;::::0;::::1;::::0;::::1;;;29213:14;29186:41;29164:143;;;::::0;-1:-1:-1;;;29164:143:0;;12619:2:1;29164:143:0::1;::::0;::::1;12601:21:1::0;12658:2;12638:18;;;12631:30;12697:34;12677:18;;;12670:62;-1:-1:-1;;;12748:18:1;;;12741:50;12808:19;;29164:143:0::1;12417:416:1::0;29164:143:0::1;29345:39;::::0;-1:-1:-1;;;29345:39:0;;29378:4:::1;29345:39;::::0;::::1;1703:51:1::0;29318:24:0::1;::::0;-1:-1:-1;;;;;29345:24:0;::::1;::::0;::::1;::::0;1676:18:1;;29345:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29403:46;::::0;-1:-1:-1;;;29403:46:0;;-1:-1:-1;;;;;13219:32:1;;;29403:46:0::1;::::0;::::1;13201:51:1::0;13268:18;;;13261:34;;;29318:66:0;;-1:-1:-1;29403:23:0;;::::1;::::0;::::1;::::0;13174:18:1;;29403:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29465;::::0;;-1:-1:-1;;;;;13219:32:1;;13201:51;;13283:2;13268:18;;13261:34;;;29395:54:0;;-1:-1:-1;29465:46:0::1;::::0;13174:18:1;29465:46:0::1;;;;;;;29083:436;28959:560:::0;;;;:::o;4245:104::-;4301:13;4334:7;4327:14;;;;;:::i;18712:355::-;8478:6;;-1:-1:-1;;;;;8478:6:0;282:10;8478:22;8470:67;;;;-1:-1:-1;;;8470:67:0;;;;;;;:::i;:::-;18860:6:::1;::::0;-1:-1:-1;;;;;18860:6:0;;::::1;18852:14:::0;;::::1;::::0;18830:121:::1;;;::::0;-1:-1:-1;;;18830:121:0;;13758:2:1;18830:121:0::1;::::0;::::1;13740:21:1::0;13797:2;13777:18;;;13770:30;13836:34;13816:18;;;13809:62;13907:27;13887:18;;;13880:55;13952:19;;18830:121:0::1;13556:421:1::0;18830:121:0::1;18962:41;18991:4;18997:5;18962:28;:41::i;:::-;19019:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;19019:40:0;::::1;::::0;::::1;::::0;;;::::1;18712:355:::0;;:::o;30232:84::-;8478:6;;-1:-1:-1;;;;;8478:6:0;282:10;8478:22;8470:67;;;;-1:-1:-1;;;8470:67:0;;;;;;;:::i;:::-;30287:14:::1;:21:::0;;-1:-1:-1;;30287:21:0::1;30304:4;30287:21;::::0;;30232:84::o;6154:475::-;282:10;6272:4;6316:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6316:34:0;;;;;;;;;;6383:35;;;;6361:122;;;;-1:-1:-1;;;6361:122:0;;14184:2:1;6361:122:0;;;14166:21:1;14223:2;14203:18;;;14196:30;14262:34;14242:18;;;14235:62;-1:-1:-1;;;14313:18:1;;;14306:35;14358:19;;6361:122:0;13982:401:1;6361:122:0;6519:67;282:10;6542:7;6570:15;6551:16;:34;6519:8;:67::i;:::-;-1:-1:-1;6617:4:0;;6154:475;-1:-1:-1;;;6154:475:0:o;4725:200::-;4836:4;4853:42;282:10;4877:9;4888:6;4853:9;:42::i;17838:282::-;8478:6;;-1:-1:-1;;;;;8478:6:0;282:10;8478:22;8470:67;;;;-1:-1:-1;;;8470:67:0;;;;;;;:::i;:::-;17920:9:::1;17915:198;17939:7;:14;17935:1;:18;17915:198;;;17975:14;17992:7;18000:1;17992:10;;;;;;;;:::i;:::-;;;;;;;17975:27;;18017:29;18033:6;18041:4;18017:15;:29::i;:::-;18061:40;18088:6;18096:4;18061:26;:40::i;:::-;-1:-1:-1::0;17955:3:0;::::1;::::0;::::1;:::i;:::-;;;;17915:198;;31473:861:::0;8478:6;;-1:-1:-1;;;;;8478:6:0;282:10;8478:22;8470:67;;;;-1:-1:-1;;;8470:67:0;;;;;;;:::i;:::-;31545:12:::1;31537:56;;;::::0;-1:-1:-1;;;31537:56:0;;14862:2:1;31537:56:0::1;::::0;::::1;14844:21:1::0;14901:2;14881:18;;;14874:30;14940:33;14920:18;;;14913:61;14991:18;;31537:56:0::1;14660:355:1::0;31537:56:0::1;31613:13;::::0;::::1;::::0;::::1;;;31612:14;31604:70;;;::::0;-1:-1:-1;;;31604:70:0;;15222:2:1;31604:70:0::1;::::0;::::1;15204:21:1::0;15261:2;15241:18;;;15234:30;15300:34;15280:18;;;15273:62;-1:-1:-1;;;15351:18:1;;;15344:41;15402:19;;31604:70:0::1;15020:407:1::0;31604:70:0::1;31763:1;31739:21;:25;31717:110;;;::::0;-1:-1:-1;;;31717:110:0;;15634:2:1;31717:110:0::1;::::0;::::1;15616:21:1::0;15673:2;15653:18;;;15646:30;15712:34;15692:18;;;15685:62;-1:-1:-1;;;15763:18:1;;;15756:33;15806:19;;31717:110:0::1;15432:399:1::0;31717:110:0::1;31887:1;31860:24;31878:4;31860:9;:24::i;:::-;:28;31838:116;;;::::0;-1:-1:-1;;;31838:116:0;;16038:2:1;31838:116:0::1;::::0;::::1;16020:21:1::0;16077:2;16057:18;;;16050:30;16116:34;16096:18;;;16089:62;-1:-1:-1;;;16167:18:1;;;16160:36;16213:19;;31838:116:0::1;15836:402:1::0;31838:116:0::1;31999:9;::::0;31967:69:::1;::::0;31984:4:::1;::::0;-1:-1:-1;;;;;31999:9:0::1;32011:24;31984:4:::0;32011:9:::1;:24::i;31967:69::-;32049:9;::::0;-1:-1:-1;;;;;32049:9:0::1;:25;32082:21;32127:4;32147:24;32127:4:::0;32147:9:::1;:24::i;:::-;32186:1;32229::::0;32280:4:::1;32300:15;32049:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31473:861:::0;:::o;20441:182::-;8478:6;;-1:-1:-1;;;;;8478:6:0;282:10;8478:22;8470:67;;;;-1:-1:-1;;;8470:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20526:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20526:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20581:34;;681:41:1;;;20581:34:0::1;::::0;654:18:1;20581:34:0::1;;;;;;;20441:182:::0;;:::o;11069:26::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11069:26:0;;-1:-1:-1;11069:26:0;:::o;30796:669::-;8478:6;;-1:-1:-1;;;;;8478:6:0;282:10;8478:22;8470:67;;;;-1:-1:-1;;;8470:67:0;;;;;;;:::i;:::-;30892:6:::1;::::0;30885:39:::1;::::0;-1:-1:-1;;;30885:39:0;;30918:4:::1;30885:39;::::0;::::1;1703:51:1::0;30865:17:0::1;::::0;-1:-1:-1;;;;;30892:6:0::1;::::0;30885:24:::1;::::0;1676:18:1;;30885:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30865:59;;30957:1;30945:9;:13;30937:50;;;::::0;-1:-1:-1;;;30937:50:0;;17368:2:1;30937:50:0::1;::::0;::::1;17350:21:1::0;17407:2;17387:18;;;17380:30;17446:26;17426:18;;;17419:54;17490:18;;30937:50:0::1;17166:348:1::0;30937:50:0::1;31000:16;31043:5;31020:19;31032:7:::0;31020:9;:19:::1;:::i;:::-;31019:29;;;;:::i;:::-;31135:6;::::0;31159:9:::1;::::0;31128:52:::1;::::0;-1:-1:-1;;;31128:52:0;;-1:-1:-1;;;;;31159:9:0;;::::1;31128:52;::::0;::::1;13201:51:1::0;13268:18;;;13261:34;;;31000:48:0;;-1:-1:-1;31135:6:0::1;::::0;31128:22:::1;::::0;13174:18:1;;31128:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;31226:9:0::1;::::0;:231:::1;::::0;-1:-1:-1;;;31226:231:0;;-1:-1:-1;;;;;31226:9:0;;::::1;::::0;:28:::1;::::0;:231:::1;::::0;31277:4:::1;::::0;31297:8;;31226:9;;;;31406:10:::1;::::0;31431:15:::1;::::0;31226:231:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30854:611;;30796:669:::0;:::o;17732:98::-;8478:6;;-1:-1:-1;;;;;8478:6:0;282:10;8478:22;8470:67;;;;-1:-1:-1;;;8470:67:0;;;;;;;:::i;:::-;17794:20:::1;:28:::0;;-1:-1:-1;;17794:28:0::1;::::0;;17732:98::o;8822:281::-;8478:6;;-1:-1:-1;;;;;8478:6:0;282:10;8478:22;8470:67;;;;-1:-1:-1;;;8470:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8925:22:0;::::1;8903:110;;;::::0;-1:-1:-1;;;8903:110:0;;18978:2:1;8903:110:0::1;::::0;::::1;18960:21:1::0;19017:2;18997:18;;;18990:30;19056:34;19036:18;;;19029:62;-1:-1:-1;;;19107:18:1;;;19100:36;19153:19;;8903:110:0::1;18776:402:1::0;8903:110:0::1;9050:6;::::0;9029:38:::1;::::0;-1:-1:-1;;;;;9029:38:0;;::::1;::::0;9050:6:::1;::::0;9029:38:::1;::::0;9050:6:::1;::::0;9029:38:::1;9078:6;:17:::0;;-1:-1:-1;;;;;;9078:17:0::1;-1:-1:-1::0;;;;;9078:17:0;;;::::1;::::0;;;::::1;::::0;;8822:281::o;29589:185::-;8478:6;;-1:-1:-1;;;;;8478:6:0;282:10;8478:22;8470:67;;;;-1:-1:-1;;;8470:67:0;;;;;;;:::i;:::-;29684:82:::1;::::0;29647:12:::1;::::0;29692:10:::1;::::0;29716:21:::1;::::0;29647:12;29684:82;29647:12;29684:82;29716:21;29692:10;29684:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20020:413:::0;8478:6;;-1:-1:-1;;;;;8478:6:0;282:10;8478:22;8470:67;;;;-1:-1:-1;;;8470:67:0;;;;;;;:::i;:::-;20114:18:::1;::::0;;;::::1;;;20106:63;;;::::0;-1:-1:-1;;;20106:63:0;;19595:2:1;20106:63:0::1;::::0;::::1;19577:21:1::0;;;19614:18;;;19607:30;19673:34;19653:18;;;19646:62;19725:18;;20106:63:0::1;19393:356:1::0;20106:63:0::1;20182:16;:22:::0;;;20233:1:::1;20215:15;:19:::0;;;20260:34:::1;::::0;20201:3;20260:34:::1;:::i;:::-;20245:12;:49:::0;20307:17:::1;:24:::0;;;-1:-1:-1;20342:16:0::1;:20:::0;;;20389:36:::1;::::0;20327:4;20389:36:::1;:::i;:::-;20373:13;:52:::0;-1:-1:-1;;20020:413:0:o;16729:175::-;8478:6;;-1:-1:-1;;;;;8478:6:0;282:10;8478:22;8470:67;;;;-1:-1:-1;;;8470:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16802:20:0;::::1;;::::0;;;:12:::1;:20;::::0;;;;;::::1;;16794:63;;;::::0;-1:-1:-1;;;16794:63:0;;19956:2:1;16794:63:0::1;::::0;::::1;19938:21:1::0;19995:2;19975:18;;;19968:30;20034:32;20014:18;;;20007:60;20084:18;;16794:63:0::1;19754:354:1::0;16794:63:0::1;-1:-1:-1::0;;;;;16868:20:0::1;16891:5;16868:20:::0;;;:12:::1;:20;::::0;;;;:28;;-1:-1:-1;;16868:28:0::1;::::0;;16729:175::o;7620:380::-;-1:-1:-1;;;;;7756:19:0;;7748:68;;;;-1:-1:-1;;;7748:68:0;;20315:2:1;7748:68:0;;;20297:21:1;20354:2;20334:18;;;20327:30;20393:34;20373:18;;;20366:62;-1:-1:-1;;;20444:18:1;;;20437:34;20488:19;;7748:68:0;20113:400:1;7748:68:0;-1:-1:-1;;;;;7835:21:0;;7827:68;;;;-1:-1:-1;;;7827:68:0;;20720:2:1;7827:68:0;;;20702:21:1;20759:2;20739:18;;;20732:30;20798:34;20778:18;;;20771:62;-1:-1:-1;;;20849:18:1;;;20842:32;20891:19;;7827:68:0;20518:398:1;7827:68:0;-1:-1:-1;;;;;7908:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7960:32;;2231:25:1;;;7960:32:0;;2204:18:1;7960:32:0;;;;;;;7620:380;;;:::o;20631:5818::-;-1:-1:-1;;;;;20763:18:0;;20755:68;;;;-1:-1:-1;;;20755:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20842:16:0;;20834:64;;;;-1:-1:-1;;;20834:64:0;;;;;;;:::i;:::-;20926:1;20917:6;:10;20909:52;;;;-1:-1:-1;;;20909:52:0;;21933:2:1;20909:52:0;;;21915:21:1;21972:2;21952:18;;;21945:30;22011:31;21991:18;;;21984:59;22060:18;;20909:52:0;21731:353:1;20909:52:0;20979:13;;;;;;;20974:183;;-1:-1:-1;;;;;21035:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;21064:23:0;;;;;;:19;:23;;;;;;;;21035:52;21009:136;;;;-1:-1:-1;;;21009:136:0;;22291:2:1;21009:136:0;;;22273:21:1;22330:2;22310:18;;;22303:30;-1:-1:-1;;;22349:18:1;;;22342:52;22411:18;;21009:136:0;22089:346:1;21009:136:0;26552:18;;26537:12;:33;21173:26;:43;;;;-1:-1:-1;21203:13:0;;;;;;;21173:43;21169:269;;;-1:-1:-1;;;;;21260:18:0;;;;;;:12;:18;;;;;;;;21259:19;;:36;;-1:-1:-1;8416:6:0;;-1:-1:-1;;;;;21282:13:0;;;8416:6;;21282:13;21259:36;:61;;;-1:-1:-1;;;;;;21299:21:0;;21313:6;21299:21;21259:61;21233:193;;;;-1:-1:-1;;;21233:193:0;;22642:2:1;21233:193:0;;;22624:21:1;22681:2;22661:18;;;22654:30;22720:34;22700:18;;;22693:62;22791:34;22771:18;;;22764:62;-1:-1:-1;;;22842:19:1;;;22835:37;22889:19;;21233:193:0;22440:474:1;21233:193:0;21454:14;;;;21450:2148;;;8416:6;;-1:-1:-1;;;;;21507:15:0;;;8416:6;;21507:15;;;;:49;;-1:-1:-1;8416:6:0;;-1:-1:-1;;;;;21543:13:0;;;8416:6;;21543:13;;21507:49;:91;;;;-1:-1:-1;;;;;;21577:21:0;;21591:6;21577:21;;21507:91;:138;;;;-1:-1:-1;;;;;;21620:25:0;;;;;;:19;:25;;;;;;;;21619:26;21507:138;:183;;;;-1:-1:-1;;;;;;21667:23:0;;;;;;:19;:23;;;;;;;;21666:24;21507:183;21485:2102;;;21729:20;;;;21725:692;;;21792:9;;-1:-1:-1;;;;;21778:24:0;;;21792:9;;21778:24;;;;:49;;-1:-1:-1;21820:6:0;;-1:-1:-1;;;;;21806:21:0;;;21820:6;;21806:21;;21778:49;21774:624;;;21969:16;21984:1;21969:12;:16;:::i;:::-;21923:9;21894:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;22090:16:0;22105:1;22090:12;:16;:::i;:::-;-1:-1:-1;;;;;22022:32:0;;;;;;:28;:32;;;;;;:84;21894:212;21856:363;;;;-1:-1:-1;;;21856:363:0;;23254:2:1;21856:363:0;;;23236:21:1;23293:2;23273:18;;;23266:30;23332:34;23312:18;;;23305:62;-1:-1:-1;;;23383:18:1;;;23376:51;23444:19;;21856:363:0;23052:417:1;21856:363:0;22275:9;22246:39;;;;:28;:39;;;;;;22288:12;22246:54;;;;-1:-1:-1;;;;;22327:32:0;;;;;;:47;21774:624;-1:-1:-1;;;;;22491:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;22548:35:0;;;;;;:31;:35;;;;;;;;22547:36;22491:92;22465:1107;;;22670:12;;22660:6;:22;;22626:148;;;;-1:-1:-1;;;22626:148:0;;23676:2:1;22626:148:0;;;23658:21:1;23715:2;23695:18;;;23688:30;23754:34;23734:18;;;23727:62;-1:-1:-1;;;23805:18:1;;;23798:38;23853:19;;22626:148:0;23474:404:1;22626:148:0;22857:9;;22840:13;22850:2;22840:9;:13::i;:::-;22831:22;;:6;:22;:::i;:::-;:35;;22797:140;;;;-1:-1:-1;;;22797:140:0;;24085:2:1;22797:140:0;;;24067:21:1;24124:2;24104:18;;;24097:30;-1:-1:-1;;;24143:18:1;;;24136:49;24202:18;;22797:140:0;23883:343:1;22797:140:0;22465:1107;;;-1:-1:-1;;;;;23035:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;23090:37:0;;;;;;:31;:37;;;;;;;;23089:38;23035:92;23009:563;;;23214:13;;23204:6;:23;;23170:151;;;;-1:-1:-1;;;23170:151:0;;24433:2:1;23170:151:0;;;24415:21:1;24472:2;24452:18;;;24445:30;24511:34;24491:18;;;24484:62;-1:-1:-1;;;24562:18:1;;;24555:40;24612:19;;23170:151:0;24231:406:1;23009:563:0;-1:-1:-1;;;;;23352:35:0;;;;;;:31;:35;;;;;;;;23347:225;;23472:9;;23455:13;23465:2;23455:9;:13::i;:::-;23446:22;;:6;:22;:::i;:::-;:35;;23412:140;;;;-1:-1:-1;;;23412:140:0;;24085:2:1;23412:140:0;;;24067:21:1;24124:2;24104:18;;;24097:30;-1:-1:-1;;;24143:18:1;;;24136:49;24202:18;;23412:140:0;23883:343:1;23412:140:0;23610:28;23641:24;23659:4;23641:9;:24::i;:::-;23717:18;;23610:55;;-1:-1:-1;23693:42:0;;;;;;;23766:22;;-1:-1:-1;23777:11:0;;;;;;;23766:22;:35;;;;-1:-1:-1;23793:8:0;;-1:-1:-1;;;23793:8:0;;;;23792:9;23766:35;:68;;;;-1:-1:-1;;;;;;23805:29:0;;;;;;:25;:29;;;;;;;;23766:68;23748:196;;;23861:8;:15;;-1:-1:-1;;;;23861:15:0;-1:-1:-1;;;23861:15:0;;;23891:10;:8;:10::i;:::-;23916:8;:16;;-1:-1:-1;;;;23916:16:0;;;23748:196;-1:-1:-1;;;;;24075:25:0;;23956:12;24075:25;;;:19;:25;;;;;;23971:4;;24075:25;;;:52;;-1:-1:-1;;;;;;24104:23:0;;;;;;:19;:23;;;;;;;;24075:52;24071:100;;;-1:-1:-1;24154:5:0;24071:100;24183:12;24288:7;24284:2112;;;26552:18;;26537:12;:33;24371:152;;;;24447:8;24432:12;;:23;;;;:::i;:::-;24422:6;:33;;:100;;;;;24510:12;24484:18;;24505:1;24484:22;;;;:::i;:::-;:38;;24422:100;24370:206;;;;-1:-1:-1;;;;;;24545:31:0;;;;;;:25;:31;;;;;;;;24370:206;:257;;;;-1:-1:-1;;;;;;24598:29:0;;;;;;:25;:29;;;;;;;;24597:30;24370:257;:302;;;;-1:-1:-1;;;;;;24649:23:0;;;;;;:19;:23;;;;;;;;24648:24;24370:302;:339;;;;;24708:1;24693:12;;:16;24370:339;24348:1899;;;26552:18;;26537:12;:33;24744:332;;25055:1;25039:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;24744:332:0;-1:-1:-1;;;;;25101:16:0;;;;;;:12;:16;;;;;;;;25096:216;;-1:-1:-1;;;;;25142:16:0;;;;;;:12;:16;;;;;:23;;-1:-1:-1;;25142:23:0;25161:4;25142:23;;;;;;25188:10;:15;;25161:4;;25188:10;;:15;;25161:4;;25188:15;:::i;:::-;;;;-1:-1:-1;;25226:9:0;:18;;;;;;;-1:-1:-1;25226:18:0;;;;;;;;-1:-1:-1;;;;;;25226:18:0;-1:-1:-1;;;;;25226:18:0;;;;;;;;25272:20;;1703:51:1;;;25272:20:0;;1691:2:1;1676:18;25272:20:0;;;;;;;25096:216;25355:3;25340:11;:6;25349:2;25340:11;:::i;:::-;25339:19;;;;:::i;:::-;25332:26;;25426:12;;25407:15;;25400:4;:22;;;;:::i;:::-;25399:39;;;;:::i;:::-;25377:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25508:12:0;;25488:16;;25481:23;;:4;:23;:::i;:::-;25480:40;;;;:::i;:::-;25457:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;24348:1899:0;;-1:-1:-1;24348:1899:0;;-1:-1:-1;;;;;25583:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;25632:1;25616:13;;:17;25583:50;25579:668;;;25688:3;25671:13;;25662:6;:22;;;;:::i;:::-;25661:30;;;;:::i;:::-;25654:37;;25760:13;;25740:16;;25733:4;:23;;;;:::i;:::-;25732:41;;;;:::i;:::-;25710:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25886:13:0;;25844:17;;25837:24;;:4;:24;:::i;25579:668::-;-1:-1:-1;;;;;25961:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;26011:1;25996:12;;:16;25961:51;25957:290;;;26066:3;26050:12;;26041:6;:21;;;;:::i;:::-;26040:29;;;;:::i;:::-;26033:36;;26137:12;;26118:15;;26111:4;:22;;;;:::i;:::-;26110:39;;;;:::i;:::-;26088:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26219:12:0;;26199:16;;26192:23;;:4;:23;:::i;:::-;26191:40;;;;:::i;:::-;26168:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25957:290:0;26267:8;;26263:91;;26296:42;26312:4;26326;26333;26296:15;:42::i;:::-;26370:14;26380:4;26370:14;;:::i;:::-;;;24284:2112;26408:33;26424:4;26430:2;26434:6;26408:15;:33::i;:::-;20744:5705;;;;20631:5818;;;:::o;19075:236::-;-1:-1:-1;;;;;19158:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;19158:39:0;;;;;;;19208;19158:31;:39;18128:232;-1:-1:-1;;;;;18241:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;18241:52:0;;;;;;;;;;18309:43;;24810:51:1;;;24877:18;;;24870:50;18309:43:0;;24783:18:1;18309:43:0;;;;;;;18128:232;;:::o;27682:1269::-;27721:23;27747:24;27765:4;27747:9;:24::i;:::-;27721:50;;27782:25;27831:19;;27810:18;;:40;;;;:::i;:::-;27782:68;-1:-1:-1;27867:20:0;;;:46;;-1:-1:-1;27891:22:0;;27867:46;27863:85;;;27930:7;;27682:1269::o;27863:85::-;27982:18;;:23;;28003:2;27982:23;:::i;:::-;27964:15;:41;27960:115;;;28040:18;;:23;;28061:2;28040:23;:::i;:::-;28022:41;;27960:115;28087:12;28161:23;28274:1;28241:17;28206:18;;28188:15;:36;;;;:::i;:::-;28187:71;;;;:::i;:::-;:88;;;;:::i;:::-;28161:114;-1:-1:-1;28288:51:0;28305:33;28161:114;28305:15;:33;:::i;:::-;28288:16;:51::i;:::-;28553:18;;28373:21;;;;28352:18;;28553:22;;28574:1;;28553:22;:::i;:::-;28532:44;;:17;:44;:::i;:::-;28495:19;;28482:32;;:10;:32;:::i;:::-;28481:96;;;;:::i;:::-;28454:123;-1:-1:-1;28590:35:0;28454:123;28590:35;;:::i;:::-;28659:1;28638:18;:22;;;28671:19;:23;28590:35;-1:-1:-1;28711:19:0;;;;;:42;;;28752:1;28734:15;:19;28711:42;28707:121;;;28770:46;28783:15;28800;28770:12;:46::i;:::-;28862:17;;28854:89;;-1:-1:-1;;;;;28862:17:0;;;;28907:21;;28854:89;;;;28907:21;28862:17;28854:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;27682:1269:0:o;6637:651::-;-1:-1:-1;;;;;6777:20:0;;6769:70;;;;-1:-1:-1;;;6769:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6858:23:0;;6850:71;;;;-1:-1:-1;;;6850:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6958:17:0;;6934:21;6958:17;;;;;;;;;;;7008:23;;;;6986:111;;;;-1:-1:-1;;;6986:111:0;;25133:2:1;6986:111:0;;;25115:21:1;25172:2;25152:18;;;25145:30;25211:34;25191:18;;;25184:62;-1:-1:-1;;;25262:18:1;;;25255:36;25308:19;;6986:111:0;24931:402:1;6986:111:0;-1:-1:-1;;;;;7133:17:0;;;:9;:17;;;;;;;;;;;7153:22;;;7133:42;;7197:20;;;;;;;;:30;;7169:6;;7133:9;7197:30;;7169:6;;7197:30;:::i;:::-;;;;;;;;7262:9;-1:-1:-1;;;;;7245:35:0;7254:6;-1:-1:-1;;;;;7245:35:0;;7273:6;7245:35;;;;2231:25:1;;2219:2;2204:18;;2085:177;7245:35:0;;;;;;;;6758:530;6637:651;;;:::o;26586:571::-;26736:16;;;26750:1;26736:16;;;;;;;;26712:21;;26736:16;;;;;;;;;;-1:-1:-1;26736:16:0;26712:40;;26781:4;26763;26768:1;26763:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26763:23:0;;;:7;;;;;;;;;;:23;;;;26807:9;;:16;;;-1:-1:-1;;;26807:16:0;;;;:9;;;;;:14;;:16;;;;;26763:7;;26807:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26797:4;26802:1;26797:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26797:26:0;;;:7;;;;;;;;;:26;26868:9;;26836:56;;26853:4;;26868:9;26880:11;26836:8;:56::i;:::-;26931:9;;:218;;-1:-1:-1;;;26931:218:0;;-1:-1:-1;;;;;26931:9:0;;;;:60;;:218;;27006:11;;26931:9;;27076:4;;27103;;27123:15;;26931:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26641:516;26586:571;:::o;27165:509::-;27345:9;;27313:56;;27330:4;;-1:-1:-1;;;;;27345:9:0;27357:11;27313:8;:56::i;:::-;27412:9;;:254;;-1:-1:-1;;;27412:254:0;;-1:-1:-1;;;;;27412:9:0;;;;:25;;27445:9;;27412:254;;27478:4;;27498:11;;27412:9;;;;27618:6;;27640:15;;27412:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:134::-;218:20;;247:31;218:20;247:31;:::i;:::-;150:134;;;:::o;289:247::-;348:6;401:2;389:9;380:7;376:23;372:32;369:52;;;417:1;414;407:12;369:52;456:9;443:23;475:31;500:5;475:31;:::i;:::-;525:5;289:247;-1:-1:-1;;;289:247:1:o;733:248::-;801:6;809;862:2;850:9;841:7;837:23;833:32;830:52;;;878:1;875;868:12;830:52;-1:-1:-1;;901:23:1;;;971:2;956:18;;;943:32;;-1:-1:-1;733:248:1:o;986:548::-;1098:4;1127:2;1156;1145:9;1138:21;1188:6;1182:13;1231:6;1226:2;1215:9;1211:18;1204:34;1256:1;1266:140;1280:6;1277:1;1274:13;1266:140;;;1375:14;;;1371:23;;1365:30;1341:17;;;1360:2;1337:26;1330:66;1295:10;;1266:140;;;1270:3;1455:1;1450:2;1441:6;1430:9;1426:22;1422:31;1415:42;1525:2;1518;1514:7;1509:2;1501:6;1497:15;1493:29;1482:9;1478:45;1474:54;1466:62;;;;986:548;;;;:::o;1765:315::-;1833:6;1841;1894:2;1882:9;1873:7;1869:23;1865:32;1862:52;;;1910:1;1907;1900:12;1862:52;1949:9;1936:23;1968:31;1993:5;1968:31;:::i;:::-;2018:5;2070:2;2055:18;;;;2042:32;;-1:-1:-1;;;1765:315:1:o;2267:456::-;2344:6;2352;2360;2413:2;2401:9;2392:7;2388:23;2384:32;2381:52;;;2429:1;2426;2419:12;2381:52;2468:9;2455:23;2487:31;2512:5;2487:31;:::i;:::-;2537:5;-1:-1:-1;2594:2:1;2579:18;;2566:32;2607:33;2566:32;2607:33;:::i;:::-;2267:456;;2659:7;;-1:-1:-1;;;2713:2:1;2698:18;;;;2685:32;;2267:456::o;3125:461::-;3178:3;3216:5;3210:12;3243:6;3238:3;3231:19;3269:4;3298:2;3293:3;3289:12;3282:19;;3335:2;3328:5;3324:14;3356:1;3366:195;3380:6;3377:1;3374:13;3366:195;;;3445:13;;-1:-1:-1;;;;;3441:39:1;3429:52;;3501:12;;;;3536:15;;;;3477:1;3395:9;3366:195;;;-1:-1:-1;3577:3:1;;3125:461;-1:-1:-1;;;;;3125:461:1:o;3591:261::-;3770:2;3759:9;3752:21;3733:4;3790:56;3842:2;3831:9;3827:18;3819:6;3790:56;:::i;3857:118::-;3943:5;3936:13;3929:21;3922:5;3919:32;3909:60;;3965:1;3962;3955:12;3980:382;4045:6;4053;4106:2;4094:9;4085:7;4081:23;4077:32;4074:52;;;4122:1;4119;4112:12;4074:52;4161:9;4148:23;4180:31;4205:5;4180:31;:::i;:::-;4230:5;-1:-1:-1;4287:2:1;4272:18;;4259:32;4300:30;4259:32;4300:30;:::i;:::-;4349:7;4339:17;;;3980:382;;;;;:::o;4367:241::-;4423:6;4476:2;4464:9;4455:7;4451:23;4447:32;4444:52;;;4492:1;4489;4482:12;4444:52;4531:9;4518:23;4550:28;4572:5;4550:28;:::i;4613:180::-;4672:6;4725:2;4713:9;4704:7;4700:23;4696:32;4693:52;;;4741:1;4738;4731:12;4693:52;-1:-1:-1;4764:23:1;;4613:180;-1:-1:-1;4613:180:1:o;4798:388::-;4866:6;4874;4927:2;4915:9;4906:7;4902:23;4898:32;4895:52;;;4943:1;4940;4933:12;4895:52;4982:9;4969:23;5001:31;5026:5;5001:31;:::i;:::-;5051:5;-1:-1:-1;5108:2:1;5093:18;;5080:32;5121:33;5080:32;5121:33;:::i;5191:127::-;5252:10;5247:3;5243:20;5240:1;5233:31;5283:4;5280:1;5273:15;5307:4;5304:1;5297:15;5323:1121;5407:6;5438:2;5481;5469:9;5460:7;5456:23;5452:32;5449:52;;;5497:1;5494;5487:12;5449:52;5537:9;5524:23;5566:18;5607:2;5599:6;5596:14;5593:34;;;5623:1;5620;5613:12;5593:34;5661:6;5650:9;5646:22;5636:32;;5706:7;5699:4;5695:2;5691:13;5687:27;5677:55;;5728:1;5725;5718:12;5677:55;5764:2;5751:16;5786:2;5782;5779:10;5776:36;;;5792:18;;:::i;:::-;5838:2;5835:1;5831:10;5870:2;5864:9;5933:2;5929:7;5924:2;5920;5916:11;5912:25;5904:6;5900:38;5988:6;5976:10;5973:22;5968:2;5956:10;5953:18;5950:46;5947:72;;;5999:18;;:::i;:::-;6035:2;6028:22;6085:18;;;6119:15;;;;-1:-1:-1;6161:11:1;;;6157:20;;;6189:19;;;6186:39;;;6221:1;6218;6211:12;6186:39;6245:11;;;;6265:148;6281:6;6276:3;6273:15;6265:148;;;6347:23;6366:3;6347:23;:::i;:::-;6335:36;;6298:12;;;;6391;;;;6265:148;;;6432:6;5323:1121;-1:-1:-1;;;;;;;;5323:1121:1:o;6449:356::-;6651:2;6633:21;;;6670:18;;;6663:30;6729:34;6724:2;6709:18;;6702:62;6796:2;6781:18;;6449:356::o;6810:127::-;6871:10;6866:3;6862:20;6859:1;6852:31;6902:4;6899:1;6892:15;6926:4;6923:1;6916:15;6942:125;7007:9;;;7028:10;;;7025:36;;;7041:18;;:::i;7430:380::-;7509:1;7505:12;;;;7552;;;7573:61;;7627:4;7619:6;7615:17;7605:27;;7573:61;7680:2;7672:6;7669:14;7649:18;7646:38;7643:161;;7726:10;7721:3;7717:20;7714:1;7707:31;7761:4;7758:1;7751:15;7789:4;7786:1;7779:15;7643:161;;7430:380;;;:::o;12838:184::-;12908:6;12961:2;12949:9;12940:7;12936:23;12932:32;12929:52;;;12977:1;12974;12967:12;12929:52;-1:-1:-1;13000:16:1;;12838:184;-1:-1:-1;12838:184:1:o;13306:245::-;13373:6;13426:2;13414:9;13405:7;13401:23;13397:32;13394:52;;;13442:1;13439;13432:12;13394:52;13474:9;13468:16;13493:28;13515:5;13493:28;:::i;14388:127::-;14449:10;14444:3;14440:20;14437:1;14430:31;14480:4;14477:1;14470:15;14504:4;14501:1;14494:15;14520:135;14559:3;14580:17;;;14577:43;;14600:18;;:::i;:::-;-1:-1:-1;14647:1:1;14636:13;;14520:135::o;16243:607::-;-1:-1:-1;;;;;16602:15:1;;;16584:34;;16649:2;16634:18;;16627:34;;;;16692:2;16677:18;;16670:34;;;;16735:2;16720:18;;16713:34;;;;16784:15;;;16778:3;16763:19;;16756:44;16564:3;16816:19;;16809:35;;;;16533:3;16518:19;;16243:607::o;16855:306::-;16943:6;16951;16959;17012:2;17000:9;16991:7;16987:23;16983:32;16980:52;;;17028:1;17025;17018:12;16980:52;17057:9;17051:16;17041:26;;17107:2;17096:9;17092:18;17086:25;17076:35;;17151:2;17140:9;17136:18;17130:25;17120:35;;16855:306;;;;;:::o;17519:168::-;17592:9;;;17623;;17640:15;;;17634:22;;17620:37;17610:71;;17661:18;;:::i;17692:217::-;17732:1;17758;17748:132;;17802:10;17797:3;17793:20;17790:1;17783:31;17837:4;17834:1;17827:15;17865:4;17862:1;17855:15;17748:132;-1:-1:-1;17894:9:1;;17692:217::o;18526:245::-;18605:6;18613;18666:2;18654:9;18645:7;18641:23;18637:32;18634:52;;;18682:1;18679;18672:12;18634:52;-1:-1:-1;;18705:16:1;;18761:2;18746:18;;;18740:25;18705:16;;18740:25;;-1:-1:-1;18526:245:1:o;20921:401::-;21123:2;21105:21;;;21162:2;21142:18;;;21135:30;21201:34;21196:2;21181:18;;21174:62;-1:-1:-1;;;21267:2:1;21252:18;;21245:35;21312:3;21297:19;;20921:401::o;21327:399::-;21529:2;21511:21;;;21568:2;21548:18;;;21541:30;21607:34;21602:2;21587:18;;21580:62;-1:-1:-1;;;21673:2:1;21658:18;;21651:33;21716:3;21701:19;;21327:399::o;22919:128::-;22986:9;;;23007:11;;;23004:37;;;23021:18;;:::i;25338:251::-;25408:6;25461:2;25449:9;25440:7;25436:23;25432:32;25429:52;;;25477:1;25474;25467:12;25429:52;25509:9;25503:16;25528:31;25553:5;25528:31;:::i;25594:582::-;25893:6;25882:9;25875:25;25936:6;25931:2;25920:9;25916:18;25909:34;25979:3;25974:2;25963:9;25959:18;25952:31;25856:4;26000:57;26052:3;26041:9;26037:19;26029:6;26000:57;:::i;:::-;-1:-1:-1;;;;;26093:32:1;;;;26088:2;26073:18;;26066:60;-1:-1:-1;26157:3:1;26142:19;26135:35;25992:65;25594:582;-1:-1:-1;;;25594:582:1:o

Swarm Source

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