ETH Price: $2,482.79 (-0.98%)

Token

G Revolution (G)
 

Overview

Max Total Supply

100,000,000 G

Holders

649

Market

Price

$0.00 @ 0.000001 ETH

Onchain Market Cap

$139,896.00

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 9 Decimals)

Balance
6,698.116429065 G

Value
$9.37 ( ~0.00377398704821013 Eth) [0.0067%]
0x8b484f9f95c35153cfce35045cae2da13617e759
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 13 : ProofNonReflectionTokenCutter.sol
// SPDX-License-Identifier: None
pragma solidity ^0.8.17;

import "@openzeppelin/contracts/token/ERC721/IERC721.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 "../interfaces/IProofNonReflectionTokenCutter.sol";

contract ProofNonReflectionTokenCutter is
    Context,
    IProofNonReflectionTokenCutter
{

    //This token was created with PROOF, and audited by Solidity Finance — https://proofplatform.io/projects
    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;
    uint256 public whitelistEndTime;

    bool public restrictWhales = true;

    mapping(address => bool) public userWhitelist;
    address[] public nftWhitelist;
    bool public whitelistMode = 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(
        BaseData memory _baseData,
        ProofNonReflectionTokenFees.allFees memory fees
    ) external onlyFactory {
        _name = _baseData.tokenName;
        _symbol = _baseData.tokenSymbol;
        _totalSupply = _baseData.initialSupply;

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

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

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

        userWhitelist[address(this)] = true;
        userWhitelist[factory] = true;
        userWhitelist[pair] = true;
        userWhitelist[_baseData.owner] = true;
        userWhitelist[_baseData.initialProofAdmin] = true;
        userWhitelist[_baseData.routerAddress] = true;
        _addWhitelist(_baseData.whitelists);
        nftWhitelist = _baseData.nftWhitelist;

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

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

        whitelistEndTime = _baseData.whitelistEndTime;

        //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 = _baseData.owner;
        devWallet = payable(_baseData.dev);
        mainWallet = payable(_baseData.main);
        proofAdmin = _baseData.initialProofAdmin;

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

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

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

    //proofAdmin functions

    function updateWhitelistEndTime(
        uint256 _whitelistEndTime
    ) external onlyProofAdmin {
        require(
            block.timestamp < _whitelistEndTime,
            "invalid whitelistEndTime"
        );
        whitelistEndTime = _whitelistEndTime;
        whitelistMode = true;
    }

    function updateProofAdmin(
        address newAdmin
    ) external virtual onlyProofAdmin {
        proofAdmin = newAdmin;
        userWhitelist[newAdmin] = true;
    }

    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;
        restrictWhales = false;
        swapAndLiquifyEnabled = false;
    }

    //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, "Min 0.5%");	
        require(newLimit <= (_totalSupply * 3) / 100, "Max 3%");
        _maxTxAmount = newLimit;
    }

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

    function changeRestrictWhales(bool newValue) external onlyOwner {
        require(launchedAt != 0, "!launched");
        restrictWhales = newValue;
    }

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

    function changeIsTxLimitExempt(
        address holder,
        bool exempt
    ) external onlyOwner {
        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 adjustProofFee(uint256 _proofFee) external onlyProofAdmin {	
        require(launchedAt != 0, "!launched");	
        if (block.timestamp >= launchedAt + 72 hours) {	
            require(_proofFee <= 1);	
            proofFee = _proofFee;	
            totalFee = devFee + lpFee + proofFee + mainFee;	
            totalFeeIfSelling =	
                devFeeOnSell +	
                lpFeeOnSell +	
                proofFee +	
                mainFeeOnSell;	
        } else {	
            require(_proofFee <= 2);	
            proofFee = _proofFee;	
            totalFee = devFee + lpFee + proofFee + mainFee;	
            totalFeeIfSelling =	
                devFeeOnSell +	
                lpFeeOnSell +	
                proofFee +	
                mainFeeOnSell;	
        }	
    }

    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 isWhitelisted(address user) public view returns (bool) {
        return userWhitelist[user];
    }
    function holdsSupportedNFT(address user) public view returns (bool) {
        for (uint256 i = 0; i < nftWhitelist.length; i++) {
            if (IERC721(nftWhitelist[i]).balanceOf(user) > 0) {
                return true;
            }
        }
        return 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(whitelistMode) {
            if (block.timestamp >= whitelistEndTime ) {
                whitelistMode = false;
            } else {
                if (sender == pair) { //buy
                    require(isWhitelisted(recipient) || holdsSupportedNFT(recipient), "Not whitelisted");
                } else if (recipient == pair) { //sell
                    require(isWhitelisted(sender) || holdsSupportedNFT(sender), "Not whitelisted");
                } else { //transfer
                    require((isWhitelisted(sender) || holdsSupportedNFT(sender)) && (isWhitelisted(recipient) || holdsSupportedNFT(recipient)), "Not Whitelisted");
                }
            }
        }

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

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

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

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

        if (sender == pair || recipient == pair) {
            finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient]
                ? takeFee(sender, recipient, amount)
                : amount;
        }

        _balances[recipient] = _balances[recipient] + finalAmount;

        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;
        if (amountToSwap == 0) return;

        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) {
            amountEthLiquidity =
                (amountETH * lpFeeOnSell) /
                totalFeeIfSelling /
                2;
        } else {
            amountEthLiquidity = (amountETH * lpFee) / totalFee / 2;
        }

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

        uint256 amountETHafterLP = address(this).balance;

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

        uint256 amountEthMain = amountETHafterLP - devBalance - proofBalance;

        if (amountETH > 0) {
            if (proofBalance > 0) {
                uint256 revenueSplit = proofBalance / 2;
                (bool sent, ) = payable(IFACTORY(factory).proofRevenueAddress()).call{value: revenueSplit}("");
                require(sent);
                (bool sent1, ) = payable(IFACTORY(factory).proofRewardPoolAddress()).call{value: revenueSplit}("");
                require(sent1);
            }
            if (devBalance > 0) {
                (bool sent, ) = devWallet.call{value: devBalance}("");
                require(sent);
            }
            if (amountEthMain > 0) {
                (bool sent1, ) = mainWallet.call{value: amountEthMain}("");
                require(sent1);
            }
        }
    }

    function _addWhitelist(address[] memory _whitelists) internal {
        uint256 length = _whitelists.length;
        for (uint256 i = 0; i < length; i++) {
            userWhitelist[_whitelists[i]] = true;
        }
    }

    function addMoreToWhitelist(WhitelistAdd_ memory _WhitelistAdd) external onlyFactory {
        _addWhitelist(_WhitelistAdd.whitelists);
    }

    receive() external payable {}
}

File 2 of 13 : 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 3 of 13 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

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

File 4 of 13 : IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
     * understand this adds an external call which potentially creates a reentrancy vulnerability.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

File 5 of 13 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 6 of 13 : 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;

    function setMinPeriod(uint256 _minPeriod) external;

    function setMinDistribution(uint256 _minDistribution) external;

    function rewardTokenAddress() external view returns(address);
}

File 7 of 13 : IFACTORY.sol
// SPDX-License-Identifier: None
pragma solidity ^0.8.17;

interface IFACTORY {
    function proofRevenueAddress() external view returns (address);

    function proofRewardPoolAddress() external view returns (address);
}

File 8 of 13 : IProofNonReflectionTokenCutter.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/ProofNonReflectionTokenFees.sol";

interface IProofNonReflectionTokenCutter is IERC20, IERC20Metadata {
    struct BaseData {
        string tokenName;
        string tokenSymbol;
        uint256 initialSupply;
        uint256 percentToLP;
        uint256 whitelistEndTime;
        address owner;
        address dev;
        address main;
        address routerAddress;
        address initialProofAdmin;
        address[] whitelists;
        address[] nftWhitelist;
    }

    struct WhitelistAdd_ {
        address [] whitelists;
    }

