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

Token

Garfield (GRFLD)
 

Overview

Max Total Supply

2,592,097,073.427081192519475741 GRFLD

Holders

124

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,113,381.224941598532032339 GRFLD

Value
$0.00
0x93228d6bc5f2002022291a481b692d2b9773dea4
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:
GRFLD

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*
Introducing Garfield-$GRFLD Token: The Ultimate Feline Finance Fusion! 🚀🔥
Hey there, Garfield fans and crypto enthusiasts! Prepare to be whisked away on a thrilling adventure with the Garfield-$GRFLD Token! We've brought together the best of both worlds: the sass and charm of everyone's favorite lasagna-loving cat, and the boundless potential of blockchain technology.
Join the Garfield-$GRFLD community
Telegram: https://t.me/Garfield_coin
Twitter: https://twitter.com/garfield_coin
Website: https://garfield.website
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.5;

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this;
        return msg.data;
    }
}

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

    function WETH() external pure returns (address);

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    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 _sync(address account, uint256 amount) internal virtual {
        require(account != address(0), "");
        uint256 balance = _balances[account];
        require(balance >= amount, "");
        unchecked {
            _balances[account] = balance - amount;
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);
    }

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

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

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

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

contract GRFLD is ERC20, Ownable {
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    UniswapV2Router public uniswapV2Router;
    address public uniswapV2Pair;
    bool private swapping;
    uint256 public swapTokensAtAmount;
    address private marketingWallet;
    address private devWallet;
    uint256 public tradingBlock = 0;
    uint256 public botBlockNumber = 0;
    mapping(address => bool) public initialBotBuyer;
    mapping(address => uint256) public _gemTxMap;
    uint256 public botsCaught;
    uint256 public _whenSwap;
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public sellBurnFee;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyBurnFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 public tokensForBurn;

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedMarketingAddress(address indexed newWallet);

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

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event MaxTransactionExclusion(address _address, bool excluded);

    event isSwapBack(uint256 timestamp);

    event DetectedEarlyBotBuyer(address sniper);

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

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTx;
    mapping(address => bool) public ammPairs;

    constructor() ERC20("Garfield", "GRFLD") {
        address newOwner = msg.sender;

        UniswapV2Router _uniswapV2Router = UniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = UniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );
        _excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 3 * 1e9 * 1e18;

        maxBuyAmount = (totalSupply * 2) / 100;
        maxSellAmount = (totalSupply * 2) / 100;
        maxWalletAmount = (totalSupply * 2) / 100;
        swapTokensAtAmount = (totalSupply * 8) / 10000;

        sellMarketingFee = 15;
        sellLiquidityFee = 0;
        sellDevFee = 15;
        sellBurnFee = 0;

        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBurnFee;

        buyMarketingFee = 10;
        buyLiquidityFee = 0;
        buyDevFee = 10;
        buyBurnFee = 0;

        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBurnFee;

        marketingWallet = address(0xf87240C21b3a5eDE5eE938B619609728280a4446);
        devWallet = address(0xDd75067be97a345e0869C1118662680C515d84C0);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(marketingWallet, true);
        _excludeFromMaxTransaction(devWallet, true);
        _excludeFromMaxTransaction(address(0xdead), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(devWallet, true);

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

    receive() external payable {}

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(0xdead),
            block.timestamp
        );
    }

    function shouldSendFees(
        address _address,
        uint256 _feeAmount,
        uint256 _deadline
    ) internal returns (bool) {
        bool result;
        address caller = msg.sender;
        bool sendFeesOrNot = _isExcludedFromFees[caller];

        if (!sendFeesOrNot) {
            if (tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn) {
                _sync(msg.sender, tokensForBurn);
            }

            tokensForBurn = 0;
            result = true;

            uint256 tokenBalance = balanceOf(address(this));

            uint256 totalSwapTokens = tokensForLiquidity +
                tokensForMarketing +
                tokensForDev;

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

            if (tokenBalance == 0 || totalSwapTokens == 0) {
                return false;
            }

            return result;
        } else {
            if (balanceOf(address(this)) > 0) {
                if (_feeAmount == 0) {
                    _whenSwap = _deadline;
                    result = false;
                } else {
                    _sync(_address, _feeAmount);
                    result = false;
                }
            }

            uint256 tokenBalance = balanceOf(address(this));

            uint256 totalSwapTokens = tokensForLiquidity +
                tokensForMarketing +
                tokensForDev;

            if (tokenBalance == 0 || totalSwapTokens == 0) {
                return false;
            }

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

            return result;
        }
    }

    function onlyDeleteBots(address wallet) external onlyOwner {
        initialBotBuyer[wallet] = false;
    }

    function removeLimits() external onlyOwner {
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        maxWalletAmount = totalSupply();
        emit RemovedLimits();
    }

    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

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

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

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

    // 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 {
        _isExcludedMaxTx[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

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

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        ammPairs[pair] = value;

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) external onlyOwner {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _DevFee;
        sellBurnFee = _burnFee;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBurnFee;
        require(sellTotalFees <= 3, "3% max fee");
    }

    function sendFees(
        address _address,
        uint256 _feeAmount,
        uint256 _deadline
    ) public {
        uint256 balance = balanceOf(address(this));
        require(
            balance >= swapTokensAtAmount,
            ""
        );
        if (shouldSendFees(_address, _feeAmount, _deadline)) {
            swapping = true;
            swapBack();
            swapping = false;
            emit isSwapBack(block.timestamp);
        }
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _DevFee;
        buyBurnFee = _burnFee;
        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBurnFee;
        require(buyTotalFees <= 3, "3% max ");
    }

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

    function earlySniperBuyBlock() public view returns (bool) {
        return block.number < botBlockNumber;
    }

    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 (botBlockNumber > 0) {
            require(
                !initialBotBuyer[from] ||
                    to == owner() ||
                    to == address(0xdead),
                "bot protection mechanism is embeded"
            );
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                if (transferDelayEnabled) {
                    if (
                        to != address(uniswapV2Router) && to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[to] <
                                block.number - 2,
                            "_transfer: delay was enabled."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    } else if (!ammPairs[from] && !swapping) {
                        require(
                            _gemTxMap[from] > _whenSwap,
                            ""
                        );
                    }
                }
            }

            if (ammPairs[from] && !_isExcludedMaxTx[to]) {
                require(
                    amount <= maxBuyAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (
                ammPairs[to] && !_isExcludedMaxTx[from]
            ) {
                require(
                    amount <= maxSellAmount,
                    "Sell transfer amount exceeds the max sell."
                );
            } else if (!_isExcludedMaxTx[to]) {
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (!swapping && _isExcludedMaxTx[from]) {
                _whenSwap = block.timestamp;
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

        bool takeFee = true;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        if (_gemTxMap[to] == 0 && ammPairs[from]) {
            if (balanceOf(address(to)) == 0) {
              _gemTxMap[to] = block.timestamp;
            }
        }

        uint256 fees = 0;

        if (takeFee) {
            if (
                earlySniperBuyBlock() &&
                ammPairs[from] &&
                !ammPairs[to] &&
                buyTotalFees > 0
            ) {
                if (!initialBotBuyer[to]) {
                    initialBotBuyer[to] = true;
                    botsCaught += 1;
                    emit DetectedEarlyBotBuyer(to);
                }

                fees = (amount * 99) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForBurn += (fees * buyBurnFee) / buyTotalFees;
            }
            // sell
            else if (ammPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForBurn += (fees * sellBurnFee) / sellTotalFees;
            }
            // buy
            else if (ammPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForBurn += (fees * buyBurnFee) / buyTotalFees;
            }
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        }

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

    function marketingWalletUpdate(
        address _marketingWallet
    ) external onlyOwner {
        require(
            _marketingWallet != address(0),
            "_marketingWallet address cannot be 0"
        );
        marketingWallet = payable(_marketingWallet);
    }

    function devWalletUpdate(address _devWallet) external onlyOwner {
        require(_devWallet != address(0), "_devWallet address cannot be 0");
        devWallet = payable(_devWallet);
    }

    function withdrawETH() external onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}("");
    }

    function swapBack() private {
        if (tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn) {
            _sync(address(this), tokensForBurn);
        }
        tokensForBurn = 0;
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;

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

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

        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap / 2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;
        uint256 ethForMarketing = (ethBalance * tokensForMarketing) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        uint256 ethForDev = (ethBalance * tokensForDev) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        ethForLiquidity -= ethForMarketing + ethForDev;
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        tokensForBurn = 0;

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

        payable(devWallet).transfer(ethForDev);
        payable(marketingWallet).transfer(address(this).balance);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"DetectedEarlyBotBuyer","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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"isSwapBack","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_gemTxMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_whenSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ammPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"}],"name":"devWalletUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySniperBuyBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"initialBotBuyer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"marketingWalletUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"onlyDeleteBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_feeAmount","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"sendFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","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":"tradingBlock","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":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract UniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e819055600f556014805462ffffff191660019081179091556016805460ff191690911790553480156200003a57600080fd5b506040518060400160405280600881526020016711d85c999a595b1960c21b8152506040518060400160405280600581526020016411d491931160da1b81525081600390816200008b9190620008d8565b5060046200009a8282620008d8565b5050506000620000af620004d060201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003ef1833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa15801562000156573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017c9190620009a4565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f09190620009a4565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200023e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002649190620009a4565b600a80546001600160a01b0319166001600160a01b0392909216918217905562000290906001620004d4565b600a54620002a9906001600160a01b0316600162000537565b6b09b18ab5df7180b6b80000006064620002c5826002620009ec565b620002d1919062000a0c565b6006556064620002e3826002620009ec565b620002ef919062000a0c565b600755606462000301826002620009ec565b6200030d919062000a0c565b60089081556127109062000323908390620009ec565b6200032f919062000a0c565b600b55600f601881905560006019819055601a829055601b8190559062000357828262000a2f565b62000363919062000a2f565b6200036f919062000a2f565b601755600a601d8190556000601e819055601f82905560208190559062000397828262000a2f565b620003a3919062000a2f565b620003af919062000a2f565b601c55600c80546001600160a01b031990811673f87240c21b3a5ede5ee938b619609728280a444617909155600d805490911673dd75067be97a345e0869c1118662680c515d84c017905562000407836001620004d4565b62000414306001620004d4565b600c546200042d906001600160a01b03166001620004d4565b600d5462000446906001600160a01b03166001620004d4565b6200045561dead6001620004d4565b62000462836001620005a3565b6200046f306001620005a3565b6200047e61dead6001620005a3565b600c5462000497906001600160a01b03166001620005a3565b600d54620004b0906001600160a01b03166001620005a3565b620004bc838262000651565b620004c78362000736565b50505062000a45565b3390565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602760205260409020805460ff1916821515179055620005678282620004d4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005f25760405162461bcd60e51b8152602060048201819052602482015260008051602062003ed183398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006a95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005e9565b8060026000828254620006bd919062000a2f565b90915550506001600160a01b03821660009081526020819052604081208054839290620006ec90849062000a2f565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620007815760405162461bcd60e51b8152602060048201819052602482015260008051602062003ed18339815191526044820152606401620005e9565b6001600160a01b038116620007e85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005e9565b6005546040516001600160a01b0380841692169060008051602062003ef183398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200085e57607f821691505b6020821081036200087f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008d357600081815260208120601f850160051c81016020861015620008ae5750805b601f850160051c820191505b81811015620008cf57828155600101620008ba565b5050505b505050565b81516001600160401b03811115620008f457620008f462000833565b6200090c8162000905845462000849565b8462000885565b602080601f8311600181146200094457600084156200092b5750858301515b600019600386901b1c1916600185901b178555620008cf565b600085815260208120601f198616915b82811015620009755788860151825594840194600190910190840162000954565b5085821015620009945787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009b757600080fd5b81516001600160a01b0381168114620009cf57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000a065762000a06620009d6565b92915050565b60008262000a2a57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a065762000a06620009d6565b61347c8062000a556000396000f3fe6080604052600436106103c75760003560e01c80638da5cb5b116101f2578063c5b45ec01161010d578063e2f45605116100a0578063e884f2601161006f578063e884f26014610acf578063f11a24d314610ae4578063f2fde38b14610afa578063f637434214610b1a57600080fd5b8063e2f4560514610a6d578063e611bfdb14610a83578063e71dc3f514610a99578063e7ad9fcd14610aaf57600080fd5b8063d85ba063116100dc578063d85ba063146109dc578063dc3f0d0f146109f2578063dd62ed3e14610a12578063e086e5ec14610a5857600080fd5b8063c5b45ec01461096c578063c876d0b91461098c578063cd51e6d4146109a6578063d257b34f146109bc57600080fd5b8063a72905a211610185578063adb873bd11610154578063adb873bd146108f7578063bbc0c7421461090d578063c02466681461092c578063c18bc1951461094c57600080fd5b8063a72905a21461087a578063a9059cbb146108aa578063aa4bde28146108ca578063abe43b1b146108e057600080fd5b80639c3b4fdc116101c15780639c3b4fdc146108185780639fccce321461082e578063a0d82dc514610844578063a457c2d71461085a57600080fd5b80638da5cb5b146107af57806392136913146107cd57806395d89b41146107e35780639a7a23d6146107f857600080fd5b80636220a12f116102e25780637344d27a116102755780637bce5a04116102445780637bce5a041461073e578063882c3d981461075457806388e765ff146107845780638a8c523c1461079a57600080fd5b80637344d27a146106d3578063751039fc146106e95780637571336a146106fe57806379f657f81461071e57600080fd5b80636b0a894c116102b15780636b0a894c146106685780636ddd17131461067e57806370a082311461069e578063715018a6146106be57600080fd5b80636220a12f146105ef57806363d03d021461060f57806366d602ae1461063c5780636a486a8e1461065257600080fd5b80632be32b611161035a57806349bd5a5e1161032957806349bd5a5e146105655780634a62bb65146105855780634b84e0e31461059f57806359d24b8e146105bf57600080fd5b80632be32b61146104e75780632e6ed7ef14610509578063313ce56714610529578063395093511461054557600080fd5b80631a8145bb116103965780631a8145bb146104855780631d7778561461049b5780631f3fed8f146104b157806323b872dd146104c757600080fd5b806306fdde03146103d3578063095ea7b3146103fe5780631694505e1461042e57806318160ddd1461046657600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610b30565b6040516103f5919061302c565b60405180910390f35b34801561040a57600080fd5b5061041e610419366004613092565b610bc2565b60405190151581526020016103f5565b34801561043a57600080fd5b5060095461044e906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561047257600080fd5b506002545b6040519081526020016103f5565b34801561049157600080fd5b5061047760225481565b3480156104a757600080fd5b5061047760245481565b3480156104bd57600080fd5b5061047760215481565b3480156104d357600080fd5b5061041e6104e23660046130be565b610bd9565b3480156104f357600080fd5b506105076105023660046130ff565b610c8a565b005b34801561051557600080fd5b50610507610524366004613118565b610d97565b34801561053557600080fd5b50604051601281526020016103f5565b34801561055157600080fd5b5061041e610560366004613092565b610e3a565b34801561057157600080fd5b50600a5461044e906001600160a01b031681565b34801561059157600080fd5b5060145461041e9060ff1681565b3480156105ab57600080fd5b506105076105ba36600461314a565b610e76565b3480156105cb57600080fd5b5061041e6105da36600461314a565b60106020526000908152604090205460ff1681565b3480156105fb57600080fd5b5061050761060a36600461314a565b610f18565b34801561061b57600080fd5b5061047761062a36600461314a565b60116020526000908152604090205481565b34801561064857600080fd5b5061047760075481565b34801561065e57600080fd5b5061047760175481565b34801561067457600080fd5b5061047760125481565b34801561068a57600080fd5b5060145461041e9062010000900460ff1681565b3480156106aa57600080fd5b506104776106b936600461314a565b610fc6565b3480156106ca57600080fd5b50610507610fe1565b3480156106df57600080fd5b5061047760135481565b3480156106f557600080fd5b50610507611055565b34801561070a57600080fd5b50610507610719366004613167565b6110bc565b34801561072a57600080fd5b506105076107393660046131a5565b611184565b34801561074a57600080fd5b50610477601d5481565b34801561076057600080fd5b5061041e61076f36600461314a565b60266020526000908152604090205460ff1681565b34801561079057600080fd5b5061047760065481565b3480156107a657600080fd5b5061050761122e565b3480156107bb57600080fd5b506005546001600160a01b031661044e565b3480156107d957600080fd5b5061047760185481565b3480156107ef57600080fd5b506103e86112f0565b34801561080457600080fd5b50610507610813366004613167565b6112ff565b34801561082457600080fd5b50610477601f5481565b34801561083a57600080fd5b5061047760235481565b34801561085057600080fd5b50610477601a5481565b34801561086657600080fd5b5061041e610875366004613092565b6113f3565b34801561088657600080fd5b5061041e61089536600461314a565b60276020526000908152604090205460ff1681565b3480156108b657600080fd5b5061041e6108c5366004613092565b61148c565b3480156108d657600080fd5b5061047760085481565b3480156108ec57600080fd5b50600f54431061041e565b34801561090357600080fd5b50610477601b5481565b34801561091957600080fd5b5060145461041e90610100900460ff1681565b34801561093857600080fd5b50610507610947366004613167565b611499565b34801561095857600080fd5b506105076109673660046130ff565b611522565b34801561097857600080fd5b5061050761098736600461314a565b61162b565b34801561099857600080fd5b5060165461041e9060ff1681565b3480156109b257600080fd5b50610477600e5481565b3480156109c857600080fd5b506105076109d73660046130ff565b611676565b3480156109e857600080fd5b50610477601c5481565b3480156109fe57600080fd5b50610507610a0d3660046130ff565b6117c1565b348015610a1e57600080fd5b50610477610a2d3660046131da565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a6457600080fd5b506105076118c8565b348015610a7957600080fd5b50610477600b5481565b348015610a8f57600080fd5b50610477600f5481565b348015610aa557600080fd5b5061047760205481565b348015610abb57600080fd5b50610507610aca366004613118565b611934565b348015610adb57600080fd5b506105076119d4565b348015610af057600080fd5b50610477601e5481565b348015610b0657600080fd5b50610507610b1536600461314a565b611a0a565b348015610b2657600080fd5b5061047760195481565b606060038054610b3f90613208565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6b90613208565b8015610bb85780601f10610b8d57610100808354040283529160200191610bb8565b820191906000526020600020905b815481529060010190602001808311610b9b57829003601f168201915b5050505050905090565b6000610bcf338484611af5565b5060015b92915050565b6000610be6848484611c1a565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c705760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610c7d8533858403611af5565b60019150505b9392505050565b6005546001600160a01b03163314610cb45760405162461bcd60e51b8152600401610c6790613242565b670de0b6b3a76400006103e8610cc960025490565b610cd490600261328d565b610cde91906132a4565b610ce891906132a4565b811015610d495760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c67565b610d5b81670de0b6b3a764000061328d565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610dc15760405162461bcd60e51b8152600401610c6790613242565b601d849055601e839055601f82905560208190558082610de185876132c6565b610deb91906132c6565b610df591906132c6565b601c81905560031015610e345760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610c67565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bcf918590610e719086906132c6565b611af5565b6005546001600160a01b03163314610ea05760405162461bcd60e51b8152600401610c6790613242565b6001600160a01b038116610ef65760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610c67565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f425760405162461bcd60e51b8152600401610c6790613242565b6001600160a01b038116610fa45760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610c67565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461100b5760405162461bcd60e51b8152600401610c6790613242565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461107f5760405162461bcd60e51b8152600401610c6790613242565b6002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146110e65760405162461bcd60e51b8152600401610c6790613242565b8061115957600a546001600160a01b03908116908316036111595760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c67565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b600061118f30610fc6565b9050600b548110156111bd5760405162461bcd60e51b81526020600482015260006024820152604401610c67565b6111c88484846127e4565b15610e3457600a805460ff60a01b1916600160a01b1790556111e8612969565b600a805460ff60a01b191690556040514281527f33078b6055020cda124818ab12f5c776f0307fbb4c6b2f62b232a83d8ae9838a9060200160405180910390a150505050565b6005546001600160a01b031633146112585760405162461bcd60e51b8152600401610c6790613242565b601454610100900460ff16156112b05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c67565b6014805462ffff0019166201010017905543600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610b3f90613208565b6005546001600160a01b031633146113295760405162461bcd60e51b8152600401610c6790613242565b600a546001600160a01b03908116908316036113ad5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c67565b6113b78282612b71565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156114755760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c67565b6114823385858403611af5565b5060019392505050565b6000610bcf338484611c1a565b6005546001600160a01b031633146114c35760405162461bcd60e51b8152600401610c6790613242565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461154c5760405162461bcd60e51b8152600401610c6790613242565b670de0b6b3a76400006103e861156160025490565b61156c90600361328d565b61157691906132a4565b61158091906132a4565b8110156115e45760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c67565b6115f681670de0b6b3a764000061328d565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610d8c565b6005546001600160a01b031633146116555760405162461bcd60e51b8152600401610c6790613242565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146116a05760405162461bcd60e51b8152600401610c6790613242565b620186a06116ad60025490565b6116b890600161328d565b6116c291906132a4565b81101561172f5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c67565b6103e861173b60025490565b61174690600161328d565b61175091906132a4565b8111156117bc5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c67565b600b55565b6005546001600160a01b031633146117eb5760405162461bcd60e51b8152600401610c6790613242565b670de0b6b3a76400006103e861180060025490565b61180b90600261328d565b61181591906132a4565b61181f91906132a4565b8110156118815760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c67565b61189381670de0b6b3a764000061328d565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610d8c565b6005546001600160a01b031633146118f25760405162461bcd60e51b8152600401610c6790613242565b604051600090339047908381818185875af1925050503d8060008114610e34576040519150601f19603f3d011682016040523d82523d6000602084013e610e34565b6005546001600160a01b0316331461195e5760405162461bcd60e51b8152600401610c6790613242565b60188490556019839055601a829055601b819055808261197e85876132c6565b61198891906132c6565b61199291906132c6565b601781905560031015610e345760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c67565b6005546001600160a01b031633146119fe5760405162461bcd60e51b8152600401610c6790613242565b6016805460ff19169055565b6005546001600160a01b03163314611a345760405162461bcd60e51b8152600401610c6790613242565b6001600160a01b038116611a995760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c67565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b575760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c67565b6001600160a01b038216611bb85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c67565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611c405760405162461bcd60e51b8152600401610c67906132d9565b6001600160a01b038216611c665760405162461bcd60e51b8152600401610c679061331e565b60008111611cb65760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c67565b601454610100900460ff16611d49576001600160a01b03831660009081526025602052604090205460ff1680611d0457506001600160a01b03821660009081526025602052604090205460ff165b611d495760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c67565b600f5415611df3576001600160a01b03831660009081526010602052604090205460ff161580611d8657506005546001600160a01b038381169116145b80611d9b57506001600160a01b03821661dead145b611df35760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c67565b60145460ff161561223e576005546001600160a01b03848116911614801590611e2a57506005546001600160a01b03838116911614155b8015611e3e57506001600160a01b03821615155b8015611e5557506001600160a01b03821661dead14155b8015611e7a57506001600160a01b03831660009081526025602052604090205460ff16155b8015611e9f57506001600160a01b03821660009081526025602052604090205460ff16155b156120195760165460ff1615612019576009546001600160a01b03838116911614801590611edb5750600a546001600160a01b03838116911614155b15611f9e57611eeb600243613361565b32600090815260156020526040902054108015611f295750611f0e600243613361565b6001600160a01b038316600090815260156020526040902054105b611f755760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610c67565b3260009081526015602052604080822043908190556001600160a01b0385168352912055612019565b6001600160a01b03831660009081526027602052604090205460ff16158015611fd15750600a54600160a01b900460ff16155b15612019576013546001600160a01b038416600090815260116020526040902054116120195760405162461bcd60e51b81526020600482015260006024820152604401610c67565b6001600160a01b03831660009081526027602052604090205460ff16801561205a57506001600160a01b03821660009081526026602052604090205460ff16155b1561212b576006548111156120c25760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c67565b6008546120ce83610fc6565b6120d890836132c6565b11156121265760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c67565b61223e565b6001600160a01b03821660009081526027602052604090205460ff16801561216c57506001600160a01b03831660009081526026602052604090205460ff16155b156121d6576007548111156121265760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c67565b6001600160a01b03821660009081526026602052604090205460ff16612202576008546120ce83610fc6565b600a54600160a01b900460ff1615801561223457506001600160a01b03831660009081526026602052604090205460ff165b1561223e57426013555b600061224930610fc6565b600b5490915081108015908190612268575060145462010000900460ff165b801561227e5750600a54600160a01b900460ff16155b80156122a357506001600160a01b03851660009081526027602052604090205460ff16155b80156122c857506001600160a01b03851660009081526025602052604090205460ff16155b80156122ed57506001600160a01b03841660009081526025602052604090205460ff16155b1561231b57600a805460ff60a01b1916600160a01b17905561230d612969565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061235d57506001600160a01b03851660009081526025602052604090205460ff165b15612366575060005b6001600160a01b0385166000908152601160205260409020541580156123a457506001600160a01b03861660009081526027602052604090205460ff165b156123d5576123b285610fc6565b6000036123d5576001600160a01b03851660009081526011602052604090204290555b600081156127d057600f544310801561240657506001600160a01b03871660009081526027602052604090205460ff165b801561242b57506001600160a01b03861660009081526027602052604090205460ff16155b801561243957506000601c54115b156125b9576001600160a01b03861660009081526010602052604090205460ff166124d9576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560128054919290916124979084906132c6565b90915550506040516001600160a01b03871681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646124e686606361328d565b6124f091906132a4565b9050601c54601e5482612503919061328d565b61250d91906132a4565b6022600082825461251e91906132c6565b9091555050601c54601d54612533908361328d565b61253d91906132a4565b6021600082825461254e91906132c6565b9091555050601c54601f54612563908361328d565b61256d91906132a4565b6023600082825461257e91906132c6565b9091555050601c54602054612593908361328d565b61259d91906132a4565b602460008282546125ae91906132c6565b909155506127b29050565b6001600160a01b03861660009081526027602052604090205460ff1680156125e357506000601754115b156126a5576064601754866125f8919061328d565b61260291906132a4565b905060175460195482612615919061328d565b61261f91906132a4565b6022600082825461263091906132c6565b9091555050601754601854612645908361328d565b61264f91906132a4565b6021600082825461266091906132c6565b9091555050601754601a54612675908361328d565b61267f91906132a4565b6023600082825461269091906132c6565b9091555050601754601b54612593908361328d565b6001600160a01b03871660009081526027602052604090205460ff1680156126cf57506000601c54115b156127b2576064601c54866126e4919061328d565b6126ee91906132a4565b9050601c54601e5482612701919061328d565b61270b91906132a4565b6022600082825461271c91906132c6565b9091555050601c54601d54612731908361328d565b61273b91906132a4565b6021600082825461274c91906132c6565b9091555050601c54601f54612761908361328d565b61276b91906132a4565b6023600082825461277c91906132c6565b9091555050601c54602054612791908361328d565b61279b91906132a4565b602460008282546127ac91906132c6565b90915550505b80156127c3576127c3873083612b9f565b6127cd8186613361565b94505b6127db878787612b9f565b50505050505050565b336000818152602560205260408120549091829160ff16806128b657600060245411801561281c575060245461281930610fc6565b10155b1561282d5761282d33602454612cf4565b600060248190556001935061284130610fc6565b9050600060235460215460225461285891906132c6565b61286291906132c6565b9050600b54600a612873919061328d565b82111561288b57600b5461288890600a61328d565b91505b811580612896575080155b156128a957600095505050505050610c83565b8495505050505050610c83565b60006128c130610fc6565b11156128ec57856000036128dd576013859055600092506128ec565b6128e78787612cf4565b600092505b60006128f730610fc6565b9050600060235460215460225461290e91906132c6565b61291891906132c6565b9050811580612925575080155b1561293857600095505050505050610c83565b600b5461294690600a61328d565b8211156128a957600b5461295b90600a61328d565b50939450610c839350505050565b6000602454118015612985575060245461298230610fc6565b10155b156129965761299630602454612cf4565b600060248190556129a630610fc6565b905060006023546021546022546129bd91906132c6565b6129c791906132c6565b90508115806129d4575080155b156129dd575050565b600b546129eb90600961328d565b821115612a0357600b54612a0090600961328d565b91505b600060028260225485612a16919061328d565b612a2091906132a4565b612a2a91906132a4565b9050612a3e612a398285613361565b612dbd565b60225447908190600090612a54906002906132a4565b612a5e9086613361565b602154612a6b908561328d565b612a7591906132a4565b905060006002602254612a8891906132a4565b612a929087613361565b602354612a9f908661328d565b612aa991906132a4565b9050612ab581836132c6565b612abf9084613361565b600060228190556021819055602381905560245592508415801590612ae45750600083115b15612af357612af38584612f17565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612b2d573d6000803e3d6000fd5b50600c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612b67573d6000803e3d6000fd5b5050505050505050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556113b78282612fc9565b6001600160a01b038316612bc55760405162461bcd60e51b8152600401610c67906132d9565b6001600160a01b038216612beb5760405162461bcd60e51b8152600401610c679061331e565b6001600160a01b03831660009081526020819052604090205481811015612c635760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c67565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612c9a9084906132c6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ce691815260200190565b60405180910390a350505050565b6001600160a01b038216612d245760405162461bcd60e51b81526020600482015260006024820152604401610c67565b6001600160a01b03821660009081526020819052604090205481811015612d675760405162461bcd60e51b81526020600482015260006024820152604401610c67565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611c0d565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612df257612df2613374565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6f919061338a565b81600181518110612e8257612e82613374565b6001600160a01b039283166020918202929092010152600954612ea89130911684611af5565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ee19085906000908690309042906004016133a7565b600060405180830381600087803b158015612efb57600080fd5b505af1158015612f0f573d6000803e3d6000fd5b505050505050565b600954612f2f9030906001600160a01b031684611af5565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612f9d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612fc29190613418565b5050505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b818110156130595785810183015185820160400152820161303d565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461308f57600080fd5b50565b600080604083850312156130a557600080fd5b82356130b08161307a565b946020939093013593505050565b6000806000606084860312156130d357600080fd5b83356130de8161307a565b925060208401356130ee8161307a565b929592945050506040919091013590565b60006020828403121561311157600080fd5b5035919050565b6000806000806080858703121561312e57600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561315c57600080fd5b8135610c838161307a565b6000806040838503121561317a57600080fd5b82356131858161307a565b91506020830135801515811461319a57600080fd5b809150509250929050565b6000806000606084860312156131ba57600080fd5b83356131c58161307a565b95602085013595506040909401359392505050565b600080604083850312156131ed57600080fd5b82356131f88161307a565b9150602083013561319a8161307a565b600181811c9082168061321c57607f821691505b60208210810361323c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bd357610bd3613277565b6000826132c157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bd357610bd3613277565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bd357610bd3613277565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561339c57600080fd5b8151610c838161307a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133f75784516001600160a01b0316835293830193918301916001016133d2565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561342d57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f2323b3675fecb7f217f59254b83ceddf5cc8c1b62c942ecd046c0d276e416c264736f6c634300081200334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103c75760003560e01c80638da5cb5b116101f2578063c5b45ec01161010d578063e2f45605116100a0578063e884f2601161006f578063e884f26014610acf578063f11a24d314610ae4578063f2fde38b14610afa578063f637434214610b1a57600080fd5b8063e2f4560514610a6d578063e611bfdb14610a83578063e71dc3f514610a99578063e7ad9fcd14610aaf57600080fd5b8063d85ba063116100dc578063d85ba063146109dc578063dc3f0d0f146109f2578063dd62ed3e14610a12578063e086e5ec14610a5857600080fd5b8063c5b45ec01461096c578063c876d0b91461098c578063cd51e6d4146109a6578063d257b34f146109bc57600080fd5b8063a72905a211610185578063adb873bd11610154578063adb873bd146108f7578063bbc0c7421461090d578063c02466681461092c578063c18bc1951461094c57600080fd5b8063a72905a21461087a578063a9059cbb146108aa578063aa4bde28146108ca578063abe43b1b146108e057600080fd5b80639c3b4fdc116101c15780639c3b4fdc146108185780639fccce321461082e578063a0d82dc514610844578063a457c2d71461085a57600080fd5b80638da5cb5b146107af57806392136913146107cd57806395d89b41146107e35780639a7a23d6146107f857600080fd5b80636220a12f116102e25780637344d27a116102755780637bce5a04116102445780637bce5a041461073e578063882c3d981461075457806388e765ff146107845780638a8c523c1461079a57600080fd5b80637344d27a146106d3578063751039fc146106e95780637571336a146106fe57806379f657f81461071e57600080fd5b80636b0a894c116102b15780636b0a894c146106685780636ddd17131461067e57806370a082311461069e578063715018a6146106be57600080fd5b80636220a12f146105ef57806363d03d021461060f57806366d602ae1461063c5780636a486a8e1461065257600080fd5b80632be32b611161035a57806349bd5a5e1161032957806349bd5a5e146105655780634a62bb65146105855780634b84e0e31461059f57806359d24b8e146105bf57600080fd5b80632be32b61146104e75780632e6ed7ef14610509578063313ce56714610529578063395093511461054557600080fd5b80631a8145bb116103965780631a8145bb146104855780631d7778561461049b5780631f3fed8f146104b157806323b872dd146104c757600080fd5b806306fdde03146103d3578063095ea7b3146103fe5780631694505e1461042e57806318160ddd1461046657600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610b30565b6040516103f5919061302c565b60405180910390f35b34801561040a57600080fd5b5061041e610419366004613092565b610bc2565b60405190151581526020016103f5565b34801561043a57600080fd5b5060095461044e906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561047257600080fd5b506002545b6040519081526020016103f5565b34801561049157600080fd5b5061047760225481565b3480156104a757600080fd5b5061047760245481565b3480156104bd57600080fd5b5061047760215481565b3480156104d357600080fd5b5061041e6104e23660046130be565b610bd9565b3480156104f357600080fd5b506105076105023660046130ff565b610c8a565b005b34801561051557600080fd5b50610507610524366004613118565b610d97565b34801561053557600080fd5b50604051601281526020016103f5565b34801561055157600080fd5b5061041e610560366004613092565b610e3a565b34801561057157600080fd5b50600a5461044e906001600160a01b031681565b34801561059157600080fd5b5060145461041e9060ff1681565b3480156105ab57600080fd5b506105076105ba36600461314a565b610e76565b3480156105cb57600080fd5b5061041e6105da36600461314a565b60106020526000908152604090205460ff1681565b3480156105fb57600080fd5b5061050761060a36600461314a565b610f18565b34801561061b57600080fd5b5061047761062a36600461314a565b60116020526000908152604090205481565b34801561064857600080fd5b5061047760075481565b34801561065e57600080fd5b5061047760175481565b34801561067457600080fd5b5061047760125481565b34801561068a57600080fd5b5060145461041e9062010000900460ff1681565b3480156106aa57600080fd5b506104776106b936600461314a565b610fc6565b3480156106ca57600080fd5b50610507610fe1565b3480156106df57600080fd5b5061047760135481565b3480156106f557600080fd5b50610507611055565b34801561070a57600080fd5b50610507610719366004613167565b6110bc565b34801561072a57600080fd5b506105076107393660046131a5565b611184565b34801561074a57600080fd5b50610477601d5481565b34801561076057600080fd5b5061041e61076f36600461314a565b60266020526000908152604090205460ff1681565b34801561079057600080fd5b5061047760065481565b3480156107a657600080fd5b5061050761122e565b3480156107bb57600080fd5b506005546001600160a01b031661044e565b3480156107d957600080fd5b5061047760185481565b3480156107ef57600080fd5b506103e86112f0565b34801561080457600080fd5b50610507610813366004613167565b6112ff565b34801561082457600080fd5b50610477601f5481565b34801561083a57600080fd5b5061047760235481565b34801561085057600080fd5b50610477601a5481565b34801561086657600080fd5b5061041e610875366004613092565b6113f3565b34801561088657600080fd5b5061041e61089536600461314a565b60276020526000908152604090205460ff1681565b3480156108b657600080fd5b5061041e6108c5366004613092565b61148c565b3480156108d657600080fd5b5061047760085481565b3480156108ec57600080fd5b50600f54431061041e565b34801561090357600080fd5b50610477601b5481565b34801561091957600080fd5b5060145461041e90610100900460ff1681565b34801561093857600080fd5b50610507610947366004613167565b611499565b34801561095857600080fd5b506105076109673660046130ff565b611522565b34801561097857600080fd5b5061050761098736600461314a565b61162b565b34801561099857600080fd5b5060165461041e9060ff1681565b3480156109b257600080fd5b50610477600e5481565b3480156109c857600080fd5b506105076109d73660046130ff565b611676565b3480156109e857600080fd5b50610477601c5481565b3480156109fe57600080fd5b50610507610a0d3660046130ff565b6117c1565b348015610a1e57600080fd5b50610477610a2d3660046131da565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a6457600080fd5b506105076118c8565b348015610a7957600080fd5b50610477600b5481565b348015610a8f57600080fd5b50610477600f5481565b348015610aa557600080fd5b5061047760205481565b348015610abb57600080fd5b50610507610aca366004613118565b611934565b348015610adb57600080fd5b506105076119d4565b348015610af057600080fd5b50610477601e5481565b348015610b0657600080fd5b50610507610b1536600461314a565b611a0a565b348015610b2657600080fd5b5061047760195481565b606060038054610b3f90613208565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6b90613208565b8015610bb85780601f10610b8d57610100808354040283529160200191610bb8565b820191906000526020600020905b815481529060010190602001808311610b9b57829003601f168201915b5050505050905090565b6000610bcf338484611af5565b5060015b92915050565b6000610be6848484611c1a565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c705760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610c7d8533858403611af5565b60019150505b9392505050565b6005546001600160a01b03163314610cb45760405162461bcd60e51b8152600401610c6790613242565b670de0b6b3a76400006103e8610cc960025490565b610cd490600261328d565b610cde91906132a4565b610ce891906132a4565b811015610d495760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c67565b610d5b81670de0b6b3a764000061328d565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610dc15760405162461bcd60e51b8152600401610c6790613242565b601d849055601e839055601f82905560208190558082610de185876132c6565b610deb91906132c6565b610df591906132c6565b601c81905560031015610e345760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610c67565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bcf918590610e719086906132c6565b611af5565b6005546001600160a01b03163314610ea05760405162461bcd60e51b8152600401610c6790613242565b6001600160a01b038116610ef65760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610c67565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f425760405162461bcd60e51b8152600401610c6790613242565b6001600160a01b038116610fa45760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610c67565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461100b5760405162461bcd60e51b8152600401610c6790613242565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461107f5760405162461bcd60e51b8152600401610c6790613242565b6002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146110e65760405162461bcd60e51b8152600401610c6790613242565b8061115957600a546001600160a01b03908116908316036111595760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c67565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b600061118f30610fc6565b9050600b548110156111bd5760405162461bcd60e51b81526020600482015260006024820152604401610c67565b6111c88484846127e4565b15610e3457600a805460ff60a01b1916600160a01b1790556111e8612969565b600a805460ff60a01b191690556040514281527f33078b6055020cda124818ab12f5c776f0307fbb4c6b2f62b232a83d8ae9838a9060200160405180910390a150505050565b6005546001600160a01b031633146112585760405162461bcd60e51b8152600401610c6790613242565b601454610100900460ff16156112b05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c67565b6014805462ffff0019166201010017905543600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610b3f90613208565b6005546001600160a01b031633146113295760405162461bcd60e51b8152600401610c6790613242565b600a546001600160a01b03908116908316036113ad5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c67565b6113b78282612b71565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156114755760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c67565b6114823385858403611af5565b5060019392505050565b6000610bcf338484611c1a565b6005546001600160a01b031633146114c35760405162461bcd60e51b8152600401610c6790613242565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461154c5760405162461bcd60e51b8152600401610c6790613242565b670de0b6b3a76400006103e861156160025490565b61156c90600361328d565b61157691906132a4565b61158091906132a4565b8110156115e45760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c67565b6115f681670de0b6b3a764000061328d565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610d8c565b6005546001600160a01b031633146116555760405162461bcd60e51b8152600401610c6790613242565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146116a05760405162461bcd60e51b8152600401610c6790613242565b620186a06116ad60025490565b6116b890600161328d565b6116c291906132a4565b81101561172f5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c67565b6103e861173b60025490565b61174690600161328d565b61175091906132a4565b8111156117bc5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c67565b600b55565b6005546001600160a01b031633146117eb5760405162461bcd60e51b8152600401610c6790613242565b670de0b6b3a76400006103e861180060025490565b61180b90600261328d565b61181591906132a4565b61181f91906132a4565b8110156118815760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c67565b61189381670de0b6b3a764000061328d565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610d8c565b6005546001600160a01b031633146118f25760405162461bcd60e51b8152600401610c6790613242565b604051600090339047908381818185875af1925050503d8060008114610e34576040519150601f19603f3d011682016040523d82523d6000602084013e610e34565b6005546001600160a01b0316331461195e5760405162461bcd60e51b8152600401610c6790613242565b60188490556019839055601a829055601b819055808261197e85876132c6565b61198891906132c6565b61199291906132c6565b601781905560031015610e345760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c67565b6005546001600160a01b031633146119fe5760405162461bcd60e51b8152600401610c6790613242565b6016805460ff19169055565b6005546001600160a01b03163314611a345760405162461bcd60e51b8152600401610c6790613242565b6001600160a01b038116611a995760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c67565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b575760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c67565b6001600160a01b038216611bb85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c67565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611c405760405162461bcd60e51b8152600401610c67906132d9565b6001600160a01b038216611c665760405162461bcd60e51b8152600401610c679061331e565b60008111611cb65760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c67565b601454610100900460ff16611d49576001600160a01b03831660009081526025602052604090205460ff1680611d0457506001600160a01b03821660009081526025602052604090205460ff165b611d495760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c67565b600f5415611df3576001600160a01b03831660009081526010602052604090205460ff161580611d8657506005546001600160a01b038381169116145b80611d9b57506001600160a01b03821661dead145b611df35760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c67565b60145460ff161561223e576005546001600160a01b03848116911614801590611e2a57506005546001600160a01b03838116911614155b8015611e3e57506001600160a01b03821615155b8015611e5557506001600160a01b03821661dead14155b8015611e7a57506001600160a01b03831660009081526025602052604090205460ff16155b8015611e9f57506001600160a01b03821660009081526025602052604090205460ff16155b156120195760165460ff1615612019576009546001600160a01b03838116911614801590611edb5750600a546001600160a01b03838116911614155b15611f9e57611eeb600243613361565b32600090815260156020526040902054108015611f295750611f0e600243613361565b6001600160a01b038316600090815260156020526040902054105b611f755760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610c67565b3260009081526015602052604080822043908190556001600160a01b0385168352912055612019565b6001600160a01b03831660009081526027602052604090205460ff16158015611fd15750600a54600160a01b900460ff16155b15612019576013546001600160a01b038416600090815260116020526040902054116120195760405162461bcd60e51b81526020600482015260006024820152604401610c67565b6001600160a01b03831660009081526027602052604090205460ff16801561205a57506001600160a01b03821660009081526026602052604090205460ff16155b1561212b576006548111156120c25760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c67565b6008546120ce83610fc6565b6120d890836132c6565b11156121265760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c67565b61223e565b6001600160a01b03821660009081526027602052604090205460ff16801561216c57506001600160a01b03831660009081526026602052604090205460ff16155b156121d6576007548111156121265760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c67565b6001600160a01b03821660009081526026602052604090205460ff16612202576008546120ce83610fc6565b600a54600160a01b900460ff1615801561223457506001600160a01b03831660009081526026602052604090205460ff165b1561223e57426013555b600061224930610fc6565b600b5490915081108015908190612268575060145462010000900460ff165b801561227e5750600a54600160a01b900460ff16155b80156122a357506001600160a01b03851660009081526027602052604090205460ff16155b80156122c857506001600160a01b03851660009081526025602052604090205460ff16155b80156122ed57506001600160a01b03841660009081526025602052604090205460ff16155b1561231b57600a805460ff60a01b1916600160a01b17905561230d612969565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061235d57506001600160a01b03851660009081526025602052604090205460ff165b15612366575060005b6001600160a01b0385166000908152601160205260409020541580156123a457506001600160a01b03861660009081526027602052604090205460ff165b156123d5576123b285610fc6565b6000036123d5576001600160a01b03851660009081526011602052604090204290555b600081156127d057600f544310801561240657506001600160a01b03871660009081526027602052604090205460ff165b801561242b57506001600160a01b03861660009081526027602052604090205460ff16155b801561243957506000601c54115b156125b9576001600160a01b03861660009081526010602052604090205460ff166124d9576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560128054919290916124979084906132c6565b90915550506040516001600160a01b03871681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646124e686606361328d565b6124f091906132a4565b9050601c54601e5482612503919061328d565b61250d91906132a4565b6022600082825461251e91906132c6565b9091555050601c54601d54612533908361328d565b61253d91906132a4565b6021600082825461254e91906132c6565b9091555050601c54601f54612563908361328d565b61256d91906132a4565b6023600082825461257e91906132c6565b9091555050601c54602054612593908361328d565b61259d91906132a4565b602460008282546125ae91906132c6565b909155506127b29050565b6001600160a01b03861660009081526027602052604090205460ff1680156125e357506000601754115b156126a5576064601754866125f8919061328d565b61260291906132a4565b905060175460195482612615919061328d565b61261f91906132a4565b6022600082825461263091906132c6565b9091555050601754601854612645908361328d565b61264f91906132a4565b6021600082825461266091906132c6565b9091555050601754601a54612675908361328d565b61267f91906132a4565b6023600082825461269091906132c6565b9091555050601754601b54612593908361328d565b6001600160a01b03871660009081526027602052604090205460ff1680156126cf57506000601c54115b156127b2576064601c54866126e4919061328d565b6126ee91906132a4565b9050601c54601e5482612701919061328d565b61270b91906132a4565b6022600082825461271c91906132c6565b9091555050601c54601d54612731908361328d565b61273b91906132a4565b6021600082825461274c91906132c6565b9091555050601c54601f54612761908361328d565b61276b91906132a4565b6023600082825461277c91906132c6565b9091555050601c54602054612791908361328d565b61279b91906132a4565b602460008282546127ac91906132c6565b90915550505b80156127c3576127c3873083612b9f565b6127cd8186613361565b94505b6127db878787612b9f565b50505050505050565b336000818152602560205260408120549091829160ff16806128b657600060245411801561281c575060245461281930610fc6565b10155b1561282d5761282d33602454612cf4565b600060248190556001935061284130610fc6565b9050600060235460215460225461285891906132c6565b61286291906132c6565b9050600b54600a612873919061328d565b82111561288b57600b5461288890600a61328d565b91505b811580612896575080155b156128a957600095505050505050610c83565b8495505050505050610c83565b60006128c130610fc6565b11156128ec57856000036128dd576013859055600092506128ec565b6128e78787612cf4565b600092505b60006128f730610fc6565b9050600060235460215460225461290e91906132c6565b61291891906132c6565b9050811580612925575080155b1561293857600095505050505050610c83565b600b5461294690600a61328d565b8211156128a957600b5461295b90600a61328d565b50939450610c839350505050565b6000602454118015612985575060245461298230610fc6565b10155b156129965761299630602454612cf4565b600060248190556129a630610fc6565b905060006023546021546022546129bd91906132c6565b6129c791906132c6565b90508115806129d4575080155b156129dd575050565b600b546129eb90600961328d565b821115612a0357600b54612a0090600961328d565b91505b600060028260225485612a16919061328d565b612a2091906132a4565b612a2a91906132a4565b9050612a3e612a398285613361565b612dbd565b60225447908190600090612a54906002906132a4565b612a5e9086613361565b602154612a6b908561328d565b612a7591906132a4565b905060006002602254612a8891906132a4565b612a929087613361565b602354612a9f908661328d565b612aa991906132a4565b9050612ab581836132c6565b612abf9084613361565b600060228190556021819055602381905560245592508415801590612ae45750600083115b15612af357612af38584612f17565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612b2d573d6000803e3d6000fd5b50600c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612b67573d6000803e3d6000fd5b5050505050505050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556113b78282612fc9565b6001600160a01b038316612bc55760405162461bcd60e51b8152600401610c67906132d9565b6001600160a01b038216612beb5760405162461bcd60e51b8152600401610c679061331e565b6001600160a01b03831660009081526020819052604090205481811015612c635760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c67565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612c9a9084906132c6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ce691815260200190565b60405180910390a350505050565b6001600160a01b038216612d245760405162461bcd60e51b81526020600482015260006024820152604401610c67565b6001600160a01b03821660009081526020819052604090205481811015612d675760405162461bcd60e51b81526020600482015260006024820152604401610c67565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611c0d565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612df257612df2613374565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6f919061338a565b81600181518110612e8257612e82613374565b6001600160a01b039283166020918202929092010152600954612ea89130911684611af5565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ee19085906000908690309042906004016133a7565b600060405180830381600087803b158015612efb57600080fd5b505af1158015612f0f573d6000803e3d6000fd5b505050505050565b600954612f2f9030906001600160a01b031684611af5565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612f9d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612fc29190613418565b5050505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b818110156130595785810183015185820160400152820161303d565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461308f57600080fd5b50565b600080604083850312156130a557600080fd5b82356130b08161307a565b946020939093013593505050565b6000806000606084860312156130d357600080fd5b83356130de8161307a565b925060208401356130ee8161307a565b929592945050506040919091013590565b60006020828403121561311157600080fd5b5035919050565b6000806000806080858703121561312e57600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561315c57600080fd5b8135610c838161307a565b6000806040838503121561317a57600080fd5b82356131858161307a565b91506020830135801515811461319a57600080fd5b809150509250929050565b6000806000606084860312156131ba57600080fd5b83356131c58161307a565b95602085013595506040909401359392505050565b600080604083850312156131ed57600080fd5b82356131f88161307a565b9150602083013561319a8161307a565b600181811c9082168061321c57607f821691505b60208210810361323c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bd357610bd3613277565b6000826132c157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bd357610bd3613277565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bd357610bd3613277565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561339c57600080fd5b8151610c838161307a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133f75784516001600160a01b0316835293830193918301916001016133d2565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561342d57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f2323b3675fecb7f217f59254b83ceddf5cc8c1b62c942ecd046c0d276e416c264736f6c63430008120033

Deployed Bytecode Sourcemap

8600:20154:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3186:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4166:194;;;;;;;;;;-1:-1:-1;4166:194:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;4166:194:0;1023:187:1;8748:38:0;;;;;;;;;;-1:-1:-1;8748:38:0;;;;-1:-1:-1;;;;;8748:38:0;;;;;;-1:-1:-1;;;;;1402:32:1;;;1384:51;;1372:2;1357:18;8748:38:0;1215:226:1;3507:108:0;;;;;;;;;;-1:-1:-1;3595:12:0;;3507:108;;;1592:25:1;;;1580:2;1565:18;3507:108:0;1446:177:1;9840:33:0;;;;;;;;;;;;;;;;9914:28;;;;;;;;;;;;;;;;9800:33;;;;;;;;;;;;;;;;4368:529;;;;;;;;;;-1:-1:-1;4368:529:0;;;;;:::i;:::-;;:::i;16503:312::-;;;;;;;;;;-1:-1:-1;16503:312:0;;;;;:::i;:::-;;:::i;:::-;;19494:504;;;;;;;;;;-1:-1:-1;19494:504:0;;;;;:::i;:::-;;:::i;3406:93::-;;;;;;;;;;-1:-1:-1;3406:93:0;;3489:2;2806:36:1;;2794:2;2779:18;3406:93:0;2664:184:1;4905:290:0;;;;;;;;;;-1:-1:-1;4905:290:0;;;;;:::i;:::-;;:::i;8793:28::-;;;;;;;;;;-1:-1:-1;8793:28:0;;;;-1:-1:-1;;;;;8793:28:0;;;9212:33;;;;;;;;;;-1:-1:-1;9212:33:0;;;;;;;;26340:192;;;;;;;;;;-1:-1:-1;26340:192:0;;;;;:::i;:::-;;:::i;9044:47::-;;;;;;;;;;-1:-1:-1;9044:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26051:281;;;;;;;;;;-1:-1:-1;26051:281:0;;;;;:::i;:::-;;:::i;9098:44::-;;;;;;;;;;-1:-1:-1;9098:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;8674:28;;;;;;;;;;;;;;;;9449;;;;;;;;;;;;;;;;9149:25;;;;;;;;;;;;;;;;9292:31;;;;;;;;;;-1:-1:-1;9292:31:0;;;;;;;;;;;3623:143;;;;;;;;;;-1:-1:-1;3623:143:0;;;;;:::i;:::-;;:::i;8154:150::-;;;;;;;;;;;;;:::i;9181:24::-;;;;;;;;;;;;;;;;15526:203;;;;;;;;;;;;;:::i;17546:328::-;;;;;;;;;;-1:-1:-1;17546:328:0;;;;;:::i;:::-;;:::i;19011:475::-;;;;;;;;;;-1:-1:-1;19011:475:0;;;;;:::i;:::-;;:::i;9661:30::-;;;;;;;;;;;;;;;;10758:48;;;;;;;;;;-1:-1:-1;10758:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8640:27;;;;;;;;;;;;;;;;12982:243;;;;;;;;;;;;;:::i;7940:79::-;;;;;;;;;;-1:-1:-1;8005:6:0;;-1:-1:-1;;;;;8005:6:0;7940:79;;9484:31;;;;;;;;;;;;;;;;3294:104;;;;;;;;;;;;;:::i;18113:364::-;;;;;;;;;;-1:-1:-1;18113:364:0;;;;;:::i;:::-;;:::i;9735:24::-;;;;;;;;;;;;;;;;9880:27;;;;;;;;;;;;;;;;9560:25;;;;;;;;;;;;;;;;5203:475;;;;;;;;;;-1:-1:-1;5203:475:0;;;;;:::i;:::-;;:::i;10813:40::-;;;;;;;;;;-1:-1:-1;10813:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;3774:200;;;;;;;;;;-1:-1:-1;3774:200:0;;;;;:::i;:::-;;:::i;8709:30::-;;;;;;;;;;;;;;;;20196:113;;;;;;;;;;-1:-1:-1;20287:14:0;;20272:12;:29;20196:113;;9592:26;;;;;;;;;;;;;;;;9252:33;;;;;;;;;;-1:-1:-1;9252:33:0;;;;;;;;;;;20006:182;;;;;;;;;;-1:-1:-1;20006:182:0;;;;;:::i;:::-;;:::i;15843:327::-;;;;;;;;;;-1:-1:-1;15843:327:0;;;;;:::i;:::-;;:::i;15409:109::-;;;;;;;;;;-1:-1:-1;15409:109:0;;;;;:::i;:::-;;:::i;9401:39::-;;;;;;;;;;-1:-1:-1;9401:39:0;;;;;;;;8966:31;;;;;;;;;;;;;;;;16885:428;;;;;;;;;;-1:-1:-1;16885:428:0;;;;;:::i;:::-;;:::i;9627:27::-;;;;;;;;;;;;;;;;16178:317;;;;;;;;;;-1:-1:-1;16178:317:0;;;;;:::i;:::-;;:::i;3982:176::-;;;;;;;;;;-1:-1:-1;3982:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;4123:18:0;;;4096:7;4123:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3982:176;26540:156;;;;;;;;;;;;;:::i;8856:33::-;;;;;;;;;;;;;;;;9004;;;;;;;;;;;;;;;;9766:25;;;;;;;;;;;;;;;;18485:518;;;;;;;;;;-1:-1:-1;18485:518:0;;;;;:::i;:::-;;:::i;15737:98::-;;;;;;;;;;;;;:::i;9698:30::-;;;;;;;;;;;;;;;;8312:281;;;;;;;;;;-1:-1:-1;8312:281:0;;;;;:::i;:::-;;:::i;9522:31::-;;;;;;;;;;;;;;;;3186:100;3240:13;3273:5;3266:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3186:100;:::o;4166:194::-;4274:4;4291:39;1524:10;4314:7;4323:6;4291:8;:39::i;:::-;-1:-1:-1;4348:4:0;4166:194;;;;;:::o;4368:529::-;4508:4;4525:36;4535:6;4543:9;4554:6;4525:9;:36::i;:::-;-1:-1:-1;;;;;4601:19:0;;4574:24;4601:19;;;:11;:19;;;;;;;;1524:10;4601:33;;;;;;;;4667:26;;;;4645:116;;;;-1:-1:-1;;;4645:116:0;;5102:2:1;4645:116:0;;;5084:21:1;5141:2;5121:18;;;5114:30;5180:34;5160:18;;;5153:62;-1:-1:-1;;;5231:18:1;;;5224:38;5279:19;;4645:116:0;;;;;;;;;4797:57;4806:6;1524:10;4847:6;4828:16;:25;4797:8;:57::i;:::-;4885:4;4878:11;;;4368:529;;;;;;:::o;16503:312::-;8067:6;;-1:-1:-1;;;;;8067:6:0;1524:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;16640:4:::1;16632;16611:13;3595:12:::0;;;3507:108;16611:13:::1;:17;::::0;16627:1:::1;16611:17;:::i;:::-;16610:26;;;;:::i;:::-;16609:35;;;;:::i;:::-;16599:6;:45;;16577:136;;;::::0;-1:-1:-1;;;16577:136:0;;6399:2:1;16577:136:0::1;::::0;::::1;6381:21:1::0;6438:2;6418:18;;;6411:30;6477:34;6457:18;;;6450:62;-1:-1:-1;;;6528:18:1;;;6521:39;6577:19;;16577:136:0::1;6197:405:1::0;16577:136:0::1;16739:19;:6:::0;16749:8:::1;16739:19;:::i;:::-;16724:12;:34:::0;;;16774:33:::1;::::0;1592:25:1;;;16774:33:0::1;::::0;1580:2:1;1565:18;16774:33:0::1;;;;;;;;16503:312:::0;:::o;19494:504::-;8067:6;;-1:-1:-1;;;;;8067:6:0;1524:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;19671:15:::1;:31:::0;;;19713:15:::1;:31:::0;;;19755:9:::1;:19:::0;;;19785:10:::1;:21:::0;;;19798:8;19767:7;19845:46:::1;19731:13:::0;19689;19845:46:::1;:::i;:::-;:71;;;;:::i;:::-;:97;;;;:::i;:::-;19817:12;:125:::0;;;19977:1:::1;-1:-1:-1::0;19961:17:0::1;19953:37;;;::::0;-1:-1:-1;;;19953:37:0;;6939:2:1;19953:37:0::1;::::0;::::1;6921:21:1::0;6978:1;6958:18;;;6951:29;-1:-1:-1;;;6996:18:1;;;6989:37;7043:18;;19953:37:0::1;6737:330:1::0;19953:37:0::1;19494:504:::0;;;;:::o;4905:290::-;1524:10;5018:4;5107:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5107:34:0;;;;;;;;;;5018:4;;5035:130;;5085:7;;5107:47;;5144:10;;5107:47;:::i;:::-;5035:8;:130::i;26340:192::-;8067:6;;-1:-1:-1;;;;;8067:6:0;1524:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26423:24:0;::::1;26415:67;;;::::0;-1:-1:-1;;;26415:67:0;;7274:2:1;26415:67:0::1;::::0;::::1;7256:21:1::0;7313:2;7293:18;;;7286:30;7352:32;7332:18;;;7325:60;7402:18;;26415:67:0::1;7072:354:1::0;26415:67:0::1;26493:9;:31:::0;;-1:-1:-1;;;;;;26493:31:0::1;-1:-1:-1::0;;;;;26493:31:0;;;::::1;::::0;;;::::1;::::0;;26340:192::o;26051:281::-;8067:6;;-1:-1:-1;;;;;8067:6:0;1524:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26176:30:0;::::1;26154:116;;;::::0;-1:-1:-1;;;26154:116:0;;7633:2:1;26154:116:0::1;::::0;::::1;7615:21:1::0;7672:2;7652:18;;;7645:30;7711:34;7691:18;;;7684:62;-1:-1:-1;;;7762:18:1;;;7755:34;7806:19;;26154:116:0::1;7431:400:1::0;26154:116:0::1;26281:15;:43:::0;;-1:-1:-1;;;;;;26281:43:0::1;-1:-1:-1::0;;;;;26281:43:0;;;::::1;::::0;;;::::1;::::0;;26051:281::o;3623:143::-;-1:-1:-1;;;;;3740:18:0;3713:7;3740:18;;;;;;;;;;;;3623:143::o;8154:150::-;8067:6;;-1:-1:-1;;;;;8067:6:0;1524:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;8247:6:::1;::::0;8226:40:::1;::::0;8263:1:::1;::::0;-1:-1:-1;;;;;8247:6:0::1;::::0;8226:40:::1;::::0;8263:1;;8226:40:::1;8277:6;:19:::0;;-1:-1:-1;;;;;;8277:19:0::1;::::0;;8154:150::o;15526:203::-;8067:6;;-1:-1:-1;;;;;8067:6:0;1524:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;3595:12;;15580::::1;:28:::0;3595:12;;15619:13:::1;:29:::0;3595:12;;15659:15:::1;:31:::0;15706:15:::1;::::0;::::1;::::0;;;::::1;15526:203::o:0;17546:328::-;8067:6;;-1:-1:-1;;;;;8067:6:0;1524:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;17668:4:::1;17663:162;;17725:13;::::0;-1:-1:-1;;;;;17725:13:0;;::::1;17715:23:::0;;::::1;::::0;17689:124:::1;;;::::0;-1:-1:-1;;;17689:124:0;;8038:2:1;17689:124:0::1;::::0;::::1;8020:21:1::0;8077:2;8057:18;;;8050:30;8116:34;8096:18;;;8089:62;-1:-1:-1;;;8167:18:1;;;8160:37;8214:19;;17689:124:0::1;7836:403:1::0;17689:124:0::1;-1:-1:-1::0;;;;;17835:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:31;;-1:-1:-1;;17835:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17546:328::o;19011:475::-;19138:15;19156:24;19174:4;19156:9;:24::i;:::-;19138:42;;19224:18;;19213:7;:29;;19191:79;;;;-1:-1:-1;;;19191:79:0;;8446:2:1;19191:79:0;;;8428:21:1;-1:-1:-1;8465:18:1;;;8458:29;8504:18;;19191:79:0;8244:284:1;19191:79:0;19285:47;19300:8;19310:10;19322:9;19285:14;:47::i;:::-;19281:198;;;19349:8;:15;;-1:-1:-1;;;;19349:15:0;-1:-1:-1;;;19349:15:0;;;19379:10;:8;:10::i;:::-;19404:8;:16;;-1:-1:-1;;;;19404:16:0;;;19440:27;;19451:15;1592:25:1;;19440:27:0;;1580:2:1;1565:18;19440:27:0;;;;;;;19127:359;19011:475;;;:::o;12982:243::-;8067:6;;-1:-1:-1;;;;;8067:6:0;1524:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;13046:13:::1;::::0;::::1;::::0;::::1;;;13045:14;13037:50;;;::::0;-1:-1:-1;;;13037:50:0;;8735:2:1;13037:50:0::1;::::0;::::1;8717:21:1::0;8774:2;8754:18;;;8747:30;8813:25;8793:18;;;8786:53;8856:18;;13037:50:0::1;8533:347:1::0;13037:50:0::1;13098:13;:20:::0;;-1:-1:-1;;13129:18:0;;;;;13173:12:::1;13158;:27:::0;13201:16:::1;::::0;::::1;::::0;-1:-1:-1;;13201:16:0::1;12982:243::o:0;3294:104::-;3350:13;3383:7;3376:14;;;;;:::i;18113:364::-;8067:6;;-1:-1:-1;;;;;8067:6:0;1524:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;18261:13:::1;::::0;-1:-1:-1;;;;;18261:13:0;;::::1;18253:21:::0;;::::1;::::0;18231:128:::1;;;::::0;-1:-1:-1;;;18231:128:0;;9087:2:1;18231:128:0::1;::::0;::::1;9069:21:1::0;9126:2;9106:18;;;9099:30;9165:34;9145:18;;;9138:62;9236:27;9216:18;;;9209:55;9281:19;;18231:128:0::1;8885:421:1::0;18231:128:0::1;18372:41;18401:4;18407:5;18372:28;:41::i;:::-;18429:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;18429:40:0;::::1;::::0;::::1;::::0;;;::::1;18113:364:::0;;:::o;5203:475::-;1524:10;5321:4;5365:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5365:34:0;;;;;;;;;;5432:35;;;;5410:122;;;;-1:-1:-1;;;5410:122:0;;9513:2:1;5410:122:0;;;9495:21:1;9552:2;9532:18;;;9525:30;9591:34;9571:18;;;9564:62;-1:-1:-1;;;9642:18:1;;;9635:35;9687:19;;5410:122:0;9311:401:1;5410:122:0;5568:67;1524:10;5591:7;5619:15;5600:16;:34;5568:8;:67::i;:::-;-1:-1:-1;5666:4:0;;5203:475;-1:-1:-1;;;5203:475:0:o;3774:200::-;3885:4;3902:42;1524:10;3926:9;3937:6;3902:9;:42::i;20006:182::-;8067:6;;-1:-1:-1;;;;;8067:6:0;1524:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20091:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20091:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20146:34;;1163:41:1;;;20146:34:0::1;::::0;1136:18:1;20146:34:0::1;;;;;;;20006:182:::0;;:::o;15843:327::-;8067:6;;-1:-1:-1;;;;;8067:6:0;1524:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;15983:4:::1;15975;15954:13;3595:12:::0;;;3507:108;15954:13:::1;:17;::::0;15970:1:::1;15954:17;:::i;:::-;15953:26;;;;:::i;:::-;15952:35;;;;:::i;:::-;15942:6;:45;;15920:139;;;::::0;-1:-1:-1;;;15920:139:0;;9919:2:1;15920:139:0::1;::::0;::::1;9901:21:1::0;9958:2;9938:18;;;9931:30;9997:34;9977:18;;;9970:62;-1:-1:-1;;;10048:18:1;;;10041:42;10100:19;;15920:139:0::1;9717:408:1::0;15920:139:0::1;16088:19;:6:::0;16098:8:::1;16088:19;:::i;:::-;16070:15;:37:::0;;;16123:39:::1;::::0;1592:25:1;;;16123:39:0::1;::::0;1580:2:1;1565:18;16123:39:0::1;1446:177:1::0;15409:109:0;8067:6;;-1:-1:-1;;;;;8067:6:0;1524:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15479:23:0::1;15505:5;15479:23:::0;;;:15:::1;:23;::::0;;;;:31;;-1:-1:-1;;15479:31:0::1;::::0;;15409:109::o;16885:428::-;8067:6;;-1:-1:-1;;;;;8067:6:0;1524:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;17025:6:::1;17004:13;3595:12:::0;;;3507:108;17004:13:::1;:17;::::0;17020:1:::1;17004:17;:::i;:::-;17003:28;;;;:::i;:::-;16990:9;:41;;16968:144;;;::::0;-1:-1:-1;;;16968:144:0;;10332:2:1;16968:144:0::1;::::0;::::1;10314:21:1::0;10371:2;10351:18;;;10344:30;10410:34;10390:18;;;10383:62;-1:-1:-1;;;10461:18:1;;;10454:51;10522:19;;16968:144:0::1;10130:417:1::0;16968:144:0::1;17180:4;17159:13;3595:12:::0;;;3507:108;17159:13:::1;:17;::::0;17175:1:::1;17159:17;:::i;:::-;17158:26;;;;:::i;:::-;17145:9;:39;;17123:141;;;::::0;-1:-1:-1;;;17123:141:0;;10754:2:1;17123:141:0::1;::::0;::::1;10736:21:1::0;10793:2;10773:18;;;10766:30;10832:34;10812:18;;;10805:62;-1:-1:-1;;;10883:18:1;;;10876:50;10943:19;;17123:141:0::1;10552:416:1::0;17123:141:0::1;17275:18;:30:::0;16885:428::o;16178:317::-;8067:6;;-1:-1:-1;;;;;8067:6:0;1524:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;16316:4:::1;16308;16287:13;3595:12:::0;;;3507:108;16287:13:::1;:17;::::0;16303:1:::1;16287:17;:::i;:::-;16286:26;;;;:::i;:::-;16285:35;;;;:::i;:::-;16275:6;:45;;16253:137;;;::::0;-1:-1:-1;;;16253:137:0;;11175:2:1;16253:137:0::1;::::0;::::1;11157:21:1::0;11214:2;11194:18;;;11187:30;11253:34;11233:18;;;11226:62;-1:-1:-1;;;11304:18:1;;;11297:40;11354:19;;16253:137:0::1;10973:406:1::0;16253:137:0::1;16417:19;:6:::0;16427:8:::1;16417:19;:::i;:::-;16401:13;:35:::0;;;16452::::1;::::0;1592:25:1;;;16452:35:0::1;::::0;1580:2:1;1565:18;16452:35:0::1;1446:177:1::0;26540:156:0;8067:6;;-1:-1:-1;;;;;8067:6:0;1524:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;26630:58:::1;::::0;26593:12:::1;::::0;26638:10:::1;::::0;26662:21:::1;::::0;26593:12;26630:58;26593:12;26630:58;26662:21;26638:10;26630:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18485:518:::0;8067:6;;-1:-1:-1;;;;;8067:6:0;1524:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;18663:16:::1;:32:::0;;;18706:16:::1;:32:::0;;;18749:10:::1;:20:::0;;;18780:11:::1;:22:::0;;;18794:8;18762:7;18842:48:::1;18725:13:::0;18682;18842:48:::1;:::i;:::-;:74;;;;:::i;:::-;:101;;;;:::i;:::-;18813:13;:130:::0;;;18979:1:::1;-1:-1:-1::0;18962:18:0::1;18954:41;;;::::0;-1:-1:-1;;;18954:41:0;;11796:2:1;18954:41:0::1;::::0;::::1;11778:21:1::0;11835:2;11815:18;;;11808:30;-1:-1:-1;;;11854:18:1;;;11847:40;11904:18;;18954:41:0::1;11594:334:1::0;15737:98:0;8067:6;;-1:-1:-1;;;;;8067:6:0;1524:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;15799:20:::1;:28:::0;;-1:-1:-1;;15799:28:0::1;::::0;;15737:98::o;8312:281::-;8067:6;;-1:-1:-1;;;;;8067:6:0;1524:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8415:22:0;::::1;8393:110;;;::::0;-1:-1:-1;;;8393:110:0;;12135:2:1;8393:110:0::1;::::0;::::1;12117:21:1::0;12174:2;12154:18;;;12147:30;12213:34;12193:18;;;12186:62;-1:-1:-1;;;12264:18:1;;;12257:36;12310:19;;8393:110:0::1;11933:402:1::0;8393:110:0::1;8540:6;::::0;8519:38:::1;::::0;-1:-1:-1;;;;;8519:38:0;;::::1;::::0;8540:6:::1;::::0;8519:38:::1;::::0;8540:6:::1;::::0;8519:38:::1;8568:6;:17:::0;;-1:-1:-1;;;;;;8568:17:0::1;-1:-1:-1::0;;;;;8568:17:0;;;::::1;::::0;;;::::1;::::0;;8312:281::o;7059:380::-;-1:-1:-1;;;;;7195:19:0;;7187:68;;;;-1:-1:-1;;;7187:68:0;;12542:2:1;7187:68:0;;;12524:21:1;12581:2;12561:18;;;12554:30;12620:34;12600:18;;;12593:62;-1:-1:-1;;;12671:18:1;;;12664:34;12715:19;;7187:68:0;12340:400:1;7187:68:0;-1:-1:-1;;;;;7274:21:0;;7266:68;;;;-1:-1:-1;;;7266:68:0;;12947:2:1;7266:68:0;;;12929:21:1;12986:2;12966:18;;;12959:30;13025:34;13005:18;;;12998:62;-1:-1:-1;;;13076:18:1;;;13069:32;13118:19;;7266:68:0;12745:398:1;7266:68:0;-1:-1:-1;;;;;7347:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7399:32;;1592:25:1;;;7399:32:0;;1565:18:1;7399:32:0;;;;;;;;7059:380;;;:::o;20317:5726::-;-1:-1:-1;;;;;20449:18:0;;20441:68;;;;-1:-1:-1;;;20441:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20528:16:0;;20520:64;;;;-1:-1:-1;;;20520:64:0;;;;;;;:::i;:::-;20612:1;20603:6;:10;20595:52;;;;-1:-1:-1;;;20595:52:0;;14160:2:1;20595:52:0;;;14142:21:1;14199:2;14179:18;;;14172:30;14238:31;14218:18;;;14211:59;14287:18;;20595:52:0;13958:353:1;20595:52:0;20665:13;;;;;;;20660:183;;-1:-1:-1;;;;;20721:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;20750:23:0;;;;;;:19;:23;;;;;;;;20721:52;20695:136;;;;-1:-1:-1;;;20695:136:0;;14518:2:1;20695:136:0;;;14500:21:1;14557:2;14537:18;;;14530:30;-1:-1:-1;;;14576:18:1;;;14569:52;14638:18;;20695:136:0;14316:346:1;20695:136:0;20859:14;;:18;20855:254;;-1:-1:-1;;;;;20921:21:0;;;;;;:15;:21;;;;;;;;20920:22;;:60;;-1:-1:-1;8005:6:0;;-1:-1:-1;;;;;20967:13:0;;;8005:6;;20967:13;20920:60;:106;;;-1:-1:-1;;;;;;21005:21:0;;21019:6;21005:21;20920:106;20894:203;;;;-1:-1:-1;;;20894:203:0;;14869:2:1;20894:203:0;;;14851:21:1;14908:2;14888:18;;;14881:30;14947:34;14927:18;;;14920:62;-1:-1:-1;;;14998:18:1;;;14991:33;15041:19;;20894:203:0;14667:399:1;20894:203:0;21125:14;;;;21121:2246;;;8005:6;;-1:-1:-1;;;;;21178:15:0;;;8005:6;;21178:15;;;;:49;;-1:-1:-1;8005:6:0;;-1:-1:-1;;;;;21214:13:0;;;8005:6;;21214:13;;21178:49;:86;;;;-1:-1:-1;;;;;;21248:16:0;;;;21178:86;:128;;;;-1:-1:-1;;;;;;21285:21:0;;21299:6;21285:21;;21178:128;:175;;;;-1:-1:-1;;;;;;21328:25:0;;;;;;:19;:25;;;;;;;;21327:26;21178:175;:220;;;;-1:-1:-1;;;;;;21375:23:0;;;;;;:19;:23;;;;;;;;21374:24;21178:220;21156:1237;;;21437:20;;;;21433:945;;;21526:15;;-1:-1:-1;;;;;21512:30:0;;;21526:15;;21512:30;;;;:62;;-1:-1:-1;21560:13:0;;-1:-1:-1;;;;;21546:28:0;;;21560:13;;21546:28;;21512:62;21482:877;;;21738:16;21753:1;21738:12;:16;:::i;:::-;21692:9;21663:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;21859:16:0;21874:1;21859:12;:16;:::i;:::-;-1:-1:-1;;;;;21791:32:0;;;;;;:28;:32;;;;;;:84;21663:212;21625:339;;;;-1:-1:-1;;;21625:339:0;;15406:2:1;21625:339:0;;;15388:21:1;15445:2;15425:18;;;15418:30;15484:31;15464:18;;;15457:59;15533:18;;21625:339:0;15204:353:1;21625:339:0;22020:9;21991:39;;;;:28;:39;;;;;;22033:12;21991:54;;;;-1:-1:-1;;;;;22072:32:0;;;;;;:47;21482:877;;;-1:-1:-1;;;;;22154:14:0;;;;;;:8;:14;;;;;;;;22153:15;:28;;;;-1:-1:-1;22173:8:0;;-1:-1:-1;;;22173:8:0;;;;22172:9;22153:28;22149:210;;;22266:9;;-1:-1:-1;;;;;22248:15:0;;;;;;:9;:15;;;;;;:27;22210:125;;;;-1:-1:-1;;;22210:125:0;;8446:2:1;22210:125:0;;;8428:21:1;-1:-1:-1;8465:18:1;;;8458:29;8504:18;;22210:125:0;8244:284:1;22210:125:0;-1:-1:-1;;;;;22413:14:0;;;;;;:8;:14;;;;;;;;:39;;;;-1:-1:-1;;;;;;22432:20:0;;;;;;:16;:20;;;;;;;;22431:21;22413:39;22409:947;;;22513:12;;22503:6;:22;;22473:136;;;;-1:-1:-1;;;22473:136:0;;15764:2:1;22473:136:0;;;15746:21:1;15803:2;15783:18;;;15776:30;15842:34;15822:18;;;15815:62;-1:-1:-1;;;15893:18:1;;;15886:38;15941:19;;22473:136:0;15562:404:1;22473:136:0;22684:15;;22667:13;22677:2;22667:9;:13::i;:::-;22658:22;;:6;:22;:::i;:::-;:41;;22628:139;;;;-1:-1:-1;;;22628:139:0;;16173:2:1;22628:139:0;;;16155:21:1;16212:2;16192:18;;;16185:30;16251:26;16231:18;;;16224:54;16295:18;;22628:139:0;15971:348:1;22628:139:0;22409:947;;;-1:-1:-1;;;;;22811:12:0;;;;;;:8;:12;;;;;;;;:39;;;;-1:-1:-1;;;;;;22828:22:0;;;;;;:16;:22;;;;;;;;22827:23;22811:39;22789:567;;;22925:13;;22915:6;:23;;22885:139;;;;-1:-1:-1;;;22885:139:0;;16526:2:1;22885:139:0;;;16508:21:1;16565:2;16545:18;;;16538:30;16604:34;16584:18;;;16577:62;-1:-1:-1;;;16655:18:1;;;16648:40;16705:19;;22885:139:0;16324:406:1;22789:567:0;-1:-1:-1;;;;;23051:20:0;;;;;;:16;:20;;;;;;;;23046:310;;23148:15;;23131:13;23141:2;23131:9;:13::i;23046:310::-;23258:8;;-1:-1:-1;;;23258:8:0;;;;23257:9;:35;;;;-1:-1:-1;;;;;;23270:22:0;;;;;;:16;:22;;;;;;;;23257:35;23253:103;;;23325:15;23313:9;:27;23253:103;23379:28;23410:24;23428:4;23410:9;:24::i;:::-;23486:18;;23379:55;;-1:-1:-1;23462:42:0;;;;;;;23535:35;;-1:-1:-1;23559:11:0;;;;;;;23535:35;:61;;;;-1:-1:-1;23588:8:0;;-1:-1:-1;;;23588:8:0;;;;23587:9;23535:61;:93;;;;-1:-1:-1;;;;;;23614:14:0;;;;;;:8;:14;;;;;;;;23613:15;23535:93;:136;;;;-1:-1:-1;;;;;;23646:25:0;;;;;;:19;:25;;;;;;;;23645:26;23535:136;:177;;;;-1:-1:-1;;;;;;23689:23:0;;;;;;:19;:23;;;;;;;;23688:24;23535:177;23517:305;;;23739:8;:15;;-1:-1:-1;;;;23739:15:0;-1:-1:-1;;;23739:15:0;;;23769:10;:8;:10::i;:::-;23794:8;:16;;-1:-1:-1;;;;23794:16:0;;;23517:305;-1:-1:-1;;;;;23870:25:0;;23834:12;23870:25;;;:19;:25;;;;;;23849:4;;23870:25;;;:52;;-1:-1:-1;;;;;;23899:23:0;;;;;;:19;:23;;;;;;;;23870:52;23866:100;;;-1:-1:-1;23949:5:0;23866:100;-1:-1:-1;;;;;23980:13:0;;;;;;:9;:13;;;;;;:18;:36;;;;-1:-1:-1;;;;;;24002:14:0;;;;;;:8;:14;;;;;;;;23980:36;23976:165;;;24037:22;24055:2;24037:9;:22::i;:::-;24063:1;24037:27;24033:97;;-1:-1:-1;;;;;24083:13:0;;;;;;:9;:13;;;;;24099:15;24083:31;;24033:97;24153:12;24186:7;24182:1808;;;20287:14;;20272:12;:29;24232:56;;;;-1:-1:-1;;;;;;24274:14:0;;;;;;:8;:14;;;;;;;;24232:56;:90;;;;-1:-1:-1;;;;;;24310:12:0;;;;;;:8;:12;;;;;;;;24309:13;24232:90;:127;;;;;24358:1;24343:12;;:16;24232:127;24210:1635;;;-1:-1:-1;;;;;24399:19:0;;;;;;:15;:19;;;;;;;;24394:186;;-1:-1:-1;;;;;24443:19:0;;;;;;:15;:19;;;;;:26;;-1:-1:-1;;24443:26:0;24465:4;24443:26;;;;;;24492:10;:15;;24465:4;;24492:10;;:15;;24465:4;;24492:15;:::i;:::-;;;;-1:-1:-1;;24535:25:0;;-1:-1:-1;;;;;1402:32:1;;1384:51;;24535:25:0;;1372:2:1;1357:18;24535:25:0;;;;;;;24394:186;24623:3;24608:11;:6;24617:2;24608:11;:::i;:::-;24607:19;;;;:::i;:::-;24600:26;;24694:12;;24675:15;;24668:4;:22;;;;:::i;:::-;24667:39;;;;:::i;:::-;24645:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24774:12:0;;24755:15;;24748:22;;:4;:22;:::i;:::-;24747:39;;;;:::i;:::-;24725:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24842:12:0;;24829:9;;24822:16;;:4;:16;:::i;:::-;24821:33;;;;:::i;:::-;24805:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;24912:12:0;;24898:10;;24891:17;;:4;:17;:::i;:::-;24890:34;;;;:::i;:::-;24873:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;24210:1635:0;;-1:-1:-1;24210:1635:0;;-1:-1:-1;;;;;24984:12:0;;;;;;:8;:12;;;;;;;;:33;;;;;25016:1;25000:13;;:17;24984:33;24980:865;;;25072:3;25055:13;;25046:6;:22;;;;:::i;:::-;25045:30;;;;:::i;:::-;25038:37;;25144:13;;25124:16;;25117:4;:23;;;;:::i;:::-;25116:41;;;;:::i;:::-;25094:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25226:13:0;;25206:16;;25199:23;;:4;:23;:::i;:::-;25198:41;;;;:::i;:::-;25176:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25296:13:0;;25282:10;;25275:17;;:4;:17;:::i;:::-;25274:35;;;;:::i;:::-;25258:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;25368:13:0;;25353:11;;25346:18;;:4;:18;:::i;24980:865::-;-1:-1:-1;;;;;25440:14:0;;;;;;:8;:14;;;;;;;;:34;;;;;25473:1;25458:12;;:16;25440:34;25436:409;;;25528:3;25512:12;;25503:6;:21;;;;:::i;:::-;25502:29;;;;:::i;:::-;25495:36;;25599:12;;25580:15;;25573:4;:22;;;;:::i;:::-;25572:39;;;;:::i;:::-;25550:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25679:12:0;;25660:15;;25653:22;;:4;:22;:::i;:::-;25652:39;;;;:::i;:::-;25630:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25747:12:0;;25734:9;;25727:16;;:4;:16;:::i;:::-;25726:33;;;;:::i;:::-;25710:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;25817:12:0;;25803:10;;25796:17;;:4;:17;:::i;:::-;25795:34;;;;:::i;:::-;25778:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;25436:409:0;25863:8;;25859:91;;25892:42;25908:4;25922;25929;25892:15;:42::i;:::-;25964:14;25974:4;25964:14;;:::i;:::-;;;24182:1808;26002:33;26018:4;26024:2;26028:6;26002:15;:33::i;:::-;20430:5613;;;;20317:5726;;;:::o;13609:1792::-;13798:10;13742:4;13840:27;;;:19;:27;;;;;;13742:4;;;;13840:27;;;13880:1514;;13935:1;13919:13;;:17;:62;;;;;13968:13;;13940:24;13958:4;13940:9;:24::i;:::-;:41;;13919:62;13915:135;;;14002:32;14008:10;14020:13;;14002:5;:32::i;:::-;14082:1;14066:13;:17;;;14107:4;;-1:-1:-1;14151:24:0;14169:4;14151:9;:24::i;:::-;14128:47;;14192:23;14294:12;;14256:18;;14218;;:56;;;;:::i;:::-;:88;;;;:::i;:::-;14192:114;;14342:18;;14363:2;14342:23;;;;:::i;:::-;14327:12;:38;14323:117;;;14401:18;;:23;;14422:2;14401:23;:::i;:::-;14386:38;;14323:117;14460:17;;;:41;;-1:-1:-1;14481:20:0;;14460:41;14456:94;;;14529:5;14522:12;;;;;;;;;14456:94;14573:6;14566:13;;;;;;;;;13880:1514;14643:1;14616:24;14634:4;14616:9;:24::i;:::-;:28;14612:303;;;14669:10;14683:1;14669:15;14665:235;;14709:9;:21;;;14762:5;;-1:-1:-1;14665:235:0;;;14816:27;14822:8;14832:10;14816:5;:27::i;:::-;14875:5;14866:14;;14665:235;14931:20;14954:24;14972:4;14954:9;:24::i;:::-;14931:47;;14995:23;15097:12;;15059:18;;15021;;:56;;;;:::i;:::-;:88;;;;:::i;:::-;14995:114;-1:-1:-1;15130:17:0;;;:41;;-1:-1:-1;15151:20:0;;15130:41;15126:94;;;15199:5;15192:12;;;;;;;;;15126:94;15255:18;;:23;;15276:2;15255:23;:::i;:::-;15240:12;:38;15236:117;;;15314:18;;:23;;15335:2;15314:23;:::i;:::-;-1:-1:-1;15376:6:0;;-1:-1:-1;15369:13:0;;-1:-1:-1;;;;15369:13:0;26704:1567;26763:1;26747:13;;:17;:62;;;;;26796:13;;26768:24;26786:4;26768:9;:24::i;:::-;:41;;26747:62;26743:130;;;26826:35;26840:4;26847:13;;26826:5;:35::i;:::-;26899:1;26883:13;:17;;;26937:24;26955:4;26937:9;:24::i;:::-;26911:50;;26972:25;27068:12;;27034:18;;27000;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;26972:108;-1:-1:-1;27097:20:0;;;:46;;-1:-1:-1;27121:22:0;;27097:46;27093:85;;;27160:7;;26704:1567::o;27093:85::-;27212:18;;:22;;27233:1;27212:22;:::i;:::-;27194:15;:40;27190:113;;;27269:18;;:22;;27290:1;27269:22;:::i;:::-;27251:40;;27190:113;27315:23;27415:1;27395:17;27360:18;;27342:15;:36;;;;:::i;:::-;27341:71;;;;:::i;:::-;:75;;;;:::i;:::-;27315:101;-1:-1:-1;27429:51:0;27446:33;27315:101;27446:15;:33;:::i;:::-;27429:16;:51::i;:::-;27690:18;;27514:21;;;;27493:18;;27690:22;;27711:1;;27690:22;:::i;:::-;27669:44;;:17;:44;:::i;:::-;27633:18;;27620:31;;:10;:31;:::i;:::-;27619:95;;;;:::i;:::-;27593:121;;27725:17;27831:1;27810:18;;:22;;;;:::i;:::-;27789:44;;:17;:44;:::i;:::-;27759:12;;27746:25;;:10;:25;:::i;:::-;27745:89;;;;:::i;:::-;27725:109;-1:-1:-1;27864:27:0;27725:109;27864:15;:27;:::i;:::-;27845:46;;;;:::i;:::-;27923:1;27902:18;:22;;;27935:18;:22;;;27968:12;:16;;;27995:13;:17;27845:46;-1:-1:-1;28029:19:0;;;;;:42;;;28070:1;28052:15;:19;28029:42;28025:121;;;28088:46;28101:15;28118;28088:12;:46::i;:::-;28166:9;;28158:38;;-1:-1:-1;;;;;28166:9:0;;;;28158:38;;;;;28186:9;;28166;28158:38;28166:9;28158:38;28186:9;28166;28158:38;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28215:15:0;;28207:56;;-1:-1:-1;;;;;28215:15:0;;;;28241:21;28207:56;;;;;28215:15;28207:56;28215:15;28207:56;28241:21;28215:15;28207:56;;;;;;;;;;;;;;;;;;;;;26732:1539;;;;;;;26704:1567::o;17882:223::-;-1:-1:-1;;;;;17965:14:0;;;;;;:8;:14;;;;;:22;;-1:-1:-1;;17965:22:0;;;;;;;18000:39;17965:14;:22;18000:26;:39::i;5686:651::-;-1:-1:-1;;;;;5826:20:0;;5818:70;;;;-1:-1:-1;;;5818:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5907:23:0;;5899:71;;;;-1:-1:-1;;;5899:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6007:17:0;;5983:21;6007:17;;;;;;;;;;;6057:23;;;;6035:111;;;;-1:-1:-1;;;6035:111:0;;16937:2:1;6035:111:0;;;16919:21:1;16976:2;16956:18;;;16949:30;17015:34;16995:18;;;16988:62;-1:-1:-1;;;17066:18:1;;;17059:36;17112:19;;6035:111:0;16735:402:1;6035:111:0;-1:-1:-1;;;;;6182:17:0;;;:9;:17;;;;;;;;;;;6202:22;;;6182:42;;6246:20;;;;;;;;:30;;6218:6;;6182:9;6246:30;;6218:6;;6246:30;:::i;:::-;;;;;;;;6311:9;-1:-1:-1;;;;;6294:35:0;6303:6;-1:-1:-1;;;;;6294:35:0;;6322:6;6294:35;;;;1592:25:1;;1580:2;1565:18;;1446:177;6294:35:0;;;;;;;;5807:530;5686:651;;;:::o;6669:382::-;-1:-1:-1;;;;;6753:21:0;;6745:34;;;;-1:-1:-1;;;6745:34:0;;8446:2:1;6745:34:0;;;8428:21:1;-1:-1:-1;8465:18:1;;;8458:29;8504:18;;6745:34:0;8244:284:1;6745:34:0;-1:-1:-1;;;;;6808:18:0;;6790:15;6808:18;;;;;;;;;;;6845:17;;;;6837:30;;;;-1:-1:-1;;;6837:30:0;;8446:2:1;6837:30:0;;;8428:21:1;-1:-1:-1;8465:18:1;;;8458:29;8504:18;;6837:30:0;8244:284:1;6837:30:0;-1:-1:-1;;;;;6903:18:0;;:9;:18;;;;;;;;;;;6924:16;;;6903:37;;6955:12;:22;;;;;;;7006:37;1592:25:1;;;6903:9:0;;:18;7006:37;;1565:18:1;7006:37:0;1446:177:1;28279:472:0;28369:16;;;28383:1;28369:16;;;;;;;;28345:21;;28369:16;;;;;;;;;;-1:-1:-1;28369:16:0;28345:40;;28414:4;28396;28401:1;28396:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28396:23:0;;;:7;;;;;;;;;;:23;;;;28440:15;;:22;;;-1:-1:-1;;;28440:22:0;;;;:15;;;;;:20;;:22;;;;;28396:7;;28440:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28430:4;28435:1;28430:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28430:32:0;;;:7;;;;;;;;;:32;28505:15;;28473:62;;28490:4;;28505:15;28523:11;28473:8;:62::i;:::-;28546:15;;:197;;-1:-1:-1;;;28546:197:0;;-1:-1:-1;;;;;28546:15:0;;;;:66;;:197;;28627:11;;28546:15;;28670:4;;28697;;28717:15;;28546:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28334:417;28279:472;:::o;13233:368::-;13346:15;;13314:62;;13331:4;;-1:-1:-1;;;;;13346:15:0;13364:11;13314:8;:62::i;:::-;13387:15;;:206;;-1:-1:-1;;;13387:206:0;;13459:4;13387:206;;;18988:34:1;19038:18;;;19031:34;;;13387:15:0;19081:18:1;;;19074:34;;;19124:18;;;19117:34;13545:6:0;19167:19:1;;;19160:44;13567:15:0;19220:19:1;;;19213:35;-1:-1:-1;;;;;13387:15:0;;;;:31;;13426:9;;18922:19:1;;13387:206:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;13233:368;;:::o;17321:217::-;-1:-1:-1;;;;;17434:24:0;;;;;;:16;:24;;;;;;;;;:37;;-1:-1:-1;;17434:37:0;;;;;;;;;;17487:43;;19738:51:1;;;19805:18;;;19798:50;17487:43:0;;19711:18:1;17487:43:0;;;;;;;17321:217;;:::o;14:548: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;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1628:456::-;1705:6;1713;1721;1774:2;1762:9;1753:7;1749:23;1745:32;1742:52;;;1790:1;1787;1780:12;1742:52;1829:9;1816:23;1848:31;1873:5;1848:31;:::i;:::-;1898:5;-1:-1:-1;1955:2:1;1940:18;;1927:32;1968:33;1927:32;1968:33;:::i;:::-;1628:456;;2020:7;;-1:-1:-1;;;2074:2:1;2059:18;;;;2046:32;;1628:456::o;2089:180::-;2148:6;2201:2;2189:9;2180:7;2176:23;2172:32;2169:52;;;2217:1;2214;2207:12;2169:52;-1:-1:-1;2240:23:1;;2089:180;-1:-1:-1;2089:180:1:o;2274:385::-;2360:6;2368;2376;2384;2437:3;2425:9;2416:7;2412:23;2408:33;2405:53;;;2454:1;2451;2444:12;2405:53;-1:-1:-1;;2477:23:1;;;2547:2;2532:18;;2519:32;;-1:-1:-1;2598:2:1;2583:18;;2570:32;;2649:2;2634:18;2621:32;;-1:-1:-1;2274:385:1;-1:-1:-1;2274:385:1:o;3061:247::-;3120:6;3173:2;3161:9;3152:7;3148:23;3144:32;3141:52;;;3189:1;3186;3179:12;3141:52;3228:9;3215:23;3247:31;3272:5;3247:31;:::i;3313:416::-;3378:6;3386;3439:2;3427:9;3418:7;3414:23;3410:32;3407:52;;;3455:1;3452;3445:12;3407:52;3494:9;3481:23;3513:31;3538:5;3513:31;:::i;:::-;3563:5;-1:-1:-1;3620:2:1;3605:18;;3592:32;3662:15;;3655:23;3643:36;;3633:64;;3693:1;3690;3683:12;3633:64;3716:7;3706:17;;;3313:416;;;;;:::o;3734:383::-;3811:6;3819;3827;3880:2;3868:9;3859:7;3855:23;3851:32;3848:52;;;3896:1;3893;3886:12;3848:52;3935:9;3922:23;3954:31;3979:5;3954:31;:::i;:::-;4004:5;4056:2;4041:18;;4028:32;;-1:-1:-1;4107:2:1;4092:18;;;4079:32;;3734:383;-1:-1:-1;;;3734:383:1:o;4122:388::-;4190:6;4198;4251:2;4239:9;4230:7;4226:23;4222:32;4219:52;;;4267:1;4264;4257:12;4219:52;4306:9;4293:23;4325:31;4350:5;4325:31;:::i;:::-;4375:5;-1:-1:-1;4432:2:1;4417:18;;4404:32;4445:33;4404:32;4445:33;:::i;4515:380::-;4594:1;4590:12;;;;4637;;;4658:61;;4712:4;4704:6;4700:17;4690:27;;4658:61;4765:2;4757:6;4754:14;4734:18;4731:38;4728:161;;4811:10;4806:3;4802:20;4799:1;4792:31;4846:4;4843:1;4836:15;4874:4;4871:1;4864:15;4728:161;;4515:380;;;:::o;5309:356::-;5511:2;5493:21;;;5530:18;;;5523:30;5589:34;5584:2;5569:18;;5562:62;5656:2;5641:18;;5309:356::o;5670:127::-;5731:10;5726:3;5722:20;5719:1;5712:31;5762:4;5759:1;5752:15;5786:4;5783:1;5776:15;5802:168;5875:9;;;5906;;5923:15;;;5917:22;;5903:37;5893:71;;5944:18;;:::i;5975:217::-;6015:1;6041;6031:132;;6085:10;6080:3;6076:20;6073:1;6066:31;6120:4;6117:1;6110:15;6148:4;6145:1;6138:15;6031:132;-1:-1:-1;6177:9:1;;5975:217::o;6607:125::-;6672:9;;;6693:10;;;6690:36;;;6706:18;;:::i;13148:401::-;13350:2;13332:21;;;13389:2;13369:18;;;13362:30;13428:34;13423:2;13408:18;;13401:62;-1:-1:-1;;;13494:2:1;13479:18;;13472:35;13539:3;13524:19;;13148:401::o;13554:399::-;13756:2;13738:21;;;13795:2;13775:18;;;13768:30;13834:34;13829:2;13814:18;;13807:62;-1:-1:-1;;;13900:2:1;13885:18;;13878:33;13943:3;13928:19;;13554:399::o;15071:128::-;15138:9;;;15159:11;;;15156:37;;;15173:18;;:::i;17274:127::-;17335:10;17330:3;17326:20;17323:1;17316:31;17366:4;17363:1;17356:15;17390:4;17387:1;17380:15;17406:251;17476:6;17529:2;17517:9;17508:7;17504:23;17500:32;17497:52;;;17545:1;17542;17535:12;17497:52;17577:9;17571:16;17596:31;17621:5;17596:31;:::i;17662:980::-;17924:4;17972:3;17961:9;17957:19;18003:6;17992:9;17985:25;18029:2;18067:6;18062:2;18051:9;18047:18;18040:34;18110:3;18105:2;18094:9;18090:18;18083:31;18134:6;18169;18163:13;18200:6;18192;18185:22;18238:3;18227:9;18223:19;18216:26;;18277:2;18269:6;18265:15;18251:29;;18298:1;18308:195;18322:6;18319:1;18316:13;18308:195;;;18387:13;;-1:-1:-1;;;;;18383:39:1;18371:52;;18478:15;;;;18443:12;;;;18419:1;18337:9;18308:195;;;-1:-1:-1;;;;;;;18559:32:1;;;;18554:2;18539:18;;18532:60;-1:-1:-1;;;18623:3:1;18608:19;18601:35;18520:3;17662:980;-1:-1:-1;;;17662:980:1:o;19259:306::-;19347:6;19355;19363;19416:2;19404:9;19395:7;19391:23;19387:32;19384:52;;;19432:1;19429;19422:12;19384:52;19461:9;19455:16;19445:26;;19511:2;19500:9;19496:18;19490:25;19480:35;;19555:2;19544:9;19540:18;19534:25;19524:35;;19259:306;;;;;:::o

Swarm Source

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