ETH Price: $3,421.02 (-1.00%)
Gas: 8 Gwei

Token

RIADA Live (RIADA)
 

Overview

Max Total Supply

100,000,000 RIADA

Holders

168

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.238217324 RIADA

Value
$0.00
0xa30b673453694396844e743ba038735679fecf3c
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:
ProofNonReflectionTokenCutter

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 10 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

File 2 of 10 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.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 3 of 10 : IDividendDistributor.sol
// SPDX-License-Identifier: None
pragma solidity = 0.8.17;

interface IDividendDistributor {
    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external;

    function setShare(address shareholder, uint256 amount) external;

    function deposit() external payable;

    function process(uint256 gas) external;
}

File 4 of 10 : IFACTORY.sol
// SPDX-License-Identifier: None
pragma solidity = 0.8.17;

interface IFACTORY {
    function factoryRevenue() external payable;
}

File 5 of 10 : IUniswapV2Factory.sol
// SPDX-License-Identifier: None
pragma solidity = 0.8.17;

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

File 6 of 10 : IUniswapV2Router02.sol
// SPDX-License-Identifier: None
pragma solidity = 0.8.17;

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

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

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);
}

File 7 of 10 : Context.sol
// SPDX-License-Identifier: None
pragma solidity = 0.8.17;

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 8 of 10 : Ownable.sol
// SPDX-License-Identifier: None
pragma solidity = 0.8.17;

import "./Context.sol";

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 anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing 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 9 of 10 : ProofNonReflectionTokenFees.sol
// SPDX-License-Identifier: None
pragma solidity = 0.8.17;

library ProofNonReflectionTokenFees {
    struct allFees {
        uint256 mainFee;
        uint256 mainFeeOnSell;
        uint256 lpFee;
        uint256 lpFeeOnSell;
        uint256 devFee;
        uint256 devFeeOnSell;
    }
}

File 10 of 10 : ProofNonReflectionTokenCutter.sol
// SPDX-License-Identifier: None
pragma solidity = 0.8.17;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import "../libraries/Ownable.sol";
import "../libraries/Context.sol";
import "../libraries/ProofNonReflectionTokenFees.sol";
import "../interfaces/IFACTORY.sol";
import "../interfaces/IDividendDistributor.sol";
import "../interfaces/IUniswapV2Router02.sol";
import "../interfaces/IUniswapV2Factory.sol";
//import "hardhat/console.sol";

