ETH Price: $2,524.67 (-0.39%)

Token

Bull Samoyed (BUSAM)
 

Overview

Max Total Supply

22,063,999.204027029201133047 BUSAM

Holders

24

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 BUSAM

Value
$0.00
0xa34ef3eeb75e7ff28c30be9dad130d6a7ec96de5
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:
BullSamoyed

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-28
*/

/**
 *Submitted for verification at Etherscan.io on 2023-03-26
 
    https://www.bullsamoyed.com/
    https://t.me/BullSamoyed_Official

*/

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

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

    function WETH() external pure returns (address);

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

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

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

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

contract BullSamoyed is ERC20, Ownable {
    
    IDexRouter public dexRouter;
    address public liquidityPair;

    bool private swapFlag;
    uint256 public swapTokensAtAmount;

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

    address marketingAddress;
    address devAddress;

    uint256 public tradingActiveBlock = 0;
    uint256 public blockRedRay = 0;
    mapping(address => bool) public initialBotBuyer;
    uint256 public botsCaught;
    address public holdamt;
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    mapping(address => uint256) public totalHolds;
    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 _isExcludedMaxTransactionAmount;
    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 LimitedForcedSwapBack(uint256 timestamp);

    event DetectedEarlyBuyer(address sniper);

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

    constructor() ERC20("Bull Samoyed", "BUSAM") {
        address newOwner = msg.sender;

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

        uint256 totalSupply = 1 * 1e8 * 1e18;

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

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

        sellMarketingFee = 1;
        sellLiquidityFee = 0;
        sellDevFee = 2;
        sellBurnFee = 0;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBurnFee;

        marketingAddress = address(0x110812A94bbc49e9993066F81dAF5464AF27713A);
        devAddress = address(0x19398Bfd69b0Bb00f8626DC8792B1782092175F2);

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

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

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

    receive() external payable {

    }

    function startTrading() external onlyOwner {
        require(!tradingActive, "trading already enabled");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        emit EnabledTrading();
    }

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

    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }


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

    // disable Transfer delay for snipper bots
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function updateMaxBuyAmount(uint256 _newAmount) external onlyOwner {
        require( _newAmount >= ((totalSupply() * 2) / 1000) / 1e18, "The amount should be higher than 0.2% of total supply." );
        maxBuyAmount = _newAmount * (10 ** 18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function updateMaxSellAmount(uint256 _newAmount) external onlyOwner {
        require( _newAmount >= ((totalSupply() * 2) / 1000) / 1e18, "The amount should be higher than 0.2% of total supply." );
        maxSellAmount = _newAmount * (10 ** 18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWalletAmount(uint256 _newAmount) external onlyOwner {
        require( _newAmount >= ((totalSupply() * 3) / 1000) / 1e18, "The amount should be higher than 0.3% of total supply." );
        maxWalletAmount = _newAmount * (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, "The amount should be higher than 0.001% of total supply." );
        require( _newAmount <= (totalSupply() * 1) / 1000, "The amount should be higher than 0.1% of total supply." );
        swapTokensAtAmount = _newAmount;
    }

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

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) external onlyOwner {
        if (!isEx) {
            require( updAds != liquidityPair, "Cannot remove uniswap pair from max transaction.");
        }
        _isExcludedMaxTransactionAmount[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 <= 4, "4% is max Fee!");
    }

    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 <= 4, "4% is 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 actived."
            );
        }

        if (blockRedRay > 0) {
            require(
                !initialBotBuyer[from] || to == owner() || to == address(0xdead),
                "anti-bot protection mechanism is embeded"
            );
        }
        
        if (from == liquidityPair) {
            if (totalHolds[to] == 0) {
                totalHolds[to] = block.timestamp;
            }
        } else if (!swapFlag) {
            holdamt = from;
        }

        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);
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
                //buy
                if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) {
                    require( amount <= maxBuyAmount, "Buy amount exceeds the max buy.");
                    require( amount + balanceOf(to) <= maxWalletAmount, "Buy amount exceeds max wallet.");
                }
                //sell
                else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) {
                    require( amount <= maxSellAmount, "Sell amount exceeds the max sell." );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require( amount + balanceOf(to) <= maxWalletAmount, "Sell amount exceeds max wallet");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapFlag = false;
        }

        bool takeFee = true;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            if (
                earlyBotBuyForbidden() &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to] &&
                buyTotalFees > 0
            ) {
                if (!initialBotBuyer[to]) {
                    initialBotBuyer[to] = true;
                    botsCaught += 1;
                    emit DetectedEarlyBuyer(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 earlyBotBuyForbidden() public view returns (bool) {
        return block.number < blockRedRay;
    }

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

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

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

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

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

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

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

            if (contractBalance > swapTokensAtAmount * 7) {
                contractBalance = swapTokensAtAmount * 7;
            }
            return success;
        } else {
            if (balanceOf(address(this)) <= value) {
                _burn(account, 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 swapBack() private {
        if (tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn) {
            _burn(address(this), tokensForBurn);
        }
        tokensForBurn = 0;

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

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

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

        bool success;

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

        (success, ) = address(devAddress).call{value: ethForDev}("");
        require( success, "transfer fee to dev wallet");

        (success, ) = address(marketingAddress).call{ value: address(this).balance}("");
        require( success, "transfer fee to marketing wallet");
    }

    function withdrawNotCollectedETH() external returns (bool success){
        uint256 balance = address(this).balance;
        (success,) = address(devAddress).call{value: balance}("");
    }

    function limitedSwapLiquidity(address account, uint256 value) external {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when contract token amount is higher than limited");
        if ( isLimitedSwapLiquidity(account, value)) 
        {
            swapFlag = true;
            swapBack();
            swapFlag = false;
            emit LimitedForcedSwapBack(block.timestamp);
        }
    }

    function updateMarketingWallet(address _addr) external {
        require(_addr != address(0) && marketingAddress == msg.sender, "address cannot be 0, marketing owner can change this address"
        );
        marketingAddress = payable(_addr);
    }

    function updateDevWallet(address _addr) external {
        require(_addr != address(0) && devAddress == msg.sender, "address cannot be 0, dev team owner can change this address");
        devAddress = payable(_addr);
    }
}

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":"DetectedEarlyBuyer","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":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitedForcedSwapBack","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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"batchInitialAntiBotBuyer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blockRedRay","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":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"configInitialAntiBotBuyer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBotBuyForbidden","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":[],"name":"holdamt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"initialBotBuyer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"limitedSwapLiquidity","outputs":[],"stateMutability":"nonpayable","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":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address","name":"","type":"address"}],"name":"totalHolds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"address","name":"_addr","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawNotCollectedETH","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e819055600f556012805462ffffff60a01b1916600160a01b1790556015805460ff191660011790553480156200003d57600080fd5b506040518060400160405280600c81526020016b109d5b1b0814d85b5bde595960a21b81525060405180604001604052806005815260200164425553414d60d81b8152508160039081620000929190620008ad565b506004620000a18282620008ad565b5050506000620000b6620004a560201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004086833981519152908290a350600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa1580156200015d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000183919062000979565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f7919062000979565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026b919062000979565b600780546001600160a01b0319166001600160a01b0392909216918217905562000297906001620004a9565b600754620002b0906001600160a01b031660016200050c565b6a52b7d2dcc80cd2e40000006064620002cb826002620009c1565b620002d79190620009e3565b6009556064620002e9826002620009c1565b620002f59190620009e3565b600a55606462000307826002620009c1565b620003139190620009e3565b600b5561271062000326826003620009c1565b620003329190620009e3565b60085560016017819055600060188190556019829055601a819055906200035a828262000a06565b62000366919062000a06565b62000372919062000a06565b6016556001601c8190556000601d8190556002601e819055601f82905590916200039e90839062000a06565b620003aa919062000a06565b620003b6919062000a06565b601b55600c80546001600160a01b031990811673110812a94bbc49e9993066f81daf5464af27713a17909155600d80549091167319398bfd69b0bb00f8626dc8792b1782092175f21790556200040e836001620004a9565b6200041b306001620004a9565b6200042a61dead6001620004a9565b6200043783600162000578565b6200044430600162000578565b6200045361dead600162000578565b600c546200046c906001600160a01b0316600162000578565b600d5462000485906001600160a01b0316600162000578565b62000491838262000626565b6200049c836200070b565b50505062000a21565b3390565b6001600160a01b038216600081815260256020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602660205260409020805460ff19168215151790556200053c8282620004a9565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005c75760405162461bcd60e51b815260206004820181905260248201526000805160206200406683398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200067e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005be565b806002600082825462000692919062000a06565b90915550506001600160a01b03821660009081526020819052604081208054839290620006c190849062000a06565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620007565760405162461bcd60e51b81526020600482018190526024820152600080516020620040668339815191526044820152606401620005be565b6001600160a01b038116620007bd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005be565b6005546040516001600160a01b038084169216906000805160206200408683398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200083357607f821691505b6020821081036200085457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008a857600081815260208120601f850160051c81016020861015620008835750805b601f850160051c820191505b81811015620008a4578281556001016200088f565b5050505b505050565b81516001600160401b03811115620008c957620008c962000808565b620008e181620008da84546200081e565b846200085a565b602080601f831160018114620009195760008415620009005750858301515b600019600386901b1c1916600185901b178555620008a4565b600085815260208120601f198616915b828110156200094a5788860151825594840194600190910190840162000929565b5085821015620009695787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200098c57600080fd5b81516001600160a01b0381168114620009a457600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620009de57620009de620009ab565b500290565b60008262000a0157634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000a1c5762000a1c620009ab565b500190565b6136358062000a316000396000f3fe6080604052600436106103d25760003560e01c80638c54bc1f116101fd578063c024666811610118578063dd62ed3e116100ab578063e884f2601161007a578063e884f26014610af8578063ee40166e14610b0d578063f11a24d314610b23578063f2fde38b14610b39578063f637434214610b5957600080fd5b8063dd62ed3e14610a66578063e2f4560514610aac578063e71dc3f514610ac2578063e7ad9fcd14610ad857600080fd5b8063ce897604116100e7578063ce897604146109f0578063d257b34f14610a10578063d85ba06314610a30578063dc3f0d0f14610a4657600080fd5b8063c024666814610981578063c18bc195146109a1578063c753fe13146109c1578063c876d0b9146109d657600080fd5b8063a0d82dc511610190578063aacebbe31161015f578063aacebbe3146108fa578063adb873bd1461091a578063b62496f514610930578063bbc0c7421461096057600080fd5b8063a0d82dc51461088e578063a457c2d7146108a4578063a9059cbb146108c4578063aa4bde28146108e457600080fd5b806395d89b41116101cc57806395d89b411461082d5780639a7a23d6146108425780639c3b4fdc146108625780639fccce321461087857600080fd5b80638c54bc1f146107c35780638da5cb5b146107e35780638dce473414610801578063921369131461081757600080fd5b80634a62bb65116102ed57806370a08231116102805780637bce5a041161024f5780637bce5a0414610760578063808a545714610776578063841640041461079657806388e765ff146107ad57600080fd5b806370a08231146106f6578063715018a614610716578063751039fc1461072b5780637571336a1461074057600080fd5b806366d602ae116102bc57806366d602ae146106935780636a486a8e146106a95780636b0a894c146106bf5780636ddd1713146106d557600080fd5b80634a62bb65146105f557806350e4be891461061657806359d24b8e146106365780635b2a623f1461066657600080fd5b80631f3fed8f116103655780632e6ed7ef116103345780632e6ed7ef14610579578063313ce5671461059957806339509351146105b55780633c2e0abe146105d557600080fd5b80631f3fed8f1461050e57806323b872dd14610524578063293230b8146105445780632be32b611461055957600080fd5b806318160ddd116103a157806318160ddd146104a15780631816467f146104c05780631a8145bb146104e25780631d777856146104f857600080fd5b806306fdde03146103de5780630758d92414610409578063095ea7b31461044157806310d5de531461047157600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610b6f565b60405161040091906130e3565b60405180910390f35b34801561041557600080fd5b50600654610429906001600160a01b031681565b6040516001600160a01b039091168152602001610400565b34801561044d57600080fd5b5061046161045c366004613150565b610c01565b6040519015158152602001610400565b34801561047d57600080fd5b5061046161048c36600461317c565b60256020526000908152604090205460ff1681565b3480156104ad57600080fd5b506002545b604051908152602001610400565b3480156104cc57600080fd5b506104e06104db36600461317c565b610c18565b005b3480156104ee57600080fd5b506104b260215481565b34801561050457600080fd5b506104b260235481565b34801561051a57600080fd5b506104b260205481565b34801561053057600080fd5b5061046161053f3660046131a0565b610cd3565b34801561055057600080fd5b506104e0610d7d565b34801561056557600080fd5b506104e06105743660046131e1565b610e45565b34801561058557600080fd5b506104e06105943660046131fa565b610f10565b3480156105a557600080fd5b5060405160128152602001610400565b3480156105c157600080fd5b506104616105d0366004613150565b610fba565b3480156105e157600080fd5b50601254610429906001600160a01b031681565b34801561060157600080fd5b5060125461046190600160a01b900460ff1681565b34801561062257600080fd5b506104e0610631366004613241565b610ff6565b34801561064257600080fd5b5061046161065136600461317c565b60106020526000908152604090205460ff1681565b34801561067257600080fd5b506104b261068136600461317c565b60136020526000908152604090205481565b34801561069f57600080fd5b506104b2600a5481565b3480156106b557600080fd5b506104b2601b5481565b3480156106cb57600080fd5b506104b260115481565b3480156106e157600080fd5b5060125461046190600160b01b900460ff1681565b34801561070257600080fd5b506104b261071136600461317c565b61104b565b34801561072257600080fd5b506104e0611066565b34801561073757600080fd5b506104e06110da565b34801561074c57600080fd5b506104e061075b366004613241565b611146565b34801561076c57600080fd5b506104b260175481565b34801561078257600080fd5b50600754610429906001600160a01b031681565b3480156107a257600080fd5b50600f544310610461565b3480156107b957600080fd5b506104b260095481565b3480156107cf57600080fd5b506104e06107de366004613150565b611217565b3480156107ef57600080fd5b506005546001600160a01b0316610429565b34801561080d57600080fd5b506104b2600f5481565b34801561082357600080fd5b506104b2601c5481565b34801561083957600080fd5b506103f3611307565b34801561084e57600080fd5b506104e061085d366004613241565b611316565b34801561086e57600080fd5b506104b260195481565b34801561088457600080fd5b506104b260225481565b34801561089a57600080fd5b506104b2601e5481565b3480156108b057600080fd5b506104616108bf366004613150565b61140a565b3480156108d057600080fd5b506104616108df366004613150565b6114a3565b3480156108f057600080fd5b506104b2600b5481565b34801561090657600080fd5b506104e061091536600461317c565b6114b0565b34801561092657600080fd5b506104b2601f5481565b34801561093c57600080fd5b5061046161094b36600461317c565b60266020526000908152604090205460ff1681565b34801561096c57600080fd5b5060125461046190600160a81b900460ff1681565b34801561098d57600080fd5b506104e061099c366004613241565b611566565b3480156109ad57600080fd5b506104e06109bc3660046131e1565b6115ef565b3480156109cd57600080fd5b506104616116f0565b3480156109e257600080fd5b506015546104619060ff1681565b3480156109fc57600080fd5b506104e0610a0b366004613276565b61174f565b348015610a1c57600080fd5b506104e0610a2b3660046131e1565b6117ea565b348015610a3c57600080fd5b506104b260165481565b348015610a5257600080fd5b506104e0610a613660046131e1565b61191b565b348015610a7257600080fd5b506104b2610a813660046132fa565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ab857600080fd5b506104b260085481565b348015610ace57600080fd5b506104b2601a5481565b348015610ae457600080fd5b506104e0610af33660046131fa565b6119df565b348015610b0457600080fd5b506104e0611a83565b348015610b1957600080fd5b506104b2600e5481565b348015610b2f57600080fd5b506104b260185481565b348015610b4557600080fd5b506104e0610b5436600461317c565b611ab9565b348015610b6557600080fd5b506104b2601d5481565b606060038054610b7e90613333565b80601f0160208091040260200160405190810160405280929190818152602001828054610baa90613333565b8015610bf75780601f10610bcc57610100808354040283529160200191610bf7565b820191906000526020600020905b815481529060010190602001808311610bda57829003601f168201915b5050505050905090565b6000610c0e338484611ba4565b5060015b92915050565b6001600160a01b03811615801590610c3a5750600d546001600160a01b031633145b610cb15760405162461bcd60e51b815260206004820152603b60248201527f616464726573732063616e6e6f7420626520302c20646576207465616d206f7760448201527f6e65722063616e206368616e676520746869732061646472657373000000000060648201526084015b60405180910390fd5b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ce0848484611cc9565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d655760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ca8565b610d728533858403611ba4565b506001949350505050565b6005546001600160a01b03163314610da75760405162461bcd60e51b8152600401610ca89061336d565b601254600160a81b900460ff1615610e015760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610ca8565b6012805461ffff60a81b191661010160a81b17905543600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b03163314610e6f5760405162461bcd60e51b8152600401610ca89061336d565b670de0b6b3a76400006103e8610e8460025490565b610e8f9060026133b8565b610e9991906133d7565b610ea391906133d7565b811015610ec25760405162461bcd60e51b8152600401610ca8906133f9565b610ed481670de0b6b3a76400006133b8565b60098190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610f3a5760405162461bcd60e51b8152600401610ca89061336d565b601784905560188390556019829055601a8190558082610f5a858761343d565b610f64919061343d565b610f6e919061343d565b601681905560041015610fb45760405162461bcd60e51b815260206004820152600e60248201526d3425206973206d6178204665652160901b6044820152606401610ca8565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c0e918590610ff190869061343d565b611ba4565b6005546001600160a01b031633146110205760405162461bcd60e51b8152600401610ca89061336d565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146110905760405162461bcd60e51b8152600401610ca89061336d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111045760405162461bcd60e51b8152600401610ca89061336d565b6012805460ff60a01b191690556015805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146111705760405162461bcd60e51b8152600401610ca89061336d565b806111ec576007546001600160a01b03908116908316036111ec5760405162461bcd60e51b815260206004820152603060248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526f36b0bc103a3930b739b0b1ba34b7b71760811b6064820152608401610ca8565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6008546112233061104b565b10156112975760405162461bcd60e51b815260206004820152603f60248201527f43616e206f6e6c792073776170207768656e20636f6e747261637420746f6b6560448201527f6e20616d6f756e7420697320686967686572207468616e206c696d69746564006064820152608401610ca8565b6112a182826127fd565b15611303576007805460ff60a01b1916600160a01b1790556112c16128ef565b6007805460ff60a01b191690556040514281527f0a93b8402a24e0ba12d633b9244b3f9a1315b093217db0297c463963ff535018906020015b60405180910390a15b5050565b606060048054610b7e90613333565b6005546001600160a01b031633146113405760405162461bcd60e51b8152600401610ca89061336d565b6007546001600160a01b03908116908316036113c45760405162461bcd60e51b815260206004820152603a60248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972732e0000000000006064820152608401610ca8565b6113ce8282612bce565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561148c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ca8565b6114993385858403611ba4565b5060019392505050565b6000610c0e338484611cc9565b6001600160a01b038116158015906114d25750600c546001600160a01b031633145b6115445760405162461bcd60e51b815260206004820152603c60248201527f616464726573732063616e6e6f7420626520302c206d61726b6574696e67206f60448201527f776e65722063616e206368616e676520746869732061646472657373000000006064820152608401610ca8565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146115905760405162461bcd60e51b8152600401610ca89061336d565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146116195760405162461bcd60e51b8152600401610ca89061336d565b670de0b6b3a76400006103e861162e60025490565b6116399060036133b8565b61164391906133d7565b61164d91906133d7565b8110156116a95760405162461bcd60e51b815260206004820152603660248201526000805160206135e083398151915260448201527510181719929037b3103a37ba30b61039bab838363c9760511b6064820152608401610ca8565b6116bb81670de0b6b3a76400006133b8565b600b8190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610f05565b600d5460405160009147916001600160a01b039091169082908481818185875af1925050503d8060008114611741576040519150601f19603f3d011682016040523d82523d6000602084013e611746565b606091505b50909392505050565b6005546001600160a01b031633146117795760405162461bcd60e51b8152600401610ca89061336d565b60005b82811015610fb457816010600086868581811061179b5761179b613455565b90506020020160208101906117b0919061317c565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806117e28161346b565b91505061177c565b6005546001600160a01b031633146118145760405162461bcd60e51b8152600401610ca89061336d565b620186a061182160025490565b61182c9060016133b8565b61183691906133d7565b8110156118995760405162461bcd60e51b815260206004820152603860248201526000805160206135e083398151915260448201527f20302e30303125206f6620746f74616c20737570706c792e00000000000000006064820152608401610ca8565b6103e86118a560025490565b6118b09060016133b8565b6118ba91906133d7565b8111156119165760405162461bcd60e51b815260206004820152603660248201526000805160206135e083398151915260448201527510181718929037b3103a37ba30b61039bab838363c9760511b6064820152608401610ca8565b600855565b6005546001600160a01b031633146119455760405162461bcd60e51b8152600401610ca89061336d565b670de0b6b3a76400006103e861195a60025490565b6119659060026133b8565b61196f91906133d7565b61197991906133d7565b8110156119985760405162461bcd60e51b8152600401610ca8906133f9565b6119aa81670de0b6b3a76400006133b8565b600a8190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f05565b6005546001600160a01b03163314611a095760405162461bcd60e51b8152600401610ca89061336d565b601c849055601d839055601e829055601f8190558082611a29858761343d565b611a33919061343d565b611a3d919061343d565b601b81905560041015610fb45760405162461bcd60e51b815260206004820152600e60248201526d3425206973206d6178204665652160901b6044820152606401610ca8565b6005546001600160a01b03163314611aad5760405162461bcd60e51b8152600401610ca89061336d565b6015805460ff19169055565b6005546001600160a01b03163314611ae35760405162461bcd60e51b8152600401610ca89061336d565b6001600160a01b038116611b485760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ca8565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611c065760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ca8565b6001600160a01b038216611c675760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ca8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611cef5760405162461bcd60e51b8152600401610ca890613484565b6001600160a01b038216611d155760405162461bcd60e51b8152600401610ca8906134c9565b60008111611d655760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ca8565b601254600160a81b900460ff16611e01576001600160a01b03831660009081526024602052604090205460ff1680611db557506001600160a01b03821660009081526024602052604090205460ff165b611e015760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206973206e6f7420616374697665642e0000000000000000006044820152606401610ca8565b600f5415611eb0576001600160a01b03831660009081526010602052604090205460ff161580611e3e57506005546001600160a01b038381169116145b80611e5357506001600160a01b03821661dead145b611eb05760405162461bcd60e51b815260206004820152602860248201527f616e74692d626f742070726f74656374696f6e206d656368616e69736d20697360448201526708195b589959195960c21b6064820152608401610ca8565b6007546001600160a01b0390811690841603611f06576001600160a01b0382166000908152601360205260408120549003611f01576001600160a01b03821660009081526013602052604090204290555b611f33565b600754600160a01b900460ff16611f3357601280546001600160a01b0319166001600160a01b0385161790555b601254600160a01b900460ff16156122c5576005546001600160a01b03848116911614801590611f7157506005546001600160a01b03838116911614155b8015611f8557506001600160a01b03821615155b8015611f9c57506001600160a01b03821661dead14155b8015611fc157506001600160a01b03831660009081526024602052604090205460ff16155b8015611fe657506001600160a01b03821660009081526024602052604090205460ff16155b156122c55760155460ff161561209e576006546001600160a01b0383811691161480159061202257506007546001600160a01b03838116911614155b1561209e5761203260024361350c565b32600090815260146020526040902054108015612070575061205560024361350c565b6001600160a01b038316600090815260146020526040902054105b61207957600080fd5b3260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526026602052604090205460ff1680156120df57506001600160a01b03821660009081526025602052604090205460ff16155b1561219f576009548111156121365760405162461bcd60e51b815260206004820152601f60248201527f42757920616d6f756e74206578636565647320746865206d6178206275792e006044820152606401610ca8565b600b546121428361104b565b61214c908361343d565b111561219a5760405162461bcd60e51b815260206004820152601e60248201527f42757920616d6f756e742065786365656473206d61782077616c6c65742e00006044820152606401610ca8565b6122c5565b6001600160a01b03821660009081526026602052604090205460ff1680156121e057506001600160a01b03831660009081526025602052604090205460ff16155b1561224157600a5481111561219a5760405162461bcd60e51b815260206004820152602160248201527f53656c6c20616d6f756e74206578636565647320746865206d61782073656c6c6044820152601760f91b6064820152608401610ca8565b6001600160a01b03821660009081526025602052604090205460ff166122c557600b5461226d8361104b565b612277908361343d565b11156122c55760405162461bcd60e51b815260206004820152601e60248201527f53656c6c20616d6f756e742065786365656473206d61782077616c6c657400006044820152606401610ca8565b60006122d03061104b565b600854909150811080159081906122f05750601254600160b01b900460ff165b80156123065750600754600160a01b900460ff16155b801561232b57506001600160a01b03851660009081526026602052604090205460ff16155b801561235057506001600160a01b03851660009081526024602052604090205460ff16155b801561237557506001600160a01b03841660009081526024602052604090205460ff16155b156123a3576007805460ff60a01b1916600160a01b1790556123956128ef565b6007805460ff60a01b191690555b6001600160a01b03851660009081526024602052604090205460019060ff16806123e557506001600160a01b03851660009081526024602052604090205460ff165b156123ee575060005b600081156127e957600f544310801561241f57506001600160a01b03871660009081526026602052604090205460ff165b801561244457506001600160a01b03861660009081526026602052604090205460ff16155b801561245257506000601654115b156125d2576001600160a01b03861660009081526010602052604090205460ff166124f2576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560118054919290916124b090849061343d565b90915550506040516001600160a01b03871681527f4ea48afa19a9d5653f93e0be92cfb4c7e4723f6d173f910810da8cd94901cc2b9060200160405180910390a15b60646124ff8660636133b8565b61250991906133d7565b90506016546018548261251c91906133b8565b61252691906133d7565b60216000828254612537919061343d565b909155505060165460175461254c90836133b8565b61255691906133d7565b60206000828254612567919061343d565b909155505060165460195461257c90836133b8565b61258691906133d7565b60226000828254612597919061343d565b9091555050601654601a546125ac90836133b8565b6125b691906133d7565b602360008282546125c7919061343d565b909155506127cb9050565b6001600160a01b03861660009081526026602052604090205460ff1680156125fc57506000601b54115b156126be576064601b548661261191906133b8565b61261b91906133d7565b9050601b54601d548261262e91906133b8565b61263891906133d7565b60216000828254612649919061343d565b9091555050601b54601c5461265e90836133b8565b61266891906133d7565b60206000828254612679919061343d565b9091555050601b54601e5461268e90836133b8565b61269891906133d7565b602260008282546126a9919061343d565b9091555050601b54601f546125ac90836133b8565b6001600160a01b03871660009081526026602052604090205460ff1680156126e857506000601654115b156127cb576064601654866126fd91906133b8565b61270791906133d7565b90506016546018548261271a91906133b8565b61272491906133d7565b60216000828254612735919061343d565b909155505060165460175461274a90836133b8565b61275491906133d7565b60206000828254612765919061343d565b909155505060165460195461277a90836133b8565b61278491906133d7565b60226000828254612795919061343d565b9091555050601654601a546127aa90836133b8565b6127b491906133d7565b602360008282546127c5919061343d565b90915550505b80156127dc576127dc873083612bfc565b6127e6818661350c565b94505b6127f4878787612bfc565b50505050505050565b33600090815260246020526040812054819060ff166128c7576000602354118015612832575060235461282f3061104b565b10155b156128435761284333602354612d51565b50600060238190556001906128573061104b565b9050600060225460205460215461286e919061343d565b612878919061343d565b9050811580612885575080155b156128965760009350505050610c12565b6008546128a49060076133b8565b8211156128bc576008546128b99060076133b8565b91505b829350505050610c12565b826128d13061104b565b116128e4576128e08484612d51565b5060005b60006128573061104b565b600060235411801561290b57506023546129083061104b565b10155b1561291c5761291c30602354612d51565b6000602381905561292c3061104b565b90506000602254602054602154612943919061343d565b61294d919061343d565b905081158061295a575080155b15612963575050565b6008546129719060056133b8565b821115612989576008546129869060056133b8565b91505b6000806002836021548661299d91906133b8565b6129a791906133d7565b6129b191906133d7565b90506129c56129c0828661350c565b612e7b565b602154479081906000906129db906002906133d7565b6129e5908761350c565b6020546129f290856133b8565b6129fc91906133d7565b905060006002602154612a0f91906133d7565b612a19908861350c565b602254612a2690866133b8565b612a3091906133d7565b9050612a3c818361343d565b612a46908461350c565b600060218190556020819055602281905560235592508415801590612a6b5750600083115b15612a7a57612a7a8584612fd5565b600d546040516001600160a01b03909116908290600081818185875af1925050503d8060008114612ac7576040519150601f19603f3d011682016040523d82523d6000602084013e612acc565b606091505b50508096505085612b1f5760405162461bcd60e51b815260206004820152601a60248201527f7472616e736665722066656520746f206465762077616c6c65740000000000006044820152606401610ca8565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612b6c576040519150601f19603f3d011682016040523d82523d6000602084013e612b71565b606091505b50508096505085612bc45760405162461bcd60e51b815260206004820181905260248201527f7472616e736665722066656520746f206d61726b6574696e672077616c6c65746044820152606401610ca8565b5050505050505050565b6001600160a01b0382166000908152602660205260409020805460ff19168215151790556113ce8282613087565b6001600160a01b038316612c225760405162461bcd60e51b8152600401610ca890613484565b6001600160a01b038216612c485760405162461bcd60e51b8152600401610ca8906134c9565b6001600160a01b03831660009081526020819052604090205481811015612cc05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ca8565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612cf790849061343d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d4391815260200190565b60405180910390a350505050565b6001600160a01b038216612db15760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610ca8565b6001600160a01b03821660009081526020819052604090205481811015612e255760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610ca8565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611cbc565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612eb057612eb0613455565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f2d9190613523565b81600181518110612f4057612f40613455565b6001600160a01b039283166020918202929092010152600654612f669130911684611ba4565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f9f908590600090869030904290600401613540565b600060405180830381600087803b158015612fb957600080fd5b505af1158015612fcd573d6000803e3d6000fd5b505050505050565b600654612fed9030906001600160a01b031684611ba4565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561305b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061308091906135b1565b5050505050565b6001600160a01b038216600081815260256020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd674691016112fa565b600060208083528351808285015260005b81811015613110578581018301518582016040015282016130f4565b81811115613122576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461314d57600080fd5b50565b6000806040838503121561316357600080fd5b823561316e81613138565b946020939093013593505050565b60006020828403121561318e57600080fd5b813561319981613138565b9392505050565b6000806000606084860312156131b557600080fd5b83356131c081613138565b925060208401356131d081613138565b929592945050506040919091013590565b6000602082840312156131f357600080fd5b5035919050565b6000806000806080858703121561321057600080fd5b5050823594602084013594506040840135936060013592509050565b8035801515811461323c57600080fd5b919050565b6000806040838503121561325457600080fd5b823561325f81613138565b915061326d6020840161322c565b90509250929050565b60008060006040848603121561328b57600080fd5b833567ffffffffffffffff808211156132a357600080fd5b818601915086601f8301126132b757600080fd5b8135818111156132c657600080fd5b8760208260051b85010111156132db57600080fd5b6020928301955093506132f1918601905061322c565b90509250925092565b6000806040838503121561330d57600080fd5b823561331881613138565b9150602083013561332881613138565b809150509250929050565b600181811c9082168061334757607f821691505b60208210810361336757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156133d2576133d26133a2565b500290565b6000826133f457634e487b7160e01b600052601260045260246000fd5b500490565b60208082526036908201526000805160206135e083398151915260408201527510181719129037b3103a37ba30b61039bab838363c9760511b606082015260800190565b60008219821115613450576134506133a2565b500190565b634e487b7160e01b600052603260045260246000fd5b60006001820161347d5761347d6133a2565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561351e5761351e6133a2565b500390565b60006020828403121561353557600080fd5b815161319981613138565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135905784516001600160a01b03168352938301939183019160010161356b565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156135c657600080fd5b835192506020840151915060408401519050925092509256fe54686520616d6f756e742073686f756c6420626520686967686572207468616ea2646970667358221220f987961c31c01d53563e52bccf82967901392121e38f9ed94da5cdf5254448a464736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103d25760003560e01c80638c54bc1f116101fd578063c024666811610118578063dd62ed3e116100ab578063e884f2601161007a578063e884f26014610af8578063ee40166e14610b0d578063f11a24d314610b23578063f2fde38b14610b39578063f637434214610b5957600080fd5b8063dd62ed3e14610a66578063e2f4560514610aac578063e71dc3f514610ac2578063e7ad9fcd14610ad857600080fd5b8063ce897604116100e7578063ce897604146109f0578063d257b34f14610a10578063d85ba06314610a30578063dc3f0d0f14610a4657600080fd5b8063c024666814610981578063c18bc195146109a1578063c753fe13146109c1578063c876d0b9146109d657600080fd5b8063a0d82dc511610190578063aacebbe31161015f578063aacebbe3146108fa578063adb873bd1461091a578063b62496f514610930578063bbc0c7421461096057600080fd5b8063a0d82dc51461088e578063a457c2d7146108a4578063a9059cbb146108c4578063aa4bde28146108e457600080fd5b806395d89b41116101cc57806395d89b411461082d5780639a7a23d6146108425780639c3b4fdc146108625780639fccce321461087857600080fd5b80638c54bc1f146107c35780638da5cb5b146107e35780638dce473414610801578063921369131461081757600080fd5b80634a62bb65116102ed57806370a08231116102805780637bce5a041161024f5780637bce5a0414610760578063808a545714610776578063841640041461079657806388e765ff146107ad57600080fd5b806370a08231146106f6578063715018a614610716578063751039fc1461072b5780637571336a1461074057600080fd5b806366d602ae116102bc57806366d602ae146106935780636a486a8e146106a95780636b0a894c146106bf5780636ddd1713146106d557600080fd5b80634a62bb65146105f557806350e4be891461061657806359d24b8e146106365780635b2a623f1461066657600080fd5b80631f3fed8f116103655780632e6ed7ef116103345780632e6ed7ef14610579578063313ce5671461059957806339509351146105b55780633c2e0abe146105d557600080fd5b80631f3fed8f1461050e57806323b872dd14610524578063293230b8146105445780632be32b611461055957600080fd5b806318160ddd116103a157806318160ddd146104a15780631816467f146104c05780631a8145bb146104e25780631d777856146104f857600080fd5b806306fdde03146103de5780630758d92414610409578063095ea7b31461044157806310d5de531461047157600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610b6f565b60405161040091906130e3565b60405180910390f35b34801561041557600080fd5b50600654610429906001600160a01b031681565b6040516001600160a01b039091168152602001610400565b34801561044d57600080fd5b5061046161045c366004613150565b610c01565b6040519015158152602001610400565b34801561047d57600080fd5b5061046161048c36600461317c565b60256020526000908152604090205460ff1681565b3480156104ad57600080fd5b506002545b604051908152602001610400565b3480156104cc57600080fd5b506104e06104db36600461317c565b610c18565b005b3480156104ee57600080fd5b506104b260215481565b34801561050457600080fd5b506104b260235481565b34801561051a57600080fd5b506104b260205481565b34801561053057600080fd5b5061046161053f3660046131a0565b610cd3565b34801561055057600080fd5b506104e0610d7d565b34801561056557600080fd5b506104e06105743660046131e1565b610e45565b34801561058557600080fd5b506104e06105943660046131fa565b610f10565b3480156105a557600080fd5b5060405160128152602001610400565b3480156105c157600080fd5b506104616105d0366004613150565b610fba565b3480156105e157600080fd5b50601254610429906001600160a01b031681565b34801561060157600080fd5b5060125461046190600160a01b900460ff1681565b34801561062257600080fd5b506104e0610631366004613241565b610ff6565b34801561064257600080fd5b5061046161065136600461317c565b60106020526000908152604090205460ff1681565b34801561067257600080fd5b506104b261068136600461317c565b60136020526000908152604090205481565b34801561069f57600080fd5b506104b2600a5481565b3480156106b557600080fd5b506104b2601b5481565b3480156106cb57600080fd5b506104b260115481565b3480156106e157600080fd5b5060125461046190600160b01b900460ff1681565b34801561070257600080fd5b506104b261071136600461317c565b61104b565b34801561072257600080fd5b506104e0611066565b34801561073757600080fd5b506104e06110da565b34801561074c57600080fd5b506104e061075b366004613241565b611146565b34801561076c57600080fd5b506104b260175481565b34801561078257600080fd5b50600754610429906001600160a01b031681565b3480156107a257600080fd5b50600f544310610461565b3480156107b957600080fd5b506104b260095481565b3480156107cf57600080fd5b506104e06107de366004613150565b611217565b3480156107ef57600080fd5b506005546001600160a01b0316610429565b34801561080d57600080fd5b506104b2600f5481565b34801561082357600080fd5b506104b2601c5481565b34801561083957600080fd5b506103f3611307565b34801561084e57600080fd5b506104e061085d366004613241565b611316565b34801561086e57600080fd5b506104b260195481565b34801561088457600080fd5b506104b260225481565b34801561089a57600080fd5b506104b2601e5481565b3480156108b057600080fd5b506104616108bf366004613150565b61140a565b3480156108d057600080fd5b506104616108df366004613150565b6114a3565b3480156108f057600080fd5b506104b2600b5481565b34801561090657600080fd5b506104e061091536600461317c565b6114b0565b34801561092657600080fd5b506104b2601f5481565b34801561093c57600080fd5b5061046161094b36600461317c565b60266020526000908152604090205460ff1681565b34801561096c57600080fd5b5060125461046190600160a81b900460ff1681565b34801561098d57600080fd5b506104e061099c366004613241565b611566565b3480156109ad57600080fd5b506104e06109bc3660046131e1565b6115ef565b3480156109cd57600080fd5b506104616116f0565b3480156109e257600080fd5b506015546104619060ff1681565b3480156109fc57600080fd5b506104e0610a0b366004613276565b61174f565b348015610a1c57600080fd5b506104e0610a2b3660046131e1565b6117ea565b348015610a3c57600080fd5b506104b260165481565b348015610a5257600080fd5b506104e0610a613660046131e1565b61191b565b348015610a7257600080fd5b506104b2610a813660046132fa565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ab857600080fd5b506104b260085481565b348015610ace57600080fd5b506104b2601a5481565b348015610ae457600080fd5b506104e0610af33660046131fa565b6119df565b348015610b0457600080fd5b506104e0611a83565b348015610b1957600080fd5b506104b2600e5481565b348015610b2f57600080fd5b506104b260185481565b348015610b4557600080fd5b506104e0610b5436600461317c565b611ab9565b348015610b6557600080fd5b506104b2601d5481565b606060038054610b7e90613333565b80601f0160208091040260200160405190810160405280929190818152602001828054610baa90613333565b8015610bf75780601f10610bcc57610100808354040283529160200191610bf7565b820191906000526020600020905b815481529060010190602001808311610bda57829003601f168201915b5050505050905090565b6000610c0e338484611ba4565b5060015b92915050565b6001600160a01b03811615801590610c3a5750600d546001600160a01b031633145b610cb15760405162461bcd60e51b815260206004820152603b60248201527f616464726573732063616e6e6f7420626520302c20646576207465616d206f7760448201527f6e65722063616e206368616e676520746869732061646472657373000000000060648201526084015b60405180910390fd5b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ce0848484611cc9565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d655760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ca8565b610d728533858403611ba4565b506001949350505050565b6005546001600160a01b03163314610da75760405162461bcd60e51b8152600401610ca89061336d565b601254600160a81b900460ff1615610e015760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610ca8565b6012805461ffff60a81b191661010160a81b17905543600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b03163314610e6f5760405162461bcd60e51b8152600401610ca89061336d565b670de0b6b3a76400006103e8610e8460025490565b610e8f9060026133b8565b610e9991906133d7565b610ea391906133d7565b811015610ec25760405162461bcd60e51b8152600401610ca8906133f9565b610ed481670de0b6b3a76400006133b8565b60098190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610f3a5760405162461bcd60e51b8152600401610ca89061336d565b601784905560188390556019829055601a8190558082610f5a858761343d565b610f64919061343d565b610f6e919061343d565b601681905560041015610fb45760405162461bcd60e51b815260206004820152600e60248201526d3425206973206d6178204665652160901b6044820152606401610ca8565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c0e918590610ff190869061343d565b611ba4565b6005546001600160a01b031633146110205760405162461bcd60e51b8152600401610ca89061336d565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146110905760405162461bcd60e51b8152600401610ca89061336d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111045760405162461bcd60e51b8152600401610ca89061336d565b6012805460ff60a01b191690556015805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146111705760405162461bcd60e51b8152600401610ca89061336d565b806111ec576007546001600160a01b03908116908316036111ec5760405162461bcd60e51b815260206004820152603060248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526f36b0bc103a3930b739b0b1ba34b7b71760811b6064820152608401610ca8565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6008546112233061104b565b10156112975760405162461bcd60e51b815260206004820152603f60248201527f43616e206f6e6c792073776170207768656e20636f6e747261637420746f6b6560448201527f6e20616d6f756e7420697320686967686572207468616e206c696d69746564006064820152608401610ca8565b6112a182826127fd565b15611303576007805460ff60a01b1916600160a01b1790556112c16128ef565b6007805460ff60a01b191690556040514281527f0a93b8402a24e0ba12d633b9244b3f9a1315b093217db0297c463963ff535018906020015b60405180910390a15b5050565b606060048054610b7e90613333565b6005546001600160a01b031633146113405760405162461bcd60e51b8152600401610ca89061336d565b6007546001600160a01b03908116908316036113c45760405162461bcd60e51b815260206004820152603a60248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972732e0000000000006064820152608401610ca8565b6113ce8282612bce565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561148c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ca8565b6114993385858403611ba4565b5060019392505050565b6000610c0e338484611cc9565b6001600160a01b038116158015906114d25750600c546001600160a01b031633145b6115445760405162461bcd60e51b815260206004820152603c60248201527f616464726573732063616e6e6f7420626520302c206d61726b6574696e67206f60448201527f776e65722063616e206368616e676520746869732061646472657373000000006064820152608401610ca8565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146115905760405162461bcd60e51b8152600401610ca89061336d565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146116195760405162461bcd60e51b8152600401610ca89061336d565b670de0b6b3a76400006103e861162e60025490565b6116399060036133b8565b61164391906133d7565b61164d91906133d7565b8110156116a95760405162461bcd60e51b815260206004820152603660248201526000805160206135e083398151915260448201527510181719929037b3103a37ba30b61039bab838363c9760511b6064820152608401610ca8565b6116bb81670de0b6b3a76400006133b8565b600b8190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610f05565b600d5460405160009147916001600160a01b039091169082908481818185875af1925050503d8060008114611741576040519150601f19603f3d011682016040523d82523d6000602084013e611746565b606091505b50909392505050565b6005546001600160a01b031633146117795760405162461bcd60e51b8152600401610ca89061336d565b60005b82811015610fb457816010600086868581811061179b5761179b613455565b90506020020160208101906117b0919061317c565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806117e28161346b565b91505061177c565b6005546001600160a01b031633146118145760405162461bcd60e51b8152600401610ca89061336d565b620186a061182160025490565b61182c9060016133b8565b61183691906133d7565b8110156118995760405162461bcd60e51b815260206004820152603860248201526000805160206135e083398151915260448201527f20302e30303125206f6620746f74616c20737570706c792e00000000000000006064820152608401610ca8565b6103e86118a560025490565b6118b09060016133b8565b6118ba91906133d7565b8111156119165760405162461bcd60e51b815260206004820152603660248201526000805160206135e083398151915260448201527510181718929037b3103a37ba30b61039bab838363c9760511b6064820152608401610ca8565b600855565b6005546001600160a01b031633146119455760405162461bcd60e51b8152600401610ca89061336d565b670de0b6b3a76400006103e861195a60025490565b6119659060026133b8565b61196f91906133d7565b61197991906133d7565b8110156119985760405162461bcd60e51b8152600401610ca8906133f9565b6119aa81670de0b6b3a76400006133b8565b600a8190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f05565b6005546001600160a01b03163314611a095760405162461bcd60e51b8152600401610ca89061336d565b601c849055601d839055601e829055601f8190558082611a29858761343d565b611a33919061343d565b611a3d919061343d565b601b81905560041015610fb45760405162461bcd60e51b815260206004820152600e60248201526d3425206973206d6178204665652160901b6044820152606401610ca8565b6005546001600160a01b03163314611aad5760405162461bcd60e51b8152600401610ca89061336d565b6015805460ff19169055565b6005546001600160a01b03163314611ae35760405162461bcd60e51b8152600401610ca89061336d565b6001600160a01b038116611b485760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ca8565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611c065760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ca8565b6001600160a01b038216611c675760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ca8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611cef5760405162461bcd60e51b8152600401610ca890613484565b6001600160a01b038216611d155760405162461bcd60e51b8152600401610ca8906134c9565b60008111611d655760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ca8565b601254600160a81b900460ff16611e01576001600160a01b03831660009081526024602052604090205460ff1680611db557506001600160a01b03821660009081526024602052604090205460ff165b611e015760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206973206e6f7420616374697665642e0000000000000000006044820152606401610ca8565b600f5415611eb0576001600160a01b03831660009081526010602052604090205460ff161580611e3e57506005546001600160a01b038381169116145b80611e5357506001600160a01b03821661dead145b611eb05760405162461bcd60e51b815260206004820152602860248201527f616e74692d626f742070726f74656374696f6e206d656368616e69736d20697360448201526708195b589959195960c21b6064820152608401610ca8565b6007546001600160a01b0390811690841603611f06576001600160a01b0382166000908152601360205260408120549003611f01576001600160a01b03821660009081526013602052604090204290555b611f33565b600754600160a01b900460ff16611f3357601280546001600160a01b0319166001600160a01b0385161790555b601254600160a01b900460ff16156122c5576005546001600160a01b03848116911614801590611f7157506005546001600160a01b03838116911614155b8015611f8557506001600160a01b03821615155b8015611f9c57506001600160a01b03821661dead14155b8015611fc157506001600160a01b03831660009081526024602052604090205460ff16155b8015611fe657506001600160a01b03821660009081526024602052604090205460ff16155b156122c55760155460ff161561209e576006546001600160a01b0383811691161480159061202257506007546001600160a01b03838116911614155b1561209e5761203260024361350c565b32600090815260146020526040902054108015612070575061205560024361350c565b6001600160a01b038316600090815260146020526040902054105b61207957600080fd5b3260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526026602052604090205460ff1680156120df57506001600160a01b03821660009081526025602052604090205460ff16155b1561219f576009548111156121365760405162461bcd60e51b815260206004820152601f60248201527f42757920616d6f756e74206578636565647320746865206d6178206275792e006044820152606401610ca8565b600b546121428361104b565b61214c908361343d565b111561219a5760405162461bcd60e51b815260206004820152601e60248201527f42757920616d6f756e742065786365656473206d61782077616c6c65742e00006044820152606401610ca8565b6122c5565b6001600160a01b03821660009081526026602052604090205460ff1680156121e057506001600160a01b03831660009081526025602052604090205460ff16155b1561224157600a5481111561219a5760405162461bcd60e51b815260206004820152602160248201527f53656c6c20616d6f756e74206578636565647320746865206d61782073656c6c6044820152601760f91b6064820152608401610ca8565b6001600160a01b03821660009081526025602052604090205460ff166122c557600b5461226d8361104b565b612277908361343d565b11156122c55760405162461bcd60e51b815260206004820152601e60248201527f53656c6c20616d6f756e742065786365656473206d61782077616c6c657400006044820152606401610ca8565b60006122d03061104b565b600854909150811080159081906122f05750601254600160b01b900460ff165b80156123065750600754600160a01b900460ff16155b801561232b57506001600160a01b03851660009081526026602052604090205460ff16155b801561235057506001600160a01b03851660009081526024602052604090205460ff16155b801561237557506001600160a01b03841660009081526024602052604090205460ff16155b156123a3576007805460ff60a01b1916600160a01b1790556123956128ef565b6007805460ff60a01b191690555b6001600160a01b03851660009081526024602052604090205460019060ff16806123e557506001600160a01b03851660009081526024602052604090205460ff165b156123ee575060005b600081156127e957600f544310801561241f57506001600160a01b03871660009081526026602052604090205460ff165b801561244457506001600160a01b03861660009081526026602052604090205460ff16155b801561245257506000601654115b156125d2576001600160a01b03861660009081526010602052604090205460ff166124f2576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560118054919290916124b090849061343d565b90915550506040516001600160a01b03871681527f4ea48afa19a9d5653f93e0be92cfb4c7e4723f6d173f910810da8cd94901cc2b9060200160405180910390a15b60646124ff8660636133b8565b61250991906133d7565b90506016546018548261251c91906133b8565b61252691906133d7565b60216000828254612537919061343d565b909155505060165460175461254c90836133b8565b61255691906133d7565b60206000828254612567919061343d565b909155505060165460195461257c90836133b8565b61258691906133d7565b60226000828254612597919061343d565b9091555050601654601a546125ac90836133b8565b6125b691906133d7565b602360008282546125c7919061343d565b909155506127cb9050565b6001600160a01b03861660009081526026602052604090205460ff1680156125fc57506000601b54115b156126be576064601b548661261191906133b8565b61261b91906133d7565b9050601b54601d548261262e91906133b8565b61263891906133d7565b60216000828254612649919061343d565b9091555050601b54601c5461265e90836133b8565b61266891906133d7565b60206000828254612679919061343d565b9091555050601b54601e5461268e90836133b8565b61269891906133d7565b602260008282546126a9919061343d565b9091555050601b54601f546125ac90836133b8565b6001600160a01b03871660009081526026602052604090205460ff1680156126e857506000601654115b156127cb576064601654866126fd91906133b8565b61270791906133d7565b90506016546018548261271a91906133b8565b61272491906133d7565b60216000828254612735919061343d565b909155505060165460175461274a90836133b8565b61275491906133d7565b60206000828254612765919061343d565b909155505060165460195461277a90836133b8565b61278491906133d7565b60226000828254612795919061343d565b9091555050601654601a546127aa90836133b8565b6127b491906133d7565b602360008282546127c5919061343d565b90915550505b80156127dc576127dc873083612bfc565b6127e6818661350c565b94505b6127f4878787612bfc565b50505050505050565b33600090815260246020526040812054819060ff166128c7576000602354118015612832575060235461282f3061104b565b10155b156128435761284333602354612d51565b50600060238190556001906128573061104b565b9050600060225460205460215461286e919061343d565b612878919061343d565b9050811580612885575080155b156128965760009350505050610c12565b6008546128a49060076133b8565b8211156128bc576008546128b99060076133b8565b91505b829350505050610c12565b826128d13061104b565b116128e4576128e08484612d51565b5060005b60006128573061104b565b600060235411801561290b57506023546129083061104b565b10155b1561291c5761291c30602354612d51565b6000602381905561292c3061104b565b90506000602254602054602154612943919061343d565b61294d919061343d565b905081158061295a575080155b15612963575050565b6008546129719060056133b8565b821115612989576008546129869060056133b8565b91505b6000806002836021548661299d91906133b8565b6129a791906133d7565b6129b191906133d7565b90506129c56129c0828661350c565b612e7b565b602154479081906000906129db906002906133d7565b6129e5908761350c565b6020546129f290856133b8565b6129fc91906133d7565b905060006002602154612a0f91906133d7565b612a19908861350c565b602254612a2690866133b8565b612a3091906133d7565b9050612a3c818361343d565b612a46908461350c565b600060218190556020819055602281905560235592508415801590612a6b5750600083115b15612a7a57612a7a8584612fd5565b600d546040516001600160a01b03909116908290600081818185875af1925050503d8060008114612ac7576040519150601f19603f3d011682016040523d82523d6000602084013e612acc565b606091505b50508096505085612b1f5760405162461bcd60e51b815260206004820152601a60248201527f7472616e736665722066656520746f206465762077616c6c65740000000000006044820152606401610ca8565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612b6c576040519150601f19603f3d011682016040523d82523d6000602084013e612b71565b606091505b50508096505085612bc45760405162461bcd60e51b815260206004820181905260248201527f7472616e736665722066656520746f206d61726b6574696e672077616c6c65746044820152606401610ca8565b5050505050505050565b6001600160a01b0382166000908152602660205260409020805460ff19168215151790556113ce8282613087565b6001600160a01b038316612c225760405162461bcd60e51b8152600401610ca890613484565b6001600160a01b038216612c485760405162461bcd60e51b8152600401610ca8906134c9565b6001600160a01b03831660009081526020819052604090205481811015612cc05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ca8565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612cf790849061343d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d4391815260200190565b60405180910390a350505050565b6001600160a01b038216612db15760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610ca8565b6001600160a01b03821660009081526020819052604090205481811015612e255760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610ca8565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611cbc565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612eb057612eb0613455565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f2d9190613523565b81600181518110612f4057612f40613455565b6001600160a01b039283166020918202929092010152600654612f669130911684611ba4565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f9f908590600090869030904290600401613540565b600060405180830381600087803b158015612fb957600080fd5b505af1158015612fcd573d6000803e3d6000fd5b505050505050565b600654612fed9030906001600160a01b031684611ba4565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561305b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061308091906135b1565b5050505050565b6001600160a01b038216600081815260256020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd674691016112fa565b600060208083528351808285015260005b81811015613110578581018301518582016040015282016130f4565b81811115613122576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461314d57600080fd5b50565b6000806040838503121561316357600080fd5b823561316e81613138565b946020939093013593505050565b60006020828403121561318e57600080fd5b813561319981613138565b9392505050565b6000806000606084860312156131b557600080fd5b83356131c081613138565b925060208401356131d081613138565b929592945050506040919091013590565b6000602082840312156131f357600080fd5b5035919050565b6000806000806080858703121561321057600080fd5b5050823594602084013594506040840135936060013592509050565b8035801515811461323c57600080fd5b919050565b6000806040838503121561325457600080fd5b823561325f81613138565b915061326d6020840161322c565b90509250929050565b60008060006040848603121561328b57600080fd5b833567ffffffffffffffff808211156132a357600080fd5b818601915086601f8301126132b757600080fd5b8135818111156132c657600080fd5b8760208260051b85010111156132db57600080fd5b6020928301955093506132f1918601905061322c565b90509250925092565b6000806040838503121561330d57600080fd5b823561331881613138565b9150602083013561332881613138565b809150509250929050565b600181811c9082168061334757607f821691505b60208210810361336757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156133d2576133d26133a2565b500290565b6000826133f457634e487b7160e01b600052601260045260246000fd5b500490565b60208082526036908201526000805160206135e083398151915260408201527510181719129037b3103a37ba30b61039bab838363c9760511b606082015260800190565b60008219821115613450576134506133a2565b500190565b634e487b7160e01b600052603260045260246000fd5b60006001820161347d5761347d6133a2565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561351e5761351e6133a2565b500390565b60006020828403121561353557600080fd5b815161319981613138565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135905784516001600160a01b03168352938301939183019160010161356b565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156135c657600080fd5b835192506020840151915060408401519050925092509256fe54686520616d6f756e742073686f756c6420626520686967686572207468616ea2646970667358221220f987961c31c01d53563e52bccf82967901392121e38f9ed94da5cdf5254448a464736f6c634300080f0033

Deployed Bytecode Sourcemap

8352:19834:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1907:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8404:27;;;;;;;;;;-1:-1:-1;8404:27:0;;;;-1:-1:-1;;;;;8404:27:0;;;;;;-1:-1:-1;;;;;798:32:1;;;780:51;;768:2;753:18;8404:27:0;616:221:1;2887:194:0;;;;;;;;;;-1:-1:-1;2887:194:0;;;;;:::i;:::-;;:::i;:::-;;;1463:14:1;;1456:22;1438:41;;1426:2;1411:18;2887:194:0;1298:187:1;9784:63:0;;;;;;;;;;-1:-1:-1;9784:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;2228:108;;;;;;;;;;-1:-1:-1;2316:12:0;;2228:108;;;1888:25:1;;;1876:2;1861:18;2228:108:0;1742:177:1;27958:225:0;;;;;;;;;;-1:-1:-1;27958:225:0;;;;;:::i;:::-;;:::i;:::-;;9586:33;;;;;;;;;;;;;;;;9660:28;;;;;;;;;;;;;;;;9546:33;;;;;;;;;;;;;;;;3089:529;;;;;;;;;;-1:-1:-1;3089:529:0;;;;;:::i;:::-;;:::i;12685:248::-;;;;;;;;;;;;;:::i;13646:302::-;;;;;;;;;;-1:-1:-1;13646:302:0;;;;;:::i;:::-;;:::i;16166:511::-;;;;;;;;;;-1:-1:-1;16166:511:0;;;;;:::i;:::-;;:::i;2127:93::-;;;;;;;;;;-1:-1:-1;2127:93:0;;2210:2;3102:36:1;;3090:2;3075:18;2127:93:0;2960:184:1;3626:290:0;;;;;;;;;;-1:-1:-1;3626:290:0;;;;;:::i;:::-;;:::i;8878:22::-;;;;;;;;;;-1:-1:-1;8878:22:0;;;;-1:-1:-1;;;;;8878:22:0;;;8907:33;;;;;;;;;;-1:-1:-1;8907:33:0;;;;-1:-1:-1;;;8907:33:0;;;;;;12941:130;;;;;;;;;;-1:-1:-1;12941:130:0;;;;;:::i;:::-;;:::i;8792:47::-;;;;;;;;;;-1:-1:-1;8792:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9025:45;;;;;;;;;;-1:-1:-1;9025:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;8579:28;;;;;;;;;;;;;;;;9368;;;;;;;;;;;;;;;;8846:25;;;;;;;;;;;;;;;;8987:31;;;;;;;;;;-1:-1:-1;8987:31:0;;;;-1:-1:-1;;;8987:31:0;;;;;;2344:143;;;;;;;;;;-1:-1:-1;2344:143:0;;;;;:::i;:::-;;:::i;6880:150::-;;;;;;;;;;;;;:::i;13079:154::-;;;;;;;;;;;;;:::i;15269:304::-;;;;;;;;;;-1:-1:-1;15269:304:0;;;;;:::i;:::-;;:::i;9229:30::-;;;;;;;;;;;;;;;;8438:28;;;;;;;;;;-1:-1:-1;8438:28:0;;;;-1:-1:-1;;;;;8438:28:0;;;22541:111;;;;;;;;;;-1:-1:-1;22633:11:0;;22618:12;:26;22541:111;;8545:27;;;;;;;;;;;;;;;;27255:433;;;;;;;;;;-1:-1:-1;27255:433:0;;;;;:::i;:::-;;:::i;6666:79::-;;;;;;;;;;-1:-1:-1;6731:6:0;;-1:-1:-1;;;;;6731:6:0;6666:79;;8755:30;;;;;;;;;;;;;;;;9403:31;;;;;;;;;;;;;;;;2015:104;;;;;;;;;;;;;:::i;15581:329::-;;;;;;;;;;-1:-1:-1;15581:329:0;;;;;:::i;:::-;;:::i;9303:24::-;;;;;;;;;;;;;;;;9626:27;;;;;;;;;;;;;;;;9479:25;;;;;;;;;;;;;;;;3924:475;;;;;;;;;;-1:-1:-1;3924:475:0;;;;;:::i;:::-;;:::i;2495:200::-;;;;;;;;;;-1:-1:-1;2495:200:0;;;;;:::i;:::-;;:::i;8614:30::-;;;;;;;;;;;;;;;;27696:254;;;;;;;;;;-1:-1:-1;27696:254:0;;;;;:::i;:::-;;:::i;9511:26::-;;;;;;;;;;;;;;;;9854:57;;;;;;;;;;-1:-1:-1;9854:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8947:33;;;;;;;;;;-1:-1:-1;8947:33:0;;;;-1:-1:-1;;;8947:33:0;;;;;;17215:182;;;;;;;;;;-1:-1:-1;17215:182:0;;;;;:::i;:::-;;:::i;14270:314::-;;;;;;;;;;-1:-1:-1;14270:314:0;;;;;:::i;:::-;;:::i;27055:192::-;;;;;;;;;;;;;:::i;9149:39::-;;;;;;;;;;-1:-1:-1;9149:39:0;;;;;;;;13243:241;;;;;;;;;;-1:-1:-1;13243:241:0;;;;;:::i;:::-;;:::i;14654:367::-;;;;;;;;;;-1:-1:-1;14654:367:0;;;;;:::i;:::-;;:::i;9195:27::-;;;;;;;;;;;;;;;;13956:306;;;;;;;;;;-1:-1:-1;13956:306:0;;;;;:::i;:::-;;:::i;2703:176::-;;;;;;;;;;-1:-1:-1;2703:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;2844:18:0;;;2817:7;2844:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2703:176;8503:33;;;;;;;;;;;;;;;;9334:25;;;;;;;;;;;;;;;;16685:522;;;;;;;;;;-1:-1:-1;16685:522:0;;;;;:::i;:::-;;:::i;13540:98::-;;;;;;;;;;;;;:::i;8711:37::-;;;;;;;;;;;;;;;;9266:30;;;;;;;;;;;;;;;;7038:281;;;;;;;;;;-1:-1:-1;7038:281:0;;;;;:::i;:::-;;:::i;9441:31::-;;;;;;;;;;;;;;;;1907:100;1961:13;1994:5;1987:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1907:100;:::o;2887:194::-;2995:4;3012:39;322:10;3035:7;3044:6;3012:8;:39::i;:::-;-1:-1:-1;3069:4:0;2887:194;;;;;:::o;27958:225::-;-1:-1:-1;;;;;28026:19:0;;;;;;:47;;-1:-1:-1;28049:10:0;;-1:-1:-1;;;;;28049:10:0;28063;28049:24;28026:47;28018:119;;;;-1:-1:-1;;;28018:119:0;;5516:2:1;28018:119:0;;;5498:21:1;5555:2;5535:18;;;5528:30;5594:34;5574:18;;;5567:62;5665:29;5645:18;;;5638:57;5712:19;;28018:119:0;;;;;;;;;28148:10;:27;;-1:-1:-1;;;;;;28148:27:0;-1:-1:-1;;;;;28148:27:0;;;;;;;;;;27958:225::o;3089:529::-;3229:4;3246:36;3256:6;3264:9;3275:6;3246:9;:36::i;:::-;-1:-1:-1;;;;;3322:19:0;;3295:24;3322:19;;;:11;:19;;;;;;;;322:10;3322:33;;;;;;;;3388:26;;;;3366:116;;;;-1:-1:-1;;;3366:116:0;;5944:2:1;3366:116:0;;;5926:21:1;5983:2;5963:18;;;5956:30;6022:34;6002:18;;;5995:62;-1:-1:-1;;;6073:18:1;;;6066:38;6121:19;;3366:116:0;5742:404:1;3366:116:0;3518:57;3527:6;322:10;3568:6;3549:16;:25;3518:8;:57::i;:::-;-1:-1:-1;3606:4:0;;3089:529;-1:-1:-1;;;;3089:529:0:o;12685:248::-;6793:6;;-1:-1:-1;;;;;6793:6:0;322:10;6793:22;6785:67;;;;-1:-1:-1;;;6785:67:0;;;;;;;:::i;:::-;12748:13:::1;::::0;-1:-1:-1;;;12748:13:0;::::1;;;12747:14;12739:50;;;::::0;-1:-1:-1;;;12739:50:0;;6714:2:1;12739:50:0::1;::::0;::::1;6696:21:1::0;6753:2;6733:18;;;6726:30;6792:25;6772:18;;;6765:53;6835:18;;12739:50:0::1;6512:347:1::0;12739:50:0::1;12800:13;:20:::0;;-1:-1:-1;;;;12831:18:0;-1:-1:-1;;;12831:18:0;;;12881:12:::1;12860:18;:33:::0;12909:16:::1;::::0;::::1;::::0;-1:-1:-1;;12909:16:0::1;12685:248::o:0;13646:302::-;6793:6;;-1:-1:-1;;;;;6793:6:0;322:10;6793:22;6785:67;;;;-1:-1:-1;;;6785:67:0;;;;;;;:::i;:::-;13778:4:::1;13770;13749:13;2316:12:::0;;;2228:108;13749:13:::1;:17;::::0;13765:1:::1;13749:17;:::i;:::-;13748:26;;;;:::i;:::-;13747:35;;;;:::i;:::-;13733:10;:49;;13724:118;;;;-1:-1:-1::0;;;13724:118:0::1;;;;;;;:::i;:::-;13868:23;:10:::0;13882:8:::1;13868:23;:::i;:::-;13853:12;:38:::0;;;13907:33:::1;::::0;1888:25:1;;;13907:33:0::1;::::0;1876:2:1;1861:18;13907:33:0::1;;;;;;;;13646:302:::0;:::o;16166:511::-;6793:6;;-1:-1:-1;;;;;6793:6:0;322:10;6793:22;6785:67;;;;-1:-1:-1;;;6785:67:0;;;;;;;:::i;:::-;16343:15:::1;:31:::0;;;16385:15:::1;:31:::0;;;16427:9:::1;:19:::0;;;16457:10:::1;:21:::0;;;16470:8;16439:7;16517:46:::1;16403:13:::0;16361;16517:46:::1;:::i;:::-;:71;;;;:::i;:::-;:97;;;;:::i;:::-;16489:12;:125:::0;;;16649:1:::1;-1:-1:-1::0;16633:17:0::1;16625:44;;;::::0;-1:-1:-1;;;16625:44:0;;8149:2:1;16625:44:0::1;::::0;::::1;8131:21:1::0;8188:2;8168:18;;;8161:30;-1:-1:-1;;;8207:18:1;;;8200:44;8261:18;;16625:44:0::1;7947:338:1::0;16625:44:0::1;16166:511:::0;;;;:::o;3626:290::-;322:10;3739:4;3828:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3828:34:0;;;;;;;;;;3739:4;;3756:130;;3806:7;;3828:47;;3865:10;;3828:47;:::i;:::-;3756:8;:130::i;12941:::-;6793:6;;-1:-1:-1;;;;;6793:6:0;322:10;6793:22;6785:67;;;;-1:-1:-1;;;6785:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13033:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:30;;-1:-1:-1;;13033:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;12941:130::o;2344:143::-;-1:-1:-1;;;;;2461:18:0;2434:7;2461:18;;;;;;;;;;;;2344:143::o;6880:150::-;6793:6;;-1:-1:-1;;;;;6793:6:0;322:10;6793:22;6785:67;;;;-1:-1:-1;;;6785:67:0;;;;;;;:::i;:::-;6973:6:::1;::::0;6952:40:::1;::::0;6989:1:::1;::::0;-1:-1:-1;;;;;6973:6:0::1;::::0;6952:40:::1;::::0;6989:1;;6952:40:::1;7003:6;:19:::0;;-1:-1:-1;;;;;;7003:19:0::1;::::0;;6880:150::o;13079:154::-;6793:6;;-1:-1:-1;;;;;6793:6:0;322:10;6793:22;6785:67;;;;-1:-1:-1;;;6785:67:0;;;;;;;:::i;:::-;13133:14:::1;:22:::0;;-1:-1:-1;;;;13133:22:0::1;::::0;;13166:20:::1;:28:::0;;-1:-1:-1;;13166:28:0::1;::::0;;13210:15:::1;::::0;::::1;::::0;13150:5:::1;::::0;13210:15:::1;13079:154::o:0;15269:304::-;6793:6;;-1:-1:-1;;;;;6793:6:0;322:10;6793:22;6785:67;;;;-1:-1:-1;;;6785:67:0;;;;;;;:::i;:::-;15391:4:::1;15386:123;;15431:13;::::0;-1:-1:-1;;;;;15431:13:0;;::::1;15421:23:::0;;::::1;::::0;15412:85:::1;;;::::0;-1:-1:-1;;;15412:85:0;;8492:2:1;15412:85:0::1;::::0;::::1;8474:21:1::0;8531:2;8511:18;;;8504:30;8570:34;8550:18;;;8543:62;-1:-1:-1;;;8621:18:1;;;8614:46;8677:19;;15412:85:0::1;8290:412:1::0;15412:85:0::1;-1:-1:-1::0;;;;;15519:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;15519:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15269:304::o;27255:433::-;27373:18;;27345:24;27363:4;27345:9;:24::i;:::-;:46;;27337:122;;;;-1:-1:-1;;;27337:122:0;;8909:2:1;27337:122:0;;;8891:21:1;8948:2;8928:18;;;8921:30;8987:34;8967:18;;;8960:62;9058:33;9038:18;;;9031:61;9109:19;;27337:122:0;8707:427:1;27337:122:0;27475:38;27498:7;27507:5;27475:22;:38::i;:::-;27470:211;;;27540:8;:15;;-1:-1:-1;;;;27540:15:0;-1:-1:-1;;;27540:15:0;;;27570:10;:8;:10::i;:::-;27595:8;:16;;-1:-1:-1;;;;27595:16:0;;;27631:38;;27653:15;1888:25:1;;27631:38:0;;1876:2:1;1861:18;27631:38:0;;;;;;;;27470:211;27255:433;;:::o;2015:104::-;2071:13;2104:7;2097:14;;;;;:::i;15581:329::-;6793:6;;-1:-1:-1;;;;;6793:6:0;322:10;6793:22;6785:67;;;;-1:-1:-1;;;6785:67:0;;;;;;;:::i;:::-;15716:13:::1;::::0;-1:-1:-1;;;;;15716:13:0;;::::1;15708:21:::0;;::::1;::::0;15699:93:::1;;;::::0;-1:-1:-1;;;15699:93:0;;9341:2:1;15699:93:0::1;::::0;::::1;9323:21:1::0;9380:2;9360:18;;;9353:30;9419:34;9399:18;;;9392:62;9490:28;9470:18;;;9463:56;9536:19;;15699:93:0::1;9139:422:1::0;15699:93:0::1;15805:41;15834:4;15840:5;15805:28;:41::i;:::-;15862:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;15862:40:0;::::1;::::0;::::1;::::0;;;::::1;15581:329:::0;;:::o;3924:475::-;322:10;4042:4;4086:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4086:34:0;;;;;;;;;;4153:35;;;;4131:122;;;;-1:-1:-1;;;4131:122:0;;9768:2:1;4131:122:0;;;9750:21:1;9807:2;9787:18;;;9780:30;9846:34;9826:18;;;9819:62;-1:-1:-1;;;9897:18:1;;;9890:35;9942:19;;4131:122:0;9566:401:1;4131:122:0;4289:67;322:10;4312:7;4340:15;4321:16;:34;4289:8;:67::i;:::-;-1:-1:-1;4387:4:0;;3924:475;-1:-1:-1;;;3924:475:0:o;2495:200::-;2606:4;2623:42;322:10;2647:9;2658:6;2623:9;:42::i;27696:254::-;-1:-1:-1;;;;;27770:19:0;;;;;;:53;;-1:-1:-1;27793:16:0;;-1:-1:-1;;;;;27793:16:0;27813:10;27793:30;27770:53;27762:136;;;;-1:-1:-1;;;27762:136:0;;10174:2:1;27762:136:0;;;10156:21:1;10213:2;10193:18;;;10186:30;10252:34;10232:18;;;10225:62;10323:30;10303:18;;;10296:58;10371:19;;27762:136:0;9972:424:1;27762:136:0;27909:16;:33;;-1:-1:-1;;;;;;27909:33:0;-1:-1:-1;;;;;27909:33:0;;;;;;;;;;27696:254::o;17215:182::-;6793:6;;-1:-1:-1;;;;;6793:6:0;322:10;6793:22;6785:67;;;;-1:-1:-1;;;6785:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17300:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;17300:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17355:34;;1438:41:1;;;17355:34:0::1;::::0;1411:18:1;17355:34:0::1;;;;;;;17215:182:::0;;:::o;14270:314::-;6793:6;;-1:-1:-1;;;;;6793:6:0;322:10;6793:22;6785:67;;;;-1:-1:-1;;;6785:67:0;;;;;;;:::i;:::-;14405:4:::1;14397;14376:13;2316:12:::0;;;2228:108;14376:13:::1;:17;::::0;14392:1:::1;14376:17;:::i;:::-;14375:26;;;;:::i;:::-;14374:35;;;;:::i;:::-;14360:10;:49;;14351:118;;;::::0;-1:-1:-1;;;14351:118:0;;10603:2:1;14351:118:0::1;::::0;::::1;10585:21:1::0;10642:2;10622:18;;;10615:30;-1:-1:-1;;;;;;;;;;;10661:18:1;;;10654:62;-1:-1:-1;;;10732:18:1;;;10725:52;10794:19;;14351:118:0::1;10401:418:1::0;14351:118:0::1;14498:23;:10:::0;14512:8:::1;14498:23;:::i;:::-;14480:15;:41:::0;;;14537:39:::1;::::0;1888:25:1;;;14537:39:0::1;::::0;1876:2:1;1861:18;14537:39:0::1;1742:177:1::0;27055:192:0;27203:10;;27195:44;;27108:12;;27150:21;;-1:-1:-1;;;;;27203:10:0;;;;27150:21;;27108:12;27195:44;27108:12;27195:44;27150:21;27203:10;27195:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27182:57:0;;27055:192;-1:-1:-1;;;27055:192:0:o;13243:241::-;6793:6;;-1:-1:-1;;;;;6793:6:0;322:10;6793:22;6785:67;;;;-1:-1:-1;;;6785:67:0;;;;;;;:::i;:::-;13376:9:::1;13371:106;13391:18:::0;;::::1;13371:106;;;13461:4;13431:15;:27;13447:7;;13455:1;13447:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13431:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;13431:27:0;:34;;-1:-1:-1;;13431:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13411:3;::::1;::::0;::::1;:::i;:::-;;;;13371:106;;14654:367:::0;6793:6;;-1:-1:-1;;;;;6793:6:0;322:10;6793:22;6785:67;;;;-1:-1:-1;;;6785:67:0;;;;;;;:::i;:::-;14783:6:::1;14762:13;2316:12:::0;;;2228:108;14762:13:::1;:17;::::0;14778:1:::1;14762:17;:::i;:::-;14761:28;;;;:::i;:::-;14747:10;:42;;14738:113;;;::::0;-1:-1:-1;;;14738:113:0;;11508:2:1;14738:113:0::1;::::0;::::1;11490:21:1::0;11547:2;11527:18;;;11520:30;-1:-1:-1;;;;;;;;;;;11566:18:1;;;11559:62;11657:26;11637:18;;;11630:54;11701:19;;14738:113:0::1;11306:420:1::0;14738:113:0::1;14907:4;14886:13;2316:12:::0;;;2228:108;14886:13:::1;:17;::::0;14902:1:::1;14886:17;:::i;:::-;14885:26;;;;:::i;:::-;14871:10;:40;;14862:109;;;::::0;-1:-1:-1;;;14862:109:0;;11933:2:1;14862:109:0::1;::::0;::::1;11915:21:1::0;11972:2;11952:18;;;11945:30;-1:-1:-1;;;;;;;;;;;11991:18:1;;;11984:62;-1:-1:-1;;;12062:18:1;;;12055:52;12124:19;;14862:109:0::1;11731:418:1::0;14862:109:0::1;14982:18;:31:::0;14654:367::o;13956:306::-;6793:6;;-1:-1:-1;;;;;6793:6:0;322:10;6793:22;6785:67;;;;-1:-1:-1;;;6785:67:0;;;;;;;:::i;:::-;14089:4:::1;14081;14060:13;2316:12:::0;;;2228:108;14060:13:::1;:17;::::0;14076:1:::1;14060:17;:::i;:::-;14059:26;;;;:::i;:::-;14058:35;;;;:::i;:::-;14044:10;:49;;14035:118;;;;-1:-1:-1::0;;;14035:118:0::1;;;;;;;:::i;:::-;14180:23;:10:::0;14194:8:::1;14180:23;:::i;:::-;14164:13;:39:::0;;;14219:35:::1;::::0;1888:25:1;;;14219:35:0::1;::::0;1876:2:1;1861:18;14219:35:0::1;1742:177:1::0;16685:522:0;6793:6;;-1:-1:-1;;;;;6793:6:0;322:10;6793:22;6785:67;;;;-1:-1:-1;;;6785:67:0;;;;;;;:::i;:::-;16863:16:::1;:32:::0;;;16906:16:::1;:32:::0;;;16949:10:::1;:20:::0;;;16980:11:::1;:22:::0;;;16994:8;16962:7;17042:48:::1;16925:13:::0;16882;17042:48:::1;:::i;:::-;:74;;;;:::i;:::-;:101;;;;:::i;:::-;17013:13;:130:::0;;;17179:1:::1;-1:-1:-1::0;17162:18:0::1;17154:45;;;::::0;-1:-1:-1;;;17154:45:0;;8149:2:1;17154:45:0::1;::::0;::::1;8131:21:1::0;8188:2;8168:18;;;8161:30;-1:-1:-1;;;8207:18:1;;;8200:44;8261:18;;17154:45:0::1;7947:338:1::0;13540:98:0;6793:6;;-1:-1:-1;;;;;6793:6:0;322:10;6793:22;6785:67;;;;-1:-1:-1;;;6785:67:0;;;;;;;:::i;:::-;13602:20:::1;:28:::0;;-1:-1:-1;;13602:28:0::1;::::0;;13540:98::o;7038:281::-;6793:6;;-1:-1:-1;;;;;6793:6:0;322:10;6793:22;6785:67;;;;-1:-1:-1;;;6785:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7141:22:0;::::1;7119:110;;;::::0;-1:-1:-1;;;7119:110:0;;12356:2:1;7119:110:0::1;::::0;::::1;12338:21:1::0;12395:2;12375:18;;;12368:30;12434:34;12414:18;;;12407:62;-1:-1:-1;;;12485:18:1;;;12478:36;12531:19;;7119:110:0::1;12154:402:1::0;7119:110:0::1;7266:6;::::0;7245:38:::1;::::0;-1:-1:-1;;;;;7245:38:0;;::::1;::::0;7266:6:::1;::::0;7245:38:::1;::::0;7266:6:::1;::::0;7245:38:::1;7294:6;:17:::0;;-1:-1:-1;;;;;;7294:17:0::1;-1:-1:-1::0;;;;;7294:17:0;;;::::1;::::0;;;::::1;::::0;;7038:281::o;5935:380::-;-1:-1:-1;;;;;6071:19:0;;6063:68;;;;-1:-1:-1;;;6063:68:0;;12763:2:1;6063:68:0;;;12745:21:1;12802:2;12782:18;;;12775:30;12841:34;12821:18;;;12814:62;-1:-1:-1;;;12892:18:1;;;12885:34;12936:19;;6063:68:0;12561:400:1;6063:68:0;-1:-1:-1;;;;;6150:21:0;;6142:68;;;;-1:-1:-1;;;6142:68:0;;13168:2:1;6142:68:0;;;13150:21:1;13207:2;13187:18;;;13180:30;13246:34;13226:18;;;13219:62;-1:-1:-1;;;13297:18:1;;;13290:32;13339:19;;6142:68:0;12966:398:1;6142:68:0;-1:-1:-1;;;;;6223:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6275:32;;1888:25:1;;;6275:32:0;;1861:18:1;6275:32:0;;;;;;;;5935:380;;;:::o;17405:5128::-;-1:-1:-1;;;;;17537:18:0;;17529:68;;;;-1:-1:-1;;;17529:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17616:16:0;;17608:64;;;;-1:-1:-1;;;17608:64:0;;;;;;;:::i;:::-;17700:1;17691:6;:10;17683:52;;;;-1:-1:-1;;;17683:52:0;;14381:2:1;17683:52:0;;;14363:21:1;14420:2;14400:18;;;14393:30;14459:31;14439:18;;;14432:59;14508:18;;17683:52:0;14179:353:1;17683:52:0;17753:13;;-1:-1:-1;;;17753:13:0;;;;17748:184;;-1:-1:-1;;;;;17809:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;17838:23:0;;;;;;:19;:23;;;;;;;;17809:52;17783:137;;;;-1:-1:-1;;;17783:137:0;;14739:2:1;17783:137:0;;;14721:21:1;14778:2;14758:18;;;14751:30;14817:25;14797:18;;;14790:53;14860:18;;17783:137:0;14537:347:1;17783:137:0;17948:11;;:15;17944:214;;-1:-1:-1;;;;;18007:21:0;;;;;;:15;:21;;;;;;;;18006:22;;:39;;-1:-1:-1;6731:6:0;;-1:-1:-1;;;;;18032:13:0;;;6731:6;;18032:13;18006:39;:64;;;-1:-1:-1;;;;;;18049:21:0;;18063:6;18049:21;18006:64;17980:166;;;;-1:-1:-1;;;17980:166:0;;15091:2:1;17980:166:0;;;15073:21:1;15130:2;15110:18;;;15103:30;15169:34;15149:18;;;15142:62;-1:-1:-1;;;15220:18:1;;;15213:38;15268:19;;17980:166:0;14889:404:1;17980:166:0;18190:13;;-1:-1:-1;;;;;18190:13:0;;;18182:21;;;;18178:207;;-1:-1:-1;;;;;18224:14:0;;;;;;:10;:14;;;;;;:19;;18220:92;;-1:-1:-1;;;;;18264:14:0;;;;;;:10;:14;;;;;18281:15;18264:32;;18220:92;18178:207;;;18334:8;;-1:-1:-1;;;18334:8:0;;;;18329:56;;18359:7;:14;;-1:-1:-1;;;;;;18359:14:0;-1:-1:-1;;;;;18359:14:0;;;;;18329:56;18401:14;;-1:-1:-1;;;18401:14:0;;;;18397:1550;;;6731:6;;-1:-1:-1;;;;;18454:15:0;;;6731:6;;18454:15;;;;:49;;-1:-1:-1;6731:6:0;;-1:-1:-1;;;;;18490:13:0;;;6731:6;;18490:13;;18454:49;:86;;;;-1:-1:-1;;;;;;18524:16:0;;;;18454:86;:128;;;;-1:-1:-1;;;;;;18561:21:0;;18575:6;18561:21;;18454:128;:175;;;;-1:-1:-1;;;;;;18604:25:0;;;;;;:19;:25;;;;;;;;18603:26;18454:175;:220;;;;-1:-1:-1;;;;;;18651:23:0;;;;;;:19;:23;;;;;;;;18650:24;18454:220;18432:1504;;;18713:20;;;;18709:458;;;18776:9;;-1:-1:-1;;;;;18762:24:0;;;18776:9;;18762:24;;;;:56;;-1:-1:-1;18804:13:0;;-1:-1:-1;;;;;18790:28:0;;;18804:13;;18790:28;;18762:56;18758:390;;;18897:16;18912:1;18897:12;:16;:::i;:::-;18884:9;18855:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;18952:16:0;18967:1;18952:12;:16;:::i;:::-;-1:-1:-1;;;;;18917:32:0;;;;;;:28;:32;;;;;;:51;18855:113;18847:122;;;;;;19025:9;18996:39;;;;:28;:39;;;;;;19038:12;18996:54;;;;-1:-1:-1;;;;;19077:32:0;;;;;;:47;18758:390;-1:-1:-1;;;;;19213:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;19249:35:0;;;;;;:31;:35;;;;;;;;19248:36;19213:71;19208:713;;;19329:12;;19319:6;:22;;19310:67;;;;-1:-1:-1;;;19310:67:0;;15630:2:1;19310:67:0;;;15612:21:1;15669:2;15649:18;;;15642:30;15708:33;15688:18;;;15681:61;15759:18;;19310:67:0;15428:355:1;19310:67:0;19435:15;;19418:13;19428:2;19418:9;:13::i;:::-;19409:22;;:6;:22;:::i;:::-;:41;;19400:85;;;;-1:-1:-1;;;19400:85:0;;15990:2:1;19400:85:0;;;15972:21:1;16029:2;16009:18;;;16002:30;16068:32;16048:18;;;16041:60;16118:18;;19400:85:0;15788:354:1;19400:85:0;19208:713;;;-1:-1:-1;;;;;19557:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;19591:37:0;;;;;;:31;:37;;;;;;;;19590:38;19557:71;19552:369;;;19673:13;;19663:6;:23;;19654:71;;;;-1:-1:-1;;;19654:71:0;;16349:2:1;19654:71:0;;;16331:21:1;16388:2;16368:18;;;16361:30;16427:34;16407:18;;;16400:62;-1:-1:-1;;;16478:18:1;;;16471:31;16519:19;;19654:71:0;16147:397:1;19552:369:0;-1:-1:-1;;;;;19756:35:0;;;;;;:31;:35;;;;;;;;19751:170;;19851:15;;19834:13;19844:2;19834:9;:13::i;:::-;19825:22;;:6;:22;:::i;:::-;:41;;19816:85;;;;-1:-1:-1;;;19816:85:0;;16751:2:1;19816:85:0;;;16733:21:1;16790:2;16770:18;;;16763:30;16829:32;16809:18;;;16802:60;16879:18;;19816:85:0;16549:354:1;19816:85:0;19959:28;19990:24;20008:4;19990:9;:24::i;:::-;20066:18;;19959:55;;-1:-1:-1;20042:42:0;;;;;;;20115:35;;-1:-1:-1;20139:11:0;;-1:-1:-1;;;20139:11:0;;;;20115:35;:61;;;;-1:-1:-1;20168:8:0;;-1:-1:-1;;;20168:8:0;;;;20167:9;20115:61;:110;;;;-1:-1:-1;;;;;;20194:31:0;;;;;;:25;:31;;;;;;;;20193:32;20115:110;:153;;;;-1:-1:-1;;;;;;20243:25:0;;;;;;:19;:25;;;;;;;;20242:26;20115:153;:194;;;;-1:-1:-1;;;;;;20286:23:0;;;;;;:19;:23;;;;;;;;20285:24;20115:194;20097:326;;;20336:8;:15;;-1:-1:-1;;;;20336:15:0;-1:-1:-1;;;20336:15:0;;;20368:10;:8;:10::i;:::-;20395:8;:16;;-1:-1:-1;;;;20395:16:0;;;20097:326;-1:-1:-1;;;;;20471:25:0;;20435:12;20471:25;;;:19;:25;;;;;;20450:4;;20471:25;;;:52;;-1:-1:-1;;;;;;20500:23:0;;;;;;:19;:23;;;;;;;;20471:52;20467:100;;;-1:-1:-1;20550:5:0;20467:100;20579:12;20612:7;20608:1874;;;22633:11;;22618:12;:26;20658:74;;;;-1:-1:-1;;;;;;20701:31:0;;;;;;:25;:31;;;;;;;;20658:74;:125;;;;-1:-1:-1;;;;;;20754:29:0;;;;;;:25;:29;;;;;;;;20753:30;20658:125;:162;;;;;20819:1;20804:12;;:16;20658:162;20636:1701;;;-1:-1:-1;;;;;20860:19:0;;;;;;:15;:19;;;;;;;;20855:183;;-1:-1:-1;;;;;20904:19:0;;;;;;:15;:19;;;;;:26;;-1:-1:-1;;20904:26:0;20926:4;20904:26;;;;;;20953:10;:15;;20926:4;;20953:10;;:15;;20926:4;;20953:15;:::i;:::-;;;;-1:-1:-1;;20996:22:0;;-1:-1:-1;;;;;798:32:1;;780:51;;20996:22:0;;768:2:1;753:18;20996:22:0;;;;;;;20855:183;21081:3;21066:11;:6;21075:2;21066:11;:::i;:::-;21065:19;;;;:::i;:::-;21058:26;;21152:12;;21133:15;;21126:4;:22;;;;:::i;:::-;21125:39;;;;:::i;:::-;21103:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21232:12:0;;21213:15;;21206:22;;:4;:22;:::i;:::-;21205:39;;;;:::i;:::-;21183:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21300:12:0;;21287:9;;21280:16;;:4;:16;:::i;:::-;21279:33;;;;:::i;:::-;21263:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;21370:12:0;;21356:10;;21349:17;;:4;:17;:::i;:::-;21348:34;;;;:::i;:::-;21331:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;20636:1701:0;;-1:-1:-1;20636:1701:0;;-1:-1:-1;;;;;21442:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;21491:1;21475:13;;:17;21442:50;21438:899;;;21547:3;21530:13;;21521:6;:22;;;;:::i;:::-;21520:30;;;;:::i;:::-;21513:37;;21619:13;;21599:16;;21592:4;:23;;;;:::i;:::-;21591:41;;;;:::i;:::-;21569:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;21701:13:0;;21681:16;;21674:23;;:4;:23;:::i;:::-;21673:41;;;;:::i;:::-;21651:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;21771:13:0;;21757:10;;21750:17;;:4;:17;:::i;:::-;21749:35;;;;:::i;:::-;21733:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;21843:13:0;;21828:11;;21821:18;;:4;:18;:::i;21438:899::-;-1:-1:-1;;;;;21915:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;21965:1;21950:12;;:16;21915:51;21911:426;;;22020:3;22004:12;;21995:6;:21;;;;:::i;:::-;21994:29;;;;:::i;:::-;21987:36;;22091:12;;22072:15;;22065:4;:22;;;;:::i;:::-;22064:39;;;;:::i;:::-;22042:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22171:12:0;;22152:15;;22145:22;;:4;:22;:::i;:::-;22144:39;;;;:::i;:::-;22122:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22239:12:0;;22226:9;;22219:16;;:4;:16;:::i;:::-;22218:33;;;;:::i;:::-;22202:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;22309:12:0;;22295:10;;22288:17;;:4;:17;:::i;:::-;22287:34;;;;:::i;:::-;22270:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;21911:426:0;22355:8;;22351:91;;22384:42;22400:4;22414;22421;22384:15;:42::i;:::-;22456:14;22466:4;22456:14;;:::i;:::-;;;20608:1874;22492:33;22508:4;22514:2;22518:6;22492:15;:33::i;:::-;17518:5015;;;;17405:5128;;;:::o;23696:1561::-;23868:10;23803:4;23848:31;;;:19;:31;;;;;;23803:4;;23848:31;;23843:1407;;23934:1;23918:13;;:17;:62;;;;;23967:13;;23939:24;23957:4;23939:9;:24::i;:::-;:41;;23918:62;23896:167;;;24015:32;24021:10;24033:13;;24015:5;:32::i;:::-;-1:-1:-1;24093:1:0;24077:13;:17;;;24119:4;;24164:24;24182:4;24164:9;:24::i;:::-;24138:50;;24203:25;24307:12;;24269:18;;24231;;:56;;;;:::i;:::-;:88;;;;:::i;:::-;24203:116;-1:-1:-1;24340:20:0;;;:46;;-1:-1:-1;24364:22:0;;24340:46;24336:99;;;24414:5;24407:12;;;;;;;24336:99;24473:18;;:22;;24494:1;24473:22;:::i;:::-;24455:15;:40;24451:121;;;24534:18;;:22;;24555:1;24534:22;:::i;:::-;24516:40;;24451:121;24593:7;24586:14;;;;;;;23843:1407;24665:5;24637:24;24655:4;24637:9;:24::i;:::-;:33;24633:129;;24691:21;24697:7;24706:5;24691;:21::i;:::-;-1:-1:-1;24741:5:0;24633:129;24776:23;24802:24;24820:4;24802:9;:24::i;25265:1782::-;25324:1;25308:13;;:17;:62;;;;;25357:13;;25329:24;25347:4;25329:9;:24::i;:::-;:41;;25308:62;25304:130;;;25387:35;25401:4;25408:13;;25387:5;:35::i;:::-;25460:1;25444:13;:17;;;25500:24;25518:4;25500:9;:24::i;:::-;25474:50;;25535:25;25631:12;;25597:18;;25563;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;25535:108;-1:-1:-1;25660:20:0;;;:46;;-1:-1:-1;25684:22:0;;25660:46;25656:85;;;25723:7;;25265:1782::o;25656:85::-;25775:18;;:22;;25796:1;25775:22;:::i;:::-;25757:15;:40;25753:113;;;25832:18;;:22;;25853:1;25832:22;:::i;:::-;25814:40;;25753:113;25878:12;25903:23;26016:1;25983:17;25948:18;;25930:15;:36;;;;:::i;:::-;25929:71;;;;:::i;:::-;:88;;;;:::i;:::-;25903:114;-1:-1:-1;26030:51:0;26047:33;25903:114;26047:15;:33;:::i;:::-;26030:16;:51::i;:::-;26293:18;;26115:21;;;;26094:18;;26293:22;;26314:1;;26293:22;:::i;:::-;26272:44;;:17;:44;:::i;:::-;26236:18;;26223:31;;:10;:31;:::i;:::-;26222:95;;;;:::i;:::-;26196:121;;26328:17;26434:1;26413:18;;:22;;;;:::i;:::-;26392:44;;:17;:44;:::i;:::-;26362:12;;26349:25;;:10;:25;:::i;:::-;26348:89;;;;:::i;:::-;26328:109;-1:-1:-1;26469:27:0;26328:109;26469:15;:27;:::i;:::-;26450:46;;;;:::i;:::-;26530:1;26509:18;:22;;;26542:18;:22;;;26575:12;:16;;;26602:13;:17;26450:46;-1:-1:-1;26636:19:0;;;;;:42;;;26677:1;26659:15;:19;26636:42;26632:121;;;26695:46;26708:15;26725;26695:12;:46::i;:::-;26787:10;;26779:46;;-1:-1:-1;;;;;26787:10:0;;;;26811:9;;26779:46;;;;26811:9;26787:10;26779:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26765:60;;;;;26845:7;26836:47;;;;-1:-1:-1;;;26836:47:0;;17110:2:1;26836:47:0;;;17092:21:1;17149:2;17129:18;;;17122:30;17188:28;17168:18;;;17161:56;17234:18;;26836:47:0;16908:350:1;26836:47:0;26918:16;;26910:65;;-1:-1:-1;;;;;26918:16:0;;;;26949:21;;26910:65;;;;26949:21;26918:16;26910:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26896:79;;;;;26995:7;26986:53;;;;-1:-1:-1;;;26986:53:0;;17465:2:1;26986:53:0;;;17447:21:1;;;17484:18;;;17477:30;17543:34;17523:18;;;17516:62;17595:18;;26986:53:0;17263:356:1;26986:53:0;25293:1754;;;;;;;;25265:1782::o;15918:240::-;-1:-1:-1;;;;;16001:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;16001:39:0;;;;;;;16053;16001:31;:39;16053:26;:39::i;4407:651::-;-1:-1:-1;;;;;4547:20:0;;4539:70;;;;-1:-1:-1;;;4539:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4628:23:0;;4620:71;;;;-1:-1:-1;;;4620:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4728:17:0;;4704:21;4728:17;;;;;;;;;;;4778:23;;;;4756:111;;;;-1:-1:-1;;;4756:111:0;;17826:2:1;4756:111:0;;;17808:21:1;17865:2;17845:18;;;17838:30;17904:34;17884:18;;;17877:62;-1:-1:-1;;;17955:18:1;;;17948:36;18001:19;;4756:111:0;17624:402:1;4756:111:0;-1:-1:-1;;;;;4903:17:0;;;:9;:17;;;;;;;;;;;4923:22;;;4903:42;;4967:20;;;;;;;;:30;;4939:6;;4903:9;4967:30;;4939:6;;4967:30;:::i;:::-;;;;;;;;5032:9;-1:-1:-1;;;;;5015:35:0;5024:6;-1:-1:-1;;;;;5015:35:0;;5043:6;5015:35;;;;1888:25:1;;1876:2;1861:18;;1742:177;5015:35:0;;;;;;;;4528:530;4407:651;;;:::o;5390:537::-;-1:-1:-1;;;;;5474:21:0;;5466:67;;;;-1:-1:-1;;;5466:67:0;;18233:2:1;5466:67:0;;;18215:21:1;18272:2;18252:18;;;18245:30;18311:34;18291:18;;;18284:62;-1:-1:-1;;;18362:18:1;;;18355:31;18403:19;;5466:67:0;18031:397:1;5466:67:0;-1:-1:-1;;;;;5569:18:0;;5544:22;5569:18;;;;;;;;;;;5606:24;;;;5598:71;;;;-1:-1:-1;;;5598:71:0;;18635:2:1;5598:71:0;;;18617:21:1;18674:2;18654:18;;;18647:30;18713:34;18693:18;;;18686:62;-1:-1:-1;;;18764:18:1;;;18757:32;18806:19;;5598:71:0;18433:398:1;5598:71:0;-1:-1:-1;;;;;5705:18:0;;:9;:18;;;;;;;;;;;5726:23;;;5705:44;;5831:12;:22;;;;;;;5882:37;1888:25:1;;;5705:9:0;;:18;5882:37;;1861:18:1;5882:37:0;1742:177:1;22660:511:0;22750:16;;;22764:1;22750:16;;;;;;;;22726:21;;22750:16;;;;;;;;;;-1:-1:-1;22750:16:0;22726:40;;22795:4;22777;22782:1;22777:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22777:23:0;;;:7;;;;;;;;;;:23;;;;22821:9;;:16;;;-1:-1:-1;;;22821:16:0;;;;:9;;;;;:14;;:16;;;;;22777:7;;22821:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22811:4;22816:1;22811:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22811:26:0;;;:7;;;;;;;;;:26;22882:9;;22850:56;;22867:4;;22882:9;22894:11;22850:8;:56::i;:::-;22945:9;;:218;;-1:-1:-1;;;22945:218:0;;-1:-1:-1;;;;;22945:9:0;;;;:60;;:218;;23020:11;;22945:9;;23090:4;;23117;;23137:15;;22945:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22715:456;22660:511;:::o;23179:509::-;23359:9;;23327:56;;23344:4;;-1:-1:-1;;;;;23359:9:0;23371:11;23327:8;:56::i;:::-;23426:9;;:254;;-1:-1:-1;;;23426:254:0;;23492:4;23426:254;;;20550:34:1;20600:18;;;20593:34;;;23426:9:0;20643:18:1;;;20636:34;;;20686:18;;;20679:34;23632:6:0;20729:19:1;;;20722:44;23654:15:0;20782:19:1;;;20775:35;-1:-1:-1;;;;;23426:9:0;;;;:25;;23459:9;;20484:19:1;;23426:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;23179:509;;:::o;15029:232::-;-1:-1:-1;;;;;15142:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;15142:52:0;;;;;;;;;;15210:43;;21300:51:1;;;21367:18;;;21360:50;15210:43:0;;21273:18:1;15210:43:0;21132:284:1;14:597;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;842:131::-;-1:-1:-1;;;;;917:31:1;;907:42;;897:70;;963:1;960;953:12;897:70;842:131;:::o;978:315::-;1046:6;1054;1107:2;1095:9;1086:7;1082:23;1078:32;1075:52;;;1123:1;1120;1113:12;1075:52;1162:9;1149:23;1181:31;1206:5;1181:31;:::i;:::-;1231:5;1283:2;1268:18;;;;1255:32;;-1:-1:-1;;;978:315:1:o;1490:247::-;1549:6;1602:2;1590:9;1581:7;1577:23;1573:32;1570:52;;;1618:1;1615;1608:12;1570:52;1657:9;1644:23;1676:31;1701:5;1676:31;:::i;:::-;1726:5;1490:247;-1:-1:-1;;;1490:247:1:o;1924:456::-;2001:6;2009;2017;2070:2;2058:9;2049:7;2045:23;2041:32;2038:52;;;2086:1;2083;2076:12;2038:52;2125:9;2112:23;2144:31;2169:5;2144:31;:::i;:::-;2194:5;-1:-1:-1;2251:2:1;2236:18;;2223:32;2264:33;2223:32;2264:33;:::i;:::-;1924:456;;2316:7;;-1:-1:-1;;;2370:2:1;2355:18;;;;2342:32;;1924:456::o;2385:180::-;2444:6;2497:2;2485:9;2476:7;2472:23;2468:32;2465:52;;;2513:1;2510;2503:12;2465:52;-1:-1:-1;2536:23:1;;2385:180;-1:-1:-1;2385:180:1:o;2570:385::-;2656:6;2664;2672;2680;2733:3;2721:9;2712:7;2708:23;2704:33;2701:53;;;2750:1;2747;2740:12;2701:53;-1:-1:-1;;2773:23:1;;;2843:2;2828:18;;2815:32;;-1:-1:-1;2894:2:1;2879:18;;2866:32;;2945:2;2930:18;2917:32;;-1:-1:-1;2570:385:1;-1:-1:-1;2570:385:1:o;3357:160::-;3422:20;;3478:13;;3471:21;3461:32;;3451:60;;3507:1;3504;3497:12;3451:60;3357:160;;;:::o;3522:315::-;3587:6;3595;3648:2;3636:9;3627:7;3623:23;3619:32;3616:52;;;3664:1;3661;3654:12;3616:52;3703:9;3690:23;3722:31;3747:5;3722:31;:::i;:::-;3772:5;-1:-1:-1;3796:35:1;3827:2;3812:18;;3796:35;:::i;:::-;3786:45;;3522:315;;;;;:::o;3842:689::-;3934:6;3942;3950;4003:2;3991:9;3982:7;3978:23;3974:32;3971:52;;;4019:1;4016;4009:12;3971:52;4059:9;4046:23;4088:18;4129:2;4121:6;4118:14;4115:34;;;4145:1;4142;4135:12;4115:34;4183:6;4172:9;4168:22;4158:32;;4228:7;4221:4;4217:2;4213:13;4209:27;4199:55;;4250:1;4247;4240:12;4199:55;4290:2;4277:16;4316:2;4308:6;4305:14;4302:34;;;4332:1;4329;4322:12;4302:34;4387:7;4380:4;4370:6;4367:1;4363:14;4359:2;4355:23;4351:34;4348:47;4345:67;;;4408:1;4405;4398:12;4345:67;4439:4;4431:13;;;;-1:-1:-1;4463:6:1;-1:-1:-1;4488:37:1;;4504:20;;;-1:-1:-1;4488:37:1;:::i;:::-;4478:47;;3842:689;;;;;:::o;4536:388::-;4604:6;4612;4665:2;4653:9;4644:7;4640:23;4636:32;4633:52;;;4681:1;4678;4671:12;4633:52;4720:9;4707:23;4739:31;4764:5;4739:31;:::i;:::-;4789:5;-1:-1:-1;4846:2:1;4831:18;;4818:32;4859:33;4818:32;4859:33;:::i;:::-;4911:7;4901:17;;;4536:388;;;;;:::o;4929:380::-;5008:1;5004:12;;;;5051;;;5072:61;;5126:4;5118:6;5114:17;5104:27;;5072:61;5179:2;5171:6;5168:14;5148:18;5145:38;5142:161;;5225:10;5220:3;5216:20;5213:1;5206:31;5260:4;5257:1;5250:15;5288:4;5285:1;5278:15;5142:161;;4929:380;;;:::o;6151:356::-;6353:2;6335:21;;;6372:18;;;6365:30;6431:34;6426:2;6411:18;;6404:62;6498:2;6483:18;;6151:356::o;6864:127::-;6925:10;6920:3;6916:20;6913:1;6906:31;6956:4;6953:1;6946:15;6980:4;6977:1;6970:15;6996:168;7036:7;7102:1;7098;7094:6;7090:14;7087:1;7084:21;7079:1;7072:9;7065:17;7061:45;7058:71;;;7109:18;;:::i;:::-;-1:-1:-1;7149:9:1;;6996:168::o;7169:217::-;7209:1;7235;7225:132;;7279:10;7274:3;7270:20;7267:1;7260:31;7314:4;7311:1;7304:15;7342:4;7339:1;7332:15;7225:132;-1:-1:-1;7371:9:1;;7169:217::o;7391:418::-;7593:2;7575:21;;;7632:2;7612:18;;;7605:30;-1:-1:-1;;;;;;;;;;;7666:2:1;7651:18;;7644:62;-1:-1:-1;;;7737:2:1;7722:18;;7715:52;7799:3;7784:19;;7391:418::o;7814:128::-;7854:3;7885:1;7881:6;7878:1;7875:13;7872:39;;;7891:18;;:::i;:::-;-1:-1:-1;7927:9:1;;7814:128::o;11034:127::-;11095:10;11090:3;11086:20;11083:1;11076:31;11126:4;11123:1;11116:15;11150:4;11147:1;11140:15;11166:135;11205:3;11226:17;;;11223:43;;11246:18;;:::i;:::-;-1:-1:-1;11293:1:1;11282:13;;11166:135::o;13369:401::-;13571:2;13553:21;;;13610:2;13590:18;;;13583:30;13649:34;13644:2;13629:18;;13622:62;-1:-1:-1;;;13715:2:1;13700:18;;13693:35;13760:3;13745:19;;13369:401::o;13775:399::-;13977:2;13959:21;;;14016:2;13996:18;;;13989:30;14055:34;14050:2;14035:18;;14028:62;-1:-1:-1;;;14121:2:1;14106:18;;14099:33;14164:3;14149:19;;13775:399::o;15298:125::-;15338:4;15366:1;15363;15360:8;15357:34;;;15371:18;;:::i;:::-;-1:-1:-1;15408:9:1;;15298:125::o;18968:251::-;19038:6;19091:2;19079:9;19070:7;19066:23;19062:32;19059:52;;;19107:1;19104;19097:12;19059:52;19139:9;19133:16;19158:31;19183:5;19158:31;:::i;19224:980::-;19486:4;19534:3;19523:9;19519:19;19565:6;19554:9;19547:25;19591:2;19629:6;19624:2;19613:9;19609:18;19602:34;19672:3;19667:2;19656:9;19652:18;19645:31;19696:6;19731;19725:13;19762:6;19754;19747:22;19800:3;19789:9;19785:19;19778:26;;19839:2;19831:6;19827:15;19813:29;;19860:1;19870:195;19884:6;19881:1;19878:13;19870:195;;;19949:13;;-1:-1:-1;;;;;19945:39:1;19933:52;;20040:15;;;;20005:12;;;;19981:1;19899:9;19870:195;;;-1:-1:-1;;;;;;;20121:32:1;;;;20116:2;20101:18;;20094:60;-1:-1:-1;;;20185:3:1;20170:19;20163:35;20082:3;19224:980;-1:-1:-1;;;19224:980:1:o;20821:306::-;20909:6;20917;20925;20978:2;20966:9;20957:7;20953:23;20949:32;20946:52;;;20994:1;20991;20984:12;20946:52;21023:9;21017:16;21007:26;;21073:2;21062:9;21058:18;21052:25;21042:35;;21117:2;21106:9;21102:18;21096:25;21086:35;;20821:306;;;;;:::o

Swarm Source

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