ETH Price: $3,369.22 (-1.45%)

Token

VarAi (VAR)
 

Overview

Max Total Supply

420,000,000 VAR

Holders

29

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.951603442669454632 VAR

Value
$0.00
0xE45d7DBf47A6CB9310aa163bd68026ADFfA12d2B
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:
VarAi

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-27
*/

// SPDX-License-Identifier: MIT


/*
Var Ai
"Revolutionize Smart Contracts with Var Ai The Future of Customizable and Adaptive Solutions"

website: TBA
telegram : https://t.me/varaiportal
Medium : https://medium.com/@varai
Twitter : https://twitter.com/varaichain

*/

pragma solidity 0.8.17;
pragma experimental ABIEncoderV2;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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 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 transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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");

        _beforeTokenTransfer(sender, recipient, amount);

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

        _afterTokenTransfer(sender, recipient, amount);
    }

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

        _beforeTokenTransfer(address(0), account, amount);

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

        _afterTokenTransfer(address(0), account, amount);
    }


    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}


library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
 
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }


    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);
    function mint(address to) external returns (uint256 liquidity);
    function burn(address to) external returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

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

contract VarAi is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    uint256 public launchedAt;
    uint256 public launchedAtTimestamp;
    uint256 Timer = 70 seconds;
    mapping(address => bool) public isSniper;

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

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

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

    /******************/

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

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

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

    constructor() ERC20("VarAi", "VAR") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 10;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 7;

        uint256 _sellMarketingFee = 10;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 7;

        uint256 totalSupply = 420_000_000 * 1e18;

        maxTransactionAmount = 8_400_000 * 1e18;
        maxWallet = 8_400_000 * 1e18;
        swapTokensAtAmount = 4_200_000 * 1e18;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = address(0xD80B86A58fe17a702F93DC24aCbE7fE710261B88); 
        devWallet = address(0xdfb5c62842B1D41EFd1101449CEa3880bB9cc53b); 

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() public onlyOwner {
        require(launchedAt == 0, "Already launched boi");
        launchedAt = block.number;
        launchedAtTimestamp = block.timestamp;
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        require(_marketingFee + _liquidityFee + _devFee<= 20, "Must keep fees at 20% or less");
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
    }

    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        require(_marketingFee + _liquidityFee + _devFee<= 20, "Must keep fees at 20% or less");
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
    }

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

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

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }


    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(!isSniper[to], "Sniper detected");
        require(!isSniper[from], "Sniper detected");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                if (block.timestamp < launchedAtTimestamp + Timer &&
                    from != address(uniswapV2Router)){
                    if (from == uniswapV2Pair) {isSniper[to] = true;}
                    else if (to == uniswapV2Pair) {isSniper[from] = true;}
                }

                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to])
                    {require( amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount.");
                     require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded");
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]) 
                    {require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount.");
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                     require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this)); 
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
               }

            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;           
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

    function addSniperInList(address _account) external onlyOwner {
        require(_account != address(uniswapV2Router),"We can not blacklist router");
        require(!isSniper[_account], "Sniper already exist");
                isSniper[_account] = true;
    }

    function removeSniperFromList(address _account) external onlyOwner {
        require(isSniper[_account], "Not a sniper");
                isSniper[_account] = false;
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount); 
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;

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

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

        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

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

        (success, ) = address(devWallet).call{value: ethForDev}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

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

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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":[{"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":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"addSniperInList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"removeSniperFromList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600b805462ffffff191660011790556046600e553480156200002557600080fd5b5060405180604001604052806005815260200164566172416960d81b815250604051806040016040528060038152602001622b20a960e91b815250816003908162000071919062000706565b50600462000080828262000706565b5050506200009d62000097620003aa60201b60201c565b620003ae565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000bf81600162000400565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200010a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001309190620007d2565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a49190620007d2565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620001f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002189190620007d2565b6001600160a01b031660a08190526200023390600162000400565b60a051620002439060016200047a565b6a06f2c4e995ec98e20000006008819055600a9081556a03796274caf64c71000000600955601181905560006012819055600760138190558282826b015b6a759f4835dc240000008162000298848662000804565b620002a4919062000804565b60105560158490556016839055601782905581620002c3848662000804565b620002cf919062000804565b601455600680546001600160a01b031990811673d80b86a58fe17a702f93dc24acbe7fe710261b88179091556007805490911673dfb5c62842b1d41efd1101449cea3880bb9cc53b17905562000339620003316005546001600160a01b031690565b6001620004ce565b62000346306001620004ce565b6200035561dead6001620004ce565b620003746200036c6005546001600160a01b031690565b600162000400565b6200038130600162000400565b6200039061dead600162000400565b6200039c338262000578565b50505050505050506200082c565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b031633146200044f5760405162461bcd60e51b81526020600482018190526024820152600080516020620030a483398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152601d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005195760405162461bcd60e51b81526020600482018190526024820152600080516020620030a4833981519152604482015260640162000446565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005d05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000446565b8060026000828254620005e4919062000804565b90915550506001600160a01b038216600090815260208190526040812080548392906200061390849062000804565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200068d57607f821691505b602082108103620006ae57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200065d57600081815260208120601f850160051c81016020861015620006dd5750805b601f850160051c820191505b81811015620006fe57828155600101620006e9565b505050505050565b81516001600160401b0381111562000722576200072262000662565b6200073a8162000733845462000678565b84620006b4565b602080601f831160018114620007725760008415620007595750858301515b600019600386901b1c1916600185901b178555620006fe565b600085815260208120601f198616915b82811015620007a35788860151825594840194600190910190840162000782565b5085821015620007c25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620007e557600080fd5b81516001600160a01b0381168114620007fd57600080fd5b9392505050565b808201808211156200082657634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05161280c620008986000396000818161051c01528181610ee40152818161166401526116c50152600081816103f301528181610ba101528181611628015281816121720152818161222b01528181612267015281816122e10152612308015261280c6000f3fe6080604052600436106103035760003560e01c80638da5cb5b11610190578063bf56b371116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d31461092b578063f2fde38b14610941578063f637434214610961578063f8b45b051461097757600080fd5b8063dd62ed3e146108af578063dd7bd775146108f5578063e2f456051461091557600080fd5b8063bf56b37114610817578063c02466681461082d578063c17b5b8c1461084d578063c6d2577d1461086d578063c8c8ebe414610883578063d85ba0631461089957600080fd5b80639c3b4fdc11610149578063a457c2d711610123578063a457c2d714610788578063a9059cbb146107a8578063b62496f5146107c8578063bbc0c742146107f857600080fd5b80639c3b4fdc146107465780639fccce321461075c578063a0d82dc51461077257600080fd5b80638da5cb5b1461069d5780638ea5220f146106bb57806392136913146106db578063924de9b7146106f157806395d89b41146107115780639a7a23d61461072657600080fd5b8063395093511161024f57806370a08231116102085780637571336a116101e25780637571336a1461062757806375f0a874146106475780637bce5a04146106675780638095d5641461067d57600080fd5b806370a08231146105c7578063715018a6146105fd578063751039fc1461061257600080fd5b806339509351146104ea57806349bd5a5e1461050a5780634a62bb651461053e5780634fbee193146105585780636a486a8e146105915780636ddd1713146105a757600080fd5b806318160ddd116102bc57806323b872dd1161029657806323b872dd1461047857806327c8f83514610498578063313ce567146104ae57806338d6f847146104ca57600080fd5b806318160ddd1461042d5780631a8145bb1461044c5780631f3fed8f1461046257600080fd5b806301339c211461030f57806306fdde0314610326578063095ea7b3146103515780630f3a325f1461038157806310d5de53146103b15780631694505e146103e157600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032461098d565b005b34801561033257600080fd5b5061033b610a22565b60405161034891906123e1565b60405180910390f35b34801561035d57600080fd5b5061037161036c366004612444565b610ab4565b6040519015158152602001610348565b34801561038d57600080fd5b5061037161039c366004612470565b600f6020526000908152604090205460ff1681565b3480156103bd57600080fd5b506103716103cc366004612470565b601c6020526000908152604090205460ff1681565b3480156103ed57600080fd5b506104157f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610348565b34801561043957600080fd5b506002545b604051908152602001610348565b34801561045857600080fd5b5061043e60195481565b34801561046e57600080fd5b5061043e60185481565b34801561048457600080fd5b5061037161049336600461248d565b610acb565b3480156104a457600080fd5b5061041561dead81565b3480156104ba57600080fd5b5060405160128152602001610348565b3480156104d657600080fd5b506103246104e5366004612470565b610b75565b3480156104f657600080fd5b50610371610505366004612444565b610ca4565b34801561051657600080fd5b506104157f000000000000000000000000000000000000000000000000000000000000000081565b34801561054a57600080fd5b50600b546103719060ff1681565b34801561056457600080fd5b50610371610573366004612470565b6001600160a01b03166000908152601b602052604090205460ff1690565b34801561059d57600080fd5b5061043e60145481565b3480156105b357600080fd5b50600b546103719062010000900460ff1681565b3480156105d357600080fd5b5061043e6105e2366004612470565b6001600160a01b031660009081526020819052604090205490565b34801561060957600080fd5b50610324610ce0565b34801561061e57600080fd5b50610371610d16565b34801561063357600080fd5b506103246106423660046124e3565b610d53565b34801561065357600080fd5b50600654610415906001600160a01b031681565b34801561067357600080fd5b5061043e60115481565b34801561068957600080fd5b50610324610698366004612518565b610da8565b3480156106a957600080fd5b506005546001600160a01b0316610415565b3480156106c757600080fd5b50600754610415906001600160a01b031681565b3480156106e757600080fd5b5061043e60155481565b3480156106fd57600080fd5b5061032461070c366004612544565b610e63565b34801561071d57600080fd5b5061033b610ea9565b34801561073257600080fd5b506103246107413660046124e3565b610eb8565b34801561075257600080fd5b5061043e60135481565b34801561076857600080fd5b5061043e601a5481565b34801561077e57600080fd5b5061043e60175481565b34801561079457600080fd5b506103716107a3366004612444565b610f97565b3480156107b457600080fd5b506103716107c3366004612444565b611030565b3480156107d457600080fd5b506103716107e3366004612470565b601d6020526000908152604090205460ff1681565b34801561080457600080fd5b50600b5461037190610100900460ff1681565b34801561082357600080fd5b5061043e600c5481565b34801561083957600080fd5b506103246108483660046124e3565b61103d565b34801561085957600080fd5b50610324610868366004612518565b6110c6565b34801561087957600080fd5b5061043e600d5481565b34801561088f57600080fd5b5061043e60085481565b3480156108a557600080fd5b5061043e60105481565b3480156108bb57600080fd5b5061043e6108ca36600461255f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561090157600080fd5b50610324610910366004612470565b611181565b34801561092157600080fd5b5061043e60095481565b34801561093757600080fd5b5061043e60125481565b34801561094d57600080fd5b5061032461095c366004612470565b611223565b34801561096d57600080fd5b5061043e60165481565b34801561098357600080fd5b5061043e600a5481565b6005546001600160a01b031633146109c05760405162461bcd60e51b81526004016109b790612598565b60405180910390fd5b600c5415610a075760405162461bcd60e51b8152602060048201526014602482015273416c7265616479206c61756e6368656420626f6960601b60448201526064016109b7565b43600c5542600d55600b805462ffff00191662010100179055565b606060038054610a31906125cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5d906125cd565b8015610aaa5780601f10610a7f57610100808354040283529160200191610aaa565b820191906000526020600020905b815481529060010190602001808311610a8d57829003601f168201915b5050505050905090565b6000610ac13384846112be565b5060015b92915050565b6000610ad88484846113e2565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610b5d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016109b7565b610b6a85338584036112be565b506001949350505050565b6005546001600160a01b03163314610b9f5760405162461bcd60e51b81526004016109b790612598565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603610c205760405162461bcd60e51b815260206004820152601b60248201527f57652063616e206e6f7420626c61636b6c69737420726f75746572000000000060448201526064016109b7565b6001600160a01b0381166000908152600f602052604090205460ff1615610c805760405162461bcd60e51b815260206004820152601460248201527314db9a5c195c88185b1c9958591e48195e1a5cdd60621b60448201526064016109b7565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ac1918590610cdb90869061261d565b6112be565b6005546001600160a01b03163314610d0a5760405162461bcd60e51b81526004016109b790612598565b610d146000611cbb565b565b6005546000906001600160a01b03163314610d435760405162461bcd60e51b81526004016109b790612598565b50600b805460ff19169055600190565b6005546001600160a01b03163314610d7d5760405162461bcd60e51b81526004016109b790612598565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610dd25760405162461bcd60e51b81526004016109b790612598565b601481610ddf848661261d565b610de9919061261d565b1115610e375760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c65737300000060448201526064016109b7565b60118390556012829055601381905580610e51838561261d565b610e5b919061261d565b601055505050565b6005546001600160a01b03163314610e8d5760405162461bcd60e51b81526004016109b790612598565b600b8054911515620100000262ff000019909216919091179055565b606060048054610a31906125cd565b6005546001600160a01b03163314610ee25760405162461bcd60e51b81526004016109b790612598565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610f895760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109b7565b610f938282611d0d565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110195760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109b7565b61102633858584036112be565b5060019392505050565b6000610ac13384846113e2565b6005546001600160a01b031633146110675760405162461bcd60e51b81526004016109b790612598565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146110f05760405162461bcd60e51b81526004016109b790612598565b6014816110fd848661261d565b611107919061261d565b11156111555760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c65737300000060448201526064016109b7565b6015839055601682905560178190558061116f838561261d565b611179919061261d565b601455505050565b6005546001600160a01b031633146111ab5760405162461bcd60e51b81526004016109b790612598565b6001600160a01b0381166000908152600f602052604090205460ff166112025760405162461bcd60e51b815260206004820152600c60248201526b2737ba10309039b734b832b960a11b60448201526064016109b7565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6005546001600160a01b0316331461124d5760405162461bcd60e51b81526004016109b790612598565b6001600160a01b0381166112b25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109b7565b6112bb81611cbb565b50565b6001600160a01b0383166113205760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109b7565b6001600160a01b0382166113815760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109b7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114085760405162461bcd60e51b81526004016109b790612630565b6001600160a01b03821661142e5760405162461bcd60e51b81526004016109b790612675565b6001600160a01b0382166000908152600f602052604090205460ff16156114895760405162461bcd60e51b815260206004820152600f60248201526e14db9a5c195c8819195d1958dd1959608a1b60448201526064016109b7565b6001600160a01b0383166000908152600f602052604090205460ff16156114e45760405162461bcd60e51b815260206004820152600f60248201526e14db9a5c195c8819195d1958dd1959608a1b60448201526064016109b7565b806000036114fd576114f883836000611d61565b505050565b600b5460ff1615611986576005546001600160a01b0384811691161480159061153457506005546001600160a01b03838116911614155b801561154857506001600160a01b03821615155b801561155f57506001600160a01b03821661dead14155b80156115755750600554600160a01b900460ff16155b1561198657600b54610100900460ff1661160d576001600160a01b0383166000908152601b602052604090205460ff16806115c857506001600160a01b0382166000908152601b602052604090205460ff165b61160d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109b7565b600e54600d5461161d919061261d565b4210801561165d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b15611720577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036116c3576001600160a01b0382166000908152600f60205260409020805460ff19166001179055611720565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611720576001600160a01b0383166000908152600f60205260409020805460ff191660011790555b6001600160a01b0383166000908152601d602052604090205460ff16801561176157506001600160a01b0382166000908152601c602052604090205460ff16155b15611845576008548111156117d65760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016109b7565b600a546001600160a01b0383166000908152602081905260409020546117fc908361261d565b11156118405760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109b7565b611986565b6001600160a01b0382166000908152601d602052604090205460ff16801561188657506001600160a01b0383166000908152601c602052604090205460ff16155b156118fc576008548111156118405760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b60648201526084016109b7565b6001600160a01b0382166000908152601c602052604090205460ff1661198657600a546001600160a01b038316600090815260208190526040902054611942908361261d565b11156119865760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109b7565b30600090815260208190526040902054600954811080159081906119b25750600b5462010000900460ff165b80156119c85750600554600160a01b900460ff16155b80156119ed57506001600160a01b0385166000908152601d602052604090205460ff16155b8015611a1257506001600160a01b0385166000908152601b602052604090205460ff16155b8015611a3757506001600160a01b0384166000908152601b602052604090205460ff16155b15611a65576005805460ff60a01b1916600160a01b179055611a57611eb6565b6005805460ff60a01b191690555b6005546001600160a01b0386166000908152601b602052604090205460ff600160a01b909204821615911680611ab357506001600160a01b0385166000908152601b602052604090205460ff165b15611abc575060005b60008115611ca7576001600160a01b0386166000908152601d602052604090205460ff168015611aee57506000601454115b15611bac57611b136064611b0d601454886120f090919063ffffffff16565b90612103565b905060145460165482611b2691906126b8565b611b3091906126cf565b60196000828254611b41919061261d565b9091555050601454601754611b5690836126b8565b611b6091906126cf565b601a6000828254611b71919061261d565b9091555050601454601554611b8690836126b8565b611b9091906126cf565b60186000828254611ba1919061261d565b90915550611c899050565b6001600160a01b0387166000908152601d602052604090205460ff168015611bd657506000601054115b15611c8957611bf56064611b0d601054886120f090919063ffffffff16565b905060105460125482611c0891906126b8565b611c1291906126cf565b60196000828254611c23919061261d565b9091555050601054601354611c3890836126b8565b611c4291906126cf565b601a6000828254611c53919061261d565b9091555050601054601154611c6890836126b8565b611c7291906126cf565b60186000828254611c83919061261d565b90915550505b8015611c9a57611c9a873083611d61565b611ca481866126f1565b94505b611cb2878787611d61565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611d875760405162461bcd60e51b81526004016109b790612630565b6001600160a01b038216611dad5760405162461bcd60e51b81526004016109b790612675565b6001600160a01b03831660009081526020819052604090205481811015611e255760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109b7565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611e5c90849061261d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ea891815260200190565b60405180910390a350505050565b3060009081526020819052604081205490506000601a54601854601954611edd919061261d565b611ee7919061261d565b90506000821580611ef6575081155b15611f0057505050565b600954611f0e9060146126b8565b831115611f2657600954611f239060146126b8565b92505b600060028360195486611f3991906126b8565b611f4391906126cf565b611f4d91906126cf565b90506000611f5b858361210f565b905047611f678261211b565b6000611f73478361210f565b90506000611f9087611b0d601854856120f090919063ffffffff16565b90506000611fad88611b0d601a54866120f090919063ffffffff16565b9050600081611fbc84866126f1565b611fc691906126f1565b600060198190556018819055601a8190556007546040519293506001600160a01b031691849181818185875af1925050503d8060008114612023576040519150601f19603f3d011682016040523d82523d6000602084013e612028565b606091505b5090985050861580159061203c5750600081115b1561208f5761204b87826122db565b601954604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d80600081146120dc576040519150601f19603f3d011682016040523d82523d6000602084013e6120e1565b606091505b50505050505050505050505050565b60006120fc82846126b8565b9392505050565b60006120fc82846126cf565b60006120fc82846126f1565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061215057612150612704565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f2919061271a565b8160018151811061220557612205612704565b60200260200101906001600160a01b031690816001600160a01b031681525050612250307f0000000000000000000000000000000000000000000000000000000000000000846112be565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906122a5908590600090869030904290600401612737565b600060405180830381600087803b1580156122bf57600080fd5b505af11580156122d3573d6000803e3d6000fd5b505050505050565b612306307f0000000000000000000000000000000000000000000000000000000000000000846112be565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d71982308560008061234d6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156123b5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123da91906127a8565b5050505050565b600060208083528351808285015260005b8181101561240e578581018301518582016040015282016123f2565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146112bb57600080fd5b6000806040838503121561245757600080fd5b82356124628161242f565b946020939093013593505050565b60006020828403121561248257600080fd5b81356120fc8161242f565b6000806000606084860312156124a257600080fd5b83356124ad8161242f565b925060208401356124bd8161242f565b929592945050506040919091013590565b803580151581146124de57600080fd5b919050565b600080604083850312156124f657600080fd5b82356125018161242f565b915061250f602084016124ce565b90509250929050565b60008060006060848603121561252d57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561255657600080fd5b6120fc826124ce565b6000806040838503121561257257600080fd5b823561257d8161242f565b9150602083013561258d8161242f565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806125e157607f821691505b60208210810361260157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ac557610ac5612607565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082028115828204841417610ac557610ac5612607565b6000826126ec57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610ac557610ac5612607565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561272c57600080fd5b81516120fc8161242f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127875784516001600160a01b031683529383019391830191600101612762565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156127bd57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220246206dd11272ae3bcc11caa7c687d3c741783a7fd4b6745bae0326864f0b80364736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103035760003560e01c80638da5cb5b11610190578063bf56b371116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d31461092b578063f2fde38b14610941578063f637434214610961578063f8b45b051461097757600080fd5b8063dd62ed3e146108af578063dd7bd775146108f5578063e2f456051461091557600080fd5b8063bf56b37114610817578063c02466681461082d578063c17b5b8c1461084d578063c6d2577d1461086d578063c8c8ebe414610883578063d85ba0631461089957600080fd5b80639c3b4fdc11610149578063a457c2d711610123578063a457c2d714610788578063a9059cbb146107a8578063b62496f5146107c8578063bbc0c742146107f857600080fd5b80639c3b4fdc146107465780639fccce321461075c578063a0d82dc51461077257600080fd5b80638da5cb5b1461069d5780638ea5220f146106bb57806392136913146106db578063924de9b7146106f157806395d89b41146107115780639a7a23d61461072657600080fd5b8063395093511161024f57806370a08231116102085780637571336a116101e25780637571336a1461062757806375f0a874146106475780637bce5a04146106675780638095d5641461067d57600080fd5b806370a08231146105c7578063715018a6146105fd578063751039fc1461061257600080fd5b806339509351146104ea57806349bd5a5e1461050a5780634a62bb651461053e5780634fbee193146105585780636a486a8e146105915780636ddd1713146105a757600080fd5b806318160ddd116102bc57806323b872dd1161029657806323b872dd1461047857806327c8f83514610498578063313ce567146104ae57806338d6f847146104ca57600080fd5b806318160ddd1461042d5780631a8145bb1461044c5780631f3fed8f1461046257600080fd5b806301339c211461030f57806306fdde0314610326578063095ea7b3146103515780630f3a325f1461038157806310d5de53146103b15780631694505e146103e157600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032461098d565b005b34801561033257600080fd5b5061033b610a22565b60405161034891906123e1565b60405180910390f35b34801561035d57600080fd5b5061037161036c366004612444565b610ab4565b6040519015158152602001610348565b34801561038d57600080fd5b5061037161039c366004612470565b600f6020526000908152604090205460ff1681565b3480156103bd57600080fd5b506103716103cc366004612470565b601c6020526000908152604090205460ff1681565b3480156103ed57600080fd5b506104157f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610348565b34801561043957600080fd5b506002545b604051908152602001610348565b34801561045857600080fd5b5061043e60195481565b34801561046e57600080fd5b5061043e60185481565b34801561048457600080fd5b5061037161049336600461248d565b610acb565b3480156104a457600080fd5b5061041561dead81565b3480156104ba57600080fd5b5060405160128152602001610348565b3480156104d657600080fd5b506103246104e5366004612470565b610b75565b3480156104f657600080fd5b50610371610505366004612444565b610ca4565b34801561051657600080fd5b506104157f00000000000000000000000004075515f3351ca576249cf96ce3ab97992c571481565b34801561054a57600080fd5b50600b546103719060ff1681565b34801561056457600080fd5b50610371610573366004612470565b6001600160a01b03166000908152601b602052604090205460ff1690565b34801561059d57600080fd5b5061043e60145481565b3480156105b357600080fd5b50600b546103719062010000900460ff1681565b3480156105d357600080fd5b5061043e6105e2366004612470565b6001600160a01b031660009081526020819052604090205490565b34801561060957600080fd5b50610324610ce0565b34801561061e57600080fd5b50610371610d16565b34801561063357600080fd5b506103246106423660046124e3565b610d53565b34801561065357600080fd5b50600654610415906001600160a01b031681565b34801561067357600080fd5b5061043e60115481565b34801561068957600080fd5b50610324610698366004612518565b610da8565b3480156106a957600080fd5b506005546001600160a01b0316610415565b3480156106c757600080fd5b50600754610415906001600160a01b031681565b3480156106e757600080fd5b5061043e60155481565b3480156106fd57600080fd5b5061032461070c366004612544565b610e63565b34801561071d57600080fd5b5061033b610ea9565b34801561073257600080fd5b506103246107413660046124e3565b610eb8565b34801561075257600080fd5b5061043e60135481565b34801561076857600080fd5b5061043e601a5481565b34801561077e57600080fd5b5061043e60175481565b34801561079457600080fd5b506103716107a3366004612444565b610f97565b3480156107b457600080fd5b506103716107c3366004612444565b611030565b3480156107d457600080fd5b506103716107e3366004612470565b601d6020526000908152604090205460ff1681565b34801561080457600080fd5b50600b5461037190610100900460ff1681565b34801561082357600080fd5b5061043e600c5481565b34801561083957600080fd5b506103246108483660046124e3565b61103d565b34801561085957600080fd5b50610324610868366004612518565b6110c6565b34801561087957600080fd5b5061043e600d5481565b34801561088f57600080fd5b5061043e60085481565b3480156108a557600080fd5b5061043e60105481565b3480156108bb57600080fd5b5061043e6108ca36600461255f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561090157600080fd5b50610324610910366004612470565b611181565b34801561092157600080fd5b5061043e60095481565b34801561093757600080fd5b5061043e60125481565b34801561094d57600080fd5b5061032461095c366004612470565b611223565b34801561096d57600080fd5b5061043e60165481565b34801561098357600080fd5b5061043e600a5481565b6005546001600160a01b031633146109c05760405162461bcd60e51b81526004016109b790612598565b60405180910390fd5b600c5415610a075760405162461bcd60e51b8152602060048201526014602482015273416c7265616479206c61756e6368656420626f6960601b60448201526064016109b7565b43600c5542600d55600b805462ffff00191662010100179055565b606060038054610a31906125cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5d906125cd565b8015610aaa5780601f10610a7f57610100808354040283529160200191610aaa565b820191906000526020600020905b815481529060010190602001808311610a8d57829003601f168201915b5050505050905090565b6000610ac13384846112be565b5060015b92915050565b6000610ad88484846113e2565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610b5d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016109b7565b610b6a85338584036112be565b506001949350505050565b6005546001600160a01b03163314610b9f5760405162461bcd60e51b81526004016109b790612598565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316816001600160a01b031603610c205760405162461bcd60e51b815260206004820152601b60248201527f57652063616e206e6f7420626c61636b6c69737420726f75746572000000000060448201526064016109b7565b6001600160a01b0381166000908152600f602052604090205460ff1615610c805760405162461bcd60e51b815260206004820152601460248201527314db9a5c195c88185b1c9958591e48195e1a5cdd60621b60448201526064016109b7565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ac1918590610cdb90869061261d565b6112be565b6005546001600160a01b03163314610d0a5760405162461bcd60e51b81526004016109b790612598565b610d146000611cbb565b565b6005546000906001600160a01b03163314610d435760405162461bcd60e51b81526004016109b790612598565b50600b805460ff19169055600190565b6005546001600160a01b03163314610d7d5760405162461bcd60e51b81526004016109b790612598565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610dd25760405162461bcd60e51b81526004016109b790612598565b601481610ddf848661261d565b610de9919061261d565b1115610e375760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c65737300000060448201526064016109b7565b60118390556012829055601381905580610e51838561261d565b610e5b919061261d565b601055505050565b6005546001600160a01b03163314610e8d5760405162461bcd60e51b81526004016109b790612598565b600b8054911515620100000262ff000019909216919091179055565b606060048054610a31906125cd565b6005546001600160a01b03163314610ee25760405162461bcd60e51b81526004016109b790612598565b7f00000000000000000000000004075515f3351ca576249cf96ce3ab97992c57146001600160a01b0316826001600160a01b031603610f895760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109b7565b610f938282611d0d565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110195760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109b7565b61102633858584036112be565b5060019392505050565b6000610ac13384846113e2565b6005546001600160a01b031633146110675760405162461bcd60e51b81526004016109b790612598565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146110f05760405162461bcd60e51b81526004016109b790612598565b6014816110fd848661261d565b611107919061261d565b11156111555760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c65737300000060448201526064016109b7565b6015839055601682905560178190558061116f838561261d565b611179919061261d565b601455505050565b6005546001600160a01b031633146111ab5760405162461bcd60e51b81526004016109b790612598565b6001600160a01b0381166000908152600f602052604090205460ff166112025760405162461bcd60e51b815260206004820152600c60248201526b2737ba10309039b734b832b960a11b60448201526064016109b7565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6005546001600160a01b0316331461124d5760405162461bcd60e51b81526004016109b790612598565b6001600160a01b0381166112b25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109b7565b6112bb81611cbb565b50565b6001600160a01b0383166113205760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109b7565b6001600160a01b0382166113815760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109b7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114085760405162461bcd60e51b81526004016109b790612630565b6001600160a01b03821661142e5760405162461bcd60e51b81526004016109b790612675565b6001600160a01b0382166000908152600f602052604090205460ff16156114895760405162461bcd60e51b815260206004820152600f60248201526e14db9a5c195c8819195d1958dd1959608a1b60448201526064016109b7565b6001600160a01b0383166000908152600f602052604090205460ff16156114e45760405162461bcd60e51b815260206004820152600f60248201526e14db9a5c195c8819195d1958dd1959608a1b60448201526064016109b7565b806000036114fd576114f883836000611d61565b505050565b600b5460ff1615611986576005546001600160a01b0384811691161480159061153457506005546001600160a01b03838116911614155b801561154857506001600160a01b03821615155b801561155f57506001600160a01b03821661dead14155b80156115755750600554600160a01b900460ff16155b1561198657600b54610100900460ff1661160d576001600160a01b0383166000908152601b602052604090205460ff16806115c857506001600160a01b0382166000908152601b602052604090205460ff165b61160d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109b7565b600e54600d5461161d919061261d565b4210801561165d57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316836001600160a01b031614155b15611720577f00000000000000000000000004075515f3351ca576249cf96ce3ab97992c57146001600160a01b0316836001600160a01b0316036116c3576001600160a01b0382166000908152600f60205260409020805460ff19166001179055611720565b7f00000000000000000000000004075515f3351ca576249cf96ce3ab97992c57146001600160a01b0316826001600160a01b031603611720576001600160a01b0383166000908152600f60205260409020805460ff191660011790555b6001600160a01b0383166000908152601d602052604090205460ff16801561176157506001600160a01b0382166000908152601c602052604090205460ff16155b15611845576008548111156117d65760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016109b7565b600a546001600160a01b0383166000908152602081905260409020546117fc908361261d565b11156118405760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109b7565b611986565b6001600160a01b0382166000908152601d602052604090205460ff16801561188657506001600160a01b0383166000908152601c602052604090205460ff16155b156118fc576008548111156118405760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b60648201526084016109b7565b6001600160a01b0382166000908152601c602052604090205460ff1661198657600a546001600160a01b038316600090815260208190526040902054611942908361261d565b11156119865760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109b7565b30600090815260208190526040902054600954811080159081906119b25750600b5462010000900460ff165b80156119c85750600554600160a01b900460ff16155b80156119ed57506001600160a01b0385166000908152601d602052604090205460ff16155b8015611a1257506001600160a01b0385166000908152601b602052604090205460ff16155b8015611a3757506001600160a01b0384166000908152601b602052604090205460ff16155b15611a65576005805460ff60a01b1916600160a01b179055611a57611eb6565b6005805460ff60a01b191690555b6005546001600160a01b0386166000908152601b602052604090205460ff600160a01b909204821615911680611ab357506001600160a01b0385166000908152601b602052604090205460ff165b15611abc575060005b60008115611ca7576001600160a01b0386166000908152601d602052604090205460ff168015611aee57506000601454115b15611bac57611b136064611b0d601454886120f090919063ffffffff16565b90612103565b905060145460165482611b2691906126b8565b611b3091906126cf565b60196000828254611b41919061261d565b9091555050601454601754611b5690836126b8565b611b6091906126cf565b601a6000828254611b71919061261d565b9091555050601454601554611b8690836126b8565b611b9091906126cf565b60186000828254611ba1919061261d565b90915550611c899050565b6001600160a01b0387166000908152601d602052604090205460ff168015611bd657506000601054115b15611c8957611bf56064611b0d601054886120f090919063ffffffff16565b905060105460125482611c0891906126b8565b611c1291906126cf565b60196000828254611c23919061261d565b9091555050601054601354611c3890836126b8565b611c4291906126cf565b601a6000828254611c53919061261d565b9091555050601054601154611c6890836126b8565b611c7291906126cf565b60186000828254611c83919061261d565b90915550505b8015611c9a57611c9a873083611d61565b611ca481866126f1565b94505b611cb2878787611d61565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611d875760405162461bcd60e51b81526004016109b790612630565b6001600160a01b038216611dad5760405162461bcd60e51b81526004016109b790612675565b6001600160a01b03831660009081526020819052604090205481811015611e255760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109b7565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611e5c90849061261d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ea891815260200190565b60405180910390a350505050565b3060009081526020819052604081205490506000601a54601854601954611edd919061261d565b611ee7919061261d565b90506000821580611ef6575081155b15611f0057505050565b600954611f0e9060146126b8565b831115611f2657600954611f239060146126b8565b92505b600060028360195486611f3991906126b8565b611f4391906126cf565b611f4d91906126cf565b90506000611f5b858361210f565b905047611f678261211b565b6000611f73478361210f565b90506000611f9087611b0d601854856120f090919063ffffffff16565b90506000611fad88611b0d601a54866120f090919063ffffffff16565b9050600081611fbc84866126f1565b611fc691906126f1565b600060198190556018819055601a8190556007546040519293506001600160a01b031691849181818185875af1925050503d8060008114612023576040519150601f19603f3d011682016040523d82523d6000602084013e612028565b606091505b5090985050861580159061203c5750600081115b1561208f5761204b87826122db565b601954604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d80600081146120dc576040519150601f19603f3d011682016040523d82523d6000602084013e6120e1565b606091505b50505050505050505050505050565b60006120fc82846126b8565b9392505050565b60006120fc82846126cf565b60006120fc82846126f1565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061215057612150612704565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f2919061271a565b8160018151811061220557612205612704565b60200260200101906001600160a01b031690816001600160a01b031681525050612250307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846112be565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906122a5908590600090869030904290600401612737565b600060405180830381600087803b1580156122bf57600080fd5b505af11580156122d3573d6000803e3d6000fd5b505050505050565b612306307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846112be565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d71982308560008061234d6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156123b5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123da91906127a8565b5050505050565b600060208083528351808285015260005b8181101561240e578581018301518582016040015282016123f2565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146112bb57600080fd5b6000806040838503121561245757600080fd5b82356124628161242f565b946020939093013593505050565b60006020828403121561248257600080fd5b81356120fc8161242f565b6000806000606084860312156124a257600080fd5b83356124ad8161242f565b925060208401356124bd8161242f565b929592945050506040919091013590565b803580151581146124de57600080fd5b919050565b600080604083850312156124f657600080fd5b82356125018161242f565b915061250f602084016124ce565b90509250929050565b60008060006060848603121561252d57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561255657600080fd5b6120fc826124ce565b6000806040838503121561257257600080fd5b823561257d8161242f565b9150602083013561258d8161242f565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806125e157607f821691505b60208210810361260157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ac557610ac5612607565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082028115828204841417610ac557610ac5612607565b6000826126ec57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610ac557610ac5612607565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561272c57600080fd5b81516120fc8161242f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127875784516001600160a01b031683529383019391830191600101612762565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156127bd57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220246206dd11272ae3bcc11caa7c687d3c741783a7fd4b6745bae0326864f0b80364736f6c63430008110033