contract ProofNonReflectionTokenCutter is Context, IERC20, IERC20Metadata {
    //This token was created with PROOF, and audited by Solidity Finance — https://proofpatform.io/discover
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant ZERO = 0x0000000000000000000000000000000000000000;
    address payable public proofBurnerAddress;
    address public proofAdmin;

    bool public restrictWhales = true;

    mapping(address => bool) public isFeeExempt;
    mapping(address => bool) public isTxLimitExempt;
    mapping(address => bool) public isDividendExempt;

    uint256 public launchedAt;
    uint256 public proofFee = 2;

    uint256 public mainFee;
    uint256 public lpFee;
    uint256 public devFee;

    uint256 public mainFeeOnSell;
    uint256 public lpFeeOnSell;
    uint256 public devFeeOnSell;

    uint256 public totalFee;
    uint256 public totalFeeIfSelling;

    IUniswapV2Router02 public router;
    address public pair;
    address public factory;
    address public tokenOwner;
    address payable public devWallet;
    address payable public mainWallet;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public tradingStatus = true;

    mapping(address => bool) public bots;

    uint256 public _maxTxAmount;
    uint256 public _walletMax;
    uint256 public swapThreshold;

    constructor() {
        factory = msg.sender;
    }

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

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

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

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

    function setBasicData(
        string memory tokenName,
        string memory tokenSymbol,
        uint256 initialSupply,
        uint percentToLP,
        address owner,
        address dev,
        address main,
        address routerAddress,
        address initialProofAdmin,
        ProofNonReflectionTokenFees.allFees memory fees
    ) external onlyFactory {
        _name = tokenName;
        _symbol = tokenSymbol;
        _totalSupply = initialSupply;

        //Tx & Wallet Limits
        require (percentToLP >= 70, "low lp percent");
        _maxTxAmount = (initialSupply * 5) / 1000;
        _walletMax = (initialSupply * 1) / 100;
        swapThreshold = (initialSupply * 5) / 4000;

        router = IUniswapV2Router02(routerAddress);
        pair = IUniswapV2Factory(router.factory()).createPair(
            router.WETH(),
            address(this)
        );

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

        isFeeExempt[address(this)] = true;
        isFeeExempt[factory] = true;
        isFeeExempt[owner] = true;

        isTxLimitExempt[owner] = true;
        isTxLimitExempt[pair] = true;
        isTxLimitExempt[factory] = true;
        isTxLimitExempt[DEAD] = true;
        isTxLimitExempt[ZERO] = true;

        //Fees
        lpFee = fees.lpFee;
        lpFeeOnSell = fees.lpFeeOnSell;
        devFee = fees.devFee;
        devFeeOnSell = fees.devFeeOnSell;
        mainFee = fees.mainFee;
        mainFeeOnSell = fees.mainFeeOnSell;

        totalFee = devFee + lpFee + mainFee + proofFee;
        totalFeeIfSelling = devFeeOnSell + lpFeeOnSell + mainFeeOnSell + proofFee;

        require(totalFee <= 12, "Too high fee");
        require(totalFeeIfSelling <= 17, "Too high sell fee");

        tokenOwner = owner;
        devWallet = payable(dev);
        mainWallet = payable(main);
        proofAdmin = initialProofAdmin;

        //Initial supply
        uint256 forLP = (initialSupply * percentToLP) / 100; //95%
        uint256 forOwner = initialSupply - forLP; //5%

        _balances[msg.sender] += forLP;
        _balances[owner] += forOwner;

        emit Transfer(address(0), msg.sender, forLP);
        emit Transfer(address(0), owner, forOwner);
    }

    //proofAdmin functions
    function updateProofAdmin(address newAdmin) external virtual onlyProofAdmin {
        proofAdmin = newAdmin;
    }

    function updateProofBurnerAddress(address newproofBurnerAddress)
        external
        onlyProofAdmin
    {
        proofBurnerAddress = payable(newproofBurnerAddress);
    }

    function setBots(address[] memory bots_) external onlyProofAdmin {
        for (uint256 i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }

    //Factory functions
    function swapTradingStatus() external onlyFactory {
        tradingStatus = !tradingStatus;
    }

    function setLaunchedAt() external onlyFactory {
        require(launchedAt == 0, "already launched");
        launchedAt = block.timestamp;
    }

    function cancelToken() external onlyFactory {
        isFeeExempt[address(router)] = true;
        isTxLimitExempt[address(router)] = true;
        isTxLimitExempt[tokenOwner] = true;
        tradingStatus = true;
    }

    //Owner functions
    function changeFees(
        uint256 initialMainFee,
        uint256 initialMainFeeOnSell,
        uint256 initialLpFee,
        uint256 initialLpFeeOnSell,
        uint256 initialDevFee,
        uint256 initialDevFeeOnSell
    ) external onlyOwner {
        mainFee = initialMainFee;
        lpFee = initialLpFee;
        devFee = initialDevFee;

        mainFeeOnSell = initialMainFeeOnSell;
        lpFeeOnSell = initialLpFeeOnSell;
        devFeeOnSell = initialDevFeeOnSell;

        totalFee = devFee + lpFee + proofFee + mainFee;
        totalFeeIfSelling = devFeeOnSell + lpFeeOnSell +proofFee + mainFeeOnSell;

        require(totalFee <= 12, "Too high fee");
        require(totalFeeIfSelling <= 17, "Too high fee");
    }

    function changeTxLimit(uint256 newLimit) external onlyOwner {
        require(launchedAt != 0, "!launched");
        require(newLimit >= (_totalSupply * 5) / 1000, "Mmin 0.5% limit");
        require(newLimit <= (_totalSupply * 3) / 100, "Max 3% limit");
        _maxTxAmount = newLimit;
    }

    function changeWalletLimit(uint256 newLimit) external onlyOwner {
        require(launchedAt != 0, "!launched");
        require(newLimit >= (_totalSupply * 5) / 1000, "Mmin 0.5% limit");
        require(newLimit <= (_totalSupply * 3) / 100, "Max 3% limit");
        _walletMax = newLimit;
    }

    function changeRestrictWhales(bool newValue) external onlyOwner {
        require(launchedAt != 0, "!launched");
        require(block.timestamp >= launchedAt + 24 hours, "too soon");
        restrictWhales = newValue;
    }

    function changeIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function changeIsTxLimitExempt(address holder, bool exempt)
        external
        onlyOwner
    {
        require(launchedAt != 0, "!launched");
        require(block.timestamp >= launchedAt + 24 hours, "too soon");
        isTxLimitExempt[holder] = exempt;
    }

    function reduceProofFee() external onlyOwner {
        require(proofFee == 2, "!already reduced");
        require(launchedAt != 0, "!launched");
        require(block.timestamp >= launchedAt + 72 hours, "too soon");

        proofFee = 1;
        totalFee = devFee + lpFee + proofFee + mainFee;
        totalFeeIfSelling = devFeeOnSell + lpFeeOnSell + proofFee + mainFeeOnSell;
    }

    function formatProofFee() external onlyProofAdmin {
        require (proofFee > 0, "already reduced");
        require(launchedAt != 0, "!launched");
        require(block.timestamp >= launchedAt + 72 hours, "too soon");

        totalFee -= proofFee;
        totalFeeIfSelling -= proofFee;
        proofFee = 0;
    }

    function setDevWallet(address payable newDevWallet) external onlyOwner {
        devWallet = payable(newDevWallet);
    }

    function setMainWallet(address payable newMainWallet) external onlyOwner {
        mainWallet = newMainWallet;
    }

    function setOwnerWallet(address payable newOwnerWallet) external onlyOwner {
        tokenOwner = newOwnerWallet;
    }

    function changeSwapBackSettings(
        bool enableSwapBack,
        uint256 newSwapBackLimit
    ) external onlyOwner {
        swapAndLiquifyEnabled = enableSwapBack;
        swapThreshold = newSwapBackLimit;
    }

    function delBot(address notbot) external {
        address sender = _msgSender();
        require (sender == proofAdmin || sender == tokenOwner, "Owanble: caller doesn't have permission");
        bots[notbot] = false;
    }

    function getCirculatingSupply() external view returns (uint256) {
        return _totalSupply - balanceOf(DEAD) - balanceOf(ZERO);
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() external view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() external view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() external view virtual override returns (uint8) {
        return 9;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() external view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount)
        external
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
        external
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     *
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue)
        external
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        require(tradingStatus, "Trading Closed");
        require(!bots[sender] && !bots[recipient]);

        if (inSwapAndLiquify) {
            return _basicTransfer(sender, recipient, amount);
        }

        require(
            amount <= _maxTxAmount || isTxLimitExempt[sender],
            "Max TX Amount"
        );

        if (!isTxLimitExempt[recipient] && restrictWhales) {
            require(
                _balances[recipient] + amount <= _walletMax,
                "Max Wallet Amount"
            );
        }

        if (
            msg.sender != pair &&
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            _balances[address(this)] >= swapThreshold
        ) {
            swapBack();
        }

        _balances[sender] = _balances[sender] - amount;

        uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient]
            ? takeFee(sender, recipient, amount)
            : amount;
        _balances[recipient] = _balances[recipient] + finalAmount;

        // if (sender == pair && block.timestamp < launchedAt + 1 minutes) {
        //     // 4-5 blocks
        //     revert("Trading Closed");
        // }

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

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] = _balances[sender] - amount;
        _balances[recipient] = _balances[recipient] + amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function takeFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (uint256) {
        uint256 feeApplicable = pair == recipient
            ? totalFeeIfSelling
            : totalFee;
        uint256 feeAmount = amount * feeApplicable / 100;

        _balances[address(this)] = _balances[address(this)] + feeAmount;
        emit Transfer(sender, address(this), feeAmount);

        return amount - feeAmount;
    }

    function swapBack() internal lockTheSwap {
        uint256 tokensToLiquify = _balances[address(this)];

        uint256 amountToLiquify;
        uint256 devBalance;
        uint256 proofBalance;
        uint256 amountEthLiquidity;

        // Use sell ratios if buy tax too low
        if (totalFee <= 2) {
            amountToLiquify = tokensToLiquify * lpFeeOnSell / totalFeeIfSelling / 2;
        } else {
            amountToLiquify = tokensToLiquify * lpFee / totalFee / 2;
        }

        uint256 amountToSwap = tokensToLiquify - amountToLiquify;

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

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

        uint256 amountETH = address(this).balance;

        // Use sell ratios if buy tax too low
        if (totalFee <= 2) {
            devBalance = amountETH * devFeeOnSell / totalFeeIfSelling;
            proofBalance = amountETH * proofFee / totalFeeIfSelling;
            amountEthLiquidity = amountETH * lpFeeOnSell / totalFeeIfSelling / 2;
        } else {
            devBalance = amountETH * devFee / totalFee;
            proofBalance = amountETH * proofFee / totalFee;
            amountEthLiquidity = amountETH * lpFee / totalFee / 2;
        }

        uint256 amountEthMain = amountETH - devBalance - proofBalance - amountEthLiquidity;

        if (amountETH > 0) {
            IFACTORY(factory).factoryRevenue{value: proofBalance}();
            (bool sent,)=devWallet.call{value:devBalance}("");
            require (sent, "ETH transfer failed");
            (bool sent1,)=mainWallet.call{value:amountEthMain}("");
            require (sent1, "ETH transfer failed");
        }

        if (amountToLiquify > 0) {
            router.addLiquidityETH{value: amountEthLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                0x000000000000000000000000000000000000dEaD,
                block.timestamp
            );
        }
    }

    receive() external payable {}
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"initialMainFee","type":"uint256"},{"internalType":"uint256","name":"initialMainFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"initialLpFee","type":"uint256"},{"internalType":"uint256","name":"initialLpFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"initialDevFee","type":"uint256"},{"internalType":"uint256","name":"initialDevFeeOnSell","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"changeRestrictWhales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"notbot","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"formatProofFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proofAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proofBurnerAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proofFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reduceProofFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restrictWhales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"tokenSymbol","type":"string"},{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"uint256","name":"percentToLP","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"dev","type":"address"},{"internalType":"address","name":"main","type":"address"},{"internalType":"address","name":"routerAddress","type":"address"},{"internalType":"address","name":"initialProofAdmin","type":"address"},{"components":[{"internalType":"uint256","name":"mainFee","type":"uint256"},{"internalType":"uint256","name":"mainFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"lpFee","type":"uint256"},{"internalType":"uint256","name":"lpFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"devFeeOnSell","type":"uint256"}],"internalType":"struct ProofNonReflectionTokenFees.allFees","name":"fees","type":"tuple"}],"name":"setBasicData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newDevWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setLaunchedAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newMainWallet","type":"address"}],"name":"setMainWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newOwnerWallet","type":"address"}],"name":"setOwnerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"updateProofAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newproofBurnerAddress","type":"address"}],"name":"updateProofBurnerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526006805460ff60a01b1916600160a01b1790556002600b556019805461010160a81b61ffff60a81b1990911617905534801561003f57600080fd5b50601680546001600160a01b031916331790556131fb806100616000396000f3fe60806040526004361061039a5760003560e01c80638760d539116101dc578063bfd7928411610102578063d920334e116100a0578063f16fd78d1161006f578063f16fd78d14610a91578063f887ea4014610ab1578063fabe628314610ad1578063fbd7575314610af157600080fd5b8063d920334e146109f6578063dd62ed3e14610a16578063e66b1d1e14610a5c578063ef92e22214610a7c57600080fd5b8063cb29813c116100dc578063cb29813c1461097f578063cd1e330a1461099f578063d0a5eb4e146109b5578063d4fb9a01146109d557600080fd5b8063bfd7928414610919578063c45a015514610949578063ca987b0e1461096957600080fd5b8063a3e676101161017a578063b515566a11610149578063b515566a146108a3578063b72344a2146108c3578063bb542ef0146108e3578063bf56b3711461090357600080fd5b8063a3e6761014610823578063a457c2d714610843578063a8aa1b3114610863578063a9059cbb1461088357600080fd5b80639502c426116101b65780639502c426146107c257806395d89b41146107d8578063985b9db0146107ed578063a3a2e89e1461080357600080fd5b80638760d5391461075d5780638b42507f146107725780638ea5220f146107a257600080fd5b806339509351116102c157806359a51c341161025f5780637c0ff2051161022e5780637c0ff205146106fb5780637d1db4a5146107115780637db1342c14610727578063807c2d9c1461074757600080fd5b806359a51c34146106795780636827e76414610699578063704ce43e146106af57806370a08231146106c557600080fd5b80634355855a1161029b5780634355855a146105f257806344de2e4c146106225780634a74bb0214610643578063546a88111461066457600080fd5b806339509351146105825780633dab5269146105a25780633f4218e0146105c257600080fd5b80631f53ac0211610339578063273123b711610308578063273123b71461051157806328374425146105315780632b112e4914610551578063313ce5671461056657600080fd5b80631f53ac021461048457806323b62b75146104a457806323b872dd146104dc57806327193bc4146104fc57600080fd5b8063095ea7b311610375578063095ea7b3146104135780630963da6c1461044357806318160ddd146104595780631df4ccfc1461046e57600080fd5b8062476464146103a65780630445b667146103c857806306fdde03146103f157600080fd5b366103a157005b600080fd5b3480156103b257600080fd5b506103c66103c1366004612a60565b610b06565b005b3480156103d457600080fd5b506103de601d5481565b6040519081526020015b60405180910390f35b3480156103fd57600080fd5b50610406611072565b6040516103e89190612b3e565b34801561041f57600080fd5b5061043361042e366004612b8c565b611104565b60405190151581526020016103e8565b34801561044f57600080fd5b506103de600c5481565b34801561046557600080fd5b506002546103de565b34801561047a57600080fd5b506103de60125481565b34801561049057600080fd5b506103c661049f366004612bb8565b61111e565b3480156104b057600080fd5b506019546104c4906001600160a01b031681565b6040516001600160a01b0390911681526020016103e8565b3480156104e857600080fd5b506104336104f7366004612bd5565b61116a565b34801561050857600080fd5b506103c6611191565b34801561051d57600080fd5b506103c661052c366004612bb8565b611204565b34801561053d57600080fd5b506005546104c4906001600160a01b031681565b34801561055d57600080fd5b506103de6112aa565b34801561057257600080fd5b50604051600981526020016103e8565b34801561058e57600080fd5b5061043361059d366004612b8c565b611316565b3480156105ae57600080fd5b506103c66105bd366004612c26565b611355565b3480156105ce57600080fd5b506104336105dd366004612bb8565b60076020526000908152604090205460ff1681565b3480156105fe57600080fd5b5061043361060d366004612bb8565b60096020526000908152604090205460ff1681565b34801561062e57600080fd5b5060065461043390600160a01b900460ff1681565b34801561064f57600080fd5b5060195461043390600160a81b900460ff1681565b34801561067057600080fd5b506103c66113a1565b34801561068557600080fd5b506006546104c4906001600160a01b031681565b3480156106a557600080fd5b506103de600e5481565b3480156106bb57600080fd5b506103de600d5481565b3480156106d157600080fd5b506103de6106e0366004612bb8565b6001600160a01b031660009081526020819052604090205490565b34801561070757600080fd5b506103de60105481565b34801561071d57600080fd5b506103de601b5481565b34801561073357600080fd5b506103c6610742366004612c42565b611439565b34801561075357600080fd5b506103de601c5481565b34801561076957600080fd5b506103c6611540565b34801561077e57600080fd5b5061043361078d366004612bb8565b60086020526000908152604090205460ff1681565b3480156107ae57600080fd5b506018546104c4906001600160a01b031681565b3480156107ce57600080fd5b506103de60115481565b3480156107e457600080fd5b50610406611639565b3480156107f957600080fd5b506103de600f5481565b34801561080f57600080fd5b506103c661081e366004612c5b565b611648565b34801561082f57600080fd5b506017546104c4906001600160a01b031681565b34801561084f57600080fd5b5061043361085e366004612b8c565b61169d565b34801561086f57600080fd5b506015546104c4906001600160a01b031681565b34801561088f57600080fd5b5061043361089e366004612b8c565b61173a565b3480156108af57600080fd5b506103c66108be366004612c90565b611748565b3480156108cf57600080fd5b506103c66108de366004612bb8565b6117de565b3480156108ef57600080fd5b506103c66108fe366004612bb8565b61182a565b34801561090f57600080fd5b506103de600a5481565b34801561092557600080fd5b50610433610934366004612bb8565b601a6020526000908152604090205460ff1681565b34801561095557600080fd5b506016546104c4906001600160a01b031681565b34801561097557600080fd5b506103de60135481565b34801561098b57600080fd5b506103c661099a366004612d42565b611876565b3480156109ab57600080fd5b506103de600b5481565b3480156109c157600080fd5b506103c66109d0366004612bb8565b61195f565b3480156109e157600080fd5b5060195461043390600160b01b900460ff1681565b348015610a0257600080fd5b506103c6610a11366004612c42565b6119ab565b348015610a2257600080fd5b506103de610a31366004612d85565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a6857600080fd5b506103c6610a77366004612dbe565b611ab2565b348015610a8857600080fd5b506103c6611b4b565b348015610a9d57600080fd5b506103c6610aac366004612bb8565b611c6f565b348015610abd57600080fd5b506014546104c4906001600160a01b031681565b348015610add57600080fd5b506103c6610aec366004612c5b565b611cbb565b348015610afd57600080fd5b506103c6611d61565b6016546001600160a01b03163314610b395760405162461bcd60e51b8152600401610b3090612dd9565b60405180910390fd5b6003610b458b82612ea0565b506004610b528a82612ea0565b5060028890556046871015610b9a5760405162461bcd60e51b815260206004820152600e60248201526d1b1bddc81b1c081c195c98d95b9d60921b6044820152606401610b30565b6103e8610ba8896005612f76565b610bb29190612f8d565b601b556064610bc2896001612f76565b610bcc9190612f8d565b601c55610fa0610bdd896005612f76565b610be79190612f8d565b601d55601480546001600160a01b0319166001600160a01b0385169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190612faf565b6001600160a01b031663c9c65396601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec9190612faf565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015610d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5c9190612faf565b601580546001600160a01b0319166001600160a01b03928316178155306000818152600160208181526040808420601454881685528252808420600019905593835260078152838320805460ff199081168417909155601680548816855285852080548316851790558d88168552858520805483168517905560088352858520805483168517905595548716845284842080548216841790559454909516825282822080548516821790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980548516821790559080527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7805490931617909155820151600d81905560608301516010556080830151600e81905560a08401516011558351600c81905592840151600f55600b549291610e9b91612fcc565b610ea59190612fcc565b610eaf9190612fcc565b601255600b54600f54601054601154610ec89190612fcc565b610ed29190612fcc565b610edc9190612fcc565b601355601254600c1015610f025760405162461bcd60e51b8152600401610b3090612fdf565b60116013541115610f495760405162461bcd60e51b8152602060048201526011602482015270546f6f20686967682073656c6c2066656560781b6044820152606401610b30565b601780546001600160a01b038089166001600160a01b0319928316179092556018805488841690831617905560198054878416908316179055600680549285169290911691909117905560006064610fa1898b612f76565b610fab9190612f8d565b90506000610fb9828b613005565b33600090815260208190526040812080549293508492909190610fdd908490612fcc565b90915550506001600160a01b0388166000908152602081905260408120805483929061100a908490612fcc565b909155505060405182815233906000906000805160206131a68339815191529060200160405180910390a36040518181526001600160a01b038916906000906000805160206131a68339815191529060200160405180910390a3505050505050505050505050565b60606003805461108190612e1b565b80601f01602080910402602001604051908101604052809291908181526020018280546110ad90612e1b565b80156110fa5780601f106110cf576101008083540402835291602001916110fa565b820191906000526020600020905b8154815290600101906020018083116110dd57829003601f168201915b5050505050905090565b600033611112818585611dac565b60019150505b92915050565b6017546001600160a01b031633146111485760405162461bcd60e51b8152600401610b3090613018565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b600033611178858285611ed0565b611183858585611f62565b5060019150505b9392505050565b6016546001600160a01b031633146111bb5760405162461bcd60e51b8152600401610b3090612dd9565b600a54156111fe5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606401610b30565b42600a55565b60065433906001600160a01b031681148061122c57506017546001600160a01b038281169116145b6112885760405162461bcd60e51b815260206004820152602760248201527f4f77616e626c653a2063616c6c657220646f65736e277420686176652070657260448201526636b4b9b9b4b7b760c91b6064820152608401610b30565b506001600160a01b03166000908152601a60205260409020805460ff19169055565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf83546002546113079190613005565b6113119190613005565b905090565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091906111129082908690611350908790612fcc565b611dac565b6017546001600160a01b0316331461137f5760405162461bcd60e51b8152600401610b3090613018565b60198054921515600160a81b0260ff60a81b1990931692909217909155601d55565b6016546001600160a01b031633146113cb5760405162461bcd60e51b8152600401610b3090612dd9565b601480546001600160a01b039081166000908152600760209081526040808320805460ff19908116600190811790925595548516845260089092528083208054861683179055601754909316825291902080549092161790556019805460ff60b01b1916600160b01b179055565b6017546001600160a01b031633146114635760405162461bcd60e51b8152600401610b3090613018565b600a546000036114855760405162461bcd60e51b8152600401610b309061304d565b6103e860025460056114979190612f76565b6114a19190612f8d565b8110156114e25760405162461bcd60e51b815260206004820152600f60248201526e135b5a5b880c0b8d49481b1a5b5a5d608a1b6044820152606401610b30565b606460025460036114f39190612f76565b6114fd9190612f8d565b81111561153b5760405162461bcd60e51b815260206004820152600c60248201526b13585e080cc9481b1a5b5a5d60a21b6044820152606401610b30565b601c55565b6006546001600160a01b0316331461156a5760405162461bcd60e51b8152600401610b3090613070565b6000600b54116115ae5760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481c99591d58d959608a1b6044820152606401610b30565b600a546000036115d05760405162461bcd60e51b8152600401610b309061304d565b600a546115e0906203f480612fcc565b4210156115ff5760405162461bcd60e51b8152600401610b30906130b5565b600b54601260008282546116139190613005565b9091555050600b546013805460009061162d908490613005565b90915550506000600b55565b60606004805461108190612e1b565b6017546001600160a01b031633146116725760405162461bcd60e51b8152600401610b3090613018565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156117225760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b30565b61172f8286868403611dac565b506001949350505050565b60003361172f818585611f62565b6006546001600160a01b031633146117725760405162461bcd60e51b8152600401610b3090613070565b60005b81518110156117da576001601a6000848481518110611796576117966130d7565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806117d2816130ed565b915050611775565b5050565b6006546001600160a01b031633146118085760405162461bcd60e51b8152600401610b3090613070565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6017546001600160a01b031633146118545760405162461bcd60e51b8152600401610b3090613018565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6017546001600160a01b031633146118a05760405162461bcd60e51b8152600401610b3090613018565b600c869055600d849055600e829055600f85905560108390556011819055600b5486906118cd8685612fcc565b6118d79190612fcc565b6118e19190612fcc565b601255600f54600b546010546011546118fa9190612fcc565b6119049190612fcc565b61190e9190612fcc565b601355601254600c10156119345760405162461bcd60e51b8152600401610b3090612fdf565b601160135411156119575760405162461bcd60e51b8152600401610b3090612fdf565b505050505050565b6017546001600160a01b031633146119895760405162461bcd60e51b8152600401610b3090613018565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6017546001600160a01b031633146119d55760405162461bcd60e51b8152600401610b3090613018565b600a546000036119f75760405162461bcd60e51b8152600401610b309061304d565b6103e86002546005611a099190612f76565b611a139190612f8d565b811015611a545760405162461bcd60e51b815260206004820152600f60248201526e135b5a5b880c0b8d49481b1a5b5a5d608a1b6044820152606401610b30565b60646002546003611a659190612f76565b611a6f9190612f8d565b811115611aad5760405162461bcd60e51b815260206004820152600c60248201526b13585e080cc9481b1a5b5a5d60a21b6044820152606401610b30565b601b55565b6017546001600160a01b03163314611adc5760405162461bcd60e51b8152600401610b3090613018565b600a54600003611afe5760405162461bcd60e51b8152600401610b309061304d565b600a54611b0e9062015180612fcc565b421015611b2d5760405162461bcd60e51b8152600401610b30906130b5565b60068054911515600160a01b0260ff60a01b19909216919091179055565b6017546001600160a01b03163314611b755760405162461bcd60e51b8152600401610b3090613018565b600b54600214611bba5760405162461bcd60e51b815260206004820152601060248201526f08585b1c9958591e481c99591d58d95960821b6044820152606401610b30565b600a54600003611bdc5760405162461bcd60e51b8152600401610b309061304d565b600a54611bec906203f480612fcc565b421015611c0b5760405162461bcd60e51b8152600401610b30906130b5565b6001600b81905550600c54600b54600d54600e54611c299190612fcc565b611c339190612fcc565b611c3d9190612fcc565b601255600f54600b54601054601154611c569190612fcc565b611c609190612fcc565b611c6a9190612fcc565b601355565b6006546001600160a01b03163314611c995760405162461bcd60e51b8152600401610b3090613070565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6017546001600160a01b03163314611ce55760405162461bcd60e51b8152600401610b3090613018565b600a54600003611d075760405162461bcd60e51b8152600401610b309061304d565b600a54611d179062015180612fcc565b421015611d365760405162461bcd60e51b8152600401610b30906130b5565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6016546001600160a01b03163314611d8b5760405162461bcd60e51b8152600401610b3090612dd9565b6019805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6001600160a01b038316611e0e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b30565b6001600160a01b038216611e6f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b30565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611f5c5781811015611f4f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b30565b611f5c8484848403611dac565b50505050565b601954600090600160b01b900460ff16611faf5760405162461bcd60e51b815260206004820152600e60248201526d151c98591a5b99c810db1bdcd95960921b6044820152606401610b30565b6001600160a01b0384166000908152601a602052604090205460ff16158015611ff157506001600160a01b0383166000908152601a602052604090205460ff16155b611ffa57600080fd5b601954600160a01b900460ff161561201e57612017848484612282565b905061118a565b601b548211158061204757506001600160a01b03841660009081526008602052604090205460ff165b6120835760405162461bcd60e51b815260206004820152600d60248201526c13585e08151608105b5bdd5b9d609a1b6044820152606401610b30565b6001600160a01b03831660009081526008602052604090205460ff161580156120b55750600654600160a01b900460ff165b1561212357601c546001600160a01b0384166000908152602081905260409020546120e1908490612fcc565b11156121235760405162461bcd60e51b815260206004820152601160248201527013585e0815d85b1b195d08105b5bdd5b9d607a1b6044820152606401610b30565b6015546001600160a01b031633148015906121485750601954600160a01b900460ff16155b801561215d5750601954600160a81b900460ff165b801561217a5750601d543060009081526020819052604090205410155b1561218757612187612322565b6001600160a01b0384166000908152602081905260409020546121ab908390613005565b6001600160a01b03851660009081526020818152604080832093909355600790529081205460ff161580156121f957506001600160a01b03841660009081526007602052604090205460ff16155b612203578261220e565b61220e858585612856565b6001600160a01b038516600090815260208190526040902054909150612235908290612fcc565b6001600160a01b038581166000818152602081815260409182902094909455518481529092918816916000805160206131a6833981519152910160405180910390a3506001949350505050565b6001600160a01b0383166000908152602081905260408120546122a6908390613005565b6001600160a01b0380861660009081526020819052604080822093909355908516815220546122d6908390612fcc565b6001600160a01b038481166000818152602081815260409182902094909455518581529092918716916000805160206131a6833981519152910160405180910390a35060019392505050565b6019805460ff60a01b1916600160a01b179055306000908152602081905260408120546012549091908190819081906002106123865760026013546010548761236b9190612f76565b6123759190612f8d565b61237f9190612f8d565b93506123b0565b6002601254600d54876123999190612f76565b6123a39190612f8d565b6123ad9190612f8d565b93505b60006123bc8587613005565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106123f6576123f66130d7565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561244f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124739190612faf565b81600181518110612486576124866130d7565b6001600160a01b03928316602091820292909201015260145460405163791ac94760e01b815291169063791ac947906124cc908590600090869030904290600401613106565b600060405180830381600087803b1580156124e657600080fd5b505af11580156124fa573d6000803e3d6000fd5b5050505060004790506002601254116125745760135460115461251d9083612f76565b6125279190612f8d565b9550601354600b548261253a9190612f76565b6125449190612f8d565b94506002601354601054836125599190612f76565b6125639190612f8d565b61256d9190612f8d565b93506125d7565b601254600e546125849083612f76565b61258e9190612f8d565b9550601254600b54826125a19190612f76565b6125ab9190612f8d565b94506002601254600d54836125c09190612f76565b6125ca9190612f8d565b6125d49190612f8d565b93505b600084866125e58985613005565b6125ef9190613005565b6125f99190613005565b905081156127a157601660009054906101000a90046001600160a01b03166001600160a01b0316639ee25ae4876040518263ffffffff1660e01b81526004016000604051808303818588803b15801561265157600080fd5b505af1158015612665573d6000803e3d6000fd5b5050601854604051600094506001600160a01b0390911692508a91508381818185875af1925050503d80600081146126b9576040519150601f19603f3d011682016040523d82523d6000602084013e6126be565b606091505b50509050806127055760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610b30565b6019546040516000916001600160a01b03169084908381818185875af1925050503d8060008114612752576040519150601f19603f3d011682016040523d82523d6000602084013e612757565b606091505b505090508061279e5760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610b30565b50505b871561283e5760145460405163f305d71960e01b8152306004820152602481018a9052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990879060c40160606040518083038185885af1158015612815573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061283a9190613177565b5050505b50506019805460ff60a01b1916905550505050505050565b60155460009081906001600160a01b038581169116146128785760125461287c565b6013545b90506000606461288c8386612f76565b6128969190612f8d565b306000908152602081905260409020549091506128b4908290612fcc565b3060008181526020818152604091829020939093555183815290916001600160a01b038916916000805160206131a6833981519152910160405180910390a36128fd8185613005565b9695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561294657612946612907565b604052919050565b600082601f83011261295f57600080fd5b813567ffffffffffffffff81111561297957612979612907565b61298c601f8201601f191660200161291d565b8181528460208386010111156129a157600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b03811681146129d357600080fd5b50565b80356129e1816129be565b919050565b600060c082840312156129f857600080fd5b60405160c0810181811067ffffffffffffffff82111715612a1b57612a1b612907565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b6000806000806000806000806000806101e08b8d031215612a8057600080fd5b8a3567ffffffffffffffff80821115612a9857600080fd5b612aa48e838f0161294e565b9b5060208d0135915080821115612aba57600080fd5b50612ac78d828e0161294e565b99505060408b0135975060608b01359650612ae460808c016129d6565b9550612af260a08c016129d6565b9450612b0060c08c016129d6565b9350612b0e60e08c016129d6565b9250612b1d6101008c016129d6565b9150612b2d8c6101208d016129e6565b90509295989b9194979a5092959850565b600060208083528351808285015260005b81811015612b6b57858101830151858201604001528201612b4f565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612b9f57600080fd5b8235612baa816129be565b946020939093013593505050565b600060208284031215612bca57600080fd5b813561118a816129be565b600080600060608486031215612bea57600080fd5b8335612bf5816129be565b92506020840135612c05816129be565b929592945050506040919091013590565b803580151581146129e157600080fd5b60008060408385031215612c3957600080fd5b612baa83612c16565b600060208284031215612c5457600080fd5b5035919050565b60008060408385031215612c6e57600080fd5b8235612c79816129be565b9150612c8760208401612c16565b90509250929050565b60006020808385031215612ca357600080fd5b823567ffffffffffffffff80821115612cbb57600080fd5b818501915085601f830112612ccf57600080fd5b813581811115612ce157612ce1612907565b8060051b9150612cf284830161291d565b8181529183018401918481019088841115612d0c57600080fd5b938501935b83851015612d365784359250612d26836129be565b8282529385019390850190612d11565b98975050505050505050565b60008060008060008060c08789031215612d5b57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060408385031215612d9857600080fd5b8235612da3816129be565b91506020830135612db3816129be565b809150509250929050565b600060208284031215612dd057600080fd5b61118a82612c16565b60208082526022908201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520666163746f604082015261727960f01b606082015260800190565b600181811c90821680612e2f57607f821691505b602082108103612e4f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115612e9b57600081815260208120601f850160051c81016020861015612e7c5750805b601f850160051c820191505b8181101561195757828155600101612e88565b505050565b815167ffffffffffffffff811115612eba57612eba612907565b612ece81612ec88454612e1b565b84612e55565b602080601f831160018114612f035760008415612eeb5750858301515b600019600386901b1c1916600185901b178555611957565b600085815260208120601f198616915b82811015612f3257888601518255948401946001909101908401612f13565b5085821015612f505787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761111857611118612f60565b600082612faa57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612fc157600080fd5b815161118a816129be565b8082018082111561111857611118612f60565b6020808252600c908201526b546f6f20686967682066656560a01b604082015260600190565b8181038181111561111857611118612f60565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260099082015268085b185d5b98da195960ba1b604082015260600190565b60208082526025908201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652070726f6f6660408201526420b236b4b760d91b606082015260800190565b6020808252600890820152673a37b79039b7b7b760c11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000600182016130ff576130ff612f60565b5060010190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131565784516001600160a01b031683529383019391830191600101613131565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561318c57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220b05bceec6cfddec46eadc933559013495daf645ecc051cc3e8614f4abf0fbd8e64736f6c63430008110033

