ETH Price: $3,388.68 (+1.70%)

Token

Bulma Inu (Bulma)
 

Overview

Max Total Supply

1,000,000,000,000 Bulma

Holders

81

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,967,233,102.288757705 Bulma

Value
$0.00
0xab777eb4cbbb7341541158b60952572539d72f8d
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:
TokenContract

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// 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/bu/lm/ai/nu/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);
}

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

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

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 DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    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 TokenContract 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 _isExcludedFromFee;

    mapping (address => bool) private _isBlacklisted;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply;

    string private _name;
    string private _symbol;
    
    uint256 public _liquidityFee = 400;
    uint256 public _marketingFee = 400;

    uint256 constant public maxLiquidityFee = 800;
    uint256 constant public maxMarketingFee = 800;
    uint256 constant public masterTaxDivisor = 10000;

    uint8 private _decimals;
    uint256 private _decimalsMul;
    uint256 private _tTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    // UNI ROUTER
    address private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;


    address public burnAddress = 0x000000000000000000000000000000000000dEaD;
    address public ZERO = address(0);
    address payable private _marketingWallet;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 private maxTxPercent = 1;
    uint256 private maxTxDivisor = 100;
    uint256 private _maxTxAmount = (_tTotal * maxTxPercent) / maxTxDivisor;
    uint256 private _previousMaxTxAmount = _maxTxAmount;
    uint256 public maxTxAmountUI = (startingSupply * maxTxPercent) / maxTxDivisor;

    uint256 private swapThreshold;
    uint256 private swapAmount;

    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 contractInitialized = false;

    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(), "Ownable: caller is not the owner");
        _;
    }
    
    //constructor (uint8 _block, uint256 _gas) payable {
    constructor () payable {
        // Set the owner.
        _owner = msg.sender;
        _marketingWallet = payable (msg.sender);

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _liquidityHolders[owner()] = true;

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

    receive() external payable {}

    function intializeContract(string memory startName, string memory startSymbol, address payable marketingWallet) external onlyOwner {
        require(!contractInitialized, "Contract already initialized.");
        uint256 _totalSupply = 1_000_000_000_000;
        _name = startName;
        _symbol = startSymbol;
        startingSupply = _totalSupply;
        if (_totalSupply < 10000000000) {
            _decimals = 18;
            _decimalsMul = _decimals;
        } else {
            _decimals = 9;
            _decimalsMul = _decimals;
        }
        _tTotal = _totalSupply * (10**_decimalsMul);
        _tOwned[owner()] = _tTotal;

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

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

        _marketingWallet = payable(marketingWallet);

        setMaxTxPercent(2,100);

        // Approve the owner for PancakeSwap, timesaver.
        approve(_routerAddress, type(uint256).max);
        _approve(_msgSender(), _routerAddress, _tTotal);
        _approve(address(this), address(_routerAddress), _tTotal);

        contractInitialized = true;
        emit Transfer(ZERO, msg.sender, _tTotal);
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // 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 != burnAddress, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFee(_owner, false);
        setExcludedFromFee(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() {
        setExcludedFromFee(_owner, false);
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external view 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 transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _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, "Cannot set a new pair this week!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
        }
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function setBlackistEnabled(address account) external onlyOwner() {
        require(_isBlacklisted[account], "Account is not a recorded sniper.");
        _isBlacklisted[account] = false;
    }

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

    function setStartingProtections(uint8 _block) external onlyOwner{
        require (snipeBlockAmt == 0 && !_hasLiqBeenAdded);
        snipeBlockAmt = _block;
    }
    
    function setTaxes(uint256 liquidityFee, uint256 marketingFee) external onlyOwner {
        require(liquidityFee <= maxLiquidityFee
                && marketingFee <= maxMarketingFee);
        require(liquidityFee + marketingFee <= 5000);
        _liquidityFee = liquidityFee;
        _marketingFee = marketingFee;
    }

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


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

    function setMarketingWallet(address payable newMarketingWallet) external onlyOwner {
        _marketingWallet = payable(newMarketingWallet);
    }

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

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

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != owner()
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != burnAddress
            && to != address(0)
            && from != address(this);
    }
    
    function _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(_hasLimits(from, to)) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

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

        if (lpPairs[to]) {
            if (!inSwapAndLiquify
                && swapAndLiquifyEnabled
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    swapTokensForEth(contractTokenBalance);
                }
            }      
        } 
        
        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) {
                        _isBlacklisted[to] = true;
                        snipersCaught ++;
                        emit SniperCaught(to);
                    }
                }
            }
        }

        _tOwned[from] -= amount;

        uint256 amountReceived = (takeFee) ? takeTaxes(from, to, amount) : amount;

        _tOwned[to] += amountReceived;
        
        if (_hasLimits(from, to)){
            if (_liqAddStatus == 0 || _liqAddStatus != startingSupply / 5) {
                revert();
            }
        }

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

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

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

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

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

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

    function takeTaxes(address from, address to, uint256 amount) internal returns (uint256) {
        uint256 currentFee = _liquidityFee + _marketingFee;

        if (_hasLimits(from, to)){
            if (_initialLiquidityAmount == 0 || _initialLiquidityAmount != _decimalsMul * 5) {
                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":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"string","name":"startName","type":"string"},{"internalType":"string","name":"startSymbol","type":"string"},{"internalType":"address payable","name":"marketingWallet","type":"address"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rInitializer","type":"uint256"},{"internalType":"uint256","name":"tInitalizer","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":"masterTaxDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMarketingFee","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":"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"}],"name":"setBlackistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFee","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":"address payable","name":"newMarketingWallet","type":"address"}],"name":"setMarketingWallet","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":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"antiSnipe","type":"bool"}],"name":"setProtectionSettings","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":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setTaxes","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"}]

