ETH Price: $3,412.59 (+2.54%)

Token

WEN MARKETING (WM)
 

Overview

Max Total Supply

1,000,000,000,000,000 WM

Holders

69

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0 WM

Value
$0.00
0x21d1659742cf55c148834afe1d151e7a90a51d5e
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:
WENMKT

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-11
*/

// WEB : https://www.wenmarketing.org/
// Telegram : t.me/wenmarketingerc20

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

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

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
  /**
   * @dev Returns the amount of tokens in existence.
   */
  function totalSupply() external view returns (uint256);

  /**
   * @dev Returns the token decimals.
   */
  function decimals() external view returns (uint8);

  /**
   * @dev Returns the token symbol.
   */
  function symbol() external view returns (string memory);

  /**
  * @dev Returns the token name.
  */
  function name() external view returns (string memory);

  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view returns (address);

  /**
   * @dev Returns the amount of tokens owned by `account`.
   */
  function balanceOf(address account) external view returns (uint256);

  /**
   * @dev Moves `amount` tokens from the caller's account to `recipient`.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transfer(address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Returns the remaining number of tokens that `spender` will be
   * allowed to spend on behalf of `owner` through {transferFrom}. This is
   * zero by default.
   *
   * This value changes when {approve} or {transferFrom} are called.
   */
  function allowance(address _owner, address spender) external view returns (uint256);

  /**
   * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * IMPORTANT: Beware that changing an allowance with this method brings the risk
   * that someone may use both the old and the new allowance by unfortunate
   * transaction ordering. One possible solution to mitigate this race
   * condition is to first reduce the spender's allowance to 0 and set the
   * desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   *
   * Emits an {Approval} event.
   */
  function approve(address spender, uint256 amount) external returns (bool);

  /**
   * @dev Moves `amount` tokens from `sender` to `recipient` using the
   * allowance mechanism. `amount` is then deducted from the caller's
   * allowance.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Emitted when `value` tokens are moved from one account (`from`) to
   * another (`to`).
   *
   * Note that `value` may be zero.
   */
  event Transfer(address indexed from, address indexed to, uint256 value);

  /**
   * @dev Emitted when the allowance of a `spender` for an `owner` is set by
   * a call to {approve}. `value` is the new allowance.
   */
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function factory() external view returns (address);
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract WENMKT is Context, IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isSniperOrBlacklisted;
    mapping (address => bool) private _liquidityHolders;

    uint256 private startingSupply = 1_000_000_000_000_000;

    string private _name = "WEN MARKETING";
    string private _symbol = "WM";

    uint256 public _buyFee = 1100;
    uint256 public _sellFee = 1100;
    uint256 public _transferFee = 2500;

    uint256 constant public maxBuyTaxes = 2000;
    uint256 constant public maxSellTaxes = 2000;
    uint256 constant public maxTransferTaxes = 2500;

    uint256 public _liquidityRatio = 1;
    uint256 public _marketingRatio = 5;
    uint256 public _devRatio = 5;

    uint256 private constant masterTaxDivisor = 10000;

    uint256 private constant MAX = ~uint256(0);
    uint8 constant private _decimals = 9;
    uint256 constant private _decimalsMul = _decimals;
    uint256 private _tTotal = startingSupply * 10**_decimalsMul;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    // UNI ROUTER
    address private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address payable private _marketingWallet = payable(0x2DE83862591C2C1D3C678afD46Ef5C1e008Ca2E4);
    address payable private _devWallet = payable(0xa5fE39C2209837825432eF150f4B0A1C37B992f7);
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 private maxTxPercent = 1;
    uint256 private maxTxDivisor = 100;
    uint256 private _maxTxAmount = (_tTotal * maxTxPercent) / maxTxDivisor;
    uint256 public maxTxAmountUI = (startingSupply * maxTxPercent) / maxTxDivisor;

    uint256 private maxWalletPercent = 2;
    uint256 private maxWalletDivisor = 100;
    uint256 private _maxWalletSize = (_tTotal * maxWalletPercent) / maxWalletDivisor;
    uint256 public maxWalletSizeUI = (startingSupply * maxWalletPercent) / maxWalletDivisor;

    uint256 private swapThreshold = (_tTotal * 5) / 10000;
    uint256 private swapAmount = (_tTotal * 5) / 1000;

    bool private sniperProtection = true;
    bool public _hasLiqBeenAdded = false;
    uint256 private _liqAddStatus = 0;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    uint256 private _initialLiquidityAmount = 0;
    uint256 private snipeBlockAmt = 0;
    uint256 public snipersCaught = 0;
    bool private sameBlockActive = true;
    mapping (address => uint256) private lastTrade;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        _tOwned[_msgSender()] = _tTotal;

        // Set the owner.
        _owner = msg.sender;

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[owner()] = true;

        // Approve the owner for PancakeSwap, timesaver.
        _approve(_msgSender(), _routerAddress, _tTotal);

        // Ever-growing sniper/tool blacklist
        _isSniperOrBlacklisted[0xE4882975f933A199C92b5A925C9A8fE65d599Aa8] = true;
        _isSniperOrBlacklisted[0x86C70C4a3BC775FB4030448c9fdb73Dc09dd8444] = true;
        _isSniperOrBlacklisted[0xa4A25AdcFCA938aa030191C297321323C57148Bd] = true;
        _isSniperOrBlacklisted[0x20C00AFf15Bb04cC631DB07ee9ce361ae91D12f8] = true;
        _isSniperOrBlacklisted[0x0538856b6d0383cde1709c6531B9a0437185462b] = true;
        _isSniperOrBlacklisted[0x6e44DdAb5c29c9557F275C9DB6D12d670125FE17] = true;
        _isSniperOrBlacklisted[0x90484Bb9bc05fD3B5FF1fe412A492676cd81790C] = true;
        _isSniperOrBlacklisted[0xA62c5bA4D3C95b3dDb247EAbAa2C8E56BAC9D6dA] = true;
        _isSniperOrBlacklisted[0xA94E56EFc384088717bb6edCccEc289A72Ec2381] = true;
        _isSniperOrBlacklisted[0x3066Cc1523dE539D36f94597e233719727599693] = true;
        _isSniperOrBlacklisted[0xf13FFadd3682feD42183AF8F3f0b409A9A0fdE31] = true;
        _isSniperOrBlacklisted[0x376a6EFE8E98f3ae2af230B3D45B8Cc5e962bC27] = true;
        _isSniperOrBlacklisted[0x0538856b6d0383cde1709c6531B9a0437185462b] = true;
        _isSniperOrBlacklisted[0x90484Bb9bc05fD3B5FF1fe412A492676cd81790C] = true;
        _isSniperOrBlacklisted[0xA62c5bA4D3C95b3dDb247EAbAa2C8E56BAC9D6dA] = true;
        _isSniperOrBlacklisted[0xA94E56EFc384088717bb6edCccEc289A72Ec2381] = true;
        _isSniperOrBlacklisted[0x3066Cc1523dE539D36f94597e233719727599693] = true;
        _isSniperOrBlacklisted[0xf13FFadd3682feD42183AF8F3f0b409A9A0fdE31] = true;
        _isSniperOrBlacklisted[0x376a6EFE8E98f3ae2af230B3D45B8Cc5e962bC27] = true;
        _isSniperOrBlacklisted[0x201044fa39866E6dD3552D922CDa815899F63f20] = true;
        _isSniperOrBlacklisted[0x6F3aC41265916DD06165b750D88AB93baF1a11F8] = true;
        _isSniperOrBlacklisted[0x27C71ef1B1bb5a9C9Ee0CfeCEf4072AbAc686ba6] = true;
        _isSniperOrBlacklisted[0xDEF441C00B5Ca72De73b322aA4e5FE2b21D2D593] = true;
        _isSniperOrBlacklisted[0x5668e6e8f3C31D140CC0bE918Ab8bB5C5B593418] = true;
        _isSniperOrBlacklisted[0x4b9BDDFB48fB1529125C14f7730346fe0E8b5b40] = true;
        _isSniperOrBlacklisted[0x7e2b3808cFD46fF740fBd35C584D67292A407b95] = true;
        _isSniperOrBlacklisted[0xe89C7309595E3e720D8B316F065ecB2730e34757] = true;
        _isSniperOrBlacklisted[0x725AD056625326B490B128E02759007BA5E4eBF1] = true;


        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and recnouncements.
    // This allows for removal of ownership privelages from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwner(address newOwner) external onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if (_marketingWallet == payable(_owner))
            _marketingWallet = payable(newOwner);
        
        _allowances[_owner][newOwner] = balanceOf(_owner);
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

    function renounceOwnership() public virtual onlyOwner() {
        setExcludedFromFees(_owner, false);
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner(); }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

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

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

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

    function approveMax(address spender) public returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] -= amount;
        }

        return _transfer(sender, recipient, amount);
    }

    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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function setNewRouter(address newRouter) public onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 1 weeks, "One week cooldown.");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
        }
    }

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

    function setExcludedFromFees(address account, bool enabled) public onlyOwner {
        _isExcludedFromFees[account] = enabled;
    }

    function isSniperOrBlacklisted(address account) public view returns (bool) {
        return _isSniperOrBlacklisted[account];
    }

    function isProtected(uint256 rInitializer) external onlyOwner {
        require (_liqAddStatus == 0, "Error.");
        _liqAddStatus = rInitializer;
    }

    function setBlacklistEnabled(address account, bool enabled) external onlyOwner() {
        _isSniperOrBlacklisted[account] = enabled;
    }

    function setStartingProtections(uint8 _block) external onlyOwner{
        require (snipeBlockAmt == 0 && !_hasLiqBeenAdded);
        snipeBlockAmt = _block;
    }

    function setProtectionSettings(bool antiSnipe, bool antiBlock) external onlyOwner() {
        sniperProtection = antiSnipe;
        sameBlockActive = antiBlock;
    }

    function setTaxes(uint256 buyFee, uint256 sellFee, uint256 transferFee) external onlyOwner {
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        _buyFee = buyFee;
        _sellFee = sellFee;
        _transferFee = transferFee;
    }

    function setRatios(uint256 liquidity, uint256 marketing) external onlyOwner {
        require (liquidity + marketing == 100, "Must add up to 100%");
        _liquidityRatio = liquidity;
        _marketingRatio = marketing;
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Must be above 0.1% of total supply.");
        _maxTxAmount = check;
        maxTxAmountUI = (startingSupply * percent) / divisor;
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Must be above 0.5% of total supply.");
        _maxWalletSize = check;
        maxWalletSizeUI = (startingSupply * percent) / divisor;
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
    }

    function setWallets(address payable marketingWallet, address payable devWallet) external onlyOwner {
        _marketingWallet = payable(marketingWallet);
        _devWallet = payable(devWallet);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != owner()
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: Zero address.");
        require(to != address(0), "ERC20: Zero address.");
        require(amount > 0, "Must >0.");
        if(_hasLimits(from, to)) {
            if (sameBlockActive) {
                if (lpPairs[from]){
                    require(lastTrade[to] != block.number);
                    lastTrade[to] = block.number;
                } else {
                    require(lastTrade[from] != block.number);
                    lastTrade[from] = block.number;
                }
            }
            if(lpPairs[from] || lpPairs[to]){
                require(amount <= _maxTxAmount, "Exceeds the maxTxAmount.");
            }
            if(to != _routerAddress && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");
            }
        }

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

        if (lpPairs[to]) {
            if (!inSwapAndLiquify
                && swapAndLiquifyEnabled
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    swapAndLiquify(contractTokenBalance);
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        if (_liquidityRatio + _marketingRatio + _devRatio == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * _liquidityRatio) / (_liquidityRatio + _marketingRatio + _devRatio)) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;
        swapTokensForEth(toSwapForEth);

        uint256 currentBalance = address(this).balance;
        uint256 liquidityBalance = ((currentBalance * _liquidityRatio) / (_liquidityRatio + _marketingRatio + _devRatio)) / 2;

        if (toLiquify > 0) {
            addLiquidity(toLiquify, liquidityBalance);
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {
            _marketingWallet.transfer(((currentBalance - liquidityBalance) * _marketingRatio) / (_marketingRatio + _devRatio));
            _devWallet.transfer(address(this).balance);
        }
    }

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            DEAD,
            block.timestamp
        );
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            if (snipeBlockAmt != 2) {
                _liqAddBlock = block.number + 5000;
            } else {
                _liqAddBlock = block.number;
            }

            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            _liqAddStamp = block.timestamp;

            swapAndLiquifyEnabled = true;
            emit SwapAndLiquifyEnabledUpdated(true);
        }
    }

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee) private returns (bool) {
        if (sniperProtection){
            if (isSniperOrBlacklisted(from) || isSniperOrBlacklisted(to)) {
                revert("Sniper rejected.");
            }

            if (!_hasLiqBeenAdded) {
                _checkLiquidityAdd(from, to);
                if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                    revert("Only owner can transfer at this time.");
                }
            } else {
                if (_liqAddBlock > 0 
                    && lpPairs[from] 
                    && _hasLimits(from, to)
                ) {
                    if (block.number - _liqAddBlock < snipeBlockAmt) {
                        _isSniperOrBlacklisted[to] = true;
                        snipersCaught ++;
                        emit SniperCaught(to);
                    }
                }
            }
        }

        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, to, amount) : amount;
        _tOwned[to] += amountReceived;

        emit Transfer(from, to, amountReceived);
        return true;
    }

    function takeTaxes(address from, address to, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (from == lpPair) {
            currentFee = _buyFee;
        } else if (to == lpPair) {
            currentFee = _sellFee;
        } else {
            currentFee = _transferFee;
        }

        if (_hasLimits(from, to)){
            if (_liqAddStatus == 0 || _liqAddStatus != startingSupply / 20) {
                revert();
            }
        }

        uint256 feeAmount = amount * currentFee / masterTaxDivisor;

        _tOwned[address(this)] += feeAmount;
        emit Transfer(from, address(this), feeAmount);

        return amount - feeAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","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":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rInitializer","type":"uint256"}],"name":"isProtected","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniperOrBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"antiSnipe","type":"bool"},{"internalType":"bool","name":"antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_block","type":"uint8"}],"name":"setStartingProtections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"transferFee","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"},{"internalType":"address payable","name":"devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600060035566038d7ea4c6800060085560c0604052600d60808190526c57454e204d41524b4554494e4760981b60a090815262000040916009919062000a45565b5060408051808201909152600280825261574d60f01b60209092019182526200006c91600a9162000a45565b5061044c600b819055600c556109c4600d556001600e556005600f8190556010556200009b6009600a62000b89565b600854620000aa919062000c47565b6011819055601580546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d1790915560168054909116732de83862591c2c1d3c678afd46ef5c1e008ca2e417905560178054600161ff0160a01b03191673a5fe39c2209837825432ef150f4b0a1c37b992f717905560016018819055606460198190559162000139919062000c47565b62000145919062000b1d565b601a556019546018546008546200015d919062000c47565b62000169919062000b1d565b601b556002601c556064601d55601d54601c546011546200018b919062000c47565b62000197919062000b1d565b601e55601d54601c54600854620001af919062000c47565b620001bb919062000b1d565b601f556127106011546005620001d2919062000c47565b620001de919062000b1d565b6020556103e86011546005620001f5919062000c47565b62000201919062000b1d565b6021556022805461ffff1916600190811790915560006023819055602481905560258190556026819055602781905560288190556029805460ff19168317905560115491906200024e3390565b6001600160a01b03908116825260208083019390935260409182016000908120949094558354336001600160a01b0319918216179094556015546013805491909216941684179055805163c45a015560e01b8152905163c45a015592600480840193919291829003018186803b158015620002c857600080fd5b505afa158015620002dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000303919062000aeb565b6001600160a01b031663c9c65396601360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036057600080fd5b505afa15801562000375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039b919062000aeb565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b158015620003e357600080fd5b505af1158015620003f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041e919062000aeb565b601480546001600160a01b0319166001600160a01b039283169081179091556000908152600260209081526040808320805460ff1916600190811790915530845260048352818420601354909516845293909152812060001990556005906200048f6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526005909252812080548316600190811790915561dead82527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba80549093168117909255600790620005176000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620005636200054b3390565b6015546011546001600160a01b039091169062000944565b60066020527f4cb4f7504b8a6b4952597cecbbd5e2f3bd3b97720d4e1cfe243f65d137285dbb8054600160ff1991821681179092557f876592c4475eca1b0d8eea3a3d15c308554da9973eff84f3627d331914ec9bae80548216831790557ff627483590045b01e5ec0b1a0e946949bf001311587471447afe11bd8ab0466880548216831790557f7b0d0d8194a608fcbcbdc0d4d976ae8f7e05518c8ce66fffcfa71d51c06f155880548216831790557f1b4ccb03f19e0a4fffa436c4fc60c7cb96d398283b0f6eb739806b47bd079f4c80548216831790557f61bc32a9fbe0d491ddfbfeea3ee6f3825dc02bb7c00e58c417898377fd6d806d80548216831790557f8358eb05a8d1376638eaf243a334abb4fc74b12b73b4a0eab411dfb92d5750cd80548216831790557f43315a920928a28d19ef52187e55b70fff5938914e823c406b86d934b884174e80548216831790557f6ecabf9902eb0d0a47fa86d71d596d44aae8b1122348e95b4f9b928d3da608b680548216831790557f6e8d2409ffd3ba40a424015e6eb94a4ba6ab703cb09bd8734b9e114b1730051880548216831790557fdccb5c819d9b253665d48a11ff183ee8b05ffd0fb20acbdf203b35831d23df9580548216831790557f2458932409b0db2908861718c0a17d1d1f9c88d5b1e7dea02711a25544f23f7e80548216831790557fcd577e87786c2eb6bf9c70815b7e05a973824ebfea045998feddb1c1fb88cdc680548216831790557fc36aab591618a511ea760622806c50775417280e19c37ac73178eb3fa663df7a80548216831790557f9e87942f9730e57a5ace6e787111079ed00f802c57f0c47f9da684219838563380548216831790557f9eb0d33b7d00b0f351add6645c6556b33694b9253a4486023c215a59f139265e80548216831790557f1aa65701ad71d25098a8c9454bd022b4f36b910c18b5ef5841916185e9d1356c80548216831790557f8c72d713c0053fea5ac6eecf2172c5c601c5572bd8dc326d0df61a3c71937e9180548216831790557fc790a13b56b4e2c534e1999ccc18879c09b15c5e7bbe93aac28ba4c9e29bc92c80548216831790557f7d4786da90a3c3c7a49a292b956bee46188b818ae39108880425b81b6a9f2f82805482168317905573725ad056625326b490b128e02759007ba5e4ebf16000527f40331ccb602cdb0a90ed5ebec6e837211d49b7d36d69c4fa914824921751137480549091169091179055620008ee3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6011546040516200093691815260200190565b60405180910390a362000cbc565b6001600160a01b038316620009965760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620009e45760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064016200098d565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b82805462000a539062000c69565b90600052602060002090601f01602090048101928262000a77576000855562000ac2565b82601f1062000a9257805160ff191683800117855562000ac2565b8280016001018555821562000ac2579182015b8281111562000ac257825182559160200191906001019062000aa5565b5062000ad092915062000ad4565b5090565b5b8082111562000ad0576000815560010162000ad5565b60006020828403121562000afe57600080fd5b81516001600160a01b038116811462000b1657600080fd5b9392505050565b60008262000b3b57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111562000b8157816000190482111562000b655762000b6562000ca6565b8085161562000b7357918102915b93841c939080029062000b45565b509250929050565b600062000b16838360008262000ba25750600162000c41565b8162000bb15750600062000c41565b816001811462000bca576002811462000bd55762000bf5565b600191505062000c41565b60ff84111562000be95762000be962000ca6565b50506001821b62000c41565b5060208310610133831016604e8410600b841016171562000c1a575081810a62000c41565b62000c26838362000b40565b806000190482111562000c3d5762000c3d62000ca6565b0290505b92915050565b600081600019048311821515161562000c645762000c6462000ca6565b500290565b600181811c9082168062000c7e57607f821691505b6020821081141562000ca057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b612a0c8062000ccc6000396000f3fe6080604052600436106102b25760003560e01c8063590ffdce11610175578063a8edc797116100dc578063dd62ed3e11610095578063eafb5a3c1161006f578063eafb5a3c14610832578063eec2744e14610852578063f6540ec714610872578063fb78680d1461088857600080fd5b8063dd62ed3e146107b6578063e79d4160146107fc578063e9dae5ed1461081257600080fd5b8063a8edc7971461072a578063a9059cbb14610740578063b1b08f7114610760578063b3d514fb146103e4578063c49b9a8014610776578063d3f6a1571461079657600080fd5b806381c6f11b1161012e57806381c6f11b1461067e578063893d20e81461069e57806389fd9bc1146106bc5780638da5cb5b1461069e57806395d89b41146106f5578063a457c2d71461070a57600080fd5b8063590ffdce146105bd57806364038409146105dd5780636639dd93146105f357806370a0823114610613578063715018a61461064957806380c581d11461065e57600080fd5b80633df9a8d2116102195780634ef3cce5116101d25780634ef3cce5146104f95780634fb2e45d1461050f5780634fbee1931461052f57806350a8e01614610568578063571ac8b014610587578063590f897e146105a757600080fd5b80633df9a8d21461044c5780633f3cf56c1461046257806340b9a54b146104825780634129ecee14610498578063452ed4f1146104b85780634a74bb02146104d857600080fd5b806323b872dd1161026b57806323b872dd146103a457806326003957146103c45780632b28fc7a146103e4578063313ce567146103fa578063384f6b5114610416578063395093511461042c57600080fd5b806303fd2a45146102be578063044df726146102f157806306fdde03146103135780630758d92414610335578063095ea7b31461035557806318160ddd1461038557600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102d461dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102fd57600080fd5b5061031161030c366004612678565b6108a8565b005b34801561031f57600080fd5b506103286108fb565b6040516102e8919061277e565b34801561034157600080fd5b506013546102d4906001600160a01b031681565b34801561036157600080fd5b50610375610370366004612631565b61098d565b60405190151581526020016102e8565b34801561039157600080fd5b506011545b6040519081526020016102e8565b3480156103b057600080fd5b506103756103bf3660046125bb565b6109a3565b3480156103d057600080fd5b506103116103df3660046126ad565b610a1b565b3480156103f057600080fd5b506103966107d081565b34801561040657600080fd5b50604051600981526020016102e8565b34801561042257600080fd5b50610396600e5481565b34801561043857600080fd5b50610375610447366004612631565b610af4565b34801561045857600080fd5b50610396600d5481565b34801561046e57600080fd5b5061031161047d3660046126ad565b610b30565b34801561048e57600080fd5b50610396600b5481565b3480156104a457600080fd5b506103116104b336600461275b565b610c09565b3480156104c457600080fd5b506014546102d4906001600160a01b031681565b3480156104e457600080fd5b5060175461037590600160a81b900460ff1681565b34801561050557600080fd5b50610396600f5481565b34801561051b57600080fd5b5061031161052a366004612548565b610c5c565b34801561053b57600080fd5b5061037561054a366004612548565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561057457600080fd5b5060225461037590610100900460ff1681565b34801561059357600080fd5b506103756105a2366004612548565b610de4565b3480156105b357600080fd5b50610396600c5481565b3480156105c957600080fd5b506103116105d83660046125fc565b610df8565b3480156105e957600080fd5b50610396601b5481565b3480156105ff57600080fd5b5061031161060e3660046126ad565b610e4d565b34801561061f57600080fd5b5061039661062e366004612548565b6001600160a01b031660009081526001602052604090205490565b34801561065557600080fd5b50610311610ed1565b34801561066a57600080fd5b506103116106793660046125fc565b610f50565b34801561068a57600080fd5b50610311610699366004612694565b611029565b3480156106aa57600080fd5b506000546001600160a01b03166102d4565b3480156106c857600080fd5b506103756106d7366004612548565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561070157600080fd5b50610328611091565b34801561071657600080fd5b50610375610725366004612631565b6110a0565b34801561073657600080fd5b5061039660105481565b34801561074c57600080fd5b5061037561075b366004612631565b6110d7565b34801561076c57600080fd5b506103966109c481565b34801561078257600080fd5b5061031161079136600461265d565b6110ee565b3480156107a257600080fd5b506103116107b1366004612582565b611170565b3480156107c257600080fd5b506103966107d1366004612582565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561080857600080fd5b5061039660285481565b34801561081e57600080fd5b5061031161082d3660046126cf565b6111c8565b34801561083e57600080fd5b5061031161084d366004612548565b61126e565b34801561085e57600080fd5b5061031161086d3660046125fc565b6115f4565b34801561087e57600080fd5b50610396601f5481565b34801561089457600080fd5b506103116108a3366004612729565b611649565b6000546001600160a01b031633146108db5760405162461bcd60e51b81526004016108d2906127d3565b60405180910390fd5b6022805492151560ff199384161790556029805491151591909216179055565b60606009805461090a9061293c565b80601f01602080910402602001604051908101604052809291908181526020018280546109369061293c565b80156109835780601f1061095857610100808354040283529160200191610983565b820191906000526020600020905b81548152906001019060200180831161096657829003601f168201915b5050505050905090565b600061099a3384846116b2565b50600192915050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610a08576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610a02908490612925565b90915550505b610a138484846117ab565b949350505050565b6000546001600160a01b03163314610a455760405162461bcd60e51b81526004016108d2906127d3565b60008183601154610a569190612906565b610a6091906128e4565b90506103e8601154610a7291906128e4565b811015610acd5760405162461bcd60e51b815260206004820152602360248201527f4d7573742062652061626f766520302e3525206f6620746f74616c2073757070604482015262363c9760e91b60648201526084016108d2565b601e8190556008548290610ae2908590612906565b610aec91906128e4565b601f55505050565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161099a918590610b2b9086906128cc565b6116b2565b6000546001600160a01b03163314610b5a5760405162461bcd60e51b81526004016108d2906127d3565b60008183601154610b6b9190612906565b610b7591906128e4565b90506103e8601154610b8791906128e4565b811015610be25760405162461bcd60e51b815260206004820152602360248201527f4d7573742062652061626f766520302e3125206f6620746f74616c2073757070604482015262363c9760e91b60648201526084016108d2565b601a8190556008548290610bf7908590612906565b610c0191906128e4565b601b55505050565b6000546001600160a01b03163314610c335760405162461bcd60e51b81526004016108d2906127d3565b602754158015610c4b5750602254610100900460ff16155b610c5457600080fd5b60ff16602755565b6000546001600160a01b03163314610c865760405162461bcd60e51b81526004016108d2906127d3565b6001600160a01b038116610cac5760405162461bcd60e51b81526004016108d2906127fe565b6001600160a01b03811661dead1415610cd75760405162461bcd60e51b81526004016108d2906127fe565b60008054610cf0916001600160a01b0390911690610df8565b610cfb816001610df8565b6000546016546001600160a01b0390811691161415610d3057601680546001600160a01b0319166001600160a01b0383161790555b600080546001600160a01b03908116825260016020818152604080852054600483528186208786168752835281862055845490931684525290205415610d9957600080546001600160a01b03168082526001602052604090912054610d97919083906117ab565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610df28260001961098d565b92915050565b6000546001600160a01b03163314610e225760405162461bcd60e51b81526004016108d2906127d3565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610e775760405162461bcd60e51b81526004016108d2906127d3565b610e8181836128cc565b606414610ec65760405162461bcd60e51b81526020600482015260136024820152724d7573742061646420757020746f203130302560681b60448201526064016108d2565b600e91909155600f55565b6000546001600160a01b03163314610efb5760405162461bcd60e51b81526004016108d2906127d3565b60008054610f14916001600160a01b0390911690610df8565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314610f7a5760405162461bcd60e51b81526004016108d2906127d3565b80610fa157506001600160a01b03166000908152600260205260409020805460ff19169055565b60035415610ffd5762093a8060035442610fbb9190612925565b11610ffd5760405162461bcd60e51b815260206004820152601260248201527127b732903bb2b2b59031b7b7b63237bbb71760711b60448201526064016108d2565b6001600160a01b0382166000908152600260205260409020805460ff19166001179055426003555b5050565b6000546001600160a01b031633146110535760405162461bcd60e51b81526004016108d2906127d3565b6023541561108c5760405162461bcd60e51b815260206004820152600660248201526522b93937b91760d11b60448201526064016108d2565b602355565b6060600a805461090a9061293c565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161099a918590610b2b908690612925565b60006110e43384846117ab565b5060019392505050565b6000546001600160a01b031633146111185760405162461bcd60e51b81526004016108d2906127d3565b60178054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061116590831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461119a5760405162461bcd60e51b81526004016108d2906127d3565b601680546001600160a01b039384166001600160a01b03199182161790915560178054929093169116179055565b6000546001600160a01b031633146111f25760405162461bcd60e51b81526004016108d2906127d3565b6107d0831115801561120657506107d08211155b801561121457506109c48111155b6112605760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e00000000000000000060448201526064016108d2565b600b92909255600c55600d55565b6000546001600160a01b031633146112985760405162461bcd60e51b81526004016108d2906127d3565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156112d857600080fd5b505afa1580156112ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113109190612565565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561135857600080fd5b505afa15801561136c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113909190612565565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b1580156113d657600080fd5b505afa1580156113ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140e9190612565565b90506001600160a01b0381166115b457816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561145757600080fd5b505afa15801561146b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148f9190612565565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156114d757600080fd5b505afa1580156114eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150f9190612565565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561155757600080fd5b505af115801561156b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158f9190612565565b601480546001600160a01b0319166001600160a01b03929092169190911790556115d0565b601480546001600160a01b0319166001600160a01b0383161790555b50601380546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b0316331461161e5760405162461bcd60e51b81526004016108d2906127d3565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116735760405162461bcd60e51b81526004016108d2906127d3565b82846011546116829190612906565b61168c91906128e4565b602055601154819061169f908490612906565b6116a991906128e4565b60215550505050565b6001600160a01b0383166116fe5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064016108d2565b6001600160a01b03821661174a5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064016108d2565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166117fa5760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b60448201526064016108d2565b6001600160a01b0383166118475760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b60448201526064016108d2565b600082116118825760405162461bcd60e51b815260206004820152600860248201526726bab9ba101f181760c11b60448201526064016108d2565b61188c8484611b6d565b15611a905760295460ff1615611943576001600160a01b03841660009081526002602052604090205460ff1615611902576001600160a01b0383166000908152602a60205260409020544314156118e257600080fd5b6001600160a01b0383166000908152602a60205260409020439055611943565b6001600160a01b0384166000908152602a602052604090205443141561192757600080fd5b6001600160a01b0384166000908152602a602052604090204390555b6001600160a01b03841660009081526002602052604090205460ff168061198257506001600160a01b03831660009081526002602052604090205460ff165b156119d957601a548211156119d95760405162461bcd60e51b815260206004820152601860248201527f4578636565647320746865206d61785478416d6f756e742e000000000000000060448201526064016108d2565b6015546001600160a01b03848116911614801590611a1057506001600160a01b03831660009081526002602052604090205460ff16155b15611a9057601e5482611a38856001600160a01b031660009081526001602052604090205490565b611a4291906128cc565b1115611a905760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e00000000000060448201526064016108d2565b6001600160a01b03841660009081526005602052604090205460019060ff1680611ad257506001600160a01b03841660009081526005602052604090205460ff165b15611adb575060005b6001600160a01b03841660009081526002602052604090205460ff1615611b5857601754600160a01b900460ff16158015611b1f5750601754600160a81b900460ff165b15611b58573060009081526001602052604081205490506020548110611b56576021548110611b4d57506021545b611b5681611c2b565b505b611b6485858584611e28565b95945050505050565b600080546001600160a01b03848116911614801590611b9a57506000546001600160a01b03838116911614155b8015611bbf57506001600160a01b03821660009081526007602052604090205460ff16155b8015611be457506001600160a01b03831660009081526007602052604090205460ff16155b8015611bfb57506001600160a01b03821661dead14155b8015611c0f57506001600160a01b03821615155b8015611c2457506001600160a01b0383163014155b9392505050565b6017805460ff60a01b1916600160a01b179055601054600f54600e54611c5191906128cc565b611c5b91906128cc565b611c6457611e18565b60006002601054600f54600e54611c7b91906128cc565b611c8591906128cc565b600e54611c929085612906565b611c9c91906128e4565b611ca691906128e4565b90506000611cb48284612925565b9050611cbf816120e7565b600047905060006002601054600f54600e54611cdb91906128cc565b611ce591906128cc565b600e54611cf29085612906565b611cfc91906128e4565b611d0691906128e4565b90508315611d5a57611d188482612237565b60408051858152602081018390529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6000611d668587612925565b1115611e1357601654601054600f546001600160a01b03909216916108fc91611d8e916128cc565b600f54611d9b8587612925565b611da59190612906565b611daf91906128e4565b6040518115909202916000818181858888f19350505050158015611dd7573d6000803e3d6000fd5b506017546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611e11573d6000803e3d6000fd5b505b505050505b506017805460ff60a01b19169055565b60225460009060ff1615612014576001600160a01b03851660009081526006602052604090205460ff1680611e7557506001600160a01b03841660009081526006602052604090205460ff165b15611eb55760405162461bcd60e51b815260206004820152601060248201526f29b734b832b9103932b532b1ba32b21760811b60448201526064016108d2565b602254610100900460ff16611f4b57611ece85856122e0565b602254610100900460ff16158015611eeb5750611eeb8585611b6d565b15611f465760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b60648201526084016108d2565b612014565b6000602454118015611f7557506001600160a01b03851660009081526002602052604090205460ff165b8015611f865750611f868585611b6d565b1561201457602754602454611f9b9043612925565b1015612014576001600160a01b0384166000908152600660205260408120805460ff191660011790556028805491611fd283612977565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b6001600160a01b0385166000908152600160205260408120805485929061203c908490612925565b90915550600090508261204f578361205a565b61205a86868661241d565b6001600160a01b0386166000908152600160205260408120805492935083929091906120879084906128cc565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120d391815260200190565b60405180910390a350600195945050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061211c5761211c6129a8565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561217057600080fd5b505afa158015612184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a89190612565565b816001815181106121bb576121bb6129a8565b6001600160a01b03928316602091820292909201015260135460405163791ac94760e01b815291169063791ac9479061220190859060009086903090429060040161285b565b600060405180830381600087803b15801561221b57600080fd5b505af115801561222f573d6000803e3d6000fd5b505050505050565b60135460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b1580156122a057600080fd5b505af11580156122b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122d991906126fb565b5050505050565b602254610100900460ff16156123445760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b60648201526084016108d2565b61234e8282611b6d565b15801561236857506014546001600160a01b038281169116145b156110255760275460021461238b57612383436113886128cc565b602455612390565b436024555b6001600160a01b03821660009081526007602052604090819020805460ff191660019081179091556022805461ff001916610100179055426025556017805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161241191901515815260200190565b60405180910390a15050565b60145460009081906001600160a01b03868116911614156124415750600b54612465565b6014546001600160a01b03858116911614156124605750600c54612465565b50600d545b61246f8585611b6d565b1561249d5760235415806124935750601460085461248d91906128e4565b60235414155b1561249d57600080fd5b60006127106124ac8386612906565b6124b691906128e4565b306000908152600160205260408120805492935083929091906124da9084906128cc565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36125298185612925565b9695505050505050565b8035801515811461254357600080fd5b919050565b60006020828403121561255a57600080fd5b8135611c24816129be565b60006020828403121561257757600080fd5b8151611c24816129be565b6000806040838503121561259557600080fd5b82356125a0816129be565b915060208301356125b0816129be565b809150509250929050565b6000806000606084860312156125d057600080fd5b83356125db816129be565b925060208401356125eb816129be565b929592945050506040919091013590565b6000806040838503121561260f57600080fd5b823561261a816129be565b915061262860208401612533565b90509250929050565b6000806040838503121561264457600080fd5b823561264f816129be565b946020939093013593505050565b60006020828403121561266f57600080fd5b611c2482612533565b6000806040838503121561268b57600080fd5b61261a83612533565b6000602082840312156126a657600080fd5b5035919050565b600080604083850312156126c057600080fd5b50508035926020909101359150565b6000806000606084860312156126e457600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561271057600080fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561273f57600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561276d57600080fd5b813560ff81168114611c2457600080fd5b600060208083528351808285015260005b818110156127ab5785810183015185820160400152820161278f565b818111156127bd576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128ab5784516001600160a01b031683529383019391830191600101612886565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156128df576128df612992565b500190565b60008261290157634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561292057612920612992565b500290565b60008282101561293757612937612992565b500390565b600181811c9082168061295057607f821691505b6020821081141561297157634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561298b5761298b612992565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146129d357600080fd5b5056fea26469706673582212206e540fdd8d9429d91875b38584aa18e005b9aed84ee10babf2639f53de41634c64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c8063590ffdce11610175578063a8edc797116100dc578063dd62ed3e11610095578063eafb5a3c1161006f578063eafb5a3c14610832578063eec2744e14610852578063f6540ec714610872578063fb78680d1461088857600080fd5b8063dd62ed3e146107b6578063e79d4160146107fc578063e9dae5ed1461081257600080fd5b8063a8edc7971461072a578063a9059cbb14610740578063b1b08f7114610760578063b3d514fb146103e4578063c49b9a8014610776578063d3f6a1571461079657600080fd5b806381c6f11b1161012e57806381c6f11b1461067e578063893d20e81461069e57806389fd9bc1146106bc5780638da5cb5b1461069e57806395d89b41146106f5578063a457c2d71461070a57600080fd5b8063590ffdce146105bd57806364038409146105dd5780636639dd93146105f357806370a0823114610613578063715018a61461064957806380c581d11461065e57600080fd5b80633df9a8d2116102195780634ef3cce5116101d25780634ef3cce5146104f95780634fb2e45d1461050f5780634fbee1931461052f57806350a8e01614610568578063571ac8b014610587578063590f897e146105a757600080fd5b80633df9a8d21461044c5780633f3cf56c1461046257806340b9a54b146104825780634129ecee14610498578063452ed4f1146104b85780634a74bb02146104d857600080fd5b806323b872dd1161026b57806323b872dd146103a457806326003957146103c45780632b28fc7a146103e4578063313ce567146103fa578063384f6b5114610416578063395093511461042c57600080fd5b806303fd2a45146102be578063044df726146102f157806306fdde03146103135780630758d92414610335578063095ea7b31461035557806318160ddd1461038557600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102d461dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102fd57600080fd5b5061031161030c366004612678565b6108a8565b005b34801561031f57600080fd5b506103286108fb565b6040516102e8919061277e565b34801561034157600080fd5b506013546102d4906001600160a01b031681565b34801561036157600080fd5b50610375610370366004612631565b61098d565b60405190151581526020016102e8565b34801561039157600080fd5b506011545b6040519081526020016102e8565b3480156103b057600080fd5b506103756103bf3660046125bb565b6109a3565b3480156103d057600080fd5b506103116103df3660046126ad565b610a1b565b3480156103f057600080fd5b506103966107d081565b34801561040657600080fd5b50604051600981526020016102e8565b34801561042257600080fd5b50610396600e5481565b34801561043857600080fd5b50610375610447366004612631565b610af4565b34801561045857600080fd5b50610396600d5481565b34801561046e57600080fd5b5061031161047d3660046126ad565b610b30565b34801561048e57600080fd5b50610396600b5481565b3480156104a457600080fd5b506103116104b336600461275b565b610c09565b3480156104c457600080fd5b506014546102d4906001600160a01b031681565b3480156104e457600080fd5b5060175461037590600160a81b900460ff1681565b34801561050557600080fd5b50610396600f5481565b34801561051b57600080fd5b5061031161052a366004612548565b610c5c565b34801561053b57600080fd5b5061037561054a366004612548565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561057457600080fd5b5060225461037590610100900460ff1681565b34801561059357600080fd5b506103756105a2366004612548565b610de4565b3480156105b357600080fd5b50610396600c5481565b3480156105c957600080fd5b506103116105d83660046125fc565b610df8565b3480156105e957600080fd5b50610396601b5481565b3480156105ff57600080fd5b5061031161060e3660046126ad565b610e4d565b34801561061f57600080fd5b5061039661062e366004612548565b6001600160a01b031660009081526001602052604090205490565b34801561065557600080fd5b50610311610ed1565b34801561066a57600080fd5b506103116106793660046125fc565b610f50565b34801561068a57600080fd5b50610311610699366004612694565b611029565b3480156106aa57600080fd5b506000546001600160a01b03166102d4565b3480156106c857600080fd5b506103756106d7366004612548565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561070157600080fd5b50610328611091565b34801561071657600080fd5b50610375610725366004612631565b6110a0565b34801561073657600080fd5b5061039660105481565b34801561074c57600080fd5b5061037561075b366004612631565b6110d7565b34801561076c57600080fd5b506103966109c481565b34801561078257600080fd5b5061031161079136600461265d565b6110ee565b3480156107a257600080fd5b506103116107b1366004612582565b611170565b3480156107c257600080fd5b506103966107d1366004612582565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561080857600080fd5b5061039660285481565b34801561081e57600080fd5b5061031161082d3660046126cf565b6111c8565b34801561083e57600080fd5b5061031161084d366004612548565b61126e565b34801561085e57600080fd5b5061031161086d3660046125fc565b6115f4565b34801561087e57600080fd5b50610396601f5481565b34801561089457600080fd5b506103116108a3366004612729565b611649565b6000546001600160a01b031633146108db5760405162461bcd60e51b81526004016108d2906127d3565b60405180910390fd5b6022805492151560ff199384161790556029805491151591909216179055565b60606009805461090a9061293c565b80601f01602080910402602001604051908101604052809291908181526020018280546109369061293c565b80156109835780601f1061095857610100808354040283529160200191610983565b820191906000526020600020905b81548152906001019060200180831161096657829003601f168201915b5050505050905090565b600061099a3384846116b2565b50600192915050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610a08576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610a02908490612925565b90915550505b610a138484846117ab565b949350505050565b6000546001600160a01b03163314610a455760405162461bcd60e51b81526004016108d2906127d3565b60008183601154610a569190612906565b610a6091906128e4565b90506103e8601154610a7291906128e4565b811015610acd5760405162461bcd60e51b815260206004820152602360248201527f4d7573742062652061626f766520302e3525206f6620746f74616c2073757070604482015262363c9760e91b60648201526084016108d2565b601e8190556008548290610ae2908590612906565b610aec91906128e4565b601f55505050565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161099a918590610b2b9086906128cc565b6116b2565b6000546001600160a01b03163314610b5a5760405162461bcd60e51b81526004016108d2906127d3565b60008183601154610b6b9190612906565b610b7591906128e4565b90506103e8601154610b8791906128e4565b811015610be25760405162461bcd60e51b815260206004820152602360248201527f4d7573742062652061626f766520302e3125206f6620746f74616c2073757070604482015262363c9760e91b60648201526084016108d2565b601a8190556008548290610bf7908590612906565b610c0191906128e4565b601b55505050565b6000546001600160a01b03163314610c335760405162461bcd60e51b81526004016108d2906127d3565b602754158015610c4b5750602254610100900460ff16155b610c5457600080fd5b60ff16602755565b6000546001600160a01b03163314610c865760405162461bcd60e51b81526004016108d2906127d3565b6001600160a01b038116610cac5760405162461bcd60e51b81526004016108d2906127fe565b6001600160a01b03811661dead1415610cd75760405162461bcd60e51b81526004016108d2906127fe565b60008054610cf0916001600160a01b0390911690610df8565b610cfb816001610df8565b6000546016546001600160a01b0390811691161415610d3057601680546001600160a01b0319166001600160a01b0383161790555b600080546001600160a01b03908116825260016020818152604080852054600483528186208786168752835281862055845490931684525290205415610d9957600080546001600160a01b03168082526001602052604090912054610d97919083906117ab565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610df28260001961098d565b92915050565b6000546001600160a01b03163314610e225760405162461bcd60e51b81526004016108d2906127d3565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610e775760405162461bcd60e51b81526004016108d2906127d3565b610e8181836128cc565b606414610ec65760405162461bcd60e51b81526020600482015260136024820152724d7573742061646420757020746f203130302560681b60448201526064016108d2565b600e91909155600f55565b6000546001600160a01b03163314610efb5760405162461bcd60e51b81526004016108d2906127d3565b60008054610f14916001600160a01b0390911690610df8565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314610f7a5760405162461bcd60e51b81526004016108d2906127d3565b80610fa157506001600160a01b03166000908152600260205260409020805460ff19169055565b60035415610ffd5762093a8060035442610fbb9190612925565b11610ffd5760405162461bcd60e51b815260206004820152601260248201527127b732903bb2b2b59031b7b7b63237bbb71760711b60448201526064016108d2565b6001600160a01b0382166000908152600260205260409020805460ff19166001179055426003555b5050565b6000546001600160a01b031633146110535760405162461bcd60e51b81526004016108d2906127d3565b6023541561108c5760405162461bcd60e51b815260206004820152600660248201526522b93937b91760d11b60448201526064016108d2565b602355565b6060600a805461090a9061293c565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161099a918590610b2b908690612925565b60006110e43384846117ab565b5060019392505050565b6000546001600160a01b031633146111185760405162461bcd60e51b81526004016108d2906127d3565b60178054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061116590831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461119a5760405162461bcd60e51b81526004016108d2906127d3565b601680546001600160a01b039384166001600160a01b03199182161790915560178054929093169116179055565b6000546001600160a01b031633146111f25760405162461bcd60e51b81526004016108d2906127d3565b6107d0831115801561120657506107d08211155b801561121457506109c48111155b6112605760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e00000000000000000060448201526064016108d2565b600b92909255600c55600d55565b6000546001600160a01b031633146112985760405162461bcd60e51b81526004016108d2906127d3565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156112d857600080fd5b505afa1580156112ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113109190612565565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561135857600080fd5b505afa15801561136c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113909190612565565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b1580156113d657600080fd5b505afa1580156113ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140e9190612565565b90506001600160a01b0381166115b457816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561145757600080fd5b505afa15801561146b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148f9190612565565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156114d757600080fd5b505afa1580156114eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150f9190612565565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561155757600080fd5b505af115801561156b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158f9190612565565b601480546001600160a01b0319166001600160a01b03929092169190911790556115d0565b601480546001600160a01b0319166001600160a01b0383161790555b50601380546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b0316331461161e5760405162461bcd60e51b81526004016108d2906127d3565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116735760405162461bcd60e51b81526004016108d2906127d3565b82846011546116829190612906565b61168c91906128e4565b602055601154819061169f908490612906565b6116a991906128e4565b60215550505050565b6001600160a01b0383166116fe5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064016108d2565b6001600160a01b03821661174a5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064016108d2565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166117fa5760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b60448201526064016108d2565b6001600160a01b0383166118475760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b60448201526064016108d2565b600082116118825760405162461bcd60e51b815260206004820152600860248201526726bab9ba101f181760c11b60448201526064016108d2565b61188c8484611b6d565b15611a905760295460ff1615611943576001600160a01b03841660009081526002602052604090205460ff1615611902576001600160a01b0383166000908152602a60205260409020544314156118e257600080fd5b6001600160a01b0383166000908152602a60205260409020439055611943565b6001600160a01b0384166000908152602a602052604090205443141561192757600080fd5b6001600160a01b0384166000908152602a602052604090204390555b6001600160a01b03841660009081526002602052604090205460ff168061198257506001600160a01b03831660009081526002602052604090205460ff165b156119d957601a548211156119d95760405162461bcd60e51b815260206004820152601860248201527f4578636565647320746865206d61785478416d6f756e742e000000000000000060448201526064016108d2565b6015546001600160a01b03848116911614801590611a1057506001600160a01b03831660009081526002602052604090205460ff16155b15611a9057601e5482611a38856001600160a01b031660009081526001602052604090205490565b611a4291906128cc565b1115611a905760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e00000000000060448201526064016108d2565b6001600160a01b03841660009081526005602052604090205460019060ff1680611ad257506001600160a01b03841660009081526005602052604090205460ff165b15611adb575060005b6001600160a01b03841660009081526002602052604090205460ff1615611b5857601754600160a01b900460ff16158015611b1f5750601754600160a81b900460ff165b15611b58573060009081526001602052604081205490506020548110611b56576021548110611b4d57506021545b611b5681611c2b565b505b611b6485858584611e28565b95945050505050565b600080546001600160a01b03848116911614801590611b9a57506000546001600160a01b03838116911614155b8015611bbf57506001600160a01b03821660009081526007602052604090205460ff16155b8015611be457506001600160a01b03831660009081526007602052604090205460ff16155b8015611bfb57506001600160a01b03821661dead14155b8015611c0f57506001600160a01b03821615155b8015611c2457506001600160a01b0383163014155b9392505050565b6017805460ff60a01b1916600160a01b179055601054600f54600e54611c5191906128cc565b611c5b91906128cc565b611c6457611e18565b60006002601054600f54600e54611c7b91906128cc565b611c8591906128cc565b600e54611c929085612906565b611c9c91906128e4565b611ca691906128e4565b90506000611cb48284612925565b9050611cbf816120e7565b600047905060006002601054600f54600e54611cdb91906128cc565b611ce591906128cc565b600e54611cf29085612906565b611cfc91906128e4565b611d0691906128e4565b90508315611d5a57611d188482612237565b60408051858152602081018390529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6000611d668587612925565b1115611e1357601654601054600f546001600160a01b03909216916108fc91611d8e916128cc565b600f54611d9b8587612925565b611da59190612906565b611daf91906128e4565b6040518115909202916000818181858888f19350505050158015611dd7573d6000803e3d6000fd5b506017546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611e11573d6000803e3d6000fd5b505b505050505b506017805460ff60a01b19169055565b60225460009060ff1615612014576001600160a01b03851660009081526006602052604090205460ff1680611e7557506001600160a01b03841660009081526006602052604090205460ff165b15611eb55760405162461bcd60e51b815260206004820152601060248201526f29b734b832b9103932b532b1ba32b21760811b60448201526064016108d2565b602254610100900460ff16611f4b57611ece85856122e0565b602254610100900460ff16158015611eeb5750611eeb8585611b6d565b15611f465760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b60648201526084016108d2565b612014565b6000602454118015611f7557506001600160a01b03851660009081526002602052604090205460ff165b8015611f865750611f868585611b6d565b1561201457602754602454611f9b9043612925565b1015612014576001600160a01b0384166000908152600660205260408120805460ff191660011790556028805491611fd283612977565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b6001600160a01b0385166000908152600160205260408120805485929061203c908490612925565b90915550600090508261204f578361205a565b61205a86868661241d565b6001600160a01b0386166000908152600160205260408120805492935083929091906120879084906128cc565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120d391815260200190565b60405180910390a350600195945050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061211c5761211c6129a8565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561217057600080fd5b505afa158015612184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a89190612565565b816001815181106121bb576121bb6129a8565b6001600160a01b03928316602091820292909201015260135460405163791ac94760e01b815291169063791ac9479061220190859060009086903090429060040161285b565b600060405180830381600087803b15801561221b57600080fd5b505af115801561222f573d6000803e3d6000fd5b505050505050565b60135460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b1580156122a057600080fd5b505af11580156122b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122d991906126fb565b5050505050565b602254610100900460ff16156123445760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b60648201526084016108d2565b61234e8282611b6d565b15801561236857506014546001600160a01b038281169116145b156110255760275460021461238b57612383436113886128cc565b602455612390565b436024555b6001600160a01b03821660009081526007602052604090819020805460ff191660019081179091556022805461ff001916610100179055426025556017805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161241191901515815260200190565b60405180910390a15050565b60145460009081906001600160a01b03868116911614156124415750600b54612465565b6014546001600160a01b03858116911614156124605750600c54612465565b50600d545b61246f8585611b6d565b1561249d5760235415806124935750601460085461248d91906128e4565b60235414155b1561249d57600080fd5b60006127106124ac8386612906565b6124b691906128e4565b306000908152600160205260408120805492935083929091906124da9084906128cc565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36125298185612925565b9695505050505050565b8035801515811461254357600080fd5b919050565b60006020828403121561255a57600080fd5b8135611c24816129be565b60006020828403121561257757600080fd5b8151611c24816129be565b6000806040838503121561259557600080fd5b82356125a0816129be565b915060208301356125b0816129be565b809150509250929050565b6000806000606084860312156125d057600080fd5b83356125db816129be565b925060208401356125eb816129be565b929592945050506040919091013590565b6000806040838503121561260f57600080fd5b823561261a816129be565b915061262860208401612533565b90509250929050565b6000806040838503121561264457600080fd5b823561264f816129be565b946020939093013593505050565b60006020828403121561266f57600080fd5b611c2482612533565b6000806040838503121561268b57600080fd5b61261a83612533565b6000602082840312156126a657600080fd5b5035919050565b600080604083850312156126c057600080fd5b50508035926020909101359150565b6000806000606084860312156126e457600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561271057600080fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561273f57600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561276d57600080fd5b813560ff81168114611c2457600080fd5b600060208083528351808285015260005b818110156127ab5785810183015185820160400152820161278f565b818111156127bd576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128ab5784516001600160a01b031683529383019391830191600101612886565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156128df576128df612992565b500190565b60008261290157634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561292057612920612992565b500290565b60008282101561293757612937612992565b500390565b600181811c9082168061295057607f821691505b6020821081141561297157634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561298b5761298b612992565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146129d357600080fd5b5056fea26469706673582212206e540fdd8d9429d91875b38584aa18e005b9aed84ee10babf2639f53de41634c64736f6c63430008070033

Deployed Bytecode Sourcemap

5788:21346:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7333:73;;;;;;;;;;;;7364:42;7333:73;;;;;-1:-1:-1;;;;;4926:32:1;;;4908:51;;4896:2;4881:18;7333:73:0;;;;;;;;18651:169;;;;;;;;;;-1:-1:-1;18651:169:0;;;;;:::i;:::-;;:::i;:::-;;14824:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7158:35::-;;;;;;;;;;-1:-1:-1;7158:35:0;;;;-1:-1:-1;;;;;7158:35:0;;;15437:161;;;;;;;;;;-1:-1:-1;15437:161:0;;;;;:::i;:::-;;:::i;:::-;;;6056:14:1;;6049:22;6031:41;;6019:2;6004:18;15437:161:0;5891:187:1;14559:83:0;;;;;;;;;;-1:-1:-1;14632:7:0;;14559:83;;;12926:25:1;;;12914:2;12899:18;14559:83:0;12780:177:1;16051:306:0;;;;;;;;;;-1:-1:-1;16051:306:0;;;;;:::i;:::-;;:::i;19777:325::-;;;;;;;;;;-1:-1:-1;19777:325:0;;;;;:::i;:::-;;:::i;6577:42::-;;;;;;;;;;;;6615:4;6577:42;;14648:80;;;;;;;;;;-1:-1:-1;14648:80:0;;6993:1;14413:36:1;;14401:2;14386:18;14648:80:0;14271:184:1;6732:34:0;;;;;;;;;;;;;;;;16365:215;;;;;;;;;;-1:-1:-1;16365:215:0;;;;;:::i;:::-;;:::i;6534:34::-;;;;;;;;;;;;;;;;19449:320;;;;;;;;;;-1:-1:-1;19449:320:0;;;;;:::i;:::-;;:::i;6461:29::-;;;;;;;;;;;;;;;;18478:165;;;;;;;;;;-1:-1:-1;18478:165:0;;;;;:::i;:::-;;:::i;7200:21::-;;;;;;;;;;-1:-1:-1;7200:21:0;;;;-1:-1:-1;;;;;7200:21:0;;;7643:41;;;;;;;;;;-1:-1:-1;7643:41:0;;;;-1:-1:-1;;;7643:41:0;;;;;;6773:34;;;;;;;;;;;;;;;;13242:761;;;;;;;;;;-1:-1:-1;13242:761:0;;;;;:::i;:::-;;:::i;17748:125::-;;;;;;;;;;-1:-1:-1;17748:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;17837:28:0;17813:4;17837:28;;;:19;:28;;;;;;;;;17748:125;8372:36;;;;;;;;;;-1:-1:-1;8372:36:0;;;;;;;;;;;15923:120;;;;;;;;;;-1:-1:-1;15923:120:0;;;;;:::i;:::-;;:::i;6497:30::-;;;;;;;;;;;;;;;;17881:134;;;;;;;;;;-1:-1:-1;17881:134:0;;;;;:::i;:::-;;:::i;7854:77::-;;;;;;;;;;;;;;;;19209:232;;;;;;;;;;-1:-1:-1;19209:232:0;;;;;:::i;:::-;;:::i;15137:117::-;;;;;;;;;;-1:-1:-1;15137:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;15230:16:0;15203:7;15230:16;;;:7;:16;;;;;;;15137:117;14011:195;;;;;;;;;;;;;:::i;17330:410::-;;;;;;;;;;-1:-1:-1;17330:410:0;;;;;:::i;:::-;;:::i;18163:158::-;;;;;;;;;;-1:-1:-1;18163:158:0;;;;;:::i;:::-;;:::i;14910:80::-;;;;;;;;;;-1:-1:-1;14962:7:0;13220:6;-1:-1:-1;;;;;13220:6:0;14910:80;;18023:132;;;;;;;;;;-1:-1:-1;18023:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;18116:31:0;18092:4;18116:31;;;:22;:31;;;;;;;;;18023:132;14734:84;;;;;;;;;;;;;:::i;16588:225::-;;;;;;;;;;-1:-1:-1;16588:225:0;;;;;:::i;:::-;;:::i;6814:28::-;;;;;;;;;;;;;;;;15262:167;;;;;;;;;;-1:-1:-1;15262:167:0;;;;;:::i;:::-;;:::i;6676:47::-;;;;;;;;;;;;6719:4;6676:47;;20618:171;;;;;;;;;;-1:-1:-1;20618:171:0;;;;;:::i;:::-;;:::i;20407:203::-;;;;;;;;;;-1:-1:-1;20407:203:0;;;;;:::i;:::-;;:::i;14996:133::-;;;;;;;;;;-1:-1:-1;14996:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;15098:19:0;;;15080:7;15098:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;14996:133;8623:32;;;;;;;;;;;;;;;;18828:373;;;;;;;;;;-1:-1:-1;18828:373:0;;;;;:::i;:::-;;:::i;16821:501::-;;;;;;;;;;-1:-1:-1;16821:501:0;;;;;:::i;:::-;;:::i;18329:141::-;;;;;;;;;;-1:-1:-1;18329:141:0;;;;;:::i;:::-;;:::i;8115:87::-;;;;;;;;;;;;;;;;20110:289;;;;;;;;;;-1:-1:-1;20110:289:0;;;;;:::i;:::-;;:::i;18651:169::-;9317:6;;-1:-1:-1;;;;;9317:6:0;269:10;9317:22;9309:52;;;;-1:-1:-1;;;9309:52:0;;;;;;;:::i;:::-;;;;;;;;;18746:16:::1;:28:::0;;;::::1;;-1:-1:-1::0;;18746:28:0;;::::1;;::::0;;18785:15:::1;:27:::0;;;::::1;;::::0;;;::::1;;::::0;;18651:169::o;14824:80::-;14872:13;14896:5;14889:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14824:80;:::o;15437:161::-;15512:4;15529:39;269:10;15552:7;15561:6;15529:8;:39::i;:::-;-1:-1:-1;15586:4:0;15437:161;;;;:::o;16051:306::-;-1:-1:-1;;;;;16172:19:0;;16151:4;16172:19;;;:11;:19;;;;;;;;16192:10;16172:31;;;;;;;;-1:-1:-1;;16172:52:0;16168:126;;-1:-1:-1;;;;;16241:19:0;;;;;;:11;:19;;;;;;;;16261:10;16241:31;;;;;;;:41;;16276:6;;16241:19;:41;;16276:6;;16241:41;:::i;:::-;;;;-1:-1:-1;;16168:126:0;16313:36;16323:6;16331:9;16342:6;16313:9;:36::i;:::-;16306:43;16051:306;-1:-1:-1;;;;16051:306:0:o;19777:325::-;9317:6;;-1:-1:-1;;;;;9317:6:0;269:10;9317:22;9309:52;;;;-1:-1:-1;;;9309:52:0;;;;;;;:::i;:::-;19867:13:::1;19905:7;19894;19884;;:17;;;;:::i;:::-;19883:29;;;;:::i;:::-;19867:45;;19951:4;19941:7;;:14;;;;:::i;:::-;19931:5;:25;;19923:73;;;::::0;-1:-1:-1;;;19923:73:0;;7121:2:1;19923:73:0::1;::::0;::::1;7103:21:1::0;7160:2;7140:18;;;7133:30;7199:34;7179:18;;;7172:62;-1:-1:-1;;;7250:18:1;;;7243:33;7293:19;;19923:73:0::1;6919:399:1::0;19923:73:0::1;20007:14;:22:::0;;;20059:14:::1;::::0;20087:7;;20059:24:::1;::::0;20076:7;;20059:24:::1;:::i;:::-;20058:36;;;;:::i;:::-;20040:15;:54:::0;-1:-1:-1;;;19777:325:0:o;16365:215::-;269:10;16453:4;16502:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16502:34:0;;;;;;;;;;16453:4;;16470:80;;16493:7;;16502:47;;16539:10;;16502:47;:::i;:::-;16470:8;:80::i;19449:320::-;9317:6;;-1:-1:-1;;;;;9317:6:0;269:10;9317:22;9309:52;;;;-1:-1:-1;;;9309:52:0;;;;;;;:::i;:::-;19538:13:::1;19576:7;19565;19555;;:17;;;;:::i;:::-;19554:29;;;;:::i;:::-;19538:45;;19622:4;19612:7;;:14;;;;:::i;:::-;19602:5;:25;;19594:73;;;::::0;-1:-1:-1;;;19594:73:0;;9033:2:1;19594:73:0::1;::::0;::::1;9015:21:1::0;9072:2;9052:18;;;9045:30;9111:34;9091:18;;;9084:62;-1:-1:-1;;;9162:18:1;;;9155:33;9205:19;;19594:73:0::1;8831:399:1::0;19594:73:0::1;19678:12;:20:::0;;;19726:14:::1;::::0;19754:7;;19726:24:::1;::::0;19743:7;;19726:24:::1;:::i;:::-;19725:36;;;;:::i;:::-;19709:13;:52:::0;-1:-1:-1;;;19449:320:0:o;18478:165::-;9317:6;;-1:-1:-1;;;;;9317:6:0;269:10;9317:22;9309:52;;;;-1:-1:-1;;;9309:52:0;;;;;;;:::i;:::-;18562:13:::1;::::0;:18;:39;::::1;;;-1:-1:-1::0;18585:16:0::1;::::0;::::1;::::0;::::1;;;18584:17;18562:39;18553:49;;;::::0;::::1;;18613:22;;:13;:22:::0;18478:165::o;13242:761::-;9317:6;;-1:-1:-1;;;;;9317:6:0;269:10;9317:22;9309:52;;;;-1:-1:-1;;;9309:52:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13323:22:0;::::1;13315:96;;;;-1:-1:-1::0;;;13315:96:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13430:16:0;::::1;7364:42;13430:16;;13422:90;;;;-1:-1:-1::0;;;13422:90:0::1;;;;;;;:::i;:::-;13543:6;::::0;;13523:34:::1;::::0;-1:-1:-1;;;;;13543:6:0;;::::1;::::0;13523:19:::1;:34::i;:::-;13568:35;13588:8;13598:4;13568:19;:35::i;:::-;13656:6;::::0;13628:16:::1;::::0;-1:-1:-1;;;;;13628:16:0;;::::1;13656:6:::0;::::1;13628:35;13624:90;;;13678:16;:36:::0;;-1:-1:-1;;;;;;13678:36:0::1;-1:-1:-1::0;;;;;13678:36:0;::::1;;::::0;;13624:90:::1;13777:6;::::0;;-1:-1:-1;;;;;13777:6:0;;::::1;15230:16:::0;;:7;:16;;;;;;;;;13735:11:::1;:19:::0;;;;;:29;;::::1;::::0;;;;;;;:49;13808:6;;;;::::1;15230:16:::0;;;;;;13798:21;13795:99:::1;;13846:6;::::0;;-1:-1:-1;;;;;13846:6:0::1;15230:16:::0;;;:7;:16;;;;;;;13836:46:::1;::::0;13846:6;13854:8;;13836:9:::1;:46::i;:::-;;13795:99;13914:6;:17:::0;;-1:-1:-1;;;;;;13914:17:0::1;-1:-1:-1::0;;;;;13914:17:0;::::1;::::0;;::::1;::::0;;13947:38:::1;::::0;13914:17;;;;13947:38:::1;::::0;13914:6;13947:38:::1;13242:761:::0;:::o;15923:120::-;15976:4;16000:35;16008:7;-1:-1:-1;;16000:7:0;:35::i;:::-;15993:42;15923:120;-1:-1:-1;;15923:120:0:o;17881:134::-;9317:6;;-1:-1:-1;;;;;9317:6:0;269:10;9317:22;9309:52;;;;-1:-1:-1;;;9309:52:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17969:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;17969:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17881:134::o;19209:232::-;9317:6;;-1:-1:-1;;;;;9317:6:0;269:10;9317:22;9309:52;;;;-1:-1:-1;;;9309:52:0;;;;;;;:::i;:::-;19305:21:::1;19317:9:::0;19305;:21:::1;:::i;:::-;19330:3;19305:28;19296:61;;;::::0;-1:-1:-1;;;19296:61:0;;11851:2:1;19296:61:0::1;::::0;::::1;11833:21:1::0;11890:2;11870:18;;;11863:30;-1:-1:-1;;;11909:18:1;;;11902:49;11968:18;;19296:61:0::1;11649:343:1::0;19296:61:0::1;19368:15;:27:::0;;;;19406:15:::1;:27:::0;19209:232::o;14011:195::-;9317:6;;-1:-1:-1;;;;;9317:6:0;269:10;9317:22;9309:52;;;;-1:-1:-1;;;9309:52:0;;;;;;;:::i;:::-;14098:6:::1;::::0;;14078:34:::1;::::0;-1:-1:-1;;;;;14098:6:0;;::::1;::::0;14078:19:::1;:34::i;:::-;14140:1;14123:19:::0;;-1:-1:-1;;;;;;14123:19:0::1;::::0;;14158:40:::1;::::0;14140:1;;14158:40:::1;::::0;14140:1;;14158:40:::1;14011:195::o:0;17330:410::-;9317:6;;-1:-1:-1;;;;;9317:6:0;269:10;9317:22;9309:52;;;;-1:-1:-1;;;9309:52:0;;;;;;;:::i;:::-;17411:16;17407:326:::1;;-1:-1:-1::0;;;;;;17444:13:0::1;17460:5;17444:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;17444:21:0::1;::::0;;17330:410::o;17407:326::-:1;17502:17;::::0;:22;17498:139:::1;;17591:7;17571:17;;17553:15;:35;;;;:::i;:::-;:45;17545:76;;;::::0;-1:-1:-1;;;17545:76:0;;9786:2:1;17545:76:0::1;::::0;::::1;9768:21:1::0;9825:2;9805:18;;;9798:30;-1:-1:-1;;;9844:18:1;;;9837:48;9902:18;;17545:76:0::1;9584:342:1::0;17545:76:0::1;-1:-1:-1::0;;;;;17651:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;17651:20:0::1;17667:4;17651:20;::::0;;17706:15:::1;17686:17;:35:::0;17407:326:::1;17330:410:::0;;:::o;18163:158::-;9317:6;;-1:-1:-1;;;;;9317:6:0;269:10;9317:22;9309:52;;;;-1:-1:-1;;;9309:52:0;;;;;;;:::i;:::-;18245:13:::1;::::0;:18;18236:38:::1;;;::::0;-1:-1:-1;;;18236:38:0;;11162:2:1;18236:38:0::1;::::0;::::1;11144:21:1::0;11201:1;11181:18;;;11174:29;-1:-1:-1;;;11219:18:1;;;11212:36;11265:18;;18236:38:0::1;10960:329:1::0;18236:38:0::1;18285:13;:28:::0;18163:158::o;14734:84::-;14784:13;14808:7;14801:14;;;;;:::i;16588:225::-;269:10;16681:4;16730:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16730:34:0;;;;;;;;;;16681:4;;16698:85;;16721:7;;16730:52;;16767:15;;16730:52;:::i;15262:167::-;15340:4;15357:42;269:10;15381:9;15392:6;15357:9;:42::i;:::-;-1:-1:-1;15417:4:0;;15262:167;-1:-1:-1;;;15262:167:0:o;20618:171::-;9317:6;;-1:-1:-1;;;;;9317:6:0;269:10;9317:22;9309:52;;;;-1:-1:-1;;;9309:52:0;;;;;;;:::i;:::-;20695:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;20695:32:0::1;-1:-1:-1::0;;;;20695:32:0;;::::1;;::::0;;20743:38:::1;::::0;::::1;::::0;::::1;::::0;20719:8;6056:14:1;6049:22;6031:41;;6019:2;6004:18;;5891:187;20743:38:0::1;;;;;;;;20618:171:::0;:::o;20407:203::-;9317:6;;-1:-1:-1;;;;;9317:6:0;269:10;9317:22;9309:52;;;;-1:-1:-1;;;9309:52:0;;;;;;;:::i;:::-;20517:16:::1;:43:::0;;-1:-1:-1;;;;;20517:43:0;;::::1;-1:-1:-1::0;;;;;;20517:43:0;;::::1;;::::0;;;20571:10:::1;:31:::0;;;;;::::1;::::0;::::1;;::::0;;20407:203::o;18828:373::-;9317:6;;-1:-1:-1;;;;;9317:6:0;269:10;9317:22;9309:52;;;;-1:-1:-1;;;9309:52:0;;;;;;;:::i;:::-;6615:4:::1;18938:6;:21;;:65;;;;;6665:4;18980:7;:23;;18938:65;:117;;;;;6719:4;19024:11;:31;;18938:117;18930:170;;;::::0;-1:-1:-1;;;18930:170:0;;8681:2:1;18930:170:0::1;::::0;::::1;8663:21:1::0;8720:2;8700:18;;;8693:30;8759:25;8739:18;;;8732:53;8802:18;;18930:170:0::1;8479:347:1::0;18930:170:0::1;19111:7;:16:::0;;;;19138:8:::1;:18:::0;19167:12:::1;:26:::0;18828:373::o;16821:501::-;9317:6;;-1:-1:-1;;;;;9317:6:0;269:10;9317:22;9309:52;;;;-1:-1:-1;;;9309:52:0;;;;;;;:::i;:::-;16892:29:::1;16943:9;16892:61;;16964:16;17001:10;-1:-1:-1::0;;;;;17001:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16983:47:0::1;;17039:4;17046:10;-1:-1:-1::0;;;;;17046:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16983:81;::::0;-1:-1:-1;;;;;;16983:81:0::1;::::0;;;;;;-1:-1:-1;;;;;5200:15:1;;;16983:81:0::1;::::0;::::1;5182:34:1::0;5252:15;;5232:18;;;5225:43;5117:18;;16983:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16964:100:::0;-1:-1:-1;;;;;;17079:22:0;::::1;17075:207;;17145:10;-1:-1:-1::0;;;;;17145:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17127:50:0::1;;17186:4;17193:10;-1:-1:-1::0;;;;;17193:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17127:84;::::0;-1:-1:-1;;;;;;17127:84:0::1;::::0;;;;;;-1:-1:-1;;;;;5200:15:1;;;17127:84:0::1;::::0;::::1;5182:34:1::0;5252:15;;5232:18;;;5225:43;5117:18;;17127:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17118:6;:93:::0;;-1:-1:-1;;;;;;17118:93:0::1;-1:-1:-1::0;;;;;17118:93:0;;;::::1;::::0;;;::::1;::::0;;17075:207:::1;;;17253:6;:17:::0;;-1:-1:-1;;;;;;17253:17:0::1;-1:-1:-1::0;;;;;17253:17:0;::::1;;::::0;;17075:207:::1;-1:-1:-1::0;17292:9:0::1;:22:::0;;-1:-1:-1;;;;;;17292:22:0::1;-1:-1:-1::0;;;;;17292:22:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;16821:501:0:o;18329:141::-;9317:6;;-1:-1:-1;;;;;9317:6:0;269:10;9317:22;9309:52;;;;-1:-1:-1;;;9309:52:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18421:31:0;;;::::1;;::::0;;;:22:::1;:31;::::0;;;;:41;;-1:-1:-1;;18421:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18329:141::o;20110:289::-;9317:6;;-1:-1:-1;;;;;9317:6:0;269:10;9317:22;9309:52;;;;-1:-1:-1;;;9309:52:0;;;;;;;:::i;:::-;20310:16:::1;20290;20280:7;;:26;;;;:::i;:::-;20279:47;;;;:::i;:::-;20263:13;:63:::0;20351:7:::1;::::0;20378:13;;20351:23:::1;::::0;20361:13;;20351:23:::1;:::i;:::-;20350:41;;;;:::i;:::-;20337:10;:54:::0;-1:-1:-1;;;;20110:289:0:o;15606:309::-;-1:-1:-1;;;;;15700:20:0;;15692:52;;;;-1:-1:-1;;;15692:52:0;;10469:2:1;15692:52:0;;;10451:21:1;10508:2;10488:18;;;10481:30;-1:-1:-1;;;10527:18:1;;;10520:49;10586:18;;15692:52:0;10267:343:1;15692:52:0;-1:-1:-1;;;;;15763:21:0;;15755:53;;;;-1:-1:-1;;;15755:53:0;;10469:2:1;15755:53:0;;;10451:21:1;10508:2;10488:18;;;10481:30;-1:-1:-1;;;10527:18:1;;;10520:49;10586:18;;15755:53:0;10267:343:1;15755:53:0;-1:-1:-1;;;;;15821:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;15874:33;;12926:25:1;;;15874:33:0;;12899:18:1;15874:33:0;;;;;;;15606:309;;;:::o;21128:1646::-;21207:4;-1:-1:-1;;;;;21232:18:0;;21224:51;;;;-1:-1:-1;;;21224:51:0;;9437:2:1;21224:51:0;;;9419:21:1;9476:2;9456:18;;;9449:30;-1:-1:-1;;;9495:18:1;;;9488:50;9555:18;;21224:51:0;9235:344:1;21224:51:0;-1:-1:-1;;;;;21294:16:0;;21286:49;;;;-1:-1:-1;;;21286:49:0;;9437:2:1;21286:49:0;;;9419:21:1;9476:2;9456:18;;;9449:30;-1:-1:-1;;;9495:18:1;;;9488:50;9555:18;;21286:49:0;9235:344:1;21286:49:0;21363:1;21354:6;:10;21346:31;;;;-1:-1:-1;;;21346:31:0;;10133:2:1;21346:31:0;;;10115:21:1;10172:1;10152:18;;;10145:29;-1:-1:-1;;;10190:18:1;;;10183:38;10238:18;;21346:31:0;9931:331:1;21346:31:0;21391:20;21402:4;21408:2;21391:10;:20::i;:::-;21388:707;;;21432:15;;;;21428:347;;;-1:-1:-1;;;;;21472:13:0;;;;;;:7;:13;;;;;;;;21468:292;;;-1:-1:-1;;;;;21517:13:0;;;;;;:9;:13;;;;;;21534:12;21517:29;;21509:38;;;;;;-1:-1:-1;;;;;21570:13:0;;;;;;:9;:13;;;;;21586:12;21570:28;;21468:292;;;-1:-1:-1;;;;;21655:15:0;;;;;;:9;:15;;;;;;21674:12;21655:31;;21647:40;;;;;;-1:-1:-1;;;;;21710:15:0;;;;;;:9;:15;;;;;21728:12;21710:30;;21468:292;-1:-1:-1;;;;;21792:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;21809:11:0;;;;;;:7;:11;;;;;;;;21792:28;21789:126;;;21858:12;;21848:6;:22;;21840:59;;;;-1:-1:-1;;;21840:59:0;;12199:2:1;21840:59:0;;;12181:21:1;12238:2;12218:18;;;12211:30;12277:26;12257:18;;;12250:54;12321:18;;21840:59:0;11997:348:1;21840:59:0;21938:14;;-1:-1:-1;;;;;21932:20:0;;;21938:14;;21932:20;;;;:36;;-1:-1:-1;;;;;;21957:11:0;;;;;;:7;:11;;;;;;;;21956:12;21932:36;21929:155;;;22023:14;;22013:6;21997:13;22007:2;-1:-1:-1;;;;;15230:16:0;15203:7;15230:16;;;:7;:16;;;;;;;15137:117;21997:13;:22;;;;:::i;:::-;:40;;21989:79;;;;-1:-1:-1;;;21989:79:0;;11496:2:1;21989:79:0;;;11478:21:1;11535:2;11515:18;;;11508:30;11574:28;11554:18;;;11547:56;11620:18;;21989:79:0;11294:350:1;21989:79:0;-1:-1:-1;;;;;22140:25:0;;22107:12;22140:25;;;:19;:25;;;;;;22122:4;;22140:25;;;:52;;-1:-1:-1;;;;;;22169:23:0;;;;;;:19;:23;;;;;;;;22140:52;22137:98;;;-1:-1:-1;22218:5:0;22137:98;-1:-1:-1;;;;;22251:11:0;;;;;;:7;:11;;;;;;;;22247:457;;;22284:16;;-1:-1:-1;;;22284:16:0;;;;22283:17;:59;;;;-1:-1:-1;22321:21:0;;-1:-1:-1;;;22321:21:0;;;;22283:59;22279:408;;;22426:4;22377:28;15230:16;;;:7;:16;;;;;;22377:55;;22479:13;;22455:20;:37;22451:221;;22544:10;;22520:20;:34;22517:77;;-1:-1:-1;22581:10:0;;22517:77;22616:36;22631:20;22616:14;:36::i;:::-;22358:329;22279:408;22722:44;22740:4;22746:2;22750:6;22758:7;22722:17;:44::i;:::-;22715:51;21128:1646;-1:-1:-1;;;;;21128:1646:0:o;20797:323::-;20865:4;13220:6;;-1:-1:-1;;;;;20889:15:0;;;13220:6;;20889:15;;;;:45;;-1:-1:-1;13193:7:0;13220:6;-1:-1:-1;;;;;20921:13:0;;;13220:6;;20921:13;;20889:45;:84;;;;-1:-1:-1;;;;;;20952:21:0;;;;;;:17;:21;;;;;;;;20951:22;20889:84;:125;;;;-1:-1:-1;;;;;;20991:23:0;;;;;;:17;:23;;;;;;;;20990:24;20889:125;:152;;;;-1:-1:-1;;;;;;21031:10:0;;7364:42;21031:10;;20889:152;:185;;;;-1:-1:-1;;;;;;21058:16:0;;;;20889:185;:223;;;;-1:-1:-1;;;;;;21091:21:0;;21107:4;21091:21;;20889:223;20882:230;20797:323;-1:-1:-1;;;20797:323:0:o;22782:1014::-;9191:16;:23;;-1:-1:-1;;;;9191:23:0;-1:-1:-1;;;9191:23:0;;;22907:9:::1;::::0;22889:15:::1;::::0;22871::::1;::::0;:33:::1;::::0;22889:15;22871:33:::1;:::i;:::-;:45;;;;:::i;:::-;22867:76;;22936:7;;22867:76;22953:17;23068:1;23054:9;;23036:15;;23018;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;22998:15;::::0;22975:38:::1;::::0;:20;:38:::1;:::i;:::-;22974:90;;;;:::i;:::-;22973:96;;;;:::i;:::-;22953:116:::0;-1:-1:-1;23082:20:0::1;23105:32;22953:116:::0;23105:20;:32:::1;:::i;:::-;23082:55;;23148:30;23165:12;23148:16;:30::i;:::-;23191:22;23216:21;23191:46;;23248:24;23364:1;23350:9;;23332:15;;23314;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;23294:15;::::0;23277:32:::1;::::0;:14;:32:::1;:::i;:::-;23276:84;;;;:::i;:::-;23275:90;;;;:::i;:::-;23248:117:::0;-1:-1:-1;23382:13:0;;23378:161:::1;;23412:41;23425:9;23436:16;23412:12;:41::i;:::-;23473:54;::::0;;14149:25:1;;;14205:2;14190:18;;14183:34;;;14233:18;;;14226:34;;;23473:54:0::1;::::0;14137:2:1;14122:18;23473:54:0::1;;;;;;;23378:161;23588:1;23553:32;23576:9:::0;23553:20;:32:::1;:::i;:::-;:36;23549:240;;;23606:16;::::0;23709:9:::1;::::0;23691:15:::1;::::0;-1:-1:-1;;;;;23606:16:0;;::::1;::::0;:114:::1;::::0;23691:27:::1;::::0;::::1;:::i;:::-;23671:15;::::0;23634:33:::1;23651:16:::0;23634:14;:33:::1;:::i;:::-;23633:53;;;;:::i;:::-;23632:87;;;;:::i;:::-;23606:114;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;23735:10:0::1;::::0;:42:::1;::::0;-1:-1:-1;;;;;23735:10:0;;::::1;::::0;23755:21:::1;23735:42:::0;::::1;;;::::0;:10:::1;:42:::0;:10;:42;23755:21;23735:10;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;23549:240;22856:940;;;;9225:1;-1:-1:-1::0;9237:16:0;:24;;-1:-1:-1;;;;9237:24:0;;;22782:1014::o;25192:1216::-;25313:16;;25292:4;;25313:16;;25309:858;;;-1:-1:-1;;;;;18116:31:0;;18092:4;18116:31;;;:22;:31;;;;;;;;25349:56;;;-1:-1:-1;;;;;;18116:31:0;;18092:4;18116:31;;;:22;:31;;;;;;;;25380:25;25345:123;;;25426:26;;-1:-1:-1;;;25426:26:0;;10817:2:1;25426:26:0;;;10799:21:1;10856:2;10836:18;;;10829:30;-1:-1:-1;;;10875:18:1;;;10868:46;10931:18;;25426:26:0;10615:340:1;25345:123:0;25489:16;;;;;;;25484:672;;25526:28;25545:4;25551:2;25526:18;:28::i;:::-;25578:16;;;;;;;25577:17;:41;;;;;25598:20;25609:4;25615:2;25598:10;:20::i;:::-;25573:137;;;25643:47;;-1:-1:-1;;;25643:47:0;;8275:2:1;25643:47:0;;;8257:21:1;8314:2;8294:18;;;8287:30;8353:34;8333:18;;;8326:62;-1:-1:-1;;;8404:18:1;;;8397:35;8449:19;;25643:47:0;8073:401:1;25573:137:0;25484:672;;;25769:1;25754:12;;:16;:55;;;;-1:-1:-1;;;;;;25796:13:0;;;;;;:7;:13;;;;;;;;25754:55;:101;;;;;25835:20;25846:4;25852:2;25835:10;:20::i;:::-;25750:391;;;25932:13;;25917:12;;25902:27;;:12;:27;:::i;:::-;:43;25898:224;;;-1:-1:-1;;;;;25974:26:0;;;;;;:22;:26;;;;;:33;;-1:-1:-1;;25974:33:0;26003:4;25974:33;;;26034:13;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;26082:16:0;;-1:-1:-1;;;;;4926:32:1;;4908:51;;26082:16:0;;4896:2:1;4881:18;26082:16:0;;;;;;;25898:224;-1:-1:-1;;;;;26179:13:0;;;;;;:7;:13;;;;;:23;;26196:6;;26179:13;:23;;26196:6;;26179:23;:::i;:::-;;;;-1:-1:-1;26213:22:0;;-1:-1:-1;26239:7:0;26238:48;;26280:6;26238:48;;;26250:27;26260:4;26266:2;26270:6;26250:9;:27::i;:::-;-1:-1:-1;;;;;26297:11:0;;;;;;:7;:11;;;;;:29;;26213:73;;-1:-1:-1;26213:73:0;;26297:11;;;:29;;26213:73;;26297:29;:::i;:::-;;;;;;;;26359:2;-1:-1:-1;;;;;26344:34:0;26353:4;-1:-1:-1;;;;;26344:34:0;;26363:14;26344:34;;;;12926:25:1;;12914:2;12899:18;;12780:177;26344:34:0;;;;;;;;-1:-1:-1;26396:4:0;;25192:1216;-1:-1:-1;;;;;25192:1216:0:o;23804:417::-;23895:16;;;23909:1;23895:16;;;;;;;;23871:21;;23895:16;;;;;;;;;;-1:-1:-1;23895:16:0;23871:40;;23940:4;23922;23927:1;23922:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23922:23:0;;;:7;;;;;;;;;;:23;;;;23966:9;;:16;;;-1:-1:-1;;;23966:16:0;;;;:9;;;;;:14;;:16;;;;;23922:7;;23966:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23956:4;23961:1;23956:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23956:26:0;;;:7;;;;;;;;;:26;23995:9;;:218;;-1:-1:-1;;;23995:218:0;;:9;;;:60;;:218;;24070:11;;23995:9;;24140:4;;24167;;24187:15;;23995:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23860:361;23804:417;:::o;24229:332::-;24310:9;;:243;;-1:-1:-1;;;24310:243:0;;24376:4;24310:243;;;5620:34:1;5670:18;;;5663:34;;;24310:9:0;5713:18:1;;;5706:34;;;5756:18;;;5749:34;7364:42:0;5799:19:1;;;5792:44;24527:15:0;5852:19:1;;;5845:35;-1:-1:-1;;;;;24310:9:0;;;;:25;;24343:9;;5554:19:1;;24310:243:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24229:332;;:::o;24569:615::-;24651:16;;;;;;;24650:17;24642:65;;;;-1:-1:-1;;;24642:65:0;;7871:2:1;24642:65:0;;;7853:21:1;7910:2;7890:18;;;7883:30;7949:34;7929:18;;;7922:62;-1:-1:-1;;;8000:18:1;;;7993:33;8043:19;;24642:65:0;7669:399:1;24642:65:0;24723:20;24734:4;24740:2;24723:10;:20::i;:::-;24722:21;:37;;;;-1:-1:-1;24753:6:0;;-1:-1:-1;;;;;24747:12:0;;;24753:6;;24747:12;24722:37;24718:459;;;24780:13;;24797:1;24780:18;24776:161;;24834:19;:12;24849:4;24834:19;:::i;:::-;24819:12;:34;24776:161;;;24909:12;24894;:27;24776:161;-1:-1:-1;;;;;24953:23:0;;;;;;:17;:23;;;;;;;:30;;-1:-1:-1;;24953:30:0;24979:4;24953:30;;;;;;24998:16;:23;;-1:-1:-1;;24998:23:0;24953:30;24998:23;;;25051:15;25036:12;:30;25083:21;:28;;-1:-1:-1;;;;25083:28:0;-1:-1:-1;;;25083:28:0;;;25131:34;;;;;;6056:14:1;;6049:22;6031:41;;6019:2;6004:18;;5891:187;25131:34:0;;;;;;;;24569:615;;:::o;26416:715::-;26556:6;;26495:7;;;;-1:-1:-1;;;;;26548:14:0;;;26556:6;;26548:14;26544:197;;;-1:-1:-1;26592:7:0;;26544:197;;;26627:6;;-1:-1:-1;;;;;26621:12:0;;;26627:6;;26621:12;26617:124;;;-1:-1:-1;26663:8:0;;26617:124;;;-1:-1:-1;26717:12:0;;26617:124;26757:20;26768:4;26774:2;26757:10;:20::i;:::-;26753:158;;;26797:13;;:18;;:58;;;26853:2;26836:14;;:19;;;;:::i;:::-;26819:13;;:36;;26797:58;26793:107;;;26876:8;;;26793:107;26923:17;6895:5;26943:19;26952:10;26943:6;:19;:::i;:::-;:38;;;;:::i;:::-;27010:4;26994:22;;;;:7;:22;;;;;:35;;26923:58;;-1:-1:-1;26923:58:0;;26994:22;;;:35;;26923:58;;26994:35;:::i;:::-;;;;-1:-1:-1;;27045:40:0;;12926:25:1;;;27068:4:0;;-1:-1:-1;;;;;27045:40:0;;;;;12914:2:1;12899:18;27045:40:0;;;;;;;27105:18;27114:9;27105:6;:18;:::i;:::-;27098:25;26416:715;-1:-1:-1;;;;;;26416:715:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;602:9;596:16;621:31;646:5;621:31;:::i;687:404::-;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;-1:-1:-1;1013:2:1;998:18;;985:32;1026:33;985:32;1026:33;:::i;:::-;1078:7;1068:17;;;687:404;;;;;:::o;1489:456::-;1566:6;1574;1582;1635:2;1623:9;1614:7;1610:23;1606:32;1603:52;;;1651:1;1648;1641:12;1603:52;1690:9;1677:23;1709:31;1734:5;1709:31;:::i;:::-;1759:5;-1:-1:-1;1816:2:1;1801:18;;1788:32;1829:33;1788:32;1829:33;:::i;:::-;1489:456;;1881:7;;-1:-1:-1;;;1935:2:1;1920:18;;;;1907:32;;1489:456::o;1950:315::-;2015:6;2023;2076:2;2064:9;2055:7;2051:23;2047:32;2044:52;;;2092:1;2089;2082:12;2044:52;2131:9;2118:23;2150:31;2175:5;2150:31;:::i;:::-;2200:5;-1:-1:-1;2224:35:1;2255:2;2240:18;;2224:35;:::i;:::-;2214:45;;1950:315;;;;;:::o;2270:::-;2338:6;2346;2399:2;2387:9;2378:7;2374:23;2370:32;2367:52;;;2415:1;2412;2405:12;2367:52;2454:9;2441:23;2473:31;2498:5;2473:31;:::i;:::-;2523:5;2575:2;2560:18;;;;2547:32;;-1:-1:-1;;;2270:315:1:o;2590:180::-;2646:6;2699:2;2687:9;2678:7;2674:23;2670:32;2667:52;;;2715:1;2712;2705:12;2667:52;2738:26;2754:9;2738:26;:::i;2775:248::-;2837:6;2845;2898:2;2886:9;2877:7;2873:23;2869:32;2866:52;;;2914:1;2911;2904:12;2866:52;2937:26;2953:9;2937:26;:::i;3028:180::-;3087:6;3140:2;3128:9;3119:7;3115:23;3111:32;3108:52;;;3156:1;3153;3146:12;3108:52;-1:-1:-1;3179:23:1;;3028:180;-1:-1:-1;3028:180:1:o;3213:248::-;3281:6;3289;3342:2;3330:9;3321:7;3317:23;3313:32;3310:52;;;3358:1;3355;3348:12;3310:52;-1:-1:-1;;3381:23:1;;;3451:2;3436:18;;;3423:32;;-1:-1:-1;3213:248:1:o;3466:316::-;3543:6;3551;3559;3612:2;3600:9;3591:7;3587:23;3583:32;3580:52;;;3628:1;3625;3618:12;3580:52;-1:-1:-1;;3651:23:1;;;3721:2;3706:18;;3693:32;;-1:-1:-1;3772:2:1;3757:18;;;3744:32;;3466:316;-1:-1:-1;3466:316:1:o;3787:306::-;3875:6;3883;3891;3944:2;3932:9;3923:7;3919:23;3915:32;3912:52;;;3960:1;3957;3950:12;3912:52;3989:9;3983:16;3973:26;;4039:2;4028:9;4024:18;4018:25;4008:35;;4083:2;4072:9;4068:18;4062:25;4052:35;;3787:306;;;;;:::o;4098:385::-;4184:6;4192;4200;4208;4261:3;4249:9;4240:7;4236:23;4232:33;4229:53;;;4278:1;4275;4268:12;4229:53;-1:-1:-1;;4301:23:1;;;4371:2;4356:18;;4343:32;;-1:-1:-1;4422:2:1;4407:18;;4394:32;;4473:2;4458:18;4445:32;;-1:-1:-1;4098:385:1;-1:-1:-1;4098:385:1:o;4488:269::-;4545:6;4598:2;4586:9;4577:7;4573:23;4569:32;4566:52;;;4614:1;4611;4604:12;4566:52;4653:9;4640:23;4703:4;4696:5;4692:16;4685:5;4682:27;4672:55;;4723:1;4720;4713:12;6317:597;6429:4;6458:2;6487;6476:9;6469:21;6519:6;6513:13;6562:6;6557:2;6546:9;6542:18;6535:34;6587:1;6597:140;6611:6;6608:1;6605:13;6597:140;;;6706:14;;;6702:23;;6696:30;6672:17;;;6691:2;6668:26;6661:66;6626:10;;6597:140;;;6755:6;6752:1;6749:13;6746:91;;;6825:1;6820:2;6811:6;6800:9;6796:22;6792:31;6785:42;6746:91;-1:-1:-1;6898:2:1;6877:15;-1:-1:-1;;6873:29:1;6858:45;;;;6905:2;6854:54;;6317:597;-1:-1:-1;;;6317:597:1:o;7323:341::-;7525:2;7507:21;;;7564:2;7544:18;;;7537:30;-1:-1:-1;;;7598:2:1;7583:18;;7576:47;7655:2;7640:18;;7323:341::o;12350:425::-;12552:2;12534:21;;;12591:2;12571:18;;;12564:30;12630:34;12625:2;12610:18;;12603:62;12701:31;12696:2;12681:18;;12674:59;12765:3;12750:19;;12350:425::o;12962:980::-;13224:4;13272:3;13261:9;13257:19;13303:6;13292:9;13285:25;13329:2;13367:6;13362:2;13351:9;13347:18;13340:34;13410:3;13405:2;13394:9;13390:18;13383:31;13434:6;13469;13463:13;13500:6;13492;13485:22;13538:3;13527:9;13523:19;13516:26;;13577:2;13569:6;13565:15;13551:29;;13598:1;13608:195;13622:6;13619:1;13616:13;13608:195;;;13687:13;;-1:-1:-1;;;;;13683:39:1;13671:52;;13778:15;;;;13743:12;;;;13719:1;13637:9;13608:195;;;-1:-1:-1;;;;;;;13859:32:1;;;;13854:2;13839:18;;13832:60;-1:-1:-1;;;13923:3:1;13908:19;13901:35;13820:3;12962:980;-1:-1:-1;;;12962:980:1:o;14460:128::-;14500:3;14531:1;14527:6;14524:1;14521:13;14518:39;;;14537:18;;:::i;:::-;-1:-1:-1;14573:9:1;;14460:128::o;14593:217::-;14633:1;14659;14649:132;;14703:10;14698:3;14694:20;14691:1;14684:31;14738:4;14735:1;14728:15;14766:4;14763:1;14756:15;14649:132;-1:-1:-1;14795:9:1;;14593:217::o;14815:168::-;14855:7;14921:1;14917;14913:6;14909:14;14906:1;14903:21;14898:1;14891:9;14884:17;14880:45;14877:71;;;14928:18;;:::i;:::-;-1:-1:-1;14968:9:1;;14815:168::o;14988:125::-;15028:4;15056:1;15053;15050:8;15047:34;;;15061:18;;:::i;:::-;-1:-1:-1;15098:9:1;;14988:125::o;15118:380::-;15197:1;15193:12;;;;15240;;;15261:61;;15315:4;15307:6;15303:17;15293:27;;15261:61;15368:2;15360:6;15357:14;15337:18;15334:38;15331:161;;;15414:10;15409:3;15405:20;15402:1;15395:31;15449:4;15446:1;15439:15;15477:4;15474:1;15467:15;15331:161;;15118:380;;;:::o;15503:135::-;15542:3;-1:-1:-1;;15563:17:1;;15560:43;;;15583:18;;:::i;:::-;-1:-1:-1;15630:1:1;15619:13;;15503:135::o;15643:127::-;15704:10;15699:3;15695:20;15692:1;15685:31;15735:4;15732:1;15725:15;15759:4;15756:1;15749:15;15775:127;15836:10;15831:3;15827:20;15824:1;15817:31;15867:4;15864:1;15857:15;15891:4;15888:1;15881:15;16039:131;-1:-1:-1;;;;;16114:31:1;;16104:42;;16094:70;;16160:1;16157;16150:12;16094:70;16039:131;:::o

Swarm Source

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