ETH Price: $2,396.69 (+1.03%)

Token

MAX (X)
 

Overview

Max Total Supply

1,000,000,000 X

Holders

55

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 12 Decimals)

Balance
303,625.706643743461 X

Value
$0.00
0xd7a2f98fc4f4198e4c41d1b39665d8b2c4b47a33
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:
MAX

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-19
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.21;

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _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 {
            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 MAX 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;

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

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


    address public teamWallet;

   
    uint256 public deadBlocks;

    uint256 public buyTotalFees;
    uint256 public buyTaxes;

    uint256 public sellTotalFees;
    uint256 public sellTaxes;


   //Cooldown for bot protection

    mapping (address => User) private cooldown;
     bool private _cooldownEnabled = true;
      event CooldownEnabledUpdated(bool _cooldown);
       uint256 private buyLimitEnd;

    uint256 private Cooldowntime= 120 seconds ;
    
          struct User {
        uint256 buy;
        uint256 sell;
        bool exists;
    }

    mapping(address => bool) private _isExcludedFromFees;
    mapping(uint256 => uint256) private swapInBlock;
    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 marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

    constructor() ERC20("MAX", "X") {
        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 totalSupply = 1_000_000_000 * 1e12;

        
        buyTaxes=3;
          buyTotalFees=buyTaxes; 
   
         sellTaxes=3;
        sellTotalFees=sellTaxes;


        maxTransactionAmount = (totalSupply*2)/100;
        maxWallet = (totalSupply*3)/100;
        swapTokensAtAmount = 100000 * 1e12;

        marketingWallet = 0xF9417452c5FaDcfeA78e9683Efc1835FC4282149;
        teamWallet = 0x48b9827b32005350c6fE894707473b7573C0973C;

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

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

        _mint(msg.sender, (totalSupply*92)/100);
        _mint(marketingWallet, (totalSupply*5)/100);
        _mint(teamWallet, (totalSupply*3)/100);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
       
        tradingActive = true;
        swapEnabled = true;
         buyLimitEnd = block.timestamp + (60 seconds);
    }

    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }
          function setCooldownEnabled(bool onoff) external onlyOwner() {
        _cooldownEnabled = onoff;
        emit CooldownEnabledUpdated(_cooldownEnabled);
    }


    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
    
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
    
        maxTransactionAmount = newNum * (10**12);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
   
        maxWallet = newNum * (10**12);
    }


        function airDrop(address[] memory holders, uint256[] memory tokenAmount) external onlyOwner {
        require(holders.length == tokenAmount.length, "arrays must be the same length");
        require(holders.length < 200, "Can only airdrop 200 holders per txn due to gas limits"); 
        for(uint256 i = 0; i < holders.length; i++){
            address wallet = holders[i];
            uint256 amount = tokenAmount[i]*1e12;
            _transfer(msg.sender, wallet, amount);
        }
    }


       function burn(uint256 amount) public onlyOwner {
        _burn(_msgSender(), amount);
    }

    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 excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function manualswap(uint256 amount) external {
      require(_msgSender() == marketingWallet);
        require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount");
        swapTokensForEth(amount);
    }

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

        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 updateBuyFees(
        uint256 _buytax
    ) external onlyOwner {
        buyTaxes = _buytax;
        buyTotalFees = buyTaxes;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }

    function updateSellFees(
        uint256 _selltax
    ) external onlyOwner {
        sellTaxes = _selltax;
        sellTotalFees = sellTaxes;
        require(sellTotalFees <= 10, "Must keep fees at 10% or less");
    }

    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
       function updateTimer(uint256 sec) external onlyOwner {
     
        Cooldowntime = sec;
      
    }
             function updateLimit(uint256 sec) external onlyOwner {
     
        buyLimitEnd = sec;
      
    }

       function timeToBuy(address buyer) public view returns (uint) {
        return block.timestamp - cooldown[buyer].buy;
    }

    function timeToSell(address buyer) public view returns (uint) {
        return block.timestamp - cooldown[buyer].sell;
    }


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

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

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

   

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
            
            
////Cooldown for bot


  if(_cooldownEnabled) {
                if(!cooldown[msg.sender].exists) {
                    cooldown[msg.sender] = User(0,0,true);
                }
            }





       // buy cooldown
            if(from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedMaxTransactionAmount[to]) {
                require(tradingActive, "Trading not yet enabled.");
              
                
                 
                if(_cooldownEnabled) {
                    if(buyLimitEnd > block.timestamp) {
                        require(amount <= maxTransactionAmount);
                        require(cooldown[to].buy < block.timestamp, "Your buy cooldown has not expired.");
                        cooldown[to].buy = block.timestamp + (Cooldowntime);
                    }
                }
                if(_cooldownEnabled) {
                    cooldown[to].sell = block.timestamp + (Cooldowntime);
                }
            }

/// sell Cooldown 

   if( from != uniswapV2Pair  && tradingActive) {

                if(_cooldownEnabled) {
                    require(cooldown[from].sell < block.timestamp, "Your sell cooldown has not expired.");
                }
   }