60806040526000600355610190600b819055600c55601280546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d1790915560138054821661dead1790556014805490911690556015805460ff60a81b191690556001601681905560646017819055600f5490916200007d91620004d2565b62000089919062000500565b601855601854601955601754601654600854620000a79190620004d2565b620000b3919062000500565b601a55601d8054600161ffff1990911681179091556000601e819055601f81905560208181556021829055602282905560238290556024805460ff199081169091558254336001600160a01b03199182168117855560158054909216811790915583526005825260408084208054831686179055308452808420805483168617905583546001600160a01b03168452600783528320805482168517905560069091527f4cb4f7504b8a6b4952597cecbbd5e2f3bd3b97720d4e1cfe243f65d137285dbb80548216841790557f876592c4475eca1b0d8eea3a3d15c308554da9973eff84f3627d331914ec9bae80548216841790557ff627483590045b01e5ec0b1a0e946949bf001311587471447afe11bd8ab0466880548216841790557f7b0d0d8194a608fcbcbdc0d4d976ae8f7e05518c8ce66fffcfa71d51c06f155880548216841790557f1b4ccb03f19e0a4fffa436c4fc60c7cb96d398283b0f6eb739806b47bd079f4c80548216841790557f61bc32a9fbe0d491ddfbfeea3ee6f3825dc02bb7c00e58c417898377fd6d806d80548216841790557f8358eb05a8d1376638eaf243a334abb4fc74b12b73b4a0eab411dfb92d5750cd80548216841790557f43315a920928a28d19ef52187e55b70fff5938914e823c406b86d934b884174e80548216841790557f6ecabf9902eb0d0a47fa86d71d596d44aae8b1122348e95b4f9b928d3da608b680548216841790557f6e8d2409ffd3ba40a424015e6eb94a4ba6ab703cb09bd8734b9e114b1730051880548216841790557fdccb5c819d9b253665d48a11ff183ee8b05ffd0fb20acbdf203b35831d23df9580548216841790557f2458932409b0db2908861718c0a17d1d1f9c88d5b1e7dea02711a25544f23f7e80548216841790557fcd577e87786c2eb6bf9c70815b7e05a973824ebfea045998feddb1c1fb88cdc680548216841790557fc36aab591618a511ea760622806c50775417280e19c37ac73178eb3fa663df7a80548216841790557f9e87942f9730e57a5ace6e787111079ed00f802c57f0c47f9da684219838563380548216841790557f9eb0d33b7d00b0f351add6645c6556b33694b9253a4486023c215a59f139265e80548216841790557f1aa65701ad71d25098a8c9454bd022b4f36b910c18b5ef5841916185e9d1356c80548216841790557f8c72d713c0053fea5ac6eecf2172c5c601c5572bd8dc326d0df61a3c71937e9180548216841790557fc790a13b56b4e2c534e1999ccc18879c09b15c5e7bbe93aac28ba4c9e29bc92c80548216841790557f7d4786da90a3c3c7a49a292b956bee46188b818ae39108880425b81b6a9f2f82805482168417905573725ad056625326b490b128e02759007ba5e4ebf19091527f40331ccb602cdb0a90ed5ebec6e837211d49b7d36d69c4fa91482492175113748054909116909117905562000523565b6000816000190483118215151615620004fb57634e487b7160e01b600052601160045260246000fd5b500290565b6000826200051e57634e487b7160e01b600052601260045260246000fd5b500490565b612a8b80620005336000396000f3fe6080604052600436106102605760003560e01c80635d098b381161014457806395d89b41116100b6578063c647b20e1161007a578063c647b20e14610704578063dd62ed3e14610724578063e49a31521461076a578063e79d41601461078a578063eafb5a3c146107a0578063fb78680d146107c057600080fd5b806395d89b411461066f578063a0263c8914610684578063a457c2d7146106a4578063a9059cbb146106c4578063c49b9a80146106e457600080fd5b806370d5ae051161010857806370d5ae05146105c3578063715018a6146105e357806380c581d1146105f8578063893d20e81461061857806389fd9bc1146106365780638da5cb5b1461061857600080fd5b80635d098b381461052157806364038409146105415780636612e66f146105575780636bc87c3a1461057757806370a082311461058d57600080fd5b80633865cf3f116101dd5780634a74bb02116101a15780634a74bb02146104485780634cdaaa01146104695780634fb2e45d1461048957806350a8e016146104a95780635342acb4146104c857806358fa63ca1461050157600080fd5b80633865cf3f146103a657806339509351146103c85780633f3cf56c146103e85780634129ecee14610408578063452ed4f11461042857600080fd5b806318160ddd1161022457806318160ddd146103235780631d6167ac1461033857806322976e0d1461034e57806323b872dd14610364578063313ce5671461038457600080fd5b806306fdde031461026c5780630758d9241461029757806309094d66146102cf578063095ea7b3146102f357806312907bea146102cf57600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102816107e0565b60405161028e919061242c565b60405180910390f35b3480156102a357600080fd5b506010546102b7906001600160a01b031681565b6040516001600160a01b03909116815260200161028e565b3480156102db57600080fd5b506102e561032081565b60405190815260200161028e565b3480156102ff57600080fd5b5061031361030e366004612499565b610872565b604051901515815260200161028e565b34801561032f57600080fd5b50600f546102e5565b34801561034457600080fd5b506102e561271081565b34801561035a57600080fd5b506102e5600c5481565b34801561037057600080fd5b5061031361037f3660046124c5565b610889565b34801561039057600080fd5b50600d5460405160ff909116815260200161028e565b3480156103b257600080fd5b506103c66103c1366004612506565b6108dc565b005b3480156103d457600080fd5b506103136103e3366004612499565b61095f565b3480156103f457600080fd5b506103c6610403366004612506565b610996565b34801561041457600080fd5b506103c6610423366004612528565b610a89565b34801561043457600080fd5b506011546102b7906001600160a01b031681565b34801561045457600080fd5b5060155461031390600160a81b900460ff1681565b34801561047557600080fd5b506103c66104843660046125ee565b610adc565b34801561049557600080fd5b506103c66104a4366004612666565b610f17565b3480156104b557600080fd5b50601d5461031390610100900460ff1681565b3480156104d457600080fd5b506103136104e3366004612666565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561050d57600080fd5b506014546102b7906001600160a01b031681565b34801561052d57600080fd5b506103c661053c366004612666565b6110a2565b34801561054d57600080fd5b506102e5601a5481565b34801561056357600080fd5b506103c6610572366004612698565b6110ee565b34801561058357600080fd5b506102e5600b5481565b34801561059957600080fd5b506102e56105a8366004612666565b6001600160a01b031660009081526001602052604090205490565b3480156105cf57600080fd5b506013546102b7906001600160a01b031681565b3480156105ef57600080fd5b506103c6611143565b34801561060457600080fd5b506103c6610613366004612698565b6111c2565b34801561062457600080fd5b506000546001600160a01b03166102b7565b34801561064257600080fd5b50610313610651366004612666565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561067b57600080fd5b506102816112a6565b34801561069057600080fd5b506103c661069f3660046126cd565b6112b5565b3480156106b057600080fd5b506103136106bf366004612499565b6112f2565b3480156106d057600080fd5b506103136106df366004612499565b611329565b3480156106f057600080fd5b506103c66106ff3660046126cd565b611336565b34801561071057600080fd5b506103c661071f366004612506565b6113b8565b34801561073057600080fd5b506102e561073f3660046126e8565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561077657600080fd5b506103c6610785366004612666565b611422565b34801561079657600080fd5b506102e560235481565b3480156107ac57600080fd5b506103c66107bb366004612666565b6114df565b3480156107cc57600080fd5b506103c66107db366004612721565b611865565b6060600980546107ef90612753565b80601f016020809104026020016040519081016040528092919081815260200182805461081b90612753565b80156108685780601f1061083d57610100808354040283529160200191610868565b820191906000526020600020905b81548152906001019060200180831161084b57829003601f168201915b5050505050905090565b600061087f3384846118ce565b5060015b92915050565b60006108968484846119f2565b506001600160a01b0384166000908152600460209081526040808320338085529252909120546108d29186916108cd9086906127a4565b6118ce565b5060019392505050565b6000546001600160a01b0316331461090f5760405162461bcd60e51b8152600401610906906127bb565b60405180910390fd5b601e5415801561091f5750602154155b6109545760405162461bcd60e51b815260206004820152600660248201526522b93937b91760d11b6044820152606401610906565b601e91909155602155565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161087f9185906108cd9086906127f0565b6000546001600160a01b031633146109c05760405162461bcd60e51b8152600401610906906127bb565b60008183600f546109d19190612808565b6109db9190612827565b90506103e8600f546109ed9190612827565b811015610a625760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610906565b60188190556008548290610a77908590612808565b610a819190612827565b601a55505050565b6000546001600160a01b03163314610ab35760405162461bcd60e51b8152600401610906906127bb565b602254158015610acb5750601d54610100900460ff16155b610ad457600080fd5b60ff16602255565b6000546001600160a01b03163314610b065760405162461bcd60e51b8152600401610906906127bb565b60245460ff1615610b595760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261637420616c726561647920696e697469616c697a65642e0000006044820152606401610906565b825164e8d4a5100090610b73906009906020870190612393565b508251610b8790600a906020860190612393565b5060088190556402540be400811015610bb257600d805460ff19166012908117909155600e55610bc6565b600d805460ff19166009908117909155600e555b600e54610bd490600a61292d565b610bde9082612808565b600f81905560016000610bf96000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055600f5461271090610c25906005612808565b610c2f9190612827565b601b55600f546103e890610c44906005612808565b610c4e9190612827565b601c55601254601080546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b158015610ca857600080fd5b505afa158015610cbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce09190612939565b6001600160a01b031663c9c65396601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d3c57600080fd5b505afa158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d749190612939565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b158015610dbb57600080fd5b505af1158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df39190612939565b601180546001600160a01b039283166001600160a01b031991821681179092556000918252600260208181526040808520805460ff1916600117905530855260048252808520601054871686529091529092206000199055601580549386169390911692909217909155610e68906064610996565b601254610e80906001600160a01b0316600019610872565b50610e9c33601254600f546001600160a01b03909116906118ce565b601254600f54610eb99130916001600160a01b03909116906118ce565b6024805460ff19166001179055601454600f5460405133926001600160a01b0316917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91610f0991815260200190565b60405180910390a350505050565b6000546001600160a01b03163314610f415760405162461bcd60e51b8152600401610906906127bb565b6001600160a01b038116610f675760405162461bcd60e51b815260040161090690612956565b6013546001600160a01b0382811691161415610f955760405162461bcd60e51b815260040161090690612956565b60008054610fae916001600160a01b03909116906110ee565b610fb98160016110ee565b6000546015546001600160a01b0390811691161415610fee57601580546001600160a01b0319166001600160a01b0383161790555b600080546001600160a01b0390811682526001602081815260408085205460048352818620878616875283528186205584549093168452529020541561105757600080546001600160a01b03168082526001602052604090912054611055919083906119f2565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146110cc5760405162461bcd60e51b8152600401610906906127bb565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111185760405162461bcd60e51b8152600401610906906127bb565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461116d5760405162461bcd60e51b8152600401610906906127bb565b60008054611186916001600160a01b03909116906110ee565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146111ec5760405162461bcd60e51b8152600401610906906127bb565b8061121357506001600160a01b03166000908152600260205260409020805460ff19169055565b6003541561127a5762093a806003544261122d91906127a4565b1161127a5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610906565b6001600160a01b0382166000908152600260205260409020805460ff19166001179055426003555b5050565b6060600a80546107ef90612753565b6000546001600160a01b031633146112df5760405162461bcd60e51b8152600401610906906127bb565b601d805460ff1916911515919091179055565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161087f9185906108cd9086906127a4565b60006108d23384846119f2565b6000546001600160a01b031633146113605760405162461bcd60e51b8152600401610906906127bb565b60158054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906113ad90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146113e25760405162461bcd60e51b8152600401610906906127bb565b61032082111580156113f657506103208111155b6113ff57600080fd5b61138861140c82846127f0565b111561141757600080fd5b600b91909155600c55565b6000546001600160a01b0316331461144c5760405162461bcd60e51b8152600401610906906127bb565b6001600160a01b03811660009081526006602052604090205460ff166114be5760405162461bcd60e51b815260206004820152602160248201527f4163636f756e74206973206e6f742061207265636f7264656420736e697065726044820152601760f91b6064820152608401610906565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146115095760405162461bcd60e51b8152600401610906906127bb565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561154957600080fd5b505afa15801561155d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115819190612939565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156115c957600080fd5b505afa1580156115dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116019190612939565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561164757600080fd5b505afa15801561165b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167f9190612939565b90506001600160a01b03811661182557816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156116c857600080fd5b505afa1580156116dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117009190612939565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561174857600080fd5b505afa15801561175c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117809190612939565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156117c857600080fd5b505af11580156117dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118009190612939565b601180546001600160a01b0319166001600160a01b0392909216919091179055611841565b601180546001600160a01b0319166001600160a01b0383161790555b50601080546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b0316331461188f5760405162461bcd60e51b8152600401610906906127bb565b8284600f5461189e9190612808565b6118a89190612827565b601b55600f5481906118bb908490612808565b6118c59190612827565b601c5550505050565b6001600160a01b0383166119305760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610906565b6001600160a01b0382166119915760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610906565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611a585760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610906565b6001600160a01b038316611aba5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610906565b60008211611b1c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610906565b611b268484611f47565b15611b8e57601854821115611b8e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610906565b6001600160a01b03841660009081526005602052604090205460019060ff1680611bd057506001600160a01b03841660009081526005602052604090205460ff165b15611bd9575060005b6001600160a01b03841660009081526002602052604090205460ff1615611c5457601554600160a01b900460ff16158015611c1d5750601554600160a81b900460ff165b15611c545730600090815260016020526040902054601b548110611c5257601c548110611c495750601c545b611c5281612008565b505b601d5460ff1615611e3d576001600160a01b03851660009081526006602052604090205460ff1680611c9e57506001600160a01b03841660009081526006602052604090205460ff165b15611cde5760405162461bcd60e51b815260206004820152601060248201526f29b734b832b9103932b532b1ba32b21760811b6044820152606401610906565b601d54610100900460ff16611d7457611cf7858561217e565b601d54610100900460ff16158015611d145750611d148585611f47565b15611d6f5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610906565b611e3d565b6000601f54118015611d9e57506001600160a01b03851660009081526002602052604090205460ff165b8015611daf5750611daf8585611f47565b15611e3d57602254601f54611dc490436127a4565b1015611e3d576001600160a01b0384166000908152600660205260408120805460ff191660011790556023805491611dfb836129b3565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b6001600160a01b03851660009081526001602052604081208054859290611e659084906127a4565b909155506000905081611e785783611e83565b611e838686866122b1565b6001600160a01b038616600090815260016020526040812080549293508392909190611eb09084906127f0565b90915550611ec090508686611f47565b15611eee57601e541580611ee457506005600854611ede9190612827565b601e5414155b15611eee57600080fd5b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f3391815260200190565b60405180910390a350600195945050505050565b600080546001600160a01b03848116911614801590611f7457506000546001600160a01b03838116911614155b8015611f9957506001600160a01b03821660009081526007602052604090205460ff16155b8015611fbe57506001600160a01b03831660009081526007602052604090205460ff16155b8015611fd857506013546001600160a01b03838116911614155b8015611fec57506001600160a01b03821615155b801561200157506001600160a01b0383163014155b9392505050565b6015805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110612050576120506129ce565b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156120a457600080fd5b505afa1580156120b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120dc9190612939565b816001815181106120ef576120ef6129ce565b6001600160a01b03928316602091820292909201015260105460155460405163791ac94760e01b81529183169263791ac9479261213b92879260009288929091169042906004016129e4565b600060405180830381600087803b15801561215557600080fd5b505af1158015612169573d6000803e3d6000fd5b50506015805460ff60a01b1916905550505050565b601d54610100900460ff16156121e25760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610906565b6121ec8282611f47565b15801561220657506011546001600160a01b038281169116145b156112a25760225460011461222957612221436101f46127f0565b601f5561222e565b43601f555b6001600160a01b038216600090815260076020908152604091829020805460ff19166001908117909155601d805461ff0019166101001790554282556015805460ff60a81b1916600160a81b17905591519182527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159910160405180910390a15050565b600080600c54600b546122c491906127f0565b90506122d08585611f47565b156122fd5760215415806122f35750600e546122ed906005612808565b60215414155b156122fd57600080fd5b600061271061230c8386612808565b6123169190612827565b3060009081526001602052604081208054929350839290919061233a9084906127f0565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361238981856127a4565b9695505050505050565b82805461239f90612753565b90600052602060002090601f0160209004810192826123c15760008555612407565b82601f106123da57805160ff1916838001178555612407565b82800160010185558215612407579182015b828111156124075782518255916020019190600101906123ec565b50612413929150612417565b5090565b5b808211156124135760008155600101612418565b600060208083528351808285015260005b818110156124595785810183015185820160400152820161243d565b8181111561246b576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461249657600080fd5b50565b600080604083850312156124ac57600080fd5b82356124b781612481565b946020939093013593505050565b6000806000606084860312156124da57600080fd5b83356124e581612481565b925060208401356124f581612481565b929592945050506040919091013590565b6000806040838503121561251957600080fd5b50508035926020909101359150565b60006020828403121561253a57600080fd5b813560ff8116811461200157600080fd5b634e487b7160e01b600052604160045260246000fd5b600082601f83011261257257600080fd5b813567ffffffffffffffff8082111561258d5761258d61254b565b604051601f8301601f19908116603f011681019082821181831017156125b5576125b561254b565b816040528381528660208588010111156125ce57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561260357600080fd5b833567ffffffffffffffff8082111561261b57600080fd5b61262787838801612561565b9450602086013591508082111561263d57600080fd5b5061264a86828701612561565b925050604084013561265b81612481565b809150509250925092565b60006020828403121561267857600080fd5b813561200181612481565b8035801515811461269357600080fd5b919050565b600080604083850312156126ab57600080fd5b82356126b681612481565b91506126c460208401612683565b90509250929050565b6000602082840312156126df57600080fd5b61200182612683565b600080604083850312156126fb57600080fd5b823561270681612481565b9150602083013561271681612481565b809150509250929050565b6000806000806080858703121561273757600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061276757607f821691505b6020821081141561278857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156127b6576127b661278e565b500390565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156128035761280361278e565b500190565b60008160001904831182151516156128225761282261278e565b500290565b60008261284457634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561288457816000190482111561286a5761286a61278e565b8085161561287757918102915b93841c939080029061284e565b509250929050565b60008261289b57506001610883565b816128a857506000610883565b81600181146128be57600281146128c8576128e4565b6001915050610883565b60ff8411156128d9576128d961278e565b50506001821b610883565b5060208310610133831016604e8410600b8410161715612907575081810a610883565b6129118383612849565b80600019048211156129255761292561278e565b029392505050565b6000612001838361288c565b60006020828403121561294b57600080fd5b815161200181612481565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b60006000198214156129c7576129c761278e565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a345784516001600160a01b031683529383019391830191600101612a0f565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220ef1f1e27860cad46062de6d2fd1a323d4747e905d6676216a2953bbcc0c1534b64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102605760003560e01c80635d098b381161014457806395d89b41116100b6578063c647b20e1161007a578063c647b20e14610704578063dd62ed3e14610724578063e49a31521461076a578063e79d41601461078a578063eafb5a3c146107a0578063fb78680d146107c057600080fd5b806395d89b411461066f578063a0263c8914610684578063a457c2d7146106a4578063a9059cbb146106c4578063c49b9a80146106e457600080fd5b806370d5ae051161010857806370d5ae05146105c3578063715018a6146105e357806380c581d1146105f8578063893d20e81461061857806389fd9bc1146106365780638da5cb5b1461061857600080fd5b80635d098b381461052157806364038409146105415780636612e66f146105575780636bc87c3a1461057757806370a082311461058d57600080fd5b80633865cf3f116101dd5780634a74bb02116101a15780634a74bb02146104485780634cdaaa01146104695780634fb2e45d1461048957806350a8e016146104a95780635342acb4146104c857806358fa63ca1461050157600080fd5b80633865cf3f146103a657806339509351146103c85780633f3cf56c146103e85780634129ecee14610408578063452ed4f11461042857600080fd5b806318160ddd1161022457806318160ddd146103235780631d6167ac1461033857806322976e0d1461034e57806323b872dd14610364578063313ce5671461038457600080fd5b806306fdde031461026c5780630758d9241461029757806309094d66146102cf578063095ea7b3146102f357806312907bea146102cf57600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102816107e0565b60405161028e919061242c565b60405180910390f35b3480156102a357600080fd5b506010546102b7906001600160a01b031681565b6040516001600160a01b03909116815260200161028e565b3480156102db57600080fd5b506102e561032081565b60405190815260200161028e565b3480156102ff57600080fd5b5061031361030e366004612499565b610872565b604051901515815260200161028e565b34801561032f57600080fd5b50600f546102e5565b34801561034457600080fd5b506102e561271081565b34801561035a57600080fd5b506102e5600c5481565b34801561037057600080fd5b5061031361037f3660046124c5565b610889565b34801561039057600080fd5b50600d5460405160ff909116815260200161028e565b3480156103b257600080fd5b506103c66103c1366004612506565b6108dc565b005b3480156103d457600080fd5b506103136103e3366004612499565b61095f565b3480156103f457600080fd5b506103c6610403366004612506565b610996565b34801561041457600080fd5b506103c6610423366004612528565b610a89565b34801561043457600080fd5b506011546102b7906001600160a01b031681565b34801561045457600080fd5b5060155461031390600160a81b900460ff1681565b34801561047557600080fd5b506103c66104843660046125ee565b610adc565b34801561049557600080fd5b506103c66104a4366004612666565b610f17565b3480156104b557600080fd5b50601d5461031390610100900460ff1681565b3480156104d457600080fd5b506103136104e3366004612666565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561050d57600080fd5b506014546102b7906001600160a01b031681565b34801561052d57600080fd5b506103c661053c366004612666565b6110a2565b34801561054d57600080fd5b506102e5601a5481565b34801561056357600080fd5b506103c6610572366004612698565b6110ee565b34801561058357600080fd5b506102e5600b5481565b34801561059957600080fd5b506102e56105a8366004612666565b6001600160a01b031660009081526001602052604090205490565b3480156105cf57600080fd5b506013546102b7906001600160a01b031681565b3480156105ef57600080fd5b506103c6611143565b34801561060457600080fd5b506103c6610613366004612698565b6111c2565b34801561062457600080fd5b506000546001600160a01b03166102b7565b34801561064257600080fd5b50610313610651366004612666565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561067b57600080fd5b506102816112a6565b34801561069057600080fd5b506103c661069f3660046126cd565b6112b5565b3480156106b057600080fd5b506103136106bf366004612499565b6112f2565b3480156106d057600080fd5b506103136106df366004612499565b611329565b3480156106f057600080fd5b506103c66106ff3660046126cd565b611336565b34801561071057600080fd5b506103c661071f366004612506565b6113b8565b34801561073057600080fd5b506102e561073f3660046126e8565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561077657600080fd5b506103c6610785366004612666565b611422565b34801561079657600080fd5b506102e560235481565b3480156107ac57600080fd5b506103c66107bb366004612666565b6114df565b3480156107cc57600080fd5b506103c66107db366004612721565b611865565b6060600980546107ef90612753565b80601f016020809104026020016040519081016040528092919081815260200182805461081b90612753565b80156108685780601f1061083d57610100808354040283529160200191610868565b820191906000526020600020905b81548152906001019060200180831161084b57829003601f168201915b5050505050905090565b600061087f3384846118ce565b5060015b92915050565b60006108968484846119f2565b506001600160a01b0384166000908152600460209081526040808320338085529252909120546108d29186916108cd9086906127a4565b6118ce565b5060019392505050565b6000546001600160a01b0316331461090f5760405162461bcd60e51b8152600401610906906127bb565b60405180910390fd5b601e5415801561091f5750602154155b6109545760405162461bcd60e51b815260206004820152600660248201526522b93937b91760d11b6044820152606401610906565b601e91909155602155565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161087f9185906108cd9086906127f0565b6000546001600160a01b031633146109c05760405162461bcd60e51b8152600401610906906127bb565b60008183600f546109d19190612808565b6109db9190612827565b90506103e8600f546109ed9190612827565b811015610a625760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610906565b60188190556008548290610a77908590612808565b610a819190612827565b601a55505050565b6000546001600160a01b03163314610ab35760405162461bcd60e51b8152600401610906906127bb565b602254158015610acb5750601d54610100900460ff16155b610ad457600080fd5b60ff16602255565b6000546001600160a01b03163314610b065760405162461bcd60e51b8152600401610906906127bb565b60245460ff1615610b595760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261637420616c726561647920696e697469616c697a65642e0000006044820152606401610906565b825164e8d4a5100090610b73906009906020870190612393565b508251610b8790600a906020860190612393565b5060088190556402540be400811015610bb257600d805460ff19166012908117909155600e55610bc6565b600d805460ff19166009908117909155600e555b600e54610bd490600a61292d565b610bde9082612808565b600f81905560016000610bf96000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055600f5461271090610c25906005612808565b610c2f9190612827565b601b55600f546103e890610c44906005612808565b610c4e9190612827565b601c55601254601080546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b158015610ca857600080fd5b505afa158015610cbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce09190612939565b6001600160a01b031663c9c65396601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d3c57600080fd5b505afa158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d749190612939565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b158015610dbb57600080fd5b505af1158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df39190612939565b601180546001600160a01b039283166001600160a01b031991821681179092556000918252600260208181526040808520805460ff1916600117905530855260048252808520601054871686529091529092206000199055601580549386169390911692909217909155610e68906064610996565b601254610e80906001600160a01b0316600019610872565b50610e9c33601254600f546001600160a01b03909116906118ce565b601254600f54610eb99130916001600160a01b03909116906118ce565b6024805460ff19166001179055601454600f5460405133926001600160a01b0316917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91610f0991815260200190565b60405180910390a350505050565b6000546001600160a01b03163314610f415760405162461bcd60e51b8152600401610906906127bb565b6001600160a01b038116610f675760405162461bcd60e51b815260040161090690612956565b6013546001600160a01b0382811691161415610f955760405162461bcd60e51b815260040161090690612956565b60008054610fae916001600160a01b03909116906110ee565b610fb98160016110ee565b6000546015546001600160a01b0390811691161415610fee57601580546001600160a01b0319166001600160a01b0383161790555b600080546001600160a01b0390811682526001602081815260408085205460048352818620878616875283528186205584549093168452529020541561105757600080546001600160a01b03168082526001602052604090912054611055919083906119f2565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146110cc5760405162461bcd60e51b8152600401610906906127bb565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111185760405162461bcd60e51b8152600401610906906127bb565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461116d5760405162461bcd60e51b8152600401610906906127bb565b60008054611186916001600160a01b03909116906110ee565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146111ec5760405162461bcd60e51b8152600401610906906127bb565b8061121357506001600160a01b03166000908152600260205260409020805460ff19169055565b6003541561127a5762093a806003544261122d91906127a4565b1161127a5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610906565b6001600160a01b0382166000908152600260205260409020805460ff19166001179055426003555b5050565b6060600a80546107ef90612753565b6000546001600160a01b031633146112df5760405162461bcd60e51b8152600401610906906127bb565b601d805460ff1916911515919091179055565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161087f9185906108cd9086906127a4565b60006108d23384846119f2565b6000546001600160a01b031633146113605760405162461bcd60e51b8152600401610906906127bb565b60158054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906113ad90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146113e25760405162461bcd60e51b8152600401610906906127bb565b61032082111580156113f657506103208111155b6113ff57600080fd5b61138861140c82846127f0565b111561141757600080fd5b600b91909155600c55565b6000546001600160a01b0316331461144c5760405162461bcd60e51b8152600401610906906127bb565b6001600160a01b03811660009081526006602052604090205460ff166114be5760405162461bcd60e51b815260206004820152602160248201527f4163636f756e74206973206e6f742061207265636f7264656420736e697065726044820152601760f91b6064820152608401610906565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146115095760405162461bcd60e51b8152600401610906906127bb565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561154957600080fd5b505afa15801561155d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115819190612939565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156115c957600080fd5b505afa1580156115dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116019190612939565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561164757600080fd5b505afa15801561165b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167f9190612939565b90506001600160a01b03811661182557816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156116c857600080fd5b505afa1580156116dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117009190612939565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561174857600080fd5b505afa15801561175c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117809190612939565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156117c857600080fd5b505af11580156117dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118009190612939565b601180546001600160a01b0319166001600160a01b0392909216919091179055611841565b601180546001600160a01b0319166001600160a01b0383161790555b50601080546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b0316331461188f5760405162461bcd60e51b8152600401610906906127bb565b8284600f5461189e9190612808565b6118a89190612827565b601b55600f5481906118bb908490612808565b6118c59190612827565b601c5550505050565b6001600160a01b0383166119305760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610906565b6001600160a01b0382166119915760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610906565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611a585760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610906565b6001600160a01b038316611aba5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610906565b60008211611b1c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610906565b611b268484611f47565b15611b8e57601854821115611b8e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610906565b6001600160a01b03841660009081526005602052604090205460019060ff1680611bd057506001600160a01b03841660009081526005602052604090205460ff165b15611bd9575060005b6001600160a01b03841660009081526002602052604090205460ff1615611c5457601554600160a01b900460ff16158015611c1d5750601554600160a81b900460ff165b15611c545730600090815260016020526040902054601b548110611c5257601c548110611c495750601c545b611c5281612008565b505b601d5460ff1615611e3d576001600160a01b03851660009081526006602052604090205460ff1680611c9e57506001600160a01b03841660009081526006602052604090205460ff165b15611cde5760405162461bcd60e51b815260206004820152601060248201526f29b734b832b9103932b532b1ba32b21760811b6044820152606401610906565b601d54610100900460ff16611d7457611cf7858561217e565b601d54610100900460ff16158015611d145750611d148585611f47565b15611d6f5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610906565b611e3d565b6000601f54118015611d9e57506001600160a01b03851660009081526002602052604090205460ff165b8015611daf5750611daf8585611f47565b15611e3d57602254601f54611dc490436127a4565b1015611e3d576001600160a01b0384166000908152600660205260408120805460ff191660011790556023805491611dfb836129b3565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b6001600160a01b03851660009081526001602052604081208054859290611e659084906127a4565b909155506000905081611e785783611e83565b611e838686866122b1565b6001600160a01b038616600090815260016020526040812080549293508392909190611eb09084906127f0565b90915550611ec090508686611f47565b15611eee57601e541580611ee457506005600854611ede9190612827565b601e5414155b15611eee57600080fd5b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f3391815260200190565b60405180910390a350600195945050505050565b600080546001600160a01b03848116911614801590611f7457506000546001600160a01b03838116911614155b8015611f9957506001600160a01b03821660009081526007602052604090205460ff16155b8015611fbe57506001600160a01b03831660009081526007602052604090205460ff16155b8015611fd857506013546001600160a01b03838116911614155b8015611fec57506001600160a01b03821615155b801561200157506001600160a01b0383163014155b9392505050565b6015805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110612050576120506129ce565b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156120a457600080fd5b505afa1580156120b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120dc9190612939565b816001815181106120ef576120ef6129ce565b6001600160a01b03928316602091820292909201015260105460155460405163791ac94760e01b81529183169263791ac9479261213b92879260009288929091169042906004016129e4565b600060405180830381600087803b15801561215557600080fd5b505af1158015612169573d6000803e3d6000fd5b50506015805460ff60a01b1916905550505050565b601d54610100900460ff16156121e25760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610906565b6121ec8282611f47565b15801561220657506011546001600160a01b038281169116145b156112a25760225460011461222957612221436101f46127f0565b601f5561222e565b43601f555b6001600160a01b038216600090815260076020908152604091829020805460ff19166001908117909155601d805461ff0019166101001790554282556015805460ff60a81b1916600160a81b17905591519182527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159910160405180910390a15050565b600080600c54600b546122c491906127f0565b90506122d08585611f47565b156122fd5760215415806122f35750600e546122ed906005612808565b60215414155b156122fd57600080fd5b600061271061230c8386612808565b6123169190612827565b3060009081526001602052604081208054929350839290919061233a9084906127f0565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361238981856127a4565b9695505050505050565b82805461239f90612753565b90600052602060002090601f0160209004810192826123c15760008555612407565b82601f106123da57805160ff1916838001178555612407565b82800160010185558215612407579182015b828111156124075782518255916020019190600101906123ec565b50612413929150612417565b5090565b5b808211156124135760008155600101612418565b600060208083528351808285015260005b818110156124595785810183015185820160400152820161243d565b8181111561246b576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461249657600080fd5b50565b600080604083850312156124ac57600080fd5b82356124b781612481565b946020939093013593505050565b6000806000606084860312156124da57600080fd5b83356124e581612481565b925060208401356124f581612481565b929592945050506040919091013590565b6000806040838503121561251957600080fd5b50508035926020909101359150565b60006020828403121561253a57600080fd5b813560ff8116811461200157600080fd5b634e487b7160e01b600052604160045260246000fd5b600082601f83011261257257600080fd5b813567ffffffffffffffff8082111561258d5761258d61254b565b604051601f8301601f19908116603f011681019082821181831017156125b5576125b561254b565b816040528381528660208588010111156125ce57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561260357600080fd5b833567ffffffffffffffff8082111561261b57600080fd5b61262787838801612561565b9450602086013591508082111561263d57600080fd5b5061264a86828701612561565b925050604084013561265b81612481565b809150509250925092565b60006020828403121561267857600080fd5b813561200181612481565b8035801515811461269357600080fd5b919050565b600080604083850312156126ab57600080fd5b82356126b681612481565b91506126c460208401612683565b90509250929050565b6000602082840312156126df57600080fd5b61200182612683565b600080604083850312156126fb57600080fd5b823561270681612481565b9150602083013561271681612481565b809150509250929050565b6000806000806080858703121561273757600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061276757607f821691505b6020821081141561278857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156127b6576127b661278e565b500390565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156128035761280361278e565b500190565b60008160001904831182151516156128225761282261278e565b500290565b60008261284457634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561288457816000190482111561286a5761286a61278e565b8085161561287757918102915b93841c939080029061284e565b509250929050565b60008261289b57506001610883565b816128a857506000610883565b81600181146128be57600281146128c8576128e4565b6001915050610883565b60ff8411156128d9576128d961278e565b50506001821b610883565b5060208310610133831016604e8410600b8410161715612907575081810a610883565b6129118383612849565b80600019048211156129255761292561278e565b029392505050565b6000612001838361288c565b60006020828403121561294b57600080fd5b815161200181612481565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b60006000198214156129c7576129c761278e565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a345784516001600160a01b031683529383019391830191600101612a0f565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220ef1f1e27860cad46062de6d2fd1a323d4747e905d6676216a2953bbcc0c1534b64736f6c63430008090033

