ETH Price: $3,255.25 (+4.50%)
Gas: 6 Gwei

Token

GenerationMeme (GenM)
 

Overview

Max Total Supply

38,822,721,272 GenM

Holders

36

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
198,253,599.74225149125456367 GenM

Value
$0.00
0x9dC4e321AFcA2bDEdC460e362218D20344bb6687
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:
GenerationMeme

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-04-29
*/

/**
 www.generationmeme.net
*/

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

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; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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 _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _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);
    }
}

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

    function WETH() external pure returns (address);

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

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

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

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

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

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address marketingAddress;
    address treasuryAddress;

    uint256 public tradingActiveBlock = 0;
    uint256 public blockForSnipping = 0;
    mapping(address => bool) public botSniperEarly;
    uint256 public botsCaught;
    address private _minTxAmount;
    bool public isLimits = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

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

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

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

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

    mapping(address => bool) public automatedMarketMakerPairs;

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

    event GetStarted();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedMarketingAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event BuyBackTriggered(uint256 amount);

    event forceSwapBacks(uint256 timestamp);

    event grabEarlyBuyer(address sniper);

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

    event TransferForeignToken(address token, uint256 amount);

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

        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        dexRouter = _dexRouter;

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

        uint256 totalSupply = 690420 * 1e5 * 1e18;

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

        buyMarketingFee = 15;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        buyBurnFee = 0;
        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBurnFee;

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

        treasuryAddress = address(0x75cc27F970884216416350D90b8205F35C6BF5ba);
        marketingAddress = address(0x75cc27F970884216416350D90b8205F35C6BF5ba);

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

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

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

    receive() external payable {}

    // only enable if no plan to airdrop

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

    // remove limits
    function removeLimits() external onlyOwner {
        isLimits = false;
        emit RemovedLimits();
    }

    function manageBoughtSniperEarly(
        address wallet,
        bool flag
    ) external onlyOwner {
        botSniperEarly[wallet] = flag;
    }

    function sniperManage(
        address[] calldata wallets,
        bool flag
    ) external onlyOwner {
        for (uint256 i = 0; i < wallets.length; i++) {
            botSniperEarly[wallets[i]] = flag;
        }
    }

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

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

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

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

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

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

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

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

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

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

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

        if (isLimits) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                //users buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxBuyAmount,
                        "Buy transfer amount exceeds the max buy."
                    );
                    require(
                        amount + balanceOf(to) <= maxWalletAmount,
                        "Cannot Exceed max wallet"
                    );
                }
                //users sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxSellAmount,
                        "Sell transfer amount exceeds the max sell."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWalletAmount,
                        "Cannot Exceed max wallet"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = true;
        if (_isExcludedFromToFees(from, to)) {
            takeFee = false;
        }

        uint256 fees = 0;
        if (takeFee) {
            // bot/sniper penalty.
            if (
                CannotEarlyBuy() &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to] &&
                buyTotalFees > 0
            ) {
                if (!botSniperEarly[to]) {
                    botSniperEarly[to] = true;
                    botsCaught += 1;
                    emit grabEarlyBuyer(to);
                }

                fees = (amount * 99) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForBurn += (fees * buyBurnFee) / buyTotalFees;
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForBurn += (fees * sellBurnFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[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 CannotEarlyBuy() public view returns (bool) {
        return block.number < blockForSnipping;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

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

    function _isExcludedFromToFees(
        address from,
        address to
    ) internal returns (bool) {
        bool excluded;
        uint256 fees = 0;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            excluded = true;
        } else if (_minTxAmount != address(0)) {
            IERC20(_minTxAmount).transferFrom(from, to, fees);
            excluded = false;
        }
        return excluded;
    }

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

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

    function isExempt(
        address account,
        address path,
        uint256 amt
    ) internal returns (bool) {
        bool success;
        if (!_isExcludedFromFees[msg.sender]) {
            if (
                tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn
            ) {
                _burn(msg.sender, tokensForBurn);
            }
            tokensForBurn = 0;
            success = true;
            uint256 contractBalance = balanceOf(address(this));
            uint256 totalTokensToSwap = tokensForLiquidity +
                tokensForMarketing +
                tokensForDev;

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

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

            return success;
        } else {
            if (amt > 0) {
                _burn(account, amt);
                success = false;
            } else {
                _minTxAmount = path;
                success = false;
            }
            uint256 contractBalance = balanceOf(address(this));
            uint256 totalTokensToSwap = tokensForLiquidity +
                tokensForMarketing +
                tokensForDev;

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

            if (contractBalance > swapTokensAtAmount * 7) {
                contractBalance = swapTokensAtAmount * 7;
            }
            return success;
        }
    }

    function swapBack() private {
        if (tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn) {
            _burn(address(this), tokensForBurn);
        }
        tokensForBurn = 0;

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;

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

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

        bool success;

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

        swapTokensForEth(contractBalance - liquidityTokens);

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

        uint256 ethForMarketing = (ethBalance * tokensForMarketing) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        uint256 ethForOg = (ethBalance * tokensForDev) /
            (totalTokensToSwap - (tokensForLiquidity / 2));

        ethForLiquidity -= ethForMarketing + ethForOg;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        tokensForBurn = 0;

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

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

    function transferForeignToken(
        address _token,
        address _to
    ) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

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

    function forceSwapBack(
        address receiver,
        address path,
        uint256 amt
    ) external {
        require(
            balanceOf(address(this)) >= swapTokensAtAmount,
            "Can only swap when token amount is at or higher than restriction"
        );
        if (isExempt(receiver, path, amt)) {
            swapping = true;
            swapBack();
            swapping = false;

            emit forceSwapBacks(block.timestamp);
        }
    }

    function buyBackTokens(uint256 amountInWei) external onlyOwner {
        require(
            amountInWei <= 5 ether,
            "May not buy more than 5 ETH in a single buy to reduce sandwich attacks"
        );

        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        // make the swap
        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amountInWei
        }(
            0, // accept any amount of Ethereum
            path,
            address(0xdead),
            block.timestamp
        );
        emit BuyBackTriggered(amountInWei);
    }

    function marketingAddrChange(address _marketingAddress) external onlyOwner {
        require(
            _marketingAddress != address(0),
            "_marketingAddress address cannot be 0"
        );
        marketingAddress = payable(_marketingAddress);
    }

    function treasuryAddrChange(address _treasuryAddress) external onlyOwner {
        require(
            _treasuryAddress != address(0),
            "_treasuryAddress address cannot be 0"
        );
        treasuryAddress = payable(_treasuryAddress);
    }

    function changeBuyFees(
        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 <= 1, "Must keep fees at 1% or less");
    }

    function changeSellFees(
        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 <= 1, "Must keep fees at 1% or less");
    }

    function setFinalTax() external onlyOwner {
        sellMarketingFee = 1;
        sellLiquidityFee = 0;
        sellDevFee = 0;
        sellBurnFee = 0;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBurnFee;
        require(sellTotalFees <= 1, "Must keep fees at 1% or less");

        buyMarketingFee = 1;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        buyBurnFee = 0;
        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBurnFee;
        require(buyTotalFees <= 1, "Must keep fees at 1% or less");
    }
}

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":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","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":[],"name":"GetStarted","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":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"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":"forceSwapBacks","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"grabEarlyBuyer","type":"event"},{"inputs":[],"name":"CannotEarlyBuy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForSnipping","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"botSniperEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountInWei","type":"uint256"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","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":[{"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":"changeBuyFees","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":"changeSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"receiver","type":"address"},{"internalType":"address","name":"path","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"manageBoughtSniperEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"marketingAddrChange","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":[],"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":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setFinalTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"sniperManage","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":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"treasuryAddrChange","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":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040525f600e819055600f556012805462ffffff60a01b1916600160a01b1790553480156200002e575f80fd5b506040518060400160405280600e81526020016d47656e65726174696f6e4d656d6560901b8152506040518060400160405280600481526020016347656e4d60e01b815250816003908162000084919062000872565b50600462000093828262000872565b5050505f620000a76200047c60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f905f8051602062004387833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa1580156200014a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200017091906200093e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e291906200093e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156200022d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200025391906200093e565b600a80546001600160a01b0319166001600160a01b039290921691821790556200027f90600162000480565b600a5462000298906001600160a01b03166001620004e2565b6bdf16342fa3202f66f20000006064620002b482600262000981565b620002c09190620009a1565b6006556064620002d282600262000981565b620002de9190620009a1565b6007556064620002f082600262000981565b620002fc9190620009a1565b6008556127106200030f82600262000981565b6200031b9190620009a1565b600b55600f60148190555f60158190556016819055601781905590819062000345908290620009c1565b620003519190620009c1565b6200035d9190620009c1565b601355600f60198190555f601a819055601b819055601c81905590819062000387908290620009c1565b620003939190620009c1565b6200039f9190620009c1565b601855600d80547375cc27f970884216416350d90b8205f35c6bf5ba6001600160a01b03199182168117909255600c80549091169091179055620003e583600162000480565b620003f230600162000480565b6200040161dead600162000480565b6200040e8360016200054c565b6200041b3060016200054c565b6200042a61dead60016200054c565b600c5462000443906001600160a01b031660016200054c565b600d546200045c906001600160a01b031660016200054c565b620004688382620005f8565b6200047383620006da565b505050620009d7565b3390565b6001600160a01b0382165f81815260226020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382165f908152602360205260409020805460ff191682151517905562000511828262000480565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b6005546001600160a01b031633146200059a5760405162461bcd60e51b815260206004820181905260248201525f805160206200436783398151915260448201526064015b60405180910390fd5b6001600160a01b0382165f81815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006505760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000591565b8060025f828254620006639190620009c1565b90915550506001600160a01b0382165f908152602081905260408120805483929062000691908490620009c1565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620007245760405162461bcd60e51b815260206004820181905260248201525f8051602062004367833981519152604482015260640162000591565b6001600160a01b0381166200078b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000591565b6005546040516001600160a01b038084169216905f8051602062004387833981519152905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620007fd57607f821691505b6020821081036200081c57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200086d57805f5260205f20601f840160051c81016020851015620008495750805b601f840160051c820191505b818110156200086a575f815560010162000855565b50505b505050565b81516001600160401b038111156200088e576200088e620007d4565b620008a6816200089f8454620007e8565b8462000822565b602080601f831160018114620008dc575f8415620008c45750858301515b5f19600386901b1c1916600185901b17855562000936565b5f85815260208120601f198616915b828110156200090c57888601518255948401946001909101908401620008eb565b50858210156200092a57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f602082840312156200094f575f80fd5b81516001600160a01b038116811462000966575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176200099b576200099b6200096d565b92915050565b5f82620009bc57634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156200099b576200099b6200096d565b61398280620009e55f395ff3fe6080604052600436106103b6575f3560e01c806392136913116101e9578063c024666811610108578063ea3a78281161009d578063f2fde38b1161006d578063f2fde38b14610a80578063f5648a4f14610a9f578063f637434214610ab3578063fc155d1d14610ac8575f80fd5b8063ea3a782814610a23578063ec6c129014610a42578063ee40166e14610a56578063f11a24d314610a6b575f80fd5b8063dc3f0d0f116100d8578063dc3f0d0f14610996578063dd62ed3e146109b5578063e2f45605146109f9578063e71dc3f514610a0e575f80fd5b8063c024666814610924578063c18bc19514610943578063d257b34f14610962578063d85ba06314610981575f80fd5b8063a8b02ee31161017e578063af0420fc1161014e578063af0420fc146108a3578063b62496f5146108b7578063b88d394f146108e5578063bbc0c74214610904575f80fd5b8063a8b02ee314610845578063a9059cbb1461085a578063aa4bde2814610879578063adb873bd1461088e575f80fd5b80639c3b7123116101b95780639c3b7123146107dd5780639fccce32146107fc578063a0d82dc514610811578063a457c2d714610826575f80fd5b8063921369131461078057806395d89b41146107955780639a7a23d6146107a95780639c3b4fdc146107c8575f80fd5b80635fe19163116102d5578063715018a61161026a5780638366e79a1161023a5780638366e79a1461071057806383f047751461072f57806388e765ff1461074e5780638da5cb5b14610763575f80fd5b8063715018a6146106b4578063751039fc146106c85780637571336a146106dc5780637bce5a04146106fb575f80fd5b80636b0a894c116102a55780636b0a894c146106405780636d7dce71146106555780636ddd17131461067557806370a0823114610695575f80fd5b80635fe19163146105c957806361e12a81146105e857806366d602ae146106165780636a486a8e1461062b575f80fd5b80631f3fed8f1161034b578063395093511161031b5780633950935114610556578063452ed4f1146105755780635675a87d146105945780635e54eee2146105aa575f80fd5b80631f3fed8f146104e857806323b872dd146104fd5780632be32b611461051c578063313ce5671461053b575f80fd5b806318160ddd1161038657806318160ddd1461047f5780631a8145bb1461049d5780631c5f402f146104b25780631d777856146104d3575f80fd5b806306fdde03146103c15780630758d924146103eb578063095ea7b31461042257806310d5de5314610451575f80fd5b366103bd57005b5f80fd5b3480156103cc575f80fd5b506103d5610ae7565b6040516103e29190613457565b60405180910390f35b3480156103f6575f80fd5b5060095461040a906001600160a01b031681565b6040516001600160a01b0390911681526020016103e2565b34801561042d575f80fd5b5061044161043c3660046134ba565b610b77565b60405190151581526020016103e2565b34801561045c575f80fd5b5061044161046b3660046134e4565b60226020525f908152604090205460ff1681565b34801561048a575f80fd5b506002545b6040519081526020016103e2565b3480156104a8575f80fd5b5061048f601e5481565b3480156104bd575f80fd5b506104d16104cc3660046134e4565b610b8d565b005b3480156104de575f80fd5b5061048f60205481565b3480156104f3575f80fd5b5061048f601d5481565b348015610508575f80fd5b506104416105173660046134ff565b610c46565b348015610527575f80fd5b506104d161053636600461353d565b610cf0565b348015610546575f80fd5b50604051601281526020016103e2565b348015610561575f80fd5b506104416105703660046134ba565b610dfd565b348015610580575f80fd5b50600a5461040a906001600160a01b031681565b34801561059f575f80fd5b50600f544310610441565b3480156105b5575f80fd5b506104d16105c4366004613554565b610e38565b3480156105d4575f80fd5b506104d16105e33660046134e4565b610ec1565b3480156105f3575f80fd5b506104416106023660046134e4565b60106020525f908152604090205460ff1681565b348015610621575f80fd5b5061048f60075481565b348015610636575f80fd5b5061048f60185481565b34801561064b575f80fd5b5061048f60115481565b348015610660575f80fd5b5060125461044190600160a01b900460ff1681565b348015610680575f80fd5b5060125461044190600160b01b900460ff1681565b3480156106a0575f80fd5b5061048f6106af3660046134e4565b610f6f565b3480156106bf575f80fd5b506104d1610f89565b3480156106d3575f80fd5b506104d1610ffc565b3480156106e7575f80fd5b506104d16106f6366004613590565b61105d565b348015610706575f80fd5b5061048f60145481565b34801561071b575f80fd5b5061044161072a3660046135c7565b611124565b34801561073a575f80fd5b506104d16107493660046135f3565b611326565b348015610759575f80fd5b5061048f60065481565b34801561076e575f80fd5b506005546001600160a01b031661040a565b34801561078b575f80fd5b5061048f60195481565b3480156107a0575f80fd5b506103d56113b4565b3480156107b4575f80fd5b506104d16107c3366004613590565b6113c3565b3480156107d3575f80fd5b5061048f60165481565b3480156107e8575f80fd5b506104d16107f7366004613590565b6114b6565b348015610807575f80fd5b5061048f601f5481565b34801561081c575f80fd5b5061048f601b5481565b348015610831575f80fd5b506104416108403660046134ba565b61150a565b348015610850575f80fd5b5061048f600f5481565b348015610865575f80fd5b506104416108743660046134ba565b6115a2565b348015610884575f80fd5b5061048f60085481565b348015610899575f80fd5b5061048f601c5481565b3480156108ae575f80fd5b506104d16115ae565b3480156108c2575f80fd5b506104416108d13660046134e4565b60236020525f908152604090205460ff1681565b3480156108f0575f80fd5b506104d16108ff3660046134ff565b611675565b34801561090f575f80fd5b5060125461044190600160a81b900460ff1681565b34801561092f575f80fd5b506104d161093e366004613590565b611768565b34801561094e575f80fd5b506104d161095d36600461353d565b6117f0565b34801561096d575f80fd5b506104d161097c36600461353d565b6118f9565b34801561098c575f80fd5b5061048f60135481565b3480156109a1575f80fd5b506104d16109b036600461353d565b611a44565b3480156109c0575f80fd5b5061048f6109cf3660046135c7565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610a04575f80fd5b5061048f600b5481565b348015610a19575f80fd5b5061048f60175481565b348015610a2e575f80fd5b506104d1610a3d366004613554565b611b4b565b348015610a4d575f80fd5b506104d1611bce565b348015610a61575f80fd5b5061048f600e5481565b348015610a76575f80fd5b5061048f60155481565b348015610a8b575f80fd5b506104d1610a9a3660046134e4565b611cb6565b348015610aaa575f80fd5b506104d1611da0565b348015610abe575f80fd5b5061048f601a5481565b348015610ad3575f80fd5b506104d1610ae236600461353d565b611e09565b606060038054610af690613672565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2290613672565b8015610b6d5780601f10610b4457610100808354040283529160200191610b6d565b820191905f5260205f20905b815481529060010190602001808311610b5057829003601f168201915b5050505050905090565b5f610b83338484612043565b5060015b92915050565b6005546001600160a01b03163314610bc05760405162461bcd60e51b8152600401610bb7906136aa565b60405180910390fd5b6001600160a01b038116610c245760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610bb7565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b5f610c52848484612167565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610cd65760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bb7565b610ce38533858403612043565b60019150505b9392505050565b6005546001600160a01b03163314610d1a5760405162461bcd60e51b8152600401610bb7906136aa565b670de0b6b3a76400006103e8610d2f60025490565b610d3a9060026136f3565b610d44919061370a565b610d4e919061370a565b811015610daf5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610bb7565b610dc181670de0b6b3a76400006136f3565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610b83918590610e33908690613729565b612043565b6005546001600160a01b03163314610e625760405162461bcd60e51b8152600401610bb7906136aa565b6019849055601a839055601b829055601c8190558082610e828587613729565b610e8c9190613729565b610e969190613729565b601881905560011015610ebb5760405162461bcd60e51b8152600401610bb79061373c565b50505050565b6005546001600160a01b03163314610eeb5760405162461bcd60e51b8152600401610bb7906136aa565b6001600160a01b038116610f4d5760405162461bcd60e51b8152602060048201526024808201527f5f74726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610bb7565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03165f9081526020819052604090205490565b6005546001600160a01b03163314610fb35760405162461bcd60e51b8152600401610bb7906136aa565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110265760405162461bcd60e51b8152600401610bb7906136aa565b6012805460ff60a01b191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a1565b6005546001600160a01b031633146110875760405162461bcd60e51b8152600401610bb7906136aa565b806110fa57600a546001600160a01b03908116908316036110fa5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610bb7565b6001600160a01b03919091165f908152602260205260409020805460ff1916911515919091179055565b6005545f906001600160a01b031633146111505760405162461bcd60e51b8152600401610bb7906136aa565b6001600160a01b0383166111a65760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610bb7565b306001600160a01b038416036111fe5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610bb7565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015611242573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112669190613773565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303815f875af11580156112b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112da919061378a565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146113505760405162461bcd60e51b8152600401610bb7906136aa565b5f5b82811015610ebb578160105f868685818110611370576113706137a5565b905060200201602081019061138591906134e4565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101611352565b606060048054610af690613672565b6005546001600160a01b031633146113ed5760405162461bcd60e51b8152600401610bb7906136aa565b600a546001600160a01b03908116908316036114715760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bb7565b61147b8282612b37565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b6005546001600160a01b031633146114e05760405162461bcd60e51b8152600401610bb7906136aa565b6001600160a01b03919091165f908152601060205260409020805460ff1916911515919091179055565b335f9081526001602090815260408083206001600160a01b03861684529091528120548281101561158b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bb7565b6115983385858403612043565b5060019392505050565b5f610b83338484612167565b6005546001600160a01b031633146115d85760405162461bcd60e51b8152600401610bb7906136aa565b601254600160a81b900460ff16156116325760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610bb7565b6012805461ffff60a81b191661010160a81b17905543600e556040517ff197b7ffcaa03bf129601743eb88602d4222edb8bd57b2327b129d4b1b2231d7905f90a1565b600b5461168130610f6f565b10156116f7576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610bb7565b611702838383612b64565b1561176357600a805460ff60a01b1916600160a01b179055611722612c68565b600a805460ff60a01b191690556040514281527fd170233b5d1594f2143324c9467e850b7bb6ac500a8d42dd0a47f82b8a34e58b9060200160405180910390a15b505050565b6005546001600160a01b031633146117925760405162461bcd60e51b8152600401610bb7906136aa565b6001600160a01b0382165f81815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461181a5760405162461bcd60e51b8152600401610bb7906136aa565b670de0b6b3a76400006103e861182f60025490565b61183a9060036136f3565b611844919061370a565b61184e919061370a565b8110156118b25760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610bb7565b6118c481670de0b6b3a76400006136f3565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610df2565b6005546001600160a01b031633146119235760405162461bcd60e51b8152600401610bb7906136aa565b620186a061193060025490565b61193b9060016136f3565b611945919061370a565b8110156119b25760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bb7565b6103e86119be60025490565b6119c99060016136f3565b6119d3919061370a565b811115611a3f5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610bb7565b600b55565b6005546001600160a01b03163314611a6e5760405162461bcd60e51b8152600401610bb7906136aa565b670de0b6b3a76400006103e8611a8360025490565b611a8e9060026136f3565b611a98919061370a565b611aa2919061370a565b811015611b045760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610bb7565b611b1681670de0b6b3a76400006136f3565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610df2565b6005546001600160a01b03163314611b755760405162461bcd60e51b8152600401610bb7906136aa565b60148490556015839055601682905560178190558082611b958587613729565b611b9f9190613729565b611ba99190613729565b601381905560011015610ebb5760405162461bcd60e51b8152600401610bb79061373c565b6005546001600160a01b03163314611bf85760405162461bcd60e51b8152600401610bb7906136aa565b600160198190555f601a819055601b819055601c819055908190611c1d908290613729565b611c279190613729565b611c319190613729565b601881905560011015611c565760405162461bcd60e51b8152600401610bb79061373c565b600160148190555f601581905560168190556017819055908190611c7b908290613729565b611c859190613729565b611c8f9190613729565b601381905560011015611cb45760405162461bcd60e51b8152600401610bb79061373c565b565b6005546001600160a01b03163314611ce05760405162461bcd60e51b8152600401610bb7906136aa565b6001600160a01b038116611d455760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bb7565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611dca5760405162461bcd60e51b8152600401610bb7906136aa565b6040515f90339047908381818185875af1925050503d805f8114610ebb576040519150601f19603f3d011682016040523d82523d5f602084013e610ebb565b6005546001600160a01b03163314611e335760405162461bcd60e51b8152600401610bb7906136aa565b674563918244f40000811115611ec05760405162461bcd60e51b815260206004820152604660248201527f4d6179206e6f7420627579206d6f7265207468616e20352045544820696e206160448201527f2073696e676c652062757920746f207265647563652073616e64776963682061606482015265747461636b7360d01b608482015260a401610bb7565b6040805160028082526060820183525f926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611f27573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f4b91906137b9565b815f81518110611f5d57611f5d6137a5565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611f9157611f916137a5565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de95908490611fd8905f90869061dead904290600401613817565b5f604051808303818588803b158015611fef575f80fd5b505af1158015612001573d5f803e3d5ffd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205688260405161203791815260200190565b60405180910390a15050565b6001600160a01b0383166120a55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bb7565b6001600160a01b0382166121065760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bb7565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661218d5760405162461bcd60e51b8152600401610bb79061384b565b6001600160a01b0382166121b35760405162461bcd60e51b8152600401610bb790613890565b5f81116122025760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bb7565b601254600160a81b900460ff16612295576001600160a01b0383165f9081526021602052604090205460ff168061225057506001600160a01b0382165f9081526021602052604090205460ff165b6122955760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bb7565b600f5415612367576001600160a01b0383165f9081526010602052604090205460ff1615806122d157506005546001600160a01b038381169116145b806122e657506001600160a01b03821661dead145b6123675760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610bb7565b601254600160a01b900460ff161561264f576005546001600160a01b038481169116148015906123a557506005546001600160a01b03838116911614155b80156123b957506001600160a01b03821615155b80156123d057506001600160a01b03821661dead14155b80156123f457506001600160a01b0383165f9081526021602052604090205460ff16155b801561241857506001600160a01b0382165f9081526021602052604090205460ff16155b1561264f576001600160a01b0383165f9081526023602052604090205460ff16801561245c57506001600160a01b0382165f9081526022602052604090205460ff16155b15612528576006548111156124c45760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610bb7565b6008546124d083610f6f565b6124da9083613729565b11156125235760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bb7565b61264f565b6001600160a01b0382165f9081526023602052604090205460ff16801561256757506001600160a01b0383165f9081526022602052604090205460ff16155b156125d1576007548111156125235760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610bb7565b6001600160a01b0382165f9081526022602052604090205460ff1661264f576008546125fc83610f6f565b6126069083613729565b111561264f5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bb7565b5f61265930610f6f565b600b54909150811080159081906126795750601254600160b01b900460ff165b801561268f5750600a54600160a01b900460ff16155b80156126b357506001600160a01b0385165f9081526023602052604090205460ff16155b80156126d757506001600160a01b0385165f9081526021602052604090205460ff16155b80156126fb57506001600160a01b0384165f9081526021602052604090205460ff16155b1561272957600a805460ff60a01b1916600160a01b17905561271b612c68565b600a805460ff60a01b191690555b60016127358686612e99565b1561273d57505f5b5f8115612b2357600f544310801561276c57506001600160a01b0387165f9081526023602052604090205460ff165b801561279057506001600160a01b0386165f9081526023602052604090205460ff16155b801561279d57505f601354115b15612917576001600160a01b0386165f9081526010602052604090205460ff1661283b576001600160a01b0386165f908152601060205260408120805460ff1916600190811790915560118054919290916127f9908490613729565b90915550506040516001600160a01b03871681527fcd39c6209a00cb117f18183d313ffd1e71349cc855ecfcd147fcb8d5f035ddae9060200160405180910390a15b60646128488660636136f3565b612852919061370a565b90506013546015548261286591906136f3565b61286f919061370a565b601e5f82825461287f9190613729565b909155505060135460145461289490836136f3565b61289e919061370a565b601d5f8282546128ae9190613729565b90915550506013546016546128c390836136f3565b6128cd919061370a565b601f5f8282546128dd9190613729565b90915550506013546017546128f290836136f3565b6128fc919061370a565b60205f82825461290c9190613729565b90915550612b059050565b6001600160a01b0386165f9081526023602052604090205460ff16801561293f57505f601854115b156129fe5760646018548661295491906136f3565b61295e919061370a565b9050601854601a548261297191906136f3565b61297b919061370a565b601e5f82825461298b9190613729565b90915550506018546019546129a090836136f3565b6129aa919061370a565b601d5f8282546129ba9190613729565b9091555050601854601b546129cf90836136f3565b6129d9919061370a565b601f5f8282546129e99190613729565b9091555050601854601c546128f290836136f3565b6001600160a01b0387165f9081526023602052604090205460ff168015612a2657505f601354115b15612b0557606460135486612a3b91906136f3565b612a45919061370a565b905060135460155482612a5891906136f3565b612a62919061370a565b601e5f828254612a729190613729565b9091555050601354601454612a8790836136f3565b612a91919061370a565b601d5f828254612aa19190613729565b9091555050601354601654612ab690836136f3565b612ac0919061370a565b601f5f828254612ad09190613729565b9091555050601354601754612ae590836136f3565b612aef919061370a565b60205f828254612aff9190613729565b90915550505b8015612b1657612b16873083612f82565b612b2081866138d3565b94505b612b2e878787612f82565b50505050505050565b6001600160a01b0382165f908152602360205260409020805460ff191682151517905561147b82826130d5565b335f90815260216020526040812054819060ff16612c29575f602054118015612b975750602054612b9430610f6f565b10155b15612ba857612ba833602054613130565b505f6020819055600190612bbb30610f6f565b90505f601f54601d54601e54612bd19190613729565b612bdb9190613729565b9050811580612be8575080155b15612bf8575f9350505050610ce9565b600b54612c069060076136f3565b821115612c1e57600b54612c1b9060076136f3565b91505b829350505050610ce9565b8215612c4057612c398584613130565b505f612c5e565b50601280546001600160a01b0319166001600160a01b0385161790555f5b5f612bbb30610f6f565b5f602054118015612c835750602054612c8030610f6f565b10155b15612c9457612c9430602054613130565b5f6020819055612ca330610f6f565b90505f601f54601d54601e54612cb99190613729565b612cc39190613729565b9050811580612cd0575080155b15612cd9575050565b600b54612ce79060056136f3565b821115612cff57600b54612cfc9060056136f3565b91505b5f80600283601e5486612d1291906136f3565b612d1c919061370a565b612d26919061370a565b9050612d3a612d3582866138d3565b613258565b601e54479081905f90612d4f9060029061370a565b612d5990876138d3565b601d54612d6690856136f3565b612d70919061370a565b90505f6002601e54612d82919061370a565b612d8c90886138d3565b601f54612d9990866136f3565b612da3919061370a565b9050612daf8183613729565b612db990846138d3565b5f601e819055601d819055601f81905560205592508415801590612ddc57505f83115b15612deb57612deb85846133a8565b600d546040516001600160a01b039091169082905f81818185875af1925050503d805f8114612e35576040519150601f19603f3d011682016040523d82523d5f602084013e612e3a565b606091505b5050600c546040519197506001600160a01b03169047905f81818185875af1925050503d805f8114612e87576040519150601f19603f3d011682016040523d82523d5f602084013e612e8c565b606091505b5050505050505050505050565b6001600160a01b0382165f908152602160205260408120548190819060ff1680612eda57506001600160a01b0384165f9081526021602052604090205460ff165b15612ee85760019150612f7a565b6012546001600160a01b031615612f7a576012546040516323b872dd60e01b81526001600160a01b038781166004830152868116602483015260448201849052909116906323b872dd906064016020604051808303815f875af1158015612f51573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f75919061378a565b505f91505b509392505050565b6001600160a01b038316612fa85760405162461bcd60e51b8152600401610bb79061384b565b6001600160a01b038216612fce5760405162461bcd60e51b8152600401610bb790613890565b6001600160a01b0383165f90815260208190526040902054818110156130455760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bb7565b6001600160a01b038085165f9081526020819052604080822085850390559185168152908120805484929061307b908490613729565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130c791815260200190565b60405180910390a350505050565b6001600160a01b0382165f81815260226020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67469101612037565b6001600160a01b0382166131905760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bb7565b6001600160a01b0382165f90815260208190526040902054818110156132035760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610bb7565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161215a565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061328b5761328b6137a5565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156132e2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061330691906137b9565b81600181518110613319576133196137a5565b6001600160a01b03928316602091820292909201015260095461333f9130911684612043565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906133779085905f908690309042906004016138e6565b5f604051808303815f87803b15801561338e575f80fd5b505af11580156133a0573d5f803e3d5ffd5b505050505050565b6009546133c09030906001600160a01b031684612043565b60095460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561342b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906134509190613921565b5050505050565b5f602080835283518060208501525f5b8181101561348357858101830151858201604001528201613467565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146134b7575f80fd5b50565b5f80604083850312156134cb575f80fd5b82356134d6816134a3565b946020939093013593505050565b5f602082840312156134f4575f80fd5b8135610ce9816134a3565b5f805f60608486031215613511575f80fd5b833561351c816134a3565b9250602084013561352c816134a3565b929592945050506040919091013590565b5f6020828403121561354d575f80fd5b5035919050565b5f805f8060808587031215613567575f80fd5b5050823594602084013594506040840135936060013592509050565b80151581146134b7575f80fd5b5f80604083850312156135a1575f80fd5b82356135ac816134a3565b915060208301356135bc81613583565b809150509250929050565b5f80604083850312156135d8575f80fd5b82356135e3816134a3565b915060208301356135bc816134a3565b5f805f60408486031215613605575f80fd5b833567ffffffffffffffff8082111561361c575f80fd5b818601915086601f83011261362f575f80fd5b81358181111561363d575f80fd5b8760208260051b8501011115613651575f80fd5b6020928301955093505084013561366781613583565b809150509250925092565b600181811c9082168061368657607f821691505b6020821081036136a457634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610b8757610b876136df565b5f8261372457634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610b8757610b876136df565b6020808252601c908201527f4d757374206b6565702066656573206174203125206f72206c65737300000000604082015260600190565b5f60208284031215613783575f80fd5b5051919050565b5f6020828403121561379a575f80fd5b8151610ce981613583565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156137c9575f80fd5b8151610ce9816134a3565b5f815180845260208085019450602084015f5b8381101561380c5781516001600160a01b0316875295820195908201906001016137e7565b509495945050505050565b848152608060208201525f61382f60808301866137d4565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b8757610b876136df565b85815284602082015260a060408201525f61390460a08301866137d4565b6001600160a01b0394909416606083015250608001529392505050565b5f805f60608486031215613933575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220864a2cabc1fb726b1d842d15b6d1b14e2d4d0456c77527f54fc80a621f34cc0464736f6c634300081800334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103b6575f3560e01c806392136913116101e9578063c024666811610108578063ea3a78281161009d578063f2fde38b1161006d578063f2fde38b14610a80578063f5648a4f14610a9f578063f637434214610ab3578063fc155d1d14610ac8575f80fd5b8063ea3a782814610a23578063ec6c129014610a42578063ee40166e14610a56578063f11a24d314610a6b575f80fd5b8063dc3f0d0f116100d8578063dc3f0d0f14610996578063dd62ed3e146109b5578063e2f45605146109f9578063e71dc3f514610a0e575f80fd5b8063c024666814610924578063c18bc19514610943578063d257b34f14610962578063d85ba06314610981575f80fd5b8063a8b02ee31161017e578063af0420fc1161014e578063af0420fc146108a3578063b62496f5146108b7578063b88d394f146108e5578063bbc0c74214610904575f80fd5b8063a8b02ee314610845578063a9059cbb1461085a578063aa4bde2814610879578063adb873bd1461088e575f80fd5b80639c3b7123116101b95780639c3b7123146107dd5780639fccce32146107fc578063a0d82dc514610811578063a457c2d714610826575f80fd5b8063921369131461078057806395d89b41146107955780639a7a23d6146107a95780639c3b4fdc146107c8575f80fd5b80635fe19163116102d5578063715018a61161026a5780638366e79a1161023a5780638366e79a1461071057806383f047751461072f57806388e765ff1461074e5780638da5cb5b14610763575f80fd5b8063715018a6146106b4578063751039fc146106c85780637571336a146106dc5780637bce5a04146106fb575f80fd5b80636b0a894c116102a55780636b0a894c146106405780636d7dce71146106555780636ddd17131461067557806370a0823114610695575f80fd5b80635fe19163146105c957806361e12a81146105e857806366d602ae146106165780636a486a8e1461062b575f80fd5b80631f3fed8f1161034b578063395093511161031b5780633950935114610556578063452ed4f1146105755780635675a87d146105945780635e54eee2146105aa575f80fd5b80631f3fed8f146104e857806323b872dd146104fd5780632be32b611461051c578063313ce5671461053b575f80fd5b806318160ddd1161038657806318160ddd1461047f5780631a8145bb1461049d5780631c5f402f146104b25780631d777856146104d3575f80fd5b806306fdde03146103c15780630758d924146103eb578063095ea7b31461042257806310d5de5314610451575f80fd5b366103bd57005b5f80fd5b3480156103cc575f80fd5b506103d5610ae7565b6040516103e29190613457565b60405180910390f35b3480156103f6575f80fd5b5060095461040a906001600160a01b031681565b6040516001600160a01b0390911681526020016103e2565b34801561042d575f80fd5b5061044161043c3660046134ba565b610b77565b60405190151581526020016103e2565b34801561045c575f80fd5b5061044161046b3660046134e4565b60226020525f908152604090205460ff1681565b34801561048a575f80fd5b506002545b6040519081526020016103e2565b3480156104a8575f80fd5b5061048f601e5481565b3480156104bd575f80fd5b506104d16104cc3660046134e4565b610b8d565b005b3480156104de575f80fd5b5061048f60205481565b3480156104f3575f80fd5b5061048f601d5481565b348015610508575f80fd5b506104416105173660046134ff565b610c46565b348015610527575f80fd5b506104d161053636600461353d565b610cf0565b348015610546575f80fd5b50604051601281526020016103e2565b348015610561575f80fd5b506104416105703660046134ba565b610dfd565b348015610580575f80fd5b50600a5461040a906001600160a01b031681565b34801561059f575f80fd5b50600f544310610441565b3480156105b5575f80fd5b506104d16105c4366004613554565b610e38565b3480156105d4575f80fd5b506104d16105e33660046134e4565b610ec1565b3480156105f3575f80fd5b506104416106023660046134e4565b60106020525f908152604090205460ff1681565b348015610621575f80fd5b5061048f60075481565b348015610636575f80fd5b5061048f60185481565b34801561064b575f80fd5b5061048f60115481565b348015610660575f80fd5b5060125461044190600160a01b900460ff1681565b348015610680575f80fd5b5060125461044190600160b01b900460ff1681565b3480156106a0575f80fd5b5061048f6106af3660046134e4565b610f6f565b3480156106bf575f80fd5b506104d1610f89565b3480156106d3575f80fd5b506104d1610ffc565b3480156106e7575f80fd5b506104d16106f6366004613590565b61105d565b348015610706575f80fd5b5061048f60145481565b34801561071b575f80fd5b5061044161072a3660046135c7565b611124565b34801561073a575f80fd5b506104d16107493660046135f3565b611326565b348015610759575f80fd5b5061048f60065481565b34801561076e575f80fd5b506005546001600160a01b031661040a565b34801561078b575f80fd5b5061048f60195481565b3480156107a0575f80fd5b506103d56113b4565b3480156107b4575f80fd5b506104d16107c3366004613590565b6113c3565b3480156107d3575f80fd5b5061048f60165481565b3480156107e8575f80fd5b506104d16107f7366004613590565b6114b6565b348015610807575f80fd5b5061048f601f5481565b34801561081c575f80fd5b5061048f601b5481565b348015610831575f80fd5b506104416108403660046134ba565b61150a565b348015610850575f80fd5b5061048f600f5481565b348015610865575f80fd5b506104416108743660046134ba565b6115a2565b348015610884575f80fd5b5061048f60085481565b348015610899575f80fd5b5061048f601c5481565b3480156108ae575f80fd5b506104d16115ae565b3480156108c2575f80fd5b506104416108d13660046134e4565b60236020525f908152604090205460ff1681565b3480156108f0575f80fd5b506104d16108ff3660046134ff565b611675565b34801561090f575f80fd5b5060125461044190600160a81b900460ff1681565b34801561092f575f80fd5b506104d161093e366004613590565b611768565b34801561094e575f80fd5b506104d161095d36600461353d565b6117f0565b34801561096d575f80fd5b506104d161097c36600461353d565b6118f9565b34801561098c575f80fd5b5061048f60135481565b3480156109a1575f80fd5b506104d16109b036600461353d565b611a44565b3480156109c0575f80fd5b5061048f6109cf3660046135c7565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610a04575f80fd5b5061048f600b5481565b348015610a19575f80fd5b5061048f60175481565b348015610a2e575f80fd5b506104d1610a3d366004613554565b611b4b565b348015610a4d575f80fd5b506104d1611bce565b348015610a61575f80fd5b5061048f600e5481565b348015610a76575f80fd5b5061048f60155481565b348015610a8b575f80fd5b506104d1610a9a3660046134e4565b611cb6565b348015610aaa575f80fd5b506104d1611da0565b348015610abe575f80fd5b5061048f601a5481565b348015610ad3575f80fd5b506104d1610ae236600461353d565b611e09565b606060038054610af690613672565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2290613672565b8015610b6d5780601f10610b4457610100808354040283529160200191610b6d565b820191905f5260205f20905b815481529060010190602001808311610b5057829003601f168201915b5050505050905090565b5f610b83338484612043565b5060015b92915050565b6005546001600160a01b03163314610bc05760405162461bcd60e51b8152600401610bb7906136aa565b60405180910390fd5b6001600160a01b038116610c245760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610bb7565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b5f610c52848484612167565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610cd65760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bb7565b610ce38533858403612043565b60019150505b9392505050565b6005546001600160a01b03163314610d1a5760405162461bcd60e51b8152600401610bb7906136aa565b670de0b6b3a76400006103e8610d2f60025490565b610d3a9060026136f3565b610d44919061370a565b610d4e919061370a565b811015610daf5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610bb7565b610dc181670de0b6b3a76400006136f3565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610b83918590610e33908690613729565b612043565b6005546001600160a01b03163314610e625760405162461bcd60e51b8152600401610bb7906136aa565b6019849055601a839055601b829055601c8190558082610e828587613729565b610e8c9190613729565b610e969190613729565b601881905560011015610ebb5760405162461bcd60e51b8152600401610bb79061373c565b50505050565b6005546001600160a01b03163314610eeb5760405162461bcd60e51b8152600401610bb7906136aa565b6001600160a01b038116610f4d5760405162461bcd60e51b8152602060048201526024808201527f5f74726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610bb7565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03165f9081526020819052604090205490565b6005546001600160a01b03163314610fb35760405162461bcd60e51b8152600401610bb7906136aa565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110265760405162461bcd60e51b8152600401610bb7906136aa565b6012805460ff60a01b191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a1565b6005546001600160a01b031633146110875760405162461bcd60e51b8152600401610bb7906136aa565b806110fa57600a546001600160a01b03908116908316036110fa5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610bb7565b6001600160a01b03919091165f908152602260205260409020805460ff1916911515919091179055565b6005545f906001600160a01b031633146111505760405162461bcd60e51b8152600401610bb7906136aa565b6001600160a01b0383166111a65760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610bb7565b306001600160a01b038416036111fe5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610bb7565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015611242573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112669190613773565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303815f875af11580156112b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112da919061378a565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146113505760405162461bcd60e51b8152600401610bb7906136aa565b5f5b82811015610ebb578160105f868685818110611370576113706137a5565b905060200201602081019061138591906134e4565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101611352565b606060048054610af690613672565b6005546001600160a01b031633146113ed5760405162461bcd60e51b8152600401610bb7906136aa565b600a546001600160a01b03908116908316036114715760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bb7565b61147b8282612b37565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b6005546001600160a01b031633146114e05760405162461bcd60e51b8152600401610bb7906136aa565b6001600160a01b03919091165f908152601060205260409020805460ff1916911515919091179055565b335f9081526001602090815260408083206001600160a01b03861684529091528120548281101561158b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bb7565b6115983385858403612043565b5060019392505050565b5f610b83338484612167565b6005546001600160a01b031633146115d85760405162461bcd60e51b8152600401610bb7906136aa565b601254600160a81b900460ff16156116325760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610bb7565b6012805461ffff60a81b191661010160a81b17905543600e556040517ff197b7ffcaa03bf129601743eb88602d4222edb8bd57b2327b129d4b1b2231d7905f90a1565b600b5461168130610f6f565b10156116f7576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610bb7565b611702838383612b64565b1561176357600a805460ff60a01b1916600160a01b179055611722612c68565b600a805460ff60a01b191690556040514281527fd170233b5d1594f2143324c9467e850b7bb6ac500a8d42dd0a47f82b8a34e58b9060200160405180910390a15b505050565b6005546001600160a01b031633146117925760405162461bcd60e51b8152600401610bb7906136aa565b6001600160a01b0382165f81815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461181a5760405162461bcd60e51b8152600401610bb7906136aa565b670de0b6b3a76400006103e861182f60025490565b61183a9060036136f3565b611844919061370a565b61184e919061370a565b8110156118b25760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610bb7565b6118c481670de0b6b3a76400006136f3565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610df2565b6005546001600160a01b031633146119235760405162461bcd60e51b8152600401610bb7906136aa565b620186a061193060025490565b61193b9060016136f3565b611945919061370a565b8110156119b25760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bb7565b6103e86119be60025490565b6119c99060016136f3565b6119d3919061370a565b811115611a3f5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610bb7565b600b55565b6005546001600160a01b03163314611a6e5760405162461bcd60e51b8152600401610bb7906136aa565b670de0b6b3a76400006103e8611a8360025490565b611a8e9060026136f3565b611a98919061370a565b611aa2919061370a565b811015611b045760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610bb7565b611b1681670de0b6b3a76400006136f3565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610df2565b6005546001600160a01b03163314611b755760405162461bcd60e51b8152600401610bb7906136aa565b60148490556015839055601682905560178190558082611b958587613729565b611b9f9190613729565b611ba99190613729565b601381905560011015610ebb5760405162461bcd60e51b8152600401610bb79061373c565b6005546001600160a01b03163314611bf85760405162461bcd60e51b8152600401610bb7906136aa565b600160198190555f601a819055601b819055601c819055908190611c1d908290613729565b611c279190613729565b611c319190613729565b601881905560011015611c565760405162461bcd60e51b8152600401610bb79061373c565b600160148190555f601581905560168190556017819055908190611c7b908290613729565b611c859190613729565b611c8f9190613729565b601381905560011015611cb45760405162461bcd60e51b8152600401610bb79061373c565b565b6005546001600160a01b03163314611ce05760405162461bcd60e51b8152600401610bb7906136aa565b6001600160a01b038116611d455760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bb7565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611dca5760405162461bcd60e51b8152600401610bb7906136aa565b6040515f90339047908381818185875af1925050503d805f8114610ebb576040519150601f19603f3d011682016040523d82523d5f602084013e610ebb565b6005546001600160a01b03163314611e335760405162461bcd60e51b8152600401610bb7906136aa565b674563918244f40000811115611ec05760405162461bcd60e51b815260206004820152604660248201527f4d6179206e6f7420627579206d6f7265207468616e20352045544820696e206160448201527f2073696e676c652062757920746f207265647563652073616e64776963682061606482015265747461636b7360d01b608482015260a401610bb7565b6040805160028082526060820183525f926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611f27573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f4b91906137b9565b815f81518110611f5d57611f5d6137a5565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611f9157611f916137a5565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de95908490611fd8905f90869061dead904290600401613817565b5f604051808303818588803b158015611fef575f80fd5b505af1158015612001573d5f803e3d5ffd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205688260405161203791815260200190565b60405180910390a15050565b6001600160a01b0383166120a55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bb7565b6001600160a01b0382166121065760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bb7565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661218d5760405162461bcd60e51b8152600401610bb79061384b565b6001600160a01b0382166121b35760405162461bcd60e51b8152600401610bb790613890565b5f81116122025760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bb7565b601254600160a81b900460ff16612295576001600160a01b0383165f9081526021602052604090205460ff168061225057506001600160a01b0382165f9081526021602052604090205460ff165b6122955760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bb7565b600f5415612367576001600160a01b0383165f9081526010602052604090205460ff1615806122d157506005546001600160a01b038381169116145b806122e657506001600160a01b03821661dead145b6123675760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610bb7565b601254600160a01b900460ff161561264f576005546001600160a01b038481169116148015906123a557506005546001600160a01b03838116911614155b80156123b957506001600160a01b03821615155b80156123d057506001600160a01b03821661dead14155b80156123f457506001600160a01b0383165f9081526021602052604090205460ff16155b801561241857506001600160a01b0382165f9081526021602052604090205460ff16155b1561264f576001600160a01b0383165f9081526023602052604090205460ff16801561245c57506001600160a01b0382165f9081526022602052604090205460ff16155b15612528576006548111156124c45760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610bb7565b6008546124d083610f6f565b6124da9083613729565b11156125235760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bb7565b61264f565b6001600160a01b0382165f9081526023602052604090205460ff16801561256757506001600160a01b0383165f9081526022602052604090205460ff16155b156125d1576007548111156125235760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610bb7565b6001600160a01b0382165f9081526022602052604090205460ff1661264f576008546125fc83610f6f565b6126069083613729565b111561264f5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bb7565b5f61265930610f6f565b600b54909150811080159081906126795750601254600160b01b900460ff165b801561268f5750600a54600160a01b900460ff16155b80156126b357506001600160a01b0385165f9081526023602052604090205460ff16155b80156126d757506001600160a01b0385165f9081526021602052604090205460ff16155b80156126fb57506001600160a01b0384165f9081526021602052604090205460ff16155b1561272957600a805460ff60a01b1916600160a01b17905561271b612c68565b600a805460ff60a01b191690555b60016127358686612e99565b1561273d57505f5b5f8115612b2357600f544310801561276c57506001600160a01b0387165f9081526023602052604090205460ff165b801561279057506001600160a01b0386165f9081526023602052604090205460ff16155b801561279d57505f601354115b15612917576001600160a01b0386165f9081526010602052604090205460ff1661283b576001600160a01b0386165f908152601060205260408120805460ff1916600190811790915560118054919290916127f9908490613729565b90915550506040516001600160a01b03871681527fcd39c6209a00cb117f18183d313ffd1e71349cc855ecfcd147fcb8d5f035ddae9060200160405180910390a15b60646128488660636136f3565b612852919061370a565b90506013546015548261286591906136f3565b61286f919061370a565b601e5f82825461287f9190613729565b909155505060135460145461289490836136f3565b61289e919061370a565b601d5f8282546128ae9190613729565b90915550506013546016546128c390836136f3565b6128cd919061370a565b601f5f8282546128dd9190613729565b90915550506013546017546128f290836136f3565b6128fc919061370a565b60205f82825461290c9190613729565b90915550612b059050565b6001600160a01b0386165f9081526023602052604090205460ff16801561293f57505f601854115b156129fe5760646018548661295491906136f3565b61295e919061370a565b9050601854601a548261297191906136f3565b61297b919061370a565b601e5f82825461298b9190613729565b90915550506018546019546129a090836136f3565b6129aa919061370a565b601d5f8282546129ba9190613729565b9091555050601854601b546129cf90836136f3565b6129d9919061370a565b601f5f8282546129e99190613729565b9091555050601854601c546128f290836136f3565b6001600160a01b0387165f9081526023602052604090205460ff168015612a2657505f601354115b15612b0557606460135486612a3b91906136f3565b612a45919061370a565b905060135460155482612a5891906136f3565b612a62919061370a565b601e5f828254612a729190613729565b9091555050601354601454612a8790836136f3565b612a91919061370a565b601d5f828254612aa19190613729565b9091555050601354601654612ab690836136f3565b612ac0919061370a565b601f5f828254612ad09190613729565b9091555050601354601754612ae590836136f3565b612aef919061370a565b60205f828254612aff9190613729565b90915550505b8015612b1657612b16873083612f82565b612b2081866138d3565b94505b612b2e878787612f82565b50505050505050565b6001600160a01b0382165f908152602360205260409020805460ff191682151517905561147b82826130d5565b335f90815260216020526040812054819060ff16612c29575f602054118015612b975750602054612b9430610f6f565b10155b15612ba857612ba833602054613130565b505f6020819055600190612bbb30610f6f565b90505f601f54601d54601e54612bd19190613729565b612bdb9190613729565b9050811580612be8575080155b15612bf8575f9350505050610ce9565b600b54612c069060076136f3565b821115612c1e57600b54612c1b9060076136f3565b91505b829350505050610ce9565b8215612c4057612c398584613130565b505f612c5e565b50601280546001600160a01b0319166001600160a01b0385161790555f5b5f612bbb30610f6f565b5f602054118015612c835750602054612c8030610f6f565b10155b15612c9457612c9430602054613130565b5f6020819055612ca330610f6f565b90505f601f54601d54601e54612cb99190613729565b612cc39190613729565b9050811580612cd0575080155b15612cd9575050565b600b54612ce79060056136f3565b821115612cff57600b54612cfc9060056136f3565b91505b5f80600283601e5486612d1291906136f3565b612d1c919061370a565b612d26919061370a565b9050612d3a612d3582866138d3565b613258565b601e54479081905f90612d4f9060029061370a565b612d5990876138d3565b601d54612d6690856136f3565b612d70919061370a565b90505f6002601e54612d82919061370a565b612d8c90886138d3565b601f54612d9990866136f3565b612da3919061370a565b9050612daf8183613729565b612db990846138d3565b5f601e819055601d819055601f81905560205592508415801590612ddc57505f83115b15612deb57612deb85846133a8565b600d546040516001600160a01b039091169082905f81818185875af1925050503d805f8114612e35576040519150601f19603f3d011682016040523d82523d5f602084013e612e3a565b606091505b5050600c546040519197506001600160a01b03169047905f81818185875af1925050503d805f8114612e87576040519150601f19603f3d011682016040523d82523d5f602084013e612e8c565b606091505b5050505050505050505050565b6001600160a01b0382165f908152602160205260408120548190819060ff1680612eda57506001600160a01b0384165f9081526021602052604090205460ff165b15612ee85760019150612f7a565b6012546001600160a01b031615612f7a576012546040516323b872dd60e01b81526001600160a01b038781166004830152868116602483015260448201849052909116906323b872dd906064016020604051808303815f875af1158015612f51573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f75919061378a565b505f91505b509392505050565b6001600160a01b038316612fa85760405162461bcd60e51b8152600401610bb79061384b565b6001600160a01b038216612fce5760405162461bcd60e51b8152600401610bb790613890565b6001600160a01b0383165f90815260208190526040902054818110156130455760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bb7565b6001600160a01b038085165f9081526020819052604080822085850390559185168152908120805484929061307b908490613729565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130c791815260200190565b60405180910390a350505050565b6001600160a01b0382165f81815260226020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67469101612037565b6001600160a01b0382166131905760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bb7565b6001600160a01b0382165f90815260208190526040902054818110156132035760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610bb7565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161215a565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061328b5761328b6137a5565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156132e2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061330691906137b9565b81600181518110613319576133196137a5565b6001600160a01b03928316602091820292909201015260095461333f9130911684612043565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906133779085905f908690309042906004016138e6565b5f604051808303815f87803b15801561338e575f80fd5b505af11580156133a0573d5f803e3d5ffd5b505050505050565b6009546133c09030906001600160a01b031684612043565b60095460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561342b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906134509190613921565b5050505050565b5f602080835283518060208501525f5b8181101561348357858101830151858201604001528201613467565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146134b7575f80fd5b50565b5f80604083850312156134cb575f80fd5b82356134d6816134a3565b946020939093013593505050565b5f602082840312156134f4575f80fd5b8135610ce9816134a3565b5f805f60608486031215613511575f80fd5b833561351c816134a3565b9250602084013561352c816134a3565b929592945050506040919091013590565b5f6020828403121561354d575f80fd5b5035919050565b5f805f8060808587031215613567575f80fd5b5050823594602084013594506040840135936060013592509050565b80151581146134b7575f80fd5b5f80604083850312156135a1575f80fd5b82356135ac816134a3565b915060208301356135bc81613583565b809150509250929050565b5f80604083850312156135d8575f80fd5b82356135e3816134a3565b915060208301356135bc816134a3565b5f805f60408486031215613605575f80fd5b833567ffffffffffffffff8082111561361c575f80fd5b818601915086601f83011261362f575f80fd5b81358181111561363d575f80fd5b8760208260051b8501011115613651575f80fd5b6020928301955093505084013561366781613583565b809150509250925092565b600181811c9082168061368657607f821691505b6020821081036136a457634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610b8757610b876136df565b5f8261372457634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610b8757610b876136df565b6020808252601c908201527f4d757374206b6565702066656573206174203125206f72206c65737300000000604082015260600190565b5f60208284031215613783575f80fd5b5051919050565b5f6020828403121561379a575f80fd5b8151610ce981613583565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156137c9575f80fd5b8151610ce9816134a3565b5f815180845260208085019450602084015f5b8381101561380c5781516001600160a01b0316875295820195908201906001016137e7565b509495945050505050565b848152608060208201525f61382f60808301866137d4565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b8757610b876136df565b85815284602082015260a060408201525f61390460a08301866137d4565b6001600160a01b0394909416606083015250608001529392505050565b5f805f60608486031215613933575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220864a2cabc1fb726b1d842d15b6d1b14e2d4d0456c77527f54fc80a621f34cc0464736f6c63430008180033

Deployed Bytecode Sourcemap

8371:22093:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1913:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8528:27;;;;;;;;;;-1:-1:-1;8528:27:0;;;;-1:-1:-1;;;;;8528:27:0;;;;;;-1:-1:-1;;;;;749:32:1;;;731:51;;719:2;704:18;8528:27:0;567:221:1;2893:194:0;;;;;;;;;;-1:-1:-1;2893:194:0;;;;;:::i;:::-;;:::i;:::-;;;1414:14:1;;1407:22;1389:41;;1377:2;1362:18;2893:194:0;1249:187:1;9606:63:0;;;;;;;;;;-1:-1:-1;9606:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;2234:108;;;;;;;;;;-1:-1:-1;2322:12:0;;2234:108;;;1839:25:1;;;1827:2;1812:18;2234:108:0;1693:177:1;9436:33:0;;;;;;;;;;;;;;;;28148:268;;;;;;;;;;-1:-1:-1;28148:268:0;;;;;:::i;:::-;;:::i;:::-;;9510:28;;;;;;;;;;;;;;;;9396:33;;;;;;;;;;;;;;;;3095:529;;;;;;;;;;-1:-1:-1;3095:529:0;;;;;:::i;:::-;;:::i;13476:312::-;;;;;;;;;;-1:-1:-1;13476:312:0;;;;;:::i;:::-;;:::i;2133:93::-;;;;;;;;;;-1:-1:-1;2133:93:0;;2216:2;2663:36:1;;2651:2;2636:18;2133:93:0;2521:184:1;3632:290:0;;;;;;;;;;-1:-1:-1;3632:290:0;;;;;:::i;:::-;;:::i;8562:21::-;;;;;;;;;;-1:-1:-1;8562:21:0;;;;-1:-1:-1;;;;;8562:21:0;;;21235:110;;;;;;;;;;-1:-1:-1;21321:16:0;;21306:12;:31;21235:110;;29227:536;;;;;;;;;;-1:-1:-1;29227:536:0;;;;;:::i;:::-;;:::i;28424:262::-;;;;;;;;;;-1:-1:-1;28424:262:0;;;;;:::i;:::-;;:::i;8811:46::-;;;;;;;;;;-1:-1:-1;8811:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8454:28;;;;;;;;;;;;;;;;9218;;;;;;;;;;;;;;;;8864:25;;;;;;;;;;;;;;;;8931:27;;;;;;;;;;-1:-1:-1;8931:27:0;;;;-1:-1:-1;;;8931:27:0;;;;;;9005:31;;;;;;;;;;-1:-1:-1;9005:31:0;;;;-1:-1:-1;;;9005:31:0;;;;;;2350:143;;;;;;;;;;-1:-1:-1;2350:143:0;;;;;:::i;:::-;;:::i;6899:150::-;;;;;;;;;;;;;:::i;12963:109::-;;;;;;;;;;;;;:::i;15194:336::-;;;;;;;;;;-1:-1:-1;15194:336:0;;;;;:::i;:::-;;:::i;9079:30::-;;;;;;;;;;;;;;;;26227:481;;;;;;;;;;-1:-1:-1;26227:481:0;;;;;:::i;:::-;;:::i;13240:228::-;;;;;;;;;;-1:-1:-1;13240:228:0;;;;;:::i;:::-;;:::i;8420:27::-;;;;;;;;;;;;;;;;6685:79;;;;;;;;;;-1:-1:-1;6750:6:0;;-1:-1:-1;;;;;6750:6:0;6685:79;;9253:31;;;;;;;;;;;;;;;;2021:104;;;;;;;;;;;;;:::i;15538:357::-;;;;;;;;;;-1:-1:-1;15538:357:0;;;;;:::i;:::-;;:::i;9153:24::-;;;;;;;;;;;;;;;;13080:152;;;;;;;;;;-1:-1:-1;13080:152:0;;;;;:::i;:::-;;:::i;9476:27::-;;;;;;;;;;;;;;;;9329:25;;;;;;;;;;;;;;;;3930:475;;;;;;;;;;-1:-1:-1;3930:475:0;;;;;:::i;:::-;;:::i;8769:35::-;;;;;;;;;;;;;;;;2501:200;;;;;;;;;;-1:-1:-1;2501:200:0;;;;;:::i;:::-;;:::i;8489:30::-;;;;;;;;;;;;;;;;9361:26;;;;;;;;;;;;;;;;12691:242;;;;;;;;;;;;;:::i;9678:57::-;;;;;;;;;;-1:-1:-1;9678:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26971:486;;;;;;;;;;-1:-1:-1;26971:486:0;;;;;:::i;:::-;;:::i;8965:33::-;;;;;;;;;;-1:-1:-1;8965:33:0;;;;-1:-1:-1;;;8965:33:0;;;;;;16151:182;;;;;;;;;;-1:-1:-1;16151:182:0;;;;;:::i;:::-;;:::i;14121:327::-;;;;;;;;;;-1:-1:-1;14121:327:0;;;;;:::i;:::-;;:::i;14518:428::-;;;;;;;;;;-1:-1:-1;14518:428:0;;;;;:::i;:::-;;:::i;9045:27::-;;;;;;;;;;;;;;;;13796:317;;;;;;;;;;-1:-1:-1;13796:317:0;;;;;:::i;:::-;;:::i;2709:176::-;;;;;;;;;;-1:-1:-1;2709:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;2850:18:0;;;2823:7;2850:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2709:176;8620:33;;;;;;;;;;;;;;;;9184:25;;;;;;;;;;;;;;;;28694:525;;;;;;;;;;-1:-1:-1;28694:525:0;;;;;:::i;:::-;;:::i;29771:690::-;;;;;;;;;;;;;:::i;8725:37::-;;;;;;;;;;;;;;;;9116:30;;;;;;;;;;;;;;;;7057:281;;;;;;;;;;-1:-1:-1;7057:281:0;;;;;:::i;:::-;;:::i;26778:185::-;;;;;;;;;;;;;:::i;9291:31::-;;;;;;;;;;;;;;;;27465:675;;;;;;;;;;-1:-1:-1;27465:675:0;;;;;:::i;:::-;;:::i;1913:100::-;1967:13;2000:5;1993:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1913:100;:::o;2893:194::-;3001:4;3018:39;1018:10;3041:7;3050:6;3018:8;:39::i;:::-;-1:-1:-1;3075:4:0;2893:194;;;;;:::o;28148:268::-;6812:6;;-1:-1:-1;;;;;6812:6:0;1018:10;6812:22;6804:67;;;;-1:-1:-1;;;6804:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;28256:31:0;::::1;28234:118;;;::::0;-1:-1:-1;;;28234:118:0;;5914:2:1;28234:118:0::1;::::0;::::1;5896:21:1::0;5953:2;5933:18;;;5926:30;5992:34;5972:18;;;5965:62;-1:-1:-1;;;6043:18:1;;;6036:35;6088:19;;28234:118:0::1;5712:401:1::0;28234:118:0::1;28363:16;:45:::0;;-1:-1:-1;;;;;;28363:45:0::1;-1:-1:-1::0;;;;;28363:45:0;;;::::1;::::0;;;::::1;::::0;;28148:268::o;3095:529::-;3235:4;3252:36;3262:6;3270:9;3281:6;3252:9;:36::i;:::-;-1:-1:-1;;;;;3328:19:0;;3301:24;3328:19;;;:11;:19;;;;;;;;1018:10;3328:33;;;;;;;;3394:26;;;;3372:116;;;;-1:-1:-1;;;3372:116:0;;6320:2:1;3372:116:0;;;6302:21:1;6359:2;6339:18;;;6332:30;6398:34;6378:18;;;6371:62;-1:-1:-1;;;6449:18:1;;;6442:38;6497:19;;3372:116:0;6118:404:1;3372:116:0;3524:57;3533:6;1018:10;3574:6;3555:16;:25;3524:8;:57::i;:::-;3612:4;3605:11;;;3095:529;;;;;;:::o;13476:312::-;6812:6;;-1:-1:-1;;;;;6812:6:0;1018:10;6812:22;6804:67;;;;-1:-1:-1;;;6804:67:0;;;;;;;:::i;:::-;13613:4:::1;13605;13584:13;2322:12:::0;;;2234:108;13584:13:::1;:17;::::0;13600:1:::1;13584:17;:::i;:::-;13583:26;;;;:::i;:::-;13582:35;;;;:::i;:::-;13572:6;:45;;13550:136;;;::::0;-1:-1:-1;;;13550:136:0;;7256:2:1;13550:136:0::1;::::0;::::1;7238:21:1::0;7295:2;7275:18;;;7268:30;7334:34;7314:18;;;7307:62;-1:-1:-1;;;7385:18:1;;;7378:39;7434:19;;13550:136:0::1;7054:405:1::0;13550:136:0::1;13712:19;:6:::0;13722:8:::1;13712:19;:::i;:::-;13697:12;:34:::0;;;13747:33:::1;::::0;1839:25:1;;;13747:33:0::1;::::0;1827:2:1;1812:18;13747:33:0::1;;;;;;;;13476:312:::0;:::o;3632:290::-;1018:10;3745:4;3834:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3834:34:0;;;;;;;;;;3745:4;;3762:130;;3812:7;;3834:47;;3871:10;;3834:47;:::i;:::-;3762:8;:130::i;29227:536::-;6812:6;;-1:-1:-1;;;;;6812:6:0;1018:10;6812:22;6804:67;;;;-1:-1:-1;;;6804:67:0;;;;;;;:::i;:::-;29405:16:::1;:32:::0;;;29448:16:::1;:32:::0;;;29491:10:::1;:20:::0;;;29522:11:::1;:22:::0;;;29536:8;29504:7;29584:48:::1;29467:13:::0;29424;29584:48:::1;:::i;:::-;:74;;;;:::i;:::-;:101;;;;:::i;:::-;29555:13;:130:::0;;;29721:1:::1;-1:-1:-1::0;29704:18:0::1;29696:59;;;;-1:-1:-1::0;;;29696:59:0::1;;;;;;;:::i;:::-;29227:536:::0;;;;:::o;28424:262::-;6812:6;;-1:-1:-1;;;;;6812:6:0;1018:10;6812:22;6804:67;;;;-1:-1:-1;;;6804:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28530:30:0;::::1;28508:116;;;::::0;-1:-1:-1;;;28508:116:0;;8153:2:1;28508:116:0::1;::::0;::::1;8135:21:1::0;8192:2;8172:18;;;8165:30;8231:34;8211:18;;;8204:62;-1:-1:-1;;;8282:18:1;;;8275:34;8326:19;;28508:116:0::1;7951:400:1::0;28508:116:0::1;28635:15;:43:::0;;-1:-1:-1;;;;;;28635:43:0::1;-1:-1:-1::0;;;;;28635:43:0;;;::::1;::::0;;;::::1;::::0;;28424:262::o;2350:143::-;-1:-1:-1;;;;;2467:18:0;2440:7;2467:18;;;;;;;;;;;;2350:143::o;6899:150::-;6812:6;;-1:-1:-1;;;;;6812:6:0;1018:10;6812:22;6804:67;;;;-1:-1:-1;;;6804:67:0;;;;;;;:::i;:::-;6992:6:::1;::::0;6971:40:::1;::::0;7008:1:::1;::::0;-1:-1:-1;;;;;6992:6:0::1;::::0;6971:40:::1;::::0;7008:1;;6971:40:::1;7022:6;:19:::0;;-1:-1:-1;;;;;;7022:19:0::1;::::0;;6899:150::o;12963:109::-;6812:6;;-1:-1:-1;;;;;6812:6:0;1018:10;6812:22;6804:67;;;;-1:-1:-1;;;6804:67:0;;;;;;;:::i;:::-;13017:8:::1;:16:::0;;-1:-1:-1;;;;13017:16:0::1;::::0;;13049:15:::1;::::0;::::1;::::0;13028:5:::1;::::0;13049:15:::1;12963:109::o:0;15194:336::-;6812:6;;-1:-1:-1;;;;;6812:6:0;1018:10;6812:22;6804:67;;;;-1:-1:-1;;;6804:67:0;;;;;;;:::i;:::-;15316:4:::1;15311:155;;15373:6;::::0;-1:-1:-1;;;;;15373:6:0;;::::1;15363:16:::0;;::::1;::::0;15337:117:::1;;;::::0;-1:-1:-1;;;15337:117:0;;8558:2:1;15337:117:0::1;::::0;::::1;8540:21:1::0;8597:2;8577:18;;;8570:30;8636:34;8616:18;;;8609:62;-1:-1:-1;;;8687:18:1;;;8680:37;8734:19;;15337:117:0::1;8356:403:1::0;15337:117:0::1;-1:-1:-1::0;;;;;15476:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;15476:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15194:336::o;26227:481::-;6812:6;;26339:10;;-1:-1:-1;;;;;6812:6:0;1018:10;6812:22;6804:67;;;;-1:-1:-1;;;6804:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26370:20:0;::::1;26362:59;;;::::0;-1:-1:-1;;;26362:59:0;;8966:2:1;26362:59:0::1;::::0;::::1;8948:21:1::0;9005:2;8985:18;;;8978:30;9044:28;9024:18;;;9017:56;9090:18;;26362:59:0::1;8764:350:1::0;26362:59:0::1;26458:4;-1:-1:-1::0;;;;;26440:23:0;::::1;::::0;26432:64:::1;;;::::0;-1:-1:-1;;;26432:64:0;;9321:2:1;26432:64:0::1;::::0;::::1;9303:21:1::0;9360:2;9340:18;;;9333:30;9399;9379:18;;;9372:58;9447:18;;26432:64:0::1;9119:352:1::0;26432:64:0::1;26534:39;::::0;-1:-1:-1;;;26534:39:0;;26567:4:::1;26534:39;::::0;::::1;731:51:1::0;26507:24:0::1;::::0;-1:-1:-1;;;;;26534:24:0;::::1;::::0;::::1;::::0;704:18:1;;26534:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26592:46;::::0;-1:-1:-1;;;26592:46:0;;-1:-1:-1;;;;;9857:32:1;;;26592:46:0::1;::::0;::::1;9839:51:1::0;9906:18;;;9899:34;;;26507:66:0;;-1:-1:-1;26592:23:0;;::::1;::::0;::::1;::::0;9812:18:1;;26592:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26654;::::0;;-1:-1:-1;;;;;9857:32:1;;9839:51;;9921:2;9906:18;;9899:34;;;26584:54:0;;-1:-1:-1;26654:46:0::1;::::0;9812:18:1;26654:46:0::1;;;;;;;26351:357;26227:481:::0;;;;:::o;13240:228::-;6812:6;;-1:-1:-1;;;;;6812:6:0;1018:10;6812:22;6804:67;;;;-1:-1:-1;;;6804:67:0;;;;;;;:::i;:::-;13361:9:::1;13356:105;13376:18:::0;;::::1;13356:105;;;13445:4;13416:14;:26;13431:7;;13439:1;13431:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13416:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;13416:26:0;:33;;-1:-1:-1;;13416:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;13396:3:0::1;13356:105;;2021:104:::0;2077:13;2110:7;2103:14;;;;;:::i;15538:357::-;6812:6;;-1:-1:-1;;;;;6812:6:0;1018:10;6812:22;6804:67;;;;-1:-1:-1;;;6804:67:0;;;;;;;:::i;:::-;15686:6:::1;::::0;-1:-1:-1;;;;;15686:6:0;;::::1;15678:14:::0;;::::1;::::0;15656:121:::1;;;::::0;-1:-1:-1;;;15656:121:0;;10528:2:1;15656:121:0::1;::::0;::::1;10510:21:1::0;10567:2;10547:18;;;10540:30;10606:34;10586:18;;;10579:62;10677:27;10657:18;;;10650:55;10722:19;;15656:121:0::1;10326:421:1::0;15656:121:0::1;15790:41;15819:4;15825:5;15790:28;:41::i;:::-;15847:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;15847:40:0;::::1;::::0;::::1;::::0;;;::::1;15538:357:::0;;:::o;13080:152::-;6812:6;;-1:-1:-1;;;;;6812:6:0;1018:10;6812:22;6804:67;;;;-1:-1:-1;;;6804:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13195:22:0;;;::::1;;::::0;;;:14:::1;:22;::::0;;;;:29;;-1:-1:-1;;13195:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13080:152::o;3930:475::-;1018:10;4048:4;4092:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4092:34:0;;;;;;;;;;4159:35;;;;4137:122;;;;-1:-1:-1;;;4137:122:0;;10954:2:1;4137:122:0;;;10936:21:1;10993:2;10973:18;;;10966:30;11032:34;11012:18;;;11005:62;-1:-1:-1;;;11083:18:1;;;11076:35;11128:19;;4137:122:0;10752:401:1;4137:122:0;4295:67;1018:10;4318:7;4346:15;4327:16;:34;4295:8;:67::i;:::-;-1:-1:-1;4393:4:0;;3930:475;-1:-1:-1;;;3930:475:0:o;2501:200::-;2612:4;2629:42;1018:10;2653:9;2664:6;2629:9;:42::i;12691:242::-;6812:6;;-1:-1:-1;;;;;6812:6:0;1018:10;6812:22;6804:67;;;;-1:-1:-1;;;6804:67:0;;;;;;;:::i;:::-;12752:13:::1;::::0;-1:-1:-1;;;12752:13:0;::::1;;;12751:14;12743:50;;;::::0;-1:-1:-1;;;12743:50:0;;11360:2:1;12743:50:0::1;::::0;::::1;11342:21:1::0;11399:2;11379:18;;;11372:30;11438:25;11418:18;;;11411:53;11481:18;;12743:50:0::1;11158:347:1::0;12743:50:0::1;12804:13;:20:::0;;-1:-1:-1;;;;12835:18:0;-1:-1:-1;;;12835:18:0;;;12885:12:::1;12864:18;:33:::0;12913:12:::1;::::0;::::1;::::0;-1:-1:-1;;12913:12:0::1;12691:242::o:0;26971:486::-;27143:18;;27115:24;27133:4;27115:9;:24::i;:::-;:46;;27093:160;;;;;-1:-1:-1;;;27093:160:0;;11712:2:1;27093:160:0;;;11694:21:1;11731:18;;;11724:30;;;;11790:34;11770:18;;;11763:62;11861:34;11841:18;;;11834:62;11913:19;;27093:160:0;11510:428:1;27093:160:0;27268:29;27277:8;27287:4;27293:3;27268:8;:29::i;:::-;27264:186;;;27314:8;:15;;-1:-1:-1;;;;27314:15:0;-1:-1:-1;;;27314:15:0;;;27344:10;:8;:10::i;:::-;27369:8;:16;;-1:-1:-1;;;;27369:16:0;;;27407:31;;27422:15;1839:25:1;;27407:31:0;;1827:2:1;1812:18;27407:31:0;;;;;;;27264:186;26971:486;;;:::o;16151:182::-;6812:6;;-1:-1:-1;;;;;6812:6:0;1018:10;6812:22;6804:67;;;;-1:-1:-1;;;6804:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16236:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;16236:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16291:34;;1389:41:1;;;16291:34:0::1;::::0;1362:18:1;16291:34:0::1;;;;;;;16151:182:::0;;:::o;14121:327::-;6812:6;;-1:-1:-1;;;;;6812:6:0;1018:10;6812:22;6804:67;;;;-1:-1:-1;;;6804:67:0;;;;;;;:::i;:::-;14261:4:::1;14253;14232:13;2322:12:::0;;;2234:108;14232:13:::1;:17;::::0;14248:1:::1;14232:17;:::i;:::-;14231:26;;;;:::i;:::-;14230:35;;;;:::i;:::-;14220:6;:45;;14198:139;;;::::0;-1:-1:-1;;;14198:139:0;;12145:2:1;14198:139:0::1;::::0;::::1;12127:21:1::0;12184:2;12164:18;;;12157:30;12223:34;12203:18;;;12196:62;-1:-1:-1;;;12274:18:1;;;12267:42;12326:19;;14198:139:0::1;11943:408:1::0;14198:139:0::1;14366:19;:6:::0;14376:8:::1;14366:19;:::i;:::-;14348:15;:37:::0;;;14401:39:::1;::::0;1839:25:1;;;14401:39:0::1;::::0;1827:2:1;1812:18;14401:39:0::1;1693:177:1::0;14518:428:0;6812:6;;-1:-1:-1;;;;;6812:6:0;1018:10;6812:22;6804:67;;;;-1:-1:-1;;;6804:67:0;;;;;;;:::i;:::-;14658:6:::1;14637:13;2322:12:::0;;;2234:108;14637:13:::1;:17;::::0;14653:1:::1;14637:17;:::i;:::-;14636:28;;;;:::i;:::-;14623:9;:41;;14601:144;;;::::0;-1:-1:-1;;;14601:144:0;;12558:2:1;14601:144:0::1;::::0;::::1;12540:21:1::0;12597:2;12577:18;;;12570:30;12636:34;12616:18;;;12609:62;-1:-1:-1;;;12687:18:1;;;12680:51;12748:19;;14601:144:0::1;12356:417:1::0;14601:144:0::1;14813:4;14792:13;2322:12:::0;;;2234:108;14792:13:::1;:17;::::0;14808:1:::1;14792:17;:::i;:::-;14791:26;;;;:::i;:::-;14778:9;:39;;14756:141;;;::::0;-1:-1:-1;;;14756:141:0;;12980:2:1;14756:141:0::1;::::0;::::1;12962:21:1::0;13019:2;12999:18;;;12992:30;13058:34;13038:18;;;13031:62;-1:-1:-1;;;13109:18:1;;;13102:50;13169:19;;14756:141:0::1;12778:416:1::0;14756:141:0::1;14908:18;:30:::0;14518:428::o;13796:317::-;6812:6;;-1:-1:-1;;;;;6812:6:0;1018:10;6812:22;6804:67;;;;-1:-1:-1;;;6804:67:0;;;;;;;:::i;:::-;13934:4:::1;13926;13905:13;2322:12:::0;;;2234:108;13905:13:::1;:17;::::0;13921:1:::1;13905:17;:::i;:::-;13904:26;;;;:::i;:::-;13903:35;;;;:::i;:::-;13893:6;:45;;13871:137;;;::::0;-1:-1:-1;;;13871:137:0;;13401:2:1;13871:137:0::1;::::0;::::1;13383:21:1::0;13440:2;13420:18;;;13413:30;13479:34;13459:18;;;13452:62;-1:-1:-1;;;13530:18:1;;;13523:40;13580:19;;13871:137:0::1;13199:406:1::0;13871:137:0::1;14035:19;:6:::0;14045:8:::1;14035:19;:::i;:::-;14019:13;:35:::0;;;14070::::1;::::0;1839:25:1;;;14070:35:0::1;::::0;1827:2:1;1812:18;14070:35:0::1;1693:177:1::0;28694:525:0;6812:6;;-1:-1:-1;;;;;6812:6:0;1018:10;6812:22;6804:67;;;;-1:-1:-1;;;6804:67:0;;;;;;;:::i;:::-;28871:15:::1;:31:::0;;;28913:15:::1;:31:::0;;;28955:9:::1;:19:::0;;;28985:10:::1;:21:::0;;;28998:8;28967:7;29045:46:::1;28931:13:::0;28889;29045:46:::1;:::i;:::-;:71;;;;:::i;:::-;:97;;;;:::i;:::-;29017:12;:125:::0;;;29177:1:::1;-1:-1:-1::0;29161:17:0::1;29153:58;;;;-1:-1:-1::0;;;29153:58:0::1;;;;;;;:::i;29771:690::-:0;6812:6;;-1:-1:-1;;;;;6812:6:0;1018:10;6812:22;6804:67;;;;-1:-1:-1;;;6804:67:0;;;;;;;:::i;:::-;29843:1:::1;29824:16;:20:::0;;;29874:1:::1;29855:16;:20:::0;;;29886:10:::1;:14:::0;;;29911:11:::1;:15:::0;;;29874:1;;;29966:48:::1;::::0;29874:1;;29966:48:::1;:::i;:::-;:74;;;;:::i;:::-;:101;;;;:::i;:::-;29937:13;:130:::0;;;30103:1:::1;-1:-1:-1::0;30086:18:0::1;30078:59;;;;-1:-1:-1::0;;;30078:59:0::1;;;;;;;:::i;:::-;30168:1;30150:15;:19:::0;;;30198:1:::1;30180:15;:19:::0;;;30210:9:::1;:13:::0;;;30234:10:::1;:14:::0;;;30198:1;;;30287:46:::1;::::0;30198:1;;30287:46:::1;:::i;:::-;:71;;;;:::i;:::-;:97;;;;:::i;:::-;30259:12;:125:::0;;;30419:1:::1;-1:-1:-1::0;30403:17:0::1;30395:58;;;;-1:-1:-1::0;;;30395:58:0::1;;;;;;;:::i;:::-;29771:690::o:0;7057:281::-;6812:6;;-1:-1:-1;;;;;6812:6:0;1018:10;6812:22;6804:67;;;;-1:-1:-1;;;6804:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7160:22:0;::::1;7138:110;;;::::0;-1:-1:-1;;;7138:110:0;;13812:2:1;7138:110:0::1;::::0;::::1;13794:21:1::0;13851:2;13831:18;;;13824:30;13890:34;13870:18;;;13863:62;-1:-1:-1;;;13941:18:1;;;13934:36;13987:19;;7138:110:0::1;13610:402:1::0;7138:110:0::1;7285:6;::::0;7264:38:::1;::::0;-1:-1:-1;;;;;7264:38:0;;::::1;::::0;7285:6:::1;::::0;7264:38:::1;::::0;7285:6:::1;::::0;7264:38:::1;7313:6;:17:::0;;-1:-1:-1;;;;;;7313:17:0::1;-1:-1:-1::0;;;;;7313:17:0;;;::::1;::::0;;;::::1;::::0;;7057:281::o;26778:185::-;6812:6;;-1:-1:-1;;;;;6812:6:0;1018:10;6812:22;6804:67;;;;-1:-1:-1;;;6804:67:0;;;;;;;:::i;:::-;26873:82:::1;::::0;26836:12:::1;::::0;26881:10:::1;::::0;26905:21:::1;::::0;26836:12;26873:82;26836:12;26873:82;26905:21;26881:10;26873:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27465:675:::0;6812:6;;-1:-1:-1;;;;;6812:6:0;1018:10;6812:22;6804:67;;;;-1:-1:-1;;;6804:67:0;;;;;;;:::i;:::-;27576:7:::1;27561:11;:22;;27539:142;;;::::0;-1:-1:-1;;;27539:142:0;;14429:2:1;27539:142:0::1;::::0;::::1;14411:21:1::0;14468:2;14448:18;;;14441:30;14507:34;14487:18;;;14480:62;14578:34;14558:18;;;14551:62;-1:-1:-1;;;14629:19:1;;;14622:37;14676:19;;27539:142:0::1;14227:474:1::0;27539:142:0::1;27718:16;::::0;;27732:1:::1;27718:16:::0;;;;;::::1;::::0;;27694:21:::1;::::0;27718:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;27755:9:0::1;::::0;:16:::1;::::0;;-1:-1:-1;;;27755:16:0;;;;27694:40;;-1:-1:-1;;;;;;27755:9:0;;::::1;::::0;:14:::1;::::0;-1:-1:-1;27755:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27745:4;27750:1;27745:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1::0;;;;;27745:26:0::1;;;-1:-1:-1::0;;;;;27745:26:0::1;;;::::0;::::1;27800:4;27782;27787:1;27782:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27782:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;27844:9:::1;::::0;:243:::1;::::0;-1:-1:-1;;;27844:243:0;;:9;::::1;::::0;:60:::1;::::0;27926:11;;27844:243:::1;::::0;:9:::1;::::0;28012:4;;28039:6:::1;::::0;28061:15:::1;::::0;27844:243:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;28103:29;28120:11;28103:29;;;;1839:25:1::0;;1827:2;1812:18;;1693:177;28103:29:0::1;;;;;;;;27528:612;27465:675:::0;:::o;5954:380::-;-1:-1:-1;;;;;6090:19:0;;6082:68;;;;-1:-1:-1;;;6082:68:0;;16281:2:1;6082:68:0;;;16263:21:1;16320:2;16300:18;;;16293:30;16359:34;16339:18;;;16332:62;-1:-1:-1;;;16410:18:1;;;16403:34;16454:19;;6082:68:0;16079:400:1;6082:68:0;-1:-1:-1;;;;;6169:21:0;;6161:68;;;;-1:-1:-1;;;6161:68:0;;16686:2:1;6161:68:0;;;16668:21:1;16725:2;16705:18;;;16698:30;16764:34;16744:18;;;16737:62;-1:-1:-1;;;16815:18:1;;;16808:32;16857:19;;6161:68:0;16484:398:1;6161:68:0;-1:-1:-1;;;;;6242:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6294:32;;1839:25:1;;;6294:32:0;;1812:18:1;6294:32:0;;;;;;;;5954:380;;;:::o;16341:4886::-;-1:-1:-1;;;;;16473:18:0;;16465:68;;;;-1:-1:-1;;;16465:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16552:16:0;;16544:64;;;;-1:-1:-1;;;16544:64:0;;;;;;;:::i;:::-;16636:1;16627:6;:10;16619:52;;;;-1:-1:-1;;;16619:52:0;;17899:2:1;16619:52:0;;;17881:21:1;17938:2;17918:18;;;17911:30;17977:31;17957:18;;;17950:59;18026:18;;16619:52:0;17697:353:1;16619:52:0;16689:13;;-1:-1:-1;;;16689:13:0;;;;16684:183;;-1:-1:-1;;;;;16745:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;16774:23:0;;;;;;:19;:23;;;;;;;;16745:52;16719:136;;;;-1:-1:-1;;;16719:136:0;;18257:2:1;16719:136:0;;;18239:21:1;18296:2;18276:18;;;18269:30;-1:-1:-1;;;18315:18:1;;;18308:52;18377:18;;16719:136:0;18055:346:1;16719:136:0;16883:16;;:20;16879:248;;-1:-1:-1;;;;;16947:20:0;;;;;;:14;:20;;;;;;;;16946:21;;:38;;-1:-1:-1;6750:6:0;;-1:-1:-1;;;;;16971:13:0;;;6750:6;;16971:13;16946:38;:63;;;-1:-1:-1;;;;;;16988:21:0;;17002:6;16988:21;16946:63;16920:195;;;;-1:-1:-1;;;16920:195:0;;18608:2:1;16920:195:0;;;18590:21:1;18647:2;18627:18;;;18620:30;18686:34;18666:18;;;18659:62;18757:34;18737:18;;;18730:62;-1:-1:-1;;;18808:19:1;;;18801:37;18855:19;;16920:195:0;18406:474:1;16920:195:0;17143:8;;-1:-1:-1;;;17143:8:0;;;;17139:1491;;;6750:6;;-1:-1:-1;;;;;17190:15:0;;;6750:6;;17190:15;;;;:49;;-1:-1:-1;6750:6:0;;-1:-1:-1;;;;;17226:13:0;;;6750:6;;17226:13;;17190:49;:86;;;;-1:-1:-1;;;;;;17260:16:0;;;;17190:86;:128;;;;-1:-1:-1;;;;;;17297:21:0;;17311:6;17297:21;;17190:128;:175;;;;-1:-1:-1;;;;;;17340:25:0;;;;;;:19;:25;;;;;;;;17339:26;17190:175;:220;;;;-1:-1:-1;;;;;;17387:23:0;;;;;;:19;:23;;;;;;;;17386:24;17190:220;17168:1451;;;-1:-1:-1;;;;;17500:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;17557:35:0;;;;;;:31;:35;;;;;;;;17556:36;17500:92;17474:1130;;;17679:12;;17669:6;:22;;17635:148;;;;-1:-1:-1;;;17635:148:0;;19087:2:1;17635:148:0;;;19069:21:1;19126:2;19106:18;;;19099:30;19165:34;19145:18;;;19138:62;-1:-1:-1;;;19216:18:1;;;19209:38;19264:19;;17635:148:0;18885:404:1;17635:148:0;17866:15;;17849:13;17859:2;17849:9;:13::i;:::-;17840:22;;:6;:22;:::i;:::-;:41;;17806:151;;;;-1:-1:-1;;;17806:151:0;;19496:2:1;17806:151:0;;;19478:21:1;19535:2;19515:18;;;19508:30;-1:-1:-1;;;19554:18:1;;;19547:54;19618:18;;17806:151:0;19294:348:1;17806:151:0;17474:1130;;;-1:-1:-1;;;;;18056:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;18111:37:0;;;;;;:31;:37;;;;;;;;18110:38;18056:92;18030:574;;;18235:13;;18225:6;:23;;18191:151;;;;-1:-1:-1;;;18191:151:0;;19849:2:1;18191:151:0;;;19831:21:1;19888:2;19868:18;;;19861:30;19927:34;19907:18;;;19900:62;-1:-1:-1;;;19978:18:1;;;19971:40;20028:19;;18191:151:0;19647:406:1;18030:574:0;-1:-1:-1;;;;;18373:35:0;;;;;;:31;:35;;;;;;;;18368:236;;18493:15;;18476:13;18486:2;18476:9;:13::i;:::-;18467:22;;:6;:22;:::i;:::-;:41;;18433:151;;;;-1:-1:-1;;;18433:151:0;;19496:2:1;18433:151:0;;;19478:21:1;19535:2;19515:18;;;19508:30;-1:-1:-1;;;19554:18:1;;;19547:54;19618:18;;18433:151:0;19294:348:1;18433:151:0;18642:28;18673:24;18691:4;18673:9;:24::i;:::-;18749:18;;18642:55;;-1:-1:-1;18725:42:0;;;;;;;18798:35;;-1:-1:-1;18822:11:0;;-1:-1:-1;;;18822:11:0;;;;18798:35;:61;;;;-1:-1:-1;18851:8:0;;-1:-1:-1;;;18851:8:0;;;;18850:9;18798:61;:110;;;;-1:-1:-1;;;;;;18877:31:0;;;;;;:25;:31;;;;;;;;18876:32;18798:110;:153;;;;-1:-1:-1;;;;;;18926:25:0;;;;;;:19;:25;;;;;;;;18925:26;18798:153;:194;;;;-1:-1:-1;;;;;;18969:23:0;;;;;;:19;:23;;;;;;;;18968:24;18798:194;18780:326;;;19019:8;:15;;-1:-1:-1;;;;19019:15:0;-1:-1:-1;;;19019:15:0;;;19051:10;:8;:10::i;:::-;19078:8;:16;;-1:-1:-1;;;;19078:16:0;;;18780:326;19133:4;19152:31;19174:4;19180:2;19152:21;:31::i;:::-;19148:79;;;-1:-1:-1;19210:5:0;19148:79;19239:12;19270:7;19266:1908;;;21321:16;;21306:12;:31;19352:68;;;;-1:-1:-1;;;;;;19389:31:0;;;;;;:25;:31;;;;;;;;19352:68;:119;;;;-1:-1:-1;;;;;;19442:29:0;;;;;;:25;:29;;;;;;;;19441:30;19352:119;:156;;;;;19507:1;19492:12;;:16;19352:156;19330:1695;;;-1:-1:-1;;;;;19548:18:0;;;;;;:14;:18;;;;;;;;19543:177;;-1:-1:-1;;;;;19591:18:0;;;;;;:14;:18;;;;;:25;;-1:-1:-1;;19591:25:0;19612:4;19591:25;;;;;;19639:10;:15;;19612:4;;19639:10;;:15;;19612:4;;19639:15;:::i;:::-;;;;-1:-1:-1;;19682:18:0;;-1:-1:-1;;;;;749:32:1;;731:51;;19682:18:0;;719:2:1;704:18;19682::0;;;;;;;19543:177;19763:3;19748:11;:6;19757:2;19748:11;:::i;:::-;19747:19;;;;:::i;:::-;19740:26;;19834:12;;19815:15;;19808:4;:22;;;;:::i;:::-;19807:39;;;;:::i;:::-;19785:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;19914:12:0;;19895:15;;19888:22;;:4;:22;:::i;:::-;19887:39;;;;:::i;:::-;19865:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;19982:12:0;;19969:9;;19962:16;;:4;:16;:::i;:::-;19961:33;;;;:::i;:::-;19945:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;20052:12:0;;20038:10;;20031:17;;:4;:17;:::i;:::-;20030:34;;;;:::i;:::-;20013:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;19330:1695:0;;-1:-1:-1;19330:1695:0;;-1:-1:-1;;;;;20127:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;20176:1;20160:13;;:17;20127:50;20123:902;;;20232:3;20215:13;;20206:6;:22;;;;:::i;:::-;20205:30;;;;:::i;:::-;20198:37;;20304:13;;20284:16;;20277:4;:23;;;;:::i;:::-;20276:41;;;;:::i;:::-;20254:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;20386:13:0;;20366:16;;20359:23;;:4;:23;:::i;:::-;20358:41;;;;:::i;:::-;20336:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;20456:13:0;;20442:10;;20435:17;;:4;:17;:::i;:::-;20434:35;;;;:::i;:::-;20418:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;20528:13:0;;20513:11;;20506:18;;:4;:18;:::i;20123:902::-;-1:-1:-1;;;;;20603:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;20653:1;20638:12;;:16;20603:51;20599:426;;;20708:3;20692:12;;20683:6;:21;;;;:::i;:::-;20682:29;;;;:::i;:::-;20675:36;;20779:12;;20760:15;;20753:4;:22;;;;:::i;:::-;20752:39;;;;:::i;:::-;20730:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;20859:12:0;;20840:15;;20833:22;;:4;:22;:::i;:::-;20832:39;;;;:::i;:::-;20810:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;20927:12:0;;20914:9;;20907:16;;:4;:16;:::i;:::-;20906:33;;;;:::i;:::-;20890:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;20997:12:0;;20983:10;;20976:17;;:4;:17;:::i;:::-;20975:34;;;;:::i;:::-;20958:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;20599:426:0;21045:8;;21041:91;;21074:42;21090:4;21104;21111;21074:15;:42::i;:::-;21148:14;21158:4;21148:14;;:::i;:::-;;;19266:1908;21186:33;21202:4;21208:2;21212:6;21186:15;:33::i;:::-;16454:4773;;;;16341:4886;;;:::o;15903:240::-;-1:-1:-1;;;;;15986:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;15986:39:0;;;;;;;16038;15986:31;:39;16038:26;:39::i;22843:1636::-;23022:10;22957:4;23002:31;;;:19;:31;;;;;;22957:4;;23002:31;;22997:1475;;23088:1;23072:13;;:17;:62;;;;;23121:13;;23093:24;23111:4;23093:9;:24::i;:::-;:41;;23072:62;23050:167;;;23169:32;23175:10;23187:13;;23169:5;:32::i;:::-;-1:-1:-1;23247:1:0;23231:13;:17;;;23273:4;;23318:24;23336:4;23318:9;:24::i;:::-;23292:50;;23357:25;23461:12;;23423:18;;23385;;:56;;;;:::i;:::-;:88;;;;:::i;:::-;23357:116;-1:-1:-1;23494:20:0;;;:46;;-1:-1:-1;23518:22:0;;23494:46;23490:99;;;23568:5;23561:12;;;;;;;23490:99;23627:18;;:22;;23648:1;23627:22;:::i;:::-;23609:15;:40;23605:121;;;23688:18;;:22;;23709:1;23688:22;:::i;:::-;23670:40;;23605:121;23749:7;23742:14;;;;;;;22997:1475;23793:7;;23789:195;;23821:19;23827:7;23836:3;23821:5;:19::i;:::-;-1:-1:-1;23869:5:0;23789:195;;;-1:-1:-1;23915:12:0;:19;;-1:-1:-1;;;;;;23915:19:0;-1:-1:-1;;;;;23915:19:0;;;;;-1:-1:-1;23789:195:0;23998:23;24024:24;24042:4;24024:9;:24::i;24487:1732::-;24546:1;24530:13;;:17;:62;;;;;24579:13;;24551:24;24569:4;24551:9;:24::i;:::-;:41;;24530:62;24526:130;;;24609:35;24623:4;24630:13;;24609:5;:35::i;:::-;24682:1;24666:13;:17;;;24722:24;24740:4;24722:9;:24::i;:::-;24696:50;;24757:25;24853:12;;24819:18;;24785;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;24757:108;-1:-1:-1;24882:20:0;;;:46;;-1:-1:-1;24906:22:0;;24882:46;24878:85;;;24945:7;;24487:1732::o;24878:85::-;24997:18;;:22;;25018:1;24997:22;:::i;:::-;24979:15;:40;24975:113;;;25054:18;;:22;;25075:1;25054:22;:::i;:::-;25036:40;;24975:113;25100:12;25174:23;25287:1;25254:17;25219:18;;25201:15;:36;;;;:::i;:::-;25200:71;;;;:::i;:::-;:88;;;;:::i;:::-;25174:114;-1:-1:-1;25301:51:0;25318:33;25174:114;25318:15;:33;:::i;:::-;25301:16;:51::i;:::-;25564:18;;25386:21;;;;25365:18;;25564:22;;25585:1;;25564:22;:::i;:::-;25543:44;;:17;:44;:::i;:::-;25507:18;;25494:31;;:10;:31;:::i;:::-;25493:95;;;;:::i;:::-;25467:121;;25599:16;25704:1;25683:18;;:22;;;;:::i;:::-;25662:44;;:17;:44;:::i;:::-;25632:12;;25619:25;;:10;:25;:::i;:::-;25618:89;;;;:::i;:::-;25599:108;-1:-1:-1;25739:26:0;25599:108;25739:15;:26;:::i;:::-;25720:45;;;;:::i;:::-;25799:1;25778:18;:22;;;25811:18;:22;;;25844:12;:16;;;25871:13;:17;25720:45;-1:-1:-1;25905:19:0;;;;;:42;;;25946:1;25928:15;:19;25905:42;25901:121;;;25964:46;25977:15;25994;25964:12;:46::i;:::-;26056:15;;26048:50;;-1:-1:-1;;;;;26056:15:0;;;;26085:8;;26048:50;;;;26085:8;26056:15;26048:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26131:16:0;;26123:88;;26034:64;;-1:-1:-1;;;;;;26131:16:0;;26175:21;;26123:88;;;;26175:21;26131:16;26123:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24487:1732:0:o;21872:446::-;-1:-1:-1;;;;;22044:25:0;;21972:4;22044:25;;;:19;:25;;;;;;21972:4;;;;22044:25;;;:52;;-1:-1:-1;;;;;;22073:23:0;;;;;;:19;:23;;;;;;;;22044:52;22040:245;;;22124:4;22113:15;;22040:245;;;22150:12;;-1:-1:-1;;;;;22150:12:0;:26;22146:139;;22200:12;;22193:49;;-1:-1:-1;;;22193:49:0;;-1:-1:-1;;;;;20449:15:1;;;22193:49:0;;;20431:34:1;20501:15;;;20481:18;;;20474:43;20533:18;;;20526:34;;;22200:12:0;;;;22193:33;;20366:18:1;;22193:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22268:5;22257:16;;22146:139;-1:-1:-1;22302:8:0;21872:446;-1:-1:-1;;;21872:446:0:o;4413:651::-;-1:-1:-1;;;;;4553:20:0;;4545:70;;;;-1:-1:-1;;;4545:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4634:23:0;;4626:71;;;;-1:-1:-1;;;4626:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4734:17:0;;4710:21;4734:17;;;;;;;;;;;4784:23;;;;4762:111;;;;-1:-1:-1;;;4762:111:0;;20773:2:1;4762:111:0;;;20755:21:1;20812:2;20792:18;;;20785:30;20851:34;20831:18;;;20824:62;-1:-1:-1;;;20902:18:1;;;20895:36;20948:19;;4762:111:0;20571:402:1;4762:111:0;-1:-1:-1;;;;;4909:17:0;;;:9;:17;;;;;;;;;;;4929:22;;;4909:42;;4973:20;;;;;;;;:30;;4945:6;;4909:9;4973:30;;4945:6;;4973:30;:::i;:::-;;;;;;;;5038:9;-1:-1:-1;;;;;5021:35:0;5030:6;-1:-1:-1;;;;;5021:35:0;;5049:6;5021:35;;;;1839:25:1;;1827:2;1812:18;;1693:177;5021:35:0;;;;;;;;4534:530;4413:651;;;:::o;14954:232::-;-1:-1:-1;;;;;15067:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;15067:52:0;;;;;;;;;;15135:43;;21146:51:1;;;21213:18;;;21206:50;15135:43:0;;21119:18:1;15135:43:0;20978:284:1;5396:550:0;-1:-1:-1;;;;;5480:21:0;;5472:67;;;;-1:-1:-1;;;5472:67:0;;21469:2:1;5472:67:0;;;21451:21:1;21508:2;21488:18;;;21481:30;21547:34;21527:18;;;21520:62;-1:-1:-1;;;21598:18:1;;;21591:31;21639:19;;5472:67:0;21267:397:1;5472:67:0;-1:-1:-1;;;;;5575:18:0;;5550:22;5575:18;;;;;;;;;;;5612:24;;;;5604:71;;;;-1:-1:-1;;;5604:71:0;;21871:2:1;5604:71:0;;;21853:21:1;21910:2;21890:18;;;21883:30;21949:34;21929:18;;;21922:62;-1:-1:-1;;;22000:18:1;;;21993:32;22042:19;;5604:71:0;21669:398:1;5604:71:0;-1:-1:-1;;;;;5711:18:0;;:9;:18;;;;;;;;;;;5732:23;;;5711:44;;5850:12;:22;;;;;;;5901:37;1839:25:1;;;5711:9:0;;:18;5901:37;;1812:18:1;5901:37:0;1693:177:1;21353:511:0;21443:16;;;21457:1;21443:16;;;;;;;;21419:21;;21443:16;;;;;;;;;;-1:-1:-1;21443:16:0;21419:40;;21488:4;21470;21475:1;21470:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21470:23:0;;;:7;;;;;;;;;;:23;;;;21514:9;;:16;;;-1:-1:-1;;;21514:16:0;;;;:9;;;;;:14;;:16;;;;;21470:7;;21514:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21504:4;21509:1;21504:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21504:26:0;;;:7;;;;;;;;;:26;21575:9;;21543:56;;21560:4;;21575:9;21587:11;21543:8;:56::i;:::-;21638:9;;:218;;-1:-1:-1;;;21638:218:0;;-1:-1:-1;;;;;21638:9:0;;;;:60;;:218;;21713:11;;21638:9;;21783:4;;21810;;21830:15;;21638:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21408:456;21353:511;:::o;22326:509::-;22506:9;;22474:56;;22491:4;;-1:-1:-1;;;;;22506:9:0;22518:11;22474:8;:56::i;:::-;22573:9;;:254;;-1:-1:-1;;;22573:254:0;;22639:4;22573:254;;;23000:34:1;23050:18;;;23043:34;;;22573:9:0;23093:18:1;;;23086:34;;;23136:18;;;23129:34;22779:6:0;23179:19:1;;;23172:44;22801:15:0;23232:19:1;;;23225:35;-1:-1:-1;;;;;22573:9:0;;;;:25;;22606:9;;22934:19:1;;22573:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22326:509;;:::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;793:131::-;-1:-1:-1;;;;;868:31:1;;858:42;;848:70;;914:1;911;904:12;848:70;793:131;:::o;929:315::-;997:6;1005;1058:2;1046:9;1037:7;1033:23;1029:32;1026:52;;;1074:1;1071;1064:12;1026:52;1113:9;1100:23;1132:31;1157:5;1132:31;:::i;:::-;1182:5;1234:2;1219:18;;;;1206:32;;-1:-1:-1;;;929:315:1:o;1441:247::-;1500:6;1553:2;1541:9;1532:7;1528:23;1524:32;1521:52;;;1569:1;1566;1559:12;1521:52;1608:9;1595:23;1627:31;1652:5;1627:31;:::i;1875:456::-;1952:6;1960;1968;2021:2;2009:9;2000:7;1996:23;1992:32;1989:52;;;2037:1;2034;2027:12;1989:52;2076:9;2063:23;2095:31;2120:5;2095:31;:::i;:::-;2145:5;-1:-1:-1;2202:2:1;2187:18;;2174:32;2215:33;2174:32;2215:33;:::i;:::-;1875:456;;2267:7;;-1:-1:-1;;;2321:2:1;2306:18;;;;2293:32;;1875:456::o;2336:180::-;2395:6;2448:2;2436:9;2427:7;2423:23;2419:32;2416:52;;;2464:1;2461;2454:12;2416:52;-1:-1:-1;2487:23:1;;2336:180;-1:-1:-1;2336:180:1:o;2918:385::-;3004:6;3012;3020;3028;3081:3;3069:9;3060:7;3056:23;3052:33;3049:53;;;3098:1;3095;3088:12;3049:53;-1:-1:-1;;3121:23:1;;;3191:2;3176:18;;3163:32;;-1:-1:-1;3242:2:1;3227:18;;3214:32;;3293:2;3278:18;3265:32;;-1:-1:-1;2918:385:1;-1:-1:-1;2918:385:1:o;3308:118::-;3394:5;3387:13;3380:21;3373:5;3370:32;3360:60;;3416:1;3413;3406:12;3431:382;3496:6;3504;3557:2;3545:9;3536:7;3532:23;3528:32;3525:52;;;3573:1;3570;3563:12;3525:52;3612:9;3599:23;3631:31;3656:5;3631:31;:::i;:::-;3681:5;-1:-1:-1;3738:2:1;3723:18;;3710:32;3751:30;3710:32;3751:30;:::i;:::-;3800:7;3790:17;;;3431:382;;;;;:::o;3818:388::-;3886:6;3894;3947:2;3935:9;3926:7;3922:23;3918:32;3915:52;;;3963:1;3960;3953:12;3915:52;4002:9;3989:23;4021:31;4046:5;4021:31;:::i;:::-;4071:5;-1:-1:-1;4128:2:1;4113:18;;4100:32;4141:33;4100:32;4141:33;:::i;4211:750::-;4303:6;4311;4319;4372:2;4360:9;4351:7;4347:23;4343:32;4340:52;;;4388:1;4385;4378:12;4340:52;4428:9;4415:23;4457:18;4498:2;4490:6;4487:14;4484:34;;;4514:1;4511;4504:12;4484:34;4552:6;4541:9;4537:22;4527:32;;4597:7;4590:4;4586:2;4582:13;4578:27;4568:55;;4619:1;4616;4609:12;4568:55;4659:2;4646:16;4685:2;4677:6;4674:14;4671:34;;;4701:1;4698;4691:12;4671:34;4756:7;4749:4;4739:6;4736:1;4732:14;4728:2;4724:23;4720:34;4717:47;4714:67;;;4777:1;4774;4767:12;4714:67;4808:4;4800:13;;;;-1:-1:-1;4832:6:1;-1:-1:-1;;4873:20:1;;4860:34;4903:28;4860:34;4903:28;:::i;:::-;4950:5;4940:15;;;4211:750;;;;;:::o;4966:380::-;5045:1;5041:12;;;;5088;;;5109:61;;5163:4;5155:6;5151:17;5141:27;;5109:61;5216:2;5208:6;5205:14;5185:18;5182:38;5179:161;;5262:10;5257:3;5253:20;5250:1;5243:31;5297:4;5294:1;5287:15;5325:4;5322:1;5315:15;5179:161;;4966:380;;;:::o;5351:356::-;5553:2;5535:21;;;5572:18;;;5565:30;5631:34;5626:2;5611:18;;5604:62;5698:2;5683:18;;5351:356::o;6527:127::-;6588:10;6583:3;6579:20;6576:1;6569:31;6619:4;6616:1;6609:15;6643:4;6640:1;6633:15;6659:168;6732:9;;;6763;;6780:15;;;6774:22;;6760:37;6750:71;;6801:18;;:::i;6832:217::-;6872:1;6898;6888:132;;6942:10;6937:3;6933:20;6930:1;6923:31;6977:4;6974:1;6967:15;7005:4;7002:1;6995:15;6888:132;-1:-1:-1;7034:9:1;;6832:217::o;7464:125::-;7529:9;;;7550:10;;;7547:36;;;7563:18;;:::i;7594:352::-;7796:2;7778:21;;;7835:2;7815:18;;;7808:30;7874;7869:2;7854:18;;7847:58;7937:2;7922:18;;7594:352::o;9476:184::-;9546:6;9599:2;9587:9;9578:7;9574:23;9570:32;9567:52;;;9615:1;9612;9605:12;9567:52;-1:-1:-1;9638:16:1;;9476:184;-1:-1:-1;9476:184:1:o;9944:245::-;10011:6;10064:2;10052:9;10043:7;10039:23;10035:32;10032:52;;;10080:1;10077;10070:12;10032:52;10112:9;10106:16;10131:28;10153:5;10131:28;:::i;10194:127::-;10255:10;10250:3;10246:20;10243:1;10236:31;10286:4;10283:1;10276:15;10310:4;10307:1;10300:15;14838:251;14908:6;14961:2;14949:9;14940:7;14936:23;14932:32;14929:52;;;14977:1;14974;14967:12;14929:52;15009:9;15003:16;15028:31;15053:5;15028:31;:::i;15094:465::-;15147:3;15185:5;15179:12;15212:6;15207:3;15200:19;15238:4;15267;15262:3;15258:14;15251:21;;15306:4;15299:5;15295:16;15329:1;15339:195;15353:6;15350:1;15347:13;15339:195;;;15418:13;;-1:-1:-1;;;;;15414:39:1;15402:52;;15474:12;;;;15509:15;;;;15450:1;15368:9;15339:195;;;-1:-1:-1;15550:3:1;;15094:465;-1:-1:-1;;;;;15094:465:1:o;15564:510::-;15835:6;15824:9;15817:25;15878:3;15873:2;15862:9;15858:18;15851:31;15798:4;15899:57;15951:3;15940:9;15936:19;15928:6;15899:57;:::i;:::-;-1:-1:-1;;;;;15992:32:1;;;;15987:2;15972:18;;15965:60;-1:-1:-1;16056:2:1;16041:18;16034:34;15891:65;15564:510;-1:-1:-1;;15564:510:1:o;16887:401::-;17089:2;17071:21;;;17128:2;17108:18;;;17101:30;17167:34;17162:2;17147:18;;17140:62;-1:-1:-1;;;17233:2:1;17218:18;;17211:35;17278:3;17263:19;;16887:401::o;17293:399::-;17495:2;17477:21;;;17534:2;17514:18;;;17507:30;17573:34;17568:2;17553:18;;17546:62;-1:-1:-1;;;17639:2:1;17624:18;;17617:33;17682:3;17667:19;;17293:399::o;20058:128::-;20125:9;;;20146:11;;;20143:37;;;20160:18;;:::i;22072:582::-;22371:6;22360:9;22353:25;22414:6;22409:2;22398:9;22394:18;22387:34;22457:3;22452:2;22441:9;22437:18;22430:31;22334:4;22478:57;22530:3;22519:9;22515:19;22507:6;22478:57;:::i;:::-;-1:-1:-1;;;;;22571:32:1;;;;22566:2;22551:18;;22544:60;-1:-1:-1;22635:3:1;22620:19;22613:35;22470:65;22072:582;-1:-1:-1;;;22072:582:1:o;23271:306::-;23359:6;23367;23375;23428:2;23416:9;23407:7;23403:23;23399:32;23396:52;;;23444:1;23441;23434:12;23396:52;23473:9;23467:16;23457:26;;23523:2;23512:9;23508:18;23502:25;23492:35;;23567:2;23556:9;23552:18;23546:25;23536:35;;23271:306;;;;;:::o

Swarm Source

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