    function setBasicData(
        BaseData memory _baseData,
        ProofNonReflectionTokenFees.allFees memory fees
    ) external;

    function addMoreToWhitelist(
        WhitelistAdd_ memory _WhitelistAdd
    ) external;

    function updateWhitelistEndTime(
        uint256 _whitelistEndTime
    ) external;
}

File 9 of 13 : IUniswapV2Factory.sol
// SPDX-License-Identifier: None
pragma solidity ^0.8.17;

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

File 10 of 13 : 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 11 of 13 : 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 12 of 13 : 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(), "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),
            "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 13 of 13 : 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;
    }
}

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":[{"components":[{"internalType":"address[]","name":"whitelists","type":"address[]"}],"internalType":"struct IProofNonReflectionTokenCutter.WhitelistAdd_","name":"_WhitelistAdd","type":"tuple"}],"name":"addMoreToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proofFee","type":"uint256"}],"name":"adjustProofFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"holdsSupportedNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"user","type":"address"}],"name":"isWhitelisted","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftWhitelist","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"components":[{"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":"uint256","name":"whitelistEndTime","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"},{"internalType":"address[]","name":"whitelists","type":"address[]"},{"internalType":"address[]","name":"nftWhitelist","type":"address[]"}],"internalType":"struct IProofNonReflectionTokenCutter.BaseData","name":"_baseData","type":"tuple"},{"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"},{"inputs":[{"internalType":"uint256","name":"_whitelistEndTime","type":"uint256"}],"name":"updateWhitelistEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260088054600160ff199182168117909255600b805490911690911790556002601055601e805461ffff60a81b191661010160a81b17905534801561004757600080fd5b50601b80546001600160a01b03191633179055613a85806100696000396000f3fe6080604052600436106103f35760003560e01c8063807c2d9c11610208578063c45a015511610118578063dd62ed3e116100ab578063ef92e2221161007a578063ef92e22214610bd9578063f16fd78d14610bee578063f887ea4014610c0e578063fabe628314610c2e578063fbd7575314610c4e57600080fd5b8063dd62ed3e14610b3d578063e572967b14610b83578063e66b1d1e14610ba3578063ebdfd72214610bc357600080fd5b8063d0a5eb4e116100e7578063d0a5eb4e14610aac578063d4fb9a0114610acc578063d741b9c314610aed578063d920334e14610b1d57600080fd5b8063c45a015514610a40578063ca987b0e14610a60578063cb29813c14610a76578063cd1e330a14610a9657600080fd5b8063a3e676101161019b578063b515566a1161016a578063b515566a1461099a578063b72344a2146109ba578063bb542ef0146109da578063bf56b371146109fa578063bfd7928414610a1057600080fd5b8063a3e676101461091a578063a457c2d71461093a578063a8aa1b311461095a578063a9059cbb1461097a57600080fd5b80639502c426116101d75780639502c426146108b957806395d89b41146108cf578063985b9db0146108e4578063a3a2e89e146108fa57600080fd5b8063807c2d9c146108335780638b42507f146108495780638ea5220f1461087957806390fbd17f1461089957600080fd5b80633c8228121161030357806359a51c341161029657806370a082311161026557806370a082311461079757806370c757ec146107cd5780637c0ff205146107e75780637d1db4a5146107fd5780637db1342c1461081357600080fd5b806359a51c341461072b5780636457f6bf1461074b5780636827e7641461076b578063704ce43e1461078157600080fd5b806344de2e4c116102d257806344de2e4c146106bb5780634509a988146106d55780634a74bb02146106f5578063546a88111461071657600080fd5b80633c8228121461061b5780633dab52691461063b5780633f4218e01461065b5780634355855a1461068b57600080fd5b806323b62b75116103865780632837442511610355578063283744251461058a5780632b112e49146105aa578063313ce567146105bf57806339509351146105db5780633af32abf146105fb57600080fd5b806323b62b75146104fd57806323b872dd1461053557806327193bc414610555578063273123b71461056a57600080fd5b80630b6fc5cf116103c25780630b6fc5cf1461049057806318160ddd146104b25780631df4ccfc146104c75780631f53ac02146104dd57600080fd5b80630445b667146103ff57806306fdde0314610428578063095ea7b31461044a5780630963da6c1461047a57600080fd5b366103fa57005b600080fd5b34801561040b57600080fd5b5061041560225481565b6040519081526020015b60405180910390f35b34801561043457600080fd5b5061043d610c63565b60405161041f9190613061565b34801561045657600080fd5b5061046a6104653660046130d4565b610cf5565b604051901515815260200161041f565b34801561048657600080fd5b5061041560115481565b34801561049c57600080fd5b506104b06104ab366004613100565b610d0f565b005b3480156104be57600080fd5b50600254610415565b3480156104d357600080fd5b5061041560175481565b3480156104e957600080fd5b506104b06104f8366004613119565b610da3565b34801561050957600080fd5b50601e5461051d906001600160a01b031681565b6040516001600160a01b03909116815260200161041f565b34801561054157600080fd5b5061046a610550366004613136565b610def565b34801561056157600080fd5b506104b0610e16565b34801561057657600080fd5b506104b0610585366004613119565b610e89565b34801561059657600080fd5b5060055461051d906001600160a01b031681565b3480156105b657600080fd5b50610415610f2f565b3480156105cb57600080fd5b506040516009815260200161041f565b3480156105e757600080fd5b5061046a6105f63660046130d4565b610f9b565b34801561060757600080fd5b5061046a610616366004613119565b610fda565b34801561062757600080fd5b506104b0610636366004613100565b610ff8565b34801561064757600080fd5b506104b0610656366004613187565b6110d9565b34801561066757600080fd5b5061046a610676366004613119565b600c6020526000908152604090205460ff1681565b34801561069757600080fd5b5061046a6106a6366004613119565b600e6020526000908152604090205460ff1681565b3480156106c757600080fd5b5060085461046a9060ff1681565b3480156106e157600080fd5b5061051d6106f0366004613100565b611125565b34801561070157600080fd5b50601e5461046a90600160a81b900460ff1681565b34801561072257600080fd5b506104b061114f565b34801561073757600080fd5b5060065461051d906001600160a01b031681565b34801561075757600080fd5b506104b0610766366004613387565b6111f5565b34801561077757600080fd5b5061041560135481565b34801561078d57600080fd5b5061041560125481565b3480156107a357600080fd5b506104156107b2366004613119565b6001600160a01b031660009081526020819052604090205490565b3480156107d957600080fd5b50600b5461046a9060ff1681565b3480156107f357600080fd5b5061041560155481565b34801561080957600080fd5b5061041560205481565b34801561081f57600080fd5b506104b061082e366004613100565b611878565b34801561083f57600080fd5b5061041560215481565b34801561085557600080fd5b5061046a610864366004613119565b600d6020526000908152604090205460ff1681565b34801561088557600080fd5b50601d5461051d906001600160a01b031681565b3480156108a557600080fd5b5061046a6108b4366004613119565b611972565b3480156108c557600080fd5b5061041560165481565b3480156108db57600080fd5b5061043d611a36565b3480156108f057600080fd5b5061041560145481565b34801561090657600080fd5b506104b06109153660046134ee565b611a45565b34801561092657600080fd5b50601c5461051d906001600160a01b031681565b34801561094657600080fd5b5061046a6109553660046130d4565b611a9a565b34801561096657600080fd5b50601a5461051d906001600160a01b031681565b34801561098657600080fd5b5061046a6109953660046130d4565b611b37565b3480156109a657600080fd5b506104b06109b536600461351a565b611b45565b3480156109c657600080fd5b506104b06109d5366004613119565b611bdb565b3480156109e657600080fd5b506104b06109f5366004613119565b611c27565b348015610a0657600080fd5b50610415600f5481565b348015610a1c57600080fd5b5061046a610a2b366004613119565b601f6020526000908152604090205460ff1681565b348015610a4c57600080fd5b50601b5461051d906001600160a01b031681565b348015610a6c57600080fd5b5061041560185481565b348015610a8257600080fd5b506104b0610a91366004613557565b611c73565b348015610aa257600080fd5b5061041560105481565b348015610ab857600080fd5b506104b0610ac7366004613119565b611d5c565b348015610ad857600080fd5b50601e5461046a90600160b01b900460ff1681565b348015610af957600080fd5b5061046a610b08366004613119565b60096020526000908152604090205460ff1681565b348015610b2957600080fd5b506104b0610b38366004613100565b611da8565b348015610b4957600080fd5b50610415610b5836600461359a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b8f57600080fd5b506104b0610b9e3660046135d3565b611ea2565b348015610baf57600080fd5b506104b0610bbe366004613656565b611ed7565b348015610bcf57600080fd5b5061041560075481565b348015610be557600080fd5b506104b0611f36565b348015610bfa57600080fd5b506104b0610c09366004613119565b612075565b348015610c1a57600080fd5b5060195461051d906001600160a01b031681565b348015610c3a57600080fd5b506104b0610c493660046134ee565b6120d9565b348015610c5a57600080fd5b506104b061212e565b606060038054610c7290613671565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9e90613671565b8015610ceb5780601f10610cc057610100808354040283529160200191610ceb565b820191906000526020600020905b815481529060010190602001808311610cce57829003601f168201915b5050505050905090565b600033610d03818585612179565b60019150505b92915050565b6006546001600160a01b03163314610d425760405162461bcd60e51b8152600401610d39906136ab565b60405180910390fd5b804210610d915760405162461bcd60e51b815260206004820152601860248201527f696e76616c69642077686974656c697374456e6454696d6500000000000000006044820152606401610d39565b600755600b805460ff19166001179055565b601c546001600160a01b03163314610dcd5760405162461bcd60e51b8152600401610d39906136f0565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b600033610dfd85828561229d565b610e0885858561232f565b5060019150505b9392505050565b601b546001600160a01b03163314610e405760405162461bcd60e51b8152600401610d3990613725565b600f5415610e835760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606401610d39565b42600f55565b60065433906001600160a01b0316811480610eb15750601c546001600160a01b038281169116145b610f0d5760405162461bcd60e51b815260206004820152602760248201527f4f77616e626c653a2063616c6c657220646f65736e277420686176652070657260448201526636b4b9b9b4b7b760c91b6064820152608401610d39565b506001600160a01b03166000908152601f60205260409020805460ff19169055565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf8354600254610f8c919061377d565b610f96919061377d565b905090565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610d039082908690610fd5908790613790565b612179565b6001600160a01b031660009081526009602052604090205460ff1690565b6006546001600160a01b031633146110225760405162461bcd60e51b8152600401610d39906136ab565b600f546000036110445760405162461bcd60e51b8152600401610d39906137a3565b600f54611054906203f480613790565b42106110c857600181111561106857600080fd5b6010819055601154601254601354839161108191613790565b61108b9190613790565b6110959190613790565b6017556014546010546015546016546110ae9190613790565b6110b89190613790565b6110c29190613790565b60185550565b600281111561106857600080fd5b50565b601c546001600160a01b031633146111035760405162461bcd60e51b8152600401610d39906136f0565b601e8054921515600160a81b0260ff60a81b1990931692909217909155602255565b600a818154811061113557600080fd5b6000918252602090912001546001600160a01b0316905081565b601b546001600160a01b031633146111795760405162461bcd60e51b8152600401610d3990613725565b601980546001600160a01b039081166000908152600c60209081526040808320805460ff199081166001908117909255955485168452600d9092528083208054861683179055601c549093168252919020805483169091179055601e80546008805490931690925561ffff60a81b19909116600160b01b179055565b601b546001600160a01b0316331461121f5760405162461bcd60e51b8152600401610d3990613725565b815160039061122e908261380c565b506020820151600490611241908261380c565b5060408201516002556060820151604611156112895760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610d39565b6103e88260400151600561129d91906138cc565b6112a791906138e3565b60205560408201516064906112bd9060016138cc565b6112c791906138e3565b6021556040820151610fa0906112de9060056138cc565b6112e891906138e3565b602255610100820151601980546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801561134a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136e9190613905565b6001600160a01b031663c9c65396601960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f39190613905565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801561143f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114639190613905565b601a80546001600160a01b0319166001600160a01b03928316178155306000818152600160208181526040808420601954881685528252808420600019905593835260099052828220805460ff199081168317909155601b54861683528383208054821683179055935485168252828220805485168217905560a08701518516825282822080548516821790556101208701518516825282822080548516821790556101008701519094168152208054909116909117905561014082015161152a906127f1565b610160820151805161154491600a91602090910190612fe7565b50306000908152600c602090815260408083208054600160ff199182168117909255601b80546001600160a01b039081168752848720805484168517905560a089810180518316895286892080548616871790555182168852600d87528588208054851686179055601a54821688528588208054851686179055915416865283862080548316841790557fdc7fafdc41998a74ecacb8f8bd877011aba1f1d03a3a0d37a2e7879a393b1d6a80548316841790559480527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee8054909116909117905560808086015160075590840151601281905560608501516015559084015160138190559284015160165583516011819055918401516014556010549261166b9190613790565b6116759190613790565b61167f9190613790565b6017556010546014546015546016546116989190613790565b6116a29190613790565b6116ac9190613790565b601855601754600c10156116d25760405162461bcd60e51b8152600401610d3990613922565b601160185411156117195760405162461bcd60e51b8152602060048201526011602482015270546f6f20686967682073656c6c2066656560781b6044820152606401610d39565b60a0820151601c80546001600160a01b039283166001600160a01b03199182161790915560c0840151601d805491841691831691909117905560e0840151601e8054918416918316919091179055610120840151600680549190931691161790556060820151604083015160009160649161179491906138cc565b61179e91906138e3565b905060008184604001516117b2919061377d565b336000908152602081905260408120805492935084929091906117d6908490613790565b909155505060a08401516001600160a01b031660009081526020819052604081208054839290611807908490613790565b90915550506040518281523390600090600080516020613a308339815191529060200160405180910390a38360a001516001600160a01b031660006001600160a01b0316600080516020613a308339815191528360405161186a91815260200190565b60405180910390a350505050565b601c546001600160a01b031633146118a25760405162461bcd60e51b8152600401610d39906136f0565b600f546000036118c45760405162461bcd60e51b8152600401610d39906137a3565b6103e860025460056118d691906138cc565b6118e091906138e3565b81101561191a5760405162461bcd60e51b81526020600482015260086024820152674d696e20302e352560c01b6044820152606401610d39565b6064600254600361192b91906138cc565b61193591906138e3565b81111561196d5760405162461bcd60e51b81526020600482015260066024820152654d617820332560d01b6044820152606401610d39565b602155565b6000805b600a54811015611a2d576000600a828154811061199557611995613948565b6000918252602090912001546040516370a0823160e01b81526001600160a01b038681166004830152909116906370a0823190602401602060405180830381865afa1580156119e8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0c919061395e565b1115611a1b5750600192915050565b80611a2581613977565b915050611976565b50600092915050565b606060048054610c7290613671565b601c546001600160a01b03163314611a6f5760405162461bcd60e51b8152600401610d39906136f0565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015611b1f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d39565b611b2c8286868403612179565b506001949350505050565b600033611b2c81858561232f565b6006546001600160a01b03163314611b6f5760405162461bcd60e51b8152600401610d39906136ab565b60005b8151811015611bd7576001601f6000848481518110611b9357611b93613948565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611bcf81613977565b915050611b72565b5050565b6006546001600160a01b03163314611c055760405162461bcd60e51b8152600401610d39906136ab565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b601c546001600160a01b03163314611c515760405162461bcd60e51b8152600401610d39906136f0565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b601c546001600160a01b03163314611c9d5760405162461bcd60e51b8152600401610d39906136f0565b6011869055601284905560138290556014859055601583905560168190556010548690611cca8685613790565b611cd49190613790565b611cde9190613790565b601755601454601054601554601654611cf79190613790565b611d019190613790565b611d0b9190613790565b601855601754600c1015611d315760405162461bcd60e51b8152600401610d3990613922565b60116018541115611d545760405162461bcd60e51b8152600401610d3990613922565b505050505050565b601c546001600160a01b03163314611d865760405162461bcd60e51b8152600401610d39906136f0565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b601c546001600160a01b03163314611dd25760405162461bcd60e51b8152600401610d39906136f0565b600f54600003611df45760405162461bcd60e51b8152600401610d39906137a3565b6103e86002546005611e0691906138cc565b611e1091906138e3565b811015611e4a5760405162461bcd60e51b81526020600482015260086024820152674d696e20302e352560c01b6044820152606401610d39565b60646002546003611e5b91906138cc565b611e6591906138e3565b811115611e9d5760405162461bcd60e51b81526020600482015260066024820152654d617820332560d01b6044820152606401610d39565b602055565b601b546001600160a01b03163314611ecc5760405162461bcd60e51b8152600401610d3990613725565b80516110d6906127f1565b601c546001600160a01b03163314611f015760405162461bcd60e51b8152600401610d39906136f0565b600f54600003611f235760405162461bcd60e51b8152600401610d39906137a3565b6008805460ff1916911515919091179055565b601c546001600160a01b03163314611f605760405162461bcd60e51b8152600401610d39906136f0565b601054600214611fa55760405162461bcd60e51b815260206004820152601060248201526f08585b1c9958591e481c99591d58d95960821b6044820152606401610d39565b600f54600003611fc75760405162461bcd60e51b8152600401610d39906137a3565b600f54611fd7906203f480613790565b4210156120115760405162461bcd60e51b81526020600482015260086024820152673a37b79039b7b7b760c11b6044820152606401610d39565b600160108190555060115460105460125460135461202f9190613790565b6120399190613790565b6120439190613790565b60175560145460105460155460165461205c9190613790565b6120669190613790565b6120709190613790565b601855565b6006546001600160a01b0316331461209f5760405162461bcd60e51b8152600401610d39906136ab565b600680546001600160a01b039092166001600160a01b0319909216821790556000908152600960205260409020805460ff19166001179055565b601c546001600160a01b031633146121035760405162461bcd60e51b8152600401610d39906136f0565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b601b546001600160a01b031633146121585760405162461bcd60e51b8152600401610d3990613725565b601e805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6001600160a01b0383166121db5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d39565b6001600160a01b03821661223c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d39565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114612329578181101561231c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610d39565b6123298484848403612179565b50505050565b601e54600090600160b01b900460ff1661237c5760405162461bcd60e51b815260206004820152600e60248201526d151c98591a5b99c810db1bdcd95960921b6044820152606401610d39565b6001600160a01b0384166000908152601f602052604090205460ff161580156123be57506001600160a01b0383166000908152601f602052604090205460ff16155b6123c757600080fd5b600b5460ff16156124fe5760075442106123ea57600b805460ff191690556124fe565b601a546001600160a01b039081169085160361245b5761240983610fda565b80612418575061241883611972565b6124565760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610d39565b6124fe565b601a546001600160a01b03908116908416036124895761247a84610fda565b80612418575061241884611972565b61249284610fda565b806124a157506124a184611972565b80156124c057506124b183610fda565b806124c057506124c083611972565b6124fe5760405162461bcd60e51b815260206004820152600f60248201526e139bdd0815da1a5d195b1a5cdd1959608a1b6044820152606401610d39565b601e54600160a01b900460ff16156125225761251b84848461285f565b9050610e0f565b601a546001600160a01b038481169116148015612541575060085460ff165b156125c7576020548211158061259257506001600160a01b0384166000908152600d602052604090205460ff16801561259257506001600160a01b0383166000908152600d602052604090205460ff165b6125c75760405162461bcd60e51b815260206004820152600660248201526509ac2f040a8b60d31b6044820152606401610d39565b6001600160a01b0383166000908152600d602052604090205460ff161580156125f2575060085460ff165b15612659576021546001600160a01b03841660009081526020819052604090205461261e908490613790565b11156126595760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610d39565b601a546001600160a01b038581169116148015906126815750601e54600160a01b900460ff16155b80156126965750601e54600160a81b900460ff165b80156126b357506022543060009081526020819052604090205410155b156126c0576126c06128ff565b6001600160a01b0384166000908152602081905260409020546126e490839061377d565b6001600160a01b03808616600081815260208190526040902092909255601a548492911614806127215750601a546001600160a01b038581169116145b15612780576001600160a01b0385166000908152600c602052604090205460ff1615801561276857506001600160a01b0384166000908152600c602052604090205460ff16155b612772578261277d565b61277d858585612f36565b90505b6001600160a01b0384166000908152602081905260409020546127a4908290613790565b6001600160a01b03858116600081815260208181526040918290209490945551848152909291881691600080516020613a30833981519152910160405180910390a3506001949350505050565b805160005b8181101561285a5760016009600085848151811061281657612816613948565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061285281613977565b9150506127f6565b505050565b6001600160a01b03831660009081526020819052604081205461288390839061377d565b6001600160a01b0380861660009081526020819052604080822093909355908516815220546128b3908390613790565b6001600160a01b03848116600081815260208181526040918290209490945551858152909291871691600080516020613a30833981519152910160405180910390a35060019392505050565b601e805460ff60a01b1916600160a01b179055306000908152602081905260408120546017549091908190819081906002106129635760026018546015548761294891906138cc565b61295291906138e3565b61295c91906138e3565b935061298d565b60026017546012548761297691906138cc565b61298091906138e3565b61298a91906138e3565b93505b6000612999858761377d565b9050806000036129ae57505050505050612f27565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129e3576129e3613948565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a609190613905565b81600181518110612a7357612a73613948565b6001600160a01b03928316602091820292909201015260195460405163791ac94760e01b815291169063791ac94790612ab9908590600090869030904290600401613990565b600060405180830381600087803b158015612ad357600080fd5b505af1158015612ae7573d6000803e3d6000fd5b505050506000479050600260175411612b2857600260185460155483612b0d91906138cc565b612b1791906138e3565b612b2191906138e3565b9350612b52565b600260175460125483612b3b91906138cc565b612b4591906138e3565b612b4f91906138e3565b93505b8615612bef5760195460405163f305d71960e01b815230600482015260248101899052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990869060c40160606040518083038185885af1158015612bc6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612beb9190613a01565b5050505b6017544790600210612c3957601854601654612c0b90836138cc565b612c1591906138e3565b965060185460105482612c2891906138cc565b612c3291906138e3565b9550612c73565b601754601354612c4990836138cc565b612c5391906138e3565b965060175460105482612c6691906138cc565b612c7091906138e3565b95505b600086612c80898461377d565b612c8a919061377d565b90508215612f1c578615612e4c576000612ca56002896138e3565b90506000601b60009054906101000a90046001600160a01b03166001600160a01b0316633690e2876040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d209190613905565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114612d6a576040519150601f19603f3d011682016040523d82523d6000602084013e612d6f565b606091505b5050905080612d7d57600080fd5b601b546040805163d7e7a9e760e01b815290516000926001600160a01b03169163d7e7a9e79160048083019260209291908290030181865afa158015612dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612deb9190613905565b6001600160a01b03168360405160006040518083038185875af1925050503d8060008114612e35576040519150601f19603f3d011682016040523d82523d6000602084013e612e3a565b606091505b5050905080612e4857600080fd5b5050505b8715612eb457601d546040516000916001600160a01b0316908a908381818185875af1925050503d8060008114612e9f576040519150601f19603f3d011682016040523d82523d6000602084013e612ea4565b606091505b5050905080612eb257600080fd5b505b8015612f1c57601e546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612f07576040519150601f19603f3d011682016040523d82523d6000602084013e612f0c565b606091505b5050905080612f1a57600080fd5b505b505050505050505050505b601e805460ff60a01b19169055565b601a5460009081906001600160a01b03858116911614612f5857601754612f5c565b6018545b905060006064612f6c83866138cc565b612f7691906138e3565b30600090815260208190526040902054909150612f94908290613790565b3060008181526020818152604091829020939093555183815290916001600160a01b03891691600080516020613a30833981519152910160405180910390a3612fdd818561377d565b9695505050505050565b82805482825590600052602060002090810192821561303c579160200282015b8281111561303c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613007565b5061304892915061304c565b5090565b5b80821115613048576000815560010161304d565b600060208083528351808285015260005b8181101561308e57858101830151858201604001528201613072565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146110d657600080fd5b80356130cf816130af565b919050565b600080604083850312156130e757600080fd5b82356130f2816130af565b946020939093013593505050565b60006020828403121561311257600080fd5b5035919050565b60006020828403121561312b57600080fd5b8135610e0f816130af565b60008060006060848603121561314b57600080fd5b8335613156816130af565b92506020840135613166816130af565b929592945050506040919091013590565b803580151581146130cf57600080fd5b6000806040838503121561319a57600080fd5b6130f283613177565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff811182821017156131dd576131dd6131a3565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561320c5761320c6131a3565b604052919050565b600082601f83011261322557600080fd5b813567ffffffffffffffff81111561323f5761323f6131a3565b613252601f8201601f19166020016131e3565b81815284602083860101111561326757600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261329557600080fd5b8135602067ffffffffffffffff8211156132b1576132b16131a3565b8160051b6132c08282016131e3565b92835284810182019282810190878511156132da57600080fd5b83870192505b848310156133025782356132f3816130af565b825291830191908301906132e0565b979650505050505050565b600060c0828403121561331f57600080fd5b60405160c0810181811067ffffffffffffffff82111715613342576133426131a3565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b60008060e0838503121561339a57600080fd5b823567ffffffffffffffff808211156133b257600080fd5b9084019061018082870312156133c757600080fd5b6133cf6131b9565b8235828111156133de57600080fd5b6133ea88828601613214565b8252506020830135828111156133ff57600080fd5b61340b88828601613214565b60208301525060408301356040820152606083013560608201526080830135608082015261343b60a084016130c4565b60a082015261344c60c084016130c4565b60c082015261345d60e084016130c4565b60e08201526101006134708185016130c4565b908201526101206134828482016130c4565b90820152610140838101358381111561349a57600080fd5b6134a689828701613284565b82840152505061016080840135838111156134c057600080fd5b6134cc89828701613284565b8284015250508094505050506134e5846020850161330d565b90509250929050565b6000806040838503121561350157600080fd5b823561350c816130af565b91506134e560208401613177565b60006020828403121561352c57600080fd5b813567ffffffffffffffff81111561354357600080fd5b61354f84828501613284565b949350505050565b60008060008060008060c0878903121561357057600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080604083850312156135ad57600080fd5b82356135b8816130af565b915060208301356135c8816130af565b809150509250929050565b6000602082840312156135e557600080fd5b813567ffffffffffffffff808211156135fd57600080fd5b908301906020828603121561361157600080fd5b60405160208101818110838211171561362c5761362c6131a3565b60405282358281111561363e57600080fd5b61364a87828601613284565b82525095945050505050565b60006020828403121561366857600080fd5b610e0f82613177565b600181811c9082168061368557607f821691505b6020821081036136a557634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526025908201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652070726f6f6660408201526420b236b4b760d91b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526022908201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520666163746f604082015261727960f01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610d0957610d09613767565b80820180821115610d0957610d09613767565b602080825260099082015268085b185d5b98da195960ba1b604082015260600190565b601f82111561285a57600081815260208120601f850160051c810160208610156137ed5750805b601f850160051c820191505b81811015611d54578281556001016137f9565b815167ffffffffffffffff811115613826576138266131a3565b61383a816138348454613671565b846137c6565b602080601f83116001811461386f57600084156138575750858301515b600019600386901b1c1916600185901b178555611d54565b600085815260208120601f198616915b8281101561389e5788860151825594840194600190910190840161387f565b50858210156138bc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082028115828204841417610d0957610d09613767565b60008261390057634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561391757600080fd5b8151610e0f816130af565b6020808252600c908201526b546f6f20686967682066656560a01b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561397057600080fd5b5051919050565b60006001820161398957613989613767565b5060010190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139e05784516001600160a01b0316835293830193918301916001016139bb565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613a1657600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212200be5a6995a71a304519f4de4f17e3f0c3eab14b41a895111ee50d99704acceca64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103f35760003560e01c8063807c2d9c11610208578063c45a015511610118578063dd62ed3e116100ab578063ef92e2221161007a578063ef92e22214610bd9578063f16fd78d14610bee578063f887ea4014610c0e578063fabe628314610c2e578063fbd7575314610c4e57600080fd5b8063dd62ed3e14610b3d578063e572967b14610b83578063e66b1d1e14610ba3578063ebdfd72214610bc357600080fd5b8063d0a5eb4e116100e7578063d0a5eb4e14610aac578063d4fb9a0114610acc578063d741b9c314610aed578063d920334e14610b1d57600080fd5b8063c45a015514610a40578063ca987b0e14610a60578063cb29813c14610a76578063cd1e330a14610a9657600080fd5b8063a3e676101161019b578063b515566a1161016a578063b515566a1461099a578063b72344a2146109ba578063bb542ef0146109da578063bf56b371146109fa578063bfd7928414610a1057600080fd5b8063a3e676101461091a578063a457c2d71461093a578063a8aa1b311461095a578063a9059cbb1461097a57600080fd5b80639502c426116101d75780639502c426146108b957806395d89b41146108cf578063985b9db0146108e4578063a3a2e89e146108fa57600080fd5b8063807c2d9c146108335780638b42507f146108495780638ea5220f1461087957806390fbd17f1461089957600080fd5b80633c8228121161030357806359a51c341161029657806370a082311161026557806370a082311461079757806370c757ec146107cd5780637c0ff205146107e75780637d1db4a5146107fd5780637db1342c1461081357600080fd5b806359a51c341461072b5780636457f6bf1461074b5780636827e7641461076b578063704ce43e1461078157600080fd5b806344de2e4c116102d257806344de2e4c146106bb5780634509a988146106d55780634a74bb02146106f5578063546a88111461071657600080fd5b80633c8228121461061b5780633dab52691461063b5780633f4218e01461065b5780634355855a1461068b57600080fd5b806323b62b75116103865780632837442511610355578063283744251461058a5780632b112e49146105aa578063313ce567146105bf57806339509351146105db5780633af32abf146105fb57600080fd5b806323b62b75146104fd57806323b872dd1461053557806327193bc414610555578063273123b71461056a57600080fd5b80630b6fc5cf116103c25780630b6fc5cf1461049057806318160ddd146104b25780631df4ccfc146104c75780631f53ac02146104dd57600080fd5b80630445b667146103ff57806306fdde0314610428578063095ea7b31461044a5780630963da6c1461047a57600080fd5b366103fa57005b600080fd5b34801561040b57600080fd5b5061041560225481565b6040519081526020015b60405180910390f35b34801561043457600080fd5b5061043d610c63565b60405161041f9190613061565b34801561045657600080fd5b5061046a6104653660046130d4565b610cf5565b604051901515815260200161041f565b34801561048657600080fd5b5061041560115481565b34801561049c57600080fd5b506104b06104ab366004613100565b610d0f565b005b3480156104be57600080fd5b50600254610415565b3480156104d357600080fd5b5061041560175481565b3480156104e957600080fd5b506104b06104f8366004613119565b610da3565b34801561050957600080fd5b50601e5461051d906001600160a01b031681565b6040516001600160a01b03909116815260200161041f565b34801561054157600080fd5b5061046a610550366004613136565b610def565b34801561056157600080fd5b506104b0610e16565b34801561057657600080fd5b506104b0610585366004613119565b610e89565b34801561059657600080fd5b5060055461051d906001600160a01b031681565b3480156105b657600080fd5b50610415610f2f565b3480156105cb57600080fd5b506040516009815260200161041f565b3480156105e757600080fd5b5061046a6105f63660046130d4565b610f9b565b34801561060757600080fd5b5061046a610616366004613119565b610fda565b34801561062757600080fd5b506104b0610636366004613100565b610ff8565b34801561064757600080fd5b506104b0610656366004613187565b6110d9565b34801561066757600080fd5b5061046a610676366004613119565b600c6020526000908152604090205460ff1681565b34801561069757600080fd5b5061046a6106a6366004613119565b600e6020526000908152604090205460ff1681565b3480156106c757600080fd5b5060085461046a9060ff1681565b3480156106e157600080fd5b5061051d6106f0366004613100565b611125565b34801561070157600080fd5b50601e5461046a90600160a81b900460ff1681565b34801561072257600080fd5b506104b061114f565b34801561073757600080fd5b5060065461051d906001600160a01b031681565b34801561075757600080fd5b506104b0610766366004613387565b6111f5565b34801561077757600080fd5b5061041560135481565b34801561078d57600080fd5b5061041560125481565b3480156107a357600080fd5b506104156107b2366004613119565b6001600160a01b031660009081526020819052604090205490565b3480156107d957600080fd5b50600b5461046a9060ff1681565b3480156107f357600080fd5b5061041560155481565b34801561080957600080fd5b5061041560205481565b34801561081f57600080fd5b506104b061082e366004613100565b611878565b34801561083f57600080fd5b5061041560215481565b34801561085557600080fd5b5061046a610864366004613119565b600d6020526000908152604090205460ff1681565b34801561088557600080fd5b50601d5461051d906001600160a01b031681565b3480156108a557600080fd5b5061046a6108b4366004613119565b611972565b3480156108c557600080fd5b5061041560165481565b3480156108db57600080fd5b5061043d611a36565b3480156108f057600080fd5b5061041560145481565b34801561090657600080fd5b506104b06109153660046134ee565b611a45565b34801561092657600080fd5b50601c5461051d906001600160a01b031681565b34801561094657600080fd5b5061046a6109553660046130d4565b611a9a565b34801561096657600080fd5b50601a5461051d906001600160a01b031681565b34801561098657600080fd5b5061046a6109953660046130d4565b611b37565b3480156109a657600080fd5b506104b06109b536600461351a565b611b45565b3480156109c657600080fd5b506104b06109d5366004613119565b611bdb565b3480156109e657600080fd5b506104b06109f5366004613119565b611c27565b348015610a0657600080fd5b50610415600f5481565b348015610a1c57600080fd5b5061046a610a2b366004613119565b601f6020526000908152604090205460ff1681565b348015610a4c57600080fd5b50601b5461051d906001600160a01b031681565b348015610a6c57600080fd5b5061041560185481565b348015610a8257600080fd5b506104b0610a91366004613557565b611c73565b348015610aa257600080fd5b5061041560105481565b348015610ab857600080fd5b506104b0610ac7366004613119565b611d5c565b348015610ad857600080fd5b50601e5461046a90600160b01b900460ff1681565b348015610af957600080fd5b5061046a610b08366004613119565b60096020526000908152604090205460ff1681565b348015610b2957600080fd5b506104b0610b38366004613100565b611da8565b348015610b4957600080fd5b50610415610b5836600461359a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b8f57600080fd5b506104b0610b9e3660046135d3565b611ea2565b348015610baf57600080fd5b506104b0610bbe366004613656565b611ed7565b348015610bcf57600080fd5b5061041560075481565b348015610be557600080fd5b506104b0611f36565b348015610bfa57600080fd5b506104b0610c09366004613119565b612075565b348015610c1a57600080fd5b5060195461051d906001600160a01b031681565b348015610c3a57600080fd5b506104b0610c493660046134ee565b6120d9565b348015610c5a57600080fd5b506104b061212e565b606060038054610c7290613671565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9e90613671565b8015610ceb5780601f10610cc057610100808354040283529160200191610ceb565b820191906000526020600020905b815481529060010190602001808311610cce57829003601f168201915b5050505050905090565b600033610d03818585612179565b60019150505b92915050565b6006546001600160a01b03163314610d425760405162461bcd60e51b8152600401610d39906136ab565b60405180910390fd5b804210610d915760405162461bcd60e51b815260206004820152601860248201527f696e76616c69642077686974656c697374456e6454696d6500000000000000006044820152606401610d39565b600755600b805460ff19166001179055565b601c546001600160a01b03163314610dcd5760405162461bcd60e51b8152600401610d39906136f0565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b600033610dfd85828561229d565b610e0885858561232f565b5060019150505b9392505050565b601b546001600160a01b03163314610e405760405162461bcd60e51b8152600401610d3990613725565b600f5415610e835760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606401610d39565b42600f55565b60065433906001600160a01b0316811480610eb15750601c546001600160a01b038281169116145b610f0d5760405162461bcd60e51b815260206004820152602760248201527f4f77616e626c653a2063616c6c657220646f65736e277420686176652070657260448201526636b4b9b9b4b7b760c91b6064820152608401610d39565b506001600160a01b03166000908152601f60205260409020805460ff19169055565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf8354600254610f8c919061377d565b610f96919061377d565b905090565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610d039082908690610fd5908790613790565b612179565b6001600160a01b031660009081526009602052604090205460ff1690565b6006546001600160a01b031633146110225760405162461bcd60e51b8152600401610d39906136ab565b600f546000036110445760405162461bcd60e51b8152600401610d39906137a3565b600f54611054906203f480613790565b42106110c857600181111561106857600080fd5b6010819055601154601254601354839161108191613790565b61108b9190613790565b6110959190613790565b6017556014546010546015546016546110ae9190613790565b6110b89190613790565b6110c29190613790565b60185550565b600281111561106857600080fd5b50565b601c546001600160a01b031633146111035760405162461bcd60e51b8152600401610d39906136f0565b601e8054921515600160a81b0260ff60a81b1990931692909217909155602255565b600a818154811061113557600080fd5b6000918252602090912001546001600160a01b0316905081565b601b546001600160a01b031633146111795760405162461bcd60e51b8152600401610d3990613725565b601980546001600160a01b039081166000908152600c60209081526040808320805460ff199081166001908117909255955485168452600d9092528083208054861683179055601c549093168252919020805483169091179055601e80546008805490931690925561ffff60a81b19909116600160b01b179055565b601b546001600160a01b0316331461121f5760405162461bcd60e51b8152600401610d3990613725565b815160039061122e908261380c565b506020820151600490611241908261380c565b5060408201516002556060820151604611156112895760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610d39565b6103e88260400151600561129d91906138cc565b6112a791906138e3565b60205560408201516064906112bd9060016138cc565b6112c791906138e3565b6021556040820151610fa0906112de9060056138cc565b6112e891906138e3565b602255610100820151601980546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801561134a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136e9190613905565b6001600160a01b031663c9c65396601960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f39190613905565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801561143f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114639190613905565b601a80546001600160a01b0319166001600160a01b03928316178155306000818152600160208181526040808420601954881685528252808420600019905593835260099052828220805460ff199081168317909155601b54861683528383208054821683179055935485168252828220805485168217905560a08701518516825282822080548516821790556101208701518516825282822080548516821790556101008701519094168152208054909116909117905561014082015161152a906127f1565b610160820151805161154491600a91602090910190612fe7565b50306000908152600c602090815260408083208054600160ff199182168117909255601b80546001600160a01b039081168752848720805484168517905560a089810180518316895286892080548616871790555182168852600d87528588208054851686179055601a54821688528588208054851686179055915416865283862080548316841790557fdc7fafdc41998a74ecacb8f8bd877011aba1f1d03a3a0d37a2e7879a393b1d6a80548316841790559480527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee8054909116909117905560808086015160075590840151601281905560608501516015559084015160138190559284015160165583516011819055918401516014556010549261166b9190613790565b6116759190613790565b61167f9190613790565b6017556010546014546015546016546116989190613790565b6116a29190613790565b6116ac9190613790565b601855601754600c10156116d25760405162461bcd60e51b8152600401610d3990613922565b601160185411156117195760405162461bcd60e51b8152602060048201526011602482015270546f6f20686967682073656c6c2066656560781b6044820152606401610d39565b60a0820151601c80546001600160a01b039283166001600160a01b03199182161790915560c0840151601d805491841691831691909117905560e0840151601e8054918416918316919091179055610120840151600680549190931691161790556060820151604083015160009160649161179491906138cc565b61179e91906138e3565b905060008184604001516117b2919061377d565b336000908152602081905260408120805492935084929091906117d6908490613790565b909155505060a08401516001600160a01b031660009081526020819052604081208054839290611807908490613790565b90915550506040518281523390600090600080516020613a308339815191529060200160405180910390a38360a001516001600160a01b031660006001600160a01b0316600080516020613a308339815191528360405161186a91815260200190565b60405180910390a350505050565b601c546001600160a01b031633146118a25760405162461bcd60e51b8152600401610d39906136f0565b600f546000036118c45760405162461bcd60e51b8152600401610d39906137a3565b6103e860025460056118d691906138cc565b6118e091906138e3565b81101561191a5760405162461bcd60e51b81526020600482015260086024820152674d696e20302e352560c01b6044820152606401610d39565b6064600254600361192b91906138cc565b61193591906138e3565b81111561196d5760405162461bcd60e51b81526020600482015260066024820152654d617820332560d01b6044820152606401610d39565b602155565b6000805b600a54811015611a2d576000600a828154811061199557611995613948565b6000918252602090912001546040516370a0823160e01b81526001600160a01b038681166004830152909116906370a0823190602401602060405180830381865afa1580156119e8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0c919061395e565b1115611a1b5750600192915050565b80611a2581613977565b915050611976565b50600092915050565b606060048054610c7290613671565b601c546001600160a01b03163314611a6f5760405162461bcd60e51b8152600401610d39906136f0565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015611b1f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d39565b611b2c8286868403612179565b506001949350505050565b600033611b2c81858561232f565b6006546001600160a01b03163314611b6f5760405162461bcd60e51b8152600401610d39906136ab565b60005b8151811015611bd7576001601f6000848481518110611b9357611b93613948565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611bcf81613977565b915050611b72565b5050565b6006546001600160a01b03163314611c055760405162461bcd60e51b8152600401610d39906136ab565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b601c546001600160a01b03163314611c515760405162461bcd60e51b8152600401610d39906136f0565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b601c546001600160a01b03163314611c9d5760405162461bcd60e51b8152600401610d39906136f0565b6011869055601284905560138290556014859055601583905560168190556010548690611cca8685613790565b611cd49190613790565b611cde9190613790565b601755601454601054601554601654611cf79190613790565b611d019190613790565b611d0b9190613790565b601855601754600c1015611d315760405162461bcd60e51b8152600401610d3990613922565b60116018541115611d545760405162461bcd60e51b8152600401610d3990613922565b505050505050565b601c546001600160a01b03163314611d865760405162461bcd60e51b8152600401610d39906136f0565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b601c546001600160a01b03163314611dd25760405162461bcd60e51b8152600401610d39906136f0565b600f54600003611df45760405162461bcd60e51b8152600401610d39906137a3565b6103e86002546005611e0691906138cc565b611e1091906138e3565b811015611e4a5760405162461bcd60e51b81526020600482015260086024820152674d696e20302e352560c01b6044820152606401610d39565b60646002546003611e5b91906138cc565b611e6591906138e3565b811115611e9d5760405162461bcd60e51b81526020600482015260066024820152654d617820332560d01b6044820152606401610d39565b602055565b601b546001600160a01b03163314611ecc5760405162461bcd60e51b8152600401610d3990613725565b80516110d6906127f1565b601c546001600160a01b03163314611f015760405162461bcd60e51b8152600401610d39906136f0565b600f54600003611f235760405162461bcd60e51b8152600401610d39906137a3565b6008805460ff1916911515919091179055565b601c546001600160a01b03163314611f605760405162461bcd60e51b8152600401610d39906136f0565b601054600214611fa55760405162461bcd60e51b815260206004820152601060248201526f08585b1c9958591e481c99591d58d95960821b6044820152606401610d39565b600f54600003611fc75760405162461bcd60e51b8152600401610d39906137a3565b600f54611fd7906203f480613790565b4210156120115760405162461bcd60e51b81526020600482015260086024820152673a37b79039b7b7b760c11b6044820152606401610d39565b600160108190555060115460105460125460135461202f9190613790565b6120399190613790565b6120439190613790565b60175560145460105460155460165461205c9190613790565b6120669190613790565b6120709190613790565b601855565b6006546001600160a01b0316331461209f5760405162461bcd60e51b8152600401610d39906136ab565b600680546001600160a01b039092166001600160a01b0319909216821790556000908152600960205260409020805460ff19166001179055565b601c546001600160a01b031633146121035760405162461bcd60e51b8152600401610d39906136f0565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b601b546001600160a01b031633146121585760405162461bcd60e51b8152600401610d3990613725565b601e805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6001600160a01b0383166121db5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d39565b6001600160a01b03821661223c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d39565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114612329578181101561231c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610d39565b6123298484848403612179565b50505050565b601e54600090600160b01b900460ff1661237c5760405162461bcd60e51b815260206004820152600e60248201526d151c98591a5b99c810db1bdcd95960921b6044820152606401610d39565b6001600160a01b0384166000908152601f602052604090205460ff161580156123be57506001600160a01b0383166000908152601f602052604090205460ff16155b6123c757600080fd5b600b5460ff16156124fe5760075442106123ea57600b805460ff191690556124fe565b601a546001600160a01b039081169085160361245b5761240983610fda565b80612418575061241883611972565b6124565760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610d39565b6124fe565b601a546001600160a01b03908116908416036124895761247a84610fda565b80612418575061241884611972565b61249284610fda565b806124a157506124a184611972565b80156124c057506124b183610fda565b806124c057506124c083611972565b6124fe5760405162461bcd60e51b815260206004820152600f60248201526e139bdd0815da1a5d195b1a5cdd1959608a1b6044820152606401610d39565b601e54600160a01b900460ff16156125225761251b84848461285f565b9050610e0f565b601a546001600160a01b038481169116148015612541575060085460ff165b156125c7576020548211158061259257506001600160a01b0384166000908152600d602052604090205460ff16801561259257506001600160a01b0383166000908152600d602052604090205460ff165b6125c75760405162461bcd60e51b815260206004820152600660248201526509ac2f040a8b60d31b6044820152606401610d39565b6001600160a01b0383166000908152600d602052604090205460ff161580156125f2575060085460ff165b15612659576021546001600160a01b03841660009081526020819052604090205461261e908490613790565b11156126595760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610d39565b601a546001600160a01b038581169116148015906126815750601e54600160a01b900460ff16155b80156126965750601e54600160a81b900460ff165b80156126b357506022543060009081526020819052604090205410155b156126c0576126c06128ff565b6001600160a01b0384166000908152602081905260409020546126e490839061377d565b6001600160a01b03808616600081815260208190526040902092909255601a548492911614806127215750601a546001600160a01b038581169116145b15612780576001600160a01b0385166000908152600c602052604090205460ff1615801561276857506001600160a01b0384166000908152600c602052604090205460ff16155b612772578261277d565b61277d858585612f36565b90505b6001600160a01b0384166000908152602081905260409020546127a4908290613790565b6001600160a01b03858116600081815260208181526040918290209490945551848152909291881691600080516020613a30833981519152910160405180910390a3506001949350505050565b805160005b8181101561285a5760016009600085848151811061281657612816613948565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061285281613977565b9150506127f6565b505050565b6001600160a01b03831660009081526020819052604081205461288390839061377d565b6001600160a01b0380861660009081526020819052604080822093909355908516815220546128b3908390613790565b6001600160a01b03848116600081815260208181526040918290209490945551858152909291871691600080516020613a30833981519152910160405180910390a35060019392505050565b601e805460ff60a01b1916600160a01b179055306000908152602081905260408120546017549091908190819081906002106129635760026018546015548761294891906138cc565b61295291906138e3565b61295c91906138e3565b935061298d565b60026017546012548761297691906138cc565b61298091906138e3565b61298a91906138e3565b93505b6000612999858761377d565b9050806000036129ae57505050505050612f27565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129e3576129e3613948565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a609190613905565b81600181518110612a7357612a73613948565b6001600160a01b03928316602091820292909201015260195460405163791ac94760e01b815291169063791ac94790612ab9908590600090869030904290600401613990565b600060405180830381600087803b158015612ad357600080fd5b505af1158015612ae7573d6000803e3d6000fd5b505050506000479050600260175411612b2857600260185460155483612b0d91906138cc565b612b1791906138e3565b612b2191906138e3565b9350612b52565b600260175460125483612b3b91906138cc565b612b4591906138e3565b612b4f91906138e3565b93505b8615612bef5760195460405163f305d71960e01b815230600482015260248101899052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990869060c40160606040518083038185885af1158015612bc6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612beb9190613a01565b5050505b6017544790600210612c3957601854601654612c0b90836138cc565b612c1591906138e3565b965060185460105482612c2891906138cc565b612c3291906138e3565b9550612c73565b601754601354612c4990836138cc565b612c5391906138e3565b965060175460105482612c6691906138cc565b612c7091906138e3565b95505b600086612c80898461377d565b612c8a919061377d565b90508215612f1c578615612e4c576000612ca56002896138e3565b90506000601b60009054906101000a90046001600160a01b03166001600160a01b0316633690e2876040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d209190613905565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114612d6a576040519150601f19603f3d011682016040523d82523d6000602084013e612d6f565b606091505b5050905080612d7d57600080fd5b601b546040805163d7e7a9e760e01b815290516000926001600160a01b03169163d7e7a9e79160048083019260209291908290030181865afa158015612dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612deb9190613905565b6001600160a01b03168360405160006040518083038185875af1925050503d8060008114612e35576040519150601f19603f3d011682016040523d82523d6000602084013e612e3a565b606091505b5050905080612e4857600080fd5b5050505b8715612eb457601d546040516000916001600160a01b0316908a908381818185875af1925050503d8060008114612e9f576040519150601f19603f3d011682016040523d82523d6000602084013e612ea4565b606091505b5050905080612eb257600080fd5b505b8015612f1c57601e546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612f07576040519150601f19603f3d011682016040523d82523d6000602084013e612f0c565b606091505b5050905080612f1a57600080fd5b505b505050505050505050505b601e805460ff60a01b19169055565b601a5460009081906001600160a01b03858116911614612f5857601754612f5c565b6018545b905060006064612f6c83866138cc565b612f7691906138e3565b30600090815260208190526040902054909150612f94908290613790565b3060008181526020818152604091829020939093555183815290916001600160a01b03891691600080516020613a30833981519152910160405180910390a3612fdd818561377d565b9695505050505050565b82805482825590600052602060002090810192821561303c579160200282015b8281111561303c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613007565b5061304892915061304c565b5090565b5b80821115613048576000815560010161304d565b600060208083528351808285015260005b8181101561308e57858101830151858201604001528201613072565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146110d657600080fd5b80356130cf816130af565b919050565b600080604083850312156130e757600080fd5b82356130f2816130af565b946020939093013593505050565b60006020828403121561311257600080fd5b5035919050565b60006020828403121561312b57600080fd5b8135610e0f816130af565b60008060006060848603121561314b57600080fd5b8335613156816130af565b92506020840135613166816130af565b929592945050506040919091013590565b803580151581146130cf57600080fd5b6000806040838503121561319a57600080fd5b6130f283613177565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff811182821017156131dd576131dd6131a3565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561320c5761320c6131a3565b604052919050565b600082601f83011261322557600080fd5b813567ffffffffffffffff81111561323f5761323f6131a3565b613252601f8201601f19166020016131e3565b81815284602083860101111561326757600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261329557600080fd5b8135602067ffffffffffffffff8211156132b1576132b16131a3565b8160051b6132c08282016131e3565b92835284810182019282810190878511156132da57600080fd5b83870192505b848310156133025782356132f3816130af565b825291830191908301906132e0565b979650505050505050565b600060c0828403121561331f57600080fd5b60405160c0810181811067ffffffffffffffff82111715613342576133426131a3565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b60008060e0838503121561339a57600080fd5b823567ffffffffffffffff808211156133b257600080fd5b9084019061018082870312156133c757600080fd5b6133cf6131b9565b8235828111156133de57600080fd5b6133ea88828601613214565b8252506020830135828111156133ff57600080fd5b61340b88828601613214565b60208301525060408301356040820152606083013560608201526080830135608082015261343b60a084016130c4565b60a082015261344c60c084016130c4565b60c082015261345d60e084016130c4565b60e08201526101006134708185016130c4565b908201526101206134828482016130c4565b90820152610140838101358381111561349a57600080fd5b6134a689828701613284565b82840152505061016080840135838111156134c057600080fd5b6134cc89828701613284565b8284015250508094505050506134e5846020850161330d565b90509250929050565b6000806040838503121561350157600080fd5b823561350c816130af565b91506134e560208401613177565b60006020828403121561352c57600080fd5b813567ffffffffffffffff81111561354357600080fd5b61354f84828501613284565b949350505050565b60008060008060008060c0878903121561357057600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080604083850312156135ad57600080fd5b82356135b8816130af565b915060208301356135c8816130af565b809150509250929050565b6000602082840312156135e557600080fd5b813567ffffffffffffffff808211156135fd57600080fd5b908301906020828603121561361157600080fd5b60405160208101818110838211171561362c5761362c6131a3565b60405282358281111561363e57600080fd5b61364a87828601613284565b82525095945050505050565b60006020828403121561366857600080fd5b610e0f82613177565b600181811c9082168061368557607f821691505b6020821081036136a557634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526025908201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652070726f6f6660408201526420b236b4b760d91b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526022908201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520666163746f604082015261727960f01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610d0957610d09613767565b80820180821115610d0957610d09613767565b602080825260099082015268085b185d5b98da195960ba1b604082015260600190565b601f82111561285a57600081815260208120601f850160051c810160208610156137ed5750805b601f850160051c820191505b81811015611d54578281556001016137f9565b815167ffffffffffffffff811115613826576138266131a3565b61383a816138348454613671565b846137c6565b602080601f83116001811461386f57600084156138575750858301515b600019600386901b1c1916600185901b178555611d54565b600085815260208120601f198616915b8281101561389e5788860151825594840194600190910190840161387f565b50858210156138bc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082028115828204841417610d0957610d09613767565b60008261390057634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561391757600080fd5b8151610e0f816130af565b6020808252600c908201526b546f6f20686967682066656560a01b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561397057600080fd5b5051919050565b60006001820161398957613989613767565b5060010190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139e05784516001600160a01b0316835293830193918301916001016139bb565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613a1657600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212200be5a6995a71a304519f4de4f17e3f0c3eab14b41a895111ee50d99704acceca64736f6c63430008110033

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.