Deployed Bytecode Sourcemap

11831:18743:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20872:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12806:35;;;;;;;;;;-1:-1:-1;12806:35:0;;;;-1:-1:-1;;;;;12806:35:0;;;;;;-1:-1:-1;;;;;806:32:1;;;788:51;;776:2;761:18;12806:35:0;616:229:1;12600:45:0;;;;;;;;;;;;12642:3;12600:45;;;;;996:25:1;;;984:2;969:18;12600:45:0;850:177:1;21485:161:0;;;;;;;;;;-1:-1:-1;21485:161:0;;;;;:::i;:::-;;:::i;:::-;;;1653:14:1;;1646:22;1628:41;;1616:2;1601:18;21485:161:0;1488:187:1;20607:83:0;;;;;;;;;;-1:-1:-1;20680:7:0;;20607:83;;12652:48;;;;;;;;;;;;12695:5;12652:48;;12505:34;;;;;;;;;;;;;;;;21654:266;;;;;;;;;;-1:-1:-1;21654:266:0;;;;;:::i;:::-;;:::i;20696:80::-;;;;;;;;;;-1:-1:-1;20764:9:0;;20696:80;;20764:9;;;;2283:36:1;;2271:2;2256:18;20696:80:0;2141:184:1;23588:259:0;;;;;;;;;;-1:-1:-1;23588:259:0;;;;;:::i;:::-;;:::i;:::-;;21928:215;;;;;;;;;;-1:-1:-1;21928:215:0;;;;;:::i;:::-;;:::i;24692:338::-;;;;;;;;;;-1:-1:-1;24692:338:0;;;;;:::i;:::-;;:::i;24182:165::-;;;;;;;;;;-1:-1:-1;24182:165:0;;;;;:::i;:::-;;:::i;12848:21::-;;;;;;;;;;-1:-1:-1;12848:21:0;;;;-1:-1:-1;;;;;12848:21:0;;;13181:41;;;;;;;;;;-1:-1:-1;13181:41:0;;;;-1:-1:-1;;;13181:41:0;;;;;;17200:1446;;;;;;;;;;-1:-1:-1;17200:1446:0;;;;;:::i;:::-;;:::i;19286:766::-;;;;;;;;;;-1:-1:-1;19286:766:0;;;;;:::i;:::-;;:::i;13650:36::-;;;;;;;;;;-1:-1:-1;13650:36:0;;;;;;;;;;;23325:123;;;;;;;;;;-1:-1:-1;23325:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;23413:27:0;23389:4;23413:27;;;:18;:27;;;;;;;;;23325:123;13061:32;;;;;;;;;;-1:-1:-1;13061:32:0;;;;-1:-1:-1;;;;;13061:32:0;;;25337:148;;;;;;;;;;-1:-1:-1;25337:148:0;;;;;:::i;:::-;;:::i;13450:77::-;;;;;;;;;;;;;;;;25672:132;;;;;;;;;;-1:-1:-1;25672:132:0;;;;;:::i;:::-;;:::i;12464:34::-;;;;;;;;;;;;;;;;21185:117;;;;;;;;;;-1:-1:-1;21185:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;21278:16:0;21251:7;21278:16;;;:7;:16;;;;;;;21185:117;12983:71;;;;;;;;;;-1:-1:-1;12983:71:0;;;;-1:-1:-1;;;;;12983:71:0;;;20060:194;;;;;;;;;;;;;:::i;22893:424::-;;;;;;;;;;-1:-1:-1;22893:424:0;;;;;:::i;:::-;;:::i;20958:80::-;;;;;;;;;;-1:-1:-1;21010:7:0;19264:6;-1:-1:-1;;;;;19264:6:0;20958:80;;23456:124;;;;;;;;;;-1:-1:-1;23456:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;23549:23:0;23525:4;23549:23;;;:14;:23;;;;;;;;;23456:124;20782:84;;;;;;;;;;;;;:::i;24059:115::-;;;;;;;;;;-1:-1:-1;24059:115:0;;;;;:::i;:::-;;:::i;22151:225::-;;;;;;;;;;-1:-1:-1;22151:225:0;;;;;:::i;:::-;;:::i;21310:167::-;;;;;;;;;;-1:-1:-1;21310:167:0;;;;;:::i;:::-;;:::i;25493:171::-;;;;;;;;;;-1:-1:-1;25493:171:0;;;;;:::i;:::-;;:::i;24359:325::-;;;;;;;;;;-1:-1:-1;24359:325:0;;;;;:::i;:::-;;:::i;21044:133::-;;;;;;;;;;-1:-1:-1;21044:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;21146:19:0;;;21128:7;21146:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;21044:133;23855:196;;;;;;;;;;-1:-1:-1;23855:196:0;;;;;:::i;:::-;;:::i;13901:32::-;;;;;;;;;;;;;;;;22384:501;;;;;;;;;;-1:-1:-1;22384:501:0;;;;;:::i;:::-;;:::i;25040:289::-;;;;;;;;;;-1:-1:-1;25040:289:0;;;;;:::i;:::-;;:::i;20872:80::-;20920:13;20944:5;20937:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20872:80;:::o;21485:161::-;21560:4;21577:39;189:10;21600:7;21609:6;21577:8;:39::i;:::-;-1:-1:-1;21634:4:0;21485:161;;;;;:::o;21654:266::-;21752:4;21769:36;21779:6;21787:9;21798:6;21769:9;:36::i;:::-;-1:-1:-1;;;;;;21847:19:0;;;;;;:11;:19;;;;;;;;189:10;21847:33;;;;;;;;;21816:74;;21825:6;;21847:42;;21883:6;;21847:42;:::i;:::-;21816:8;:74::i;:::-;-1:-1:-1;21908:4:0;21654:266;;;;;:::o;23588:259::-;14549:6;;-1:-1:-1;;;;;14549:6:0;189:10;14549:22;14541:67;;;;-1:-1:-1;;;14541:67:0;;;;;;;:::i;:::-;;;;;;;;;23691:13:::1;::::0;:18;:50;::::1;;;-1:-1:-1::0;23713:23:0::1;::::0;:28;23691:50:::1;23682:70;;;::::0;-1:-1:-1;;;23682:70:0;;7787:2:1;23682:70:0::1;::::0;::::1;7769:21:1::0;7826:1;7806:18;;;7799:29;-1:-1:-1;;;7844:18:1;;;7837:36;7890:18;;23682:70:0::1;7585:329:1::0;23682:70:0::1;23763:13;:28:::0;;;;23802:23:::1;:37:::0;23588:259::o;21928:215::-;189:10;22016:4;22065:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22065:34:0;;;;;;;;;;22016:4;;22033:80;;22056:7;;22065:47;;22102:10;;22065:47;:::i;24692:338::-;14549:6;;-1:-1:-1;;;;;14549:6:0;189:10;14549:22;14541:67;;;;-1:-1:-1;;;14541:67:0;;;;;;;:::i;:::-;24779:13:::1;24817:7;24806;24796;;:17;;;;:::i;:::-;24795:29;;;;:::i;:::-;24779:45;;24863:4;24853:7;;:14;;;;:::i;:::-;24843:5;:25;;24835:93;;;::::0;-1:-1:-1;;;24835:93:0;;8649:2:1;24835:93:0::1;::::0;::::1;8631:21:1::0;8688:2;8668:18;;;8661:30;8727:34;8707:18;;;8700:62;8798:25;8778:18;;;8771:53;8841:19;;24835:93:0::1;8447:419:1::0;24835:93:0::1;24939:12;:20:::0;;;24987:14:::1;::::0;25015:7;;24987:24:::1;::::0;25004:7;;24987:24:::1;:::i;:::-;24986:36;;;;:::i;:::-;24970:13;:52:::0;-1:-1:-1;;;24692:338:0:o;24182:165::-;14549:6;;-1:-1:-1;;;;;14549:6:0;189:10;14549:22;14541:67;;;;-1:-1:-1;;;14541:67:0;;;;;;;:::i;:::-;24266:13:::1;::::0;:18;:39;::::1;;;-1:-1:-1::0;24289:16:0::1;::::0;::::1;::::0;::::1;;;24288:17;24266:39;24257:49;;;::::0;::::1;;24317:22;;:13;:22:::0;24182:165::o;17200:1446::-;14549:6;;-1:-1:-1;;;;;14549:6:0;189:10;14549:22;14541:67;;;;-1:-1:-1;;;14541:67:0;;;;;;;:::i;:::-;17351:19:::1;::::0;::::1;;17350:20;17342:62;;;::::0;-1:-1:-1;;;17342:62:0;;9073:2:1;17342:62:0::1;::::0;::::1;9055:21:1::0;9112:2;9092:18;;;9085:30;9151:31;9131:18;;;9124:59;9200:18;;17342:62:0::1;8871:353:1::0;17342:62:0::1;17466:17:::0;;17438::::1;::::0;17466::::1;::::0;:5:::1;::::0;:17:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;17494:21:0;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;17526:14:0::1;:29:::0;;;17585:11:::1;17570:26:::0;::::1;17566:197;;;17613:9;:14:::0;;-1:-1:-1;;17613:14:0::1;17625:2;17613:14:::0;;::::1;::::0;;;17642:12:::1;:24:::0;17566:197:::1;;;17699:9;:13:::0;;-1:-1:-1;;17699:13:0::1;17711:1;17699:13:::0;;::::1;::::0;;;17727:12:::1;:24:::0;17566:197:::1;17803:12;::::0;17799:16:::1;::::0;:2:::1;:16;:::i;:::-;17783:33;::::0;:12;:33:::1;:::i;:::-;17773:7;:43:::0;;;17827:7:::1;:16;17835:7;19237::::0;19264:6;-1:-1:-1;;;;;19264:6:0;;19199:79;17835:7:::1;-1:-1:-1::0;;;;;17827:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;17827:16:0;:26;17883:7:::1;::::0;17898:5:::1;::::0;17883:11:::1;::::0;17893:1:::1;17883:11;:::i;:::-;17882:21;;;;:::i;:::-;17866:13;:37:::0;17928:7:::1;::::0;17943:4:::1;::::0;17928:11:::1;::::0;17938:1:::1;17928:11;:::i;:::-;17927:20;;;;:::i;:::-;17914:10;:33:::0;17991:14:::1;::::0;17960:9:::1;:46:::0;;-1:-1:-1;;;;;;17960:46:0::1;-1:-1:-1::0;;;;;17991:14:0;;::::1;17960:46:::0;;::::1;::::0;;18044:19:::1;::::0;;-1:-1:-1;;;18044:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;17991:14;18044:19;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18026:49:0::1;;18076:9;;;;;;;;;-1:-1:-1::0;;;;;18076:9:0::1;-1:-1:-1::0;;;;;18076:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18026:82;::::0;-1:-1:-1;;;;;;18026:82:0::1;::::0;;;;;;-1:-1:-1;;;;;11089:15:1;;;18026:82:0::1;::::0;::::1;11071:34:1::0;18102:4:0::1;11121:18:1::0;;;11114:43;11006:18;;18026:82:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18017:6;:91:::0;;-1:-1:-1;;;;;18017:91:0;;::::1;-1:-1:-1::0;;;;;;18017:91:0;;::::1;::::0;::::1;::::0;;;:6:::1;18119:15:::0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;18119:22:0::1;18017:91:::0;18119:22:::1;::::0;;18172:4:::1;18152:26:::0;;:11:::1;:26:::0;;;;;18187:9:::1;::::0;;::::1;18152:46:::0;;;;;;;;-1:-1:-1;;18152:66:0;;18231:16:::1;:43:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;18287:22:::1;::::0;18305:3:::1;18287:15;:22::i;:::-;18388:14;::::0;18380:42:::1;::::0;-1:-1:-1;;;;;18388:14:0::1;-1:-1:-1::0;;18380:7:0::1;:42::i;:::-;-1:-1:-1::0;18433:47:0::1;189:10:::0;18456:14:::1;::::0;18472:7:::1;::::0;-1:-1:-1;;;;;18456:14:0;;::::1;::::0;18433:8:::1;:47::i;:::-;18523:14;::::0;18540:7:::1;::::0;18491:57:::1;::::0;18508:4:::1;::::0;-1:-1:-1;;;;;18523:14:0;;::::1;::::0;18491:8:::1;:57::i;:::-;18561:19;:26:::0;;-1:-1:-1;;18561:26:0::1;18583:4;18561:26;::::0;;18612:4:::1;::::0;18630:7:::1;::::0;18603:35:::1;::::0;18618:10:::1;::::0;-1:-1:-1;;;;;18612:4:0::1;::::0;18603:35:::1;::::0;::::1;::::0;996:25:1;;984:2;969:18;;850:177;18603:35:0::1;;;;;;;;17331:1315;17200:1446:::0;;;:::o;19286:766::-;14549:6;;-1:-1:-1;;;;;14549:6:0;189:10;14549:22;14541:67;;;;-1:-1:-1;;;14541:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19367:22:0;::::1;19359:96;;;;-1:-1:-1::0;;;19359:96:0::1;;;;;;;:::i;:::-;19486:11;::::0;-1:-1:-1;;;;;19474:23:0;;::::1;19486:11:::0;::::1;19474:23;;19466:97;;;;-1:-1:-1::0;;;19466:97:0::1;;;;;;;:::i;:::-;19593:6;::::0;;19574:33:::1;::::0;-1:-1:-1;;;;;19593:6:0;;::::1;::::0;19574:18:::1;:33::i;:::-;19618:34;19637:8;19647:4;19618:18;:34::i;:::-;19705:6;::::0;19677:16:::1;::::0;-1:-1:-1;;;;;19677:16:0;;::::1;19705:6:::0;::::1;19677:35;19673:90;;;19727:16;:36:::0;;-1:-1:-1;;;;;;19727:36:0::1;-1:-1:-1::0;;;;;19727:36:0;::::1;;::::0;;19673:90:::1;19826:6;::::0;;-1:-1:-1;;;;;19826:6:0;;::::1;21278:16:::0;;:7;:16;;;;;;;;;19784:11:::1;:19:::0;;;;;:29;;::::1;::::0;;;;;;;:49;19857:6;;;;::::1;21278:16:::0;;;;;;19847:21;19844:99:::1;;19895:6;::::0;;-1:-1:-1;;;;;19895:6:0::1;21278:16:::0;;;:7;:16;;;;;;;19885:46:::1;::::0;19895:6;19903:8;;19885:9:::1;:46::i;:::-;;19844:99;19963:6;:17:::0;;-1:-1:-1;;;;;;19963:17:0::1;-1:-1:-1::0;;;;;19963:17:0;::::1;::::0;;::::1;::::0;;19996:38:::1;::::0;19963:17;;;;19996:38:::1;::::0;19963:6;19996:38:::1;19286:766:::0;:::o;25337:148::-;14549:6;;-1:-1:-1;;;;;14549:6:0;189:10;14549:22;14541:67;;;;-1:-1:-1;;;14541:67:0;;;;;;;:::i;:::-;25431:16:::1;:46:::0;;-1:-1:-1;;;;;;25431:46:0::1;-1:-1:-1::0;;;;;25431:46:0;;;::::1;::::0;;;::::1;::::0;;25337:148::o;25672:132::-;14549:6;;-1:-1:-1;;;;;14549:6:0;189:10;14549:22;14541:67;;;;-1:-1:-1;;;14541:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25759:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:37;;-1:-1:-1;;25759:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25672:132::o;20060:194::-;14549:6;;-1:-1:-1;;;;;14549:6:0;189:10;14549:22;14541:67;;;;-1:-1:-1;;;14541:67:0;;;;;;;:::i;:::-;20146:6:::1;::::0;;20127:33:::1;::::0;-1:-1:-1;;;;;20146:6:0;;::::1;::::0;20127:18:::1;:33::i;:::-;20188:1;20171:19:::0;;-1:-1:-1;;;;;;20171:19:0::1;::::0;;20206:40:::1;::::0;20188:1;;20206:40:::1;::::0;20188:1;;20206:40:::1;20060:194::o:0;22893:424::-;14549:6;;-1:-1:-1;;;;;14549:6:0;189:10;14549:22;14541:67;;;;-1:-1:-1;;;14541:67:0;;;;;;;:::i;:::-;22974:16;22970:340:::1;;-1:-1:-1::0;;;;;;23007:13:0::1;23023:5;23007:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;23007:21:0::1;::::0;;22893:424::o;22970:340::-:1;23065:17;::::0;:22;23061:153:::1;;23154:7;23134:17;;23116:15;:35;;;;:::i;:::-;:45;23108:90;;;::::0;-1:-1:-1;;;23108:90:0;;11800:2:1;23108:90:0::1;::::0;::::1;11782:21:1::0;;;11819:18;;;11812:30;11878:34;11858:18;;;11851:62;11930:18;;23108:90:0::1;11598:356:1::0;23108:90:0::1;-1:-1:-1::0;;;;;23228:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;23228:20:0::1;23244:4;23228:20;::::0;;23283:15:::1;23263:17;:35:::0;22970:340:::1;22893:424:::0;;:::o;20782:84::-;20832:13;20856:7;20849:14;;;;;:::i;24059:115::-;14549:6;;-1:-1:-1;;;;;14549:6:0;189:10;14549:22;14541:67;;;;-1:-1:-1;;;14541:67:0;;;;;;;:::i;:::-;24138:16:::1;:28:::0;;-1:-1:-1;;24138:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24059:115::o;22151:225::-;189:10;22244:4;22293:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22293:34:0;;;;;;;;;;22244:4;;22261:85;;22284:7;;22293:52;;22330:15;;22293:52;:::i;21310:167::-;21388:4;21405:42;189:10;21429:9;21440:6;21405:9;:42::i;25493:171::-;14549:6;;-1:-1:-1;;;;;14549:6:0;189:10;14549:22;14541:67;;;;-1:-1:-1;;;14541:67:0;;;;;;;:::i;:::-;25570:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;25570:32:0::1;-1:-1:-1::0;;;;25570:32:0;;::::1;;::::0;;25618:38:::1;::::0;::::1;::::0;::::1;::::0;25594:8;1653:14:1;1646:22;1628:41;;1616:2;1601:18;;1488:187;25618:38:0::1;;;;;;;;25493:171:::0;:::o;24359:325::-;14549:6;;-1:-1:-1;;;;;14549:6:0;189:10;14549:22;14541:67;;;;-1:-1:-1;;;14541:67:0;;;;;;;:::i;:::-;12590:3:::1;24459:12;:31;;:83;;;;;12642:3;24511:12;:31;;24459:83;24451:92;;;::::0;::::1;;24593:4;24562:27;24577:12:::0;24562;:27:::1;:::i;:::-;:35;;24554:44;;;::::0;::::1;;24609:13;:28:::0;;;;24648:13:::1;:28:::0;24359:325::o;23855:196::-;14549:6;;-1:-1:-1;;;;;14549:6:0;189:10;14549:22;14541:67;;;;-1:-1:-1;;;14541:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23940:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;::::1;;23932:69;;;::::0;-1:-1:-1;;;23932:69:0;;12161:2:1;23932:69:0::1;::::0;::::1;12143:21:1::0;12200:2;12180:18;;;12173:30;12239:34;12219:18;;;12212:62;-1:-1:-1;;;12290:18:1;;;12283:31;12331:19;;23932:69:0::1;11959:397:1::0;23932:69:0::1;-1:-1:-1::0;;;;;24012:23:0::1;24038:5;24012:23:::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;24012:31:0::1;::::0;;23855:196::o;22384:501::-;14549:6;;-1:-1:-1;;;;;14549:6:0;189:10;14549:22;14541:67;;;;-1:-1:-1;;;14541:67:0;;;;;;;:::i;:::-;22455:29:::1;22506:9;22455:61;;22527:16;22564:10;-1:-1:-1::0;;;;;22564:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22546:47:0::1;;22602:4;22609:10;-1:-1:-1::0;;;;;22609:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22546:81;::::0;-1:-1:-1;;;;;;22546:81:0::1;::::0;;;;;;-1:-1:-1;;;;;11089:15:1;;;22546:81:0::1;::::0;::::1;11071:34:1::0;11141:15;;11121:18;;;11114:43;11006:18;;22546:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22527:100:::0;-1:-1:-1;;;;;;22642:22:0;::::1;22638:207;;22708:10;-1:-1:-1::0;;;;;22708:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22690:50:0::1;;22749:4;22756:10;-1:-1:-1::0;;;;;22756:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22690:84;::::0;-1:-1:-1;;;;;;22690:84:0::1;::::0;;;;;;-1:-1:-1;;;;;11089:15:1;;;22690:84:0::1;::::0;::::1;11071:34:1::0;11141:15;;11121:18;;;11114:43;11006:18;;22690:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22681:6;:93:::0;;-1:-1:-1;;;;;;22681:93:0::1;-1:-1:-1::0;;;;;22681:93:0;;;::::1;::::0;;;::::1;::::0;;22638:207:::1;;;22816:6;:17:::0;;-1:-1:-1;;;;;;22816:17:0::1;-1:-1:-1::0;;;;;22816:17:0;::::1;;::::0;;22638:207:::1;-1:-1:-1::0;22855:9:0::1;:22:::0;;-1:-1:-1;;;;;;22855:22:0::1;-1:-1:-1::0;;;;;22855:22:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;22384:501:0:o;25040:289::-;14549:6;;-1:-1:-1;;;;;14549:6:0;189:10;14549:22;14541:67;;;;-1:-1:-1;;;14541:67:0;;;;;;;:::i;:::-;25240:16:::1;25220;25210:7;;:26;;;;:::i;:::-;25209:47;;;;:::i;:::-;25193:13;:63:::0;25281:7:::1;::::0;25308:13;;25281:23:::1;::::0;25291:13;;25281:23:::1;:::i;:::-;25280:41;;;;:::i;:::-;25267:10;:54:::0;-1:-1:-1;;;;25040:289:0:o;26154:341::-;-1:-1:-1;;;;;26248:20:0;;26240:69;;;;-1:-1:-1;;;26240:69:0;;12563:2:1;26240:69:0;;;12545:21:1;12602:2;12582:18;;;12575:30;12641:34;12621:18;;;12614:62;-1:-1:-1;;;12692:18:1;;;12685:34;12736:19;;26240:69:0;12361:400:1;26240:69:0;-1:-1:-1;;;;;26328:21:0;;26320:68;;;;-1:-1:-1;;;26320:68:0;;12968:2:1;26320:68:0;;;12950:21:1;13007:2;12987:18;;;12980:30;13046:34;13026:18;;;13019:62;-1:-1:-1;;;13097:18:1;;;13090:32;13139:19;;26320:68:0;12766:398:1;26320:68:0;-1:-1:-1;;;;;26401:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;26454:33;;996:25:1;;;26454:33:0;;969:18:1;26454:33:0;;;;;;;26154:341;;;:::o;26503:2354::-;26582:4;-1:-1:-1;;;;;26607:18:0;;26599:68;;;;-1:-1:-1;;;26599:68:0;;13371:2:1;26599:68:0;;;13353:21:1;13410:2;13390:18;;;13383:30;13449:34;13429:18;;;13422:62;-1:-1:-1;;;13500:18:1;;;13493:35;13545:19;;26599:68:0;13169:401:1;26599:68:0;-1:-1:-1;;;;;26686:16:0;;26678:64;;;;-1:-1:-1;;;26678:64:0;;13777:2:1;26678:64:0;;;13759:21:1;13816:2;13796:18;;;13789:30;13855:34;13835:18;;;13828:62;-1:-1:-1;;;13906:18:1;;;13899:33;13949:19;;26678:64:0;13575:399:1;26678:64:0;26770:1;26761:6;:10;26753:64;;;;-1:-1:-1;;;26753:64:0;;14181:2:1;26753:64:0;;;14163:21:1;14220:2;14200:18;;;14193:30;14259:34;14239:18;;;14232:62;-1:-1:-1;;;14310:18:1;;;14303:39;14359:19;;26753:64:0;13979:405:1;26753:64:0;26831:20;26842:4;26848:2;26831:10;:20::i;:::-;26828:127;;;26886:12;;26876:6;:22;;26868:75;;;;-1:-1:-1;;;26868:75:0;;14591:2:1;26868:75:0;;;14573:21:1;14630:2;14610:18;;;14603:30;14669:34;14649:18;;;14642:62;-1:-1:-1;;;14720:18:1;;;14713:38;14768:19;;26868:75:0;14389:404:1;26868:75:0;-1:-1:-1;;;;;27000:24:0;;26967:12;27000:24;;;:18;:24;;;;;;26982:4;;27000:24;;;:50;;-1:-1:-1;;;;;;27028:22:0;;;;;;:18;:22;;;;;;;;27000:50;26997:96;;;-1:-1:-1;27076:5:0;26997:96;-1:-1:-1;;;;;27109:11:0;;;;;;:7;:11;;;;;;;;27105:459;;;27142:16;;-1:-1:-1;;;27142:16:0;;;;27141:17;:59;;;;-1:-1:-1;27179:21:0;;-1:-1:-1;;;27179:21:0;;;;27141:59;27137:410;;;27284:4;27235:28;21278:16;;;:7;:16;;;;;;27337:13;;27313:37;;27309:223;;27402:10;;27378:20;:34;27375:77;;-1:-1:-1;27439:10:0;;27375:77;27474:38;27491:20;27474:16;:38::i;:::-;27216:331;27137:410;27589:16;;;;27585:850;;;-1:-1:-1;;;;;23549:23:0;;23525:4;23549:23;;;:14;:23;;;;;;;;27625:56;;;-1:-1:-1;;;;;;23549:23:0;;23525:4;23549:23;;;:14;:23;;;;;;;;27656:25;27621:123;;;27702:26;;-1:-1:-1;;;27702:26:0;;15000:2:1;27702:26:0;;;14982:21:1;15039:2;15019:18;;;15012:30;-1:-1:-1;;;15058:18:1;;;15051:46;15114:18;;27702:26:0;14798:340:1;27621:123:0;27765:16;;;;;;;27760:664;;27802:28;27821:4;27827:2;27802:18;:28::i;:::-;27854:16;;;;;;;27853:17;:41;;;;;27874:20;27885:4;27891:2;27874:10;:20::i;:::-;27849:137;;;27919:47;;-1:-1:-1;;;27919:47:0;;15345:2:1;27919:47:0;;;15327:21:1;15384:2;15364:18;;;15357:30;15423:34;15403:18;;;15396:62;-1:-1:-1;;;15474:18:1;;;15467:35;15519:19;;27919:47:0;15143:401:1;27849:137:0;27760:664;;;28045:1;28030:12;;:16;:55;;;;-1:-1:-1;;;;;;28072:13:0;;;;;;:7;:13;;;;;;;;28030:55;:101;;;;;28111:20;28122:4;28128:2;28111:10;:20::i;:::-;28026:383;;;28208:13;;28193:12;;28178:27;;:12;:27;:::i;:::-;:43;28174:216;;;-1:-1:-1;;;;;28250:18:0;;;;;;:14;:18;;;;;:25;;-1:-1:-1;;28250:25:0;28271:4;28250:25;;;28302:13;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;28350:16:0;;-1:-1:-1;;;;;806:32:1;;788:51;;28350:16:0;;776:2:1;761:18;28350:16:0;;;;;;;28174:216;-1:-1:-1;;;;;28447:13:0;;;;;;:7;:13;;;;;:23;;28464:6;;28447:13;:23;;28464:6;;28447:23;:::i;:::-;;;;-1:-1:-1;28483:22:0;;-1:-1:-1;28509:7:0;28508:48;;28550:6;28508:48;;;28520:27;28530:4;28536:2;28540:6;28520:9;:27::i;:::-;-1:-1:-1;;;;;28569:11:0;;;;;;:7;:11;;;;;:29;;28483:73;;-1:-1:-1;28483:73:0;;28569:11;;;:29;;28483:73;;28569:29;:::i;:::-;;;;-1:-1:-1;28623:20:0;;-1:-1:-1;28634:4:0;28640:2;28623:10;:20::i;:::-;28619:157;;;28663:13;;:18;;:57;;;28719:1;28702:14;;:18;;;;:::i;:::-;28685:13;;:35;;28663:57;28659:106;;;28741:8;;;28659:106;28808:2;-1:-1:-1;;;;;28793:34:0;28802:4;-1:-1:-1;;;;;28793:34:0;;28812:14;28793:34;;;;996:25:1;;984:2;969:18;;850:177;28793:34:0;;;;;;;;-1:-1:-1;28845:4:0;;26503:2354;-1:-1:-1;;;;;26503:2354:0:o;25812:330::-;25880:4;19264:6;;-1:-1:-1;;;;;25904:15:0;;;19264:6;;25904:15;;;;:45;;-1:-1:-1;19237:7:0;19264:6;-1:-1:-1;;;;;25936:13:0;;;19264:6;;25936:13;;25904:45;:84;;;;-1:-1:-1;;;;;;25967:21:0;;;;;;:17;:21;;;;;;;;25966:22;25904:84;:125;;;;-1:-1:-1;;;;;;26006:23:0;;;;;;:17;:23;;;;;;;;26005:24;25904:125;:159;;;;-1:-1:-1;26052:11:0;;-1:-1:-1;;;;;26046:17:0;;;26052:11;;26046:17;;25904:159;:192;;;;-1:-1:-1;;;;;;26080:16:0;;;;25904:192;:230;;;;-1:-1:-1;;;;;;26113:21:0;;26129:4;26113:21;;25904:230;25897:237;25812:330;-1:-1:-1;;;25812:330:0:o;28865:519::-;14423:16;:23;;-1:-1:-1;;;;14423:23:0;-1:-1:-1;;;14423:23:0;;;29029:16:::1;::::0;;29043:1:::1;29029:16:::0;;;;;::::1;::::0;;-1:-1:-1;;29029:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;29029:16:0::1;29005:40;;29074:4;29056;29061:1;29056:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29056:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;29100:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;29100:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;29056:7;;29100:16;;;;;:9;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29090:4;29095:1;29090:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29090:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;29155:9:::1;::::0;29319:16:::1;::::0;29155:221:::1;::::0;-1:-1:-1;;;29155:221:0;;:9;;::::1;::::0;:60:::1;::::0;:221:::1;::::0;29230:11;;29155:9:::1;::::0;29300:4;;29319:16;;::::1;::::0;29350:15:::1;::::0;29155:221:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;14469:16:0;:24;;-1:-1:-1;;;;14469:24:0;;;-1:-1:-1;;;;28865:519:0:o;29392:614::-;29474:16;;;;;;;29473:17;29465:65;;;;-1:-1:-1;;;29465:65:0;;17016:2:1;29465:65:0;;;16998:21:1;17055:2;17035:18;;;17028:30;17094:34;17074:18;;;17067:62;-1:-1:-1;;;17145:18:1;;;17138:33;17188:19;;29465:65:0;16814:399:1;29465:65:0;29546:20;29557:4;29563:2;29546:10;:20::i;:::-;29545:21;:37;;;;-1:-1:-1;29576:6:0;;-1:-1:-1;;;;;29570:12:0;;;29576:6;;29570:12;29545:37;29541:458;;;29603:13;;29620:1;29603:18;29599:160;;29657:18;:12;29672:3;29657:18;:::i;:::-;29642:12;:33;29599:160;;;29731:12;29716;:27;29599:160;-1:-1:-1;;;;;29775:23:0;;;;;;:17;:23;;;;;;;;;:30;;-1:-1:-1;;29775:30:0;29801:4;29775:30;;;;;;29820:16;:23;;-1:-1:-1;;29820:23:0;29775:30;29820:23;;;29873:15;29858:30;;29905:21;:28;;-1:-1:-1;;;;29905:28:0;-1:-1:-1;;;29905:28:0;;;29953:34;;1628:41:1;;;29953:34:0;;1601:18:1;29953:34:0;;;;;;;29392:614;;:::o;30014:557::-;30093:7;30113:18;30150:13;;30134;;:29;;;;:::i;:::-;30113:50;;30180:20;30191:4;30197:2;30180:10;:20::i;:::-;30176:175;;;30220:23;;:28;;:75;;-1:-1:-1;30279:12:0;;:16;;30294:1;30279:16;:::i;:::-;30252:23;;:43;;30220:75;30216:124;;;30316:8;;;30216:124;30363:17;12695:5;30383:19;30392:10;30383:6;:19;:::i;:::-;:38;;;;:::i;:::-;30450:4;30434:22;;;;:7;:22;;;;;:35;;30363:58;;-1:-1:-1;30363:58:0;;30434:22;;;:35;;30363:58;;30434:35;:::i;:::-;;;;-1:-1:-1;;30485:40:0;;996:25:1;;;30508:4:0;;-1:-1:-1;;;;;30485:40:0;;;;;984:2:1;969:18;30485:40:0;;;;;;;30545:18;30554:9;30545:6;:18;:::i;:::-;30538:25;30014:557;-1:-1:-1;;;;;;30014:557:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:597:1;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;1032:131::-;-1:-1:-1;;;;;1107:31:1;;1097:42;;1087:70;;1153:1;1150;1143:12;1087:70;1032:131;:::o;1168:315::-;1236:6;1244;1297:2;1285:9;1276:7;1272:23;1268:32;1265:52;;;1313:1;1310;1303:12;1265:52;1352:9;1339:23;1371:31;1396:5;1371:31;:::i;:::-;1421:5;1473:2;1458:18;;;;1445:32;;-1:-1:-1;;;1168:315:1:o;1680:456::-;1757:6;1765;1773;1826:2;1814:9;1805:7;1801:23;1797:32;1794:52;;;1842:1;1839;1832:12;1794:52;1881:9;1868:23;1900:31;1925:5;1900:31;:::i;:::-;1950:5;-1:-1:-1;2007:2:1;1992:18;;1979:32;2020:33;1979:32;2020:33;:::i;:::-;1680:456;;2072:7;;-1:-1:-1;;;2126:2:1;2111:18;;;;2098:32;;1680:456::o;2330:248::-;2398:6;2406;2459:2;2447:9;2438:7;2434:23;2430:32;2427:52;;;2475:1;2472;2465:12;2427:52;-1:-1:-1;;2498:23:1;;;2568:2;2553:18;;;2540:32;;-1:-1:-1;2330:248:1:o;2583:269::-;2640:6;2693:2;2681:9;2672:7;2668:23;2664:32;2661:52;;;2709:1;2706;2699:12;2661:52;2748:9;2735:23;2798:4;2791:5;2787:16;2780:5;2777:27;2767:55;;2818:1;2815;2808:12;3065:127;3126:10;3121:3;3117:20;3114:1;3107:31;3157:4;3154:1;3147:15;3181:4;3178:1;3171:15;3197:719;3240:5;3293:3;3286:4;3278:6;3274:17;3270:27;3260:55;;3311:1;3308;3301:12;3260:55;3347:6;3334:20;3373:18;3410:2;3406;3403:10;3400:36;;;3416:18;;:::i;:::-;3491:2;3485:9;3459:2;3545:13;;-1:-1:-1;;3541:22:1;;;3565:2;3537:31;3533:40;3521:53;;;3589:18;;;3609:22;;;3586:46;3583:72;;;3635:18;;:::i;:::-;3675:10;3671:2;3664:22;3710:2;3702:6;3695:18;3756:3;3749:4;3744:2;3736:6;3732:15;3728:26;3725:35;3722:55;;;3773:1;3770;3763:12;3722:55;3837:2;3830:4;3822:6;3818:17;3811:4;3803:6;3799:17;3786:54;3884:1;3877:4;3872:2;3864:6;3860:15;3856:26;3849:37;3904:6;3895:15;;;;;;3197:719;;;;:::o;3921:686::-;4026:6;4034;4042;4095:2;4083:9;4074:7;4070:23;4066:32;4063:52;;;4111:1;4108;4101:12;4063:52;4151:9;4138:23;4180:18;4221:2;4213:6;4210:14;4207:34;;;4237:1;4234;4227:12;4207:34;4260:50;4302:7;4293:6;4282:9;4278:22;4260:50;:::i;:::-;4250:60;;4363:2;4352:9;4348:18;4335:32;4319:48;;4392:2;4382:8;4379:16;4376:36;;;4408:1;4405;4398:12;4376:36;;4431:52;4475:7;4464:8;4453:9;4449:24;4431:52;:::i;:::-;4421:62;;;4533:2;4522:9;4518:18;4505:32;4546:31;4571:5;4546:31;:::i;:::-;4596:5;4586:15;;;3921:686;;;;;:::o;4612:247::-;4671:6;4724:2;4712:9;4703:7;4699:23;4695:32;4692:52;;;4740:1;4737;4730:12;4692:52;4779:9;4766:23;4798:31;4823:5;4798:31;:::i;5124:160::-;5189:20;;5245:13;;5238:21;5228:32;;5218:60;;5274:1;5271;5264:12;5218:60;5124:160;;;:::o;5289:315::-;5354:6;5362;5415:2;5403:9;5394:7;5390:23;5386:32;5383:52;;;5431:1;5428;5421:12;5383:52;5470:9;5457:23;5489:31;5514:5;5489:31;:::i;:::-;5539:5;-1:-1:-1;5563:35:1;5594:2;5579:18;;5563:35;:::i;:::-;5553:45;;5289:315;;;;;:::o;5609:180::-;5665:6;5718:2;5706:9;5697:7;5693:23;5689:32;5686:52;;;5734:1;5731;5724:12;5686:52;5757:26;5773:9;5757:26;:::i;5794:388::-;5862:6;5870;5923:2;5911:9;5902:7;5898:23;5894:32;5891:52;;;5939:1;5936;5929:12;5891:52;5978:9;5965:23;5997:31;6022:5;5997:31;:::i;:::-;6047:5;-1:-1:-1;6104:2:1;6089:18;;6076:32;6117:33;6076:32;6117:33;:::i;:::-;6169:7;6159:17;;;5794:388;;;;;:::o;6187:385::-;6273:6;6281;6289;6297;6350:3;6338:9;6329:7;6325:23;6321:33;6318:53;;;6367:1;6364;6357:12;6318:53;-1:-1:-1;;6390:23:1;;;6460:2;6445:18;;6432:32;;-1:-1:-1;6511:2:1;6496:18;;6483:32;;6562:2;6547:18;6534:32;;-1:-1:-1;6187:385:1;-1:-1:-1;6187:385:1:o;6577:380::-;6656:1;6652:12;;;;6699;;;6720:61;;6774:4;6766:6;6762:17;6752:27;;6720:61;6827:2;6819:6;6816:14;6796:18;6793:38;6790:161;;;6873:10;6868:3;6864:20;6861:1;6854:31;6908:4;6905:1;6898:15;6936:4;6933:1;6926:15;6790:161;;6577:380;;;:::o;6962:127::-;7023:10;7018:3;7014:20;7011:1;7004:31;7054:4;7051:1;7044:15;7078:4;7075:1;7068:15;7094:125;7134:4;7162:1;7159;7156:8;7153:34;;;7167:18;;:::i;:::-;-1:-1:-1;7204:9:1;;7094:125::o;7224:356::-;7426:2;7408:21;;;7445:18;;;7438:30;7504:34;7499:2;7484:18;;7477:62;7571:2;7556:18;;7224:356::o;7919:128::-;7959:3;7990:1;7986:6;7983:1;7980:13;7977:39;;;7996:18;;:::i;:::-;-1:-1:-1;8032:9:1;;7919:128::o;8052:168::-;8092:7;8158:1;8154;8150:6;8146:14;8143:1;8140:21;8135:1;8128:9;8121:17;8117:45;8114:71;;;8165:18;;:::i;:::-;-1:-1:-1;8205:9:1;;8052:168::o;8225:217::-;8265:1;8291;8281:132;;8335:10;8330:3;8326:20;8323:1;8316:31;8370:4;8367:1;8360:15;8398:4;8395:1;8388:15;8281:132;-1:-1:-1;8427:9:1;;8225:217::o;9229:422::-;9318:1;9361:5;9318:1;9375:270;9396:7;9386:8;9383:21;9375:270;;;9455:4;9451:1;9447:6;9443:17;9437:4;9434:27;9431:53;;;9464:18;;:::i;:::-;9514:7;9504:8;9500:22;9497:55;;;9534:16;;;;9497:55;9613:22;;;;9573:15;;;;9375:270;;;9379:3;9229:422;;;;;:::o;9656:806::-;9705:5;9735:8;9725:80;;-1:-1:-1;9776:1:1;9790:5;;9725:80;9824:4;9814:76;;-1:-1:-1;9861:1:1;9875:5;;9814:76;9906:4;9924:1;9919:59;;;;9992:1;9987:130;;;;9899:218;;9919:59;9949:1;9940:10;;9963:5;;;9987:130;10024:3;10014:8;10011:17;10008:43;;;10031:18;;:::i;:::-;-1:-1:-1;;10087:1:1;10073:16;;10102:5;;9899:218;;10201:2;10191:8;10188:16;10182:3;10176:4;10173:13;10169:36;10163:2;10153:8;10150:16;10145:2;10139:4;10136:12;10132:35;10129:77;10126:159;;;-1:-1:-1;10238:19:1;;;10270:5;;10126:159;10317:34;10342:8;10336:4;10317:34;:::i;:::-;10387:6;10383:1;10379:6;10375:19;10366:7;10363:32;10360:58;;;10398:18;;:::i;:::-;10436:20;;9656:806;-1:-1:-1;;;9656:806:1:o;10467:131::-;10527:5;10556:36;10583:8;10577:4;10556:36;:::i;10603:251::-;10673:6;10726:2;10714:9;10705:7;10701:23;10697:32;10694:52;;;10742:1;10739;10732:12;10694:52;10774:9;10768:16;10793:31;10818:5;10793:31;:::i;11168:425::-;11370:2;11352:21;;;11409:2;11389:18;;;11382:30;11448:34;11443:2;11428:18;;11421:62;11519:31;11514:2;11499:18;;11492:59;11583:3;11568:19;;11168:425::o;15549:135::-;15588:3;-1:-1:-1;;15609:17:1;;15606:43;;;15629:18;;:::i;:::-;-1:-1:-1;15676:1:1;15665:13;;15549:135::o;15689:127::-;15750:10;15745:3;15741:20;15738:1;15731:31;15781:4;15778:1;15771:15;15805:4;15802:1;15795:15;15821:988;16091:4;16139:3;16128:9;16124:19;16170:6;16159:9;16152:25;16196:2;16234:6;16229:2;16218:9;16214:18;16207:34;16277:3;16272:2;16261:9;16257:18;16250:31;16301:6;16336;16330:13;16367:6;16359;16352:22;16405:3;16394:9;16390:19;16383:26;;16444:2;16436:6;16432:15;16418:29;;16465:1;16475:195;16489:6;16486:1;16483:13;16475:195;;;16554:13;;-1:-1:-1;;;;;16550:39:1;16538:52;;16645:15;;;;16610:12;;;;16586:1;16504:9;16475:195;;;-1:-1:-1;;;;;;;16726:32:1;;;;16721:2;16706:18;;16699:60;-1:-1:-1;;;16790:3:1;16775:19;16768:35;16687:3;15821:988;-1:-1:-1;;;15821:988:1:o

Swarm Source

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