////  Cooldown End


                //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 any account belongs to _isExcludedFromFee account then remove the fee
        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);
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
            }

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

            amount -= fees;
        }

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;

        if (contractBalance == 0) {
            return;
        }

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


        uint256 amountToSwapForETH = contractBalance;

        swapTokensForEth(amountToSwapForETH);

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

    function getContractAddress() external view returns(address) {
        return address(this);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_cooldown","type":"bool"}],"name":"CooldownEnabledUpdated","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"holders","type":"address[]"},{"internalType":"uint256[]","name":"tokenAmount","type":"uint256[]"}],"name":"airDrop","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTaxes","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":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxes","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":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","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":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"}],"name":"timeToBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"}],"name":"timeToSell","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":"_buytax","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sec","type":"uint256"}],"name":"updateLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_selltax","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sec","type":"uint256"}],"name":"updateTimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600a805462ffffff191660019081179091556011805460ff19169091179055607860135534801562000034575f80fd5b506040518060400160405280600381526020016209a82b60eb1b815250604051806040016040528060018152602001600b60fb1b81525081600390816200007c9190620007ac565b5060046200008b8282620007ac565b505050620000a8620000a26200045e60201b60201c565b62000462565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000ca816001620004b3565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000113573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000139919062000874565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000185573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001ab919062000874565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620001f6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200021c919062000874565b6001600160a01b031660a081905262000237906001620004b3565b60a051620002479060016200052b565b6003600d819055600c819055600f819055600e55683635c9adc5dea00000606462000274826002620008b7565b620002809190620008d7565b600755606462000292826003620008b7565b6200029e9190620008d7565b60095567016345785d8a0000600855600680546001600160a01b03191673f9417452c5fadcfea78e9683efc1835fc4282149179055600a80547648b9827b32005350c6fe894707473b7573c0973c0000006301000000600160b81b031990911617905562000320620003186005546001600160a01b031690565b60016200057e565b6200032d3060016200057e565b6200033c61dead60016200057e565b60065462000355906001600160a01b031660016200057e565b600a546200037590630100000090046001600160a01b031660016200057e565b620003946200038c6005546001600160a01b031690565b6001620004b3565b620003a1306001620004b3565b600654620003ba906001600160a01b03166001620004b3565b600a54620003da90630100000090046001600160a01b03166001620004b3565b620003e961dead6001620004b3565b6200040f336064620003fd84605c620008b7565b620004099190620008d7565b62000626565b6006546200042f906001600160a01b03166064620003fd846005620008b7565b600a546200045690630100000090046001600160a01b03166064620003fd846003620008b7565b50506200090d565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6005546001600160a01b03163314620005015760405162461bcd60e51b815260206004820181905260248201525f80516020620033c083398151915260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152601660205260409020805460ff1916911515919091179055565b6001600160a01b0382165f81815260176020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005c85760405162461bcd60e51b815260206004820181905260248201525f80516020620033c08339815191526044820152606401620004f8565b6001600160a01b0382165f81815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200067e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004f8565b8060025f828254620006919190620008f7565b90915550506001600160a01b0382165f9081526020819052604081208054839290620006bf908490620008f7565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200073657607f821691505b6020821081036200075557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000708575f81815260208120601f850160051c81016020861015620007835750805b601f850160051c820191505b81811015620007a4578281556001016200078f565b505050505050565b81516001600160401b03811115620007c857620007c86200070d565b620007e081620007d9845462000721565b846200075b565b602080601f83116001811462000816575f8415620007fe5750858301515b5f19600386901b1c1916600185901b178555620007a4565b5f85815260208120601f198616915b82811015620008465788860151825594840194600190910190840162000825565b50858210156200086457878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f6020828403121562000885575f80fd5b81516001600160a01b03811681146200089c575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417620008d157620008d1620008a3565b92915050565b5f82620008f257634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620008d157620008d1620008a3565b60805160a051612a60620009605f395f81816104f6015281816110c00152818161183c0152611a1d01525f81816103cd015281816118780152818161213f015281816121f601526122320152612a605ff3fe60806040526004361061032a575f3560e01c8063864701a5116101a3578063c0246668116100f2578063eba4c33311610092578063f66895a31161006d578063f66895a314610971578063f8b45b0514610986578063fabb0b4f1461099b578063fae0959a146109b0575f80fd5b8063eba4c33314610914578063ec54a36a14610933578063f2fde38b14610952575f80fd5b8063d257b34f116100cd578063d257b34f14610887578063d85ba063146108a6578063dd62ed3e146108bb578063e2f45605146108ff575f80fd5b8063c024666814610834578063c18bc19514610853578063c8c8ebe414610872575f80fd5b80639a7a23d61161015d578063a9fc35a911610138578063a9fc35a9146107aa578063aacebbe3146107c9578063b62496f5146107e8578063bbc0c74214610816575f80fd5b80639a7a23d61461074d578063a457c2d71461076c578063a9059cbb1461078b575f80fd5b8063864701a5146106b5578063881dce60146106ca5780638a8c523c146106e95780638da5cb5b146106fd578063924de9b71461071a57806395d89b4114610739575f80fd5b80634a62bb65116102795780636fc3eaec1161021957806371fc4688116101f457806371fc468814610644578063751039fc146106635780637571336a1461067757806375f0a87414610696575f80fd5b80636fc3eaec146105e857806370a08231146105fc578063715018a614610630575f80fd5b806365216a411161025457806365216a411461057657806368a3a6a5146105955780636a486a8e146105b45780636ddd1713146105c9575f80fd5b80634a62bb65146105185780635932ead1146105315780635992704414610550575f80fd5b806323b872dd116102e457806332a2c5d0116102bf57806332a2c5d01461049557806339509351146104a757806342966c68146104c657806349bd5a5e146104e5575f80fd5b806323b872dd1461044657806327c8f83514610465578063313ce5671461047a575f80fd5b806306fdde0314610335578063095ea7b31461035f57806310d5de531461038e5780631694505e146103bc57806318160ddd14610407578063203e727e14610425575f80fd5b3661033157005b5f80fd5b348015610340575f80fd5b506103496109cf565b60405161035691906124f8565b60405180910390f35b34801561036a575f80fd5b5061037e610379366004612557565b610a5f565b6040519015158152602001610356565b348015610399575f80fd5b5061037e6103a8366004612581565b60166020525f908152604090205460ff1681565b3480156103c7575f80fd5b506103ef7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610356565b348015610412575f80fd5b506002545b604051908152602001610356565b348015610430575f80fd5b5061044461043f36600461259c565b610a75565b005b348015610451575f80fd5b5061037e6104603660046125b3565b610abd565b348015610470575f80fd5b506103ef61dead81565b348015610485575f80fd5b50604051600c8152602001610356565b3480156104a0575f80fd5b50306103ef565b3480156104b2575f80fd5b5061037e6104c1366004612557565b610b65565b3480156104d1575f80fd5b506104446104e036600461259c565b610ba0565b3480156104f0575f80fd5b506103ef7f000000000000000000000000000000000000000000000000000000000000000081565b348015610523575f80fd5b50600a5461037e9060ff1681565b34801561053c575f80fd5b5061044461054b366004612600565b610bd7565b34801561055b575f80fd5b50600a546103ef90630100000090046001600160a01b031681565b348015610581575f80fd5b506104446105903660046126e9565b610c4e565b3480156105a0575f80fd5b506104176105af366004612581565b610db3565b3480156105bf575f80fd5b50610417600e5481565b3480156105d4575f80fd5b50600a5461037e9062010000900460ff1681565b3480156105f3575f80fd5b50610444610dd5565b348015610607575f80fd5b50610417610616366004612581565b6001600160a01b03165f9081526020819052604090205490565b34801561063b575f80fd5b50610444610e2a565b34801561064f575f80fd5b5061044461065e36600461259c565b610e5f565b34801561066e575f80fd5b5061037e610ee4565b348015610682575f80fd5b506104446106913660046127a5565b610f20565b3480156106a1575f80fd5b506006546103ef906001600160a01b031681565b3480156106c0575f80fd5b50610417600d5481565b3480156106d5575f80fd5b506104446106e436600461259c565b610f74565b3480156106f4575f80fd5b50610444610ff4565b348015610708575f80fd5b506005546001600160a01b03166103ef565b348015610725575f80fd5b50610444610734366004612600565b61103f565b348015610744575f80fd5b50610349611085565b348015610758575f80fd5b506104446107673660046127a5565b611094565b348015610777575f80fd5b5061037e610786366004612557565b611173565b348015610796575f80fd5b5061037e6107a5366004612557565b61120b565b3480156107b5575f80fd5b506104176107c4366004612581565b611217565b3480156107d4575f80fd5b506104446107e3366004612581565b61123c565b3480156107f3575f80fd5b5061037e610802366004612581565b60176020525f908152604090205460ff1681565b348015610821575f80fd5b50600a5461037e90610100900460ff1681565b34801561083f575f80fd5b5061044461084e3660046127a5565b6112c2565b34801561085e575f80fd5b5061044461086d36600461259c565b61134a565b34801561087d575f80fd5b5061041760075481565b348015610892575f80fd5b5061037e6108a136600461259c565b611389565b3480156108b1575f80fd5b50610417600c5481565b3480156108c6575f80fd5b506104176108d53660046127d8565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b34801561090a575f80fd5b5061041760085481565b34801561091f575f80fd5b5061044461092e36600461259c565b6113c3565b34801561093e575f80fd5b5061044461094d36600461259c565b611448565b34801561095d575f80fd5b5061044461096c366004612581565b611477565b34801561097c575f80fd5b50610417600f5481565b348015610991575f80fd5b5061041760095481565b3480156109a6575f80fd5b50610417600b5481565b3480156109bb575f80fd5b506104446109ca36600461259c565b61150f565b6060600380546109de9061280f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0a9061280f565b8015610a555780601f10610a2c57610100808354040283529160200191610a55565b820191905f5260205f20905b815481529060010190602001808311610a3857829003601f168201915b5050505050905090565b5f610a6b338484611539565b5060015b92915050565b6005546001600160a01b03163314610aa85760405162461bcd60e51b8152600401610a9f90612847565b60405180910390fd5b610ab78164e8d4a51000612890565b60075550565b5f610ac984848461165c565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610b4d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a9f565b610b5a8533858403611539565b506001949350505050565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610a6b918590610b9b9086906128a7565b611539565b6005546001600160a01b03163314610bca5760405162461bcd60e51b8152600401610a9f90612847565b610bd43382611f4e565b50565b6005546001600160a01b03163314610c015760405162461bcd60e51b8152600401610a9f90612847565b6011805460ff191682151590811790915560405160ff909116151581527f0d63187a8abb5b4d1bb562e1163897386b0a88ee72e0799dd105bd0fd6f287069060200160405180910390a150565b6005546001600160a01b03163314610c785760405162461bcd60e51b8152600401610a9f90612847565b8051825114610cc95760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a9f565b60c8825110610d395760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f702032303020686f6c64657273207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610a9f565b5f5b8251811015610dae575f838281518110610d5757610d576128ba565b602002602001015190505f838381518110610d7457610d746128ba565b602002602001015164e8d4a51000610d8c9190612890565b9050610d9933838361165c565b50508080610da6906128ce565b915050610d3b565b505050565b6001600160a01b0381165f90815260106020526040812054610a6f90426128e6565b6006546040515f916001600160a01b03169047908381818185875af1925050503d805f8114610e1f576040519150601f19603f3d011682016040523d82523d5f602084013e610e24565b606091505b50505050565b6005546001600160a01b03163314610e545760405162461bcd60e51b8152600401610a9f90612847565b610e5d5f612099565b565b6005546001600160a01b03163314610e895760405162461bcd60e51b8152600401610a9f90612847565b600d819055600c819055600a811115610bd45760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610a9f565b6005545f906001600160a01b03163314610f105760405162461bcd60e51b8152600401610a9f90612847565b50600a805460ff19169055600190565b6005546001600160a01b03163314610f4a5760405162461bcd60e51b8152600401610a9f90612847565b6001600160a01b03919091165f908152601660205260409020805460ff1916911515919091179055565b6006546001600160a01b0316336001600160a01b031614610f93575f80fd5b305f908152602081905260409020548111158015610fb057505f81115b610feb5760405162461bcd60e51b815260206004820152600c60248201526b15dc9bdb99c8185b5bdd5b9d60a21b6044820152606401610a9f565b610bd4816120ea565b6005546001600160a01b0316331461101e5760405162461bcd60e51b8152600401610a9f90612847565b600a805462ffff0019166201010017905561103a42603c6128a7565b601255565b6005546001600160a01b031633146110695760405162461bcd60e51b8152600401610a9f90612847565b600a8054911515620100000262ff000019909216919091179055565b6060600480546109de9061280f565b6005546001600160a01b031633146110be5760405162461bcd60e51b8152600401610a9f90612847565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036111655760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a9f565b61116f82826122a0565b5050565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156111f45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a9f565b6112013385858403611539565b5060019392505050565b5f610a6b33848461165c565b6001600160a01b0381165f90815260106020526040812060010154610a6f90426128e6565b6005546001600160a01b031633146112665760405162461bcd60e51b8152600401610a9f90612847565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b05674905f90a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146112ec5760405162461bcd60e51b8152600401610a9f90612847565b6001600160a01b0382165f81815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146113745760405162461bcd60e51b8152600401610a9f90612847565b6113838164e8d4a51000612890565b60095550565b6005545f906001600160a01b031633146113b55760405162461bcd60e51b8152600401610a9f90612847565b50600881905560015b919050565b6005546001600160a01b031633146113ed5760405162461bcd60e51b8152600401610a9f90612847565b600f819055600e819055600a811115610bd45760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610a9f565b6005546001600160a01b031633146114725760405162461bcd60e51b8152600401610a9f90612847565b601355565b6005546001600160a01b031633146114a15760405162461bcd60e51b8152600401610a9f90612847565b6001600160a01b0381166115065760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a9f565b610bd481612099565b6005546001600160a01b0316331461103a5760405162461bcd60e51b8152600401610a9f90612847565b6001600160a01b03831661159b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a9f565b6001600160a01b0382166115fc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a9f565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116825760405162461bcd60e51b8152600401610a9f906128f9565b6001600160a01b0382166116a85760405162461bcd60e51b8152600401610a9f9061293e565b805f036116ba57610dae83835f6122f3565b600a54610100900460ff1661174b576001600160a01b0383165f9081526014602052604090205460ff168061170657506001600160a01b0382165f9081526014602052604090205460ff165b61174b5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a9f565b600a5460ff1615611d48576005546001600160a01b0384811691161480159061178257506005546001600160a01b03838116911614155b801561179657506001600160a01b03821615155b80156117ad57506001600160a01b03821661dead14155b80156117c35750600554600160a01b900460ff16155b15611d485760115460ff161561183a57335f9081526010602052604090206002015460ff1661183a57604080516060810182525f808252602080830182815260018486018181523385526010909352949092209251835590519282019290925590516002909101805460ff19169115159190911790555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161480156118ad57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156118d157506001600160a01b0382165f9081526016602052604090205460ff16155b15611a1b57600a54610100900460ff1661192d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610a9f565b60115460ff16156119e7574260125411156119e757600754811115611950575f80fd5b6001600160a01b0382165f9081526010602052604090205442116119c15760405162461bcd60e51b815260206004820152602260248201527f596f75722062757920636f6f6c646f776e20686173206e6f7420657870697265604482015261321760f11b6064820152608401610a9f565b6013546119ce90426128a7565b6001600160a01b0383165f908152601060205260409020555b60115460ff1615611a1b576013546119ff90426128a7565b6001600160a01b0383165f908152601060205260409020600101555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614158015611a645750600a54610100900460ff165b15611ae95760115460ff1615611ae9576001600160a01b0383165f908152601060205260409020600101544211611ae95760405162461bcd60e51b815260206004820152602360248201527f596f75722073656c6c20636f6f6c646f776e20686173206e6f7420657870697260448201526232b21760e91b6064820152608401610a9f565b6001600160a01b0383165f9081526017602052604090205460ff168015611b2857506001600160a01b0382165f9081526016602052604090205460ff16155b15611c0b57600754811115611b9d5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a9f565b6009546001600160a01b0383165f90815260208190526040902054611bc290836128a7565b1115611c065760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a9f565b611d48565b6001600160a01b0382165f9081526017602052604090205460ff168015611c4a57506001600160a01b0383165f9081526016602052604090205460ff16155b15611cc057600754811115611c065760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610a9f565b6001600160a01b0382165f9081526016602052604090205460ff16611d48576009546001600160a01b0383165f90815260208190526040902054611d0490836128a7565b1115611d485760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a9f565b305f9081526020819052604090205460085481108015908190611d735750600a5462010000900460ff165b8015611d895750600554600160a01b900460ff16155b8015611dad57506001600160a01b0385165f9081526017602052604090205460ff16155b8015611dd157506001600160a01b0385165f9081526014602052604090205460ff16155b8015611df557506001600160a01b0384165f9081526014602052604090205460ff16155b15611e23576005805460ff60a01b1916600160a01b179055611e15612446565b6005805460ff60a01b191690555b6005546001600160a01b0386165f9081526014602052604090205460ff600160a01b909204821615911680611e6f57506001600160a01b0385165f9081526014602052604090205460ff165b15611e7757505f5b5f8115611f3a576001600160a01b0386165f9081526017602052604090205460ff168015611ea657505f600e54115b15611ed257611ecb6064611ec5600e54886124db90919063ffffffff16565b906124ed565b9050611f1c565b6001600160a01b0387165f9081526017602052604090205460ff168015611efa57505f600c54115b15611f1c57611f196064611ec5600c54886124db90919063ffffffff16565b90505b8015611f2d57611f2d8730836122f3565b611f3781866128e6565b94505b611f458787876122f3565b50505050505050565b6001600160a01b038216611fae5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a9f565b6001600160a01b0382165f90815260208190526040902054818110156120215760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a9f565b6001600160a01b0383165f90815260208190526040812083830390556002805484929061204f9084906128e6565b90915550506040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061211d5761211d6128ba565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612199573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121bd9190612981565b816001815181106121d0576121d06128ba565b60200260200101906001600160a01b031690816001600160a01b03168152505061221b307f000000000000000000000000000000000000000000000000000000000000000084611539565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061226f9085905f9086903090429060040161299c565b5f604051808303815f87803b158015612286575f80fd5b505af1158015612298573d5f803e3d5ffd5b505050505050565b6001600160a01b0382165f81815260176020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166123195760405162461bcd60e51b8152600401610a9f906128f9565b6001600160a01b03821661233f5760405162461bcd60e51b8152600401610a9f9061293e565b6001600160a01b0383165f90815260208190526040902054818110156123b65760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a9f565b6001600160a01b038085165f908152602081905260408082208585039055918516815290812080548492906123ec9084906128a7565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161243891815260200190565b60405180910390a350505050565b305f9081526020819052604081205490818103612461575050565b60085461246f906014612890565b82111561248757600854612484906014612890565b91505b81612491816120ea565b6006546040516001600160a01b039091169047905f81818185875af1925050503d805f8114612298576040519150601f19603f3d011682016040523d82523d5f602084013e612298565b5f6124e68284612890565b9392505050565b5f6124e68284612a0b565b5f6020808352835180828501525f5b8181101561252357858101830151858201604001528201612507565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610bd4575f80fd5b5f8060408385031215612568575f80fd5b823561257381612543565b946020939093013593505050565b5f60208284031215612591575f80fd5b81356124e681612543565b5f602082840312156125ac575f80fd5b5035919050565b5f805f606084860312156125c5575f80fd5b83356125d081612543565b925060208401356125e081612543565b929592945050506040919091013590565b803580151581146113be575f80fd5b5f60208284031215612610575f80fd5b6124e6826125f1565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561265657612656612619565b604052919050565b5f67ffffffffffffffff82111561267757612677612619565b5060051b60200190565b5f82601f830112612690575f80fd5b813560206126a56126a08361265e565b61262d565b82815260059290921b840181019181810190868411156126c3575f80fd5b8286015b848110156126de57803583529183019183016126c7565b509695505050505050565b5f80604083850312156126fa575f80fd5b823567ffffffffffffffff80821115612711575f80fd5b818501915085601f830112612724575f80fd5b813560206127346126a08361265e565b82815260059290921b84018101918181019089841115612752575f80fd5b948201945b8386101561277957853561276a81612543565b82529482019490820190612757565b9650508601359250508082111561278e575f80fd5b5061279b85828601612681565b9150509250929050565b5f80604083850312156127b6575f80fd5b82356127c181612543565b91506127cf602084016125f1565b90509250929050565b5f80604083850312156127e9575f80fd5b82356127f481612543565b9150602083013561280481612543565b809150509250929050565b600181811c9082168061282357607f821691505b60208210810361284157634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610a6f57610a6f61287c565b80820180821115610a6f57610a6f61287c565b634e487b7160e01b5f52603260045260245ffd5b5f600182016128df576128df61287c565b5060010190565b81810381811115610a6f57610a6f61287c565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b5f60208284031215612991575f80fd5b81516124e681612543565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156129ea5784516001600160a01b0316835293830193918301916001016129c5565b50506001600160a01b03969096166060850152505050608001529392505050565b5f82612a2557634e487b7160e01b5f52601260045260245ffd5b50049056fea264697066735822122039f048c460a631406eaecf60aa0583692a53f8c357c3f33b61901c5d170de45f64736f6c634300081500334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061032a575f3560e01c8063864701a5116101a3578063c0246668116100f2578063eba4c33311610092578063f66895a31161006d578063f66895a314610971578063f8b45b0514610986578063fabb0b4f1461099b578063fae0959a146109b0575f80fd5b8063eba4c33314610914578063ec54a36a14610933578063f2fde38b14610952575f80fd5b8063d257b34f116100cd578063d257b34f14610887578063d85ba063146108a6578063dd62ed3e146108bb578063e2f45605146108ff575f80fd5b8063c024666814610834578063c18bc19514610853578063c8c8ebe414610872575f80fd5b80639a7a23d61161015d578063a9fc35a911610138578063a9fc35a9146107aa578063aacebbe3146107c9578063b62496f5146107e8578063bbc0c74214610816575f80fd5b80639a7a23d61461074d578063a457c2d71461076c578063a9059cbb1461078b575f80fd5b8063864701a5146106b5578063881dce60146106ca5780638a8c523c146106e95780638da5cb5b146106fd578063924de9b71461071a57806395d89b4114610739575f80fd5b80634a62bb65116102795780636fc3eaec1161021957806371fc4688116101f457806371fc468814610644578063751039fc146106635780637571336a1461067757806375f0a87414610696575f80fd5b80636fc3eaec146105e857806370a08231146105fc578063715018a614610630575f80fd5b806365216a411161025457806365216a411461057657806368a3a6a5146105955780636a486a8e146105b45780636ddd1713146105c9575f80fd5b80634a62bb65146105185780635932ead1146105315780635992704414610550575f80fd5b806323b872dd116102e457806332a2c5d0116102bf57806332a2c5d01461049557806339509351146104a757806342966c68146104c657806349bd5a5e146104e5575f80fd5b806323b872dd1461044657806327c8f83514610465578063313ce5671461047a575f80fd5b806306fdde0314610335578063095ea7b31461035f57806310d5de531461038e5780631694505e146103bc57806318160ddd14610407578063203e727e14610425575f80fd5b3661033157005b5f80fd5b348015610340575f80fd5b506103496109cf565b60405161035691906124f8565b60405180910390f35b34801561036a575f80fd5b5061037e610379366004612557565b610a5f565b6040519015158152602001610356565b348015610399575f80fd5b5061037e6103a8366004612581565b60166020525f908152604090205460ff1681565b3480156103c7575f80fd5b506103ef7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610356565b348015610412575f80fd5b506002545b604051908152602001610356565b348015610430575f80fd5b5061044461043f36600461259c565b610a75565b005b348015610451575f80fd5b5061037e6104603660046125b3565b610abd565b348015610470575f80fd5b506103ef61dead81565b348015610485575f80fd5b50604051600c8152602001610356565b3480156104a0575f80fd5b50306103ef565b3480156104b2575f80fd5b5061037e6104c1366004612557565b610b65565b3480156104d1575f80fd5b506104446104e036600461259c565b610ba0565b3480156104f0575f80fd5b506103ef7f00000000000000000000000068099e01b14c2a9e7a6453d078e0a59a42266c0681565b348015610523575f80fd5b50600a5461037e9060ff1681565b34801561053c575f80fd5b5061044461054b366004612600565b610bd7565b34801561055b575f80fd5b50600a546103ef90630100000090046001600160a01b031681565b348015610581575f80fd5b506104446105903660046126e9565b610c4e565b3480156105a0575f80fd5b506104176105af366004612581565b610db3565b3480156105bf575f80fd5b50610417600e5481565b3480156105d4575f80fd5b50600a5461037e9062010000900460ff1681565b3480156105f3575f80fd5b50610444610dd5565b348015610607575f80fd5b50610417610616366004612581565b6001600160a01b03165f9081526020819052604090205490565b34801561063b575f80fd5b50610444610e2a565b34801561064f575f80fd5b5061044461065e36600461259c565b610e5f565b34801561066e575f80fd5b5061037e610ee4565b348015610682575f80fd5b506104446106913660046127a5565b610f20565b3480156106a1575f80fd5b506006546103ef906001600160a01b031681565b3480156106c0575f80fd5b50610417600d5481565b3480156106d5575f80fd5b506104446106e436600461259c565b610f74565b3480156106f4575f80fd5b50610444610ff4565b348015610708575f80fd5b506005546001600160a01b03166103ef565b348015610725575f80fd5b50610444610734366004612600565b61103f565b348015610744575f80fd5b50610349611085565b348015610758575f80fd5b506104446107673660046127a5565b611094565b348015610777575f80fd5b5061037e610786366004612557565b611173565b348015610796575f80fd5b5061037e6107a5366004612557565b61120b565b3480156107b5575f80fd5b506104176107c4366004612581565b611217565b3480156107d4575f80fd5b506104446107e3366004612581565b61123c565b3480156107f3575f80fd5b5061037e610802366004612581565b60176020525f908152604090205460ff1681565b348015610821575f80fd5b50600a5461037e90610100900460ff1681565b34801561083f575f80fd5b5061044461084e3660046127a5565b6112c2565b34801561085e575f80fd5b5061044461086d36600461259c565b61134a565b34801561087d575f80fd5b5061041760075481565b348015610892575f80fd5b5061037e6108a136600461259c565b611389565b3480156108b1575f80fd5b50610417600c5481565b3480156108c6575f80fd5b506104176108d53660046127d8565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b34801561090a575f80fd5b5061041760085481565b34801561091f575f80fd5b5061044461092e36600461259c565b6113c3565b34801561093e575f80fd5b5061044461094d36600461259c565b611448565b34801561095d575f80fd5b5061044461096c366004612581565b611477565b34801561097c575f80fd5b50610417600f5481565b348015610991575f80fd5b5061041760095481565b3480156109a6575f80fd5b50610417600b5481565b3480156109bb575f80fd5b506104446109ca36600461259c565b61150f565b6060600380546109de9061280f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0a9061280f565b8015610a555780601f10610a2c57610100808354040283529160200191610a55565b820191905f5260205f20905b815481529060010190602001808311610a3857829003601f168201915b5050505050905090565b5f610a6b338484611539565b5060015b92915050565b6005546001600160a01b03163314610aa85760405162461bcd60e51b8152600401610a9f90612847565b60405180910390fd5b610ab78164e8d4a51000612890565b60075550565b5f610ac984848461165c565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610b4d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a9f565b610b5a8533858403611539565b506001949350505050565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610a6b918590610b9b9086906128a7565b611539565b6005546001600160a01b03163314610bca5760405162461bcd60e51b8152600401610a9f90612847565b610bd43382611f4e565b50565b6005546001600160a01b03163314610c015760405162461bcd60e51b8152600401610a9f90612847565b6011805460ff191682151590811790915560405160ff909116151581527f0d63187a8abb5b4d1bb562e1163897386b0a88ee72e0799dd105bd0fd6f287069060200160405180910390a150565b6005546001600160a01b03163314610c785760405162461bcd60e51b8152600401610a9f90612847565b8051825114610cc95760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a9f565b60c8825110610d395760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f702032303020686f6c64657273207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610a9f565b5f5b8251811015610dae575f838281518110610d5757610d576128ba565b602002602001015190505f838381518110610d7457610d746128ba565b602002602001015164e8d4a51000610d8c9190612890565b9050610d9933838361165c565b50508080610da6906128ce565b915050610d3b565b505050565b6001600160a01b0381165f90815260106020526040812054610a6f90426128e6565b6006546040515f916001600160a01b03169047908381818185875af1925050503d805f8114610e1f576040519150601f19603f3d011682016040523d82523d5f602084013e610e24565b606091505b50505050565b6005546001600160a01b03163314610e545760405162461bcd60e51b8152600401610a9f90612847565b610e5d5f612099565b565b6005546001600160a01b03163314610e895760405162461bcd60e51b8152600401610a9f90612847565b600d819055600c819055600a811115610bd45760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610a9f565b6005545f906001600160a01b03163314610f105760405162461bcd60e51b8152600401610a9f90612847565b50600a805460ff19169055600190565b6005546001600160a01b03163314610f4a5760405162461bcd60e51b8152600401610a9f90612847565b6001600160a01b03919091165f908152601660205260409020805460ff1916911515919091179055565b6006546001600160a01b0316336001600160a01b031614610f93575f80fd5b305f908152602081905260409020548111158015610fb057505f81115b610feb5760405162461bcd60e51b815260206004820152600c60248201526b15dc9bdb99c8185b5bdd5b9d60a21b6044820152606401610a9f565b610bd4816120ea565b6005546001600160a01b0316331461101e5760405162461bcd60e51b8152600401610a9f90612847565b600a805462ffff0019166201010017905561103a42603c6128a7565b601255565b6005546001600160a01b031633146110695760405162461bcd60e51b8152600401610a9f90612847565b600a8054911515620100000262ff000019909216919091179055565b6060600480546109de9061280f565b6005546001600160a01b031633146110be5760405162461bcd60e51b8152600401610a9f90612847565b7f00000000000000000000000068099e01b14c2a9e7a6453d078e0a59a42266c066001600160a01b0316826001600160a01b0316036111655760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a9f565b61116f82826122a0565b5050565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156111f45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a9f565b6112013385858403611539565b5060019392505050565b5f610a6b33848461165c565b6001600160a01b0381165f90815260106020526040812060010154610a6f90426128e6565b6005546001600160a01b031633146112665760405162461bcd60e51b8152600401610a9f90612847565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b05674905f90a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146112ec5760405162461bcd60e51b8152600401610a9f90612847565b6001600160a01b0382165f81815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146113745760405162461bcd60e51b8152600401610a9f90612847565b6113838164e8d4a51000612890565b60095550565b6005545f906001600160a01b031633146113b55760405162461bcd60e51b8152600401610a9f90612847565b50600881905560015b919050565b6005546001600160a01b031633146113ed5760405162461bcd60e51b8152600401610a9f90612847565b600f819055600e819055600a811115610bd45760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610a9f565b6005546001600160a01b031633146114725760405162461bcd60e51b8152600401610a9f90612847565b601355565b6005546001600160a01b031633146114a15760405162461bcd60e51b8152600401610a9f90612847565b6001600160a01b0381166115065760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a9f565b610bd481612099565b6005546001600160a01b0316331461103a5760405162461bcd60e51b8152600401610a9f90612847565b6001600160a01b03831661159b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a9f565b6001600160a01b0382166115fc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a9f565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116825760405162461bcd60e51b8152600401610a9f906128f9565b6001600160a01b0382166116a85760405162461bcd60e51b8152600401610a9f9061293e565b805f036116ba57610dae83835f6122f3565b600a54610100900460ff1661174b576001600160a01b0383165f9081526014602052604090205460ff168061170657506001600160a01b0382165f9081526014602052604090205460ff165b61174b5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a9f565b600a5460ff1615611d48576005546001600160a01b0384811691161480159061178257506005546001600160a01b03838116911614155b801561179657506001600160a01b03821615155b80156117ad57506001600160a01b03821661dead14155b80156117c35750600554600160a01b900460ff16155b15611d485760115460ff161561183a57335f9081526010602052604090206002015460ff1661183a57604080516060810182525f808252602080830182815260018486018181523385526010909352949092209251835590519282019290925590516002909101805460ff19169115159190911790555b7f00000000000000000000000068099e01b14c2a9e7a6453d078e0a59a42266c066001600160a01b0316836001600160a01b03161480156118ad57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b80156118d157506001600160a01b0382165f9081526016602052604090205460ff16155b15611a1b57600a54610100900460ff1661192d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610a9f565b60115460ff16156119e7574260125411156119e757600754811115611950575f80fd5b6001600160a01b0382165f9081526010602052604090205442116119c15760405162461bcd60e51b815260206004820152602260248201527f596f75722062757920636f6f6c646f776e20686173206e6f7420657870697265604482015261321760f11b6064820152608401610a9f565b6013546119ce90426128a7565b6001600160a01b0383165f908152601060205260409020555b60115460ff1615611a1b576013546119ff90426128a7565b6001600160a01b0383165f908152601060205260409020600101555b7f00000000000000000000000068099e01b14c2a9e7a6453d078e0a59a42266c066001600160a01b0316836001600160a01b031614158015611a645750600a54610100900460ff165b15611ae95760115460ff1615611ae9576001600160a01b0383165f908152601060205260409020600101544211611ae95760405162461bcd60e51b815260206004820152602360248201527f596f75722073656c6c20636f6f6c646f776e20686173206e6f7420657870697260448201526232b21760e91b6064820152608401610a9f565b6001600160a01b0383165f9081526017602052604090205460ff168015611b2857506001600160a01b0382165f9081526016602052604090205460ff16155b15611c0b57600754811115611b9d5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a9f565b6009546001600160a01b0383165f90815260208190526040902054611bc290836128a7565b1115611c065760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a9f565b611d48565b6001600160a01b0382165f9081526017602052604090205460ff168015611c4a57506001600160a01b0383165f9081526016602052604090205460ff16155b15611cc057600754811115611c065760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610a9f565b6001600160a01b0382165f9081526016602052604090205460ff16611d48576009546001600160a01b0383165f90815260208190526040902054611d0490836128a7565b1115611d485760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a9f565b305f9081526020819052604090205460085481108015908190611d735750600a5462010000900460ff165b8015611d895750600554600160a01b900460ff16155b8015611dad57506001600160a01b0385165f9081526017602052604090205460ff16155b8015611dd157506001600160a01b0385165f9081526014602052604090205460ff16155b8015611df557506001600160a01b0384165f9081526014602052604090205460ff16155b15611e23576005805460ff60a01b1916600160a01b179055611e15612446565b6005805460ff60a01b191690555b6005546001600160a01b0386165f9081526014602052604090205460ff600160a01b909204821615911680611e6f57506001600160a01b0385165f9081526014602052604090205460ff165b15611e7757505f5b5f8115611f3a576001600160a01b0386165f9081526017602052604090205460ff168015611ea657505f600e54115b15611ed257611ecb6064611ec5600e54886124db90919063ffffffff16565b906124ed565b9050611f1c565b6001600160a01b0387165f9081526017602052604090205460ff168015611efa57505f600c54115b15611f1c57611f196064611ec5600c54886124db90919063ffffffff16565b90505b8015611f2d57611f2d8730836122f3565b611f3781866128e6565b94505b611f458787876122f3565b50505050505050565b6001600160a01b038216611fae5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a9f565b6001600160a01b0382165f90815260208190526040902054818110156120215760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a9f565b6001600160a01b0383165f90815260208190526040812083830390556002805484929061204f9084906128e6565b90915550506040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061211d5761211d6128ba565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612199573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121bd9190612981565b816001815181106121d0576121d06128ba565b60200260200101906001600160a01b031690816001600160a01b03168152505061221b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611539565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061226f9085905f9086903090429060040161299c565b5f604051808303815f87803b158015612286575f80fd5b505af1158015612298573d5f803e3d5ffd5b505050505050565b6001600160a01b0382165f81815260176020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166123195760405162461bcd60e51b8152600401610a9f906128f9565b6001600160a01b03821661233f5760405162461bcd60e51b8152600401610a9f9061293e565b6001600160a01b0383165f90815260208190526040902054818110156123b65760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a9f565b6001600160a01b038085165f908152602081905260408082208585039055918516815290812080548492906123ec9084906128a7565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161243891815260200190565b60405180910390a350505050565b305f9081526020819052604081205490818103612461575050565b60085461246f906014612890565b82111561248757600854612484906014612890565b91505b81612491816120ea565b6006546040516001600160a01b039091169047905f81818185875af1925050503d805f8114612298576040519150601f19603f3d011682016040523d82523d5f602084013e612298565b5f6124e68284612890565b9392505050565b5f6124e68284612a0b565b5f6020808352835180828501525f5b8181101561252357858101830151858201604001528201612507565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610bd4575f80fd5b5f8060408385031215612568575f80fd5b823561257381612543565b946020939093013593505050565b5f60208284031215612591575f80fd5b81356124e681612543565b5f602082840312156125ac575f80fd5b5035919050565b5f805f606084860312156125c5575f80fd5b83356125d081612543565b925060208401356125e081612543565b929592945050506040919091013590565b803580151581146113be575f80fd5b5f60208284031215612610575f80fd5b6124e6826125f1565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561265657612656612619565b604052919050565b5f67ffffffffffffffff82111561267757612677612619565b5060051b60200190565b5f82601f830112612690575f80fd5b813560206126a56126a08361265e565b61262d565b82815260059290921b840181019181810190868411156126c3575f80fd5b8286015b848110156126de57803583529183019183016126c7565b509695505050505050565b5f80604083850312156126fa575f80fd5b823567ffffffffffffffff80821115612711575f80fd5b818501915085601f830112612724575f80fd5b813560206127346126a08361265e565b82815260059290921b84018101918181019089841115612752575f80fd5b948201945b8386101561277957853561276a81612543565b82529482019490820190612757565b9650508601359250508082111561278e575f80fd5b5061279b85828601612681565b9150509250929050565b5f80604083850312156127b6575f80fd5b82356127c181612543565b91506127cf602084016125f1565b90509250929050565b5f80604083850312156127e9575f80fd5b82356127f481612543565b9150602083013561280481612543565b809150509250929050565b600181811c9082168061282357607f821691505b60208210810361284157634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610a6f57610a6f61287c565b80820180821115610a6f57610a6f61287c565b634e487b7160e01b5f52603260045260245ffd5b5f600182016128df576128df61287c565b5060010190565b81810381811115610a6f57610a6f61287c565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b5f60208284031215612991575f80fd5b81516124e681612543565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156129ea5784516001600160a01b0316835293830193918301916001016129c5565b50506001600160a01b03969096166060850152505050608001529392505050565b5f82612a2557634e487b7160e01b5f52601260045260245ffd5b50049056fea264697066735822122039f048c460a631406eaecf60aa0583692a53f8c357c3f33b61901c5d170de45f64736f6c63430008150033