Deployed Bytecode

0x60806040526004361061039a5760003560e01c80638760d539116101dc578063bfd7928411610102578063d920334e116100a0578063f16fd78d1161006f578063f16fd78d14610a91578063f887ea4014610ab1578063fabe628314610ad1578063fbd7575314610af157600080fd5b8063d920334e146109f6578063dd62ed3e14610a16578063e66b1d1e14610a5c578063ef92e22214610a7c57600080fd5b8063cb29813c116100dc578063cb29813c1461097f578063cd1e330a1461099f578063d0a5eb4e146109b5578063d4fb9a01146109d557600080fd5b8063bfd7928414610919578063c45a015514610949578063ca987b0e1461096957600080fd5b8063a3e676101161017a578063b515566a11610149578063b515566a146108a3578063b72344a2146108c3578063bb542ef0146108e3578063bf56b3711461090357600080fd5b8063a3e6761014610823578063a457c2d714610843578063a8aa1b3114610863578063a9059cbb1461088357600080fd5b80639502c426116101b65780639502c426146107c257806395d89b41146107d8578063985b9db0146107ed578063a3a2e89e1461080357600080fd5b80638760d5391461075d5780638b42507f146107725780638ea5220f146107a257600080fd5b806339509351116102c157806359a51c341161025f5780637c0ff2051161022e5780637c0ff205146106fb5780637d1db4a5146107115780637db1342c14610727578063807c2d9c1461074757600080fd5b806359a51c34146106795780636827e76414610699578063704ce43e146106af57806370a08231146106c557600080fd5b80634355855a1161029b5780634355855a146105f257806344de2e4c146106225780634a74bb0214610643578063546a88111461066457600080fd5b806339509351146105825780633dab5269146105a25780633f4218e0146105c257600080fd5b80631f53ac0211610339578063273123b711610308578063273123b71461051157806328374425146105315780632b112e4914610551578063313ce5671461056657600080fd5b80631f53ac021461048457806323b62b75146104a457806323b872dd146104dc57806327193bc4146104fc57600080fd5b8063095ea7b311610375578063095ea7b3146104135780630963da6c1461044357806318160ddd146104595780631df4ccfc1461046e57600080fd5b8062476464146103a65780630445b667146103c857806306fdde03146103f157600080fd5b366103a157005b600080fd5b3480156103b257600080fd5b506103c66103c1366004612a60565b610b06565b005b3480156103d457600080fd5b506103de601d5481565b6040519081526020015b60405180910390f35b3480156103fd57600080fd5b50610406611072565b6040516103e89190612b3e565b34801561041f57600080fd5b5061043361042e366004612b8c565b611104565b60405190151581526020016103e8565b34801561044f57600080fd5b506103de600c5481565b34801561046557600080fd5b506002546103de565b34801561047a57600080fd5b506103de60125481565b34801561049057600080fd5b506103c661049f366004612bb8565b61111e565b3480156104b057600080fd5b506019546104c4906001600160a01b031681565b6040516001600160a01b0390911681526020016103e8565b3480156104e857600080fd5b506104336104f7366004612bd5565b61116a565b34801561050857600080fd5b506103c6611191565b34801561051d57600080fd5b506103c661052c366004612bb8565b611204565b34801561053d57600080fd5b506005546104c4906001600160a01b031681565b34801561055d57600080fd5b506103de6112aa565b34801561057257600080fd5b50604051600981526020016103e8565b34801561058e57600080fd5b5061043361059d366004612b8c565b611316565b3480156105ae57600080fd5b506103c66105bd366004612c26565b611355565b3480156105ce57600080fd5b506104336105dd366004612bb8565b60076020526000908152604090205460ff1681565b3480156105fe57600080fd5b5061043361060d366004612bb8565b60096020526000908152604090205460ff1681565b34801561062e57600080fd5b5060065461043390600160a01b900460ff1681565b34801561064f57600080fd5b5060195461043390600160a81b900460ff1681565b34801561067057600080fd5b506103c66113a1565b34801561068557600080fd5b506006546104c4906001600160a01b031681565b3480156106a557600080fd5b506103de600e5481565b3480156106bb57600080fd5b506103de600d5481565b3480156106d157600080fd5b506103de6106e0366004612bb8565b6001600160a01b031660009081526020819052604090205490565b34801561070757600080fd5b506103de60105481565b34801561071d57600080fd5b506103de601b5481565b34801561073357600080fd5b506103c6610742366004612c42565b611439565b34801561075357600080fd5b506103de601c5481565b34801561076957600080fd5b506103c6611540565b34801561077e57600080fd5b5061043361078d366004612bb8565b60086020526000908152604090205460ff1681565b3480156107ae57600080fd5b506018546104c4906001600160a01b031681565b3480156107ce57600080fd5b506103de60115481565b3480156107e457600080fd5b50610406611639565b3480156107f957600080fd5b506103de600f5481565b34801561080f57600080fd5b506103c661081e366004612c5b565b611648565b34801561082f57600080fd5b506017546104c4906001600160a01b031681565b34801561084f57600080fd5b5061043361085e366004612b8c565b61169d565b34801561086f57600080fd5b506015546104c4906001600160a01b031681565b34801561088f57600080fd5b5061043361089e366004612b8c565b61173a565b3480156108af57600080fd5b506103c66108be366004612c90565b611748565b3480156108cf57600080fd5b506103c66108de366004612bb8565b6117de565b3480156108ef57600080fd5b506103c66108fe366004612bb8565b61182a565b34801561090f57600080fd5b506103de600a5481565b34801561092557600080fd5b50610433610934366004612bb8565b601a6020526000908152604090205460ff1681565b34801561095557600080fd5b506016546104c4906001600160a01b031681565b34801561097557600080fd5b506103de60135481565b34801561098b57600080fd5b506103c661099a366004612d42565b611876565b3480156109ab57600080fd5b506103de600b5481565b3480156109c157600080fd5b506103c66109d0366004612bb8565b61195f565b3480156109e157600080fd5b5060195461043390600160b01b900460ff1681565b348015610a0257600080fd5b506103c6610a11366004612c42565b6119ab565b348015610a2257600080fd5b506103de610a31366004612d85565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a6857600080fd5b506103c6610a77366004612dbe565b611ab2565b348015610a8857600080fd5b506103c6611b4b565b348015610a9d57600080fd5b506103c6610aac366004612bb8565b611c6f565b348015610abd57600080fd5b506014546104c4906001600160a01b031681565b348015610add57600080fd5b506103c6610aec366004612c5b565b611cbb565b348015610afd57600080fd5b506103c6611d61565b6016546001600160a01b03163314610b395760405162461bcd60e51b8152600401610b3090612dd9565b60405180910390fd5b6003610b458b82612ea0565b506004610b528a82612ea0565b5060028890556046871015610b9a5760405162461bcd60e51b815260206004820152600e60248201526d1b1bddc81b1c081c195c98d95b9d60921b6044820152606401610b30565b6103e8610ba8896005612f76565b610bb29190612f8d565b601b556064610bc2896001612f76565b610bcc9190612f8d565b601c55610fa0610bdd896005612f76565b610be79190612f8d565b601d55601480546001600160a01b0319166001600160a01b0385169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190612faf565b6001600160a01b031663c9c65396601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec9190612faf565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015610d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5c9190612faf565b601580546001600160a01b0319166001600160a01b03928316178155306000818152600160208181526040808420601454881685528252808420600019905593835260078152838320805460ff199081168417909155601680548816855285852080548316851790558d88168552858520805483168517905560088352858520805483168517905595548716845284842080548216841790559454909516825282822080548516821790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980548516821790559080527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7805490931617909155820151600d81905560608301516010556080830151600e81905560a08401516011558351600c81905592840151600f55600b549291610e9b91612fcc565b610ea59190612fcc565b610eaf9190612fcc565b601255600b54600f54601054601154610ec89190612fcc565b610ed29190612fcc565b610edc9190612fcc565b601355601254600c1015610f025760405162461bcd60e51b8152600401610b3090612fdf565b60116013541115610f495760405162461bcd60e51b8152602060048201526011602482015270546f6f20686967682073656c6c2066656560781b6044820152606401610b30565b601780546001600160a01b038089166001600160a01b0319928316179092556018805488841690831617905560198054878416908316179055600680549285169290911691909117905560006064610fa1898b612f76565b610fab9190612f8d565b90506000610fb9828b613005565b33600090815260208190526040812080549293508492909190610fdd908490612fcc565b90915550506001600160a01b0388166000908152602081905260408120805483929061100a908490612fcc565b909155505060405182815233906000906000805160206131a68339815191529060200160405180910390a36040518181526001600160a01b038916906000906000805160206131a68339815191529060200160405180910390a3505050505050505050505050565b60606003805461108190612e1b565b80601f01602080910402602001604051908101604052809291908181526020018280546110ad90612e1b565b80156110fa5780601f106110cf576101008083540402835291602001916110fa565b820191906000526020600020905b8154815290600101906020018083116110dd57829003601f168201915b5050505050905090565b600033611112818585611dac565b60019150505b92915050565b6017546001600160a01b031633146111485760405162461bcd60e51b8152600401610b3090613018565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b600033611178858285611ed0565b611183858585611f62565b5060019150505b9392505050565b6016546001600160a01b031633146111bb5760405162461bcd60e51b8152600401610b3090612dd9565b600a54156111fe5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606401610b30565b42600a55565b60065433906001600160a01b031681148061122c57506017546001600160a01b038281169116145b6112885760405162461bcd60e51b815260206004820152602760248201527f4f77616e626c653a2063616c6c657220646f65736e277420686176652070657260448201526636b4b9b9b4b7b760c91b6064820152608401610b30565b506001600160a01b03166000908152601a60205260409020805460ff19169055565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf83546002546113079190613005565b6113119190613005565b905090565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091906111129082908690611350908790612fcc565b611dac565b6017546001600160a01b0316331461137f5760405162461bcd60e51b8152600401610b3090613018565b60198054921515600160a81b0260ff60a81b1990931692909217909155601d55565b6016546001600160a01b031633146113cb5760405162461bcd60e51b8152600401610b3090612dd9565b601480546001600160a01b039081166000908152600760209081526040808320805460ff19908116600190811790925595548516845260089092528083208054861683179055601754909316825291902080549092161790556019805460ff60b01b1916600160b01b179055565b6017546001600160a01b031633146114635760405162461bcd60e51b8152600401610b3090613018565b600a546000036114855760405162461bcd60e51b8152600401610b309061304d565b6103e860025460056114979190612f76565b6114a19190612f8d565b8110156114e25760405162461bcd60e51b815260206004820152600f60248201526e135b5a5b880c0b8d49481b1a5b5a5d608a1b6044820152606401610b30565b606460025460036114f39190612f76565b6114fd9190612f8d565b81111561153b5760405162461bcd60e51b815260206004820152600c60248201526b13585e080cc9481b1a5b5a5d60a21b6044820152606401610b30565b601c55565b6006546001600160a01b0316331461156a5760405162461bcd60e51b8152600401610b3090613070565b6000600b54116115ae5760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481c99591d58d959608a1b6044820152606401610b30565b600a546000036115d05760405162461bcd60e51b8152600401610b309061304d565b600a546115e0906203f480612fcc565b4210156115ff5760405162461bcd60e51b8152600401610b30906130b5565b600b54601260008282546116139190613005565b9091555050600b546013805460009061162d908490613005565b90915550506000600b55565b60606004805461108190612e1b565b6017546001600160a01b031633146116725760405162461bcd60e51b8152600401610b3090613018565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156117225760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b30565b61172f8286868403611dac565b506001949350505050565b60003361172f818585611f62565b6006546001600160a01b031633146117725760405162461bcd60e51b8152600401610b3090613070565b60005b81518110156117da576001601a6000848481518110611796576117966130d7565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806117d2816130ed565b915050611775565b5050565b6006546001600160a01b031633146118085760405162461bcd60e51b8152600401610b3090613070565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6017546001600160a01b031633146118545760405162461bcd60e51b8152600401610b3090613018565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6017546001600160a01b031633146118a05760405162461bcd60e51b8152600401610b3090613018565b600c869055600d849055600e829055600f85905560108390556011819055600b5486906118cd8685612fcc565b6118d79190612fcc565b6118e19190612fcc565b601255600f54600b546010546011546118fa9190612fcc565b6119049190612fcc565b61190e9190612fcc565b601355601254600c10156119345760405162461bcd60e51b8152600401610b3090612fdf565b601160135411156119575760405162461bcd60e51b8152600401610b3090612fdf565b505050505050565b6017546001600160a01b031633146119895760405162461bcd60e51b8152600401610b3090613018565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6017546001600160a01b031633146119d55760405162461bcd60e51b8152600401610b3090613018565b600a546000036119f75760405162461bcd60e51b8152600401610b309061304d565b6103e86002546005611a099190612f76565b611a139190612f8d565b811015611a545760405162461bcd60e51b815260206004820152600f60248201526e135b5a5b880c0b8d49481b1a5b5a5d608a1b6044820152606401610b30565b60646002546003611a659190612f76565b611a6f9190612f8d565b811115611aad5760405162461bcd60e51b815260206004820152600c60248201526b13585e080cc9481b1a5b5a5d60a21b6044820152606401610b30565b601b55565b6017546001600160a01b03163314611adc5760405162461bcd60e51b8152600401610b3090613018565b600a54600003611afe5760405162461bcd60e51b8152600401610b309061304d565b600a54611b0e9062015180612fcc565b421015611b2d5760405162461bcd60e51b8152600401610b30906130b5565b60068054911515600160a01b0260ff60a01b19909216919091179055565b6017546001600160a01b03163314611b755760405162461bcd60e51b8152600401610b3090613018565b600b54600214611bba5760405162461bcd60e51b815260206004820152601060248201526f08585b1c9958591e481c99591d58d95960821b6044820152606401610b30565b600a54600003611bdc5760405162461bcd60e51b8152600401610b309061304d565b600a54611bec906203f480612fcc565b421015611c0b5760405162461bcd60e51b8152600401610b30906130b5565b6001600b81905550600c54600b54600d54600e54611c299190612fcc565b611c339190612fcc565b611c3d9190612fcc565b601255600f54600b54601054601154611c569190612fcc565b611c609190612fcc565b611c6a9190612fcc565b601355565b6006546001600160a01b03163314611c995760405162461bcd60e51b8152600401610b3090613070565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6017546001600160a01b03163314611ce55760405162461bcd60e51b8152600401610b3090613018565b600a54600003611d075760405162461bcd60e51b8152600401610b309061304d565b600a54611d179062015180612fcc565b421015611d365760405162461bcd60e51b8152600401610b30906130b5565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6016546001600160a01b03163314611d8b5760405162461bcd60e51b8152600401610b3090612dd9565b6019805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6001600160a01b038316611e0e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b30565b6001600160a01b038216611e6f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b30565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611f5c5781811015611f4f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b30565b611f5c8484848403611dac565b50505050565b601954600090600160b01b900460ff16611faf5760405162461bcd60e51b815260206004820152600e60248201526d151c98591a5b99c810db1bdcd95960921b6044820152606401610b30565b6001600160a01b0384166000908152601a602052604090205460ff16158015611ff157506001600160a01b0383166000908152601a602052604090205460ff16155b611ffa57600080fd5b601954600160a01b900460ff161561201e57612017848484612282565b905061118a565b601b548211158061204757506001600160a01b03841660009081526008602052604090205460ff165b6120835760405162461bcd60e51b815260206004820152600d60248201526c13585e08151608105b5bdd5b9d609a1b6044820152606401610b30565b6001600160a01b03831660009081526008602052604090205460ff161580156120b55750600654600160a01b900460ff165b1561212357601c546001600160a01b0384166000908152602081905260409020546120e1908490612fcc565b11156121235760405162461bcd60e51b815260206004820152601160248201527013585e0815d85b1b195d08105b5bdd5b9d607a1b6044820152606401610b30565b6015546001600160a01b031633148015906121485750601954600160a01b900460ff16155b801561215d5750601954600160a81b900460ff165b801561217a5750601d543060009081526020819052604090205410155b1561218757612187612322565b6001600160a01b0384166000908152602081905260409020546121ab908390613005565b6001600160a01b03851660009081526020818152604080832093909355600790529081205460ff161580156121f957506001600160a01b03841660009081526007602052604090205460ff16155b612203578261220e565b61220e858585612856565b6001600160a01b038516600090815260208190526040902054909150612235908290612fcc565b6001600160a01b038581166000818152602081815260409182902094909455518481529092918816916000805160206131a6833981519152910160405180910390a3506001949350505050565b6001600160a01b0383166000908152602081905260408120546122a6908390613005565b6001600160a01b0380861660009081526020819052604080822093909355908516815220546122d6908390612fcc565b6001600160a01b038481166000818152602081815260409182902094909455518581529092918716916000805160206131a6833981519152910160405180910390a35060019392505050565b6019805460ff60a01b1916600160a01b179055306000908152602081905260408120546012549091908190819081906002106123865760026013546010548761236b9190612f76565b6123759190612f8d565b61237f9190612f8d565b93506123b0565b6002601254600d54876123999190612f76565b6123a39190612f8d565b6123ad9190612f8d565b93505b60006123bc8587613005565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106123f6576123f66130d7565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561244f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124739190612faf565b81600181518110612486576124866130d7565b6001600160a01b03928316602091820292909201015260145460405163791ac94760e01b815291169063791ac947906124cc908590600090869030904290600401613106565b600060405180830381600087803b1580156124e657600080fd5b505af11580156124fa573d6000803e3d6000fd5b5050505060004790506002601254116125745760135460115461251d9083612f76565b6125279190612f8d565b9550601354600b548261253a9190612f76565b6125449190612f8d565b94506002601354601054836125599190612f76565b6125639190612f8d565b61256d9190612f8d565b93506125d7565b601254600e546125849083612f76565b61258e9190612f8d565b9550601254600b54826125a19190612f76565b6125ab9190612f8d565b94506002601254600d54836125c09190612f76565b6125ca9190612f8d565b6125d49190612f8d565b93505b600084866125e58985613005565b6125ef9190613005565b6125f99190613005565b905081156127a157601660009054906101000a90046001600160a01b03166001600160a01b0316639ee25ae4876040518263ffffffff1660e01b81526004016000604051808303818588803b15801561265157600080fd5b505af1158015612665573d6000803e3d6000fd5b5050601854604051600094506001600160a01b0390911692508a91508381818185875af1925050503d80600081146126b9576040519150601f19603f3d011682016040523d82523d6000602084013e6126be565b606091505b50509050806127055760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610b30565b6019546040516000916001600160a01b03169084908381818185875af1925050503d8060008114612752576040519150601f19603f3d011682016040523d82523d6000602084013e612757565b606091505b505090508061279e5760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610b30565b50505b871561283e5760145460405163f305d71960e01b8152306004820152602481018a9052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990879060c40160606040518083038185885af1158015612815573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061283a9190613177565b5050505b50506019805460ff60a01b1916905550505050505050565b60155460009081906001600160a01b038581169116146128785760125461287c565b6013545b90506000606461288c8386612f76565b6128969190612f8d565b306000908152602081905260409020549091506128b4908290612fcc565b3060008181526020818152604091829020939093555183815290916001600160a01b038916916000805160206131a6833981519152910160405180910390a36128fd8185613005565b9695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561294657612946612907565b604052919050565b600082601f83011261295f57600080fd5b813567ffffffffffffffff81111561297957612979612907565b61298c601f8201601f191660200161291d565b8181528460208386010111156129a157600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b03811681146129d357600080fd5b50565b80356129e1816129be565b919050565b600060c082840312156129f857600080fd5b60405160c0810181811067ffffffffffffffff82111715612a1b57612a1b612907565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b6000806000806000806000806000806101e08b8d031215612a8057600080fd5b8a3567ffffffffffffffff80821115612a9857600080fd5b612aa48e838f0161294e565b9b5060208d0135915080821115612aba57600080fd5b50612ac78d828e0161294e565b99505060408b0135975060608b01359650612ae460808c016129d6565b9550612af260a08c016129d6565b9450612b0060c08c016129d6565b9350612b0e60e08c016129d6565b9250612b1d6101008c016129d6565b9150612b2d8c6101208d016129e6565b90509295989b9194979a5092959850565b600060208083528351808285015260005b81811015612b6b57858101830151858201604001528201612b4f565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612b9f57600080fd5b8235612baa816129be565b946020939093013593505050565b600060208284031215612bca57600080fd5b813561118a816129be565b600080600060608486031215612bea57600080fd5b8335612bf5816129be565b92506020840135612c05816129be565b929592945050506040919091013590565b803580151581146129e157600080fd5b60008060408385031215612c3957600080fd5b612baa83612c16565b600060208284031215612c5457600080fd5b5035919050565b60008060408385031215612c6e57600080fd5b8235612c79816129be565b9150612c8760208401612c16565b90509250929050565b60006020808385031215612ca357600080fd5b823567ffffffffffffffff80821115612cbb57600080fd5b818501915085601f830112612ccf57600080fd5b813581811115612ce157612ce1612907565b8060051b9150612cf284830161291d565b8181529183018401918481019088841115612d0c57600080fd5b938501935b83851015612d365784359250612d26836129be565b8282529385019390850190612d11565b98975050505050505050565b60008060008060008060c08789031215612d5b57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060408385031215612d9857600080fd5b8235612da3816129be565b91506020830135612db3816129be565b809150509250929050565b600060208284031215612dd057600080fd5b61118a82612c16565b60208082526022908201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520666163746f604082015261727960f01b606082015260800190565b600181811c90821680612e2f57607f821691505b602082108103612e4f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115612e9b57600081815260208120601f850160051c81016020861015612e7c5750805b601f850160051c820191505b8181101561195757828155600101612e88565b505050565b815167ffffffffffffffff811115612eba57612eba612907565b612ece81612ec88454612e1b565b84612e55565b602080601f831160018114612f035760008415612eeb5750858301515b600019600386901b1c1916600185901b178555611957565b600085815260208120601f198616915b82811015612f3257888601518255948401946001909101908401612f13565b5085821015612f505787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761111857611118612f60565b600082612faa57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612fc157600080fd5b815161118a816129be565b8082018082111561111857611118612f60565b6020808252600c908201526b546f6f20686967682066656560a01b604082015260600190565b8181038181111561111857611118612f60565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260099082015268085b185d5b98da195960ba1b604082015260600190565b60208082526025908201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652070726f6f6660408201526420b236b4b760d91b606082015260800190565b6020808252600890820152673a37b79039b7b7b760c11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000600182016130ff576130ff612f60565b5060010190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131565784516001600160a01b031683529383019391830191600101613131565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561318c57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220b05bceec6cfddec46eadc933559013495daf645ecc051cc3e8614f4abf0fbd8e64736f6c63430008110033

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.