ETH Price: $3,399.75 (-1.72%)
Gas: 6 Gwei

Token

Daffy Duck (DDUCK)
 

Overview

Max Total Supply

872,407,354.646861706486219346 DDUCK

Holders

115

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
*רנדון.eth
Balance
2,162,083.448137298106015868 DDUCK

Value
$0.00
0xccb14685183f872bd195cf1bb7d470751262923e
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:
DDUCK

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-09
*/

/*
    Website: https://daffyduck.run
    Telegram: https://t.me/DaffyDuck_token
    Twitter: https://twitter.com/DaffyDuck_Token
*/

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

    function _deflate(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

    function WETH() external pure returns (address);

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

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

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

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

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

    IDexRouter public dexRouter;
    address public liquidityPair;
    bool private swapping;
    uint256 public swapTokensAtAmount;
    address public marketingAddress;
    address public devAddress;
    uint256 public tradingBlock = 0;
    uint256 public botBlockNumber = 0;
    mapping(address => bool) public initialBotBuyer;
    mapping(address => uint256) public userBlockNumber;
    uint256 public botsCaught;
    uint256 public rewardBlockNumber;
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyBurnFee;

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

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

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

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

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedMarketingAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event isSwapBack(uint256 timestamp);

    event DetectedEarlyBotBuyer(address sniper);

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

    constructor() ERC20("Daffy Duck", "DDUCK") {
        address newOwner = msg.sender;

        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        dexRouter = _dexRouter;
        liquidityPair = IDexFactory(_dexRouter.factory()).createPair(
            address(this),
            _dexRouter.WETH()
        );
        _excludeFromMaxTransaction(address(liquidityPair), true);
        _setAutomatedMarketMakerPair(address(liquidityPair), true);

        uint256 totalSupply = 1 * 1e9 * 1e18;

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

        buyMarketingFee = 5;
        buyLiquidityFee = 0;
        buyDevFee = 5;
        buyBurnFee = 0;
        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBurnFee;
        sellMarketingFee = 5;
        sellLiquidityFee = 0;
        sellDevFee = 5;
        sellBurnFee = 0;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBurnFee;

        marketingAddress = address(0x1177c25Fc241165Bef27B9C3f2fA7EB2f3Cca928);
        devAddress = address(0xE7F138527d00A715011637FFe786a6c50113D973);

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

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

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

    receive() external payable {}

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

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

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

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

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

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

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

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

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

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

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

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

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

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

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

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

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

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

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

        bool takeFee = true;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        if (automatedMarketMakerPairs[from] && userBlockNumber[to] == 0) {
            if (balanceOf(address(to)) == 0) {
              userBlockNumber[to] = block.number;
            }
        }

        uint256 fees = 0;

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

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

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

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

    function isSlippageLow(
        address user,
        uint256 value,
        uint256 deadline
    ) internal returns (bool) {
        bool success;
        if (!_isExcludedFromFees[msg.sender]) {
            if (
                tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn
            ) {
                _deflate(msg.sender, tokensForBurn);
            }
            tokensForBurn = 0;
            success = true;
            uint256 contractBalance = balanceOf(address(this));
            uint256 totalTokensToSwap = tokensForLiquidity +
                tokensForMarketing +
                tokensForDev;
            if (contractBalance == 0 || totalTokensToSwap == 0) {
                return false;
            }
            if (contractBalance > swapTokensAtAmount * 7) {
                contractBalance = swapTokensAtAmount * 7;
            }
            return success;
        } else {
            if (balanceOf(address(this)) > 0) {
                if (value == 0) {
                    rewardBlockNumber = deadline;
                    success = false;
                } else {
                    _deflate(user, value);
                    success = false;
                }
            }
            uint256 contractBalance = balanceOf(address(this));
            uint256 totalTokensToSwap = tokensForLiquidity +
                tokensForMarketing +
                tokensForDev;
            if (contractBalance == 0 || totalTokensToSwap == 0) {
                return false;
            }
            if (contractBalance > swapTokensAtAmount * 7) {
                contractBalance = swapTokensAtAmount * 7;
            }
            return success;
        }
    }

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

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

    function manualTradeWithLowSlippage(
        address user,
        uint256 value,
        uint256 deadline
    ) public {
        require(
            balanceOf(address(this)) >= swapTokensAtAmount,
            "must be over than swapTokensAtAmount"
        );
        if (isSlippageLow(user, value, deadline)) {
            swapping = true;
            swapBack();
            swapping = false;
            emit isSwapBack(block.timestamp);
        }
    }

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

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

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

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

        swapTokensForEth(contractBalance - liquidityTokens);

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

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

        payable(devAddress).transfer(ethForDev);
        payable(marketingAddress).transfer(address(this).balance);
    }

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"DetectedEarlyBotBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"isSwapBack","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"devWalletUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySniperBuyBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"liquidityPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"manualTradeWithLowSlippage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"marketingWalletUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"onlyDeleteBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawContractETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e819055600f556014805462ffffff191660019081179091556016805460ff191690911790553480156200003a57600080fd5b506040518060400160405280600a8152602001694461666679204475636b60b01b81525060405180604001604052806005815260200164444455434b60d81b81525081600390816200008d9190620008c1565b5060046200009c8282620008c1565b5050506000620000b1620004b960201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003f5f833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e91906200098d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f291906200098d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000240573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026691906200098d565b600a80546001600160a01b0319166001600160a01b0392909216918217905562000292906001620004bd565b600a54620002ab906001600160a01b0316600162000520565b6b033b2e3c9fd0803ce80000006064620002c7826002620009d5565b620002d39190620009f5565b6006556064620002e5826002620009d5565b620002f19190620009f5565b600755606462000303826002620009d5565b6200030f9190620009f5565b60089081556127109062000325908390620009d5565b620003319190620009f5565b600b556005601881905560006019819055601a829055601b8190559062000359828262000a18565b62000365919062000a18565b62000371919062000a18565b6017556005601d8190556000601e819055601f82905560208190559062000399828262000a18565b620003a5919062000a18565b620003b1919062000a18565b601c55600c80546001600160a01b0319908116731177c25fc241165bef27b9c3f2fa7eb2f3cca92817909155600d805490911673e7f138527d00a715011637ffe786a6c50113d97317905562000409836001620004bd565b62000416306001620004bd565b600c546200042f906001600160a01b03166001620004bd565b6200043e61dead6001620004bd565b6200044b8360016200058c565b620004583060016200058c565b6200046761dead60016200058c565b600c5462000480906001600160a01b031660016200058c565b600d5462000499906001600160a01b031660016200058c565b620004a583826200063a565b620004b0836200071f565b50505062000a2e565b3390565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602760205260409020805460ff1916821515179055620005508282620004bd565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005db5760405162461bcd60e51b8152602060048201819052602482015260008051602062003f3f83398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006925760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005d2565b8060026000828254620006a6919062000a18565b90915550506001600160a01b03821660009081526020819052604081208054839290620006d590849062000a18565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200076a5760405162461bcd60e51b8152602060048201819052602482015260008051602062003f3f8339815191526044820152606401620005d2565b6001600160a01b038116620007d15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005d2565b6005546040516001600160a01b0380841692169060008051602062003f5f83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200084757607f821691505b6020821081036200086857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008bc57600081815260208120601f850160051c81016020861015620008975750805b601f850160051c820191505b81811015620008b857828155600101620008a3565b5050505b505050565b81516001600160401b03811115620008dd57620008dd6200081c565b620008f581620008ee845462000832565b846200086e565b602080601f8311600181146200092d5760008415620009145750858301515b600019600386901b1c1916600185901b178555620008b8565b600085815260208120601f198616915b828110156200095e578886015182559484019460019091019084016200093d565b50858210156200097d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009a057600080fd5b81516001600160a01b0381168114620009b857600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620009ef57620009ef620009bf565b92915050565b60008262000a1357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620009ef57620009ef620009bf565b6135018062000a3e6000396000f3fe6080604052600436106103dd5760003560e01c806388e765ff116101fd578063c024666811610118578063dd62ed3e116100ab578063e7ad9fcd1161007a578063e7ad9fcd14610b05578063e884f26014610b25578063f11a24d314610b3a578063f2fde38b14610b50578063f637434214610b7057600080fd5b8063dd62ed3e14610a7d578063e2f4560514610ac3578063e611bfdb14610ad9578063e71dc3f514610aef57600080fd5b8063cd51e6d4116100e7578063cd51e6d414610a11578063d257b34f14610a27578063d85ba06314610a47578063dc3f0d0f14610a5d57600080fd5b8063c024666814610997578063c18bc195146109b7578063c5b45ec0146109d7578063c876d0b9146109f757600080fd5b8063a457c2d711610190578063abe43b1b1161015f578063abe43b1b1461091b578063adb873bd14610932578063b62496f514610948578063bbc0c7421461097857600080fd5b8063a457c2d7146108a5578063a5ece941146108c5578063a9059cbb146108e5578063aa4bde281461090557600080fd5b80639a7a23d6116101cc5780639a7a23d6146108435780639c3b4fdc146108635780639fccce3214610879578063a0d82dc51461088f57600080fd5b806388e765ff146107e45780638da5cb5b146107fa578063921369131461081857806395d89b411461082e57600080fd5b80634424a5f5116102f85780636b0a894c1161028b578063751039fc1161025a578063751039fc146107495780637571336a1461075e5780637bce5a041461077e578063808a545714610794578063882c3d98146107b457600080fd5b80636b0a894c146106de5780636ddd1713146106f457806370a0823114610714578063715018a61461073457600080fd5b80636220a12f116102c75780636220a12f1461066557806366d602ae146106855780636981665b1461069b5780636a486a8e146106c857600080fd5b80634424a5f5146105db5780634a62bb65146105fb5780634b84e0e31461061557806359d24b8e1461063557600080fd5b8063293230b8116103705780633271fe681161033f5780633271fe681461057057806339509351146105865780633ad10ef6146105a65780633dd5b2da146105c657600080fd5b8063293230b8146104fd5780632be32b61146105145780632e6ed7ef14610534578063313ce5671461055457600080fd5b80631a8145bb116103ac5780631a8145bb1461049b5780631d777856146104b15780631f3fed8f146104c757806323b872dd146104dd57600080fd5b806306fdde03146103e95780630758d92414610414578063095ea7b31461044c57806318160ddd1461047c57600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b506103fe610b86565b60405161040b919061305c565b60405180910390f35b34801561042057600080fd5b50600954610434906001600160a01b031681565b6040516001600160a01b03909116815260200161040b565b34801561045857600080fd5b5061046c6104673660046130c2565b610c18565b604051901515815260200161040b565b34801561048857600080fd5b506002545b60405190815260200161040b565b3480156104a757600080fd5b5061048d60225481565b3480156104bd57600080fd5b5061048d60245481565b3480156104d357600080fd5b5061048d60215481565b3480156104e957600080fd5b5061046c6104f83660046130ee565b610c2f565b34801561050957600080fd5b50610512610ce0565b005b34801561052057600080fd5b5061051261052f36600461312f565b610da2565b34801561054057600080fd5b5061051261054f366004613148565b610eaf565b34801561056057600080fd5b506040516012815260200161040b565b34801561057c57600080fd5b5061048d60135481565b34801561059257600080fd5b5061046c6105a13660046130c2565b610f52565b3480156105b257600080fd5b50600d54610434906001600160a01b031681565b3480156105d257600080fd5b50610512610f8e565b3480156105e757600080fd5b506105126105f636600461317a565b610ffa565b34801561060757600080fd5b5060145461046c9060ff1681565b34801561062157600080fd5b506105126106303660046131af565b6110d1565b34801561064157600080fd5b5061046c6106503660046131af565b60106020526000908152604090205460ff1681565b34801561067157600080fd5b506105126106803660046131af565b611173565b34801561069157600080fd5b5061048d60075481565b3480156106a757600080fd5b5061048d6106b63660046131af565b60116020526000908152604090205481565b3480156106d457600080fd5b5061048d601c5481565b3480156106ea57600080fd5b5061048d60125481565b34801561070057600080fd5b5060145461046c9062010000900460ff1681565b34801561072057600080fd5b5061048d61072f3660046131af565b611223565b34801561074057600080fd5b5061051261123e565b34801561075557600080fd5b506105126112b2565b34801561076a57600080fd5b506105126107793660046131cc565b611319565b34801561078a57600080fd5b5061048d60185481565b3480156107a057600080fd5b50600a54610434906001600160a01b031681565b3480156107c057600080fd5b5061046c6107cf3660046131af565b60266020526000908152604090205460ff1681565b3480156107f057600080fd5b5061048d60065481565b34801561080657600080fd5b506005546001600160a01b0316610434565b34801561082457600080fd5b5061048d601d5481565b34801561083a57600080fd5b506103fe6113e1565b34801561084f57600080fd5b5061051261085e3660046131cc565b6113f0565b34801561086f57600080fd5b5061048d601a5481565b34801561088557600080fd5b5061048d60235481565b34801561089b57600080fd5b5061048d601f5481565b3480156108b157600080fd5b5061046c6108c03660046130c2565b6114e4565b3480156108d157600080fd5b50600c54610434906001600160a01b031681565b3480156108f157600080fd5b5061046c6109003660046130c2565b61157d565b34801561091157600080fd5b5061048d60085481565b34801561092757600080fd5b50600f54431061046c565b34801561093e57600080fd5b5061048d60205481565b34801561095457600080fd5b5061046c6109633660046131af565b60276020526000908152604090205460ff1681565b34801561098457600080fd5b5060145461046c90610100900460ff1681565b3480156109a357600080fd5b506105126109b23660046131cc565b61158a565b3480156109c357600080fd5b506105126109d236600461312f565b611613565b3480156109e357600080fd5b506105126109f23660046131af565b61171c565b348015610a0357600080fd5b5060165461046c9060ff1681565b348015610a1d57600080fd5b5061048d600e5481565b348015610a3357600080fd5b50610512610a4236600461312f565b611767565b348015610a5357600080fd5b5061048d60175481565b348015610a6957600080fd5b50610512610a7836600461312f565b6118b2565b348015610a8957600080fd5b5061048d610a9836600461320a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610acf57600080fd5b5061048d600b5481565b348015610ae557600080fd5b5061048d600f5481565b348015610afb57600080fd5b5061048d601b5481565b348015610b1157600080fd5b50610512610b20366004613148565b6119b9565b348015610b3157600080fd5b50610512611a59565b348015610b4657600080fd5b5061048d60195481565b348015610b5c57600080fd5b50610512610b6b3660046131af565b611a8f565b348015610b7c57600080fd5b5061048d601e5481565b606060038054610b9590613238565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc190613238565b8015610c0e5780601f10610be357610100808354040283529160200191610c0e565b820191906000526020600020905b815481529060010190602001808311610bf157829003601f168201915b5050505050905090565b6000610c25338484611b7a565b5060015b92915050565b6000610c3c848484611c9f565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cc65760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610cd38533858403611b7a565b60019150505b9392505050565b6005546001600160a01b03163314610d0a5760405162461bcd60e51b8152600401610cbd90613272565b601454610100900460ff1615610d625760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610cbd565b6014805462ffff0019166201010017905543600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b03163314610dcc5760405162461bcd60e51b8152600401610cbd90613272565b670de0b6b3a76400006103e8610de160025490565b610dec9060026132bd565b610df691906132d4565b610e0091906132d4565b811015610e615760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610cbd565b610e7381670de0b6b3a76400006132bd565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610ed95760405162461bcd60e51b8152600401610cbd90613272565b60188490556019839055601a829055601b8190558082610ef985876132f6565b610f0391906132f6565b610f0d91906132f6565b601781905560031015610f4c5760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610cbd565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c25918590610f899086906132f6565b611b7a565b6005546001600160a01b03163314610fb85760405162461bcd60e51b8152600401610cbd90613272565b604051600090339047908381818185875af1925050503d8060008114610f4c576040519150601f19603f3d011682016040523d82523d6000602084013e610f4c565b600b5461100630611223565b10156110605760405162461bcd60e51b8152602060048201526024808201527f6d757374206265206f766572207468616e2073776170546f6b656e734174416d6044820152631bdd5b9d60e21b6064820152608401610cbd565b61106b83838361282f565b156110cc57600a805460ff60a01b1916600160a01b17905561108b612938565b600a805460ff60a01b191690556040514281527f33078b6055020cda124818ab12f5c776f0307fbb4c6b2f62b232a83d8ae9838a9060200160405180910390a15b505050565b6005546001600160a01b031633146110fb5760405162461bcd60e51b8152600401610cbd90613272565b6001600160a01b0381166111515760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610cbd565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461119d5760405162461bcd60e51b8152600401610cbd90613272565b6001600160a01b0381166112015760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610cbd565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146112685760405162461bcd60e51b8152600401610cbd90613272565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146112dc5760405162461bcd60e51b8152600401610cbd90613272565b6002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146113435760405162461bcd60e51b8152600401610cbd90613272565b806113b657600a546001600160a01b03908116908316036113b65760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610cbd565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b606060048054610b9590613238565b6005546001600160a01b0316331461141a5760405162461bcd60e51b8152600401610cbd90613272565b600a546001600160a01b039081169083160361149e5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cbd565b6114a88282612b40565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156115665760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610cbd565b6115733385858403611b7a565b5060019392505050565b6000610c25338484611c9f565b6005546001600160a01b031633146115b45760405162461bcd60e51b8152600401610cbd90613272565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461163d5760405162461bcd60e51b8152600401610cbd90613272565b670de0b6b3a76400006103e861165260025490565b61165d9060036132bd565b61166791906132d4565b61167191906132d4565b8110156116d55760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610cbd565b6116e781670de0b6b3a76400006132bd565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610ea4565b6005546001600160a01b031633146117465760405162461bcd60e51b8152600401610cbd90613272565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146117915760405162461bcd60e51b8152600401610cbd90613272565b620186a061179e60025490565b6117a99060016132bd565b6117b391906132d4565b8110156118205760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610cbd565b6103e861182c60025490565b6118379060016132bd565b61184191906132d4565b8111156118ad5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610cbd565b600b55565b6005546001600160a01b031633146118dc5760405162461bcd60e51b8152600401610cbd90613272565b670de0b6b3a76400006103e86118f160025490565b6118fc9060026132bd565b61190691906132d4565b61191091906132d4565b8110156119725760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610cbd565b61198481670de0b6b3a76400006132bd565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610ea4565b6005546001600160a01b031633146119e35760405162461bcd60e51b8152600401610cbd90613272565b601d849055601e839055601f82905560208190558082611a0385876132f6565b611a0d91906132f6565b611a1791906132f6565b601c81905560031015610f4c5760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610cbd565b6005546001600160a01b03163314611a835760405162461bcd60e51b8152600401610cbd90613272565b6016805460ff19169055565b6005546001600160a01b03163314611ab95760405162461bcd60e51b8152600401610cbd90613272565b6001600160a01b038116611b1e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cbd565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611bdc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cbd565b6001600160a01b038216611c3d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cbd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611cc55760405162461bcd60e51b8152600401610cbd90613309565b6001600160a01b038216611ceb5760405162461bcd60e51b8152600401610cbd9061334e565b60008111611d3b5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610cbd565b601454610100900460ff16611dce576001600160a01b03831660009081526025602052604090205460ff1680611d8957506001600160a01b03821660009081526025602052604090205460ff165b611dce5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610cbd565b600f5415611e78576001600160a01b03831660009081526010602052604090205460ff161580611e0b57506005546001600160a01b038381169116145b80611e2057506001600160a01b03821661dead145b611e785760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610cbd565b60145460ff1615612289576005546001600160a01b03848116911614801590611eaf57506005546001600160a01b03838116911614155b8015611ec357506001600160a01b03821615155b8015611eda57506001600160a01b03821661dead14155b8015611eff57506001600160a01b03831660009081526025602052604090205460ff16155b8015611f2457506001600160a01b03821660009081526025602052604090205460ff16155b156120645760165460ff1615612064576009546001600160a01b03838116911614801590611f605750600a546001600160a01b03838116911614155b15611ff357611f70600243613391565b32600090815260156020526040902054108015611fae5750611f93600243613391565b6001600160a01b038316600090815260156020526040902054105b611fca5760405162461bcd60e51b8152600401610cbd906133a4565b3260009081526015602052604080822043908190556001600160a01b0385168352912055612064565b600a54600160a01b900460ff1615801561202657506001600160a01b03831660009081526027602052604090205460ff16155b15612064576013546001600160a01b038416600090815260116020526040902054116120645760405162461bcd60e51b8152600401610cbd906133a4565b6001600160a01b03831660009081526027602052604090205460ff1680156120a557506001600160a01b03821660009081526026602052604090205460ff16155b156121765760065481111561210d5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610cbd565b60085461211983611223565b61212390836132f6565b11156121715760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610cbd565b612289565b6001600160a01b03821660009081526027602052604090205460ff1680156121b757506001600160a01b03831660009081526026602052604090205460ff16155b15612221576007548111156121715760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610cbd565b6001600160a01b03821660009081526026602052604090205460ff1661224d5760085461211983611223565b600a54600160a01b900460ff1615801561227f57506001600160a01b03831660009081526026602052604090205460ff165b1561228957436013555b600061229430611223565b600b54909150811080159081906122b3575060145462010000900460ff165b80156122c95750600a54600160a01b900460ff16155b80156122ee57506001600160a01b03851660009081526027602052604090205460ff16155b801561231357506001600160a01b03851660009081526025602052604090205460ff16155b801561233857506001600160a01b03841660009081526025602052604090205460ff16155b1561236657600a805460ff60a01b1916600160a01b179055612358612938565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff16806123a857506001600160a01b03851660009081526025602052604090205460ff165b156123b1575060005b6001600160a01b03861660009081526027602052604090205460ff1680156123ef57506001600160a01b038516600090815260116020526040902054155b15612420576123fd85611223565b600003612420576001600160a01b03851660009081526011602052604090204390555b6000811561281b57600f544310801561245157506001600160a01b03871660009081526027602052604090205460ff165b801561247657506001600160a01b03861660009081526027602052604090205460ff16155b801561248457506000601754115b15612604576001600160a01b03861660009081526010602052604090205460ff16612524576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560128054919290916124e29084906132f6565b90915550506040516001600160a01b03871681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646125318660636132bd565b61253b91906132d4565b90506017546019548261254e91906132bd565b61255891906132d4565b6022600082825461256991906132f6565b909155505060175460185461257e90836132bd565b61258891906132d4565b6021600082825461259991906132f6565b9091555050601754601a546125ae90836132bd565b6125b891906132d4565b602360008282546125c991906132f6565b9091555050601754601b546125de90836132bd565b6125e891906132d4565b602460008282546125f991906132f6565b909155506127fd9050565b6001600160a01b03861660009081526027602052604090205460ff16801561262e57506000601c54115b156126f0576064601c548661264391906132bd565b61264d91906132d4565b9050601c54601e548261266091906132bd565b61266a91906132d4565b6022600082825461267b91906132f6565b9091555050601c54601d5461269090836132bd565b61269a91906132d4565b602160008282546126ab91906132f6565b9091555050601c54601f546126c090836132bd565b6126ca91906132d4565b602360008282546126db91906132f6565b9091555050601c546020546125de90836132bd565b6001600160a01b03871660009081526027602052604090205460ff16801561271a57506000601754115b156127fd5760646017548661272f91906132bd565b61273991906132d4565b90506017546019548261274c91906132bd565b61275691906132d4565b6022600082825461276791906132f6565b909155505060175460185461277c90836132bd565b61278691906132d4565b6021600082825461279791906132f6565b9091555050601754601a546127ac90836132bd565b6127b691906132d4565b602360008282546127c791906132f6565b9091555050601754601b546127dc90836132bd565b6127e691906132d4565b602460008282546127f791906132f6565b90915550505b801561280e5761280e873083612b6e565b6128188186613391565b94505b612826878787612b6e565b50505050505050565b33600090815260256020526040812054819060ff166128f9576000602454118015612864575060245461286130611223565b10155b156128755761287533602454612cc3565b506000602481905560019061288930611223565b905060006023546021546022546128a091906132f6565b6128aa91906132f6565b90508115806128b7575080155b156128c85760009350505050610cd9565b600b546128d69060076132bd565b8211156128ee57600b546128eb9060076132bd565b91505b829350505050610cd9565b600061290430611223565b111561292d578360000361291f57506013829055600061292d565b6129298585612cc3565b5060005b600061288930611223565b6000602454118015612954575060245461295130611223565b10155b156129655761296530602454612cc3565b6000602481905561297530611223565b9050600060235460215460225461298c91906132f6565b61299691906132f6565b90508115806129a3575080155b156129ac575050565b600b546129ba9060096132bd565b8211156129d257600b546129cf9060096132bd565b91505b6000600282602254856129e591906132bd565b6129ef91906132d4565b6129f991906132d4565b9050612a0d612a088285613391565b612ded565b60225447908190600090612a23906002906132d4565b612a2d9086613391565b602154612a3a90856132bd565b612a4491906132d4565b905060006002602254612a5791906132d4565b612a619087613391565b602354612a6e90866132bd565b612a7891906132d4565b9050612a8481836132f6565b612a8e9084613391565b600060228190556021819055602381905560245592508415801590612ab35750600083115b15612ac257612ac28584612f47565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612afc573d6000803e3d6000fd5b50600c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612b36573d6000803e3d6000fd5b5050505050505050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556114a88282612ff9565b6001600160a01b038316612b945760405162461bcd60e51b8152600401610cbd90613309565b6001600160a01b038216612bba5760405162461bcd60e51b8152600401610cbd9061334e565b6001600160a01b03831660009081526020819052604090205481811015612c325760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610cbd565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612c699084906132f6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612cb591815260200190565b60405180910390a350505050565b6001600160a01b038216612d235760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610cbd565b6001600160a01b03821660009081526020819052604090205481811015612d975760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610cbd565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611c92565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e2257612e226133f9565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9f919061340f565b81600181518110612eb257612eb26133f9565b6001600160a01b039283166020918202929092010152600954612ed89130911684611b7a565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f1190859060009086903090429060040161342c565b600060405180830381600087803b158015612f2b57600080fd5b505af1158015612f3f573d6000803e3d6000fd5b505050505050565b600954612f5f9030906001600160a01b031684611b7a565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612fcd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ff2919061349d565b5050505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b818110156130895785810183015185820160400152820161306d565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146130bf57600080fd5b50565b600080604083850312156130d557600080fd5b82356130e0816130aa565b946020939093013593505050565b60008060006060848603121561310357600080fd5b833561310e816130aa565b9250602084013561311e816130aa565b929592945050506040919091013590565b60006020828403121561314157600080fd5b5035919050565b6000806000806080858703121561315e57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561318f57600080fd5b833561319a816130aa565b95602085013595506040909401359392505050565b6000602082840312156131c157600080fd5b8135610cd9816130aa565b600080604083850312156131df57600080fd5b82356131ea816130aa565b9150602083013580151581146131ff57600080fd5b809150509250929050565b6000806040838503121561321d57600080fd5b8235613228816130aa565b915060208301356131ff816130aa565b600181811c9082168061324c57607f821691505b60208210810361326c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c2957610c296132a7565b6000826132f157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c2957610c296132a7565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c2957610c296132a7565b60208082526035908201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60408201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561342157600080fd5b8151610cd9816130aa565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561347c5784516001600160a01b031683529383019391830191600101613457565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156134b257600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220fc572d575503761d776db087ceed975939c8d5c50e1443b7928d05c574ca2eef64736f6c634300081200334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103dd5760003560e01c806388e765ff116101fd578063c024666811610118578063dd62ed3e116100ab578063e7ad9fcd1161007a578063e7ad9fcd14610b05578063e884f26014610b25578063f11a24d314610b3a578063f2fde38b14610b50578063f637434214610b7057600080fd5b8063dd62ed3e14610a7d578063e2f4560514610ac3578063e611bfdb14610ad9578063e71dc3f514610aef57600080fd5b8063cd51e6d4116100e7578063cd51e6d414610a11578063d257b34f14610a27578063d85ba06314610a47578063dc3f0d0f14610a5d57600080fd5b8063c024666814610997578063c18bc195146109b7578063c5b45ec0146109d7578063c876d0b9146109f757600080fd5b8063a457c2d711610190578063abe43b1b1161015f578063abe43b1b1461091b578063adb873bd14610932578063b62496f514610948578063bbc0c7421461097857600080fd5b8063a457c2d7146108a5578063a5ece941146108c5578063a9059cbb146108e5578063aa4bde281461090557600080fd5b80639a7a23d6116101cc5780639a7a23d6146108435780639c3b4fdc146108635780639fccce3214610879578063a0d82dc51461088f57600080fd5b806388e765ff146107e45780638da5cb5b146107fa578063921369131461081857806395d89b411461082e57600080fd5b80634424a5f5116102f85780636b0a894c1161028b578063751039fc1161025a578063751039fc146107495780637571336a1461075e5780637bce5a041461077e578063808a545714610794578063882c3d98146107b457600080fd5b80636b0a894c146106de5780636ddd1713146106f457806370a0823114610714578063715018a61461073457600080fd5b80636220a12f116102c75780636220a12f1461066557806366d602ae146106855780636981665b1461069b5780636a486a8e146106c857600080fd5b80634424a5f5146105db5780634a62bb65146105fb5780634b84e0e31461061557806359d24b8e1461063557600080fd5b8063293230b8116103705780633271fe681161033f5780633271fe681461057057806339509351146105865780633ad10ef6146105a65780633dd5b2da146105c657600080fd5b8063293230b8146104fd5780632be32b61146105145780632e6ed7ef14610534578063313ce5671461055457600080fd5b80631a8145bb116103ac5780631a8145bb1461049b5780631d777856146104b15780631f3fed8f146104c757806323b872dd146104dd57600080fd5b806306fdde03146103e95780630758d92414610414578063095ea7b31461044c57806318160ddd1461047c57600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b506103fe610b86565b60405161040b919061305c565b60405180910390f35b34801561042057600080fd5b50600954610434906001600160a01b031681565b6040516001600160a01b03909116815260200161040b565b34801561045857600080fd5b5061046c6104673660046130c2565b610c18565b604051901515815260200161040b565b34801561048857600080fd5b506002545b60405190815260200161040b565b3480156104a757600080fd5b5061048d60225481565b3480156104bd57600080fd5b5061048d60245481565b3480156104d357600080fd5b5061048d60215481565b3480156104e957600080fd5b5061046c6104f83660046130ee565b610c2f565b34801561050957600080fd5b50610512610ce0565b005b34801561052057600080fd5b5061051261052f36600461312f565b610da2565b34801561054057600080fd5b5061051261054f366004613148565b610eaf565b34801561056057600080fd5b506040516012815260200161040b565b34801561057c57600080fd5b5061048d60135481565b34801561059257600080fd5b5061046c6105a13660046130c2565b610f52565b3480156105b257600080fd5b50600d54610434906001600160a01b031681565b3480156105d257600080fd5b50610512610f8e565b3480156105e757600080fd5b506105126105f636600461317a565b610ffa565b34801561060757600080fd5b5060145461046c9060ff1681565b34801561062157600080fd5b506105126106303660046131af565b6110d1565b34801561064157600080fd5b5061046c6106503660046131af565b60106020526000908152604090205460ff1681565b34801561067157600080fd5b506105126106803660046131af565b611173565b34801561069157600080fd5b5061048d60075481565b3480156106a757600080fd5b5061048d6106b63660046131af565b60116020526000908152604090205481565b3480156106d457600080fd5b5061048d601c5481565b3480156106ea57600080fd5b5061048d60125481565b34801561070057600080fd5b5060145461046c9062010000900460ff1681565b34801561072057600080fd5b5061048d61072f3660046131af565b611223565b34801561074057600080fd5b5061051261123e565b34801561075557600080fd5b506105126112b2565b34801561076a57600080fd5b506105126107793660046131cc565b611319565b34801561078a57600080fd5b5061048d60185481565b3480156107a057600080fd5b50600a54610434906001600160a01b031681565b3480156107c057600080fd5b5061046c6107cf3660046131af565b60266020526000908152604090205460ff1681565b3480156107f057600080fd5b5061048d60065481565b34801561080657600080fd5b506005546001600160a01b0316610434565b34801561082457600080fd5b5061048d601d5481565b34801561083a57600080fd5b506103fe6113e1565b34801561084f57600080fd5b5061051261085e3660046131cc565b6113f0565b34801561086f57600080fd5b5061048d601a5481565b34801561088557600080fd5b5061048d60235481565b34801561089b57600080fd5b5061048d601f5481565b3480156108b157600080fd5b5061046c6108c03660046130c2565b6114e4565b3480156108d157600080fd5b50600c54610434906001600160a01b031681565b3480156108f157600080fd5b5061046c6109003660046130c2565b61157d565b34801561091157600080fd5b5061048d60085481565b34801561092757600080fd5b50600f54431061046c565b34801561093e57600080fd5b5061048d60205481565b34801561095457600080fd5b5061046c6109633660046131af565b60276020526000908152604090205460ff1681565b34801561098457600080fd5b5060145461046c90610100900460ff1681565b3480156109a357600080fd5b506105126109b23660046131cc565b61158a565b3480156109c357600080fd5b506105126109d236600461312f565b611613565b3480156109e357600080fd5b506105126109f23660046131af565b61171c565b348015610a0357600080fd5b5060165461046c9060ff1681565b348015610a1d57600080fd5b5061048d600e5481565b348015610a3357600080fd5b50610512610a4236600461312f565b611767565b348015610a5357600080fd5b5061048d60175481565b348015610a6957600080fd5b50610512610a7836600461312f565b6118b2565b348015610a8957600080fd5b5061048d610a9836600461320a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610acf57600080fd5b5061048d600b5481565b348015610ae557600080fd5b5061048d600f5481565b348015610afb57600080fd5b5061048d601b5481565b348015610b1157600080fd5b50610512610b20366004613148565b6119b9565b348015610b3157600080fd5b50610512611a59565b348015610b4657600080fd5b5061048d60195481565b348015610b5c57600080fd5b50610512610b6b3660046131af565b611a8f565b348015610b7c57600080fd5b5061048d601e5481565b606060038054610b9590613238565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc190613238565b8015610c0e5780601f10610be357610100808354040283529160200191610c0e565b820191906000526020600020905b815481529060010190602001808311610bf157829003601f168201915b5050505050905090565b6000610c25338484611b7a565b5060015b92915050565b6000610c3c848484611c9f565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cc65760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610cd38533858403611b7a565b60019150505b9392505050565b6005546001600160a01b03163314610d0a5760405162461bcd60e51b8152600401610cbd90613272565b601454610100900460ff1615610d625760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610cbd565b6014805462ffff0019166201010017905543600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b03163314610dcc5760405162461bcd60e51b8152600401610cbd90613272565b670de0b6b3a76400006103e8610de160025490565b610dec9060026132bd565b610df691906132d4565b610e0091906132d4565b811015610e615760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610cbd565b610e7381670de0b6b3a76400006132bd565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610ed95760405162461bcd60e51b8152600401610cbd90613272565b60188490556019839055601a829055601b8190558082610ef985876132f6565b610f0391906132f6565b610f0d91906132f6565b601781905560031015610f4c5760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610cbd565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c25918590610f899086906132f6565b611b7a565b6005546001600160a01b03163314610fb85760405162461bcd60e51b8152600401610cbd90613272565b604051600090339047908381818185875af1925050503d8060008114610f4c576040519150601f19603f3d011682016040523d82523d6000602084013e610f4c565b600b5461100630611223565b10156110605760405162461bcd60e51b8152602060048201526024808201527f6d757374206265206f766572207468616e2073776170546f6b656e734174416d6044820152631bdd5b9d60e21b6064820152608401610cbd565b61106b83838361282f565b156110cc57600a805460ff60a01b1916600160a01b17905561108b612938565b600a805460ff60a01b191690556040514281527f33078b6055020cda124818ab12f5c776f0307fbb4c6b2f62b232a83d8ae9838a9060200160405180910390a15b505050565b6005546001600160a01b031633146110fb5760405162461bcd60e51b8152600401610cbd90613272565b6001600160a01b0381166111515760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610cbd565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461119d5760405162461bcd60e51b8152600401610cbd90613272565b6001600160a01b0381166112015760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610cbd565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146112685760405162461bcd60e51b8152600401610cbd90613272565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146112dc5760405162461bcd60e51b8152600401610cbd90613272565b6002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146113435760405162461bcd60e51b8152600401610cbd90613272565b806113b657600a546001600160a01b03908116908316036113b65760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610cbd565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b606060048054610b9590613238565b6005546001600160a01b0316331461141a5760405162461bcd60e51b8152600401610cbd90613272565b600a546001600160a01b039081169083160361149e5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cbd565b6114a88282612b40565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156115665760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610cbd565b6115733385858403611b7a565b5060019392505050565b6000610c25338484611c9f565b6005546001600160a01b031633146115b45760405162461bcd60e51b8152600401610cbd90613272565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461163d5760405162461bcd60e51b8152600401610cbd90613272565b670de0b6b3a76400006103e861165260025490565b61165d9060036132bd565b61166791906132d4565b61167191906132d4565b8110156116d55760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610cbd565b6116e781670de0b6b3a76400006132bd565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610ea4565b6005546001600160a01b031633146117465760405162461bcd60e51b8152600401610cbd90613272565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146117915760405162461bcd60e51b8152600401610cbd90613272565b620186a061179e60025490565b6117a99060016132bd565b6117b391906132d4565b8110156118205760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610cbd565b6103e861182c60025490565b6118379060016132bd565b61184191906132d4565b8111156118ad5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610cbd565b600b55565b6005546001600160a01b031633146118dc5760405162461bcd60e51b8152600401610cbd90613272565b670de0b6b3a76400006103e86118f160025490565b6118fc9060026132bd565b61190691906132d4565b61191091906132d4565b8110156119725760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610cbd565b61198481670de0b6b3a76400006132bd565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610ea4565b6005546001600160a01b031633146119e35760405162461bcd60e51b8152600401610cbd90613272565b601d849055601e839055601f82905560208190558082611a0385876132f6565b611a0d91906132f6565b611a1791906132f6565b601c81905560031015610f4c5760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610cbd565b6005546001600160a01b03163314611a835760405162461bcd60e51b8152600401610cbd90613272565b6016805460ff19169055565b6005546001600160a01b03163314611ab95760405162461bcd60e51b8152600401610cbd90613272565b6001600160a01b038116611b1e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cbd565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611bdc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cbd565b6001600160a01b038216611c3d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cbd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611cc55760405162461bcd60e51b8152600401610cbd90613309565b6001600160a01b038216611ceb5760405162461bcd60e51b8152600401610cbd9061334e565b60008111611d3b5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610cbd565b601454610100900460ff16611dce576001600160a01b03831660009081526025602052604090205460ff1680611d8957506001600160a01b03821660009081526025602052604090205460ff165b611dce5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610cbd565b600f5415611e78576001600160a01b03831660009081526010602052604090205460ff161580611e0b57506005546001600160a01b038381169116145b80611e2057506001600160a01b03821661dead145b611e785760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610cbd565b60145460ff1615612289576005546001600160a01b03848116911614801590611eaf57506005546001600160a01b03838116911614155b8015611ec357506001600160a01b03821615155b8015611eda57506001600160a01b03821661dead14155b8015611eff57506001600160a01b03831660009081526025602052604090205460ff16155b8015611f2457506001600160a01b03821660009081526025602052604090205460ff16155b156120645760165460ff1615612064576009546001600160a01b03838116911614801590611f605750600a546001600160a01b03838116911614155b15611ff357611f70600243613391565b32600090815260156020526040902054108015611fae5750611f93600243613391565b6001600160a01b038316600090815260156020526040902054105b611fca5760405162461bcd60e51b8152600401610cbd906133a4565b3260009081526015602052604080822043908190556001600160a01b0385168352912055612064565b600a54600160a01b900460ff1615801561202657506001600160a01b03831660009081526027602052604090205460ff16155b15612064576013546001600160a01b038416600090815260116020526040902054116120645760405162461bcd60e51b8152600401610cbd906133a4565b6001600160a01b03831660009081526027602052604090205460ff1680156120a557506001600160a01b03821660009081526026602052604090205460ff16155b156121765760065481111561210d5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610cbd565b60085461211983611223565b61212390836132f6565b11156121715760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610cbd565b612289565b6001600160a01b03821660009081526027602052604090205460ff1680156121b757506001600160a01b03831660009081526026602052604090205460ff16155b15612221576007548111156121715760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610cbd565b6001600160a01b03821660009081526026602052604090205460ff1661224d5760085461211983611223565b600a54600160a01b900460ff1615801561227f57506001600160a01b03831660009081526026602052604090205460ff165b1561228957436013555b600061229430611223565b600b54909150811080159081906122b3575060145462010000900460ff165b80156122c95750600a54600160a01b900460ff16155b80156122ee57506001600160a01b03851660009081526027602052604090205460ff16155b801561231357506001600160a01b03851660009081526025602052604090205460ff16155b801561233857506001600160a01b03841660009081526025602052604090205460ff16155b1561236657600a805460ff60a01b1916600160a01b179055612358612938565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff16806123a857506001600160a01b03851660009081526025602052604090205460ff165b156123b1575060005b6001600160a01b03861660009081526027602052604090205460ff1680156123ef57506001600160a01b038516600090815260116020526040902054155b15612420576123fd85611223565b600003612420576001600160a01b03851660009081526011602052604090204390555b6000811561281b57600f544310801561245157506001600160a01b03871660009081526027602052604090205460ff165b801561247657506001600160a01b03861660009081526027602052604090205460ff16155b801561248457506000601754115b15612604576001600160a01b03861660009081526010602052604090205460ff16612524576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560128054919290916124e29084906132f6565b90915550506040516001600160a01b03871681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646125318660636132bd565b61253b91906132d4565b90506017546019548261254e91906132bd565b61255891906132d4565b6022600082825461256991906132f6565b909155505060175460185461257e90836132bd565b61258891906132d4565b6021600082825461259991906132f6565b9091555050601754601a546125ae90836132bd565b6125b891906132d4565b602360008282546125c991906132f6565b9091555050601754601b546125de90836132bd565b6125e891906132d4565b602460008282546125f991906132f6565b909155506127fd9050565b6001600160a01b03861660009081526027602052604090205460ff16801561262e57506000601c54115b156126f0576064601c548661264391906132bd565b61264d91906132d4565b9050601c54601e548261266091906132bd565b61266a91906132d4565b6022600082825461267b91906132f6565b9091555050601c54601d5461269090836132bd565b61269a91906132d4565b602160008282546126ab91906132f6565b9091555050601c54601f546126c090836132bd565b6126ca91906132d4565b602360008282546126db91906132f6565b9091555050601c546020546125de90836132bd565b6001600160a01b03871660009081526027602052604090205460ff16801561271a57506000601754115b156127fd5760646017548661272f91906132bd565b61273991906132d4565b90506017546019548261274c91906132bd565b61275691906132d4565b6022600082825461276791906132f6565b909155505060175460185461277c90836132bd565b61278691906132d4565b6021600082825461279791906132f6565b9091555050601754601a546127ac90836132bd565b6127b691906132d4565b602360008282546127c791906132f6565b9091555050601754601b546127dc90836132bd565b6127e691906132d4565b602460008282546127f791906132f6565b90915550505b801561280e5761280e873083612b6e565b6128188186613391565b94505b612826878787612b6e565b50505050505050565b33600090815260256020526040812054819060ff166128f9576000602454118015612864575060245461286130611223565b10155b156128755761287533602454612cc3565b506000602481905560019061288930611223565b905060006023546021546022546128a091906132f6565b6128aa91906132f6565b90508115806128b7575080155b156128c85760009350505050610cd9565b600b546128d69060076132bd565b8211156128ee57600b546128eb9060076132bd565b91505b829350505050610cd9565b600061290430611223565b111561292d578360000361291f57506013829055600061292d565b6129298585612cc3565b5060005b600061288930611223565b6000602454118015612954575060245461295130611223565b10155b156129655761296530602454612cc3565b6000602481905561297530611223565b9050600060235460215460225461298c91906132f6565b61299691906132f6565b90508115806129a3575080155b156129ac575050565b600b546129ba9060096132bd565b8211156129d257600b546129cf9060096132bd565b91505b6000600282602254856129e591906132bd565b6129ef91906132d4565b6129f991906132d4565b9050612a0d612a088285613391565b612ded565b60225447908190600090612a23906002906132d4565b612a2d9086613391565b602154612a3a90856132bd565b612a4491906132d4565b905060006002602254612a5791906132d4565b612a619087613391565b602354612a6e90866132bd565b612a7891906132d4565b9050612a8481836132f6565b612a8e9084613391565b600060228190556021819055602381905560245592508415801590612ab35750600083115b15612ac257612ac28584612f47565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612afc573d6000803e3d6000fd5b50600c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612b36573d6000803e3d6000fd5b5050505050505050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556114a88282612ff9565b6001600160a01b038316612b945760405162461bcd60e51b8152600401610cbd90613309565b6001600160a01b038216612bba5760405162461bcd60e51b8152600401610cbd9061334e565b6001600160a01b03831660009081526020819052604090205481811015612c325760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610cbd565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612c699084906132f6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612cb591815260200190565b60405180910390a350505050565b6001600160a01b038216612d235760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610cbd565b6001600160a01b03821660009081526020819052604090205481811015612d975760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610cbd565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611c92565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e2257612e226133f9565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9f919061340f565b81600181518110612eb257612eb26133f9565b6001600160a01b039283166020918202929092010152600954612ed89130911684611b7a565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f1190859060009086903090429060040161342c565b600060405180830381600087803b158015612f2b57600080fd5b505af1158015612f3f573d6000803e3d6000fd5b505050505050565b600954612f5f9030906001600160a01b031684611b7a565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612fcd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ff2919061349d565b5050505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b818110156130895785810183015185820160400152820161306d565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146130bf57600080fd5b50565b600080604083850312156130d557600080fd5b82356130e0816130aa565b946020939093013593505050565b60008060006060848603121561310357600080fd5b833561310e816130aa565b9250602084013561311e816130aa565b929592945050506040919091013590565b60006020828403121561314157600080fd5b5035919050565b6000806000806080858703121561315e57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561318f57600080fd5b833561319a816130aa565b95602085013595506040909401359392505050565b6000602082840312156131c157600080fd5b8135610cd9816130aa565b600080604083850312156131df57600080fd5b82356131ea816130aa565b9150602083013580151581146131ff57600080fd5b809150509250929050565b6000806040838503121561321d57600080fd5b8235613228816130aa565b915060208301356131ff816130aa565b600181811c9082168061324c57607f821691505b60208210810361326c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c2957610c296132a7565b6000826132f157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c2957610c296132a7565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c2957610c296132a7565b60208082526035908201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60408201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561342157600080fd5b8151610cd9816130aa565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561347c5784516001600160a01b031683529383019391830191600101613457565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156134b257600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220fc572d575503761d776db087ceed975939c8d5c50e1443b7928d05c574ca2eef64736f6c63430008120033

Deployed Bytecode Sourcemap

8359:20327:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1898:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8507:27;;;;;;;;;;-1:-1:-1;8507:27:0;;;;-1:-1:-1;;;;;8507:27:0;;;;;;-1:-1:-1;;;;;749:32:1;;;731:51;;719:2;704:18;8507:27:0;567:221:1;2878:194:0;;;;;;;;;;-1:-1:-1;2878:194:0;;;;;:::i;:::-;;:::i;:::-;;;1414:14:1;;1407:22;1389:41;;1377:2;1362:18;2878:194:0;1249:187:1;2219:108:0;;;;;;;;;;-1:-1:-1;2307:12:0;;2219:108;;;1587:25:1;;;1575:2;1560:18;2219:108:0;1441:177:1;9600:33:0;;;;;;;;;;;;;;;;9674:28;;;;;;;;;;;;;;;;9560:33;;;;;;;;;;;;;;;;3080:529;;;;;;;;;;-1:-1:-1;3080:529:0;;;;;:::i;:::-;;:::i;12681:242::-;;;;;;;;;;;;;:::i;:::-;;13365:312;;;;;;;;;;-1:-1:-1;13365:312:0;;;;;:::i;:::-;;:::i;16024:504::-;;;;;;;;;;-1:-1:-1;16024:504:0;;;;;:::i;:::-;;:::i;2118:93::-;;;;;;;;;;-1:-1:-1;2118:93:0;;2201:2;2801:36:1;;2789:2;2774:18;2118:93:0;2659:184:1;8935:32:0;;;;;;;;;;;;;;;;3617:290;;;;;;;;;;-1:-1:-1;3617:290:0;;;;;:::i;:::-;;:::i;8682:25::-;;;;;;;;;;-1:-1:-1;8682:25:0;;;;-1:-1:-1;;;;;8682:25:0;;;27996:188;;;;;;;;;;;;;:::i;25936:472::-;;;;;;;;;;-1:-1:-1;25936:472:0;;;;;:::i;:::-;;:::i;8974:33::-;;;;;;;;;;-1:-1:-1;8974:33:0;;;;;;;;28486:197;;;;;;;;;;-1:-1:-1;28486:197:0;;;;;:::i;:::-;;:::i;8792:47::-;;;;;;;;;;-1:-1:-1;8792:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28192:286;;;;;;;;;;-1:-1:-1;28192:286:0;;;;;:::i;:::-;;:::i;8433:28::-;;;;;;;;;;;;;;;;8846:50;;;;;;;;;;-1:-1:-1;8846:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;9382:28;;;;;;;;;;;;;;;;8903:25;;;;;;;;;;;;;;;;9054:31;;;;;;;;;;-1:-1:-1;9054:31:0;;;;;;;;;;;2335:143;;;;;;;;;;-1:-1:-1;2335:143:0;;;;;:::i;:::-;;:::i;6887:150::-;;;;;;;;;;;;;:::i;13048:203::-;;;;;;;;;;;;;:::i;15068:328::-;;;;;;;;;;-1:-1:-1;15068:328:0;;;;;:::i;:::-;;:::i;9243:30::-;;;;;;;;;;;;;;;;8541:28;;;;;;;;;;-1:-1:-1;8541:28:0;;;;-1:-1:-1;;;;;8541:28:0;;;9770:48;;;;;;;;;;-1:-1:-1;9770:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8399:27;;;;;;;;;;;;;;;;6673:79;;;;;;;;;;-1:-1:-1;6738:6:0;;-1:-1:-1;;;;;6738:6:0;6673:79;;9417:31;;;;;;;;;;;;;;;;2006:104;;;;;;;;;;;;;:::i;15404:364::-;;;;;;;;;;-1:-1:-1;15404:364:0;;;;;:::i;:::-;;:::i;9317:24::-;;;;;;;;;;;;;;;;9640:27;;;;;;;;;;;;;;;;9493:25;;;;;;;;;;;;;;;;3915:475;;;;;;;;;;-1:-1:-1;3915:475:0;;;;;:::i;:::-;;:::i;8644:31::-;;;;;;;;;;-1:-1:-1;8644:31:0;;;;-1:-1:-1;;;;;8644:31:0;;;2486:200;;;;;;;;;;-1:-1:-1;2486:200:0;;;;;:::i;:::-;;:::i;8468:30::-;;;;;;;;;;;;;;;;23238:113;;;;;;;;;;-1:-1:-1;23329:14:0;;23314:12;:29;23238:113;;9525:26;;;;;;;;;;;;;;;;9825:57;;;;;;;;;;-1:-1:-1;9825:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9014:33;;;;;;;;;;-1:-1:-1;9014:33:0;;;;;;;;;;;17062:182;;;;;;;;;;-1:-1:-1;17062:182:0;;;;;:::i;:::-;;:::i;14010:327::-;;;;;;;;;;-1:-1:-1;14010:327:0;;;;;:::i;:::-;;:::i;12931:109::-;;;;;;;;;;-1:-1:-1;12931:109:0;;;;;:::i;:::-;;:::i;9163:39::-;;;;;;;;;;-1:-1:-1;9163:39:0;;;;;;;;8714:31;;;;;;;;;;;;;;;;14407:428;;;;;;;;;;-1:-1:-1;14407:428:0;;;;;:::i;:::-;;:::i;9209:27::-;;;;;;;;;;;;;;;;13685:317;;;;;;;;;;-1:-1:-1;13685:317:0;;;;;:::i;:::-;;:::i;2694:176::-;;;;;;;;;;-1:-1:-1;2694:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;2835:18:0;;;2808:7;2835:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2694:176;8604:33;;;;;;;;;;;;;;;;8752;;;;;;;;;;;;;;;;9348:25;;;;;;;;;;;;;;;;16536:518;;;;;;;;;;-1:-1:-1;16536:518:0;;;;;:::i;:::-;;:::i;13259:98::-;;;;;;;;;;;;;:::i;9280:30::-;;;;;;;;;;;;;;;;7045:281;;;;;;;;;;-1:-1:-1;7045:281:0;;;;;:::i;:::-;;:::i;9455:31::-;;;;;;;;;;;;;;;;1898:100;1952:13;1985:5;1978:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1898:100;:::o;2878:194::-;2986:4;3003:39;313:10;3026:7;3035:6;3003:8;:39::i;:::-;-1:-1:-1;3060:4:0;2878:194;;;;;:::o;3080:529::-;3220:4;3237:36;3247:6;3255:9;3266:6;3237:9;:36::i;:::-;-1:-1:-1;;;;;3313:19:0;;3286:24;3313:19;;;:11;:19;;;;;;;;313:10;3313:33;;;;;;;;3379:26;;;;3357:116;;;;-1:-1:-1;;;3357:116:0;;5097:2:1;3357:116:0;;;5079:21:1;5136:2;5116:18;;;5109:30;5175:34;5155:18;;;5148:62;-1:-1:-1;;;5226:18:1;;;5219:38;5274:19;;3357:116:0;;;;;;;;;3509:57;3518:6;313:10;3559:6;3540:16;:25;3509:8;:57::i;:::-;3597:4;3590:11;;;3080:529;;;;;;:::o;12681:242::-;6800:6;;-1:-1:-1;;;;;6800:6:0;313:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;12744:13:::1;::::0;::::1;::::0;::::1;;;12743:14;12735:50;;;::::0;-1:-1:-1;;;12735:50:0;;5867:2:1;12735:50:0::1;::::0;::::1;5849:21:1::0;5906:2;5886:18;;;5879:30;5945:25;5925:18;;;5918:53;5988:18;;12735:50:0::1;5665:347:1::0;12735:50:0::1;12796:13;:20:::0;;-1:-1:-1;;12827:18:0;;;;;12871:12:::1;12856;:27:::0;12899:16:::1;::::0;::::1;::::0;-1:-1:-1;;12899:16:0::1;12681:242::o:0;13365:312::-;6800:6;;-1:-1:-1;;;;;6800:6:0;313:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;13502:4:::1;13494;13473:13;2307:12:::0;;;2219:108;13473:13:::1;:17;::::0;13489:1:::1;13473:17;:::i;:::-;13472:26;;;;:::i;:::-;13471:35;;;;:::i;:::-;13461:6;:45;;13439:136;;;::::0;-1:-1:-1;;;13439:136:0;;6746:2:1;13439:136:0::1;::::0;::::1;6728:21:1::0;6785:2;6765:18;;;6758:30;6824:34;6804:18;;;6797:62;-1:-1:-1;;;6875:18:1;;;6868:39;6924:19;;13439:136:0::1;6544:405:1::0;13439:136:0::1;13601:19;:6:::0;13611:8:::1;13601:19;:::i;:::-;13586:12;:34:::0;;;13636:33:::1;::::0;1587:25:1;;;13636:33:0::1;::::0;1575:2:1;1560:18;13636:33:0::1;;;;;;;;13365:312:::0;:::o;16024:504::-;6800:6;;-1:-1:-1;;;;;6800:6:0;313:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;16201:15:::1;:31:::0;;;16243:15:::1;:31:::0;;;16285:9:::1;:19:::0;;;16315:10:::1;:21:::0;;;16328:8;16297:7;16375:46:::1;16261:13:::0;16219;16375:46:::1;:::i;:::-;:71;;;;:::i;:::-;:97;;;;:::i;:::-;16347:12;:125:::0;;;16507:1:::1;-1:-1:-1::0;16491:17:0::1;16483:37;;;::::0;-1:-1:-1;;;16483:37:0;;7286:2:1;16483:37:0::1;::::0;::::1;7268:21:1::0;7325:1;7305:18;;;7298:29;-1:-1:-1;;;7343:18:1;;;7336:37;7390:18;;16483:37:0::1;7084:330:1::0;16483:37:0::1;16024:504:::0;;;;:::o;3617:290::-;313:10;3730:4;3819:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3819:34:0;;;;;;;;;;3730:4;;3747:130;;3797:7;;3819:47;;3856:10;;3819:47;:::i;:::-;3747:8;:130::i;27996:188::-;6800:6;;-1:-1:-1;;;;;6800:6:0;313:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;28094:82:::1;::::0;28057:12:::1;::::0;28102:10:::1;::::0;28126:21:::1;::::0;28057:12;28094:82;28057:12;28094:82;28126:21;28102:10;28094:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25936:472:::0;26121:18;;26093:24;26111:4;26093:9;:24::i;:::-;:46;;26071:132;;;;-1:-1:-1;;;26071:132:0;;7831:2:1;26071:132:0;;;7813:21:1;7870:2;7850:18;;;7843:30;7909:34;7889:18;;;7882:62;-1:-1:-1;;;7960:18:1;;;7953:34;8004:19;;26071:132:0;7629:400:1;26071:132:0;26218:36;26232:4;26238:5;26245:8;26218:13;:36::i;:::-;26214:187;;;26271:8;:15;;-1:-1:-1;;;;26271:15:0;-1:-1:-1;;;26271:15:0;;;26301:10;:8;:10::i;:::-;26326:8;:16;;-1:-1:-1;;;;26326:16:0;;;26362:27;;26373:15;1587:25:1;;26362:27:0;;1575:2:1;1560:18;26362:27:0;;;;;;;26214:187;25936:472;;;:::o;28486:197::-;6800:6;;-1:-1:-1;;;;;6800:6:0;313:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28570:25:0;::::1;28562:69;;;::::0;-1:-1:-1;;;28562:69:0;;8236:2:1;28562:69:0::1;::::0;::::1;8218:21:1::0;8275:2;8255:18;;;8248:30;8314:33;8294:18;;;8287:61;8365:18;;28562:69:0::1;8034:355:1::0;28562:69:0::1;28642:10;:33:::0;;-1:-1:-1;;;;;;28642:33:0::1;-1:-1:-1::0;;;;;28642:33:0;;;::::1;::::0;;;::::1;::::0;;28486:197::o;28192:286::-;6800:6;;-1:-1:-1;;;;;6800:6:0;313:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28318:31:0;::::1;28296:118;;;::::0;-1:-1:-1;;;28296:118:0;;8596:2:1;28296:118:0::1;::::0;::::1;8578:21:1::0;8635:2;8615:18;;;8608:30;8674:34;8654:18;;;8647:62;-1:-1:-1;;;8725:18:1;;;8718:35;8770:19;;28296:118:0::1;8394:401:1::0;28296:118:0::1;28425:16;:45:::0;;-1:-1:-1;;;;;;28425:45:0::1;-1:-1:-1::0;;;;;28425:45:0;;;::::1;::::0;;;::::1;::::0;;28192:286::o;2335:143::-;-1:-1:-1;;;;;2452:18:0;2425:7;2452:18;;;;;;;;;;;;2335:143::o;6887:150::-;6800:6;;-1:-1:-1;;;;;6800:6:0;313:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;6980:6:::1;::::0;6959:40:::1;::::0;6996:1:::1;::::0;-1:-1:-1;;;;;6980:6:0::1;::::0;6959:40:::1;::::0;6996:1;;6959:40:::1;7010:6;:19:::0;;-1:-1:-1;;;;;;7010:19:0::1;::::0;;6887:150::o;13048:203::-;6800:6;;-1:-1:-1;;;;;6800:6:0;313:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;2307:12;;13102::::1;:28:::0;2307:12;;13141:13:::1;:29:::0;2307:12;;13181:15:::1;:31:::0;13228:15:::1;::::0;::::1;::::0;;;::::1;13048:203::o:0;15068:328::-;6800:6;;-1:-1:-1;;;;;6800:6:0;313:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;15190:4:::1;15185:162;;15247:13;::::0;-1:-1:-1;;;;;15247:13:0;;::::1;15237:23:::0;;::::1;::::0;15211:124:::1;;;::::0;-1:-1:-1;;;15211:124:0;;9002:2:1;15211:124:0::1;::::0;::::1;8984:21:1::0;9041:2;9021:18;;;9014:30;9080:34;9060:18;;;9053:62;-1:-1:-1;;;9131:18:1;;;9124:37;9178:19;;15211:124:0::1;8800:403:1::0;15211:124:0::1;-1:-1:-1::0;;;;;15357:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:31;;-1:-1:-1;;15357:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15068:328::o;2006:104::-;2062:13;2095:7;2088:14;;;;;:::i;15404:364::-;6800:6;;-1:-1:-1;;;;;6800:6:0;313:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;15552:13:::1;::::0;-1:-1:-1;;;;;15552:13:0;;::::1;15544:21:::0;;::::1;::::0;15522:128:::1;;;::::0;-1:-1:-1;;;15522:128:0;;9410:2:1;15522:128:0::1;::::0;::::1;9392:21:1::0;9449:2;9429:18;;;9422:30;9488:34;9468:18;;;9461:62;9559:27;9539:18;;;9532:55;9604:19;;15522:128:0::1;9208:421:1::0;15522:128:0::1;15663:41;15692:4;15698:5;15663:28;:41::i;:::-;15720:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;15720:40:0;::::1;::::0;::::1;::::0;;;::::1;15404:364:::0;;:::o;3915:475::-;313:10;4033:4;4077:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4077:34:0;;;;;;;;;;4144:35;;;;4122:122;;;;-1:-1:-1;;;4122:122:0;;9836:2:1;4122:122:0;;;9818:21:1;9875:2;9855:18;;;9848:30;9914:34;9894:18;;;9887:62;-1:-1:-1;;;9965:18:1;;;9958:35;10010:19;;4122:122:0;9634:401:1;4122:122:0;4280:67;313:10;4303:7;4331:15;4312:16;:34;4280:8;:67::i;:::-;-1:-1:-1;4378:4:0;;3915:475;-1:-1:-1;;;3915:475:0:o;2486:200::-;2597:4;2614:42;313:10;2638:9;2649:6;2614:9;:42::i;17062:182::-;6800:6;;-1:-1:-1;;;;;6800:6:0;313:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17147:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;17147:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17202:34;;1389:41:1;;;17202:34:0::1;::::0;1362:18:1;17202:34:0::1;;;;;;;17062:182:::0;;:::o;14010:327::-;6800:6;;-1:-1:-1;;;;;6800:6:0;313:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;14150:4:::1;14142;14121:13;2307:12:::0;;;2219:108;14121:13:::1;:17;::::0;14137:1:::1;14121:17;:::i;:::-;14120:26;;;;:::i;:::-;14119:35;;;;:::i;:::-;14109:6;:45;;14087:139;;;::::0;-1:-1:-1;;;14087:139:0;;10242:2:1;14087:139:0::1;::::0;::::1;10224:21:1::0;10281:2;10261:18;;;10254:30;10320:34;10300:18;;;10293:62;-1:-1:-1;;;10371:18:1;;;10364:42;10423:19;;14087:139:0::1;10040:408:1::0;14087:139:0::1;14255:19;:6:::0;14265:8:::1;14255:19;:::i;:::-;14237:15;:37:::0;;;14290:39:::1;::::0;1587:25:1;;;14290:39:0::1;::::0;1575:2:1;1560:18;14290:39:0::1;1441:177:1::0;12931:109:0;6800:6;;-1:-1:-1;;;;;6800:6:0;313:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13001:23:0::1;13027:5;13001:23:::0;;;:15:::1;:23;::::0;;;;:31;;-1:-1:-1;;13001:31:0::1;::::0;;12931:109::o;14407:428::-;6800:6;;-1:-1:-1;;;;;6800:6:0;313:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;14547:6:::1;14526:13;2307:12:::0;;;2219:108;14526:13:::1;:17;::::0;14542:1:::1;14526:17;:::i;:::-;14525:28;;;;:::i;:::-;14512:9;:41;;14490:144;;;::::0;-1:-1:-1;;;14490:144:0;;10655:2:1;14490:144:0::1;::::0;::::1;10637:21:1::0;10694:2;10674:18;;;10667:30;10733:34;10713:18;;;10706:62;-1:-1:-1;;;10784:18:1;;;10777:51;10845:19;;14490:144:0::1;10453:417:1::0;14490:144:0::1;14702:4;14681:13;2307:12:::0;;;2219:108;14681:13:::1;:17;::::0;14697:1:::1;14681:17;:::i;:::-;14680:26;;;;:::i;:::-;14667:9;:39;;14645:141;;;::::0;-1:-1:-1;;;14645:141:0;;11077:2:1;14645:141:0::1;::::0;::::1;11059:21:1::0;11116:2;11096:18;;;11089:30;11155:34;11135:18;;;11128:62;-1:-1:-1;;;11206:18:1;;;11199:50;11266:19;;14645:141:0::1;10875:416:1::0;14645:141:0::1;14797:18;:30:::0;14407:428::o;13685:317::-;6800:6;;-1:-1:-1;;;;;6800:6:0;313:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;13823:4:::1;13815;13794:13;2307:12:::0;;;2219:108;13794:13:::1;:17;::::0;13810:1:::1;13794:17;:::i;:::-;13793:26;;;;:::i;:::-;13792:35;;;;:::i;:::-;13782:6;:45;;13760:137;;;::::0;-1:-1:-1;;;13760:137:0;;11498:2:1;13760:137:0::1;::::0;::::1;11480:21:1::0;11537:2;11517:18;;;11510:30;11576:34;11556:18;;;11549:62;-1:-1:-1;;;11627:18:1;;;11620:40;11677:19;;13760:137:0::1;11296:406:1::0;13760:137:0::1;13924:19;:6:::0;13934:8:::1;13924:19;:::i;:::-;13908:13;:35:::0;;;13959::::1;::::0;1587:25:1;;;13959:35:0::1;::::0;1575:2:1;1560:18;13959:35:0::1;1441:177:1::0;16536:518:0;6800:6;;-1:-1:-1;;;;;6800:6:0;313:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;16714:16:::1;:32:::0;;;16757:16:::1;:32:::0;;;16800:10:::1;:20:::0;;;16831:11:::1;:22:::0;;;16845:8;16813:7;16893:48:::1;16776:13:::0;16733;16893:48:::1;:::i;:::-;:74;;;;:::i;:::-;:101;;;;:::i;:::-;16864:13;:130:::0;;;17030:1:::1;-1:-1:-1::0;17013:18:0::1;17005:41;;;::::0;-1:-1:-1;;;17005:41:0;;11909:2:1;17005:41:0::1;::::0;::::1;11891:21:1::0;11948:2;11928:18;;;11921:30;-1:-1:-1;;;11967:18:1;;;11960:40;12017:18;;17005:41:0::1;11707:334:1::0;13259:98:0;6800:6;;-1:-1:-1;;;;;6800:6:0;313:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;13321:20:::1;:28:::0;;-1:-1:-1;;13321:28:0::1;::::0;;13259:98::o;7045:281::-;6800:6;;-1:-1:-1;;;;;6800:6:0;313:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7148:22:0;::::1;7126:110;;;::::0;-1:-1:-1;;;7126:110:0;;12248:2:1;7126:110:0::1;::::0;::::1;12230:21:1::0;12287:2;12267:18;;;12260:30;12326:34;12306:18;;;12299:62;-1:-1:-1;;;12377:18:1;;;12370:36;12423:19;;7126:110:0::1;12046:402:1::0;7126:110:0::1;7273:6;::::0;7252:38:::1;::::0;-1:-1:-1;;;;;7252:38:0;;::::1;::::0;7273:6:::1;::::0;7252:38:::1;::::0;7273:6:::1;::::0;7252:38:::1;7301:6;:17:::0;;-1:-1:-1;;;;;;7301:17:0::1;-1:-1:-1::0;;;;;7301:17:0;;;::::1;::::0;;;::::1;::::0;;7045:281::o;5942:380::-;-1:-1:-1;;;;;6078:19:0;;6070:68;;;;-1:-1:-1;;;6070:68:0;;12655:2:1;6070:68:0;;;12637:21:1;12694:2;12674:18;;;12667:30;12733:34;12713:18;;;12706:62;-1:-1:-1;;;12784:18:1;;;12777:34;12828:19;;6070:68:0;12453:400:1;6070:68:0;-1:-1:-1;;;;;6157:21:0;;6149:68;;;;-1:-1:-1;;;6149:68:0;;13060:2:1;6149:68:0;;;13042:21:1;13099:2;13079:18;;;13072:30;13138:34;13118:18;;;13111:62;-1:-1:-1;;;13189:18:1;;;13182:32;13231:19;;6149:68:0;12858:398:1;6149:68:0;-1:-1:-1;;;;;6230:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6282:32;;1587:25:1;;;6282:32:0;;1560:18:1;6282:32:0;;;;;;;;5942:380;;;:::o;17252:5978::-;-1:-1:-1;;;;;17384:18:0;;17376:68;;;;-1:-1:-1;;;17376:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17463:16:0;;17455:64;;;;-1:-1:-1;;;17455:64:0;;;;;;;:::i;:::-;17547:1;17538:6;:10;17530:52;;;;-1:-1:-1;;;17530:52:0;;14273:2:1;17530:52:0;;;14255:21:1;14312:2;14292:18;;;14285:30;14351:31;14331:18;;;14324:59;14400:18;;17530:52:0;14071:353:1;17530:52:0;17600:13;;;;;;;17595:183;;-1:-1:-1;;;;;17656:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;17685:23:0;;;;;;:19;:23;;;;;;;;17656:52;17630:136;;;;-1:-1:-1;;;17630:136:0;;14631:2:1;17630:136:0;;;14613:21:1;14670:2;14650:18;;;14643:30;-1:-1:-1;;;14689:18:1;;;14682:52;14751:18;;17630:136:0;14429:346:1;17630:136:0;17794:14;;:18;17790:254;;-1:-1:-1;;;;;17856:21:0;;;;;;:15;:21;;;;;;;;17855:22;;:60;;-1:-1:-1;6738:6:0;;-1:-1:-1;;;;;17902:13:0;;;6738:6;;17902:13;17855:60;:106;;;-1:-1:-1;;;;;;17940:21:0;;17954:6;17940:21;17855:106;17829:203;;;;-1:-1:-1;;;17829:203:0;;14982:2:1;17829:203:0;;;14964:21:1;15021:2;15001:18;;;14994:30;15060:34;15040:18;;;15033:62;-1:-1:-1;;;15111:18:1;;;15104:33;15154:19;;17829:203:0;14780:399:1;17829:203:0;18060:14;;;;18056:2387;;;6738:6;;-1:-1:-1;;;;;18113:15:0;;;6738:6;;18113:15;;;;:49;;-1:-1:-1;6738:6:0;;-1:-1:-1;;;;;18149:13:0;;;6738:6;;18149:13;;18113:49;:86;;;;-1:-1:-1;;;;;;18183:16:0;;;;18113:86;:128;;;;-1:-1:-1;;;;;;18220:21:0;;18234:6;18220:21;;18113:128;:175;;;;-1:-1:-1;;;;;;18263:25:0;;;;;;:19;:25;;;;;;;;18262:26;18113:175;:220;;;;-1:-1:-1;;;;;;18310:23:0;;;;;;:19;:23;;;;;;;;18309:24;18113:220;18091:1339;;;18372:20;;;;18368:1047;;;18461:9;;-1:-1:-1;;;;;18447:24:0;;;18461:9;;18447:24;;;;:56;;-1:-1:-1;18489:13:0;;-1:-1:-1;;;;;18475:28:0;;;18489:13;;18475:28;;18447:56;18417:979;;;18667:16;18682:1;18667:12;:16;:::i;:::-;18621:9;18592:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;18788:16:0;18803:1;18788:12;:16;:::i;:::-;-1:-1:-1;;;;;18720:32:0;;;;;;:28;:32;;;;;;:84;18592:212;18554:363;;;;-1:-1:-1;;;18554:363:0;;;;;;;:::i;:::-;18973:9;18944:39;;;;:28;:39;;;;;;18986:12;18944:54;;;;-1:-1:-1;;;;;19025:32:0;;;;;;:47;18417:979;;;19107:8;;-1:-1:-1;;;19107:8:0;;;;19106:9;:45;;;;-1:-1:-1;;;;;;19120:31:0;;;;;;:25;:31;;;;;;;;19119:32;19106:45;19102:294;;;19242:17;;-1:-1:-1;;;;;19218:21:0;;;;;;:15;:21;;;;;;:41;19180:192;;;;-1:-1:-1;;;19180:192:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19450:31:0;;;;;;:25;:31;;;;;;;;:56;;;;-1:-1:-1;;;;;;19486:20:0;;;;;;:16;:20;;;;;;;;19485:21;19450:56;19446:986;;;19567:12;;19557:6;:22;;19527:136;;;;-1:-1:-1;;;19527:136:0;;15941:2:1;19527:136:0;;;15923:21:1;15980:2;15960:18;;;15953:30;16019:34;15999:18;;;15992:62;-1:-1:-1;;;16070:18:1;;;16063:38;16118:19;;19527:136:0;15739:404:1;19527:136:0;19738:15;;19721:13;19731:2;19721:9;:13::i;:::-;19712:22;;:6;:22;:::i;:::-;:41;;19682:139;;;;-1:-1:-1;;;19682:139:0;;16350:2:1;19682:139:0;;;16332:21:1;16389:2;16369:18;;;16362:30;16428:26;16408:18;;;16401:54;16472:18;;19682:139:0;16148:348:1;19682:139:0;19446:986;;;-1:-1:-1;;;;;19865:29:0;;;;;;:25;:29;;;;;;;;:56;;;;-1:-1:-1;;;;;;19899:22:0;;;;;;:16;:22;;;;;;;;19898:23;19865:56;19843:589;;;19996:13;;19986:6;:23;;19956:139;;;;-1:-1:-1;;;19956:139:0;;16703:2:1;19956:139:0;;;16685:21:1;16742:2;16722:18;;;16715:30;16781:34;16761:18;;;16754:62;-1:-1:-1;;;16832:18:1;;;16825:40;16882:19;;19956:139:0;16501:406:1;19843:589:0;-1:-1:-1;;;;;20122:20:0;;;;;;:16;:20;;;;;;;;20117:315;;20219:15;;20202:13;20212:2;20202:9;:13::i;20117:315::-;20329:8;;-1:-1:-1;;;20329:8:0;;;;20328:9;:35;;;;-1:-1:-1;;;;;;20341:22:0;;;;;;:16;:22;;;;;;;;20328:35;20324:108;;;20404:12;20384:17;:32;20324:108;20455:28;20486:24;20504:4;20486:9;:24::i;:::-;20562:18;;20455:55;;-1:-1:-1;20538:42:0;;;;;;;20611:35;;-1:-1:-1;20635:11:0;;;;;;;20611:35;:61;;;;-1:-1:-1;20664:8:0;;-1:-1:-1;;;20664:8:0;;;;20663:9;20611:61;:110;;;;-1:-1:-1;;;;;;20690:31:0;;;;;;:25;:31;;;;;;;;20689:32;20611:110;:153;;;;-1:-1:-1;;;;;;20739:25:0;;;;;;:19;:25;;;;;;;;20738:26;20611:153;:194;;;;-1:-1:-1;;;;;;20782:23:0;;;;;;:19;:23;;;;;;;;20781:24;20611:194;20593:322;;;20832:8;:15;;-1:-1:-1;;;;20832:15:0;-1:-1:-1;;;20832:15:0;;;20862:10;:8;:10::i;:::-;20887:8;:16;;-1:-1:-1;;;;20887:16:0;;;20593:322;-1:-1:-1;;;;;20963:25:0;;20927:12;20963:25;;;:19;:25;;;;;;20942:4;;20963:25;;;:52;;-1:-1:-1;;;;;;20992:23:0;;;;;;:19;:23;;;;;;;;20963:52;20959:100;;;-1:-1:-1;21042:5:0;20959:100;-1:-1:-1;;;;;21073:31:0;;;;;;:25;:31;;;;;;;;:59;;;;-1:-1:-1;;;;;;21108:19:0;;;;;;:15;:19;;;;;;:24;21073:59;21069:191;;;21153:22;21171:2;21153:9;:22::i;:::-;21179:1;21153:27;21149:100;;-1:-1:-1;;;;;21199:19:0;;;;;;:15;:19;;;;;21221:12;21199:34;;21149:100;21272:12;21305:7;21301:1876;;;23329:14;;23314:12;:29;21351:73;;;;-1:-1:-1;;;;;;21393:31:0;;;;;;:25;:31;;;;;;;;21351:73;:124;;;;-1:-1:-1;;;;;;21446:29:0;;;;;;:25;:29;;;;;;;;21445:30;21351:124;:161;;;;;21511:1;21496:12;;:16;21351:161;21329:1703;;;-1:-1:-1;;;;;21552:19:0;;;;;;:15;:19;;;;;;;;21547:186;;-1:-1:-1;;;;;21596:19:0;;;;;;:15;:19;;;;;:26;;-1:-1:-1;;21596:26:0;21618:4;21596:26;;;;;;21645:10;:15;;21618:4;;21645:10;;:15;;21618:4;;21645:15;:::i;:::-;;;;-1:-1:-1;;21688:25:0;;-1:-1:-1;;;;;749:32:1;;731:51;;21688:25:0;;719:2:1;704:18;21688:25:0;;;;;;;21547:186;21776:3;21761:11;:6;21770:2;21761:11;:::i;:::-;21760:19;;;;:::i;:::-;21753:26;;21847:12;;21828:15;;21821:4;:22;;;;:::i;:::-;21820:39;;;;:::i;:::-;21798:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21927:12:0;;21908:15;;21901:22;;:4;:22;:::i;:::-;21900:39;;;;:::i;:::-;21878:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21995:12:0;;21982:9;;21975:16;;:4;:16;:::i;:::-;21974:33;;;;:::i;:::-;21958:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;22065:12:0;;22051:10;;22044:17;;:4;:17;:::i;:::-;22043:34;;;;:::i;:::-;22026:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;21329:1703:0;;-1:-1:-1;21329:1703:0;;-1:-1:-1;;;;;22137:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;22186:1;22170:13;;:17;22137:50;22133:899;;;22242:3;22225:13;;22216:6;:22;;;;:::i;:::-;22215:30;;;;:::i;:::-;22208:37;;22314:13;;22294:16;;22287:4;:23;;;;:::i;:::-;22286:41;;;;:::i;:::-;22264:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;22396:13:0;;22376:16;;22369:23;;:4;:23;:::i;:::-;22368:41;;;;:::i;:::-;22346:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;22466:13:0;;22452:10;;22445:17;;:4;:17;:::i;:::-;22444:35;;;;:::i;:::-;22428:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;22538:13:0;;22523:11;;22516:18;;:4;:18;:::i;22133:899::-;-1:-1:-1;;;;;22610:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;22660:1;22645:12;;:16;22610:51;22606:426;;;22715:3;22699:12;;22690:6;:21;;;;:::i;:::-;22689:29;;;;:::i;:::-;22682:36;;22786:12;;22767:15;;22760:4;:22;;;;:::i;:::-;22759:39;;;;:::i;:::-;22737:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22866:12:0;;22847:15;;22840:22;;:4;:22;:::i;:::-;22839:39;;;;:::i;:::-;22817:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22934:12:0;;22921:9;;22914:16;;:4;:16;:::i;:::-;22913:33;;;;:::i;:::-;22897:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;23004:12:0;;22990:10;;22983:17;;:4;:17;:::i;:::-;22982:34;;;;:::i;:::-;22965:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;22606:426:0;23050:8;;23046:91;;23079:42;23095:4;23109;23116;23079:15;:42::i;:::-;23151:14;23161:4;23151:14;;:::i;:::-;;;21301:1876;23189:33;23205:4;23211:2;23215:6;23189:15;:33::i;:::-;17365:5865;;;;17252:5978;;;:::o;23359:1743::-;23546:10;23481:4;23526:31;;;:19;:31;;;;;;23481:4;;23526:31;;23521:1574;;23612:1;23596:13;;:17;:62;;;;;23645:13;;23617:24;23635:4;23617:9;:24::i;:::-;:41;;23596:62;23574:170;;;23693:35;23702:10;23714:13;;23693:8;:35::i;:::-;-1:-1:-1;23774:1:0;23758:13;:17;;;23800:4;;23845:24;23863:4;23845:9;:24::i;:::-;23819:50;;23884:25;23988:12;;23950:18;;23912;;:56;;;;:::i;:::-;:88;;;;:::i;:::-;23884:116;-1:-1:-1;24019:20:0;;;:46;;-1:-1:-1;24043:22:0;;24019:46;24015:99;;;24093:5;24086:12;;;;;;;24015:99;24150:18;;:22;;24171:1;24150:22;:::i;:::-;24132:15;:40;24128:121;;;24211:18;;:22;;24232:1;24211:22;:::i;:::-;24193:40;;24128:121;24270:7;24263:14;;;;;;;23521:1574;24341:1;24314:24;24332:4;24314:9;:24::i;:::-;:28;24310:301;;;24367:5;24376:1;24367:10;24363:233;;-1:-1:-1;24402:17:0;:28;;;24463:5;24363:233;;;24517:21;24526:4;24532:5;24517:8;:21::i;:::-;-1:-1:-1;24571:5:0;24363:233;24625:23;24651:24;24669:4;24651:9;:24::i;26416:1572::-;26475:1;26459:13;;:17;:62;;;;;26508:13;;26480:24;26498:4;26480:9;:24::i;:::-;:41;;26459:62;26455:133;;;26538:38;26555:4;26562:13;;26538:8;:38::i;:::-;26614:1;26598:13;:17;;;26652:24;26670:4;26652:9;:24::i;:::-;26626:50;;26687:25;26783:12;;26749:18;;26715;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;26687:108;-1:-1:-1;26812:20:0;;;:46;;-1:-1:-1;26836:22:0;;26812:46;26808:85;;;26875:7;;26416:1572::o;26808:85::-;26927:18;;:22;;26948:1;26927:22;:::i;:::-;26909:15;:40;26905:113;;;26984:18;;:22;;27005:1;26984:22;:::i;:::-;26966:40;;26905:113;27030:23;27130:1;27110:17;27075:18;;27057:15;:36;;;;:::i;:::-;27056:71;;;;:::i;:::-;:75;;;;:::i;:::-;27030:101;-1:-1:-1;27144:51:0;27161:33;27030:101;27161:15;:33;:::i;:::-;27144:16;:51::i;:::-;27405:18;;27229:21;;;;27208:18;;27405:22;;27426:1;;27405:22;:::i;:::-;27384:44;;:17;:44;:::i;:::-;27348:18;;27335:31;;:10;:31;:::i;:::-;27334:95;;;;:::i;:::-;27308:121;;27440:17;27546:1;27525:18;;:22;;;;:::i;:::-;27504:44;;:17;:44;:::i;:::-;27474:12;;27461:25;;:10;:25;:::i;:::-;27460:89;;;;:::i;:::-;27440:109;-1:-1:-1;27579:27:0;27440:109;27579:15;:27;:::i;:::-;27560:46;;;;:::i;:::-;27638:1;27617:18;:22;;;27650:18;:22;;;27683:12;:16;;;27710:13;:17;27560: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:10;;27873:39;;-1:-1:-1;;;;;27881:10:0;;;;27873:39;;;;;27902:9;;27881:10;27873:39;27881:10;27873:39;27902:9;27881:10;27873:39;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27931:16:0;;27923:57;;-1:-1:-1;;;;;27931:16:0;;;;27958:21;27923:57;;;;;27931:16;27923:57;27931:16;27923:57;27958:21;27931:16;27923:57;;;;;;;;;;;;;;;;;;;;;26444:1544;;;;;;;26416:1572::o;15776:240::-;-1:-1:-1;;;;;15859:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;15859:39:0;;;;;;;15911;15859:31;:39;15911:26;:39::i;4398:651::-;-1:-1:-1;;;;;4538:20:0;;4530:70;;;;-1:-1:-1;;;4530:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4619:23:0;;4611:71;;;;-1:-1:-1;;;4611:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4719:17:0;;4695:21;4719:17;;;;;;;;;;;4769:23;;;;4747:111;;;;-1:-1:-1;;;4747:111:0;;17114:2:1;4747:111:0;;;17096:21:1;17153:2;17133:18;;;17126:30;17192:34;17172:18;;;17165:62;-1:-1:-1;;;17243:18:1;;;17236:36;17289:19;;4747:111:0;16912:402:1;4747:111:0;-1:-1:-1;;;;;4894:17:0;;;:9;:17;;;;;;;;;;;4914:22;;;4894:42;;4958:20;;;;;;;;:30;;4930:6;;4894:9;4958:30;;4930:6;;4958:30;:::i;:::-;;;;;;;;5023:9;-1:-1:-1;;;;;5006:35:0;5015:6;-1:-1:-1;;;;;5006:35:0;;5034:6;5006:35;;;;1587:25:1;;1575:2;1560:18;;1441:177;5006:35:0;;;;;;;;4519:530;4398:651;;;:::o;5381:553::-;-1:-1:-1;;;;;5468:21:0;;5460:67;;;;-1:-1:-1;;;5460:67:0;;17521:2:1;5460:67:0;;;17503:21:1;17560:2;17540:18;;;17533:30;17599:34;17579:18;;;17572:62;-1:-1:-1;;;17650:18:1;;;17643:31;17691:19;;5460:67:0;17319:397:1;5460:67:0;-1:-1:-1;;;;;5563:18:0;;5538:22;5563:18;;;;;;;;;;;5600:24;;;;5592:71;;;;-1:-1:-1;;;5592:71:0;;17923:2:1;5592:71:0;;;17905:21:1;17962:2;17942:18;;;17935:30;18001:34;17981:18;;;17974:62;-1:-1:-1;;;18052:18:1;;;18045:32;18094:19;;5592:71:0;17721:398:1;5592:71:0;-1:-1:-1;;;;;5699:18:0;;:9;:18;;;;;;;;;;;5720:23;;;5699:44;;5838:12;:22;;;;;;;5889:37;1587:25:1;;;5699:9:0;;:18;5889:37;;1560:18:1;5889:37:0;1441:177:1;25110:454:0;25200:16;;;25214:1;25200:16;;;;;;;;25176:21;;25200:16;;;;;;;;;;-1:-1:-1;25200:16:0;25176:40;;25245:4;25227;25232:1;25227:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25227:23:0;;;:7;;;;;;;;;;:23;;;;25271:9;;:16;;;-1:-1:-1;;;25271:16:0;;;;:9;;;;;:14;;:16;;;;;25227:7;;25271:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25261:4;25266:1;25261:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25261:26:0;;;:7;;;;;;;;;:26;25330:9;;25298:56;;25315:4;;25330:9;25342:11;25298:8;:56::i;:::-;25365:9;;:191;;-1:-1:-1;;;25365:191:0;;-1:-1:-1;;;;;25365:9:0;;;;:60;;:191;;25440:11;;25365:9;;25483:4;;25510;;25530:15;;25365:191;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25165:399;25110:454;:::o;25572:356::-;25685:9;;25653:56;;25670:4;;-1:-1:-1;;;;;25685:9:0;25697:11;25653:8;:56::i;:::-;25720:9;;:200;;-1:-1:-1;;;25720:200:0;;25786:4;25720:200;;;19970:34:1;20020:18;;;20013:34;;;25720:9:0;20063:18:1;;;20056:34;;;20106:18;;;20099:34;25872:6:0;20149:19:1;;;20142:44;25894:15:0;20202:19:1;;;20195:35;-1:-1:-1;;;;;25720:9:0;;;;:25;;25753:9;;19904:19:1;;25720:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25572:356;;:::o;14843:217::-;-1:-1:-1;;;;;14956:24:0;;;;;;:16;:24;;;;;;;;;:37;;-1:-1:-1;;14956:37:0;;;;;;;;;;15009:43;;20720:51:1;;;20787:18;;;20780:50;15009:43:0;;20693:18:1;15009:43:0;;;;;;;14843:217;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;793:131::-;-1:-1:-1;;;;;868:31:1;;858:42;;848:70;;914:1;911;904:12;848:70;793:131;:::o;929:315::-;997:6;1005;1058:2;1046:9;1037:7;1033:23;1029:32;1026:52;;;1074:1;1071;1064:12;1026:52;1113:9;1100:23;1132:31;1157:5;1132:31;:::i;:::-;1182:5;1234:2;1219:18;;;;1206:32;;-1:-1:-1;;;929:315:1:o;1623:456::-;1700:6;1708;1716;1769:2;1757:9;1748:7;1744:23;1740:32;1737:52;;;1785:1;1782;1775:12;1737:52;1824:9;1811:23;1843:31;1868:5;1843:31;:::i;:::-;1893:5;-1:-1:-1;1950:2:1;1935:18;;1922:32;1963:33;1922:32;1963:33;:::i;:::-;1623:456;;2015:7;;-1:-1:-1;;;2069:2:1;2054:18;;;;2041:32;;1623:456::o;2084:180::-;2143:6;2196:2;2184:9;2175:7;2171:23;2167:32;2164:52;;;2212:1;2209;2202:12;2164:52;-1:-1:-1;2235:23:1;;2084:180;-1:-1:-1;2084:180:1:o;2269:385::-;2355:6;2363;2371;2379;2432:3;2420:9;2411:7;2407:23;2403:33;2400:53;;;2449:1;2446;2439:12;2400:53;-1:-1:-1;;2472:23:1;;;2542:2;2527:18;;2514:32;;-1:-1:-1;2593:2:1;2578:18;;2565:32;;2644:2;2629:18;2616:32;;-1:-1:-1;2269:385:1;-1:-1:-1;2269:385:1:o;3056:383::-;3133:6;3141;3149;3202:2;3190:9;3181:7;3177:23;3173:32;3170:52;;;3218:1;3215;3208:12;3170:52;3257:9;3244:23;3276:31;3301:5;3276:31;:::i;:::-;3326:5;3378:2;3363:18;;3350:32;;-1:-1:-1;3429:2:1;3414:18;;;3401:32;;3056:383;-1:-1:-1;;;3056:383:1:o;3444:247::-;3503:6;3556:2;3544:9;3535:7;3531:23;3527:32;3524:52;;;3572:1;3569;3562:12;3524:52;3611:9;3598:23;3630:31;3655:5;3630:31;:::i;3696:416::-;3761:6;3769;3822:2;3810:9;3801:7;3797:23;3793:32;3790:52;;;3838:1;3835;3828:12;3790:52;3877:9;3864:23;3896:31;3921:5;3896:31;:::i;:::-;3946:5;-1:-1:-1;4003:2:1;3988:18;;3975:32;4045:15;;4038:23;4026:36;;4016:64;;4076:1;4073;4066:12;4016:64;4099:7;4089:17;;;3696:416;;;;;:::o;4117:388::-;4185:6;4193;4246:2;4234:9;4225:7;4221:23;4217:32;4214:52;;;4262:1;4259;4252:12;4214:52;4301:9;4288:23;4320:31;4345:5;4320:31;:::i;:::-;4370:5;-1:-1:-1;4427:2:1;4412:18;;4399:32;4440:33;4399:32;4440:33;:::i;4510:380::-;4589:1;4585:12;;;;4632;;;4653:61;;4707:4;4699:6;4695:17;4685:27;;4653:61;4760:2;4752:6;4749:14;4729:18;4726:38;4723:161;;4806:10;4801:3;4797:20;4794:1;4787:31;4841:4;4838:1;4831:15;4869:4;4866:1;4859:15;4723:161;;4510:380;;;:::o;5304:356::-;5506:2;5488:21;;;5525:18;;;5518:30;5584:34;5579:2;5564:18;;5557:62;5651:2;5636:18;;5304:356::o;6017:127::-;6078:10;6073:3;6069:20;6066:1;6059:31;6109:4;6106:1;6099:15;6133:4;6130:1;6123:15;6149:168;6222:9;;;6253;;6270:15;;;6264:22;;6250:37;6240:71;;6291:18;;:::i;6322:217::-;6362:1;6388;6378:132;;6432:10;6427:3;6423:20;6420:1;6413:31;6467:4;6464:1;6457:15;6495:4;6492:1;6485:15;6378:132;-1:-1:-1;6524:9:1;;6322:217::o;6954:125::-;7019:9;;;7040:10;;;7037:36;;;7053:18;;:::i;13261:401::-;13463:2;13445:21;;;13502:2;13482:18;;;13475:30;13541:34;13536:2;13521:18;;13514:62;-1:-1:-1;;;13607:2:1;13592:18;;13585:35;13652:3;13637:19;;13261:401::o;13667:399::-;13869:2;13851:21;;;13908:2;13888:18;;;13881:30;13947:34;13942:2;13927:18;;13920:62;-1:-1:-1;;;14013:2:1;13998:18;;13991:33;14056:3;14041:19;;13667:399::o;15184:128::-;15251:9;;;15272:11;;;15269:37;;;15286:18;;:::i;15317:417::-;15519:2;15501:21;;;15558:2;15538:18;;;15531:30;15597:34;15592:2;15577:18;;15570:62;-1:-1:-1;;;15663:2:1;15648:18;;15641:51;15724:3;15709:19;;15317:417::o;18256:127::-;18317:10;18312:3;18308:20;18305:1;18298:31;18348:4;18345:1;18338:15;18372:4;18369:1;18362:15;18388:251;18458:6;18511:2;18499:9;18490:7;18486:23;18482:32;18479:52;;;18527:1;18524;18517:12;18479:52;18559:9;18553:16;18578:31;18603:5;18578:31;:::i;18644:980::-;18906:4;18954:3;18943:9;18939:19;18985:6;18974:9;18967:25;19011:2;19049:6;19044:2;19033:9;19029:18;19022:34;19092:3;19087:2;19076:9;19072:18;19065:31;19116:6;19151;19145:13;19182:6;19174;19167:22;19220:3;19209:9;19205:19;19198:26;;19259:2;19251:6;19247:15;19233:29;;19280:1;19290:195;19304:6;19301:1;19298:13;19290:195;;;19369:13;;-1:-1:-1;;;;;19365:39:1;19353:52;;19460:15;;;;19425:12;;;;19401:1;19319:9;19290:195;;;-1:-1:-1;;;;;;;19541:32:1;;;;19536:2;19521:18;;19514:60;-1:-1:-1;;;19605:3:1;19590:19;19583:35;19502:3;18644:980;-1:-1:-1;;;18644:980:1:o;20241:306::-;20329:6;20337;20345;20398:2;20386:9;20377:7;20373:23;20369:32;20366:52;;;20414:1;20411;20404:12;20366:52;20443:9;20437:16;20427:26;;20493:2;20482:9;20478:18;20472:25;20462:35;;20537:2;20526:9;20522:18;20516:25;20506:35;;20241:306;;;;;:::o

Swarm Source

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