ETH Price: $3,408.54 (-1.86%)
Gas: 5 Gwei

Token

VendettaDAO (V)
 

Overview

Max Total Supply

1,000,000,000 V

Holders

135

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
409,350.39774010559768157 V

Value
$0.00
0x33fb8e00ef47d4a06b0609244ae0f41e725c5d43
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:
VendettaDAO

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
/* 

    ‘The past can’t hurt you anymore, 
    not unless you let it…’

    Vi Veri Veniversum Vivus Vici

    https://medium.com/@VendettaDAO_/v%C4%93n%C4%AB-f1af74b031b3

 */
pragma solidity 0.8.13;

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

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

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

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

        emit Transfer(sender, recipient, amount);
    }

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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

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

contract VendettaDAO 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;
    address public treasuryAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping(address => bool) public boughtEarly;
    address[] public earlyBuyers;
    uint256 public botsCaught;

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

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

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

    uint256 private originalSellOperationsFee;
    uint256 private originalSellLiquidityFee;
    uint256 private originalSellTreasuryFee;

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

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForTreasury;

    /******************/

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

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

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

    event EnabledTrading();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);

    event UpdatedTreasuryAddress(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 UpdatedPrivateMaxSell(uint256 amount);

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

        // initialize router
        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        dexRouter = _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; // 100 million

        maxBuyAmount = (totalSupply * 25) / 1000; // 2.5%
        maxSellAmount = (totalSupply * 25) / 1000; // 2.5%
        maxWallet = (totalSupply * 3) / 100; // 3%
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05 %

        buyOperationsFee = 1;
        buyLiquidityFee = 1;
        buyTreasuryFee = 2;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyTreasuryFee;

        originalSellOperationsFee = 1;
        originalSellLiquidityFee = 1;
        originalSellTreasuryFee = 2;

        sellOperationsFee = 1;
        sellLiquidityFee = 1;
        sellTreasuryFee = 2;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellTreasuryFee;

        operationsAddress = address(0x53D24f2CE3Dda1217E4214349E748f4f57AB140D);
        treasuryAddress = address(0xb70124D0C22e1f8d72D92DbAAB046556FFafF5F8);

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

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(operationsAddress), true);
        excludeFromFees(address(treasuryAddress), true);

        _createInitialSupply(address(0xdead), (totalSupply * 25) / 100); // Burn
        _createInitialSupply(address(this), (totalSupply * 75) / 100); // Tokens for liquidity

        transferOwnership(newOwner);
    }

    receive() external payable {}

    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 getEarlyBuyers() external view returns (address[] memory) {
        return earlyBuyers;
    }

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

    function emergencyUpdateRouter(address router) external onlyOwner {
        require(!tradingActive, "Cannot update after trading is functional");
        dexRouter = IDexRouter(router);
    }

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

    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 10000) / 1e18,
            "Cannot set max buy amount lower than 0.01%"
        );
        maxBuyAmount = newNum * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 10000) / 1e18,
            "Cannot set max sell amount lower than 0.01%"
        );
        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set max sell amount lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
        emit UpdatedMaxWalletAmount(maxWallet);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 1) / 1000,
            "Swap amount cannot be higher than 0.1% total supply."
        );
        swapTokensAtAmount = newAmount;
    }

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

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

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

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

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

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

    function restoreTaxes() external onlyOwner {
        sellOperationsFee = originalSellOperationsFee;
        sellLiquidityFee = originalSellLiquidityFee;
        sellTreasuryFee = originalSellTreasuryFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellTreasuryFee;
    }

    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(
                !boughtEarly[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 (!boughtEarly[to]) {
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    earlyBuyers.push(to);
                    emit CaughtEarlyBuyer(to);
                }

                fees = (amount * 99) / 100; 
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
                tokensForTreasury += (fees * buyTreasuryFee) / buyTotalFees;
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForOperations +=
                    (fees * sellOperationsFee) /
                    sellTotalFees;
                tokensForTreasury += (fees * sellTreasuryFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
                tokensForTreasury += (fees * buyTreasuryFee) / 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 +
            tokensForTreasury;

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

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

        bool success;

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForOperations = (ethBalance * tokensForOperations) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        uint256 ethForStaking = (ethBalance * tokensForTreasury) /
            (totalTokensToSwap - (tokensForLiquidity / 2));

        ethForLiquidity -= ethForOperations + ethForStaking;

        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForTreasury = 0;

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

        (success, ) = address(treasuryAddress).call{value: ethForStaking}("");
        (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 setTreasuryAddress(address _treasuryAddress) external onlyOwner {
        require(
            _treasuryAddress != address(0),
            "_operationsAddress address cannot be 0"
        );
        treasuryAddress = payable(_treasuryAddress);
        emit UpdatedTreasuryAddress(_treasuryAddress);
    }

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

    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
    }

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

    function abeamus(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(
            blocksForPenalty < 10,
            "Cannot make penalty blocks more than 10"
        );

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

        // 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
            msg.sender,
            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":"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":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdatedPrivateMaxSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedTreasuryAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"abeamus","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":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"buyTreasuryFee","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":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"emergencyUpdateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[],"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":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreTaxes","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":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600e556013805462ffffff191660019081179091556015805460ff191682179055600b60808181526a56656e646574746144414f60a81b60a090815261010060405260c0938452602b60f91b60e052909291620000619160039162000841565b5080516200007790600490602084019062000841565b50505060006200008c620004de60201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004456833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa15801562000133573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001599190620008e7565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e29190620008e7565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000230573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002569190620008e7565b600a80546001600160a01b0319166001600160a01b0392909216918217905562000282906001620004e2565b600a546200029b906001600160a01b0316600162000545565b6b033b2e3c9fd0803ce80000006103e8620002b88260196200092f565b620002c4919062000951565b6006556103e8620002d78260196200092f565b620002e3919062000951565b6007556064620002f58260036200092f565b62000301919062000951565b600855612710620003148260056200092f565b62000320919062000951565b600b55600160178190556018819055600260198190559062000343908062000974565b6200034f919062000974565b6016556001601a819055601b8190556002601c819055601e829055601f82905560208190559062000381908062000974565b6200038d919062000974565b601d55600c80546001600160a01b03199081167353d24f2ce3dda1217e4214349e748f4f57ab140d17909155600d805490911673b70124d0c22e1f8d72d92dbaab046556ffaff5f8179055620003e5836001620004e2565b620003f2306001620004e2565b6200040161dead6001620004e2565b600c546200041a906001600160a01b03166001620004e2565b600d5462000433906001600160a01b03166001620004e2565b62000440836001620005b1565b6200044d306001620005b1565b6200045c61dead6001620005b1565b600c5462000475906001600160a01b03166001620005b1565b600d546200048e906001600160a01b03166001620005b1565b620004b661dead6064620004a48460196200092f565b620004b0919062000951565b6200065f565b620004ca306064620004a484604b6200092f565b620004d58362000744565b505050620009cb565b3390565b6001600160a01b038216600081815260256020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602660205260409020805460ff1916821515179055620005758282620004e2565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620006005760405162461bcd60e51b815260206004820181905260248201526000805160206200443683398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006b75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005f7565b8060026000828254620006cb919062000974565b90915550506001600160a01b03821660009081526020819052604081208054839290620006fa90849062000974565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200078f5760405162461bcd60e51b81526020600482018190526024820152600080516020620044368339815191526044820152606401620005f7565b6001600160a01b038116620007f65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005f7565b6005546040516001600160a01b038084169216906000805160206200445683398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b8280546200084f906200098f565b90600052602060002090601f016020900481019282620008735760008555620008be565b82601f106200088e57805160ff1916838001178555620008be565b82800160010185558215620008be579182015b82811115620008be578251825591602001919060010190620008a1565b50620008cc929150620008d0565b5090565b5b80821115620008cc5760008155600101620008d1565b600060208284031215620008fa57600080fd5b81516001600160a01b03811681146200091257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200094c576200094c62000919565b500290565b6000826200096f57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156200098a576200098a62000919565b500190565b600181811c90821680620009a457607f821691505b602082108103620009c557634e487b7160e01b600052602260045260246000fd5b50919050565b613a5b80620009db6000396000f3fe6080604052600436106103f35760003560e01c806385ecfd2811610208578063c876d0b911610118578063ea4cfe12116100ab578063f2fde38b1161007a578063f2fde38b14610b6c578063f5648a4f14610b8c578063f637434214610ba1578063f8b45b0514610bb7578063fb002c9714610bcd57600080fd5b8063ea4cfe1214610b00578063eb472fc414610b20578063ee40166e14610b40578063f11a24d314610b5657600080fd5b8063dc3f0d0f116100e7578063dc3f0d0f14610a6f578063dd62ed3e14610a8f578063e2f4560514610ad5578063e884f26014610aeb57600080fd5b8063c876d0b914610a09578063cc2ffe7c14610a23578063d257b34f14610a39578063d85ba06314610a5957600080fd5b8063a457c2d71161019b578063bbc0c7421161016a578063bbc0c7421461096a578063c024666814610989578063c17b5b8c146109a9578063c18bc195146109c9578063c5f956af146109e957600080fd5b8063a457c2d7146108e4578063a62068ce14610904578063a9059cbb1461091a578063b62496f51461093a57600080fd5b80639854a092116101d75780639854a0921461086d5780639a5bd2dd1461088d5780639a7a23d6146108af578063a28e86d3146108cf57600080fd5b806385ecfd28146107f457806388e765ff146108245780638da5cb5b1461083a57806395d89b411461085857600080fd5b80635a139dd4116103035780636b2fb12411610296578063751039fc11610265578063751039fc1461075f5780637571336a146107745780638095d5641461079457806382aa7c68146107b45780638366e79a146107d457600080fd5b80636b2fb124146106f45780636ddd17131461070a57806370a082311461072a578063715018a61461074a57600080fd5b80636605bfda116102d25780636605bfda1461069257806366d602ae146106b25780636a486a8e146106c85780636b0a894c146106de57600080fd5b80635a139dd4146106315780635bb988c9146106475780635c068a8c146106675780635eed98e21461067d57600080fd5b80632be32b6111610386578063499b839411610355578063499b8394146105b55780634a62bb65146105d55780634f77f6c0146105ef57806351f205e41461060557806358a6d5311461061a57600080fd5b80632be32b6114610539578063313ce567146105595780633950935114610575578063452ed4f11461059557600080fd5b80631805805b116103c25780631805805b146104c257806318160ddd146104e45780631a8145bb1461050357806323b872dd1461051957600080fd5b806306fdde03146103ff5780630758d9241461042a578063095ea7b31461046257806310d5de531461049257600080fd5b366103fa57005b600080fd5b34801561040b57600080fd5b50610414610be3565b60405161042191906134fe565b60405180910390f35b34801561043657600080fd5b5060095461044a906001600160a01b031681565b6040516001600160a01b039091168152602001610421565b34801561046e57600080fd5b5061048261047d36600461356b565b610c75565b6040519015158152602001610421565b34801561049e57600080fd5b506104826104ad366004613597565b60256020526000908152604090205460ff1681565b3480156104ce57600080fd5b506104e26104dd366004613597565b610c8b565b005b3480156104f057600080fd5b506002545b604051908152602001610421565b34801561050f57600080fd5b506104f560225481565b34801561052557600080fd5b506104826105343660046135bb565b610d4a565b34801561054557600080fd5b506104e26105543660046135fc565b610df4565b34801561056557600080fd5b5060405160128152602001610421565b34801561058157600080fd5b5061048261059036600461356b565b610f02565b3480156105a157600080fd5b50600a5461044a906001600160a01b031681565b3480156105c157600080fd5b506104e26105d0366004613597565b610f3e565b3480156105e157600080fd5b506013546104829060ff1681565b3480156105fb57600080fd5b506104f5601e5481565b34801561061157600080fd5b506104e2610fd8565b34801561062657600080fd5b50600f544310610482565b34801561063d57600080fd5b506104f560175481565b34801561065357600080fd5b506104e2610662366004613597565b6110e1565b34801561067357600080fd5b506104f560195481565b34801561068957600080fd5b506104e2611194565b34801561069e57600080fd5b506104e26106ad366004613597565b6111f0565b3480156106be57600080fd5b506104f560075481565b3480156106d457600080fd5b506104f5601d5481565b3480156106ea57600080fd5b506104f560125481565b34801561070057600080fd5b506104f560205481565b34801561071657600080fd5b506013546104829062010000900460ff1681565b34801561073657600080fd5b506104f5610745366004613597565b61128a565b34801561075657600080fd5b506104e26112a5565b34801561076b57600080fd5b506104e2611319565b34801561078057600080fd5b506104e261078f366004613623565b61134f565b3480156107a057600080fd5b506104e26107af36600461365c565b611417565b3480156107c057600080fd5b506104e26107cf3660046135fc565b6114bf565b3480156107e057600080fd5b506104826107ef366004613688565b6115b3565b34801561080057600080fd5b5061048261080f366004613597565b60106020526000908152604090205460ff1681565b34801561083057600080fd5b506104f560065481565b34801561084657600080fd5b506005546001600160a01b031661044a565b34801561086457600080fd5b506104146117ed565b34801561087957600080fd5b506104e26108883660046135fc565b6117fc565b34801561089957600080fd5b506108a2611a69565b60405161042191906136fa565b3480156108bb57600080fd5b506104e26108ca366004613623565b611aca565b3480156108db57600080fd5b506104e2611bbe565b3480156108f057600080fd5b506104826108ff36600461356b565b611bf7565b34801561091057600080fd5b506104f5600f5481565b34801561092657600080fd5b5061048261093536600461356b565b611c90565b34801561094657600080fd5b50610482610955366004613597565b60266020526000908152604090205460ff1681565b34801561097657600080fd5b5060135461048290610100900460ff1681565b34801561099557600080fd5b506104e26109a4366004613623565b611c9d565b3480156109b557600080fd5b506104e26109c436600461365c565b611d26565b3480156109d557600080fd5b506104e26109e43660046135fc565b611dc9565b3480156109f557600080fd5b50600d5461044a906001600160a01b031681565b348015610a1557600080fd5b506015546104829060ff1681565b348015610a2f57600080fd5b506104f560235481565b348015610a4557600080fd5b506104e2610a543660046135fc565b611ed0565b348015610a6557600080fd5b506104f560165481565b348015610a7b57600080fd5b506104e2610a8a3660046135fc565b61201b565b348015610a9b57600080fd5b506104f5610aaa366004613688565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ae157600080fd5b506104f5600b5481565b348015610af757600080fd5b506104e2612123565b348015610b0c57600080fd5b50600c5461044a906001600160a01b031681565b348015610b2c57600080fd5b5061044a610b3b3660046135fc565b612159565b348015610b4c57600080fd5b506104f5600e5481565b348015610b6257600080fd5b506104f560185481565b348015610b7857600080fd5b506104e2610b87366004613597565b612183565b348015610b9857600080fd5b506104e261226e565b348015610bad57600080fd5b506104f5601f5481565b348015610bc357600080fd5b506104f560085481565b348015610bd957600080fd5b506104f560215481565b606060038054610bf29061370d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1e9061370d565b8015610c6b5780601f10610c4057610100808354040283529160200191610c6b565b820191906000526020600020905b815481529060010190602001808311610c4e57829003601f168201915b5050505050905090565b6000610c823384846122da565b50600192915050565b6005546001600160a01b03163314610cbe5760405162461bcd60e51b8152600401610cb590613747565b60405180910390fd5b601354610100900460ff1615610d285760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610cb5565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000610d578484846123fe565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ddc5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610cb5565b610de985338584036122da565b506001949350505050565b6005546001600160a01b03163314610e1e5760405162461bcd60e51b8152600401610cb590613747565b670de0b6b3a7640000612710610e3360025490565b610e3e906001613792565b610e4891906137b1565b610e5291906137b1565b811015610eb45760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152697468616e20302e30312560b01b6064820152608401610cb5565b610ec681670de0b6b3a7640000613792565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c82918590610f399086906137d3565b6122da565b6005546001600160a01b03163314610f685760405162461bcd60e51b8152600401610cb590613747565b6001600160a01b038116610f8e5760405162461bcd60e51b8152600401610cb5906137eb565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146110025760405162461bcd60e51b8152600401610cb590613747565b600b5461100e3061128a565b1015611084576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610cb5565b600a805460ff60a01b1916600160a01b17905561109f612f15565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461110b5760405162461bcd60e51b8152600401610cb590613747565b6001600160a01b03811660009081526010602052604090205460ff166111735760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610cb5565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146111be5760405162461bcd60e51b8152600401610cb590613747565b601a54601e819055601b54601f819055601c546020819055916111e191906137d3565b6111eb91906137d3565b601d55565b6005546001600160a01b0316331461121a5760405162461bcd60e51b8152600401610cb590613747565b6001600160a01b0381166112405760405162461bcd60e51b8152600401610cb5906137eb565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146112cf5760405162461bcd60e51b8152600401610cb590613747565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146113435760405162461bcd60e51b8152600401610cb590613747565b6013805460ff19169055565b6005546001600160a01b031633146113795760405162461bcd60e51b8152600401610cb590613747565b806113ec57600a546001600160a01b03908116908316036113ec5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610cb5565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114415760405162461bcd60e51b8152600401610cb590613747565b6017839055601882905560198190558061145b83856137d3565b61146591906137d3565b6016819055600f10156114ba5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610cb5565b505050565b6005546001600160a01b031633146114e95760405162461bcd60e51b8152600401610cb590613747565b601354610100900460ff16156115415760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610cb5565b600a8111156115625760405162461bcd60e51b8152600401610cb590613831565b6013805462ffff0019166201010017905543600e8190556115849082906137d3565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146115e05760405162461bcd60e51b8152600401610cb590613747565b6001600160a01b0383166116365760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610cb5565b6001600160a01b038316301415806116565750601354610100900460ff16155b6116bf5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610cb5565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172a9190613878565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561177d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a19190613891565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610bf29061370d565b6005546001600160a01b031633146118265760405162461bcd60e51b8152600401610cb590613747565b601354610100900460ff16156118925760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610cb5565b600a81106118b25760405162461bcd60e51b8152600401610cb590613831565b6013805462ffff0019166201010017905543600e8190556118d49082906137d3565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a16000471161195c5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610cb5565b60006119673061128a565b116119c35760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610cb5565b6009546119de9030906001600160a01b0316610f398261128a565b6009546001600160a01b031663f305d71947306119fa8161128a565b60008033426040518863ffffffff1660e01b8152600401611a20969594939291906138ae565b60606040518083038185885af1158015611a3e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a6391906138e9565b50505050565b60606011805480602002602001604051908101604052809291908181526020018280548015610c6b57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611aa3575050505050905090565b6005546001600160a01b03163314611af45760405162461bcd60e51b8152600401610cb590613747565b600a546001600160a01b0390811690831603611b785760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cb5565b611b82828261311d565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314611be85760405162461bcd60e51b8152600401610cb590613747565b6013805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611c795760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610cb5565b611c8633858584036122da565b5060019392505050565b6000610c823384846123fe565b6005546001600160a01b03163314611cc75760405162461bcd60e51b8152600401610cb590613747565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611d505760405162461bcd60e51b8152600401610cb590613747565b601e839055601f829055602081905580611d6a83856137d3565b611d7491906137d3565b601d819055601410156114ba5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610cb5565b6005546001600160a01b03163314611df35760405162461bcd60e51b8152600401610cb590613747565b670de0b6b3a76400006103e8611e0860025490565b611e13906005613792565b611e1d91906137b1565b611e2791906137b1565b811015611e895760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610cb5565b611e9b81670de0b6b3a7640000613792565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610ef7565b6005546001600160a01b03163314611efa5760405162461bcd60e51b8152600401610cb590613747565b620186a0611f0760025490565b611f12906001613792565b611f1c91906137b1565b811015611f895760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610cb5565b6103e8611f9560025490565b611fa0906001613792565b611faa91906137b1565b8111156120165760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610cb5565b600b55565b6005546001600160a01b031633146120455760405162461bcd60e51b8152600401610cb590613747565b670de0b6b3a764000061271061205a60025490565b612065906001613792565b61206f91906137b1565b61207991906137b1565b8110156120dc5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260448201526a207468616e20302e30312560a81b6064820152608401610cb5565b6120ee81670de0b6b3a7640000613792565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610ef7565b6005546001600160a01b0316331461214d5760405162461bcd60e51b8152600401610cb590613747565b6015805460ff19169055565b6011818154811061216957600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146121ad5760405162461bcd60e51b8152600401610cb590613747565b6001600160a01b0381166122125760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cb5565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146122985760405162461bcd60e51b8152600401610cb590613747565b604051600090339047908381818185875af1925050503d8060008114611a63576040519150601f19603f3d011682016040523d82523d6000602084013e611a63565b6001600160a01b03831661233c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cb5565b6001600160a01b03821661239d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cb5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124245760405162461bcd60e51b8152600401610cb590613917565b6001600160a01b03821661244a5760405162461bcd60e51b8152600401610cb59061395c565b6000811161249a5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610cb5565b601354610100900460ff1661252d576001600160a01b03831660009081526024602052604090205460ff16806124e857506001600160a01b03821660009081526024602052604090205460ff165b61252d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610cb5565b600f5443101580156125465750601354610100900460ff165b15612616576001600160a01b03831660009081526010602052604090205460ff16158061258057506005546001600160a01b038381169116145b8061259557506001600160a01b03821661dead145b6126165760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610cb5565b60135460ff16156129f4576005546001600160a01b0384811691161480159061264d57506005546001600160a01b03838116911614155b801561266457506001600160a01b03821661dead14155b801561268957506001600160a01b03831660009081526024602052604090205460ff16155b80156126ae57506001600160a01b03821660009081526024602052604090205460ff16155b156129f45760155460ff16156127c7576009546001600160a01b038381169116148015906126ea5750600a546001600160a01b03838116911614155b156127c7576126fa60024361399f565b32600090815260146020526040902054108015612738575061271d60024361399f565b6001600160a01b038316600090815260146020526040902054105b6127a25760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610cb5565b3260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526026602052604090205460ff16801561280857506001600160a01b03821660009081526025602052604090205460ff16155b156128cf576006548111156128705760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610cb5565b60085461287c8361128a565b61288690836137d3565b11156128ca5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610cb5565b6129f4565b6001600160a01b03821660009081526026602052604090205460ff16801561291057506001600160a01b03831660009081526025602052604090205460ff16155b1561297a576007548111156128ca5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610cb5565b6001600160a01b03821660009081526025602052604090205460ff166129f4576008546129a68361128a565b6129b090836137d3565b11156129f45760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610cb5565b60006129ff3061128a565b600b5490915081108015908190612a1e575060135462010000900460ff165b8015612a345750600a54600160a01b900460ff16155b8015612a5857506001600160a01b03841660009081526026602052604090205460ff165b15612a8657600a805460ff60a01b1916600160a01b179055612a78612f15565b600a805460ff60a01b191690555b6001600160a01b03851660009081526024602052604090205460019060ff1680612ac857506001600160a01b03851660009081526024602052604090205460ff165b15612ad1575060005b60008115612f0157600f54431080612b175750670c7d713b49da0000600654612afa919061399f565b8510158015612b17575043600f546008612b1491906137d3565b10155b8015612b3b57506001600160a01b03871660009081526026602052604090205460ff165b8015612b6057506001600160a01b03861660009081526026602052604090205460ff16155b8015612b8557506001600160a01b03861660009081526024602052604090205460ff16155b8015612b9357506000601654115b15612d4a57600f544310612bba57600160066000828254612bb4919061399f565b90915550505b6001600160a01b03861660009081526010602052604090205460ff16612c9a576001600160a01b0386166000908152601060205260408120805460ff191660019081179091556012805491929091612c139084906137d3565b9091555050601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612ca7866063613792565b612cb191906137b1565b905060165460185482612cc49190613792565b612cce91906137b1565b60226000828254612cdf91906137d3565b9091555050601654601754612cf49083613792565b612cfe91906137b1565b60216000828254612d0f91906137d3565b9091555050601654601954612d249083613792565b612d2e91906137b1565b60236000828254612d3f91906137d3565b90915550612ee39050565b6001600160a01b03861660009081526026602052604090205460ff168015612d7457506000601d54115b15612e06576064601d5486612d899190613792565b612d9391906137b1565b9050601d54601f5482612da69190613792565b612db091906137b1565b60226000828254612dc191906137d3565b9091555050601d54601e54612dd69083613792565b612de091906137b1565b60216000828254612df191906137d3565b9091555050601d54602054612d249083613792565b6001600160a01b03871660009081526026602052604090205460ff168015612e3057506000601654115b15612ee357606460165486612e459190613792565b612e4f91906137b1565b905060165460185482612e629190613792565b612e6c91906137b1565b60226000828254612e7d91906137d3565b9091555050601654601754612e929083613792565b612e9c91906137b1565b60216000828254612ead91906137d3565b9091555050601654601954612ec29083613792565b612ecc91906137b1565b60236000828254612edd91906137d3565b90915550505b8015612ef457612ef487308361314b565b612efe818661399f565b94505b612f0c87878761314b565b50505050505050565b6000612f203061128a565b90506000602354602154602254612f3791906137d3565b612f4191906137d3565b9050811580612f4e575080155b15612f57575050565b600b54612f6590600a613792565b821115612f7d57600b54612f7a90600a613792565b91505b60008060028360225486612f919190613792565b612f9b91906137b1565b612fa591906137b1565b9050612fb9612fb4828661399f565b6132a0565b60225447908190600090612fcf906002906137b1565b612fd9908761399f565b602154612fe69085613792565b612ff091906137b1565b90506000600260225461300391906137b1565b61300d908861399f565b60235461301a9086613792565b61302491906137b1565b905061303081836137d3565b61303a908461399f565b6000602281905560218190556023559250841580159061305a5750600083115b156130695761306985846133fa565b600d546040516001600160a01b03909116908290600081818185875af1925050503d80600081146130b6576040519150601f19603f3d011682016040523d82523d6000602084013e6130bb565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d806000811461310b576040519150601f19603f3d011682016040523d82523d6000602084013e613110565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602660205260409020805460ff1916821515179055611b82828261349b565b6001600160a01b0383166131715760405162461bcd60e51b8152600401610cb590613917565b6001600160a01b0382166131975760405162461bcd60e51b8152600401610cb59061395c565b6001600160a01b0383166000908152602081905260409020548181101561320f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610cb5565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906132469084906137d3565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161329291815260200190565b60405180910390a350505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106132d5576132d56139b6565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561332e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335291906139cc565b81600181518110613365576133656139b6565b6001600160a01b03928316602091820292909201015260095461338b91309116846122da565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906133c49085906000908690309042906004016139e9565b600060405180830381600087803b1580156133de57600080fd5b505af11580156133f2573d6000803e3d6000fd5b505050505050565b6009546134129030906001600160a01b0316846122da565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906134519030908790600090819061dead9042906004016138ae565b60606040518083038185885af115801561346f573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061349491906138e9565b5050505050565b6001600160a01b038216600081815260256020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b8181101561352b5785810183015185820160400152820161350f565b8181111561353d576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461356857600080fd5b50565b6000806040838503121561357e57600080fd5b823561358981613553565b946020939093013593505050565b6000602082840312156135a957600080fd5b81356135b481613553565b9392505050565b6000806000606084860312156135d057600080fd5b83356135db81613553565b925060208401356135eb81613553565b929592945050506040919091013590565b60006020828403121561360e57600080fd5b5035919050565b801515811461356857600080fd5b6000806040838503121561363657600080fd5b823561364181613553565b9150602083013561365181613615565b809150509250929050565b60008060006060848603121561367157600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561369b57600080fd5b82356136a681613553565b9150602083013561365181613553565b600081518084526020808501945080840160005b838110156136ef5781516001600160a01b0316875295820195908201906001016136ca565b509495945050505050565b6020815260006135b460208301846136b6565b600181811c9082168061372157607f821691505b60208210810361374157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156137ac576137ac61377c565b500290565b6000826137ce57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156137e6576137e661377c565b500190565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b60006020828403121561388a57600080fd5b5051919050565b6000602082840312156138a357600080fd5b81516135b481613615565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156138fe57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156139b1576139b161377c565b500390565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156139de57600080fd5b81516135b481613553565b85815284602082015260a060408201526000613a0860a08301866136b6565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220e5f983137f759d3fb477e18d6388e4e3fbf86a6ba042db6e79b2c887a14fb55964736f6c634300080d00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103f35760003560e01c806385ecfd2811610208578063c876d0b911610118578063ea4cfe12116100ab578063f2fde38b1161007a578063f2fde38b14610b6c578063f5648a4f14610b8c578063f637434214610ba1578063f8b45b0514610bb7578063fb002c9714610bcd57600080fd5b8063ea4cfe1214610b00578063eb472fc414610b20578063ee40166e14610b40578063f11a24d314610b5657600080fd5b8063dc3f0d0f116100e7578063dc3f0d0f14610a6f578063dd62ed3e14610a8f578063e2f4560514610ad5578063e884f26014610aeb57600080fd5b8063c876d0b914610a09578063cc2ffe7c14610a23578063d257b34f14610a39578063d85ba06314610a5957600080fd5b8063a457c2d71161019b578063bbc0c7421161016a578063bbc0c7421461096a578063c024666814610989578063c17b5b8c146109a9578063c18bc195146109c9578063c5f956af146109e957600080fd5b8063a457c2d7146108e4578063a62068ce14610904578063a9059cbb1461091a578063b62496f51461093a57600080fd5b80639854a092116101d75780639854a0921461086d5780639a5bd2dd1461088d5780639a7a23d6146108af578063a28e86d3146108cf57600080fd5b806385ecfd28146107f457806388e765ff146108245780638da5cb5b1461083a57806395d89b411461085857600080fd5b80635a139dd4116103035780636b2fb12411610296578063751039fc11610265578063751039fc1461075f5780637571336a146107745780638095d5641461079457806382aa7c68146107b45780638366e79a146107d457600080fd5b80636b2fb124146106f45780636ddd17131461070a57806370a082311461072a578063715018a61461074a57600080fd5b80636605bfda116102d25780636605bfda1461069257806366d602ae146106b25780636a486a8e146106c85780636b0a894c146106de57600080fd5b80635a139dd4146106315780635bb988c9146106475780635c068a8c146106675780635eed98e21461067d57600080fd5b80632be32b6111610386578063499b839411610355578063499b8394146105b55780634a62bb65146105d55780634f77f6c0146105ef57806351f205e41461060557806358a6d5311461061a57600080fd5b80632be32b6114610539578063313ce567146105595780633950935114610575578063452ed4f11461059557600080fd5b80631805805b116103c25780631805805b146104c257806318160ddd146104e45780631a8145bb1461050357806323b872dd1461051957600080fd5b806306fdde03146103ff5780630758d9241461042a578063095ea7b31461046257806310d5de531461049257600080fd5b366103fa57005b600080fd5b34801561040b57600080fd5b50610414610be3565b60405161042191906134fe565b60405180910390f35b34801561043657600080fd5b5060095461044a906001600160a01b031681565b6040516001600160a01b039091168152602001610421565b34801561046e57600080fd5b5061048261047d36600461356b565b610c75565b6040519015158152602001610421565b34801561049e57600080fd5b506104826104ad366004613597565b60256020526000908152604090205460ff1681565b3480156104ce57600080fd5b506104e26104dd366004613597565b610c8b565b005b3480156104f057600080fd5b506002545b604051908152602001610421565b34801561050f57600080fd5b506104f560225481565b34801561052557600080fd5b506104826105343660046135bb565b610d4a565b34801561054557600080fd5b506104e26105543660046135fc565b610df4565b34801561056557600080fd5b5060405160128152602001610421565b34801561058157600080fd5b5061048261059036600461356b565b610f02565b3480156105a157600080fd5b50600a5461044a906001600160a01b031681565b3480156105c157600080fd5b506104e26105d0366004613597565b610f3e565b3480156105e157600080fd5b506013546104829060ff1681565b3480156105fb57600080fd5b506104f5601e5481565b34801561061157600080fd5b506104e2610fd8565b34801561062657600080fd5b50600f544310610482565b34801561063d57600080fd5b506104f560175481565b34801561065357600080fd5b506104e2610662366004613597565b6110e1565b34801561067357600080fd5b506104f560195481565b34801561068957600080fd5b506104e2611194565b34801561069e57600080fd5b506104e26106ad366004613597565b6111f0565b3480156106be57600080fd5b506104f560075481565b3480156106d457600080fd5b506104f5601d5481565b3480156106ea57600080fd5b506104f560125481565b34801561070057600080fd5b506104f560205481565b34801561071657600080fd5b506013546104829062010000900460ff1681565b34801561073657600080fd5b506104f5610745366004613597565b61128a565b34801561075657600080fd5b506104e26112a5565b34801561076b57600080fd5b506104e2611319565b34801561078057600080fd5b506104e261078f366004613623565b61134f565b3480156107a057600080fd5b506104e26107af36600461365c565b611417565b3480156107c057600080fd5b506104e26107cf3660046135fc565b6114bf565b3480156107e057600080fd5b506104826107ef366004613688565b6115b3565b34801561080057600080fd5b5061048261080f366004613597565b60106020526000908152604090205460ff1681565b34801561083057600080fd5b506104f560065481565b34801561084657600080fd5b506005546001600160a01b031661044a565b34801561086457600080fd5b506104146117ed565b34801561087957600080fd5b506104e26108883660046135fc565b6117fc565b34801561089957600080fd5b506108a2611a69565b60405161042191906136fa565b3480156108bb57600080fd5b506104e26108ca366004613623565b611aca565b3480156108db57600080fd5b506104e2611bbe565b3480156108f057600080fd5b506104826108ff36600461356b565b611bf7565b34801561091057600080fd5b506104f5600f5481565b34801561092657600080fd5b5061048261093536600461356b565b611c90565b34801561094657600080fd5b50610482610955366004613597565b60266020526000908152604090205460ff1681565b34801561097657600080fd5b5060135461048290610100900460ff1681565b34801561099557600080fd5b506104e26109a4366004613623565b611c9d565b3480156109b557600080fd5b506104e26109c436600461365c565b611d26565b3480156109d557600080fd5b506104e26109e43660046135fc565b611dc9565b3480156109f557600080fd5b50600d5461044a906001600160a01b031681565b348015610a1557600080fd5b506015546104829060ff1681565b348015610a2f57600080fd5b506104f560235481565b348015610a4557600080fd5b506104e2610a543660046135fc565b611ed0565b348015610a6557600080fd5b506104f560165481565b348015610a7b57600080fd5b506104e2610a8a3660046135fc565b61201b565b348015610a9b57600080fd5b506104f5610aaa366004613688565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ae157600080fd5b506104f5600b5481565b348015610af757600080fd5b506104e2612123565b348015610b0c57600080fd5b50600c5461044a906001600160a01b031681565b348015610b2c57600080fd5b5061044a610b3b3660046135fc565b612159565b348015610b4c57600080fd5b506104f5600e5481565b348015610b6257600080fd5b506104f560185481565b348015610b7857600080fd5b506104e2610b87366004613597565b612183565b348015610b9857600080fd5b506104e261226e565b348015610bad57600080fd5b506104f5601f5481565b348015610bc357600080fd5b506104f560085481565b348015610bd957600080fd5b506104f560215481565b606060038054610bf29061370d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1e9061370d565b8015610c6b5780601f10610c4057610100808354040283529160200191610c6b565b820191906000526020600020905b815481529060010190602001808311610c4e57829003601f168201915b5050505050905090565b6000610c823384846122da565b50600192915050565b6005546001600160a01b03163314610cbe5760405162461bcd60e51b8152600401610cb590613747565b60405180910390fd5b601354610100900460ff1615610d285760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610cb5565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000610d578484846123fe565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ddc5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610cb5565b610de985338584036122da565b506001949350505050565b6005546001600160a01b03163314610e1e5760405162461bcd60e51b8152600401610cb590613747565b670de0b6b3a7640000612710610e3360025490565b610e3e906001613792565b610e4891906137b1565b610e5291906137b1565b811015610eb45760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152697468616e20302e30312560b01b6064820152608401610cb5565b610ec681670de0b6b3a7640000613792565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c82918590610f399086906137d3565b6122da565b6005546001600160a01b03163314610f685760405162461bcd60e51b8152600401610cb590613747565b6001600160a01b038116610f8e5760405162461bcd60e51b8152600401610cb5906137eb565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146110025760405162461bcd60e51b8152600401610cb590613747565b600b5461100e3061128a565b1015611084576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610cb5565b600a805460ff60a01b1916600160a01b17905561109f612f15565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461110b5760405162461bcd60e51b8152600401610cb590613747565b6001600160a01b03811660009081526010602052604090205460ff166111735760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610cb5565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146111be5760405162461bcd60e51b8152600401610cb590613747565b601a54601e819055601b54601f819055601c546020819055916111e191906137d3565b6111eb91906137d3565b601d55565b6005546001600160a01b0316331461121a5760405162461bcd60e51b8152600401610cb590613747565b6001600160a01b0381166112405760405162461bcd60e51b8152600401610cb5906137eb565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146112cf5760405162461bcd60e51b8152600401610cb590613747565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146113435760405162461bcd60e51b8152600401610cb590613747565b6013805460ff19169055565b6005546001600160a01b031633146113795760405162461bcd60e51b8152600401610cb590613747565b806113ec57600a546001600160a01b03908116908316036113ec5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610cb5565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114415760405162461bcd60e51b8152600401610cb590613747565b6017839055601882905560198190558061145b83856137d3565b61146591906137d3565b6016819055600f10156114ba5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610cb5565b505050565b6005546001600160a01b031633146114e95760405162461bcd60e51b8152600401610cb590613747565b601354610100900460ff16156115415760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610cb5565b600a8111156115625760405162461bcd60e51b8152600401610cb590613831565b6013805462ffff0019166201010017905543600e8190556115849082906137d3565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146115e05760405162461bcd60e51b8152600401610cb590613747565b6001600160a01b0383166116365760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610cb5565b6001600160a01b038316301415806116565750601354610100900460ff16155b6116bf5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610cb5565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172a9190613878565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561177d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a19190613891565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610bf29061370d565b6005546001600160a01b031633146118265760405162461bcd60e51b8152600401610cb590613747565b601354610100900460ff16156118925760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610cb5565b600a81106118b25760405162461bcd60e51b8152600401610cb590613831565b6013805462ffff0019166201010017905543600e8190556118d49082906137d3565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a16000471161195c5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610cb5565b60006119673061128a565b116119c35760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610cb5565b6009546119de9030906001600160a01b0316610f398261128a565b6009546001600160a01b031663f305d71947306119fa8161128a565b60008033426040518863ffffffff1660e01b8152600401611a20969594939291906138ae565b60606040518083038185885af1158015611a3e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a6391906138e9565b50505050565b60606011805480602002602001604051908101604052809291908181526020018280548015610c6b57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611aa3575050505050905090565b6005546001600160a01b03163314611af45760405162461bcd60e51b8152600401610cb590613747565b600a546001600160a01b0390811690831603611b785760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cb5565b611b82828261311d565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314611be85760405162461bcd60e51b8152600401610cb590613747565b6013805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611c795760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610cb5565b611c8633858584036122da565b5060019392505050565b6000610c823384846123fe565b6005546001600160a01b03163314611cc75760405162461bcd60e51b8152600401610cb590613747565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611d505760405162461bcd60e51b8152600401610cb590613747565b601e839055601f829055602081905580611d6a83856137d3565b611d7491906137d3565b601d819055601410156114ba5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610cb5565b6005546001600160a01b03163314611df35760405162461bcd60e51b8152600401610cb590613747565b670de0b6b3a76400006103e8611e0860025490565b611e13906005613792565b611e1d91906137b1565b611e2791906137b1565b811015611e895760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610cb5565b611e9b81670de0b6b3a7640000613792565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610ef7565b6005546001600160a01b03163314611efa5760405162461bcd60e51b8152600401610cb590613747565b620186a0611f0760025490565b611f12906001613792565b611f1c91906137b1565b811015611f895760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610cb5565b6103e8611f9560025490565b611fa0906001613792565b611faa91906137b1565b8111156120165760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610cb5565b600b55565b6005546001600160a01b031633146120455760405162461bcd60e51b8152600401610cb590613747565b670de0b6b3a764000061271061205a60025490565b612065906001613792565b61206f91906137b1565b61207991906137b1565b8110156120dc5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260448201526a207468616e20302e30312560a81b6064820152608401610cb5565b6120ee81670de0b6b3a7640000613792565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610ef7565b6005546001600160a01b0316331461214d5760405162461bcd60e51b8152600401610cb590613747565b6015805460ff19169055565b6011818154811061216957600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146121ad5760405162461bcd60e51b8152600401610cb590613747565b6001600160a01b0381166122125760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cb5565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146122985760405162461bcd60e51b8152600401610cb590613747565b604051600090339047908381818185875af1925050503d8060008114611a63576040519150601f19603f3d011682016040523d82523d6000602084013e611a63565b6001600160a01b03831661233c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cb5565b6001600160a01b03821661239d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cb5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124245760405162461bcd60e51b8152600401610cb590613917565b6001600160a01b03821661244a5760405162461bcd60e51b8152600401610cb59061395c565b6000811161249a5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610cb5565b601354610100900460ff1661252d576001600160a01b03831660009081526024602052604090205460ff16806124e857506001600160a01b03821660009081526024602052604090205460ff165b61252d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610cb5565b600f5443101580156125465750601354610100900460ff165b15612616576001600160a01b03831660009081526010602052604090205460ff16158061258057506005546001600160a01b038381169116145b8061259557506001600160a01b03821661dead145b6126165760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610cb5565b60135460ff16156129f4576005546001600160a01b0384811691161480159061264d57506005546001600160a01b03838116911614155b801561266457506001600160a01b03821661dead14155b801561268957506001600160a01b03831660009081526024602052604090205460ff16155b80156126ae57506001600160a01b03821660009081526024602052604090205460ff16155b156129f45760155460ff16156127c7576009546001600160a01b038381169116148015906126ea5750600a546001600160a01b03838116911614155b156127c7576126fa60024361399f565b32600090815260146020526040902054108015612738575061271d60024361399f565b6001600160a01b038316600090815260146020526040902054105b6127a25760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610cb5565b3260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526026602052604090205460ff16801561280857506001600160a01b03821660009081526025602052604090205460ff16155b156128cf576006548111156128705760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610cb5565b60085461287c8361128a565b61288690836137d3565b11156128ca5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610cb5565b6129f4565b6001600160a01b03821660009081526026602052604090205460ff16801561291057506001600160a01b03831660009081526025602052604090205460ff16155b1561297a576007548111156128ca5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610cb5565b6001600160a01b03821660009081526025602052604090205460ff166129f4576008546129a68361128a565b6129b090836137d3565b11156129f45760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610cb5565b60006129ff3061128a565b600b5490915081108015908190612a1e575060135462010000900460ff165b8015612a345750600a54600160a01b900460ff16155b8015612a5857506001600160a01b03841660009081526026602052604090205460ff165b15612a8657600a805460ff60a01b1916600160a01b179055612a78612f15565b600a805460ff60a01b191690555b6001600160a01b03851660009081526024602052604090205460019060ff1680612ac857506001600160a01b03851660009081526024602052604090205460ff165b15612ad1575060005b60008115612f0157600f54431080612b175750670c7d713b49da0000600654612afa919061399f565b8510158015612b17575043600f546008612b1491906137d3565b10155b8015612b3b57506001600160a01b03871660009081526026602052604090205460ff165b8015612b6057506001600160a01b03861660009081526026602052604090205460ff16155b8015612b8557506001600160a01b03861660009081526024602052604090205460ff16155b8015612b9357506000601654115b15612d4a57600f544310612bba57600160066000828254612bb4919061399f565b90915550505b6001600160a01b03861660009081526010602052604090205460ff16612c9a576001600160a01b0386166000908152601060205260408120805460ff191660019081179091556012805491929091612c139084906137d3565b9091555050601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612ca7866063613792565b612cb191906137b1565b905060165460185482612cc49190613792565b612cce91906137b1565b60226000828254612cdf91906137d3565b9091555050601654601754612cf49083613792565b612cfe91906137b1565b60216000828254612d0f91906137d3565b9091555050601654601954612d249083613792565b612d2e91906137b1565b60236000828254612d3f91906137d3565b90915550612ee39050565b6001600160a01b03861660009081526026602052604090205460ff168015612d7457506000601d54115b15612e06576064601d5486612d899190613792565b612d9391906137b1565b9050601d54601f5482612da69190613792565b612db091906137b1565b60226000828254612dc191906137d3565b9091555050601d54601e54612dd69083613792565b612de091906137b1565b60216000828254612df191906137d3565b9091555050601d54602054612d249083613792565b6001600160a01b03871660009081526026602052604090205460ff168015612e3057506000601654115b15612ee357606460165486612e459190613792565b612e4f91906137b1565b905060165460185482612e629190613792565b612e6c91906137b1565b60226000828254612e7d91906137d3565b9091555050601654601754612e929083613792565b612e9c91906137b1565b60216000828254612ead91906137d3565b9091555050601654601954612ec29083613792565b612ecc91906137b1565b60236000828254612edd91906137d3565b90915550505b8015612ef457612ef487308361314b565b612efe818661399f565b94505b612f0c87878761314b565b50505050505050565b6000612f203061128a565b90506000602354602154602254612f3791906137d3565b612f4191906137d3565b9050811580612f4e575080155b15612f57575050565b600b54612f6590600a613792565b821115612f7d57600b54612f7a90600a613792565b91505b60008060028360225486612f919190613792565b612f9b91906137b1565b612fa591906137b1565b9050612fb9612fb4828661399f565b6132a0565b60225447908190600090612fcf906002906137b1565b612fd9908761399f565b602154612fe69085613792565b612ff091906137b1565b90506000600260225461300391906137b1565b61300d908861399f565b60235461301a9086613792565b61302491906137b1565b905061303081836137d3565b61303a908461399f565b6000602281905560218190556023559250841580159061305a5750600083115b156130695761306985846133fa565b600d546040516001600160a01b03909116908290600081818185875af1925050503d80600081146130b6576040519150601f19603f3d011682016040523d82523d6000602084013e6130bb565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d806000811461310b576040519150601f19603f3d011682016040523d82523d6000602084013e613110565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602660205260409020805460ff1916821515179055611b82828261349b565b6001600160a01b0383166131715760405162461bcd60e51b8152600401610cb590613917565b6001600160a01b0382166131975760405162461bcd60e51b8152600401610cb59061395c565b6001600160a01b0383166000908152602081905260409020548181101561320f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610cb5565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906132469084906137d3565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161329291815260200190565b60405180910390a350505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106132d5576132d56139b6565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561332e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335291906139cc565b81600181518110613365576133656139b6565b6001600160a01b03928316602091820292909201015260095461338b91309116846122da565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906133c49085906000908690309042906004016139e9565b600060405180830381600087803b1580156133de57600080fd5b505af11580156133f2573d6000803e3d6000fd5b505050505050565b6009546134129030906001600160a01b0316846122da565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906134519030908790600090819061dead9042906004016138ae565b60606040518083038185885af115801561346f573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061349491906138e9565b5050505050565b6001600160a01b038216600081815260256020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b8181101561352b5785810183015185820160400152820161350f565b8181111561353d576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461356857600080fd5b50565b6000806040838503121561357e57600080fd5b823561358981613553565b946020939093013593505050565b6000602082840312156135a957600080fd5b81356135b481613553565b9392505050565b6000806000606084860312156135d057600080fd5b83356135db81613553565b925060208401356135eb81613553565b929592945050506040919091013590565b60006020828403121561360e57600080fd5b5035919050565b801515811461356857600080fd5b6000806040838503121561363657600080fd5b823561364181613553565b9150602083013561365181613615565b809150509250929050565b60008060006060848603121561367157600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561369b57600080fd5b82356136a681613553565b9150602083013561365181613553565b600081518084526020808501945080840160005b838110156136ef5781516001600160a01b0316875295820195908201906001016136ca565b509495945050505050565b6020815260006135b460208301846136b6565b600181811c9082168061372157607f821691505b60208210810361374157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156137ac576137ac61377c565b500290565b6000826137ce57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156137e6576137e661377c565b500190565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b60006020828403121561388a57600080fd5b5051919050565b6000602082840312156138a357600080fd5b81516135b481613615565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156138fe57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156139b1576139b161377c565b500390565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156139de57600080fd5b81516135b481613553565b85815284602082015260a060408201526000613a0860a08301866136b6565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220e5f983137f759d3fb477e18d6388e4e3fbf86a6ba042db6e79b2c887a14fb55964736f6c634300080d0033

Deployed Bytecode Sourcemap

10488:22541:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4220:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10636:27;;;;;;;;;;-1:-1:-1;10636:27:0;;;;-1:-1:-1;;;;;10636:27:0;;;;;;-1:-1:-1;;;;;798:32:1;;;780:51;;768:2;753:18;10636:27:0;616:221:1;5275:210:0;;;;;;;;;;-1:-1:-1;5275:210:0;;;;;:::i;:::-;;:::i;:::-;;;1463:14:1;;1456:22;1438:41;;1426:2;1411:18;5275:210:0;1298:187:1;12133:63:0;;;;;;;;;;-1:-1:-1;12133:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16470:194;;;;;;;;;;-1:-1:-1;16470:194:0;;;;;:::i;:::-;;:::i;:::-;;4541:108;;;;;;;;;;-1:-1:-1;4629:12:0;;4541:108;;;1888:25:1;;;1876:2;1861:18;4541:108:0;1742:177:1;11912:33:0;;;;;;;;;;;;;;;;5493:529;;;;;;;;;;-1:-1:-1;5493:529:0;;;;;:::i;:::-;;:::i;16831:312::-;;;;;;;;;;-1:-1:-1;16831:312:0;;;;;:::i;:::-;;:::i;4440:93::-;;;;;;;;;;-1:-1:-1;4440:93:0;;4523:2;2712:36:1;;2700:2;2685:18;4440:93:0;2570:184:1;6030:297:0;;;;;;;;;;-1:-1:-1;6030:297:0;;;;;:::i;:::-;;:::i;10670:21::-;;;;;;;;;;-1:-1:-1;10670:21:0;;;;-1:-1:-1;;;;;10670:21:0;;;30537:357;;;;;;;;;;-1:-1:-1;30537:357:0;;;;;:::i;:::-;;:::i;11084:33::-;;;;;;;;;;-1:-1:-1;11084:33:0;;;;;;;;11755:32;;;;;;;;;;;;;;;;31274:349;;;;;;;;;;;;;:::i;26902:121::-;;;;;;;;;;-1:-1:-1;26997:18:0;;26982:12;:33;26902:121;;11464:31;;;;;;;;;;;;;;;;16281:181;;;;;;;;;;-1:-1:-1;16281:181:0;;;;;:::i;:::-;;:::i;11539:29::-;;;;;;;;;;;;;;;;20348:294;;;;;;;;;;;;;:::i;30902:320::-;;;;;;;;;;-1:-1:-1;30902:320:0;;;;;:::i;:::-;;:::i;10568:28::-;;;;;;;;;;;;;;;;11720;;;;;;;;;;;;;;;;11050:25;;;;;;;;;;;;;;;;11832:30;;;;;;;;;;;;;;;;11164:31;;;;;;;;;;-1:-1:-1;11164:31:0;;;;;;;;;;;4657:177;;;;;;;;;;-1:-1:-1;4657:177:0;;;;;:::i;:::-;;:::i;8751:150::-;;;;;;;;;;;;;:::i;31675:84::-;;;;;;;;;;;;;:::i;18522:334::-;;;;;;;;;;-1:-1:-1;18522:334:0;;;;;:::i;:::-;;:::i;19469:427::-;;;;;;;;;;-1:-1:-1;19469:427:0;;;;;:::i;:::-;;:::i;15697:464::-;;;;;;;;;;-1:-1:-1;15697:464:0;;;;;:::i;:::-;;:::i;29707:567::-;;;;;;;;;;-1:-1:-1;29707:567:0;;;;;:::i;:::-;;:::i;10965:43::-;;;;;;;;;;-1:-1:-1;10965:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10534:27;;;;;;;;;;;;;;;;8537:79;;;;;;;;;;-1:-1:-1;8602:6:0;;-1:-1:-1;;;;;8602:6:0;8537:79;;4328:104;;;;;;;;;;;;;:::i;31859:1163::-;;;;;;;;;;-1:-1:-1;31859:1163:0;;;;;:::i;:::-;;:::i;16169:104::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18864:353::-;;;;;;;;;;-1:-1:-1;18864:353:0;;;;;:::i;:::-;;:::i;31767:84::-;;;;;;;;;;;;;:::i;6335:482::-;;;;;;;;;;-1:-1:-1;6335:482:0;;;;;:::i;:::-;;:::i;10925:33::-;;;;;;;;;;;;;;;;4842:216;;;;;;;;;;-1:-1:-1;4842:216:0;;;;;:::i;:::-;;:::i;12354:57::-;;;;;;;;;;-1:-1:-1;12354:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11124:33;;;;;;;;;;-1:-1:-1;11124:33:0;;;;;;;;;;;20650:182;;;;;;;;;;-1:-1:-1;20650:182:0;;;;;:::i;:::-;;:::i;19904:436::-;;;;;;;;;;-1:-1:-1;19904:436:0;;;;;:::i;:::-;;:::i;17476:311::-;;;;;;;;;;-1:-1:-1;17476:311:0;;;;;:::i;:::-;;:::i;10809:30::-;;;;;;;;;;-1:-1:-1;10809:30:0;;;;-1:-1:-1;;;;;10809:30:0;;;11382:39;;;;;;;;;;-1:-1:-1;11382:39:0;;;;;;;;11952:32;;;;;;;;;;;;;;;;17857:428;;;;;;;;;;-1:-1:-1;17857:428:0;;;;;:::i;:::-;;:::i;11430:27::-;;;;;;;;;;;;;;;;17151:317;;;;;;;;;;-1:-1:-1;17151:317:0;;;;;:::i;:::-;;:::i;5066:201::-;;;;;;;;;;-1:-1:-1;5066:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;5232:18:0;;;5200:7;5232:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5066:201;10728:33;;;;;;;;;;;;;;;;16725:98;;;;;;;;;;;;;:::i;10770:32::-;;;;;;;;;;-1:-1:-1;10770:32:0;;;;-1:-1:-1;;;;;10770:32:0;;;11015:28;;;;;;;;;;-1:-1:-1;11015:28:0;;;;;:::i;:::-;;:::i;10848:37::-;;;;;;;;;;;;;;;;11502:30;;;;;;;;;;;;;;;;8909:281;;;;;;;;;;-1:-1:-1;8909:281:0;;;;;:::i;:::-;;:::i;30344:185::-;;;;;;;;;;;;;:::i;11794:31::-;;;;;;;;;;;;;;;;10603:24;;;;;;;;;;;;;;;;11871:34;;;;;;;;;;;;;;;;4220:100;4274:13;4307:5;4300:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4220:100;:::o;5275:210::-;5394:4;5416:39;370:10;5439:7;5448:6;5416:8;:39::i;:::-;-1:-1:-1;5473:4:0;5275:210;;;;:::o;16470:194::-;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;;;;;;;;;16556:13:::1;::::0;::::1;::::0;::::1;;;16555:14;16547:68;;;::::0;-1:-1:-1;;;16547:68:0;;5871:2:1;16547:68:0::1;::::0;::::1;5853:21:1::0;5910:2;5890:18;;;5883:30;5949:34;5929:18;;;5922:62;-1:-1:-1;;;6000:18:1;;;5993:39;6049:19;;16547:68:0::1;5669:405:1::0;16547:68:0::1;16626:9;:30:::0;;-1:-1:-1;;;;;;16626:30:0::1;-1:-1:-1::0;;;;;16626:30:0;;;::::1;::::0;;;::::1;::::0;;16470:194::o;5493:529::-;5633:4;5650:36;5660:6;5668:9;5679:6;5650:9;:36::i;:::-;-1:-1:-1;;;;;5726:19:0;;5699:24;5726:19;;;:11;:19;;;;;;;;370:10;5726:33;;;;;;;;5792:26;;;;5770:116;;;;-1:-1:-1;;;5770:116:0;;6281:2:1;5770:116:0;;;6263:21:1;6320:2;6300:18;;;6293:30;6359:34;6339:18;;;6332:62;-1:-1:-1;;;6410:18:1;;;6403:38;6458:19;;5770:116:0;6079:404:1;5770:116:0;5922:57;5931:6;370:10;5972:6;5953:16;:25;5922:8;:57::i;:::-;-1:-1:-1;6010:4:0;;5493:529;-1:-1:-1;;;;5493:529:0:o;16831:312::-;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;16969:4:::1;16960:5;16939:13;4629:12:::0;;;4541:108;16939:13:::1;:17;::::0;16955:1:::1;16939:17;:::i;:::-;16938:27;;;;:::i;:::-;16937:36;;;;:::i;:::-;16927:6;:46;;16905:138;;;::::0;-1:-1:-1;;;16905:138:0;;7217:2:1;16905:138:0::1;::::0;::::1;7199:21:1::0;7256:2;7236:18;;;7229:30;7295:34;7275:18;;;7268:62;-1:-1:-1;;;7346:18:1;;;7339:40;7396:19;;16905:138:0::1;7015:406:1::0;16905:138:0::1;17069:17;:6:::0;17079::::1;17069:17;:::i;:::-;17054:12;:32:::0;;;17102:33:::1;::::0;1888:25:1;;;17102:33:0::1;::::0;1876:2:1;1861:18;17102:33:0::1;;;;;;;;16831:312:::0;:::o;6030:297::-;370:10;6145:4;6239:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6239:34:0;;;;;;;;;;6145:4;;6167:130;;6217:7;;6239:47;;6276:10;;6239:47;:::i;:::-;6167:8;:130::i;30537:357::-;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30670:32:0;::::1;30648:120;;;;-1:-1:-1::0;;;30648:120:0::1;;;;;;;:::i;:::-;30779:17;:47:::0;;-1:-1:-1;;;;;;30779:47:0::1;-1:-1:-1::0;;;;;30779:47:0;::::1;::::0;;::::1;::::0;;;30842:44:::1;::::0;::::1;::::0;-1:-1:-1;;30842:44:0::1;30537:357:::0;:::o;31274:349::-;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;31379:18:::1;;31351:24;31369:4;31351:9;:24::i;:::-;:46;;31329:160;;;::::0;;-1:-1:-1;;;31329:160:0;;8168:2:1;31329:160:0::1;::::0;::::1;8150:21:1::0;8187:18;;;8180:30;;;;8246:34;8226:18;;;8219:62;8317:34;8297:18;;;8290:62;8369:19;;31329:160:0::1;7966:428:1::0;31329:160:0::1;31500:8;:15:::0;;-1:-1:-1;;;;31500:15:0::1;-1:-1:-1::0;;;31500:15:0::1;::::0;;31526:10:::1;:8;:10::i;:::-;31547:8;:16:::0;;-1:-1:-1;;;;31547:16:0::1;::::0;;31579:36:::1;::::0;31599:15:::1;1888:25:1::0;;31579:36:0::1;::::0;1876:2:1;1861:18;31579:36:0::1;;;;;;;31274:349::o:0;16281:181::-;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16362:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;16354:62;;;::::0;-1:-1:-1;;;16354:62:0;;8601:2:1;16354:62:0::1;::::0;::::1;8583:21:1::0;8640:2;8620:18;;;8613:30;8679:32;8659:18;;;8652:60;8729:18;;16354:62:0::1;8399:354:1::0;16354:62:0::1;-1:-1:-1::0;;;;;16427:19:0::1;16449:5;16427:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;16427:27:0::1;::::0;;16281:181::o;20348:294::-;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;20422:25:::1;::::0;20402:17:::1;:45:::0;;;20477:24:::1;::::0;20458:16:::1;:43:::0;;;20530:23:::1;::::0;20512:15:::1;:41:::0;;;20530:23;20580:36:::1;::::0;20477:24;20580:36:::1;:::i;:::-;:54;;;;:::i;:::-;20564:13;:70:::0;20348:294::o;30902:320::-;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31008:30:0;::::1;30986:118;;;;-1:-1:-1::0;;;30986:118:0::1;;;;;;;:::i;:::-;31115:15;:43:::0;;-1:-1:-1;;;;;;31115:43:0::1;-1:-1:-1::0;;;;;31115:43:0;::::1;::::0;;::::1;::::0;;;31174:40:::1;::::0;::::1;::::0;-1:-1:-1;;31174:40:0::1;30902:320:::0;:::o;4657:177::-;-1:-1:-1;;;;;4808:18:0;4776:7;4808:18;;;;;;;;;;;;4657:177::o;8751:150::-;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;8844:6:::1;::::0;8823:40:::1;::::0;8860:1:::1;::::0;-1:-1:-1;;;;;8844:6:0::1;::::0;8823:40:::1;::::0;8860:1;;8823:40:::1;8874:6;:19:::0;;-1:-1:-1;;;;;;8874:19:0::1;::::0;;8751:150::o;31675:84::-;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;31729:14:::1;:22:::0;;-1:-1:-1;;31729:22:0::1;::::0;;31675:84::o;18522:334::-;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;18642:4:::1;18637:155;;18699:6;::::0;-1:-1:-1;;;;;18699:6:0;;::::1;18689:16:::0;;::::1;::::0;18663:117:::1;;;::::0;-1:-1:-1;;;18663:117:0;;8960:2:1;18663:117:0::1;::::0;::::1;8942:21:1::0;8999:2;8979:18;;;8972:30;9038:34;9018:18;;;9011:62;-1:-1:-1;;;9089:18:1;;;9082:37;9136:19;;18663:117:0::1;8758:403:1::0;18663:117:0::1;-1:-1:-1::0;;;;;18802:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;18802:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18522:334::o;19469:427::-;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;19625:16:::1;:33:::0;;;19669:15:::1;:31:::0;;;19711:14:::1;:29:::0;;;19728:12;19766:34:::1;19687:13:::0;19644:14;19766:34:::1;:::i;:::-;:51;;;;:::i;:::-;19751:12;:66:::0;;;19852:2:::1;-1:-1:-1::0;19836:18:0::1;19828:60;;;::::0;-1:-1:-1;;;19828:60:0;;9368:2:1;19828:60:0::1;::::0;::::1;9350:21:1::0;9407:2;9387:18;;;9380:30;9446:31;9426:18;;;9419:59;9495:18;;19828:60:0::1;9166:353:1::0;19828:60:0::1;19469:427:::0;;;:::o;15697:464::-;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;15785:13:::1;::::0;::::1;::::0;::::1;;;15784:14;15776:50;;;::::0;-1:-1:-1;;;15776:50:0;;9726:2:1;15776:50:0::1;::::0;::::1;9708:21:1::0;9765:2;9745:18;;;9738:30;9804:25;9784:18;;;9777:53;9847:18;;15776:50:0::1;9524:347:1::0;15776:50:0::1;15879:2;15859:16;:22;;15837:111;;;;-1:-1:-1::0;;;15837:111:0::1;;;;;;;:::i;:::-;15959:13;:20:::0;;-1:-1:-1;;15990:18:0;;;;;16040:12:::1;16019:18;:33:::0;;;16084:37:::1;::::0;16105:16;;16084:37:::1;:::i;:::-;16063:18;:58:::0;16137:16:::1;::::0;::::1;::::0;;;::::1;15697:464:::0;:::o;29707:567::-;8664:6;;29821:10;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29857:20:0;::::1;29849:59;;;::::0;-1:-1:-1;;;29849:59:0;;10486:2:1;29849:59:0::1;::::0;::::1;10468:21:1::0;10525:2;10505:18;;;10498:30;10564:28;10544:18;;;10537:56;10610:18;;29849:59:0::1;10284:350:1::0;29849:59:0::1;-1:-1:-1::0;;;;;29941:23:0;::::1;29959:4;29941:23;;::::0;:41:::1;;-1:-1:-1::0;29969:13:0::1;::::0;::::1;::::0;::::1;;;29968:14;29941:41;29919:143;;;::::0;-1:-1:-1;;;29919:143:0;;10841:2:1;29919:143:0::1;::::0;::::1;10823:21:1::0;10880:2;10860:18;;;10853:30;10919:34;10899:18;;;10892:62;-1:-1:-1;;;10970:18:1;;;10963:50;11030:19;;29919:143:0::1;10639:416:1::0;29919:143:0::1;30100:39;::::0;-1:-1:-1;;;30100:39:0;;30133:4:::1;30100:39;::::0;::::1;780:51:1::0;30073:24:0::1;::::0;-1:-1:-1;;;;;30100:24:0;::::1;::::0;::::1;::::0;753:18:1;;30100:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30158:46;::::0;-1:-1:-1;;;30158:46:0;;-1:-1:-1;;;;;11441:32:1;;;30158:46:0::1;::::0;::::1;11423:51:1::0;11490:18;;;11483:34;;;30073:66:0;;-1:-1:-1;30158:23:0;;::::1;::::0;::::1;::::0;11396:18:1;;30158:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30220;::::0;;-1:-1:-1;;;;;11441:32:1;;11423:51;;11505:2;11490:18;;11483:34;;;30150:54:0;;-1:-1:-1;30220:46:0::1;::::0;11396:18:1;30220:46:0::1;;;;;;;29838:436;29707:567:::0;;;;:::o;4328:104::-;4384:13;4417:7;4410:14;;;;;:::i;31859:1163::-;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;31941:13:::1;::::0;::::1;::::0;::::1;;;31940:14;31932:70;;;::::0;-1:-1:-1;;;31932:70:0;;11980:2:1;31932:70:0::1;::::0;::::1;11962:21:1::0;12019:2;11999:18;;;11992:30;12058:34;12038:18;;;12031:62;-1:-1:-1;;;12109:18:1;;;12102:41;12160:19;;31932:70:0::1;11778:407:1::0;31932:70:0::1;32054:2;32035:16;:21;32013:110;;;;-1:-1:-1::0;;;32013:110:0::1;;;;;;;:::i;:::-;32171:13;:20:::0;;-1:-1:-1;;32202:18:0;;;;;32252:12:::1;32231:18;:33:::0;;;32296:37:::1;::::0;32317:16;;32296:37:::1;:::i;:::-;32275:18;:58:::0;32349:16:::1;::::0;::::1;::::0;;;::::1;32454:1;32430:21;:25;32408:110;;;::::0;-1:-1:-1;;;32408:110:0;;12392:2:1;32408:110:0::1;::::0;::::1;12374:21:1::0;12431:2;12411:18;;;12404:30;12470:34;12450:18;;;12443:62;-1:-1:-1;;;12521:18:1;;;12514:33;12564:19;;32408:110:0::1;12190:399:1::0;32408:110:0::1;32578:1;32551:24;32569:4;32551:9;:24::i;:::-;:28;32529:116;;;::::0;-1:-1:-1;;;32529:116:0;;12796:2:1;32529:116:0::1;::::0;::::1;12778:21:1::0;12835:2;12815:18;;;12808:30;12874:34;12854:18;;;12847:62;-1:-1:-1;;;12925:18:1;;;12918:36;12971:19;;32529:116:0::1;12594:402:1::0;32529:116:0::1;32690:9;::::0;32658:69:::1;::::0;32675:4:::1;::::0;-1:-1:-1;;;;;32690:9:0::1;32702:24;32675:4:::0;32702:9:::1;:24::i;32658:69::-;32740:9;::::0;-1:-1:-1;;;;;32740:9:0::1;:25;32773:21;32818:4;32838:24;32818:4:::0;32838:9:::1;:24::i;:::-;32877:1;32920::::0;32963:10:::1;32988:15;32740:274;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31859:1163:::0;:::o;16169:104::-;16218:16;16254:11;16247:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16247:18:0;;;;;;;;;;;;;;;;;;;;;;16169:104;:::o;18864:353::-;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;19010:6:::1;::::0;-1:-1:-1;;;;;19010:6:0;;::::1;19002:14:::0;;::::1;::::0;18980:121:::1;;;::::0;-1:-1:-1;;;18980:121:0;;14126:2:1;18980:121:0::1;::::0;::::1;14108:21:1::0;14165:2;14145:18;;;14138:30;14204:34;14184:18;;;14177:62;14275:27;14255:18;;;14248:55;14320:19;;18980:121:0::1;13924:421:1::0;18980:121:0::1;19112:41;19141:4;19147:5;19112:28;:41::i;:::-;19169:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;19169:40:0;::::1;::::0;::::1;::::0;;;::::1;18864:353:::0;;:::o;31767:84::-;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;31822:14:::1;:21:::0;;-1:-1:-1;;31822:21:0::1;31839:4;31822:21;::::0;;31767:84::o;6335:482::-;370:10;6455:4;6504:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6504:34:0;;;;;;;;;;6571:35;;;;6549:122;;;;-1:-1:-1;;;6549:122:0;;14552:2:1;6549:122:0;;;14534:21:1;14591:2;14571:18;;;14564:30;14630:34;14610:18;;;14603:62;-1:-1:-1;;;14681:18:1;;;14674:35;14726:19;;6549:122:0;14350:401:1;6549:122:0;6707:67;370:10;6730:7;6758:15;6739:16;:34;6707:8;:67::i;:::-;-1:-1:-1;6805:4:0;;6335:482;-1:-1:-1;;;6335:482:0:o;4842:216::-;4964:4;4986:42;370:10;5010:9;5021:6;4986:9;:42::i;20650:182::-;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20735:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20735:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20790:34;;1438:41:1;;;20790:34:0::1;::::0;1411:18:1;20790:34:0::1;;;;;;;20650:182:::0;;:::o;19904:436::-;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;20061:17:::1;:34:::0;;;20106:16:::1;:32:::0;;;20149:15:::1;:30:::0;;;20167:12;20206:36:::1;20125:13:::0;20081:14;20206:36:::1;:::i;:::-;:54;;;;:::i;:::-;20190:13;:70:::0;;;20296:2:::1;-1:-1:-1::0;20279:19:0::1;20271:61;;;::::0;-1:-1:-1;;;20271:61:0;;14958:2:1;20271:61:0::1;::::0;::::1;14940:21:1::0;14997:2;14977:18;;;14970:30;15036:31;15016:18;;;15009:59;15085:18;;20271:61:0::1;14756:353:1::0;17476:311:0;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;17616:4:::1;17608;17587:13;4629:12:::0;;;4541:108;17587:13:::1;:17;::::0;17603:1:::1;17587:17;:::i;:::-;17586:26;;;;:::i;:::-;17585:35;;;;:::i;:::-;17575:6;:45;;17553:137;;;::::0;-1:-1:-1;;;17553:137:0;;15316:2:1;17553:137:0::1;::::0;::::1;15298:21:1::0;15355:2;15335:18;;;15328:30;15394:34;15374:18;;;15367:62;-1:-1:-1;;;15445:18:1;;;15438:40;15495:19;;17553:137:0::1;15114:406:1::0;17553:137:0::1;17713:17;:6:::0;17723::::1;17713:17;:::i;:::-;17701:9;:29:::0;;;17746:33:::1;::::0;1888:25:1;;;17746:33:0::1;::::0;1876:2:1;1861:18;17746:33:0::1;1742:177:1::0;17857:428:0;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;17997:6:::1;17976:13;4629:12:::0;;;4541:108;17976:13:::1;:17;::::0;17992:1:::1;17976:17;:::i;:::-;17975:28;;;;:::i;:::-;17962:9;:41;;17940:144;;;::::0;-1:-1:-1;;;17940:144:0;;15727:2:1;17940:144:0::1;::::0;::::1;15709:21:1::0;15766:2;15746:18;;;15739:30;15805:34;15785:18;;;15778:62;-1:-1:-1;;;15856:18:1;;;15849:51;15917:19;;17940:144:0::1;15525:417:1::0;17940:144:0::1;18152:4;18131:13;4629:12:::0;;;4541:108;18131:13:::1;:17;::::0;18147:1:::1;18131:17;:::i;:::-;18130:26;;;;:::i;:::-;18117:9;:39;;18095:141;;;::::0;-1:-1:-1;;;18095:141:0;;16149:2:1;18095:141:0::1;::::0;::::1;16131:21:1::0;16188:2;16168:18;;;16161:30;16227:34;16207:18;;;16200:62;-1:-1:-1;;;16278:18:1;;;16271:50;16338:19;;18095:141:0::1;15947:416:1::0;18095:141:0::1;18247:18;:30:::0;17857:428::o;17151:317::-;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;17290:4:::1;17281:5;17260:13;4629:12:::0;;;4541:108;17260:13:::1;:17;::::0;17276:1:::1;17260:17;:::i;:::-;17259:27;;;;:::i;:::-;17258:36;;;;:::i;:::-;17248:6;:46;;17226:139;;;::::0;-1:-1:-1;;;17226:139:0;;16570:2:1;17226:139:0::1;::::0;::::1;16552:21:1::0;16609:2;16589:18;;;16582:30;16648:34;16628:18;;;16621:62;-1:-1:-1;;;16699:18:1;;;16692:41;16750:19;;17226:139:0::1;16368:407:1::0;17226:139:0::1;17392:17;:6:::0;17402::::1;17392:17;:::i;:::-;17376:13;:33:::0;;;17425:35:::1;::::0;1888:25:1;;;17425:35:0::1;::::0;1876:2:1;1861:18;17425:35:0::1;1742:177:1::0;16725:98:0;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;16787:20:::1;:28:::0;;-1:-1:-1;;16787:28:0::1;::::0;;16725:98::o;11015:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11015:28:0;;-1:-1:-1;11015:28:0;:::o;8909:281::-;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9012:22:0;::::1;8990:110;;;::::0;-1:-1:-1;;;8990:110:0;;16982:2:1;8990:110:0::1;::::0;::::1;16964:21:1::0;17021:2;17001:18;;;16994:30;17060:34;17040:18;;;17033:62;-1:-1:-1;;;17111:18:1;;;17104:36;17157:19;;8990:110:0::1;16780:402:1::0;8990:110:0::1;9137:6;::::0;9116:38:::1;::::0;-1:-1:-1;;;;;9116:38:0;;::::1;::::0;9137:6:::1;::::0;9116:38:::1;::::0;9137:6:::1;::::0;9116:38:::1;9165:6;:17:::0;;-1:-1:-1;;;;;;9165:17:0::1;-1:-1:-1::0;;;;;9165:17:0;;;::::1;::::0;;;::::1;::::0;;8909:281::o;30344:185::-;8664:6;;-1:-1:-1;;;;;8664:6:0;370:10;8664:22;8656:67;;;;-1:-1:-1;;;8656:67:0;;;;;;;:::i;:::-;30439:82:::1;::::0;30402:12:::1;::::0;30447:10:::1;::::0;30471:21:::1;::::0;30402:12;30439:82;30402:12;30439:82;30471:21;30447:10;30439:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7806:380:::0;-1:-1:-1;;;;;7942:19:0;;7934:68;;;;-1:-1:-1;;;7934:68:0;;17599:2:1;7934:68:0;;;17581:21:1;17638:2;17618:18;;;17611:30;17677:34;17657:18;;;17650:62;-1:-1:-1;;;17728:18:1;;;17721:34;17772:19;;7934:68:0;17397:400:1;7934:68:0;-1:-1:-1;;;;;8021:21:0;;8013:68;;;;-1:-1:-1;;;8013:68:0;;18004:2:1;8013:68:0;;;17986:21:1;18043:2;18023:18;;;18016:30;18082:34;18062:18;;;18055:62;-1:-1:-1;;;18133:18:1;;;18126:32;18175:19;;8013:68:0;17802:398:1;8013:68:0;-1:-1:-1;;;;;8094:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8146:32;;1888:25:1;;;8146:32:0;;1861:18:1;8146:32:0;;;;;;;7806:380;;;:::o;20840:6054::-;-1:-1:-1;;;;;20972:18:0;;20964:68;;;;-1:-1:-1;;;20964:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21051:16:0;;21043:64;;;;-1:-1:-1;;;21043:64:0;;;;;;;:::i;:::-;21135:1;21126:6;:10;21118:52;;;;-1:-1:-1;;;21118:52:0;;19217:2:1;21118:52:0;;;19199:21:1;19256:2;19236:18;;;19229:30;19295:31;19275:18;;;19268:59;19344:18;;21118:52:0;19015:353:1;21118:52:0;21188:13;;;;;;;21183:183;;-1:-1:-1;;;;;21244:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;21273:23:0;;;;;;:19;:23;;;;;;;;21244:52;21218:136;;;;-1:-1:-1;;;21218:136:0;;19575:2:1;21218:136:0;;;19557:21:1;19614:2;19594:18;;;19587:30;-1:-1:-1;;;19633:18:1;;;19626:52;19695:18;;21218:136:0;19373:346:1;21218:136:0;26997:18;;26982:12;:33;21382:26;:43;;;;-1:-1:-1;21412:13:0;;;;;;;21382:43;21378:268;;;-1:-1:-1;;;;;21469:17:0;;;;;;:11;:17;;;;;;;;21468:18;;:35;;-1:-1:-1;8602:6:0;;-1:-1:-1;;;;;21490:13:0;;;8602:6;;21490:13;21468:35;:60;;;-1:-1:-1;;;;;;21507:21:0;;21521:6;21507:21;21468:60;21442:192;;;;-1:-1:-1;;;21442:192:0;;19926:2:1;21442:192:0;;;19908:21:1;19965:2;19945:18;;;19938:30;20004:34;19984:18;;;19977:62;20075:34;20055:18;;;20048:62;-1:-1:-1;;;20126:19:1;;;20119:37;20173:19;;21442:192:0;19724:474:1;21442:192:0;21662:14;;;;21658:2148;;;8602:6;;-1:-1:-1;;;;;21715:15:0;;;8602:6;;21715:15;;;;:49;;-1:-1:-1;8602:6:0;;-1:-1:-1;;;;;21751:13:0;;;8602:6;;21751:13;;21715:49;:91;;;;-1:-1:-1;;;;;;21785:21:0;;21799:6;21785:21;;21715:91;:138;;;;-1:-1:-1;;;;;;21828:25:0;;;;;;:19;:25;;;;;;;;21827:26;21715:138;:183;;;;-1:-1:-1;;;;;;21875:23:0;;;;;;:19;:23;;;;;;;;21874:24;21715:183;21693:2102;;;21937:20;;;;21933:692;;;22000:9;;-1:-1:-1;;;;;21986:24:0;;;22000:9;;21986:24;;;;:49;;-1:-1:-1;22028:6:0;;-1:-1:-1;;;;;22014:21:0;;;22028:6;;22014:21;;21986:49;21982:624;;;22177:16;22192:1;22177:12;:16;:::i;:::-;22131:9;22102:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;22298:16:0;22313:1;22298:12;:16;:::i;:::-;-1:-1:-1;;;;;22230:32:0;;;;;;:28;:32;;;;;;:84;22102:212;22064:363;;;;-1:-1:-1;;;22064:363:0;;20535:2:1;22064:363:0;;;20517:21:1;20574:2;20554:18;;;20547:30;20613:34;20593:18;;;20586:62;-1:-1:-1;;;20664:18:1;;;20657:51;20725:19;;22064:363:0;20333:417:1;22064:363:0;22483:9;22454:39;;;;:28;:39;;;;;;22496:12;22454:54;;;;-1:-1:-1;;;;;22535:32:0;;;;;;:47;21982:624;-1:-1:-1;;;;;22699:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;22756:35:0;;;;;;:31;:35;;;;;;;;22755:36;22699:92;22673:1107;;;22878:12;;22868:6;:22;;22834:148;;;;-1:-1:-1;;;22834:148:0;;20957:2:1;22834:148:0;;;20939:21:1;20996:2;20976:18;;;20969:30;21035:34;21015:18;;;21008:62;-1:-1:-1;;;21086:18:1;;;21079:38;21134:19;;22834:148:0;20755:404:1;22834:148:0;23065:9;;23048:13;23058:2;23048:9;:13::i;:::-;23039:22;;:6;:22;:::i;:::-;:35;;23005:140;;;;-1:-1:-1;;;23005:140:0;;21366:2:1;23005:140:0;;;21348:21:1;21405:2;21385:18;;;21378:30;-1:-1:-1;;;21424:18:1;;;21417:49;21483:18;;23005:140:0;21164:343:1;23005:140:0;22673:1107;;;-1:-1:-1;;;;;23243:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;23298:37:0;;;;;;:31;:37;;;;;;;;23297:38;23243:92;23217:563;;;23422:13;;23412:6;:23;;23378:151;;;;-1:-1:-1;;;23378:151:0;;21714:2:1;23378:151:0;;;21696:21:1;21753:2;21733:18;;;21726:30;21792:34;21772:18;;;21765:62;-1:-1:-1;;;21843:18:1;;;21836:40;21893:19;;23378:151:0;21512:406:1;23217:563:0;-1:-1:-1;;;;;23560:35:0;;;;;;:31;:35;;;;;;;;23555:225;;23680:9;;23663:13;23673:2;23663:9;:13::i;:::-;23654:22;;:6;:22;:::i;:::-;:35;;23620:140;;;;-1:-1:-1;;;23620:140:0;;21366:2:1;23620:140:0;;;21348:21:1;21405:2;21385:18;;;21378:30;-1:-1:-1;;;21424:18:1;;;21417:49;21483:18;;23620:140:0;21164:343:1;23620:140:0;23818:28;23849:24;23867:4;23849:9;:24::i;:::-;23925:18;;23818:55;;-1:-1:-1;23901:42:0;;;;;;;23974:22;;-1:-1:-1;23985:11:0;;;;;;;23974:22;:35;;;;-1:-1:-1;24001:8:0;;-1:-1:-1;;;24001:8:0;;;;24000:9;23974:35;:68;;;;-1:-1:-1;;;;;;24013:29:0;;;;;;:25;:29;;;;;;;;23974:68;23956:196;;;24069:8;:15;;-1:-1:-1;;;;24069:15:0;-1:-1:-1;;;24069:15:0;;;24099:10;:8;:10::i;:::-;24124:8;:16;;-1:-1:-1;;;;24124:16:0;;;23956:196;-1:-1:-1;;;;;24283:25:0;;24164:12;24283:25;;;:19;:25;;;;;;24179:4;;24283:25;;;:52;;-1:-1:-1;;;;;;24312:23:0;;;;;;:19;:23;;;;;;;;24283:52;24279:100;;;-1:-1:-1;24362:5:0;24279:100;24391:12;24496:7;24492:2349;;;26997:18;;26982:12;:33;24579:152;;;;24655:8;24640:12;;:23;;;;:::i;:::-;24630:6;:33;;:100;;;;;24718:12;24692:18;;24713:1;24692:22;;;;:::i;:::-;:38;;24630:100;24578:206;;;;-1:-1:-1;;;;;;24753:31:0;;;;;;:25;:31;;;;;;;;24578:206;:257;;;;-1:-1:-1;;;;;;24806:29:0;;;;;;:25;:29;;;;;;;;24805:30;24578:257;:302;;;;-1:-1:-1;;;;;;24857:23:0;;;;;;:19;:23;;;;;;;;24856:24;24578:302;:339;;;;;24916:1;24901:12;;:16;24578:339;24556:2136;;;26997:18;;26982:12;:33;24952:332;;25263:1;25247:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;24952:332:0;-1:-1:-1;;;;;25309:15:0;;;;;;:11;:15;;;;;;;;25304:216;;-1:-1:-1;;;;;25349:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;25349:22:0;25367:4;25349:22;;;;;;25394:10;:15;;25367:4;;25394:10;;:15;;25367:4;;25394:15;:::i;:::-;;;;-1:-1:-1;;25432:11:0;:20;;;;;;;-1:-1:-1;25432:20:0;;;;;;;;-1:-1:-1;;;;;;25432:20:0;-1:-1:-1;;;;;25432:20:0;;;;;;;;25480;;780:51:1;;;25480:20:0;;768:2:1;753:18;25480:20:0;;;;;;;25304:216;25563:3;25548:11;:6;25557:2;25548:11;:::i;:::-;25547:19;;;;:::i;:::-;25540:26;;25635:12;;25616:15;;25609:4;:22;;;;:::i;:::-;25608:39;;;;:::i;:::-;25586:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25717:12:0;;25697:16;;25690:23;;:4;:23;:::i;:::-;25689:40;;;;:::i;:::-;25666:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25795:12:0;;25777:14;;25770:21;;:4;:21;:::i;:::-;25769:38;;;;:::i;:::-;25748:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;24556:2136:0;;-1:-1:-1;24556:2136:0;;-1:-1:-1;;;;;25870:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;25919:1;25903:13;;:17;25870:50;25866:826;;;25975:3;25958:13;;25949:6;:22;;;;:::i;:::-;25948:30;;;;:::i;:::-;25941:37;;26047:13;;26027:16;;26020:4;:23;;;;:::i;:::-;26019:41;;;;:::i;:::-;25997:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;26173:13:0;;26131:17;;26124:24;;:4;:24;:::i;:::-;26123:63;;;;:::i;:::-;26079:19;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;;26253:13:0;;26234:15;;26227:22;;:4;:22;:::i;25866:826::-;-1:-1:-1;;;;;26328:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;26378:1;26363:12;;:16;26328:51;26324:368;;;26433:3;26417:12;;26408:6;:21;;;;:::i;:::-;26407:29;;;;:::i;:::-;26400:36;;26504:12;;26485:15;;26478:4;:22;;;;:::i;:::-;26477:39;;;;:::i;:::-;26455:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26586:12:0;;26566:16;;26559:23;;:4;:23;:::i;:::-;26558:40;;;;:::i;:::-;26535:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;26664:12:0;;26646:14;;26639:21;;:4;:21;:::i;:::-;26638:38;;;;:::i;:::-;26617:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;26324:368:0;26712:8;;26708:91;;26741:42;26757:4;26771;26778;26741:15;:42::i;:::-;26815:14;26825:4;26815:14;;:::i;:::-;;;24492:2349;26853:33;26869:4;26875:2;26879:6;26853:15;:33::i;:::-;20953:5941;;;;20840:6054;;;:::o;28127:1572::-;28166:23;28192:24;28210:4;28192:9;:24::i;:::-;28166:50;;28227:25;28324:17;;28289:19;;28255:18;;:53;;;;:::i;:::-;:86;;;;:::i;:::-;28227:114;-1:-1:-1;28358:20:0;;;:46;;-1:-1:-1;28382:22:0;;28358:46;28354:85;;;28421:7;;28127:1572::o;28354:85::-;28473:18;;:23;;28494:2;28473:23;:::i;:::-;28455:15;:41;28451:115;;;28531:18;;:23;;28552:2;28531:23;:::i;:::-;28513:41;;28451:115;28578:12;28652:23;28765:1;28732:17;28697:18;;28679:15;:36;;;;:::i;:::-;28678:71;;;;:::i;:::-;:88;;;;:::i;:::-;28652:114;-1:-1:-1;28779:51:0;28796:33;28652:114;28796:15;:33;:::i;:::-;28779:16;:51::i;:::-;29044:18;;28864:21;;;;28843:18;;29044:22;;29065:1;;29044:22;:::i;:::-;29023:44;;:17;:44;:::i;:::-;28986:19;;28973:32;;:10;:32;:::i;:::-;28972:96;;;;:::i;:::-;28945:123;;29079:21;29194:1;29173:18;;:22;;;;:::i;:::-;29152:44;;:17;:44;:::i;:::-;29117:17;;29104:30;;:10;:30;:::i;:::-;29103:94;;;;:::i;:::-;29079:118;-1:-1:-1;29229:32:0;29079:118;29229:16;:32;:::i;:::-;29210:51;;;;:::i;:::-;29295:1;29274:18;:22;;;29307:19;:23;;;29341:17;:21;29210:51;-1:-1:-1;29379:19:0;;;;;:42;;;29420:1;29402:15;:19;29379:42;29375:121;;;29438:46;29451:15;29468;29438:12;:46::i;:::-;29530:15;;29522:55;;-1:-1:-1;;;;;29530:15:0;;;;29559:13;;29522:55;;;;29559:13;29530:15;29522:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29610:17:0;;29602:89;;29508:69;;-1:-1:-1;;;;;;29610:17:0;;29655:21;;29602:89;;;;29655:21;29610:17;29602:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28127:1572:0:o;19225:236::-;-1:-1:-1;;;;;19308:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;19308:39:0;;;;;;;19358;19308:31;:39;19358:26;:39::i;6825:651::-;-1:-1:-1;;;;;6965:20:0;;6957:70;;;;-1:-1:-1;;;6957:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7046:23:0;;7038:71;;;;-1:-1:-1;;;7038:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7146:17:0;;7122:21;7146:17;;;;;;;;;;;7196:23;;;;7174:111;;;;-1:-1:-1;;;7174:111:0;;22125:2:1;7174:111:0;;;22107:21:1;22164:2;22144:18;;;22137:30;22203:34;22183:18;;;22176:62;-1:-1:-1;;;22254:18:1;;;22247:36;22300:19;;7174:111:0;21923:402:1;7174:111:0;-1:-1:-1;;;;;7321:17:0;;;:9;:17;;;;;;;;;;;7341:22;;;7321:42;;7385:20;;;;;;;;:30;;7357:6;;7321:9;7385:30;;7357:6;;7385:30;:::i;:::-;;;;;;;;7450:9;-1:-1:-1;;;;;7433:35:0;7442:6;-1:-1:-1;;;;;7433:35:0;;7461:6;7433:35;;;;1888:25:1;;1876:2;1861:18;;1742:177;7433:35:0;;;;;;;;6946:530;6825:651;;;:::o;27031:571::-;27181:16;;;27195:1;27181:16;;;;;;;;27157:21;;27181:16;;;;;;;;;;-1:-1:-1;27181:16:0;27157:40;;27226:4;27208;27213:1;27208:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27208:23:0;;;:7;;;;;;;;;;:23;;;;27252:9;;:16;;;-1:-1:-1;;;27252:16:0;;;;:9;;;;;:14;;:16;;;;;27208:7;;27252:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27242:4;27247:1;27242:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27242:26:0;;;:7;;;;;;;;;:26;27313:9;;27281:56;;27298:4;;27313:9;27325:11;27281:8;:56::i;:::-;27376:9;;:218;;-1:-1:-1;;;27376:218:0;;-1:-1:-1;;;;;27376:9:0;;;;:60;;:218;;27451:11;;27376:9;;27521:4;;27548;;27568:15;;27376:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27086:516;27031:571;:::o;27610:509::-;27790:9;;27758:56;;27775:4;;-1:-1:-1;;;;;27790:9:0;27802:11;27758:8;:56::i;:::-;27857:9;;:254;;-1:-1:-1;;;27857:254:0;;-1:-1:-1;;;;;27857:9:0;;;;:25;;27890:9;;27857:254;;27923:4;;27943:11;;27857:9;;;;28063:6;;28085:15;;27857:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27610:509;;:::o;18293:221::-;-1:-1:-1;;;;;18395:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;18395:52:0;;;;;;;;;;18463:43;;23605:51:1;;;23672:18;;;23665:50;18463:43:0;;23578:18:1;18463:43:0;;;;;;;18293:221;;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;842:131::-;-1:-1:-1;;;;;917:31:1;;907:42;;897:70;;963:1;960;953:12;897:70;842:131;:::o;978:315::-;1046:6;1054;1107:2;1095:9;1086:7;1082:23;1078:32;1075:52;;;1123:1;1120;1113:12;1075:52;1162:9;1149:23;1181:31;1206:5;1181:31;:::i;:::-;1231:5;1283:2;1268:18;;;;1255:32;;-1:-1:-1;;;978:315:1:o;1490:247::-;1549:6;1602:2;1590:9;1581:7;1577:23;1573:32;1570:52;;;1618:1;1615;1608:12;1570:52;1657:9;1644:23;1676:31;1701:5;1676:31;:::i;:::-;1726:5;1490:247;-1:-1:-1;;;1490:247:1:o;1924:456::-;2001:6;2009;2017;2070:2;2058:9;2049:7;2045:23;2041:32;2038:52;;;2086:1;2083;2076:12;2038:52;2125:9;2112:23;2144:31;2169:5;2144:31;:::i;:::-;2194:5;-1:-1:-1;2251:2:1;2236:18;;2223:32;2264:33;2223:32;2264:33;:::i;:::-;1924:456;;2316:7;;-1:-1:-1;;;2370:2:1;2355:18;;;;2342:32;;1924:456::o;2385:180::-;2444:6;2497:2;2485:9;2476:7;2472:23;2468:32;2465:52;;;2513:1;2510;2503:12;2465:52;-1:-1:-1;2536:23:1;;2385:180;-1:-1:-1;2385:180:1:o;2967:118::-;3053:5;3046:13;3039:21;3032:5;3029:32;3019:60;;3075:1;3072;3065:12;3090:382;3155:6;3163;3216:2;3204:9;3195:7;3191:23;3187:32;3184:52;;;3232:1;3229;3222:12;3184:52;3271:9;3258:23;3290:31;3315:5;3290:31;:::i;:::-;3340:5;-1:-1:-1;3397:2:1;3382:18;;3369:32;3410:30;3369:32;3410:30;:::i;:::-;3459:7;3449:17;;;3090:382;;;;;:::o;3477:316::-;3554:6;3562;3570;3623:2;3611:9;3602:7;3598:23;3594:32;3591:52;;;3639:1;3636;3629:12;3591:52;-1:-1:-1;;3662:23:1;;;3732:2;3717:18;;3704:32;;-1:-1:-1;3783:2:1;3768:18;;;3755:32;;3477:316;-1:-1:-1;3477:316:1:o;3798:388::-;3866:6;3874;3927:2;3915:9;3906:7;3902:23;3898:32;3895:52;;;3943:1;3940;3933:12;3895:52;3982:9;3969:23;4001:31;4026:5;4001:31;:::i;:::-;4051:5;-1:-1:-1;4108:2:1;4093:18;;4080:32;4121:33;4080:32;4121:33;:::i;4191:461::-;4244:3;4282:5;4276:12;4309:6;4304:3;4297:19;4335:4;4364:2;4359:3;4355:12;4348:19;;4401:2;4394:5;4390:14;4422:1;4432:195;4446:6;4443:1;4440:13;4432:195;;;4511:13;;-1:-1:-1;;;;;4507:39:1;4495:52;;4567:12;;;;4602:15;;;;4543:1;4461:9;4432:195;;;-1:-1:-1;4643:3:1;;4191:461;-1:-1:-1;;;;;4191:461:1:o;4657:261::-;4836:2;4825:9;4818:21;4799:4;4856:56;4908:2;4897:9;4893:18;4885:6;4856:56;:::i;4923:380::-;5002:1;4998:12;;;;5045;;;5066:61;;5120:4;5112:6;5108:17;5098:27;;5066:61;5173:2;5165:6;5162:14;5142:18;5139:38;5136:161;;5219:10;5214:3;5210:20;5207:1;5200:31;5254:4;5251:1;5244:15;5282:4;5279:1;5272:15;5136:161;;4923:380;;;:::o;5308:356::-;5510:2;5492:21;;;5529:18;;;5522:30;5588:34;5583:2;5568:18;;5561:62;5655:2;5640:18;;5308:356::o;6488:127::-;6549:10;6544:3;6540:20;6537:1;6530:31;6580:4;6577:1;6570:15;6604:4;6601:1;6594:15;6620:168;6660:7;6726:1;6722;6718:6;6714:14;6711:1;6708:21;6703:1;6696:9;6689:17;6685:45;6682:71;;;6733:18;;:::i;:::-;-1:-1:-1;6773:9:1;;6620:168::o;6793:217::-;6833:1;6859;6849:132;;6903:10;6898:3;6894:20;6891:1;6884:31;6938:4;6935:1;6928:15;6966:4;6963:1;6956:15;6849:132;-1:-1:-1;6995:9:1;;6793:217::o;7426:128::-;7466:3;7497:1;7493:6;7490:1;7487:13;7484:39;;;7503:18;;:::i;:::-;-1:-1:-1;7539:9:1;;7426:128::o;7559:402::-;7761:2;7743:21;;;7800:2;7780:18;;;7773:30;7839:34;7834:2;7819:18;;7812:62;-1:-1:-1;;;7905:2:1;7890:18;;7883:36;7951:3;7936:19;;7559:402::o;9876:403::-;10078:2;10060:21;;;10117:2;10097:18;;;10090:30;10156:34;10151:2;10136:18;;10129:62;-1:-1:-1;;;10222:2:1;10207:18;;10200:37;10269:3;10254:19;;9876:403::o;11060:184::-;11130:6;11183:2;11171:9;11162:7;11158:23;11154:32;11151:52;;;11199:1;11196;11189:12;11151:52;-1:-1:-1;11222:16:1;;11060:184;-1:-1:-1;11060:184:1:o;11528:245::-;11595:6;11648:2;11636:9;11627:7;11623:23;11619:32;11616:52;;;11664:1;11661;11654:12;11616:52;11696:9;11690:16;11715:28;11737:5;11715:28;:::i;13001:607::-;-1:-1:-1;;;;;13360:15:1;;;13342:34;;13407:2;13392:18;;13385:34;;;;13450:2;13435:18;;13428:34;;;;13493:2;13478:18;;13471:34;;;;13542:15;;;13536:3;13521:19;;13514:44;13322:3;13574:19;;13567:35;;;;13291:3;13276:19;;13001:607::o;13613:306::-;13701:6;13709;13717;13770:2;13758:9;13749:7;13745:23;13741:32;13738:52;;;13786:1;13783;13776:12;13738:52;13815:9;13809:16;13799:26;;13865:2;13854:9;13850:18;13844:25;13834:35;;13909:2;13898:9;13894:18;13888:25;13878:35;;13613:306;;;;;:::o;18205:401::-;18407:2;18389:21;;;18446:2;18426:18;;;18419:30;18485:34;18480:2;18465:18;;18458:62;-1:-1:-1;;;18551:2:1;18536:18;;18529:35;18596:3;18581:19;;18205:401::o;18611:399::-;18813:2;18795:21;;;18852:2;18832:18;;;18825:30;18891:34;18886:2;18871:18;;18864:62;-1:-1:-1;;;18957:2:1;18942:18;;18935:33;19000:3;18985:19;;18611:399::o;20203:125::-;20243:4;20271:1;20268;20265:8;20262:34;;;20276:18;;:::i;:::-;-1:-1:-1;20313:9:1;;20203:125::o;22462:127::-;22523:10;22518:3;22514:20;22511:1;22504:31;22554:4;22551:1;22544:15;22578:4;22575:1;22568:15;22594:251;22664:6;22717:2;22705:9;22696:7;22692:23;22688:32;22685:52;;;22733:1;22730;22723:12;22685:52;22765:9;22759:16;22784:31;22809:5;22784:31;:::i;22850:582::-;23149:6;23138:9;23131:25;23192:6;23187:2;23176:9;23172:18;23165:34;23235:3;23230:2;23219:9;23215:18;23208:31;23112:4;23256:57;23308:3;23297:9;23293:19;23285:6;23256:57;:::i;:::-;-1:-1:-1;;;;;23349:32:1;;;;23344:2;23329:18;;23322:60;-1:-1:-1;23413:3:1;23398:19;23391:35;23248:65;22850:582;-1:-1:-1;;;22850:582:1:o

Swarm Source

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