ETH Price: $3,495.40 (+2.61%)
Gas: 2 Gwei

Token

Crimson (CRM)
 

Overview

Max Total Supply

2,000,000 CRM

Holders

96

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
20.11 CRM

Value
$0.00
0x59ad81b60Adbb80ee7B5C0e602E05390648986da
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:
CRM

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: No License

/**  
Crimson $CRM

https://crimson-guard.com/
https://t.me/CrimsonProject
**/

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

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

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

    /**
     * @dev Moves `amount` tokens from `from` to `to` 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 from, address to, uint256 amount) external returns (bool);
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: Crimson/Token.sol


pragma solidity ^0.8.10;



library SafeMath {

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

// Uniswap Pair

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 Mint(address indexed sender, uint amount0, uint amount1);
    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;
}

// Uniswap Router

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

abstract contract Crimson {
    address public marketingWallet = 0xe6f9BE316A8ED7BD122Ed139DFF7468029223475;
    address public treasuryWallet = 0x83a03c1141299B558E8639C4Cb199C37Eb851570;

    string constant _name = "Crimson";
    string constant _symbol = "CRM";
    uint8 constant _decimals = 18;

    uint256 _totalSupply = 2000000000000000000000000;
    uint256 public _maxWalletToken = _totalSupply;
    uint256 public buyFee             = 40;
    uint256 public buyTotalFee        = buyFee;
    uint256 public swapLpFee          = 1;
    uint256 public swapMarketing      = 38;
    uint256 public swapTreasuryFee    = 1;
    uint256 public swapTotalFee       = swapMarketing + swapLpFee + swapTreasuryFee;
    uint256 public transFee           = 0;
    uint256 public feeDenominator     = 100;
}

contract CRM is Crimson, IERC20, Ownable {
    using SafeMath for uint256;

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isMaxExempt;

    address public autoLiquidityReceiver;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IUniswapV2Router02 public immutable contractRouter;
    address public immutable uniswapV2Pair;

    bool public tradingOpen = false;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 40 / 10000;
    uint256 public swapAmount = _totalSupply * 30 / 10000;

    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Mainnet ETH
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        contractRouter = _uniswapV2Router;

        _allowances[address(this)][address(contractRouter)] = type(uint256).max;

        isFeeExempt[msg.sender] = true;
        isMaxExempt[msg.sender] = true;

        isFeeExempt[marketingWallet] = true;
        isMaxExempt[marketingWallet] = true;

        autoLiquidityReceiver = msg.sender;

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure returns (uint8) { return _decimals; }
    function symbol() external pure returns (string memory) { return _symbol; }
    function name() external pure returns (string memory) { return _name; }
    function getOwner() external view returns (address) { return owner(); }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
    
    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

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

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

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

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        if(sender != owner() && recipient != owner()){
            require(tradingOpen,"Trading not open yet");
        }

        bool inSell = (recipient == uniswapV2Pair);
        bool inTransfer = (recipient != uniswapV2Pair && sender != uniswapV2Pair);

        if (recipient != address(this) && 
            recipient != address(DEAD) && 
            recipient != uniswapV2Pair && 
            recipient != marketingWallet && 
            recipient != treasuryWallet && 
            recipient != autoLiquidityReceiver
        ){
            uint256 heldTokens = balanceOf(recipient);
            if(!isMaxExempt[recipient]) {
                require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");
            }
        }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = amount;

        if(inTransfer) {
            if(transFee > 0) {
                amountReceived = takeTransferFee(sender, amount);
            }
        } else {
            amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount, inSell) : amount;
            
            if(shouldSwapBack()){ swapBack(); }
        }

        _balances[recipient] = _balances[recipient].add(amountReceived);

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function takeTransferFee(address sender, uint256 amount) internal returns (uint256) {

        uint256 feeToTake = transFee;
        uint256 feeAmount = amount.mul(feeToTake).mul(100).div(feeDenominator * 100);
        
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function takeFee(address sender, uint256 amount, bool isSell) internal returns (uint256) {
        uint256 feeToTake;
        feeToTake = isSell ? swapTotalFee : buyTotalFee;

        uint256 feeAmount = amount.mul(feeToTake).mul(100).div(feeDenominator * 100);
        
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != uniswapV2Pair
        && !inSwap
        && _balances[address(this)] >= swapThreshold;
    }

    function clearOverage(uint256 amountPercentage) external {
        uint256 amountETH = address(this).balance;
        payable(marketingWallet).transfer(amountETH * amountPercentage / 100);
    }

    // switch Trading
    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
    }

    function feeOnTransfer(uint256 fee) external onlyOwner() {
        require(transFee <= 20, "Total fee cannot exceed 20");
        transFee = fee;
    }

    function feeOnSell(uint256 _newSwapLpFee, uint256 _newSwapMarketingFee, uint256 _newSwapTreasuryFee, uint256 _feeDenominator) external onlyOwner() {
        uint256 totalFee = _newSwapLpFee.add(_newSwapMarketingFee).add(_newSwapTreasuryFee);
        require(totalFee <= 20, "Total fee cannot exceed 20");
        swapLpFee = _newSwapLpFee;
        swapMarketing = _newSwapMarketingFee;
        swapTreasuryFee = _newSwapTreasuryFee;
        swapTotalFee = totalFee;
        feeDenominator = _feeDenominator;
    }

    function feeOnBuy(uint256 buyTax) external onlyOwner() {
        require(buyTax <= 20, "Total fee cannot exceed 20");
        buyTotalFee = buyTax;
    }

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : swapLpFee;
        uint256 amountToLiquify = swapAmount.mul(dynamicLiquidityFee).div(swapTotalFee).div(2);
        uint256 amountToSwap = swapAmount.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = contractRouter.WETH();

        uint256 balanceBefore = address(this).balance;

        contractRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        uint256 totalETHFee = swapTotalFee.sub(dynamicLiquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH.mul(swapLpFee).div(totalETHFee).div(2);
        uint256 amountETHMarketing = amountETH.mul(swapMarketing).div(totalETHFee);
        uint256 amountETHTreasury = amountETH.mul(swapTreasuryFee).div(totalETHFee);

        (bool tmpSuccess,) = payable(marketingWallet).call{value: amountETHMarketing, gas: 30000}("");
        (tmpSuccess,) = payable(treasuryWallet).call{value: amountETHTreasury, gas: 30000}("");

        // Supress warning msg
        tmpSuccess = false;

        if(amountToLiquify > 0){
            contractRouter.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
    }

    function triggerSwapBack() external onlyOwner {
        swapBack();
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _newMarketingWallet, address _newTreasuryWallet ) external onlyOwner() {

        isFeeExempt[treasuryWallet] = false;
        isFeeExempt[_newTreasuryWallet] = true;
        isFeeExempt[marketingWallet] = false;
        isFeeExempt[_newMarketingWallet] = true;

        isMaxExempt[_newMarketingWallet] = true;

        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingWallet = _newMarketingWallet;
        treasuryWallet = _newTreasuryWallet;
    }

    function setSwapThresholdAmount(uint256 _amount) external onlyOwner() {
        swapThreshold = _amount;
    }

    function setSwapAmount(uint256 _amount) external onlyOwner() {
        if(_amount > swapThreshold) {
            swapAmount = swapThreshold;
        } else {
            swapAmount = _amount;
        }        
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner() {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(uniswapV2Pair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

    event AutoLiquify(uint256 amountETH, uint256 amountBOG);

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearOverage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"}],"name":"feeOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSwapLpFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"feeOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"feeOnTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_newMarketingWallet","type":"address"},{"internalType":"address","name":"_newTreasuryWallet","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapLpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transFee","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":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"triggerSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040525f80546001600160a01b031990811673e6f9be316a8ed7bd122ed139dff746802922347517909155600180549091167383a03c1141299b558e8639c4cb199c37eb8515701781556a01a784379d99db42000000600281905560035560286004819055600555600681905560266007819055600882905562000087908290620003dc565b620000939190620003dc565b6009555f600a556064600b819055600d80546001600160a01b031990811661dead17909155600e80549091169055601480556015556016805461ffff191661010017905560025461271090620000eb906028620003f8565b620000f7919062000412565b601755612710600254601e6200010e9190620003f8565b6200011a919062000412565b60185534801562000129575f80fd5b50620001353362000377565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001b0919062000432565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001fc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000222919062000432565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156200026d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000293919062000432565b6001600160a01b0390811660a0528181166080819052305f9081526010602090815260408083209383529281528282205f1990553380835260118083528484208054600160ff19918216811790925560128086528787208054831684179055865489168752928552868620805482168317905585549097168552908352848420805490961617909455601380546001600160a01b03191685179055600254848352600f8252838320819055925192835290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000461565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115620003f257620003f2620003c8565b92915050565b8082028115828204841417620003f257620003f2620003c8565b5f826200042d57634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121562000443575f80fd5b81516001600160a01b03811681146200045a575f80fd5b9392505050565b60805160a051611bcd620004bb5f395f81816104f501528181610b3c01528181610de201528181610e1b01528181610e8201526117ce01525f8181610566015281816111cc0152818161128401526114740152611bcd5ff3fe60806040526004361061026d575f3560e01c80634dd0e4d31161014a57806395d89b41116100be578063dd62ed3e11610078578063dd62ed3e14610737578063e53c30b01461077b578063e632313c14610790578063f2fde38b146107af578063f53fd584146107ce578063ffb54a99146107e3575f80fd5b806395d89b4114610671578063a9059cbb1461069c578063ca33e64c146106bb578063cf703bb9146106da578063d51ed1c8146106f9578063d7c0103214610718575f80fd5b8063715018a61161010f578063715018a6146105da57806375f0a874146105ee57806378109e541461060c578063893d20e8146106215780638da5cb5b146106355780638e8aaafa14610652575f80fd5b80634dd0e4d314610517578063571ac8b01461053657806367ac77b4146105555780636ddd17131461058857806370a08231146105a6575f80fd5b806329e04b4a116101e157806338d3f64f116101a657806338d3f64f14610450578063456d401a1461046f5780634626402b1461048357806346e421a2146104ba57806347062402146104cf57806349bd5a5e146104e4575f80fd5b806329e04b4a146103d85780632b112e49146103f75780632e8fa8211461040b578063313ce567146104205780633705b3921461043b575f80fd5b80631161ae39116102325780631161ae391461033d578063180b0d7e1461035c57806318160ddd146103715780631e25dc5414610385578063201e79911461039a57806323b872dd146103b9575f80fd5b8063026f7d15146102785780630445b667146102a057806306fdde03146102b5578063095ea7b3146102ed5780630d2959801461031c575f80fd5b3661027457005b5f80fd5b348015610283575f80fd5b5061028d60075481565b6040519081526020015b60405180910390f35b3480156102ab575f80fd5b5061028d60175481565b3480156102c0575f80fd5b5060408051808201909152600781526621b934b6b9b7b760c91b60208201525b604051610297919061181e565b3480156102f8575f80fd5b5061030c61030736600461187e565b6107fc565b6040519015158152602001610297565b348015610327575f80fd5b5061033b6103363660046118a8565b610868565b005b348015610348575f80fd5b5061030c6103573660046118c7565b610883565b348015610367575f80fd5b5061028d600b5481565b34801561037c575f80fd5b5060025461028d565b348015610390575f80fd5b5061028d600a5481565b3480156103a5575f80fd5b5061033b6103b43660046118c7565b610896565b3480156103c4575f80fd5b5061030c6103d33660046118e7565b6108a9565b3480156103e3575f80fd5b5061033b6103f2366004611925565b610967565b348015610402575f80fd5b5061028d610974565b348015610416575f80fd5b5061028d60185481565b34801561042b575f80fd5b5060405160128152602001610297565b348015610446575f80fd5b5061028d60055481565b34801561045b575f80fd5b5061033b61046a366004611925565b6109c4565b34801561047a575f80fd5b5061033b610a14565b34801561048e575f80fd5b506001546104a2906001600160a01b031681565b6040516001600160a01b039091168152602001610297565b3480156104c5575f80fd5b5061028d60065481565b3480156104da575f80fd5b5061028d60045481565b3480156104ef575f80fd5b506104a27f000000000000000000000000000000000000000000000000000000000000000081565b348015610522575f80fd5b5061033b610531366004611925565b610a26565b348015610541575f80fd5b5061030c61055036600461193c565b610a5d565b348015610560575f80fd5b506104a27f000000000000000000000000000000000000000000000000000000000000000081565b348015610593575f80fd5b5060165461030c90610100900460ff1681565b3480156105b1575f80fd5b5061028d6105c036600461193c565b6001600160a01b03165f908152600f602052604090205490565b3480156105e5575f80fd5b5061033b610a69565b3480156105f9575f80fd5b505f546104a2906001600160a01b031681565b348015610617575f80fd5b5061028d60035481565b34801561062c575f80fd5b506104a2610a7a565b348015610640575f80fd5b50600c546001600160a01b03166104a2565b34801561065d575f80fd5b5061033b61066c366004611957565b610a8d565b34801561067c575f80fd5b5060408051808201909152600381526243524d60e81b60208201526102e0565b3480156106a7575f80fd5b5061030c6106b636600461187e565b610ae7565b3480156106c6575f80fd5b506013546104a2906001600160a01b031681565b3480156106e5575f80fd5b5061033b6106f4366004611925565b610af3565b348015610704575f80fd5b5061028d610713366004611925565b610b23565b348015610723575f80fd5b5061033b610732366004611986565b610b88565b348015610742575f80fd5b5061028d6107513660046119ce565b6001600160a01b039182165f90815260106020908152604080832093909416825291909152205490565b348015610786575f80fd5b5061028d60095481565b34801561079b575f80fd5b5061033b6107aa366004611925565b610c28565b3480156107ba575f80fd5b5061033b6107c936600461193c565b610c4c565b3480156107d9575f80fd5b5061028d60085481565b3480156107ee575f80fd5b5060165461030c9060ff1681565b335f8181526010602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108569086815260200190565b60405180910390a35060015b92915050565b610870610cc2565b6016805460ff1916911515919091179055565b5f8261088e83610b23565b119392505050565b61089e610cc2565b601491909155601555565b6001600160a01b0383165f9081526010602090815260408083203384529091528120545f1914610952576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387165f90815260108252838120338252909152919091205461092e918490610d1c565b6001600160a01b0385165f9081526010602090815260408083203384529091529020555b61095d848484610d47565b90505b9392505050565b61096f610cc2565b601755565b600e546001600160a01b03165f908152600f60205260408120546109bf90600d546001600160a01b03165f908152600f60205260409020546109b99060025490611100565b90611100565b905090565b5f5447906001600160a01b03166108fc60646109e08585611a19565b6109ea9190611a30565b6040518115909202915f818181858888f19350505050158015610a0f573d5f803e3d5ffd5b505050565b610a1c610cc2565b610a2461110b565b565b610a2e610cc2565b6014811115610a585760405162461bcd60e51b8152600401610a4f90611a4f565b60405180910390fd5b600555565b5f610862825f196107fc565b610a71610cc2565b610a245f611537565b5f6109bf600c546001600160a01b031690565b610a95610cc2565b5f610aaa83610aa48787611588565b90611588565b90506014811115610acd5760405162461bcd60e51b8152600401610a4f90611a4f565b600694909455600792909255600855600991909155600b55565b5f610960338484610d47565b610afb610cc2565b6014600a541115610b1e5760405162461bcd60e51b8152600401610a4f90611a4f565b600a55565b5f610862610b2f610974565b610b82610b7b6002610b757f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165f908152600f602052604090205490565b90611593565b8590611593565b9061159e565b610b90610cc2565b600180546001600160a01b039081165f908152601160209081526040808320805460ff1990811690915595841680845281842080548816871790558354851684528184208054881690559684168084528184208054881687179055601290925282208054909516841790945560138054969092166001600160a01b031996871617909155805485169092179091558054909216179055565b610c30610cc2565b601754811115610c435760175460185550565b60188190555b50565b610c54610cc2565b6001600160a01b038116610cb95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a4f565b610c4981611537565b600c546001600160a01b03163314610a245760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a4f565b5f8184841115610d3f5760405162461bcd60e51b8152600401610a4f919061181e565b505050900390565b6019545f9060ff1615610d6657610d5f8484846115a9565b9050610960565b600c546001600160a01b03858116911614801590610d925750600c546001600160a01b03848116911614155b15610de05760165460ff16610de05760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610a4f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116908416145f811582610e5057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b90506001600160a01b0385163014801590610e795750600d546001600160a01b03868116911614155b8015610eb757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015610ed057505f546001600160a01b03868116911614155b8015610eea57506001546001600160a01b03868116911614155b8015610f0457506013546001600160a01b03868116911614155b15610fb7576001600160a01b0385165f908152600f602090815260408083205460129092529091205460ff16610fb557600354610f418683611a86565b1115610fb55760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610a4f565b505b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389165f908152600f9091529190912054611008918690610d1c565b6001600160a01b0387165f908152600f602052604090205583811561104157600a541561103c576110398786611679565b90505b611089565b6001600160a01b0387165f9081526011602052604090205460ff16156110675784611072565b611072878685611716565b905061107c6117c2565b156110895761108961110b565b6001600160a01b0386165f908152600f60205260409020546110ab9082611588565b6001600160a01b038088165f818152600f602052604090819020939093559151908916905f80516020611b78833981519152906110eb9085815260200190565b60405180910390a35060019695505050505050565b5f6109608284611a99565b6019805460ff191660011790556014546015545f9161112991610883565b61113557600654611137565b5f5b90505f61115a6002610b82600954610b828660185461159390919063ffffffff16565b90505f6111728260185461110090919063ffffffff16565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f815181106111aa576111aa611aac565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611226573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061124a9190611ac0565b8160018151811061125d5761125d611aac565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b815247917f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906112c19086905f90879030904290600401611adb565b5f604051808303815f87803b1580156112d8575f80fd5b505af11580156112ea573d5f803e3d5ffd5b505050505f611302824761110090919063ffffffff16565b90505f61131c61131388600261159e565b60095490611100565b90505f61133d6002610b8284610b826006548861159390919063ffffffff16565b90505f61135983610b826007548761159390919063ffffffff16565b90505f61137584610b826008548861159390919063ffffffff16565b5f805460405192935090916001600160a01b039091169061753090859084818181858888f193505050503d805f81146113c9576040519150601f19603f3d011682016040523d82523d5f602084013e6113ce565b606091505b50506001546040519192506001600160a01b0316906175309084905f818181858888f193505050503d805f8114611420576040519150601f19603f3d011682016040523d82523d5f602084013e611425565b606091505b505f9250508a1590506115205760135460405163f305d71960e01b8152306004820152602481018c90525f6044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990869060c40160606040518083038185885af11580156114be573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906114e39190611b4c565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506019805460ff19169055505050505050505050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6109608284611a86565b5f6109608284611a19565b5f6109608284611a30565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f908152600f909152918220546115f9918490610d1c565b6001600160a01b038086165f908152600f602052604080822093909355908516815220546116279083611588565b6001600160a01b038085165f818152600f602052604090819020939093559151908616905f80516020611b78833981519152906116679086815260200190565b60405180910390a35060019392505050565b5f80600a5490505f6116a2600b5460646116939190611a19565b610b826064610b758887611593565b305f908152600f60205260409020549091506116be9082611588565b305f818152600f6020526040908190209290925590516001600160a01b038716905f80516020611b78833981519152906116fb9085815260200190565b60405180910390a361170d8482611100565b95945050505050565b5f808261172557600554611729565b6009545b90505f61174d600b54606461173e9190611a19565b610b826064610b758987611593565b305f908152600f60205260409020549091506117699082611588565b305f818152600f6020526040908190209290925590516001600160a01b038816905f80516020611b78833981519152906117a69085815260200190565b60405180910390a36117b88582611100565b9695505050505050565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906117ff575060195460ff16155b80156109bf575050601754305f908152600f6020526040902054101590565b5f602080835283518060208501525f5b8181101561184a5785810183015185820160400152820161182e565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c49575f80fd5b5f806040838503121561188f575f80fd5b823561189a8161186a565b946020939093013593505050565b5f602082840312156118b8575f80fd5b81358015158114610960575f80fd5b5f80604083850312156118d8575f80fd5b50508035926020909101359150565b5f805f606084860312156118f9575f80fd5b83356119048161186a565b925060208401356119148161186a565b929592945050506040919091013590565b5f60208284031215611935575f80fd5b5035919050565b5f6020828403121561194c575f80fd5b81356109608161186a565b5f805f806080858703121561196a575f80fd5b5050823594602084013594506040840135936060013592509050565b5f805f60608486031215611998575f80fd5b83356119a38161186a565b925060208401356119b38161186a565b915060408401356119c38161186a565b809150509250925092565b5f80604083850312156119df575f80fd5b82356119ea8161186a565b915060208301356119fa8161186a565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761086257610862611a05565b5f82611a4a57634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252601a908201527f546f74616c206665652063616e6e6f7420657863656564203230000000000000604082015260600190565b8082018082111561086257610862611a05565b8181038181111561086257610862611a05565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611ad0575f80fd5b81516109608161186a565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015611b2b5784516001600160a01b031683529383019391830191600101611b06565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215611b5e575f80fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212200df8188334b899d4044d0c855309fdda37bb58f29bc0fc1e9075de6f99862b5064736f6c63430008170033

Deployed Bytecode

0x60806040526004361061026d575f3560e01c80634dd0e4d31161014a57806395d89b41116100be578063dd62ed3e11610078578063dd62ed3e14610737578063e53c30b01461077b578063e632313c14610790578063f2fde38b146107af578063f53fd584146107ce578063ffb54a99146107e3575f80fd5b806395d89b4114610671578063a9059cbb1461069c578063ca33e64c146106bb578063cf703bb9146106da578063d51ed1c8146106f9578063d7c0103214610718575f80fd5b8063715018a61161010f578063715018a6146105da57806375f0a874146105ee57806378109e541461060c578063893d20e8146106215780638da5cb5b146106355780638e8aaafa14610652575f80fd5b80634dd0e4d314610517578063571ac8b01461053657806367ac77b4146105555780636ddd17131461058857806370a08231146105a6575f80fd5b806329e04b4a116101e157806338d3f64f116101a657806338d3f64f14610450578063456d401a1461046f5780634626402b1461048357806346e421a2146104ba57806347062402146104cf57806349bd5a5e146104e4575f80fd5b806329e04b4a146103d85780632b112e49146103f75780632e8fa8211461040b578063313ce567146104205780633705b3921461043b575f80fd5b80631161ae39116102325780631161ae391461033d578063180b0d7e1461035c57806318160ddd146103715780631e25dc5414610385578063201e79911461039a57806323b872dd146103b9575f80fd5b8063026f7d15146102785780630445b667146102a057806306fdde03146102b5578063095ea7b3146102ed5780630d2959801461031c575f80fd5b3661027457005b5f80fd5b348015610283575f80fd5b5061028d60075481565b6040519081526020015b60405180910390f35b3480156102ab575f80fd5b5061028d60175481565b3480156102c0575f80fd5b5060408051808201909152600781526621b934b6b9b7b760c91b60208201525b604051610297919061181e565b3480156102f8575f80fd5b5061030c61030736600461187e565b6107fc565b6040519015158152602001610297565b348015610327575f80fd5b5061033b6103363660046118a8565b610868565b005b348015610348575f80fd5b5061030c6103573660046118c7565b610883565b348015610367575f80fd5b5061028d600b5481565b34801561037c575f80fd5b5060025461028d565b348015610390575f80fd5b5061028d600a5481565b3480156103a5575f80fd5b5061033b6103b43660046118c7565b610896565b3480156103c4575f80fd5b5061030c6103d33660046118e7565b6108a9565b3480156103e3575f80fd5b5061033b6103f2366004611925565b610967565b348015610402575f80fd5b5061028d610974565b348015610416575f80fd5b5061028d60185481565b34801561042b575f80fd5b5060405160128152602001610297565b348015610446575f80fd5b5061028d60055481565b34801561045b575f80fd5b5061033b61046a366004611925565b6109c4565b34801561047a575f80fd5b5061033b610a14565b34801561048e575f80fd5b506001546104a2906001600160a01b031681565b6040516001600160a01b039091168152602001610297565b3480156104c5575f80fd5b5061028d60065481565b3480156104da575f80fd5b5061028d60045481565b3480156104ef575f80fd5b506104a27f000000000000000000000000971cffd8c9925d65dac8a6832c655bd7eb24806f81565b348015610522575f80fd5b5061033b610531366004611925565b610a26565b348015610541575f80fd5b5061030c61055036600461193c565b610a5d565b348015610560575f80fd5b506104a27f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610593575f80fd5b5060165461030c90610100900460ff1681565b3480156105b1575f80fd5b5061028d6105c036600461193c565b6001600160a01b03165f908152600f602052604090205490565b3480156105e5575f80fd5b5061033b610a69565b3480156105f9575f80fd5b505f546104a2906001600160a01b031681565b348015610617575f80fd5b5061028d60035481565b34801561062c575f80fd5b506104a2610a7a565b348015610640575f80fd5b50600c546001600160a01b03166104a2565b34801561065d575f80fd5b5061033b61066c366004611957565b610a8d565b34801561067c575f80fd5b5060408051808201909152600381526243524d60e81b60208201526102e0565b3480156106a7575f80fd5b5061030c6106b636600461187e565b610ae7565b3480156106c6575f80fd5b506013546104a2906001600160a01b031681565b3480156106e5575f80fd5b5061033b6106f4366004611925565b610af3565b348015610704575f80fd5b5061028d610713366004611925565b610b23565b348015610723575f80fd5b5061033b610732366004611986565b610b88565b348015610742575f80fd5b5061028d6107513660046119ce565b6001600160a01b039182165f90815260106020908152604080832093909416825291909152205490565b348015610786575f80fd5b5061028d60095481565b34801561079b575f80fd5b5061033b6107aa366004611925565b610c28565b3480156107ba575f80fd5b5061033b6107c936600461193c565b610c4c565b3480156107d9575f80fd5b5061028d60085481565b3480156107ee575f80fd5b5060165461030c9060ff1681565b335f8181526010602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108569086815260200190565b60405180910390a35060015b92915050565b610870610cc2565b6016805460ff1916911515919091179055565b5f8261088e83610b23565b119392505050565b61089e610cc2565b601491909155601555565b6001600160a01b0383165f9081526010602090815260408083203384529091528120545f1914610952576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387165f90815260108252838120338252909152919091205461092e918490610d1c565b6001600160a01b0385165f9081526010602090815260408083203384529091529020555b61095d848484610d47565b90505b9392505050565b61096f610cc2565b601755565b600e546001600160a01b03165f908152600f60205260408120546109bf90600d546001600160a01b03165f908152600f60205260409020546109b99060025490611100565b90611100565b905090565b5f5447906001600160a01b03166108fc60646109e08585611a19565b6109ea9190611a30565b6040518115909202915f818181858888f19350505050158015610a0f573d5f803e3d5ffd5b505050565b610a1c610cc2565b610a2461110b565b565b610a2e610cc2565b6014811115610a585760405162461bcd60e51b8152600401610a4f90611a4f565b60405180910390fd5b600555565b5f610862825f196107fc565b610a71610cc2565b610a245f611537565b5f6109bf600c546001600160a01b031690565b610a95610cc2565b5f610aaa83610aa48787611588565b90611588565b90506014811115610acd5760405162461bcd60e51b8152600401610a4f90611a4f565b600694909455600792909255600855600991909155600b55565b5f610960338484610d47565b610afb610cc2565b6014600a541115610b1e5760405162461bcd60e51b8152600401610a4f90611a4f565b600a55565b5f610862610b2f610974565b610b82610b7b6002610b757f000000000000000000000000971cffd8c9925d65dac8a6832c655bd7eb24806f6001600160a01b03165f908152600f602052604090205490565b90611593565b8590611593565b9061159e565b610b90610cc2565b600180546001600160a01b039081165f908152601160209081526040808320805460ff1990811690915595841680845281842080548816871790558354851684528184208054881690559684168084528184208054881687179055601290925282208054909516841790945560138054969092166001600160a01b031996871617909155805485169092179091558054909216179055565b610c30610cc2565b601754811115610c435760175460185550565b60188190555b50565b610c54610cc2565b6001600160a01b038116610cb95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a4f565b610c4981611537565b600c546001600160a01b03163314610a245760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a4f565b5f8184841115610d3f5760405162461bcd60e51b8152600401610a4f919061181e565b505050900390565b6019545f9060ff1615610d6657610d5f8484846115a9565b9050610960565b600c546001600160a01b03858116911614801590610d925750600c546001600160a01b03848116911614155b15610de05760165460ff16610de05760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610a4f565b7f000000000000000000000000971cffd8c9925d65dac8a6832c655bd7eb24806f6001600160a01b03908116908416145f811582610e5057507f000000000000000000000000971cffd8c9925d65dac8a6832c655bd7eb24806f6001600160a01b0316866001600160a01b031614155b90506001600160a01b0385163014801590610e795750600d546001600160a01b03868116911614155b8015610eb757507f000000000000000000000000971cffd8c9925d65dac8a6832c655bd7eb24806f6001600160a01b0316856001600160a01b031614155b8015610ed057505f546001600160a01b03868116911614155b8015610eea57506001546001600160a01b03868116911614155b8015610f0457506013546001600160a01b03868116911614155b15610fb7576001600160a01b0385165f908152600f602090815260408083205460129092529091205460ff16610fb557600354610f418683611a86565b1115610fb55760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610a4f565b505b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389165f908152600f9091529190912054611008918690610d1c565b6001600160a01b0387165f908152600f602052604090205583811561104157600a541561103c576110398786611679565b90505b611089565b6001600160a01b0387165f9081526011602052604090205460ff16156110675784611072565b611072878685611716565b905061107c6117c2565b156110895761108961110b565b6001600160a01b0386165f908152600f60205260409020546110ab9082611588565b6001600160a01b038088165f818152600f602052604090819020939093559151908916905f80516020611b78833981519152906110eb9085815260200190565b60405180910390a35060019695505050505050565b5f6109608284611a99565b6019805460ff191660011790556014546015545f9161112991610883565b61113557600654611137565b5f5b90505f61115a6002610b82600954610b828660185461159390919063ffffffff16565b90505f6111728260185461110090919063ffffffff16565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f815181106111aa576111aa611aac565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611226573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061124a9190611ac0565b8160018151811061125d5761125d611aac565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b815247917f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906112c19086905f90879030904290600401611adb565b5f604051808303815f87803b1580156112d8575f80fd5b505af11580156112ea573d5f803e3d5ffd5b505050505f611302824761110090919063ffffffff16565b90505f61131c61131388600261159e565b60095490611100565b90505f61133d6002610b8284610b826006548861159390919063ffffffff16565b90505f61135983610b826007548761159390919063ffffffff16565b90505f61137584610b826008548861159390919063ffffffff16565b5f805460405192935090916001600160a01b039091169061753090859084818181858888f193505050503d805f81146113c9576040519150601f19603f3d011682016040523d82523d5f602084013e6113ce565b606091505b50506001546040519192506001600160a01b0316906175309084905f818181858888f193505050503d805f8114611420576040519150601f19603f3d011682016040523d82523d5f602084013e611425565b606091505b505f9250508a1590506115205760135460405163f305d71960e01b8152306004820152602481018c90525f6044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990869060c40160606040518083038185885af11580156114be573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906114e39190611b4c565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506019805460ff19169055505050505050505050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6109608284611a86565b5f6109608284611a19565b5f6109608284611a30565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f908152600f909152918220546115f9918490610d1c565b6001600160a01b038086165f908152600f602052604080822093909355908516815220546116279083611588565b6001600160a01b038085165f818152600f602052604090819020939093559151908616905f80516020611b78833981519152906116679086815260200190565b60405180910390a35060019392505050565b5f80600a5490505f6116a2600b5460646116939190611a19565b610b826064610b758887611593565b305f908152600f60205260409020549091506116be9082611588565b305f818152600f6020526040908190209290925590516001600160a01b038716905f80516020611b78833981519152906116fb9085815260200190565b60405180910390a361170d8482611100565b95945050505050565b5f808261172557600554611729565b6009545b90505f61174d600b54606461173e9190611a19565b610b826064610b758987611593565b305f908152600f60205260409020549091506117699082611588565b305f818152600f6020526040908190209290925590516001600160a01b038816905f80516020611b78833981519152906117a69085815260200190565b60405180910390a36117b88582611100565b9695505050505050565b5f336001600160a01b037f000000000000000000000000971cffd8c9925d65dac8a6832c655bd7eb24806f16148015906117ff575060195460ff16155b80156109bf575050601754305f908152600f6020526040902054101590565b5f602080835283518060208501525f5b8181101561184a5785810183015185820160400152820161182e565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c49575f80fd5b5f806040838503121561188f575f80fd5b823561189a8161186a565b946020939093013593505050565b5f602082840312156118b8575f80fd5b81358015158114610960575f80fd5b5f80604083850312156118d8575f80fd5b50508035926020909101359150565b5f805f606084860312156118f9575f80fd5b83356119048161186a565b925060208401356119148161186a565b929592945050506040919091013590565b5f60208284031215611935575f80fd5b5035919050565b5f6020828403121561194c575f80fd5b81356109608161186a565b5f805f806080858703121561196a575f80fd5b5050823594602084013594506040840135936060013592509050565b5f805f60608486031215611998575f80fd5b83356119a38161186a565b925060208401356119b38161186a565b915060408401356119c38161186a565b809150509250925092565b5f80604083850312156119df575f80fd5b82356119ea8161186a565b915060208301356119fa8161186a565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761086257610862611a05565b5f82611a4a57634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252601a908201527f546f74616c206665652063616e6e6f7420657863656564203230000000000000604082015260600190565b8082018082111561086257610862611a05565b8181038181111561086257610862611a05565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611ad0575f80fd5b81516109608161186a565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015611b2b5784516001600160a01b031683529383019391830191600101611b06565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215611b5e575f80fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212200df8188334b899d4044d0c855309fdda37bb58f29bc0fc1e9075de6f99862b5064736f6c63430008170033

Deployed Bytecode Sourcemap

16749:11165:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16483:38;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;16483:38:0;;;;;;;;17475:56;;;;;;;;;;;;;;;;18733:71;;;;;;;;;;-1:-1:-1;18796:5:0;;;;;;;;;;;;-1:-1:-1;;;18796:5:0;;;;18733:71;;;;;;;:::i;19143:216::-;;;;;;;;;;-1:-1:-1;19143:216:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;19143:216:0;1205:187:1;23439:94:0;;;;;;;;;;-1:-1:-1;23439:94:0;;;;;:::i;:::-;;:::i;:::-;;27695:150;;;;;;;;;;-1:-1:-1;27695:150:0;;;;;:::i;:::-;;:::i;16702:39::-;;;;;;;;;;;;;;;;18481:88;;;;;;;;;;-1:-1:-1;18554:12:0;;18481:88;;16658:37;;;;;;;;;;;;;;;;27169:184;;;;;;;;;;-1:-1:-1;27169:184:0;;;;;:::i;:::-;;:::i;19661:370::-;;;;;;;;;;-1:-1:-1;19661:370:0;;;;;:::i;:::-;;:::i;26820:112::-;;;;;;;;;;-1:-1:-1;26820:112:0;;;;;:::i;:::-;;:::i;27361:142::-;;;;;;;;;;;;;:::i;17538:53::-;;;;;;;;;;;;;;;;18575:71;;;;;;;;;;-1:-1:-1;18575:71:0;;16227:2;2716:36:1;;2704:2;2689:18;18575:71:0;2574:184:1;16390:42:0;;;;;;;;;;;;;;;;23211:197;;;;;;;;;;-1:-1:-1;23211:197:0;;;;;:::i;:::-;;:::i;26186:75::-;;;;;;;;;;;;;:::i;16039:74::-;;;;;;;;;;-1:-1:-1;16039:74:0;;;;-1:-1:-1;;;;;16039:74:0;;;;;;-1:-1:-1;;;;;2927:32:1;;;2909:51;;2897:2;2882:18;16039:74:0;2763:203:1;16439:37:0;;;;;;;;;;;;;;;;16345:38;;;;;;;;;;;;;;;;17351;;;;;;;;;;;;;;;24232:156;;;;;;;;;;-1:-1:-1;24232:156:0;;;;;:::i;:::-;;:::i;19367:122::-;;;;;;;;;;-1:-1:-1;19367:122:0;;;;;:::i;:::-;;:::i;17294:50::-;;;;;;;;;;;;;;;17438:30;;;;;;;;;;-1:-1:-1;17438:30:0;;;;;;;;;;;18887:105;;;;;;;;;;-1:-1:-1;18887:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;18971:18:0;18953:7;18971:18;;;:9;:18;;;;;;;18887:105;5743:103;;;;;;;;;;;;;:::i;15957:75::-;;;;;;;;;;-1:-1:-1;15957:75:0;;;;-1:-1:-1;;;;;15957:75:0;;;16293:45;;;;;;;;;;;;;;;;18810:71;;;;;;;;;;;;;:::i;5102:87::-;;;;;;;;;;-1:-1:-1;5175:6:0;;-1:-1:-1;;;;;5175:6:0;5102:87;;23703:521;;;;;;;;;;-1:-1:-1;23703:521:0;;;;;:::i;:::-;;:::i;18652:75::-;;;;;;;;;;-1:-1:-1;18717:7:0;;;;;;;;;;;;-1:-1:-1;;;18717:7:0;;;;18652:75;;19497:156;;;;;;;;;;-1:-1:-1;19497:156:0;;;;;:::i;:::-;;:::i;17165:36::-;;;;;;;;;;-1:-1:-1;17165:36:0;;;;-1:-1:-1;;;;;17165:36:0;;;23541:154;;;;;;;;;;-1:-1:-1;23541:154:0;;;;;:::i;:::-;;:::i;27511:176::-;;;;;;;;;;-1:-1:-1;27511:176:0;;;;;:::i;:::-;;:::i;26269:543::-;;;;;;;;;;-1:-1:-1;26269:543:0;;;;;:::i;:::-;;:::i;18998:133::-;;;;;;;;;;-1:-1:-1;18998:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;19100:19:0;;;19082:7;19100:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;18998:133;16572:79;;;;;;;;;;;;;;;;26940:221;;;;;;;;;;-1:-1:-1;26940:221:0;;;;;:::i;:::-;;:::i;6001:201::-;;;;;;;;;;-1:-1:-1;6001:201:0;;;;;:::i;:::-;;:::i;16528:37::-;;;;;;;;;;;;;;;;17398:31;;;;;;;;;;-1:-1:-1;17398:31:0;;;;;;;;19143:216;19247:10;19218:4;19235:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;19235:32:0;;;;;;;;;;:41;;;19292:37;19218:4;;19235:32;;19292:37;;;;19270:6;160:25:1;;148:2;133:18;;14:177;19292:37:0;;;;;;;;-1:-1:-1;19347:4:0;19143:216;;;;;:::o;23439:94::-;4988:13;:11;:13::i;:::-;23504:11:::1;:21:::0;;-1:-1:-1;;23504:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23439:94::o;27695:150::-;27775:4;27831:6;27799:29;27819:8;27799:19;:29::i;:::-;:38;;27695:150;-1:-1:-1;;;27695:150:0:o;27169:184::-;4988:13;:11;:13::i;:::-;27268:15:::1;:25:::0;;;;27304:26:::1;:41:::0;27169:184::o;19661:370::-;-1:-1:-1;;;;;19781:19:0;;19761:4;19781:19;;;:11;:19;;;;;;;;19801:10;19781:31;;;;;;;;-1:-1:-1;;19781:52:0;19778:186;;19883:69;;;;;;;;;;;-1:-1:-1;;;19883:69:0;;;;;;;;-1:-1:-1;;;;;19883:19:0;;-1:-1:-1;19883:19:0;;;:11;:19;;;;;19903:10;19883:31;;;;;;;;;;:69;;19919:6;;19883:35;:69::i;:::-;-1:-1:-1;;;;;19849:19:0;;;;;;:11;:19;;;;;;;;19869:10;19849:31;;;;;;;:103;19778:186;19983:40;19997:6;20005:9;20016:6;19983:13;:40::i;:::-;19976:47;;19661:370;;;;;;:::o;26820:112::-;4988:13;:11;:13::i;:::-;26901::::1;:23:::0;26820:112::o;27361:142::-;27489:4;;-1:-1:-1;;;;;27489:4:0;27414:7;18971:18;;;:9;:18;;;;;;27441:54;;27468:4;;-1:-1:-1;;;;;27468:4:0;18953:7;18971:18;;;:9;:18;;;;;;27441:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;27434:61;;27361:142;:::o;23211:197::-;23279:17;23339:15;23299:21;;-1:-1:-1;;;;;23339:15:0;23331:69;23396:3;23365:28;23377:16;23299:21;23365:28;:::i;:::-;:34;;;;:::i;:::-;23331:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23268:140;23211:197;:::o;26186:75::-;4988:13;:11;:13::i;:::-;26243:10:::1;:8;:10::i;:::-;26186:75::o:0;24232:156::-;4988:13;:11;:13::i;:::-;24316:2:::1;24306:6;:12;;24298:51;;;;-1:-1:-1::0;;;24298:51:0::1;;;;;;;:::i;:::-;;;;;;;;;24360:11;:20:::0;24232:156::o;19367:122::-;19422:4;19446:35;19454:7;-1:-1:-1;;19446:7:0;:35::i;5743:103::-;4988:13;:11;:13::i;:::-;5808:30:::1;5835:1;5808:18;:30::i;18810:71::-:0;18853:7;18871;5175:6;;-1:-1:-1;;;;;5175:6:0;;5102:87;23703:521;4988:13;:11;:13::i;:::-;23861:16:::1;23880:64;23924:19:::0;23880:39:::1;:13:::0;23898:20;23880:17:::1;:39::i;:::-;:43:::0;::::1;:64::i;:::-;23861:83;;23975:2;23963:8;:14;;23955:53;;;;-1:-1:-1::0;;;23955:53:0::1;;;;;;;:::i;:::-;24019:9;:25:::0;;;;24055:13:::1;:36:::0;;;;24102:15:::1;:37:::0;24150:12:::1;:23:::0;;;;24184:14:::1;:32:::0;23703:521::o;19497:156::-;19577:4;19601:44;19615:10;19627:9;19638:6;19601:13;:44::i;23541:154::-;4988:13;:11;:13::i;:::-;23629:2:::1;23617:8;;:14;;23609:53;;;;-1:-1:-1::0;;;23609:53:0::1;;;;;;;:::i;:::-;23673:8;:14:::0;23541:154::o;27511:176::-;27579:7;27606:73;27656:22;:20;:22::i;:::-;27606:45;27619:31;27648:1;27619:24;27629:13;-1:-1:-1;;;;;18971:18:0;18953:7;18971:18;;;:9;:18;;;;;;;18887:105;27619:24;:28;;:31::i;:::-;27606:8;;:12;:45::i;:::-;:49;;:73::i;26269:543::-;4988:13;:11;:13::i;:::-;26430:14:::1;::::0;;-1:-1:-1;;;;;26430:14:0;;::::1;26448:5;26418:27:::0;;;:11:::1;:27;::::0;;;;;;;:35;;-1:-1:-1;;26418:35:0;;::::1;::::0;;;26464:31;;::::1;::::0;;;;;;:38;;;::::1;::::0;::::1;::::0;;26525:15;;;::::1;26513:28:::0;;;;;:36;;;::::1;::::0;;26560:32;;::::1;::::0;;;;;;:39;;;::::1;::::0;::::1;::::0;;26612:11:::1;:32:::0;;;;;:39;;;;::::1;::::0;::::1;::::0;;;26664:21:::1;:46:::0;;;;;::::1;-1:-1:-1::0;;;;;;26664:46:0;;::::1;;::::0;;;26721:37;;;::::1;::::0;;::::1;::::0;;;26769:35;;;;::::1;;::::0;;26269:543::o;26940:221::-;4988:13;:11;:13::i;:::-;27025::::1;;27015:7;:23;27012:134;;;27068:13;::::0;27055:10:::1;:26:::0;26940:221;:::o;27012:134::-:1;27114:10;:20:::0;;;27012:134:::1;26940:221:::0;:::o;6001:201::-;4988:13;:11;:13::i;:::-;-1:-1:-1;;;;;6090:22:0;::::1;6082:73;;;::::0;-1:-1:-1;;;6082:73:0;;5859:2:1;6082:73:0::1;::::0;::::1;5841:21:1::0;5898:2;5878:18;;;5871:30;5937:34;5917:18;;;5910:62;-1:-1:-1;;;5988:18:1;;;5981:36;6034:19;;6082:73:0::1;5657:402:1::0;6082:73:0::1;6166:28;6185:8;6166:18;:28::i;5267:132::-:0;5175:6;;-1:-1:-1;;;;;5175:6:0;3733:10;5331:23;5323:68;;;;-1:-1:-1;;;5323:68:0;;6266:2:1;5323:68:0;;;6248:21:1;;;6285:18;;;6278:30;6344:34;6324:18;;;6317:62;6396:18;;5323:68:0;6064:356:1;7180:240:0;7300:7;7361:12;7353:6;;;;7345:29;;;;-1:-1:-1;;;7345:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;7396:5:0;;;7180:240::o;20039:1634::-;20151:6;;20131:4;;20151:6;;20148:63;;;20167:41;20182:6;20190:9;20201:6;20167:14;:41::i;:::-;20160:48;;;;20148:63;5175:6;;-1:-1:-1;;;;;20226:17:0;;;5175:6;;20226:17;;;;:41;;-1:-1:-1;5175:6:0;;-1:-1:-1;;;;;20247:20:0;;;5175:6;;20247:20;;20226:41;20223:115;;;20291:11;;;;20283:43;;;;-1:-1:-1;;;20283:43:0;;6627:2:1;20283:43:0;;;6609:21:1;6666:2;6646:18;;;6639:30;-1:-1:-1;;;6685:18:1;;;6678:50;6745:18;;20283:43:0;6425:344:1;20283:43:0;20378:13;-1:-1:-1;;;;;20365:26:0;;;;;;;20350:11;20422:26;;20365;20422:53;;;20462:13;-1:-1:-1;;;;;20452:23:0;:6;-1:-1:-1;;;;;20452:23:0;;;20422:53;20403:73;-1:-1:-1;;;;;;20493:26:0;;20514:4;20493:26;;;;:70;;-1:-1:-1;20558:4:0;;-1:-1:-1;;;;;20537:26:0;;;20558:4;;20537:26;;20493:70;:114;;;;;20594:13;-1:-1:-1;;;;;20581:26:0;:9;-1:-1:-1;;;;;20581:26:0;;;20493:114;:160;;;;-1:-1:-1;20638:15:0;;-1:-1:-1;;;;;20625:28:0;;;20638:15;;20625:28;;20493:160;:205;;;;-1:-1:-1;20684:14:0;;-1:-1:-1;;;;;20671:27:0;;;20684:14;;20671:27;;20493:205;:257;;;;-1:-1:-1;20729:21:0;;-1:-1:-1;;;;;20716:34:0;;;20729:21;;20716:34;;20493:257;20489:531;;;-1:-1:-1;;;;;18971:18:0;;20776;18971;;;:9;:18;;;;;;;;;20836:11;:22;;;;;;;;;20832:177;;20912:15;;20888:19;20901:6;20888:10;:19;:::i;:::-;20887:40;;20879:114;;;;-1:-1:-1;;;20879:114:0;;7106:2:1;20879:114:0;;;7088:21:1;7145:2;7125:18;;;7118:30;7184:34;7164:18;;;7157:62;7255:32;7235:18;;;7228:60;7305:19;;20879:114:0;6904:426:1;20879:114:0;20761:259;20489:531;21079:53;;;;;;;;;;;-1:-1:-1;;;21079:53:0;;;;;;;;-1:-1:-1;;;;;21079:17:0;;-1:-1:-1;21079:17:0;;;:9;:17;;;;;;;;:53;;21101:6;;21079:21;:53::i;:::-;-1:-1:-1;;;;;21059:17:0;;;;;;:9;:17;;;;;:73;21170:6;21189:318;;;;21222:8;;:12;21219:100;;21272:31;21288:6;21296;21272:15;:31::i;:::-;21255:48;;21219:100;21189:318;;;-1:-1:-1;;;;;22106:19:0;;22081:4;22106:19;;;:11;:19;;;;;;;;22105:20;21368:64;;21426:6;21368:64;;;21392:31;21400:6;21408;21416;21392:7;:31::i;:::-;21351:81;;21464:16;:14;:16::i;:::-;21461:35;;;21483:10;:8;:10::i;:::-;-1:-1:-1;;;;;21542:20:0;;;;;;:9;:20;;;;;;:40;;21567:14;21542:24;:40::i;:::-;-1:-1:-1;;;;;21519:20:0;;;;;;;:9;:20;;;;;;;:63;;;;21600:43;;;;;;-1:-1:-1;;;;;;;;;;;21600:43:0;;;21628:14;160:25:1;;148:2;133:18;;14:177;21600:43:0;;;;;;;;-1:-1:-1;21661:4:0;;20039:1634;-1:-1:-1;;;;;;20039:1634:0:o;6756:98::-;6814:7;6841:5;6845:1;6841;:5;:::i;24396:1782::-;17640:6;:13;;-1:-1:-1;;17640:13:0;17649:4;17640:13;;;24491:15:::1;::::0;24508:26:::1;::::0;17640:6;;24475:60:::1;::::0;:15:::1;:60::i;:::-;:76;;24542:9;;24475:76;;;24538:1;24475:76;24445:106;;24562:23;24588:60;24646:1;24588:53;24628:12;;24588:35;24603:19;24588:10;;:14;;:35;;;;:::i;:60::-;24562:86;;24659:20;24682:31;24697:15;24682:10;;:14;;:31;;;;:::i;:::-;24750:16;::::0;;24764:1:::1;24750:16:::0;;;;;::::1;::::0;;24659:54;;-1:-1:-1;24726:21:0::1;::::0;24750:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24750:16:0::1;24726:40;;24795:4;24777;24782:1;24777:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;24777:23:0::1;;;-1:-1:-1::0;;;;;24777:23:0::1;;;::::0;::::1;24821:14;-1:-1:-1::0;;;;;24821:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24811:4;24816:1;24811:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24811:31:0;;::::1;:7;::::0;;::::1;::::0;;;;;:31;24913:196:::1;::::0;-1:-1:-1;;;24913:196:0;;24879:21:::1;::::0;24913:14:::1;:65;::::0;::::1;::::0;:196:::1;::::0;24993:12;;24855:21:::1;::::0;25036:4;;25063::::1;::::0;25083:15:::1;::::0;24913:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25122:17;25142:40;25168:13;25142:21;:25;;:40;;;;:::i;:::-;25122:60:::0;-1:-1:-1;25195:19:0::1;25217:44;25234:26;:19:::0;25258:1:::1;25234:23;:26::i;:::-;25217:12;::::0;;:16:::1;:44::i;:::-;25195:66;;25274:26;25303:48;25349:1;25303:41;25332:11;25303:24;25317:9;;25303;:13;;:24;;;;:::i;:48::-;25274:77;;25362:26;25391:45;25424:11;25391:28;25405:13;;25391:9;:13;;:28;;;;:::i;:45::-;25362:74;;25447:25;25475:47;25510:11;25475:30;25489:15;;25475:9;:13;;:30;;;;:::i;:47::-;25536:15;25564::::0;;25556:72:::1;::::0;25447:75;;-1:-1:-1;25536:15:0;;-1:-1:-1;;;;;25564:15:0;;::::1;::::0;25618:5:::1;::::0;25593:18;;25536:15;25556:72;25536:15;25556:72;25593:18;25564:15;25618:5;25556:72:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;25663:14:0::1;::::0;25655:70:::1;::::0;25535:93;;-1:-1:-1;;;;;;25663:14:0::1;::::0;25715:5:::1;::::0;25691:17;;25655:70:::1;::::0;;;25691:17;25663:14;25715:5;25655:70:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;25783:5:0::1;::::0;-1:-1:-1;;25804:19:0;;;-1:-1:-1;25801:370:0::1;;26021:21;::::0;25839:252:::1;::::0;-1:-1:-1;;;25839:252:0;;25923:4:::1;25839:252;::::0;::::1;9524:34:1::0;9574:18;;;9567:34;;;-1:-1:-1;9617:18:1;;;9610:34;;;9660:18;;;9653:34;-1:-1:-1;;;;;26021:21:0;;::::1;9703:19:1::0;;;9696:44;26061:15:0::1;9756:19:1::0;;;9749:35;25839:14:0::1;:30:::0;;::::1;::::0;::::1;::::0;25877:18;;9458:19:1;;25839:252:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;26111:48:0::1;::::0;;10280:25:1;;;10336:2;10321:18;;10314:34;;;26111:48:0::1;::::0;-1:-1:-1;10253:18:1;26111:48:0::1;;;;;;;25801:370;-1:-1:-1::0;;17658:6:0;:14;;-1:-1:-1;;17658:14:0;;;-1:-1:-1;;;;;;;;;24396:1782:0:o;6362:191::-;6455:6;;;-1:-1:-1;;;;;6472:17:0;;;-1:-1:-1;;;;;;6472:17:0;;;;;;;6505:40;;6455:6;;;6472:17;6455:6;;6505:40;;6436:16;;6505:40;6425:128;6362:191;:::o;6650:98::-;6708:7;6735:5;6739:1;6735;:5;:::i;6862:98::-;6920:7;6947:5;6951:1;6947;:5;:::i;6968:98::-;7026:7;7053:5;7057:1;7053;:5;:::i;21681:330::-;21811:53;;;;;;;;;;;-1:-1:-1;;;21811:53:0;;;;;;;;-1:-1:-1;;;;;21811:17:0;;21774:4;21811:17;;;:9;:17;;;;;;;:53;;21833:6;;21811:21;:53::i;:::-;-1:-1:-1;;;;;21791:17:0;;;;;;;:9;:17;;;;;;:73;;;;21898:20;;;;;;;:32;;21923:6;21898:24;:32::i;:::-;-1:-1:-1;;;;;21875:20:0;;;;;;;:9;:20;;;;;;;:55;;;;21946:35;;;;;;-1:-1:-1;;;;;;;;;;;21946:35:0;;;21974:6;160:25:1;;148:2;133:18;;14:177;21946:35:0;;;;;;;;-1:-1:-1;21999:4:0;21681:330;;;;;:::o;22141:406::-;22216:7;22238:17;22258:8;;22238:28;;22277:17;22297:56;22332:14;;22349:3;22332:20;;;;:::i;:::-;22297:30;22323:3;22297:21;:6;22308:9;22297:10;:21::i;:56::-;22419:4;22401:24;;;;:9;:24;;;;;;22277:76;;-1:-1:-1;22401:39:0;;22277:76;22401:28;:39::i;:::-;22392:4;22374:24;;;;:9;:24;;;;;;;:66;;;;22456:42;;-1:-1:-1;;;;;22456:42:0;;;-1:-1:-1;;;;;;;;;;;22456:42:0;;;22488:9;160:25:1;;148:2;133:18;;14:177;22456:42:0;;;;;;;;22518:21;:6;22529:9;22518:10;:21::i;:::-;22511:28;22141:406;-1:-1:-1;;;;;22141:406:0:o;22555:458::-;22635:7;22655:17;22695:6;:35;;22719:11;;22695:35;;;22704:12;;22695:35;22683:47;;22743:17;22763:56;22798:14;;22815:3;22798:20;;;;:::i;:::-;22763:30;22789:3;22763:21;:6;22774:9;22763:10;:21::i;:56::-;22885:4;22867:24;;;;:9;:24;;;;;;22743:76;;-1:-1:-1;22867:39:0;;22743:76;22867:28;:39::i;:::-;22858:4;22840:24;;;;:9;:24;;;;;;;:66;;;;22922:42;;-1:-1:-1;;;;;22922:42:0;;;-1:-1:-1;;;;;;;;;;;22922:42:0;;;22954:9;160:25:1;;148:2;133:18;;14:177;22922:42:0;;;;;;;;22984:21;:6;22995:9;22984:10;:21::i;:::-;22977:28;22555:458;-1:-1:-1;;;;;;22555:458:0:o;23021:182::-;23070:4;23094:10;-1:-1:-1;;;;;23108:13:0;23094:27;;;;;:47;;-1:-1:-1;23135:6:0;;;;23134:7;23094:47;:101;;;;-1:-1:-1;;23182:13:0;;23172:4;23154:24;;;;:9;:24;;;;;;:41;;;23021:182::o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:273::-;1453:6;1506:2;1494:9;1485:7;1481:23;1477:32;1474:52;;;1522:1;1519;1512:12;1474:52;1561:9;1548:23;1614:5;1607:13;1600:21;1593:5;1590:32;1580:60;;1636:1;1633;1626:12;1675:248;1743:6;1751;1804:2;1792:9;1783:7;1779:23;1775:32;1772:52;;;1820:1;1817;1810:12;1772:52;-1:-1:-1;;1843:23:1;;;1913:2;1898:18;;;1885:32;;-1:-1:-1;1675:248:1:o;1928:456::-;2005:6;2013;2021;2074:2;2062:9;2053:7;2049:23;2045:32;2042:52;;;2090:1;2087;2080:12;2042:52;2129:9;2116:23;2148:31;2173:5;2148:31;:::i;:::-;2198:5;-1:-1:-1;2255:2:1;2240:18;;2227:32;2268:33;2227:32;2268:33;:::i;:::-;1928:456;;2320:7;;-1:-1:-1;;;2374:2:1;2359:18;;;;2346:32;;1928:456::o;2389:180::-;2448:6;2501:2;2489:9;2480:7;2476:23;2472:32;2469:52;;;2517:1;2514;2507:12;2469:52;-1:-1:-1;2540:23:1;;2389:180;-1:-1:-1;2389:180:1:o;2971:247::-;3030:6;3083:2;3071:9;3062:7;3058:23;3054:32;3051:52;;;3099:1;3096;3089:12;3051:52;3138:9;3125:23;3157:31;3182:5;3157:31;:::i;3458:385::-;3544:6;3552;3560;3568;3621:3;3609:9;3600:7;3596:23;3592:33;3589:53;;;3638:1;3635;3628:12;3589:53;-1:-1:-1;;3661:23:1;;;3731:2;3716:18;;3703:32;;-1:-1:-1;3782:2:1;3767:18;;3754:32;;3833:2;3818:18;3805:32;;-1:-1:-1;3458:385:1;-1:-1:-1;3458:385:1:o;3848:529::-;3925:6;3933;3941;3994:2;3982:9;3973:7;3969:23;3965:32;3962:52;;;4010:1;4007;4000:12;3962:52;4049:9;4036:23;4068:31;4093:5;4068:31;:::i;:::-;4118:5;-1:-1:-1;4175:2:1;4160:18;;4147:32;4188:33;4147:32;4188:33;:::i;:::-;4240:7;-1:-1:-1;4299:2:1;4284:18;;4271:32;4312:33;4271:32;4312:33;:::i;:::-;4364:7;4354:17;;;3848:529;;;;;:::o;4382:388::-;4450:6;4458;4511:2;4499:9;4490:7;4486:23;4482:32;4479:52;;;4527:1;4524;4517:12;4479:52;4566:9;4553:23;4585:31;4610:5;4585:31;:::i;:::-;4635:5;-1:-1:-1;4692:2:1;4677:18;;4664:32;4705:33;4664:32;4705:33;:::i;:::-;4757:7;4747:17;;;4382:388;;;;;:::o;4775:127::-;4836:10;4831:3;4827:20;4824:1;4817:31;4867:4;4864:1;4857:15;4891:4;4888:1;4881:15;4907:168;4980:9;;;5011;;5028:15;;;5022:22;;5008:37;4998:71;;5049:18;;:::i;5080:217::-;5120:1;5146;5136:132;;5190:10;5185:3;5181:20;5178:1;5171:31;5225:4;5222:1;5215:15;5253:4;5250:1;5243:15;5136:132;-1:-1:-1;5282:9:1;;5080:217::o;5302:350::-;5504:2;5486:21;;;5543:2;5523:18;;;5516:30;5582:28;5577:2;5562:18;;5555:56;5643:2;5628:18;;5302:350::o;6774:125::-;6839:9;;;6860:10;;;6857:36;;;6873:18;;:::i;7335:128::-;7402:9;;;7423:11;;;7420:37;;;7437:18;;:::i;7600:127::-;7661:10;7656:3;7652:20;7649:1;7642:31;7692:4;7689:1;7682:15;7716:4;7713:1;7706:15;7732:251;7802:6;7855:2;7843:9;7834:7;7830:23;7826:32;7823:52;;;7871:1;7868;7861:12;7823:52;7903:9;7897:16;7922:31;7947:5;7922:31;:::i;7988:980::-;8250:4;8298:3;8287:9;8283:19;8329:6;8318:9;8311:25;8355:2;8393:6;8388:2;8377:9;8373:18;8366:34;8436:3;8431:2;8420:9;8416:18;8409:31;8460:6;8495;8489:13;8526:6;8518;8511:22;8564:3;8553:9;8549:19;8542:26;;8603:2;8595:6;8591:15;8577:29;;8624:1;8634:195;8648:6;8645:1;8642:13;8634:195;;;8713:13;;-1:-1:-1;;;;;8709:39:1;8697:52;;8804:15;;;;8769:12;;;;8745:1;8663:9;8634:195;;;-1:-1:-1;;;;;;;8885:32:1;;;;8880:2;8865:18;;8858:60;-1:-1:-1;;;8949:3:1;8934:19;8927:35;8846:3;7988:980;-1:-1:-1;;;7988:980:1:o;9795:306::-;9883:6;9891;9899;9952:2;9940:9;9931:7;9927:23;9923:32;9920:52;;;9968:1;9965;9958:12;9920:52;9997:9;9991:16;9981:26;;10047:2;10036:9;10032:18;10026:25;10016:35;;10091:2;10080:9;10076:18;10070:25;10060:35;;9795:306;;;;;:::o

Swarm Source

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