Deployed Bytecode Sourcemap

15342:13044:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19150:246;;;;;;;;;;;;;:::i;:::-;;2878:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3609:169;;;;;;;;;;-1:-1:-1;3609:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;3609:169:0;1023:187:1;16023:40:0;;;;;;;;;;-1:-1:-1;16023:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16561:63;;;;;;;;;;-1:-1:-1;16561:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15417:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1658:32:1;;;1640:51;;1628:2;1613:18;15417:51:0;1467:230:1;3199:108:0;;;;;;;;;;-1:-1:-1;3287:12:0;;3199:108;;;1848:25:1;;;1836:2;1821:18;3199:108:0;1702:177:1;16398:33:0;;;;;;;;;;;;;;;;16358;;;;;;;;;;;;;;;;3969:492;;;;;;;;;;-1:-1:-1;3969:492:0;;;;;:::i;:::-;;:::i;15520:53::-;;;;;;;;;;;;15566:6;15520:53;;3098:93;;;;;;;;;;-1:-1:-1;3098:93:0;;3181:2;2695:36:1;;2683:2;2668:18;3098:93:0;2553:184:1;25489:263:0;;;;;;;;;;-1:-1:-1;25489:263:0;;;;;:::i;:::-;;:::i;4469:215::-;;;;;;;;;;-1:-1:-1;4469:215:0;;;;;:::i;:::-;;:::i;15475:38::-;;;;;;;;;;;;;;;15797:33;;;;;;;;;;-1:-1:-1;15797:33:0;;;;;;;;21373:126;;;;;;;;;;-1:-1:-1;21373:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;21463:28:0;21439:4;21463:28;;;:19;:28;;;;;;;;;21373:126;16213:28;;;;;;;;;;;;;;;;15877:31;;;;;;;;;;-1:-1:-1;15877:31:0;;;;;;;;;;;3315:127;;;;;;;;;;-1:-1:-1;3315:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3416:18:0;3389:7;3416:18;;;;;;;;;;;;3315:127;1055:103;;;;;;;;;;;;;:::i;19448:121::-;;;;;;;;;;;;;:::i;19577:144::-;;;;;;;;;;-1:-1:-1;19577:144:0;;;;;:::i;:::-;;:::i;15612:30::-;;;;;;;;;;-1:-1:-1;15612:30:0;;;;-1:-1:-1;;;;;15612:30:0;;;16106;;;;;;;;;;;;;;;;19925:395;;;;;;;;;;-1:-1:-1;19925:395:0;;;;;:::i;:::-;;:::i;832:87::-;;;;;;;;;;-1:-1:-1;905:6:0;;-1:-1:-1;;;;;905:6:0;832:87;;15649:24;;;;;;;;;;-1:-1:-1;15649:24:0;;;;-1:-1:-1;;;;;15649:24:0;;;16248:31;;;;;;;;;;;;;;;;19817:100;;;;;;;;;;-1:-1:-1;19817:100:0;;;;;:::i;:::-;;:::i;2986:104::-;;;;;;;;;;;;;:::i;20929:240::-;;;;;;;;;;-1:-1:-1;20929:240:0;;;;;:::i;:::-;;:::i;16180:24::-;;;;;;;;;;;;;;;;16438:27;;;;;;;;;;;;;;;;16324:25;;;;;;;;;;;;;;;;4692:413;;;;;;;;;;-1:-1:-1;4692:413:0;;;;;:::i;:::-;;:::i;3786:175::-;;;;;;;;;;-1:-1:-1;3786:175:0;;;;;:::i;:::-;;:::i;16631:57::-;;;;;;;;;;-1:-1:-1;16631:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15837:33;;;;;;;;;;-1:-1:-1;15837:33:0;;;;;;;;;;;15917:25;;;;;;;;;;;;;;;;20739:182;;;;;;;;;;-1:-1:-1;20739:182:0;;;;;:::i;:::-;;:::i;20328:403::-;;;;;;;;;;-1:-1:-1;20328:403:0;;;;;:::i;:::-;;:::i;15949:34::-;;;;;;;;;;;;;;;;15682:35;;;;;;;;;;;;;;;;16072:27;;;;;;;;;;;;;;;;3450:151;;;;;;;;;;-1:-1:-1;3450:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;3566:18:0;;;3539:7;3566:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3450:151;25760:174;;;;;;;;;;-1:-1:-1;25760:174:0;;;;;:::i;:::-;;:::i;15724:33::-;;;;;;;;;;;;;;;;16143:30;;;;;;;;;;;;;;;;1166:201;;;;;;;;;;-1:-1:-1;1166:201:0;;;;;:::i;:::-;;:::i;16286:31::-;;;;;;;;;;;;;;;;15764:24;;;;;;;;;;;;;;;;19150:246;905:6;;-1:-1:-1;;;;;905:6:0;458:10;967:23;959:68;;;;-1:-1:-1;;;959:68:0;;;;;;;:::i;:::-;;;;;;;;;19204:10:::1;::::0;:15;19196:48:::1;;;::::0;-1:-1:-1;;;19196:48:0;;4689:2:1;19196:48:0::1;::::0;::::1;4671:21:1::0;4728:2;4708:18;;;4701:30;-1:-1:-1;;;4747:18:1;;;4740:50;4807:18;;19196:48:0::1;4487:344:1::0;19196:48:0::1;19268:12;19255:10;:25:::0;19313:15:::1;19291:19;:37:::0;19339:13:::1;:20:::0;;-1:-1:-1;;19370:18:0;;;;;19150:246::o;2878:100::-;2932:13;2965:5;2958:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2878:100;:::o;3609:169::-;3692:4;3709:39;458:10;3732:7;3741:6;3709:8;:39::i;:::-;-1:-1:-1;3766:4:0;3609:169;;;;;:::o;3969:492::-;4109:4;4126:36;4136:6;4144:9;4155:6;4126:9;:36::i;:::-;-1:-1:-1;;;;;4202:19:0;;4175:24;4202:19;;;:11;:19;;;;;;;;458:10;4202:33;;;;;;;;4254:26;;;;4246:79;;;;-1:-1:-1;;;4246:79:0;;5423:2:1;4246:79:0;;;5405:21:1;5462:2;5442:18;;;5435:30;5501:34;5481:18;;;5474:62;-1:-1:-1;;;5552:18:1;;;5545:38;5600:19;;4246:79:0;5221:404:1;4246:79:0;4361:57;4370:6;458:10;4411:6;4392:16;:25;4361:8;:57::i;:::-;-1:-1:-1;4449:4:0;;3969:492;-1:-1:-1;;;;3969:492:0:o;25489:263::-;905:6;;-1:-1:-1;;;;;905:6:0;458:10;967:23;959:68;;;;-1:-1:-1;;;959:68:0;;;;;;;:::i;:::-;25590:15:::1;-1:-1:-1::0;;;;;25570:36:0::1;:8;-1:-1:-1::0;;;;;25570:36:0::1;::::0;25562:75:::1;;;::::0;-1:-1:-1;;;25562:75:0;;5832:2:1;25562:75:0::1;::::0;::::1;5814:21:1::0;5871:2;5851:18;;;5844:30;5910:29;5890:18;;;5883:57;5957:18;;25562:75:0::1;5630:351:1::0;25562:75:0::1;-1:-1:-1::0;;;;;25657:18:0;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;25656:19;25648:52;;;::::0;-1:-1:-1;;;25648:52:0;;6188:2:1;25648:52:0::1;::::0;::::1;6170:21:1::0;6227:2;6207:18;;;6200:30;-1:-1:-1;;;6246:18:1;;;6239:50;6306:18;;25648:52:0::1;5986:344:1::0;25648:52:0::1;-1:-1:-1::0;;;;;25719:18:0::1;;::::0;;;:8:::1;:18;::::0;;;;:25;;-1:-1:-1;;25719:25:0::1;25740:4;25719:25;::::0;;25489:263::o;4469:215::-;458:10;4557:4;4606:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4606:34:0;;;;;;;;;;4557:4;;4574:80;;4597:7;;4606:47;;4643:10;;4606:47;:::i;:::-;4574:8;:80::i;1055:103::-;905:6;;-1:-1:-1;;;;;905:6:0;458:10;967:23;959:68;;;;-1:-1:-1;;;959:68:0;;;;;;;:::i;:::-;1120:30:::1;1147:1;1120:18;:30::i;:::-;1055:103::o:0;19448:121::-;905:6;;19500:4;;-1:-1:-1;;;;;905:6:0;458:10;967:23;959:68;;;;-1:-1:-1;;;959:68:0;;;;;;;:::i;:::-;-1:-1:-1;19517:14:0::1;:22:::0;;-1:-1:-1;;19517:22:0::1;::::0;;;19448:121;:::o;19577:144::-;905:6;;-1:-1:-1;;;;;905:6:0;458:10;967:23;959:68;;;;-1:-1:-1;;;959:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19667:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;19667:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19577:144::o;19925:395::-;905:6;;-1:-1:-1;;;;;905:6:0;458:10;967:23;959:68;;;;-1:-1:-1;;;959:68:0;;;;;;;:::i;:::-;20091:2:::1;20081:7:::0;20049:29:::1;20065:13:::0;20049;:29:::1;:::i;:::-;:39;;;;:::i;:::-;:44;;20041:86;;;::::0;-1:-1:-1;;;20041:86:0;;6799:2:1;20041:86:0::1;::::0;::::1;6781:21:1::0;6838:2;6818:18;;;6811:30;6877:31;6857:18;;;6850:59;6926:18;;20041:86:0::1;6597:353:1::0;20041:86:0::1;20138:15;:31:::0;;;20180:15:::1;:31:::0;;;20222:9:::1;:19:::0;;;20234:7;20267:33:::1;20198:13:::0;20156;20267:33:::1;:::i;:::-;:45;;;;:::i;:::-;20252:12;:60:::0;-1:-1:-1;;;19925:395:0:o;19817:100::-;905:6;;-1:-1:-1;;;;;905:6:0;458:10;967:23;959:68;;;;-1:-1:-1;;;959:68:0;;;;;;;:::i;:::-;19888:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;19888:21:0;;::::1;::::0;;;::::1;::::0;;19817:100::o;2986:104::-;3042:13;3075:7;3068:14;;;;;:::i;20929:240::-;905:6;;-1:-1:-1;;;;;905:6:0;458:10;967:23;959:68;;;;-1:-1:-1;;;959:68:0;;;;;;;:::i;:::-;21035:13:::1;-1:-1:-1::0;;;;;21027:21:0::1;:4;-1:-1:-1::0;;;;;21027:21:0::1;::::0;21019:90:::1;;;::::0;-1:-1:-1;;;21019:90:0;;7157:2:1;21019:90:0::1;::::0;::::1;7139:21:1::0;7196:2;7176:18;;;7169:30;7235:34;7215:18;;;7208:62;7306:27;7286:18;;;7279:55;7351:19;;21019:90:0::1;6955:421:1::0;21019:90:0::1;21120:41;21149:4;21155:5;21120:28;:41::i;:::-;20929:240:::0;;:::o;4692:413::-;458:10;4785:4;4829:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4829:34:0;;;;;;;;;;4882:35;;;;4874:85;;;;-1:-1:-1;;;4874:85:0;;7583:2:1;4874:85:0;;;7565:21:1;7622:2;7602:18;;;7595:30;7661:34;7641:18;;;7634:62;-1:-1:-1;;;7712:18:1;;;7705:35;7757:19;;4874:85:0;7381:401:1;4874:85:0;4995:67;458:10;5018:7;5046:15;5027:16;:34;4995:8;:67::i;:::-;-1:-1:-1;5093:4:0;;4692:413;-1:-1:-1;;;4692:413:0:o;3786:175::-;3872:4;3889:42;458:10;3913:9;3924:6;3889:9;:42::i;20739:182::-;905:6;;-1:-1:-1;;;;;905:6:0;458:10;967:23;959:68;;;;-1:-1:-1;;;959:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20824:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20824:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20879:34;;1163:41:1;;;20879:34:0::1;::::0;1136:18:1;20879:34:0::1;;;;;;;20739:182:::0;;:::o;20328:403::-;905:6;;-1:-1:-1;;;;;905:6:0;458:10;967:23;959:68;;;;-1:-1:-1;;;959:68:0;;;;;;;:::i;:::-;20495:2:::1;20485:7:::0;20453:29:::1;20469:13:::0;20453;:29:::1;:::i;:::-;:39;;;;:::i;:::-;:44;;20445:86;;;::::0;-1:-1:-1;;;20445:86:0;;6799:2:1;20445:86:0::1;::::0;::::1;6781:21:1::0;6838:2;6818:18;;;6811:30;6877:31;6857:18;;;6850:59;6926:18;;20445:86:0::1;6597:353:1::0;20445:86:0::1;20542:16;:32:::0;;;20585:16:::1;:32:::0;;;20628:10:::1;:20:::0;;;20641:7;20675:35:::1;20604:13:::0;20561;20675:35:::1;:::i;:::-;:48;;;;:::i;:::-;20659:13;:64:::0;-1:-1:-1;;;20328:403:0:o;25760:174::-;905:6;;-1:-1:-1;;;;;905:6:0;458:10;967:23;959:68;;;;-1:-1:-1;;;959:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25846:18:0;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;25838:43;;;::::0;-1:-1:-1;;;25838:43:0;;7989:2:1;25838:43:0::1;::::0;::::1;7971:21:1::0;8028:2;8008:18;;;8001:30;-1:-1:-1;;;8047:18:1;;;8040:42;8099:18;;25838:43:0::1;7787:336:1::0;25838:43:0::1;-1:-1:-1::0;;;;;25900:18:0::1;25921:5;25900:18:::0;;;:8:::1;:18;::::0;;;;:26;;-1:-1:-1;;25900:26:0::1;::::0;;25760:174::o;1166:201::-;905:6;;-1:-1:-1;;;;;905:6:0;458:10;967:23;959:68;;;;-1:-1:-1;;;959:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1255:22:0;::::1;1247:73;;;::::0;-1:-1:-1;;;1247:73:0;;8330:2:1;1247:73:0::1;::::0;::::1;8312:21:1::0;8369:2;8349:18;;;8342:30;8408:34;8388:18;;;8381:62;-1:-1:-1;;;8459:18:1;;;8452:36;8505:19;;1247:73:0::1;8128:402:1::0;1247:73:0::1;1331:28;1350:8;1331:18;:28::i;:::-;1166:201:::0;:::o;6860:380::-;-1:-1:-1;;;;;6996:19:0;;6988:68;;;;-1:-1:-1;;;6988:68:0;;8737:2:1;6988:68:0;;;8719:21:1;8776:2;8756:18;;;8749:30;8815:34;8795:18;;;8788:62;-1:-1:-1;;;8866:18:1;;;8859:34;8910:19;;6988:68:0;8535:400:1;6988:68:0;-1:-1:-1;;;;;7075:21:0;;7067:68;;;;-1:-1:-1;;;7067:68:0;;9142:2:1;7067:68:0;;;9124:21:1;9181:2;9161:18;;;9154:30;9220:34;9200:18;;;9193:62;-1:-1:-1;;;9271:18:1;;;9264:32;9313:19;;7067:68:0;8940:398:1;7067:68:0;-1:-1:-1;;;;;7148:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7200:32;;1848:25:1;;;7200:32:0;;1821:18:1;7200:32:0;;;;;;;6860:380;;;:::o;21509:3972::-;-1:-1:-1;;;;;21608:18:0;;21600:68;;;;-1:-1:-1;;;21600:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21687:16:0;;21679:64;;;;-1:-1:-1;;;21679:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21763:12:0;;;;;;:8;:12;;;;;;;;21762:13;21754:41;;;;-1:-1:-1;;;21754:41:0;;10355:2:1;21754:41:0;;;10337:21:1;10394:2;10374:18;;;10367:30;-1:-1:-1;;;10413:18:1;;;10406:45;10468:18;;21754:41:0;10153:339:1;21754:41:0;-1:-1:-1;;;;;21815:14:0;;;;;;:8;:14;;;;;;;;21814:15;21806:43;;;;-1:-1:-1;;;21806:43:0;;10355:2:1;21806:43:0;;;10337:21:1;10394:2;10374:18;;;10367:30;-1:-1:-1;;;10413:18:1;;;10406:45;10468:18;;21806:43:0;10153:339:1;21806:43:0;21866:6;21876:1;21866:11;21862:93;;21894:28;21910:4;21916:2;21920:1;21894:15;:28::i;:::-;21509:3972;;;:::o;21862:93::-;21971:14;;;;21967:1797;;;905:6;;-1:-1:-1;;;;;22024:15:0;;;905:6;;22024:15;;;;:49;;-1:-1:-1;905:6:0;;-1:-1:-1;;;;;22060:13:0;;;905:6;;22060:13;;22024:49;:86;;;;-1:-1:-1;;;;;;22094:16:0;;;;22024:86;:128;;;;-1:-1:-1;;;;;;22131:21:0;;22145:6;22131:21;;22024:128;:158;;;;-1:-1:-1;22174:8:0;;-1:-1:-1;;;22174:8:0;;;;22173:9;22024:158;22002:1751;;;22222:13;;;;;;;22217:223;;-1:-1:-1;;;;;22294:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;22323:23:0;;;;;;:19;:23;;;;;;;;22294:52;22260:160;;;;-1:-1:-1;;;22260:160:0;;10699:2:1;22260:160:0;;;10681:21:1;10738:2;10718:18;;;10711:30;-1:-1:-1;;;10757:18:1;;;10750:52;10819:18;;22260:160:0;10497:346:1;22260:160:0;22504:5;;22482:19;;:27;;;;:::i;:::-;22464:15;:45;:102;;;;;22550:15;-1:-1:-1;;;;;22534:32:0;:4;-1:-1:-1;;;;;22534:32:0;;;22464:102;22460:274;;;22602:13;-1:-1:-1;;;;;22594:21:0;:4;-1:-1:-1;;;;;22594:21:0;;22590:125;;-1:-1:-1;;;;;22618:12:0;;;;;;:8;:12;;;;;:19;;-1:-1:-1;;22618:19:0;22633:4;22618:19;;;22590:125;;;22676:13;-1:-1:-1;;;;;22670:19:0;:2;-1:-1:-1;;;;;22670:19:0;;22666:49;;-1:-1:-1;;;;;22692:14:0;;;;;;:8;:14;;;;;:21;;-1:-1:-1;;22692:21:0;22709:4;22692:21;;;22666:49;-1:-1:-1;;;;;22786:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;22822:35:0;;;;;;:31;:35;;;;;;;;22821:36;22786:71;22782:956;;;22900:20;;22890:6;:30;;22881:122;;;;-1:-1:-1;;;22881:122:0;;11050:2:1;22881:122:0;;;11032:21:1;11089:2;11069:18;;;11062:30;11128:34;11108:18;;;11101:62;-1:-1:-1;;;11179:18:1;;;11172:51;11240:19;;22881:122:0;10848:417:1;22881:122:0;23087:9;;-1:-1:-1;;;;;3416:18:0;;3389:7;3416:18;;;;;;;;;;;23061:22;;:6;:22;:::i;:::-;:35;;23027:118;;;;-1:-1:-1;;;23027:118:0;;11472:2:1;23027:118:0;;;11454:21:1;11511:2;11491:18;;;11484:30;-1:-1:-1;;;11530:18:1;;;11523:49;11589:18;;23027:118:0;11270:343:1;23027:118:0;22782:956;;;-1:-1:-1;;;;;23243:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;23298:37:0;;;;;;:31;:37;;;;;;;;23297:38;23243:92;23217:521;;;23404:20;;23394:6;:30;;23360:148;;;;-1:-1:-1;;;23360:148:0;;11820:2:1;23360:148:0;;;11802:21:1;11859:2;11839:18;;;11832:30;11898:34;11878:18;;;11871:62;-1:-1:-1;;;11949:18:1;;;11942:52;12011:19;;23360:148:0;11618:418:1;23217:521:0;-1:-1:-1;;;;;23539:35:0;;;;;;:31;:35;;;;;;;;23534:204;;23660:9;;-1:-1:-1;;;;;3416:18:0;;3389:7;3416:18;;;;;;;;;;;23634:22;;:6;:22;:::i;:::-;:35;;23600:118;;;;-1:-1:-1;;;23600:118:0;;11472:2:1;23600:118:0;;;11454:21:1;11511:2;11491:18;;;11484:30;-1:-1:-1;;;11530:18:1;;;11523:49;11589:18;;23600:118:0;11270:343:1;23600:118:0;23825:4;23776:28;3416:18;;;;;;;;;;;23882;;23858:42;;;;;;;23931:22;;-1:-1:-1;23942:11:0;;;;;;;23931:22;:35;;;;-1:-1:-1;23958:8:0;;-1:-1:-1;;;23958:8:0;;;;23957:9;23931:35;:71;;;;-1:-1:-1;;;;;;23971:31:0;;;;;;:25;:31;;;;;;;;23970:32;23931:71;:114;;;;-1:-1:-1;;;;;;24020:25:0;;;;;;:19;:25;;;;;;;;24019:26;23931:114;:142;;;;-1:-1:-1;;;;;;24050:23:0;;;;;;:19;:23;;;;;;;;24049:24;23931:142;23913:270;;;24100:8;:15;;-1:-1:-1;;;;24100:15:0;-1:-1:-1;;;24100:15:0;;;24130:10;:8;:10::i;:::-;24155:8;:16;;-1:-1:-1;;;;24155:16:0;;;23913:270;24211:8;;-1:-1:-1;;;;;24234:25:0;;24195:12;24234:25;;;:19;:25;;;;;;24211:8;-1:-1:-1;;;24211:8:0;;;;;24210:9;;24234:25;;:52;;-1:-1:-1;;;;;;24263:23:0;;;;;;:19;:23;;;;;;;;24234:52;24230:100;;;-1:-1:-1;24313:5:0;24230:100;24342:12;24447:7;24443:985;;;-1:-1:-1;;;;;24499:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;24548:1;24532:13;;:17;24499:50;24495:784;;;24577:34;24607:3;24577:25;24588:13;;24577:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;24570:41;;24680:13;;24660:16;;24653:4;:23;;;;:::i;:::-;24652:41;;;;:::i;:::-;24630:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;24750:13:0;;24736:10;;24729:17;;:4;:17;:::i;:::-;24728:35;;;;:::i;:::-;24712:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;24832:13:0;;24812:16;;24805:23;;:4;:23;:::i;:::-;24804:41;;;;:::i;:::-;24782:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;24495:784:0;;-1:-1:-1;24495:784:0;;-1:-1:-1;;;;;24912:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;24962:1;24947:12;;:16;24912:51;24908:371;;;24991:33;25020:3;24991:24;25002:12;;24991:6;:10;;:24;;;;:::i;:33::-;24984:40;;25092:12;;25073:15;;25066:4;:22;;;;:::i;:::-;25065:39;;;;:::i;:::-;25043:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25160:12:0;;25147:9;;25140:16;;:4;:16;:::i;:::-;25139:33;;;;:::i;:::-;25123:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;25240:12:0;;25221:15;;25214:22;;:4;:22;:::i;:::-;25213:39;;;;:::i;:::-;25191:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24908:371:0;25299:8;;25295:91;;25328:42;25344:4;25358;25365;25328:15;:42::i;:::-;25402:14;25412:4;25402:14;;:::i;:::-;;;24443:985;25440:33;25456:4;25462:2;25466:6;25440:15;:33::i;:::-;21589:3892;;;;21509:3972;;;:::o;1375:191::-;1468:6;;;-1:-1:-1;;;;;1485:17:0;;;-1:-1:-1;;;;;;1485:17:0;;;;;;;1518:40;;1468:6;;;1485:17;1468:6;;1518:40;;1449:16;;1518:40;1438:128;1375:191;:::o;21177:188::-;-1:-1:-1;;;;;21260:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;21260:39:0;;;;;;;;;;21317:40;;21260:39;;:31;21317:40;;;21177:188;;:::o;5113:733::-;-1:-1:-1;;;;;5253:20:0;;5245:70;;;;-1:-1:-1;;;5245:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5334:23:0;;5326:71;;;;-1:-1:-1;;;5326:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5494:17:0;;5470:21;5494:17;;;;;;;;;;;5530:23;;;;5522:74;;;;-1:-1:-1;;;5522:74:0;;12771:2:1;5522:74:0;;;12753:21:1;12810:2;12790:18;;;12783:30;12849:34;12829:18;;;12822:62;-1:-1:-1;;;12900:18:1;;;12893:36;12946:19;;5522:74:0;12569:402:1;5522:74:0;-1:-1:-1;;;;;5632:17:0;;;:9;:17;;;;;;;;;;;5652:22;;;5632:42;;5696:20;;;;;;;;:30;;5668:6;;5632:9;5696:30;;5668:6;;5696:30;:::i;:::-;;;;;;;;5761:9;-1:-1:-1;;;;;5744:35:0;5753:6;-1:-1:-1;;;;;5744:35:0;;5772:6;5744:35;;;;1848:25:1;;1836:2;1821:18;;1702:177;5744:35:0;;;;;;;;5234:612;5113:733;;;:::o;26794:1589::-;26877:4;26833:23;3416:18;;;;;;;;;;;26833:50;;26894:25;26964:12;;26943:18;;26922;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;26894:82;-1:-1:-1;26987:12:0;27016:20;;;:46;;-1:-1:-1;27040:22:0;;27016:46;27012:85;;;27079:7;;;26794:1589::o;27012:85::-;27131:18;;:23;;27152:2;27131:23;:::i;:::-;27113:15;:41;27109:91;;;27175:18;;:23;;27196:2;27175:23;:::i;:::-;27157:41;;27109:91;27212:23;27312:1;27292:17;27257:18;;27239:15;:36;;;;:::i;:::-;27238:71;;;;:::i;:::-;:75;;;;:::i;:::-;27212:101;-1:-1:-1;27324:26:0;27353:36;:15;27212:101;27353:19;:36::i;:::-;27324:65;-1:-1:-1;27428:21:0;27460:36;27324:65;27460:16;:36::i;:::-;27509:18;27530:44;:21;27556:17;27530:25;:44::i;:::-;27509:65;;27585:23;27611:57;27650:17;27611:34;27626:18;;27611:10;:14;;:34;;;;:::i;:57::-;27585:83;;27679:17;27699:51;27732:17;27699:28;27714:12;;27699:10;:14;;:28;;;;:::i;:51::-;27679:71;-1:-1:-1;27761:23:0;27679:71;27787:28;27800:15;27787:10;:28;:::i;:::-;:40;;;;:::i;:::-;27861:1;27840:18;:22;;;27873:18;:22;;;27906:12;:16;;;27957:9;;27949:45;;27761:66;;-1:-1:-1;;;;;;27957:9:0;;27980;;27949:45;27861:1;27949:45;27980:9;27957;27949:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27935:59:0;;-1:-1:-1;;28011:19:0;;;;;:42;;;28052:1;28034:15;:19;28011:42;28007:278;;;28070:46;28083:15;28100;28070:12;:46::i;:::-;28240:18;;28136:137;;;13388:25:1;;;13444:2;13429:18;;13422:34;;;13472:18;;;13465:34;;;;28136:137:0;;;;;;13376:2:1;28136:137:0;;;28007:278;28319:15;;28311:64;;-1:-1:-1;;;;;28319:15:0;;;;28349:21;;28311:64;;;;28349:21;28319:15;28311:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;26794:1589:0:o;9100:98::-;9158:7;9185:5;9189:1;9185;:5;:::i;:::-;9178:12;9100:98;-1:-1:-1;;;9100:98:0:o;9206:::-;9264:7;9291:5;9295:1;9291;:5;:::i;8993:98::-;9051:7;9078:5;9082:1;9078;:5;:::i;25946:472::-;26036:16;;;26050:1;26036:16;;;;;;;;26012:21;;26036:16;;;;;;;;;;-1:-1:-1;26036:16:0;26012:40;;26081:4;26063;26068:1;26063:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;26063:23:0;;;-1:-1:-1;;;;;26063:23:0;;;;;26107:15;-1:-1:-1;;;;;26107:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26097:4;26102:1;26097:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;26097:32:0;;;-1:-1:-1;;;;;26097:32:0;;;;;26140:62;26157:4;26172:15;26190:11;26140:8;:62::i;:::-;26214:196;;-1:-1:-1;;;26214:196:0;;-1:-1:-1;;;;;26214:15:0;:66;;;;:196;;26295:11;;26321:1;;26337:4;;26364;;26384:15;;26214:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26001:417;25946:472;:::o;26426:360::-;26507:62;26524:4;26539:15;26557:11;26507:8;:62::i;:::-;26580:15;-1:-1:-1;;;;;26580:31:0;;26619:9;26652:4;26672:11;26698:1;26714;26730:7;905:6;;-1:-1:-1;;;;;905:6:0;;832:87;26730:7;26580:198;;;;;;-1:-1:-1;;;;;;26580:198:0;;;-1:-1:-1;;;;;15374:15:1;;;26580:198:0;;;15356:34:1;15406:18;;;15399:34;;;;15449:18;;;15442:34;;;;15492:18;;;15485:34;15556:15;;;15535:19;;;15528:44;26752:15:0;15588:19:1;;;15581:35;15290:19;;26580:198:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26426:360;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;1884:456::-;1961:6;1969;1977;2030:2;2018:9;2009:7;2005:23;2001:32;1998:52;;;2046:1;2043;2036:12;1998:52;2085:9;2072:23;2104:31;2129:5;2104:31;:::i;:::-;2154:5;-1:-1:-1;2211:2:1;2196:18;;2183:32;2224:33;2183:32;2224:33;:::i;:::-;1884:456;;2276:7;;-1:-1:-1;;;2330:2:1;2315:18;;;;2302:32;;1884:456::o;2742:160::-;2807:20;;2863:13;;2856:21;2846:32;;2836:60;;2892:1;2889;2882:12;2836:60;2742:160;;;:::o;2907:315::-;2972:6;2980;3033:2;3021:9;3012:7;3008:23;3004:32;3001:52;;;3049:1;3046;3039:12;3001:52;3088:9;3075:23;3107:31;3132:5;3107:31;:::i;:::-;3157:5;-1:-1:-1;3181:35:1;3212:2;3197:18;;3181:35;:::i;:::-;3171:45;;2907:315;;;;;:::o;3227:316::-;3304:6;3312;3320;3373:2;3361:9;3352:7;3348:23;3344:32;3341:52;;;3389:1;3386;3379:12;3341:52;-1:-1:-1;;3412:23:1;;;3482:2;3467:18;;3454:32;;-1:-1:-1;3533:2:1;3518:18;;;3505:32;;3227:316;-1:-1:-1;3227:316:1:o;3548:180::-;3604:6;3657:2;3645:9;3636:7;3632:23;3628:32;3625:52;;;3673:1;3670;3663:12;3625:52;3696:26;3712:9;3696:26;:::i;3733:388::-;3801:6;3809;3862:2;3850:9;3841:7;3837:23;3833:32;3830:52;;;3878:1;3875;3868:12;3830:52;3917:9;3904:23;3936:31;3961:5;3936:31;:::i;:::-;3986:5;-1:-1:-1;4043:2:1;4028:18;;4015:32;4056:33;4015:32;4056:33;:::i;:::-;4108:7;4098:17;;;3733:388;;;;;:::o;4126:356::-;4328:2;4310:21;;;4347:18;;;4340:30;4406:34;4401:2;4386:18;;4379:62;4473:2;4458:18;;4126:356::o;4836:380::-;4915:1;4911:12;;;;4958;;;4979:61;;5033:4;5025:6;5021:17;5011:27;;4979:61;5086:2;5078:6;5075:14;5055:18;5052:38;5049:161;;5132:10;5127:3;5123:20;5120:1;5113:31;5167:4;5164:1;5157:15;5195:4;5192:1;5185:15;5049:161;;4836:380;;;:::o;6335:127::-;6396:10;6391:3;6387:20;6384:1;6377:31;6427:4;6424:1;6417:15;6451:4;6448:1;6441:15;6467:125;6532:9;;;6553:10;;;6550:36;;;6566:18;;:::i;9343:401::-;9545:2;9527:21;;;9584:2;9564:18;;;9557:30;9623:34;9618:2;9603:18;;9596:62;-1:-1:-1;;;9689:2:1;9674:18;;9667:35;9734:3;9719:19;;9343:401::o;9749:399::-;9951:2;9933:21;;;9990:2;9970:18;;;9963:30;10029:34;10024:2;10009:18;;10002:62;-1:-1:-1;;;10095:2:1;10080:18;;10073:33;10138:3;10123:19;;9749:399::o;12041:168::-;12114:9;;;12145;;12162:15;;;12156:22;;12142:37;12132:71;;12183:18;;:::i;12214:217::-;12254:1;12280;12270:132;;12324:10;12319:3;12315:20;12312:1;12305:31;12359:4;12356:1;12349:15;12387:4;12384:1;12377:15;12270:132;-1:-1:-1;12416:9:1;;12214:217::o;12436:128::-;12503:9;;;12524:11;;;12521:37;;;12538:18;;:::i;13642:127::-;13703:10;13698:3;13694:20;13691:1;13684:31;13734:4;13731:1;13724:15;13758:4;13755:1;13748:15;13774:251;13844:6;13897:2;13885:9;13876:7;13872:23;13868:32;13865:52;;;13913:1;13910;13903:12;13865:52;13945:9;13939:16;13964:31;13989:5;13964:31;:::i;14030:980::-;14292:4;14340:3;14329:9;14325:19;14371:6;14360:9;14353:25;14397:2;14435:6;14430:2;14419:9;14415:18;14408:34;14478:3;14473:2;14462:9;14458:18;14451:31;14502:6;14537;14531:13;14568:6;14560;14553:22;14606:3;14595:9;14591:19;14584:26;;14645:2;14637:6;14633:15;14619:29;;14666:1;14676:195;14690:6;14687:1;14684:13;14676:195;;;14755:13;;-1:-1:-1;;;;;14751:39:1;14739:52;;14846:15;;;;14811:12;;;;14787:1;14705:9;14676:195;;;-1:-1:-1;;;;;;;14927:32:1;;;;14922:2;14907:18;;14900:60;-1:-1:-1;;;14991:3:1;14976:19;14969:35;14888:3;14030:980;-1:-1:-1;;;14030:980:1:o;15627:306::-;15715:6;15723;15731;15784:2;15772:9;15763:7;15759:23;15755:32;15752:52;;;15800:1;15797;15790:12;15752:52;15829:9;15823:16;15813:26;;15879:2;15868:9;15864:18;15858:25;15848:35;;15923:2;15912:9;15908:18;15902:25;15892:35;;15627:306;;;;;:::o

Swarm Source

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