Deployed Bytecode Sourcemap

14966:14004:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2663:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3577:169;;;;;;;;;;-1:-1:-1;3577:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;3577:169:0;1023:187:1;16209:63:0;;;;;;;;;;-1:-1:-1;16209:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15039:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1658:32:1;;;1640:51;;1628:2;1613:18;15039:51:0;1467:230:1;2984:108:0;;;;;;;;;;-1:-1:-1;3072:12:0;;2984:108;;;1848:25:1;;;1836:2;1821:18;2984:108:0;1702:177:1;19337:128:0;;;;;;;;;;-1:-1:-1;19337:128:0;;;;;:::i;:::-;;:::i;:::-;;3754:492;;;;;;;;;;-1:-1:-1;3754:492:0;;;;;:::i;:::-;;:::i;15142:53::-;;;;;;;;;;;;15188:6;15142:53;;2883:93;;;;;;;;;;-1:-1:-1;2883:93:0;;2966:2;2880:36:1;;2868:2;2853:18;2883:93:0;2738:184:1;28268:100:0;;;;;;;;;;-1:-1:-1;28355:4:0;28268:100;;4254:215;;;;;;;;;;-1:-1:-1;4254:215:0;;;;;:::i;:::-;;:::i;20118:93::-;;;;;;;;;;-1:-1:-1;20118:93:0;;;;;:::i;:::-;;:::i;15097:38::-;;;;;;;;;;;;;;;15388:33;;;;;;;;;;-1:-1:-1;15388:33:0;;;;;;;;18963:160;;;;;;;;;;-1:-1:-1;18963:160:0;;;;;:::i;:::-;;:::i;15510:25::-;;;;;;;;;;-1:-1:-1;15510:25:0;;;;;;;-1:-1:-1;;;;;15510:25:0;;;19606:499;;;;;;;;;;-1:-1:-1;19606:499:0;;;;;:::i;:::-;;:::i;22635:124::-;;;;;;;;;;-1:-1:-1;22635:124:0;;;;;:::i;:::-;;:::i;15649:28::-;;;;;;;;;;;;;;;;15468:31;;;;;;;;;;-1:-1:-1;15468:31:0;;;;;;;;;;;21009:174;;;;;;;;;;;;;:::i;3100:127::-;;;;;;;;;;-1:-1:-1;3100:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3201:18:0;3174:7;3201:18;;;;;;;;;;;;3100:127;781:103;;;;;;;;;;;;;:::i;21703:217::-;;;;;;;;;;-1:-1:-1;21703:217:0;;;;;:::i;:::-;;:::i;18830:121::-;;;;;;;;;;;;;:::i;20219:167::-;;;;;;;;;;-1:-1:-1;20219:167:0;;;;;:::i;:::-;;:::i;15234:30::-;;;;;;;;;;-1:-1:-1;15234:30:0;;;;-1:-1:-1;;;;;15234:30:0;;;15617:23;;;;;;;;;;;;;;;;20780:221;;;;;;;;;;-1:-1:-1;20780:221:0;;;;;:::i;:::-;;:::i;18645:177::-;;;;;;;;;;;;;:::i;556:87::-;;;;;;;;;;-1:-1:-1;629:6:0;;-1:-1:-1;;;;;629:6:0;556:87;;20482:100;;;;;;;;;;-1:-1:-1;20482:100:0;;;;;:::i;:::-;;:::i;2771:104::-;;;;;;;;;;;;;:::i;21195:304::-;;;;;;;;;;-1:-1:-1;21195:304:0;;;;;:::i;:::-;;:::i;4477:413::-;;;;;;;;;;-1:-1:-1;4477:413:0;;;;;:::i;:::-;;:::i;3235:175::-;;;;;;;;;;-1:-1:-1;3235:175:0;;;;;:::i;:::-;;:::i;22767:126::-;;;;;;;;;;-1:-1:-1;22767:126:0;;;;;:::i;:::-;;:::i;22160:231::-;;;;;;;;;;-1:-1:-1;22160:231:0;;;;;:::i;:::-;;:::i;16281:57::-;;;;;;;;;;-1:-1:-1;16281:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15428:33;;;;;;;;;;-1:-1:-1;15428:33:0;;;;;;;;;;;20590:182;;;;;;;;;;-1:-1:-1;20590:182:0;;;;;:::i;:::-;;:::i;19473:119::-;;;;;;;;;;-1:-1:-1;19473:119:0;;;;;:::i;:::-;;:::i;15273:35::-;;;;;;;;;;;;;;;;19133:196;;;;;;;;;;-1:-1:-1;19133:196:0;;;;;:::i;:::-;;:::i;15583:27::-;;;;;;;;;;;;;;;;3418:151;;;;;;;;;;-1:-1:-1;3418:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;3534:18:0;;;3507:7;3534:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3418:151;15315:33;;;;;;;;;;;;;;;;21928:224;;;;;;;;;;-1:-1:-1;21928:224:0;;;;;:::i;:::-;;:::i;22400:105::-;;;;;;;;;;-1:-1:-1;22400:105:0;;;;;:::i;:::-;;:::i;894:201::-;;;;;;;;;;-1:-1:-1;894:201:0;;;;;:::i;:::-;;:::i;15684:24::-;;;;;;;;;;;;;;;;15355;;;;;;;;;;;;;;;;15549:25;;;;;;;;;;;;;;;;22520:104;;;;;;;;;;-1:-1:-1;22520:104:0;;;;;:::i;:::-;;:::i;2663:100::-;2717:13;2750:5;2743:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2663:100;:::o;3577:169::-;3660:4;3677:39;176:10;3700:7;3709:6;3677:8;:39::i;:::-;-1:-1:-1;3734:4:0;3577:169;;;;;:::o;19337:128::-;629:6;;-1:-1:-1;;;;;629:6:0;176:10;693:23;685:68;;;;-1:-1:-1;;;685:68:0;;;;;;;:::i;:::-;;;;;;;;;19440:17:::1;:6:::0;19450::::1;19440:17;:::i;:::-;19417:20;:40:::0;-1:-1:-1;19337:128:0:o;3754:492::-;3894:4;3911:36;3921:6;3929:9;3940:6;3911:9;:36::i;:::-;-1:-1:-1;;;;;3987:19:0;;3960:24;3987:19;;;:11;:19;;;;;;;;176:10;3987:33;;;;;;;;4039:26;;;;4031:79;;;;-1:-1:-1;;;4031:79:0;;7730:2:1;4031:79:0;;;7712:21:1;7769:2;7749:18;;;7742:30;7808:34;7788:18;;;7781:62;-1:-1:-1;;;7859:18:1;;;7852:38;7907:19;;4031:79:0;7528:404:1;4031:79:0;4146:57;4155:6;176:10;4196:6;4177:16;:25;4146:8;:57::i;:::-;-1:-1:-1;4234:4:0;;3754:492;-1:-1:-1;;;;3754:492:0:o;4254:215::-;176:10;4342:4;4391:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4391:34:0;;;;;;;;;;4342:4;;4359:80;;4382:7;;4391:47;;4428:10;;4391:47;:::i;:::-;4359:8;:80::i;20118:93::-;629:6;;-1:-1:-1;;;;;629:6:0;176:10;693:23;685:68;;;;-1:-1:-1;;;685:68:0;;;;;;;:::i;:::-;20176:27:::1;176:10:::0;20196:6:::1;20176:5;:27::i;:::-;20118:93:::0;:::o;18963:160::-;629:6;;-1:-1:-1;;;;;629:6:0;176:10;693:23;685:68;;;;-1:-1:-1;;;685:68:0;;;;;;;:::i;:::-;19035:16:::1;:24:::0;;-1:-1:-1;;19035:24:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19075:40:::1;::::0;19035:24:::1;19098:16:::0;;;1188:14:1;1181:22;1163:41;;19075:40:0::1;::::0;1151:2:1;1136:18;19075:40:0::1;;;;;;;18963:160:::0;:::o;19606:499::-;629:6;;-1:-1:-1;;;;;629:6:0;176:10;693:23;685:68;;;;-1:-1:-1;;;685:68:0;;;;;;;:::i;:::-;19735:11:::1;:18;19717:7;:14;:36;19709:79;;;::::0;-1:-1:-1;;;19709:79:0;;8269:2:1;19709:79:0::1;::::0;::::1;8251:21:1::0;8308:2;8288:18;;;8281:30;8347:32;8327:18;;;8320:60;8397:18;;19709:79:0::1;8067:354:1::0;19709:79:0::1;19824:3;19807:7;:14;:20;19799:87;;;::::0;-1:-1:-1;;;19799:87:0;;8628:2:1;19799:87:0::1;::::0;::::1;8610:21:1::0;8667:2;8647:18;;;8640:30;8706:34;8686:18;;;8679:62;-1:-1:-1;;;8757:18:1;;;8750:52;8819:19;;19799:87:0::1;8426:418:1::0;19799:87:0::1;19902:9;19898:200;19921:7;:14;19917:1;:18;19898:200;;;19956:14;19973:7;19981:1;19973:10;;;;;;;;:::i;:::-;;;;;;;19956:27;;19998:14;20015:11;20027:1;20015:14;;;;;;;;:::i;:::-;;;;;;;20030:4;20015:19;;;;:::i;:::-;19998:36;;20049:37;20059:10;20071:6;20079;20049:9;:37::i;:::-;19941:157;;19937:3;;;;;:::i;:::-;;;;19898:200;;;;19606:499:::0;;:::o;22635:124::-;-1:-1:-1;;;;;22732:15:0;;22690:4;22732:15;;;:8;:15;;;;;:19;22714:37;;:15;:37;:::i;21009:174::-;21096:15;;21088:87;;21051:12;;-1:-1:-1;;;;;21096:15:0;;21139:21;;21051:12;21088:87;21051:12;21088:87;21139:21;21096:15;21088:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;21009:174:0:o;781:103::-;629:6;;-1:-1:-1;;;;;629:6:0;176:10;693:23;685:68;;;;-1:-1:-1;;;685:68:0;;;;;;;:::i;:::-;846:30:::1;873:1;846:18;:30::i;:::-;781:103::o:0;21703:217::-;629:6;;-1:-1:-1;;;;;629:6:0;176:10;693:23;685:68;;;;-1:-1:-1;;;685:68:0;;;;;;;:::i;:::-;21789:8:::1;:18:::0;;;21818:12:::1;:23:::0;;;21876:2:::1;21860:18:::0;::::1;;21852:60;;;::::0;-1:-1:-1;;;21852:60:0;;9666:2:1;21852:60:0::1;::::0;::::1;9648:21:1::0;9705:2;9685:18;;;9678:30;9744:31;9724:18;;;9717:59;9793:18;;21852:60:0::1;9464:353:1::0;18830:121:0;629:6;;18882:4;;-1:-1:-1;;;;;629:6:0;176:10;693:23;685:68;;;;-1:-1:-1;;;685:68:0;;;;;;;:::i;:::-;-1:-1:-1;18899:14:0::1;:22:::0;;-1:-1:-1;;18899:22:0::1;::::0;;;18830:121;:::o;20219:167::-;629:6;;-1:-1:-1;;;;;629:6:0;176:10;693:23;685:68;;;;-1:-1:-1;;;685:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20332:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;20332:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20219:167::o;20780:221::-;20858:15;;-1:-1:-1;;;;;20858:15:0;176:10;-1:-1:-1;;;;;20842:31:0;;20834:40;;;;;;20921:4;3174:7;3201:18;;;;;;;;;;;20893:6;:34;;:48;;;;;20940:1;20931:6;:10;20893:48;20885:73;;;;-1:-1:-1;;;20885:73:0;;10024:2:1;20885:73:0;;;10006:21:1;10063:2;10043:18;;;10036:30;-1:-1:-1;;;10082:18:1;;;10075:42;10134:18;;20885:73:0;9822:336:1;20885:73:0;20969:24;20986:6;20969:16;:24::i;18645:177::-;629:6;;-1:-1:-1;;;;;629:6:0;176:10;693:23;685:68;;;;-1:-1:-1;;;685:68:0;;;;;;;:::i;:::-;18709:13:::1;:20:::0;;-1:-1:-1;;18740:18:0;;;;;18784:30:::1;:15;18803:10;18784:30;:::i;:::-;18770:11;:44:::0;18645:177::o;20482:100::-;629:6;;-1:-1:-1;;;;;629:6:0;176:10;693:23;685:68;;;;-1:-1:-1;;;685:68:0;;;;;;;:::i;:::-;20553:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;20553:21:0;;::::1;::::0;;;::::1;::::0;;20482:100::o;2771:104::-;2827:13;2860:7;2853:14;;;;;:::i;21195:304::-;629:6;;-1:-1:-1;;;;;629:6:0;176:10;693:23;685:68;;;;-1:-1:-1;;;685:68:0;;;;;;;:::i;:::-;21339:13:::1;-1:-1:-1::0;;;;;21331:21:0::1;:4;-1:-1:-1::0;;;;;21331:21:0::1;::::0;21309:128:::1;;;::::0;-1:-1:-1;;;21309:128:0;;10365:2:1;21309:128:0::1;::::0;::::1;10347:21:1::0;10404:2;10384:18;;;10377:30;10443:34;10423:18;;;10416:62;10514:27;10494:18;;;10487:55;10559:19;;21309:128:0::1;10163:421:1::0;21309:128:0::1;21450:41;21479:4;21485:5;21450:28;:41::i;:::-;21195:304:::0;;:::o;4477:413::-;176:10;4570:4;4614:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4614:34:0;;;;;;;;;;4667:35;;;;4659:85;;;;-1:-1:-1;;;4659:85:0;;10791:2:1;4659:85:0;;;10773:21:1;10830:2;10810:18;;;10803:30;10869:34;10849:18;;;10842:62;-1:-1:-1;;;10920:18:1;;;10913:35;10965:19;;4659:85:0;10589:401:1;4659:85:0;4780:67;176:10;4803:7;4831:15;4812:16;:34;4780:8;:67::i;:::-;-1:-1:-1;4878:4:0;;4477:413;-1:-1:-1;;;4477:413:0:o;3235:175::-;3321:4;3338:42;176:10;3362:9;3373:6;3338:9;:42::i;22767:126::-;-1:-1:-1;;;;;22865:15:0;;22823:4;22865:15;;;:8;:15;;;;;:20;;;22847:38;;:15;:38;:::i;22160:231::-;629:6;;-1:-1:-1;;;;;629:6:0;176:10;693:23;685:68;;;;-1:-1:-1;;;685:68:0;;;;;;;:::i;:::-;22320:15:::1;::::0;22277:59:::1;::::0;-1:-1:-1;;;;;22320:15:0;;::::1;::::0;22277:59;::::1;::::0;::::1;::::0;22320:15:::1;::::0;22277:59:::1;22347:15;:36:::0;;-1:-1:-1;;;;;;22347:36:0::1;-1:-1:-1::0;;;;;22347:36:0;;;::::1;::::0;;;::::1;::::0;;22160:231::o;20590:182::-;629:6;;-1:-1:-1;;;;;629:6:0;176:10;693:23;685:68;;;;-1:-1:-1;;;685:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20675:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20675:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20730:34;;1163:41:1;;;20730:34:0::1;::::0;1136:18:1;20730:34:0::1;;;;;;;20590:182:::0;;:::o;19473:119::-;629:6;;-1:-1:-1;;;;;629:6:0;176:10;693:23;685:68;;;;-1:-1:-1;;;685:68:0;;;;;;;:::i;:::-;19567:17:::1;:6:::0;19577::::1;19567:17;:::i;:::-;19555:9;:29:::0;-1:-1:-1;19473:119:0:o;19133:196::-;629:6;;19241:4;;-1:-1:-1;;;;;629:6:0;176:10;693:23;685:68;;;;-1:-1:-1;;;685:68:0;;;;;;;:::i;:::-;-1:-1:-1;19269:18:0::1;:30:::0;;;19317:4:::1;764:1;19133:196:::0;;;:::o;21928:224::-;629:6;;-1:-1:-1;;;;;629:6:0;176:10;693:23;685:68;;;;-1:-1:-1;;;685:68:0;;;;;;;:::i;:::-;22016:9:::1;:20:::0;;;22047:13:::1;:25:::0;;;22108:2:::1;22091:19:::0;::::1;;22083:61;;;::::0;-1:-1:-1;;;22083:61:0;;9666:2:1;22083:61:0::1;::::0;::::1;9648:21:1::0;9705:2;9685:18;;;9678:30;9744:31;9724:18;;;9717:59;9793:18;;22083:61:0::1;9464:353:1::0;22400:105:0;629:6;;-1:-1:-1;;;;;629:6:0;176:10;693:23;685:68;;;;-1:-1:-1;;;685:68:0;;;;;;;:::i;:::-;22471:12:::1;:18:::0;22400:105::o;894:201::-;629:6;;-1:-1:-1;;;;;629:6:0;176:10;693:23;685:68;;;;-1:-1:-1;;;685:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;983:22:0;::::1;975:73;;;::::0;-1:-1:-1;;;975:73:0;;11197:2:1;975:73:0::1;::::0;::::1;11179:21:1::0;11236:2;11216:18;;;11209:30;11275:34;11255:18;;;11248:62;-1:-1:-1;;;11326:18:1;;;11319:36;11372:19;;975:73:0::1;10995:402:1::0;975:73:0::1;1059:28;1078:8;1059:18;:28::i;22520:104::-:0;629:6;;-1:-1:-1;;;;;629:6:0;176:10;693:23;685:68;;;;-1:-1:-1;;;685:68:0;;;;;;;:::i;6645:380::-;-1:-1:-1;;;;;6781:19:0;;6773:68;;;;-1:-1:-1;;;6773:68:0;;11604:2:1;6773:68:0;;;11586:21:1;11643:2;11623:18;;;11616:30;11682:34;11662:18;;;11655:62;-1:-1:-1;;;11733:18:1;;;11726:34;11777:19;;6773:68:0;11402:400:1;6773:68:0;-1:-1:-1;;;;;6860:21:0;;6852:68;;;;-1:-1:-1;;;6852:68:0;;12009:2:1;6852:68:0;;;11991:21:1;12048:2;12028:18;;;12021:30;12087:34;12067:18;;;12060:62;-1:-1:-1;;;12138:18:1;;;12131:32;12180:19;;6852:68:0;11807:398:1;6852:68:0;-1:-1:-1;;;;;6933:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6985:32;;1848:25:1;;;6985:32:0;;1821:18:1;6985:32:0;;;;;;;6645:380;;;:::o;22903:4809::-;-1:-1:-1;;;;;23035:18:0;;23027:68;;;;-1:-1:-1;;;23027:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23114:16:0;;23106:64;;;;-1:-1:-1;;;23106:64:0;;;;;;;:::i;:::-;23187:6;23197:1;23187:11;23183:93;;23215:28;23231:4;23237:2;23241:1;23215:15;:28::i;23183:93::-;23297:13;;;;;;;23292:223;;-1:-1:-1;;;;;23369:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;23398:23:0;;;;;;:19;:23;;;;;;;;23369:52;23335:160;;;;-1:-1:-1;;;23335:160:0;;13222:2:1;23335:160:0;;;13204:21:1;13261:2;13241:18;;;13234:30;-1:-1:-1;;;13280:18:1;;;13273:52;13342:18;;23335:160:0;13020:346:1;23335:160:0;23538:14;;;;23534:2766;;;629:6;;-1:-1:-1;;;;;23591:15:0;;;629:6;;23591:15;;;;:49;;-1:-1:-1;629:6:0;;-1:-1:-1;;;;;23627:13:0;;;629:6;;23627:13;;23591:49;:86;;;;-1:-1:-1;;;;;;23661:16:0;;;;23591:86;:128;;;;-1:-1:-1;;;;;;23698:21:0;;23712:6;23698:21;;23591:128;:158;;;;-1:-1:-1;23741:8:0;;-1:-1:-1;;;23741:8:0;;;;23740:9;23591:158;23569:2720;;;23827:16;;;;23824:168;;;23877:10;23868:20;;;;:8;:20;;;;;:27;;;;;23864:113;;23943:14;;;;;;;;-1:-1:-1;23943:14:0;;;;;;;;;;23952:4;23943:14;;;;;;23929:10;23920:20;;:8;:20;;;;;;;:37;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23920:37:0;;;;;;;;;;23864:113;24051:13;-1:-1:-1;;;;;24043:21:0;:4;-1:-1:-1;;;;;24043:21:0;;:55;;;;;24082:15;-1:-1:-1;;;;;24068:30:0;:2;-1:-1:-1;;;;;24068:30:0;;;24043:55;:95;;;;-1:-1:-1;;;;;;24103:35:0;;;;;;:31;:35;;;;;;;;24102:36;24043:95;24040:763;;;24167:13;;;;;;;24159:50;;;;-1:-1:-1;;;24159:50:0;;13573:2:1;24159:50:0;;;13555:21:1;13612:2;13592:18;;;13585:30;13651:26;13631:18;;;13624:54;13695:18;;24159:50:0;13371:348:1;24159:50:0;24284:16;;;;24281:373;;;24342:15;24328:11;;:29;24325:310;;;24404:20;;24394:6;:30;;24386:39;;;;;;-1:-1:-1;;;;;24460:12:0;;;;;;:8;:12;;;;;:16;24479:15;-1:-1:-1;24452:81:0;;;;-1:-1:-1;;;24452:81:0;;13926:2:1;24452:81:0;;;13908:21:1;13965:2;13945:18;;;13938:30;14004:34;13984:18;;;13977:62;-1:-1:-1;;;14055:18:1;;;14048:32;14097:19;;24452:81:0;13724:398:1;24452:81:0;24598:12;;24579:32;;:15;:32;:::i;:::-;-1:-1:-1;;;;;24560:12:0;;;;;;:8;:12;;;;;:51;24325:310;24675:16;;;;24672:116;;;24755:12;;24736:32;;:15;:32;:::i;:::-;-1:-1:-1;;;;;24716:12:0;;;;;;:8;:12;;;;;:17;;:52;24672:116;24844:13;-1:-1:-1;;;;;24836:21:0;:4;-1:-1:-1;;;;;24836:21:0;;;:39;;;;-1:-1:-1;24862:13:0;;;;;;;24836:39;24832:221;;;24901:16;;;;24898:149;;;-1:-1:-1;;;;;24950:14:0;;;;;;:8;:14;;;;;:19;;;24972:15;-1:-1:-1;24942:85:0;;;;-1:-1:-1;;;24942:85:0;;14329:2:1;24942:85:0;;;14311:21:1;14368:2;14348:18;;;14341:30;14407:34;14387:18;;;14380:62;-1:-1:-1;;;14458:18:1;;;14451:33;14501:19;;24942:85:0;14127:399:1;24942:85:0;-1:-1:-1;;;;;25153:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;25210:35:0;;;;;;:31;:35;;;;;;;;25209:36;25153:92;25127:1147;;;25332:20;;25322:6;:30;;25288:169;;;;-1:-1:-1;;;25288:169:0;;14733:2:1;25288:169:0;;;14715:21:1;14772:2;14752:18;;;14745:30;14811:34;14791:18;;;14784:62;-1:-1:-1;;;14862:18:1;;;14855:51;14923:19;;25288:169:0;14531:417:1;25288:169:0;25540:9;;-1:-1:-1;;;;;3201:18:0;;3174:7;3201:18;;;;;;;;;;;25514:22;;:6;:22;:::i;:::-;:35;;25480:140;;;;-1:-1:-1;;;25480:140:0;;15155:2:1;25480:140:0;;;15137:21:1;15194:2;15174:18;;;15167:30;-1:-1:-1;;;15213:18:1;;;15206:49;15272:18;;25480:140:0;14953:343:1;25480:140:0;25127:1147;;;-1:-1:-1;;;;;25718:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;25773:37:0;;;;;;:31;:37;;;;;;;;25772:38;25718:92;25692:582;;;25897:20;;25887:6;:30;;25853:170;;;;-1:-1:-1;;;25853:170:0;;15503:2:1;25853:170:0;;;15485:21:1;15542:2;15522:18;;;15515:30;15581:34;15561:18;;;15554:62;-1:-1:-1;;;15632:18:1;;;15625:52;15694:19;;25853:170:0;15301:418:1;25692:582:0;-1:-1:-1;;;;;26054:35:0;;;;;;:31;:35;;;;;;;;26049:225;;26174:9;;-1:-1:-1;;;;;3201:18:0;;3174:7;3201:18;;;;;;;;;;;26148:22;;:6;:22;:::i;:::-;:35;;26114:140;;;;-1:-1:-1;;;26114:140:0;;15155:2:1;26114:140:0;;;15137:21:1;15194:2;15174:18;;;15167:30;-1:-1:-1;;;15213:18:1;;;15206:49;15272:18;;26114:140:0;14953:343:1;26114:140:0;26361:4;26312:28;3201:18;;;;;;;;;;;26419;;26395:42;;;;;;;26468:35;;-1:-1:-1;26492:11:0;;;;;;;26468:35;:61;;;;-1:-1:-1;26521:8:0;;-1:-1:-1;;;26521:8:0;;;;26520:9;26468:61;:123;;;;-1:-1:-1;;;;;;26560:31:0;;;;;;:25;:31;;;;;;;;26559:32;26468:123;:166;;;;-1:-1:-1;;;;;;26609:25:0;;;;;;:19;:25;;;;;;;;26608:26;26468:166;:207;;;;-1:-1:-1;;;;;;26652:23:0;;;;;;:19;:23;;;;;;;;26651:24;26468:207;26450:355;;;26702:8;:15;;-1:-1:-1;;;;26702:15:0;-1:-1:-1;;;26702:15:0;;;26734:10;:8;:10::i;:::-;26777:8;:16;;-1:-1:-1;;;;26777:16:0;;;26450:355;26833:8;;-1:-1:-1;;;;;26943:25:0;;26817:12;26943:25;;;26833:8;26943:25;;;;;;26833:8;-1:-1:-1;;;26833:8:0;;;;;26832:9;;26943:25;;:52;;-1:-1:-1;;;;;;26972:23:0;;;;;;:19;:23;;;;;;;;26943:52;26939:100;;;-1:-1:-1;27022:5:0;26939:100;27051:12;27156:7;27152:507;;;-1:-1:-1;;;;;27208:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;27257:1;27241:13;;:17;27208:50;27204:306;;;27286:34;27316:3;27286:25;27297:13;;27286:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;27279:41;;27204:306;;;-1:-1:-1;;;;;27382:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;27432:1;27417:12;;:16;27382:51;27378:132;;;27461:33;27490:3;27461:24;27472:12;;27461:6;:10;;:24;;;;:::i;:33::-;27454:40;;27378:132;27530:8;;27526:91;;27559:42;27575:4;27589;27596;27559:15;:42::i;:::-;27633:14;27643:4;27633:14;;:::i;:::-;;;27152:507;27671:33;27687:4;27693:2;27697:6;27671:15;:33::i;:::-;23016:4696;;;;22903:4809;;;:::o;6046:591::-;-1:-1:-1;;;;;6130:21:0;;6122:67;;;;-1:-1:-1;;;6122:67:0;;15926:2:1;6122:67:0;;;15908:21:1;15965:2;15945:18;;;15938:30;16004:34;15984:18;;;15977:62;-1:-1:-1;;;16055:18:1;;;16048:31;16096:19;;6122:67:0;15724:397:1;6122:67:0;-1:-1:-1;;;;;6289:18:0;;6264:22;6289:18;;;;;;;;;;;6326:24;;;;6318:71;;;;-1:-1:-1;;;6318:71:0;;16328:2:1;6318:71:0;;;16310:21:1;16367:2;16347:18;;;16340:30;16406:34;16386:18;;;16379:62;-1:-1:-1;;;16457:18:1;;;16450:32;16499:19;;6318:71:0;16126:398:1;6318:71:0;-1:-1:-1;;;;;6425:18:0;;:9;:18;;;;;;;;;;6446:23;;;6425:44;;6491:12;:22;;6463:6;;6425:9;6491:22;;6463:6;;6491:22;:::i;:::-;;;;-1:-1:-1;;6531:37:0;;1848:25:1;;;6557:1:0;;-1:-1:-1;;;;;6531:37:0;;;;;1836:2:1;1821:18;6531:37:0;;;;;;;19898:200:::1;19606:499:::0;;:::o;1103:191::-;1196:6;;;-1:-1:-1;;;;;1213:17:0;;;-1:-1:-1;;;;;;1213:17:0;;;;;;;1246:40;;1196:6;;;1213:17;1196:6;;1246:40;;1177:16;;1246:40;1166:128;1103:191;:::o;28376:589::-;28526:16;;;28540:1;28526:16;;;;;;;;28502:21;;28526:16;;;;;;;;;;-1:-1:-1;28526:16:0;28502:40;;28571:4;28553;28558:1;28553:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;28553:23:0;;;-1:-1:-1;;;;;28553:23:0;;;;;28597:15;-1:-1:-1;;;;;28597:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28587:4;28592:1;28587:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;28587:32:0;;;-1:-1:-1;;;;;28587:32:0;;;;;28632:62;28649:4;28664:15;28682:11;28632:8;:62::i;:::-;28733:224;;-1:-1:-1;;;28733:224:0;;-1:-1:-1;;;;;28733:15:0;:66;;;;:224;;28814:11;;28840:1;;28884:4;;28911;;28931:15;;28733:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28431:534;28376:589;:::o;21507:188::-;-1:-1:-1;;;;;21590:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;21590:39:0;;;;;;;;;;21647:40;;21590:39;;:31;21647:40;;;21507:188;;:::o;4898:733::-;-1:-1:-1;;;;;5038:20:0;;5030:70;;;;-1:-1:-1;;;5030:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5119:23:0;;5111:71;;;;-1:-1:-1;;;5111:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5279:17:0;;5255:21;5279:17;;;;;;;;;;;5315:23;;;;5307:74;;;;-1:-1:-1;;;5307:74:0;;17972:2:1;5307:74:0;;;17954:21:1;18011:2;17991:18;;;17984:30;18050:34;18030:18;;;18023:62;-1:-1:-1;;;18101:18:1;;;18094:36;18147:19;;5307:74:0;17770:402:1;5307:74:0;-1:-1:-1;;;;;5417:17:0;;;:9;:17;;;;;;;;;;;5437:22;;;5417:42;;5481:20;;;;;;;;:30;;5453:6;;5417:9;5481:30;;5453:6;;5481:30;:::i;:::-;;;;;;;;5546:9;-1:-1:-1;;;;;5529:35:0;5538:6;-1:-1:-1;;;;;5529:35:0;;5557:6;5529:35;;;;1848:25:1;;1836:2;1821:18;;1702:177;5529:35:0;;;;;;;;5019:612;4898:733;;;:::o;27720:540::-;27803:4;27759:23;3201:18;;;;;;;;;;;;27849:20;;;27845:59;;27886:7;;27720:540::o;27845:59::-;27938:18;;:23;;27959:2;27938:23;:::i;:::-;27920:15;:41;27916:115;;;27996:18;;:23;;28017:2;27996:23;:::i;:::-;27978:41;;27916:115;28074:15;28102:36;28074:15;28102:16;:36::i;:::-;28173:15;;28165:87;;-1:-1:-1;;;;;28173:15:0;;;;28216:21;;28165:87;;;;28216:21;28173:15;28165:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8651:98;8709:7;8736:5;8740:1;8736;:5;:::i;:::-;8729:12;8651:98;-1:-1:-1;;;8651:98:0:o;8757:::-;8815:7;8842:5;8846:1;8842;:5;:::i;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:180::-;1943:6;1996:2;1984:9;1975:7;1971:23;1967:32;1964:52;;;2012:1;2009;2002:12;1964:52;-1:-1:-1;2035:23:1;;1884:180;-1:-1:-1;1884:180:1:o;2069:456::-;2146:6;2154;2162;2215:2;2203:9;2194:7;2190:23;2186:32;2183:52;;;2231:1;2228;2221:12;2183:52;2270:9;2257:23;2289:31;2314:5;2289:31;:::i;:::-;2339:5;-1:-1:-1;2396:2:1;2381:18;;2368:32;2409:33;2368:32;2409:33;:::i;:::-;2069:456;;2461:7;;-1:-1:-1;;;2515:2:1;2500:18;;;;2487:32;;2069:456::o;2927:160::-;2992:20;;3048:13;;3041:21;3031:32;;3021:60;;3077:1;3074;3067:12;3092:180;3148:6;3201:2;3189:9;3180:7;3176:23;3172:32;3169:52;;;3217:1;3214;3207:12;3169:52;3240:26;3256:9;3240:26;:::i;3277:127::-;3338:10;3333:3;3329:20;3326:1;3319:31;3369:4;3366:1;3359:15;3393:4;3390:1;3383:15;3409:275;3480:2;3474:9;3545:2;3526:13;;-1:-1:-1;;3522:27:1;3510:40;;3580:18;3565:34;;3601:22;;;3562:62;3559:88;;;3627:18;;:::i;:::-;3663:2;3656:22;3409:275;;-1:-1:-1;3409:275:1:o;3689:183::-;3749:4;3782:18;3774:6;3771:30;3768:56;;;3804:18;;:::i;:::-;-1:-1:-1;3849:1:1;3845:14;3861:4;3841:25;;3689:183::o;3877:662::-;3931:5;3984:3;3977:4;3969:6;3965:17;3961:27;3951:55;;4002:1;3999;3992:12;3951:55;4038:6;4025:20;4064:4;4088:60;4104:43;4144:2;4104:43;:::i;:::-;4088:60;:::i;:::-;4182:15;;;4268:1;4264:10;;;;4252:23;;4248:32;;;4213:12;;;;4292:15;;;4289:35;;;4320:1;4317;4310:12;4289:35;4356:2;4348:6;4344:15;4368:142;4384:6;4379:3;4376:15;4368:142;;;4450:17;;4438:30;;4488:12;;;;4401;;4368:142;;;-1:-1:-1;4528:5:1;3877:662;-1:-1:-1;;;;;;3877:662:1:o;4544:1215::-;4662:6;4670;4723:2;4711:9;4702:7;4698:23;4694:32;4691:52;;;4739:1;4736;4729:12;4691:52;4779:9;4766:23;4808:18;4849:2;4841:6;4838:14;4835:34;;;4865:1;4862;4855:12;4835:34;4903:6;4892:9;4888:22;4878:32;;4948:7;4941:4;4937:2;4933:13;4929:27;4919:55;;4970:1;4967;4960:12;4919:55;5006:2;4993:16;5028:4;5052:60;5068:43;5108:2;5068:43;:::i;5052:60::-;5146:15;;;5228:1;5224:10;;;;5216:19;;5212:28;;;5177:12;;;;5252:19;;;5249:39;;;5284:1;5281;5274:12;5249:39;5308:11;;;;5328:217;5344:6;5339:3;5336:15;5328:217;;;5424:3;5411:17;5441:31;5466:5;5441:31;:::i;:::-;5485:18;;5361:12;;;;5523;;;;5328:217;;;5564:5;-1:-1:-1;;5607:18:1;;5594:32;;-1:-1:-1;;5638:16:1;;;5635:36;;;5667:1;5664;5657:12;5635:36;;5690:63;5745:7;5734:8;5723:9;5719:24;5690:63;:::i;:::-;5680:73;;;4544:1215;;;;;:::o;5764:315::-;5829:6;5837;5890:2;5878:9;5869:7;5865:23;5861:32;5858:52;;;5906:1;5903;5896:12;5858:52;5945:9;5932:23;5964:31;5989:5;5964:31;:::i;:::-;6014:5;-1:-1:-1;6038:35:1;6069:2;6054:18;;6038:35;:::i;:::-;6028:45;;5764:315;;;;;:::o;6084:388::-;6152:6;6160;6213:2;6201:9;6192:7;6188:23;6184:32;6181:52;;;6229:1;6226;6219:12;6181:52;6268:9;6255:23;6287:31;6312:5;6287:31;:::i;:::-;6337:5;-1:-1:-1;6394:2:1;6379:18;;6366:32;6407:33;6366:32;6407:33;:::i;:::-;6459:7;6449:17;;;6084:388;;;;;:::o;6477:380::-;6556:1;6552:12;;;;6599;;;6620:61;;6674:4;6666:6;6662:17;6652:27;;6620:61;6727:2;6719:6;6716:14;6696:18;6693:38;6690:161;;6773:10;6768:3;6764:20;6761:1;6754:31;6808:4;6805:1;6798:15;6836:4;6833:1;6826:15;6690:161;;6477:380;;;:::o;6862:356::-;7064:2;7046:21;;;7083:18;;;7076:30;7142:34;7137:2;7122:18;;7115:62;7209:2;7194:18;;6862:356::o;7223:127::-;7284:10;7279:3;7275:20;7272:1;7265:31;7315:4;7312:1;7305:15;7339:4;7336:1;7329:15;7355:168;7428:9;;;7459;;7476:15;;;7470:22;;7456:37;7446:71;;7497:18;;:::i;7937:125::-;8002:9;;;8023:10;;;8020:36;;;8036:18;;:::i;8849:127::-;8910:10;8905:3;8901:20;8898:1;8891:31;8941:4;8938:1;8931:15;8965:4;8962:1;8955:15;8981:135;9020:3;9041:17;;;9038:43;;9061:18;;:::i;:::-;-1:-1:-1;9108:1:1;9097:13;;8981:135::o;9121:128::-;9188:9;;;9209:11;;;9206:37;;;9223:18;;:::i;12210:401::-;12412:2;12394:21;;;12451:2;12431:18;;;12424:30;12490:34;12485:2;12470:18;;12463:62;-1:-1:-1;;;12556:2:1;12541:18;;12534:35;12601:3;12586:19;;12210:401::o;12616:399::-;12818:2;12800:21;;;12857:2;12837:18;;;12830:30;12896:34;12891:2;12876:18;;12869:62;-1:-1:-1;;;12962:2:1;12947:18;;12940:33;13005:3;12990:19;;12616:399::o;16529:251::-;16599:6;16652:2;16640:9;16631:7;16627:23;16623:32;16620:52;;;16668:1;16665;16658:12;16620:52;16700:9;16694:16;16719:31;16744:5;16719:31;:::i;16785:980::-;17047:4;17095:3;17084:9;17080:19;17126:6;17115:9;17108:25;17152:2;17190:6;17185:2;17174:9;17170:18;17163:34;17233:3;17228:2;17217:9;17213:18;17206:31;17257:6;17292;17286:13;17323:6;17315;17308:22;17361:3;17350:9;17346:19;17339:26;;17400:2;17392:6;17388:15;17374:29;;17421:1;17431:195;17445:6;17442:1;17439:13;17431:195;;;17510:13;;-1:-1:-1;;;;;17506:39:1;17494:52;;17601:15;;;;17566:12;;;;17542:1;17460:9;17431:195;;;-1:-1:-1;;;;;;;17682:32:1;;;;17677:2;17662:18;;17655:60;-1:-1:-1;;;17746:3:1;17731:19;17724:35;17643:3;16785:980;-1:-1:-1;;;16785:980:1:o;18177:217::-;18217:1;18243;18233:132;;18287:10;18282:3;18278:20;18275:1;18268:31;18322:4;18319:1;18312:15;18350:4;18347:1;18340:15;18233:132;-1:-1:-1;18379:9:1;;18177:217::o

Swarm Source

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