ETH Price: $3,403.94 (-0.61%)

Token

GrandtoClub (GTC)
 

Overview

Max Total Supply

10,000,000 GTC

Holders

66

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
beetrootbusiness.eth
Balance
0.05 GTC

Value
$0.00
0xb63d434fafc6240e928928f27cdfcec90eba69d6
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:
GrandtoClub

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 10 : GC.sol
//SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;


import "./IERC20.sol";
import "./blacklist.sol";
import "./safeMath.sol";
import "./ownable.sol";
import "./address.sol";
import "./liquifier.sol";
import "./IERC20Metadata.sol";

/**
 * Tokenomics:
 * Liquidity 3%
 * Dev 2%
 */

abstract contract Tokenomics {
    using SafeMath for uint256;

    // !!!  IMPORTANT !!!!
    address public uniswapV2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    /// SET THE SAME ROUTER ADDRESS ON LIQUIFIER CONTRACT BELOW !!

    // --------------------- Token Settings ------------------- //

    address public developerFEEAddress =
        0xb280eB22334f4c3b0cC2fE6C5665FE11B15AE5e3;

    /**
     *
     * The value of fees is given in part per 1000 (based on the value of FEES_DIVISOR),
     * e.g. for 5% use 50, for 3.5% use 35, etc.
     */
    uint256 public _devFee = 20; // 2%
    uint256 public _liqFee = 30; // 3%

    string internal constant NAME = "GrandtoClub";
    string internal constant SYMBOL = "GTC";

    uint16 internal constant FEES_DIVISOR = 10**3;
    uint8 internal constant DECIMALS = 18;
    uint256 internal constant ZEROES = 10**DECIMALS;

    uint256 private constant MAX = ~uint256(0);
    uint256 internal constant TOTAL_SUPPLY = 10000000 * ZEROES; // 10 MM

    /**
     * @dev Set the maximum transaction amount allowed in a transfer.
     *
     */
    uint256 public constant maxTransactionAmount = 75000 * ZEROES; // 0.75% of the total supply //75000

    /**
     *
     * IMPORTANT: This value MUST be greater than `numberOfTokensToSwapToLiquidity` set below,
     * otherwise the liquidity swap will never be executed
     */
    uint256 public constant maxWalletBalance = 150000 * ZEROES; // 1.5% of the total supply //150000

    /**
     * @dev Set the number of tokens to swap and add to liquidity.
     * See: `Liquifier`
     */
    uint256 public constant numberOfTokensToSwapToLiquidity =
        TOTAL_SUPPLY / 1000; // 0.1% of the total supply //10k in contract before liq

    // --------------------- Fees Settings ------------------- //

    enum FeeType {
        Liquidity,
        ExternalToETH
    }
    struct Fee {
        FeeType name;
        uint256 value;
        address recipient;
        uint256 total;
    }

    Fee[] internal fees;
    uint256 internal sumOfFees;

    constructor() {
        _addFees();
    }

    function _addFee(
        FeeType name,
        uint256 value,
        address recipient
    ) private {
        fees.push(Fee(name, value, recipient, 0));
        sumOfFees += value;
    }

    function _addFees() private {
        /**
         *
         * The value of fees is given in part per 1000 (based on the value of FEES_DIVISOR),
         * e.g. for 5% use 50, for 3.5% use 35, etc.
         */

        _addFee(FeeType.Liquidity, _liqFee, address(this)); //2%
        _addFee(FeeType.ExternalToETH, _devFee, developerFEEAddress); //2%
    }

    function _getFeesCount() internal view returns (uint256) {
        return fees.length;
    }

    function _getFeeStruct(uint256 index) private view returns (Fee storage) {
        require(
            index >= 0 && index < fees.length,
            "FeesSettings._getFeeStruct: Fee index out of bounds"
        );
        return fees[index];
    }

    function _getFee(uint256 index)
        internal
        view
        returns (
            FeeType,
            uint256,
            address,
            uint256
        )
    {
        Fee memory fee = _getFeeStruct(index);
        return (fee.name, fee.value, fee.recipient, fee.total);
    }

    function _addFeeCollectedAmount(uint256 index, uint256 amount) internal {
        Fee storage fee = _getFeeStruct(index);
        fee.total = fee.total.add(amount);
    }

    // function getCollectedFeeTotal(uint256 index) external view returns (uint256){
    function getCollectedFeeTotal(uint256 index)
        internal
        view
        returns (uint256)
    {
        Fee memory fee = _getFeeStruct(index);
        return fee.total;
    }
}

abstract contract Base is
    IERC20,
    IERC20Metadata,
    Ownable,
    Tokenomics,
    Blacklist
{
    using SafeMath for uint256;
    using Address for address;

    mapping(address => uint256) internal _balances;
    mapping(address => mapping(address => uint256)) internal _allowances;

    mapping(address => bool) internal _isExcludedFromFee;

    constructor() {
        _balances[owner()] = TOTAL_SUPPLY;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[developerFEEAddress] = true;
        _isExcludedFromFee[uniswapV2Router] = true;
        _isExcludedFromFee[address(this)] = true;

        _addToWhitelistedSenders(owner());
        _addToWhitelistedSenders(developerFEEAddress);
        _addToWhitelistedSenders(address(this));
        _addToWhitelistedSenders(uniswapV2Router);

        _addToWhitelistedRecipients(owner());
        _addToWhitelistedRecipients(developerFEEAddress);
        _addToWhitelistedRecipients(address(this));
        _addToWhitelistedRecipients(uniswapV2Router);

        emit Transfer(address(0), owner(), TOTAL_SUPPLY);
    }
    
      function changeDevFeeAddress(address _newDevFeeAddress) public onlyOwner {
        developerFEEAddress = _newDevFeeAddress;
    }

    function changeDevFee(uint256 _newDevFee) public onlyOwner {
        uint256 _sumOfFees = _liqFee + _newDevFee;
        require(_sumOfFees <= 50, "Total fees cannot be more than 5%");
        _devFee = _newDevFee;
    }

    function changeLiqFee(uint256 _newLiqFee) public onlyOwner {
        uint256 _sumOfFees = _devFee + _newLiqFee;
        require(_sumOfFees <= 50, "Total fees cannot be more than 5%");
        _liqFee = _newLiqFee;
    }

    function blackListWallets(address _wallet, bool _status) public onlyOwner {
        antiBot._blacklistedUsers[_wallet] = _status; // true or false
    }

    // BLACKLIST ARRAY OF ADDRESSES EG: ["0X000...","0X000","0X000"],true
    function blackListWalletsBulk(address[] memory _wallets, bool _status)
        public
        onlyOwner
    {
        for (uint256 i = 0; i < _wallets.length; i++) {
            antiBot._blacklistedUsers[_wallets[i]] = _status;
        }
    }

    function removeBlackListWallet(address _wallet) public onlyOwner {
        antiBot._blacklistedUsers[_wallet] = false;
    }

    function removeBlackListWalletBulk(address[] memory _wallets)
        public
        onlyOwner
    {
        for (uint256 i = 0; i < _wallets.length; i++) {
            antiBot._blacklistedUsers[_wallets[i]] = false;
        }
    }

    /** Functions required by IERC20Metadata **/
    function name() external pure override returns (string memory) {
        return NAME;
    }

    function symbol() external pure override returns (string memory) {
        return SYMBOL;
    }

    function decimals() external pure override returns (uint8) {
        return DECIMALS;
    }

    /** Functions required by IERC20 **/
    function totalSupply() external pure override returns (uint256) {
        return TOTAL_SUPPLY;
    }

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

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

    function allowance(address owner, address spender)
        external
        view
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

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

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

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal {
        require(
            owner != address(0),
            "BaseRfiToken: approve from the zero address"
        );
        require(
            spender != address(0),
            "BaseRfiToken: approve to the zero address"
        );

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

    address[] private whitelistedSenders;
    address[] private whitelistedRecipients;

    function _isUnlimitedSender(address account) public view returns (bool) {
        // check if the provided address is in the whitelisted senders array or is the owner
        for (uint256 i = 0; i < whitelistedSenders.length; i++) {
            if (account == whitelistedSenders[i] || account == owner()) {
                return true;
            }
        }
        return false;
    }

    function _isUnlimitedRecipient(address account) public view returns (bool) {
        // check if the provided address is in the whitelisted recipients array or is the owner
        for (uint256 i = 0; i < whitelistedRecipients.length; i++) {
            if (account == whitelistedRecipients[i] || account == owner()) {
                return true;
            }
        }
        return false;
    }

    function _addToWhitelistedSenders(address account) internal {
        whitelistedSenders.push(account);
    }

    function addToWhitelistedSenders(address account) external onlyOwner {
        whitelistedSenders.push(account);
    }

    function removeFromWhitelistedSenders(address account) external onlyOwner {
        for (uint256 i = 0; i < whitelistedSenders.length; i++) {
            if (whitelistedSenders[i] == account) {
                whitelistedSenders[i] = whitelistedSenders[
                    whitelistedSenders.length - 1
                ];
                whitelistedSenders.pop();
                break;
            }
        }
    }

    function _addToWhitelistedRecipients(address account) internal {
        whitelistedRecipients.push(account);
    }

    function addToWhitelistedRecipients(address account) external onlyOwner {
        whitelistedRecipients.push(account);
    }

    function removeFromWhitelistedRecipients(address account)
        external
        onlyOwner
    {
        for (uint256 i = 0; i < whitelistedRecipients.length; i++) {
            if (whitelistedRecipients[i] == account) {
                whitelistedRecipients[i] = whitelistedRecipients[
                    whitelistedRecipients.length - 1
                ];
                whitelistedRecipients.pop();
                break;
            }
        }
    }

    bool public tradeStarted = false;

    // once enabled, can never be turned off
    function EnableTrading() external onlyOwner {
        tradeStarted = true;
    }

    modifier isTradeStarted(address from, address to) {
        if (!tradeStarted) {
            require(
                _isUnlimitedSender(from) || _isUnlimitedRecipient(to),
                "trade not started"
            );
        }

        _;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private isTradeStarted(sender, recipient) {
        require(
            sender != address(0),
            "BaseRfiToken: transfer from the zero address"
        );
        require(
            recipient != address(0),
            "BaseRfiToken: transfer to the zero address"
        );
        require(amount > 0, "Transfer amount must be greater than zero");
        require(
            !antiBot._blacklistedUsers[recipient] &&
                !antiBot._blacklistedUsers[sender],
            "You are not allowed"
        );

        // indicates whether or not feee should be deducted from the transfer
        bool takeFee = true;

        if (
            amount > maxTransactionAmount &&
            !_isUnlimitedSender(sender) &&
            !_isUnlimitedRecipient(recipient)
        ) {
            revert("Transfer amount exceeds the maxTxAmount.");
        }

        if (
            maxWalletBalance > 0 &&
            !_isUnlimitedSender(sender) &&
            !_isUnlimitedRecipient(recipient) &&
            !_isV2Pair(recipient)
        ) {
            uint256 recipientBalance = balanceOf(recipient);
            require(
                recipientBalance + amount <= maxWalletBalance,
                "New balance would exceed the maxWalletBalance"
            );
        }

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
            takeFee = false;
        }

        _beforeTokenTransfer(sender, recipient, amount, takeFee);
        _transferTokens(sender, recipient, amount, takeFee);
    }

    function _transferTokens(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        uint256 sumOfFees = _getSumOfFees(sender, amount);
        if (!takeFee) {
            sumOfFees = 0;
        }

        (uint256 tAmount, uint256 tTransferAmount) = _getValues(
            amount,
            sumOfFees
        );

        _balances[sender] = _balances[sender].sub(tAmount);
        _balances[recipient] = _balances[recipient].add(tTransferAmount);

        _takeFees(amount, sumOfFees);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeFees(uint256 amount, uint256 sumOfFees) private {
        if (sumOfFees > 0) {
            _takeTransactionFees(amount);
        }
    }

    function _getValues(uint256 tAmount, uint256 feesSum)
        internal
        pure
        returns (uint256, uint256)
    {
        uint256 tTotalFees = tAmount.mul(feesSum).div(FEES_DIVISOR);
        uint256 tTransferAmount = tAmount.sub(tTotalFees);

        return (tAmount, tTransferAmount);
    }

    function _getCurrentSupply() internal pure returns (uint256) {
        uint256 tSupply = TOTAL_SUPPLY;
        return (tSupply);
    }

    /**
     * @dev Hook that is called before any transfer of tokens.
     */
    function _beforeTokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) internal virtual;

    function _getSumOfFees(address sender, uint256 amount)
        internal
        view
        virtual
        returns (uint256);

    /**
     * @dev A delegate which should return true if the given address is the V2 Pair and false otherwise
     */
    function _isV2Pair(address account) internal view virtual returns (bool);

    /**
     * @dev Hook that is called before the `Transfer` event is emitted if fees are enabled for the transfer
     */
    function _takeTransactionFees(uint256 amount) internal virtual;
}

abstract contract Grandto is Base, Liquifier {
    using SafeMath for uint256;

    // constructor(string memory _name, string memory _symbol, uint8 _decimals){
    constructor(Env _env) {
        initializeLiquiditySwapper(
            _env,
            maxTransactionAmount,
            numberOfTokensToSwapToLiquidity
        );
    }

    function _isV2Pair(address account) internal view override returns (bool) {
        return (account == _pair);
    }

    function _getSumOfFees(address sender, uint256 amount)
        internal
        view
        override
        returns (uint256)
    {
        return _getAntiwhaleFees(balanceOf(sender), amount);
    }

    function _getAntiwhaleFees(uint256, uint256)
        internal
        view
        returns (uint256)
    {
        return sumOfFees;
    }

    // function _beforeTokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) internal override {
    function _beforeTokenTransfer(
        address sender,
        address,
        uint256,
        bool
    ) internal override {
        uint256 contractTokenBalance = balanceOf(address(this));
        liquify(contractTokenBalance, sender);
    }

    function _takeTransactionFees(uint256 amount) internal override {
        uint256 feesCount = _getFeesCount();
        for (uint256 index = 0; index < feesCount; index++) {
            (FeeType name, uint256 value, address recipient, ) = _getFee(index);
            // no need to check value < 0 as the value is uint (i.e. from 0 to 2^256-1)
            if (value == 0) continue;
            else if (name == FeeType.ExternalToETH) {
                _takeFee(amount, value, recipient, index);
            } else {
                _takeFee(amount, value, recipient, index);
            }
        }
    }

    function _takeFee(
        uint256 amount,
        uint256 fee,
        address recipient,
        uint256 index
    ) private {
        uint256 tAmount = amount.mul(fee).div(FEES_DIVISOR);

        _balances[recipient] = _balances[recipient].add(tAmount);
        _addFeeCollectedAmount(index, tAmount);
    }

    function _approveDelegate(
        address owner,
        address spender,
        uint256 amount
    ) internal override {
        _approve(owner, spender, amount);
    }
}

contract GrandtoClub is Grandto {
    constructor() Grandto(Env.MainnetV2) {
        // pre-approve the initial liquidity supply (to safe a bit of time)
        _approve(owner(), address(_router), ~uint256(0));
    }
}

File 2 of 10 : IERC20Metadata.sol
//SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;
import "./IERC20.sol";
interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

File 3 of 10 : liquifier.sol
//SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

import "./ownable.sol";
import "./safeMath.sol";
import "./uniswap.sol";

abstract contract Liquifier is Ownable {
    using SafeMath for uint256;

    uint256 private withdrawableBalance;

    enum Env {
        MainnetV2
    }
    Env private _env;

    address public _mainnetRouterV2Address =
        0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    IPancakeV2Router internal _router;
    address internal _pair;

    bool private inSwapAndLiquify;
    bool private swapAndLiquifyEnabled = true;

    uint256 private maxTransactionAmount;
    uint256 private numberOfTokensToSwapToLiquidity;

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

    event RouterSet(address indexed router);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event LiquidityAdded(
        uint256 tokenAmountSent,
        uint256 ethAmountSent,
        uint256 liquidity
    );

    receive() external payable {}

    function initializeLiquiditySwapper(
        Env env,
        uint256 maxTx,
        uint256 liquifyAmount
    ) internal {
        _env = env;
        if (_env == Env.MainnetV2) {
            _setRouterAddress(_mainnetRouterV2Address);
        }

        maxTransactionAmount = maxTx;
        numberOfTokensToSwapToLiquidity = liquifyAmount;
    }

    /**
     * NOTE: passing the `contractTokenBalance` here is preferred to creating `balanceOfDelegate`
     */
    function liquify(uint256 contractTokenBalance, address sender) internal {
        if (contractTokenBalance >= maxTransactionAmount)
            contractTokenBalance = maxTransactionAmount;

        bool isOverRequiredTokenBalance = (contractTokenBalance >=
            numberOfTokensToSwapToLiquidity);

        /**
         * - first check if the contract has collected enough tokens to swap and liquify
         * - then check swap and liquify is enabled
         * - then make sure not to get caught in a circular liquidity event
         * - finally, don't swap & liquify if the sender is the uniswap pair
         */
        if (
            isOverRequiredTokenBalance &&
            swapAndLiquifyEnabled &&
            !inSwapAndLiquify &&
            (sender != _pair)
        ) {
            // TODO check if the `(sender != _pair)` is necessary because that basically
            // stops swap and liquify for all "buy" transactions
            _swapAndLiquify(contractTokenBalance);
        }
    }

    /**
     * @dev sets the router address and created the router, factory pair to enable
     * swapping and liquifying (contract) tokens
     */
    function _setRouterAddress(address router) private {
        IPancakeV2Router _newPancakeRouter = IPancakeV2Router(router);
        _pair = IPancakeV2Factory(_newPancakeRouter.factory()).createPair(
            address(this),
            _newPancakeRouter.WETH()
        );
        _router = _newPancakeRouter;
        emit RouterSet(router);
    }

    function _swapAndLiquify(uint256 amount) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = amount.div(2);
        uint256 otherHalf = amount.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        _swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        _addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

        _approveDelegate(address(this), address(_router), tokenAmount);

        // make the swap
        _router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

 function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approveDelegate(address(this), address(_router), tokenAmount);

        // add tahe liquidity
        (
            uint256 tokenAmountSent,
            uint256 ethAmountSent,
            uint256 liquidity
        ) = _router.addLiquidityETH{value: ethAmount}(
                address(this),
                tokenAmount,
                0,
                0,
                owner(),
                block.timestamp
            );

        // fix the forever locked BNBs/ETH as per the certik's audit
        /**
         * The swapAndLiquify function converts half of the contractTokenBalance SafeMoon tokens to BNB.
         * For every swapAndLiquify function call, a small amount of BNB remains in the contract.
         * This amount grows over time with the swapAndLiquify function being called throughout the life
         * of the contract. EG: The Safemoon contract does not contain a method to withdraw these funds,
         * and the ETH/BNB will be locked in the Safemoon v1 contract forever.
         */
        withdrawableBalance = address(this).balance;
        emit LiquidityAdded(tokenAmountSent, ethAmountSent, liquidity);
    }
    
     /**
     * @dev The owner can withdraw ETH(BNB) collected in the contract from `swapAndLiquify`
     * or if someone (accidentally) sends ETH/BNB directly to the contract.
     *
     * Note: This addresses the contract flaw pointed out in the Certik Audit of Safemoon (SSL-03):
     *
     * The swapAndLiquify function converts half of the contractTokenBalance SafeMoon tokens to BNB.
     * For every swapAndLiquify function call, a small amount of BNB remains in the contract.
     * This amount grows over time with the swapAndLiquify function being called
     * throughout the life of the contract. The Safemoon contract does not contain a method
     * to withdraw these funds, and the BNB will be locked in the Safemoon contract forever.
     * https://www.certik.org/projects/safemoon
     */
    function withdrawLockedEth(address payable recipient) external onlyOwner {
        require(
            recipient != address(0),
            "Cannot withdraw the ETH balance to the zero address"
        );
        require(
            withdrawableBalance > 0,
            "The ETH balance must be greater than 0"
        );

        // prevent re-entrancy attacks
        uint256 amount = withdrawableBalance;
        withdrawableBalance = 0;
        recipient.transfer(amount);
    }

    /**
     * @dev Sends the swap and liquify flag to the provided value. If set to `false` tokens collected in the contract will
     * NOT be converted into liquidity.
     */
    function setSwapAndLiquifyEnabled(bool enabled) external onlyOwner {
        swapAndLiquifyEnabled = enabled;
        emit SwapAndLiquifyEnabledUpdated(swapAndLiquifyEnabled);
    }

    /**
     * @dev Use this delegate instead of having (unnecessarily) extend `BaseRfiToken` to gained access
     * to the `_approve` function.
     */
    function _approveDelegate(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual;
}

File 4 of 10 : address.sol
//SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 5 of 10 : ownable.sol
//SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

import "./context.sol";

abstract contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

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

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
}

File 6 of 10 : safeMath.sol
//SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

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

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

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

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

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

File 7 of 10 : blacklist.sol
//SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

contract Blacklist {
    struct AntiBot {
        mapping(address => bool) _blacklistedUsers;
    }
    AntiBot antiBot;
}

File 8 of 10 : IERC20.sol
//SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

File 9 of 10 : context.sol
//SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

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

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

File 10 of 10 : uniswap.sol
//SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;
interface IPancakeV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

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

interface IPancakeV2Router {
    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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmountSent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmountSent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"router","type":"address"}],"name":"RouterSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"EnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_isUnlimitedRecipient","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_isUnlimitedSender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liqFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mainnetRouterV2Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToWhitelistedRecipients","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToWhitelistedSenders","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":"_wallet","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"blackListWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"blackListWalletsBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newDevFee","type":"uint256"}],"name":"changeDevFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newDevFeeAddress","type":"address"}],"name":"changeDevFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLiqFee","type":"uint256"}],"name":"changeLiqFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developerFEEAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numberOfTokensToSwapToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"removeBlackListWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"}],"name":"removeBlackListWalletBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromWhitelistedRecipients","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromWhitelistedSenders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradeStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"}],"name":"withdrawLockedEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600380546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d179091556004805490911673b280eb22334f4c3b0cc2fe6c5665fe11b15ae5e31790556014600555601e600655600f805460ff1916905560118054747a250d5630b4cf539739df2c5dacb4c659f2488d00610100600160a81b03199091161790556013805460ff60a81b1916600160a81b179055348015620000aa57600080fd5b50600080546001600160a01b031916339081178255604051819083907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620000f6620003f8565b620001046012600a6200098b565b62000113906298968062000a4c565b600a60006200012a6000546001600160a01b031690565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506001600c6000620001646200042d60201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560045482168152600c909352818320805485166001908117909155600354909116835281832080548516821790553083529120805490921617905562000225620001e46000546001600160a01b031690565b600d8054600181018255600091909152600080516020620033238339815191520180546001600160a01b0319166001600160a01b0392909216919091179055565b60048054600d8054600180820183556000805160206200332383398151915291820180546001600160a01b03199081166001600160a01b0396871617909155835480830185558301805482163090811790915560038054865480860190975595909401805483169587169590951790945560008054600e805480860182558184527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd9081018054938a1693861693909317909255975488548086018a55820180548516918916919091179055875480850189558101805484169096179095559254865492830190965592018054909216938316939093179055815416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620003516012600a6200098b565b62000360906298968062000a4c565b60405190815260200160405180910390a3620003c581620003846012600a6200098b565b6200039390620124f862000a4c565b6103e8620003a46012600a6200098b565b620003b3906298968062000a4c565b620003bf919062000921565b6200043c565b50620003f2620003dd6000546001600160a01b031690565b6012546001600160a01b0316600019620004c0565b62000a84565b6200040e600060065430620005fb60201b60201c565b6005546004546200042b916001916001600160a01b0316620005fb565b565b6000546001600160a01b031690565b6011805484919060ff191660018380156200046757634e487b7160e01b600052602160045260246000fd5b0217905550600060115460ff1680156200049157634e487b7160e01b600052602160045260246000fd5b1415620004b457601154620004b49061010090046001600160a01b0316620006f7565b60149190915560155550565b6001600160a01b038316620005305760405162461bcd60e51b815260206004820152602b60248201527f42617365526669546f6b656e3a20617070726f76652066726f6d20746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b6001600160a01b0382166200059a5760405162461bcd60e51b815260206004820152602960248201527f42617365526669546f6b656e3a20617070726f766520746f20746865207a65726044820152686f206164647265737360b81b606482015260840162000527565b6001600160a01b038381166000818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600760405180608001604052808560018111156200062957634e487b7160e01b600052602160045260246000fd5b815260208082018690526001600160a01b03851660408301526000606090920182905283546001818101865594835291208251600490920201805492939092839160ff199091169083818111156200069157634e487b7160e01b600052602160045260246000fd5b02179055506020820151816001015560408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506060820151816003015550508160086000828254620006ed919062000906565b9091555050505050565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200073657600080fd5b505afa1580156200074b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007719190620008d6565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620007ba57600080fd5b505afa158015620007cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007f59190620008d6565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200083e57600080fd5b505af115801562000853573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008799190620008d6565b601380546001600160a01b03199081166001600160a01b039384161790915560128054909116838316179055604051908316907fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1590600090a25050565b600060208284031215620008e8578081fd5b81516001600160a01b0381168114620008ff578182fd5b9392505050565b600082198211156200091c576200091c62000a6e565b500190565b6000826200093d57634e487b7160e01b81526012600452602481fd5b500490565b600181815b808511156200098357816000190482111562000967576200096762000a6e565b808516156200097557918102915b93841c939080029062000947565b509250929050565b6000620008ff60ff841683600082620009a75750600162000a46565b81620009b65750600062000a46565b8160018114620009cf5760028114620009da57620009fa565b600191505062000a46565b60ff841115620009ee57620009ee62000a6e565b50506001821b62000a46565b5060208310610133831016604e8410600b841016171562000a1f575081810a62000a46565b62000a2b838362000942565b806000190482111562000a425762000a4262000a6e565b0290505b92915050565b600081600019048311821515161562000a695762000a6962000a6e565b500290565b634e487b7160e01b600052601160045260246000fd5b61288f8062000a946000396000f3fe6080604052600436106102555760003560e01c806385fe5fbd11610139578063bbde77c1116100b6578063dd62ed3e1161007a578063dd62ed3e1461071c578063ed08ae2e14610762578063f2fde38b14610782578063f6372cab146107a2578063fac6529a146107b8578063fd547e11146107d857600080fd5b8063bbde77c114610692578063bd69fbe4146106a7578063c49b9a80146106c7578063c8c8ebe4146106e7578063dc1a3add146106fc57600080fd5b806395d89b41116100fd57806395d89b41146105f0578063a457c2d71461061c578063a9059cbb1461063c578063aa45026b1461065c578063b7671a0d1461067257600080fd5b806385fe5fbd1461055257806386d506db14610572578063876da9fa146105925780638c52c6c8146105b25780638da5cb5b146105d257600080fd5b806332049b2c116101d2578063602bc62b11610196578063602bc62b146104925780636612e66f146104a757806370a08231146104c7578063715018a6146104fd5780637ab52a761461051257806381c4322b1461053257600080fd5b806332049b2c146103d457806339509351146103f45780634c544c771461041457806351c0d937146104345780635342acb41461045957600080fd5b80631d97b7cd116102195780631d97b7cd1461034757806323b872dd1461035e5780632858fe8c1461037e57806329d42dbd1461039e578063313ce567146103b857600080fd5b806306fdde0314610261578063095ea7b3146102a75780630b76dbec146102d75780631694505e146102fa57806318160ddd1461033257600080fd5b3661025c57005b600080fd5b34801561026d57600080fd5b5060408051808201909152600b81526a23b930b7323a37a1b63ab160a91b60208201525b60405161029e9190612518565b60405180910390f35b3480156102b357600080fd5b506102c76102c2366004612410565b6107f8565b604051901515815260200161029e565b3480156102e357600080fd5b506102ec61080f565b60405190815260200161029e565b34801561030657600080fd5b5060035461031a906001600160a01b031681565b6040516001600160a01b03909116815260200161029e565b34801561033e57600080fd5b506102ec610838565b34801561035357600080fd5b5061035c610858565b005b34801561036a57600080fd5b506102c761037936600461239c565b61089a565b34801561038a57600080fd5b5061035c6103993660046124d3565b610903565b3480156103aa57600080fd5b50600f546102c79060ff1681565b3480156103c457600080fd5b506040516012815260200161029e565b3480156103e057600080fd5b506102c76103ef36600461232c565b610966565b34801561040057600080fd5b506102c761040f366004612410565b6109f0565b34801561042057600080fd5b5061035c61042f36600461232c565b610a26565b34801561044057600080fd5b5060115461031a9061010090046001600160a01b031681565b34801561046557600080fd5b506102c761047436600461232c565b6001600160a01b03166000908152600c602052604090205460ff1690565b34801561049e57600080fd5b506002546102ec565b3480156104b357600080fd5b5061035c6104c23660046123dc565b610aa2565b3480156104d357600080fd5b506102ec6104e236600461232c565b6001600160a01b03166000908152600a602052604090205490565b34801561050957600080fd5b5061035c610af7565b34801561051e57600080fd5b5061035c61052d3660046124d3565b610b6b565b34801561053e57600080fd5b506102c761054d36600461232c565b610bce565b34801561055e57600080fd5b5060045461031a906001600160a01b031681565b34801561057e57600080fd5b5061035c61058d36600461232c565b610c4f565b34801561059e57600080fd5b5061035c6105ad36600461243b565b610c9b565b3480156105be57600080fd5b5061035c6105cd3660046123dc565b610d42565b3480156105de57600080fd5b506000546001600160a01b031661031a565b3480156105fc57600080fd5b5060408051808201909152600381526247544360e81b6020820152610291565b34801561062857600080fd5b506102c7610637366004612410565b610d97565b34801561064857600080fd5b506102c7610657366004612410565b610de6565b34801561066857600080fd5b506102ec60055481565b34801561067e57600080fd5b5061035c61068d36600461232c565b610df3565b34801561069e57600080fd5b506102ec610f36565b3480156106b357600080fd5b5061035c6106c236600461232c565b610f4f565b3480156106d357600080fd5b5061035c6106e23660046124b9565b6110b9565b3480156106f357600080fd5b506102ec61113e565b34801561070857600080fd5b5061035c61071736600461232c565b611157565b34801561072857600080fd5b506102ec610737366004612364565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b34801561076e57600080fd5b5061035c61077d366004612476565b61129b565b34801561078e57600080fd5b5061035c61079d36600461232c565b61133d565b3480156107ae57600080fd5b506102ec60065481565b3480156107c457600080fd5b5061035c6107d336600461232c565b611427565b3480156107e457600080fd5b5061035c6107f336600461232c565b611472565b60006108053384846114ee565b5060015b92915050565b6103e861081e6012600a6126cc565b61082b9062989680612777565b6108359190612669565b81565b60006108466012600a6126cc565b6108539062989680612777565b905090565b6000546001600160a01b0316331461088b5760405162461bcd60e51b81526004016108829061256b565b60405180910390fd5b600f805460ff19166001179055565b60006108a7848484611621565b6108f984336108f48560405180606001604052806028815260200161280d602891396001600160a01b038a166000908152600b602090815260408083203384529091529020549190611a4b565b6114ee565b5060019392505050565b6000546001600160a01b0316331461092d5760405162461bcd60e51b81526004016108829061256b565b60008160055461093d9190612651565b905060328111156109605760405162461bcd60e51b8152600401610882906125a0565b50600655565b6000805b600e548110156109e757600e818154811061099557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03848116911614806109c757506000546001600160a01b038481169116145b156109d55750600192915050565b806109df816127ad565b91505061096a565b50600092915050565b336000818152600b602090815260408083206001600160a01b038716845290915281205490916108059185906108f49086611a77565b6000546001600160a01b03163314610a505760405162461bcd60e51b81526004016108829061256b565b600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610acc5760405162461bcd60e51b81526004016108829061256b565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610b215760405162461bcd60e51b81526004016108829061256b565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610b955760405162461bcd60e51b81526004016108829061256b565b600081600654610ba59190612651565b90506032811115610bc85760405162461bcd60e51b8152600401610882906125a0565b50600555565b6000805b600d548110156109e757600d8181548110610bfd57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0384811691161480610c2f57506000546001600160a01b038481169116145b15610c3d5750600192915050565b80610c47816127ad565b915050610bd2565b6000546001600160a01b03163314610c795760405162461bcd60e51b81526004016108829061256b565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610cc55760405162461bcd60e51b81526004016108829061256b565b60005b8151811015610d3e57600060096000016000848481518110610cfa57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d36816127ad565b915050610cc8565b5050565b6000546001600160a01b03163314610d6c5760405162461bcd60e51b81526004016108829061256b565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b600061080533846108f48560405180606001604052806025815260200161283560259139336000908152600b602090815260408083206001600160a01b038d1684529091529020549190611a4b565b6000610805338484611621565b6000546001600160a01b03163314610e1d5760405162461bcd60e51b81526004016108829061256b565b6001600160a01b038116610e8f5760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420776974686472617720746865204554482062616c616e636520604482015272746f20746865207a65726f206164647265737360681b6064820152608401610882565b600060105411610ef05760405162461bcd60e51b815260206004820152602660248201527f546865204554482062616c616e6365206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610882565b6010805460009182905560405190916001600160a01b0384169183156108fc0291849190818181858888f19350505050158015610f31573d6000803e3d6000fd5b505050565b610f426012600a6126cc565b61083590620249f0612777565b6000546001600160a01b03163314610f795760405162461bcd60e51b81526004016108829061256b565b60005b600d54811015610d3e57816001600160a01b0316600d8281548110610fb157634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156110a757600d8054610fdc90600190612796565b81548110610ffa57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600d80546001600160a01b03909216918390811061103457634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600d80548061108157634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110b1816127ad565b915050610f7c565b6000546001600160a01b031633146110e35760405162461bcd60e51b81526004016108829061256b565b6013805460ff60a81b1916600160a81b8315158102919091179182905560405160ff9190920416151581527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599060200160405180910390a150565b61114a6012600a6126cc565b61083590620124f8612777565b6000546001600160a01b031633146111815760405162461bcd60e51b81526004016108829061256b565b60005b600e54811015610d3e57816001600160a01b0316600e82815481106111b957634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561128957600e80546111e490600190612796565b8154811061120257634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600e80546001600160a01b03909216918390811061123c57634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600e80548061108157634e487b7160e01b600052603160045260246000fd5b80611293816127ad565b915050611184565b6000546001600160a01b031633146112c55760405162461bcd60e51b81526004016108829061256b565b60005b8251811015610f315781600960000160008584815181106112f957634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611335816127ad565b9150506112c8565b6000546001600160a01b031633146113675760405162461bcd60e51b81526004016108829061256b565b6001600160a01b0381166113cc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610882565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114515760405162461bcd60e51b81526004016108829061256b565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b0316331461149c5760405162461bcd60e51b81526004016108829061256b565b600d80546001810182556000919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166115585760405162461bcd60e51b815260206004820152602b60248201527f42617365526669546f6b656e3a20617070726f76652066726f6d20746865207a60448201526a65726f206164647265737360a81b6064820152608401610882565b6001600160a01b0382166115c05760405162461bcd60e51b815260206004820152602960248201527f42617365526669546f6b656e3a20617070726f766520746f20746865207a65726044820152686f206164647265737360b81b6064820152608401610882565b6001600160a01b038381166000818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600f548390839060ff166116875761163882610bce565b80611647575061164781610966565b6116875760405162461bcd60e51b81526020600482015260116024820152701d1c985919481b9bdd081cdd185c9d1959607a1b6044820152606401610882565b6001600160a01b0385166116f25760405162461bcd60e51b815260206004820152602c60248201527f42617365526669546f6b656e3a207472616e736665722066726f6d207468652060448201526b7a65726f206164647265737360a01b6064820152608401610882565b6001600160a01b03841661175b5760405162461bcd60e51b815260206004820152602a60248201527f42617365526669546f6b656e3a207472616e7366657220746f20746865207a65604482015269726f206164647265737360b01b6064820152608401610882565b600083116117bd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610882565b6001600160a01b03841660009081526009602052604090205460ff161580156117ff57506001600160a01b03851660009081526009602052604090205460ff16155b6118415760405162461bcd60e51b8152602060048201526013602482015272165bdd48185c99481b9bdd08185b1b1bddd959606a1b6044820152606401610882565b600161184f6012600a6126cc565b61185c90620124f8612777565b84118015611870575061186e86610bce565b155b8015611882575061188085610966565b155b156118e05760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610882565b60006118ee6012600a6126cc565b6118fb90620249f0612777565b11801561190e575061190c86610bce565b155b8015611920575061191e85610966565b155b801561193a57506013546001600160a01b03868116911614155b156119e3576001600160a01b0385166000908152600a602052604081205490506119666012600a6126cc565b61197390620249f0612777565b61197d8683612651565b11156119e15760405162461bcd60e51b815260206004820152602d60248201527f4e65772062616c616e636520776f756c642065786365656420746865206d617860448201526c57616c6c657442616c616e636560981b6064820152608401610882565b505b6001600160a01b0386166000908152600c602052604090205460ff1680611a2257506001600160a01b0385166000908152600c602052604090205460ff165b15611a2b575060005b611a3786868684611a8a565b611a4386868684611aab565b505050505050565b60008184841115611a6f5760405162461bcd60e51b81526004016108829190612518565b505050900390565b6000611a838284612651565b9392505050565b306000908152600a6020526040902054611aa48186611b9f565b5050505050565b6000611ab78584611c09565b905081611ac2575060005b600080611acf8584611c25565b6001600160a01b0389166000908152600a60205260409020549193509150611af79083611c57565b6001600160a01b038089166000908152600a60205260408082209390935590881681522054611b269082611a77565b6001600160a01b0387166000908152600a6020526040902055611b498584611c63565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b8e91815260200190565b60405180910390a350505050505050565b6014548210611bae5760145491505b60155482108015908190611bcb5750601354600160a81b900460ff165b8015611be15750601354600160a01b900460ff16155b8015611bfb57506013546001600160a01b03838116911614155b15610f3157610f3183611c72565b6001600160a01b0382166000908152600a602052600854611a83565b60008080611c3f6103e8611c398787611d19565b90611d25565b90506000611c4d8683611c57565b9596945050505050565b6000611a838284612796565b8015610d3e57610d3e82611d31565b6013805460ff60a01b1916600160a01b1790556000611c92826002611d25565b90506000611ca08383611c57565b905047611cac83611dca565b6000611cb84783611c57565b9050611cc48382611f47565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506013805460ff60a01b19169055505050565b6000611a838284612777565b6000611a838284612669565b6000611d3c60075490565b905060005b81811015610f31576000806000611d578461207e565b509250925092508160001415611d6f57505050611db8565b6001836001811115611d9157634e487b7160e01b600052602160045260246000fd5b1415611da857611da386838387612135565b611db4565b611db486838387612135565b5050505b80611dc2816127ad565b915050611d41565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e0d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611e6157600080fd5b505afa158015611e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e999190612348565b81600181518110611eba57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601254611ee09130911684612190565b60125460405163791ac94760e01b81526001600160a01b039091169063791ac94790611f199085906000908690309042906004016125e1565b600060405180830381600087803b158015611f3357600080fd5b505af1158015611a43573d6000803e3d6000fd5b601254611f5f9030906001600160a01b031684612190565b601254600090819081906001600160a01b031663f305d7198530888580611f8e6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015611ff157600080fd5b505af1158015612005573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061202a91906124eb565b47601055604080518481526020810184905290810182905292955090935091507fd7f28048575eead8851d024ead087913957dfb4fd1a02b4d1573f5352a5a2be39060600160405180910390a15050505050565b600080600080600061208f8661219b565b60408051608081019091528154909190829060ff1660018111156120c357634e487b7160e01b600052602160045260246000fd5b60018111156120e257634e487b7160e01b600052602160045260246000fd5b8152600182015460208083019190915260028301546001600160a01b0316604080840191909152600390930154606092830152835190840151928401519390910151909991985091965090945092505050565b60006121476103e8611c398787611d19565b6001600160a01b0384166000908152600a602052604090205490915061216d9082611a77565b6001600160a01b0384166000908152600a6020526040902055611aa48282612240565b610f318383836114ee565b6000600754821061220a5760405162461bcd60e51b815260206004820152603360248201527f4665657353657474696e67732e5f6765744665655374727563743a2046656520604482015272696e646578206f7574206f6620626f756e647360681b6064820152608401610882565b6007828154811061222b57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600402019050919050565b600061224b8361219b565b600381015490915061225d9083611a77565b6003909101555050565b8035612272816127f4565b919050565b600082601f830112612287578081fd5b8135602067ffffffffffffffff808311156122a4576122a46127de565b8260051b604051601f19603f830116810181811084821117156122c9576122c96127de565b604052848152838101925086840182880185018910156122e7578687fd5b8692505b85831015612310576122fc81612267565b8452928401926001929092019184016122eb565b50979650505050505050565b8035801515811461227257600080fd5b60006020828403121561233d578081fd5b8135611a83816127f4565b600060208284031215612359578081fd5b8151611a83816127f4565b60008060408385031215612376578081fd5b8235612381816127f4565b91506020830135612391816127f4565b809150509250929050565b6000806000606084860312156123b0578081fd5b83356123bb816127f4565b925060208401356123cb816127f4565b929592945050506040919091013590565b600080604083850312156123ee578182fd5b82356123f9816127f4565b91506124076020840161231c565b90509250929050565b60008060408385031215612422578182fd5b823561242d816127f4565b946020939093013593505050565b60006020828403121561244c578081fd5b813567ffffffffffffffff811115612462578182fd5b61246e84828501612277565b949350505050565b60008060408385031215612488578182fd5b823567ffffffffffffffff81111561249e578283fd5b6124aa85828601612277565b9250506124076020840161231c565b6000602082840312156124ca578081fd5b611a838261231c565b6000602082840312156124e4578081fd5b5035919050565b6000806000606084860312156124ff578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b8181101561254457858101830151858201604001528201612528565b818111156125555783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526021908201527f546f74616c20666565732063616e6e6f74206265206d6f7265207468616e20356040820152602560f81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156126305784516001600160a01b03168352938301939183019160010161260b565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612664576126646127c8565b500190565b60008261268457634e487b7160e01b81526012600452602481fd5b500490565b600181815b808511156126c45781600019048211156126aa576126aa6127c8565b808516156126b757918102915b93841c939080029061268e565b509250929050565b6000611a8360ff8416836000826126e557506001610809565b816126f257506000610809565b816001811461270857600281146127125761272e565b6001915050610809565b60ff841115612723576127236127c8565b50506001821b610809565b5060208310610133831016604e8410600b8410161715612751575081810a610809565b61275b8383612689565b806000190482111561276f5761276f6127c8565b029392505050565b6000816000190483118215151615612791576127916127c8565b500290565b6000828210156127a8576127a86127c8565b500390565b60006000198214156127c1576127c16127c8565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461280957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a9d1fcdece8a5c4eaaf192812c5ae4c27b0ce3a853a53537cdd6dd7028f54cea64736f6c63430008040033d7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5

Deployed Bytecode

0x6080604052600436106102555760003560e01c806385fe5fbd11610139578063bbde77c1116100b6578063dd62ed3e1161007a578063dd62ed3e1461071c578063ed08ae2e14610762578063f2fde38b14610782578063f6372cab146107a2578063fac6529a146107b8578063fd547e11146107d857600080fd5b8063bbde77c114610692578063bd69fbe4146106a7578063c49b9a80146106c7578063c8c8ebe4146106e7578063dc1a3add146106fc57600080fd5b806395d89b41116100fd57806395d89b41146105f0578063a457c2d71461061c578063a9059cbb1461063c578063aa45026b1461065c578063b7671a0d1461067257600080fd5b806385fe5fbd1461055257806386d506db14610572578063876da9fa146105925780638c52c6c8146105b25780638da5cb5b146105d257600080fd5b806332049b2c116101d2578063602bc62b11610196578063602bc62b146104925780636612e66f146104a757806370a08231146104c7578063715018a6146104fd5780637ab52a761461051257806381c4322b1461053257600080fd5b806332049b2c146103d457806339509351146103f45780634c544c771461041457806351c0d937146104345780635342acb41461045957600080fd5b80631d97b7cd116102195780631d97b7cd1461034757806323b872dd1461035e5780632858fe8c1461037e57806329d42dbd1461039e578063313ce567146103b857600080fd5b806306fdde0314610261578063095ea7b3146102a75780630b76dbec146102d75780631694505e146102fa57806318160ddd1461033257600080fd5b3661025c57005b600080fd5b34801561026d57600080fd5b5060408051808201909152600b81526a23b930b7323a37a1b63ab160a91b60208201525b60405161029e9190612518565b60405180910390f35b3480156102b357600080fd5b506102c76102c2366004612410565b6107f8565b604051901515815260200161029e565b3480156102e357600080fd5b506102ec61080f565b60405190815260200161029e565b34801561030657600080fd5b5060035461031a906001600160a01b031681565b6040516001600160a01b03909116815260200161029e565b34801561033e57600080fd5b506102ec610838565b34801561035357600080fd5b5061035c610858565b005b34801561036a57600080fd5b506102c761037936600461239c565b61089a565b34801561038a57600080fd5b5061035c6103993660046124d3565b610903565b3480156103aa57600080fd5b50600f546102c79060ff1681565b3480156103c457600080fd5b506040516012815260200161029e565b3480156103e057600080fd5b506102c76103ef36600461232c565b610966565b34801561040057600080fd5b506102c761040f366004612410565b6109f0565b34801561042057600080fd5b5061035c61042f36600461232c565b610a26565b34801561044057600080fd5b5060115461031a9061010090046001600160a01b031681565b34801561046557600080fd5b506102c761047436600461232c565b6001600160a01b03166000908152600c602052604090205460ff1690565b34801561049e57600080fd5b506002546102ec565b3480156104b357600080fd5b5061035c6104c23660046123dc565b610aa2565b3480156104d357600080fd5b506102ec6104e236600461232c565b6001600160a01b03166000908152600a602052604090205490565b34801561050957600080fd5b5061035c610af7565b34801561051e57600080fd5b5061035c61052d3660046124d3565b610b6b565b34801561053e57600080fd5b506102c761054d36600461232c565b610bce565b34801561055e57600080fd5b5060045461031a906001600160a01b031681565b34801561057e57600080fd5b5061035c61058d36600461232c565b610c4f565b34801561059e57600080fd5b5061035c6105ad36600461243b565b610c9b565b3480156105be57600080fd5b5061035c6105cd3660046123dc565b610d42565b3480156105de57600080fd5b506000546001600160a01b031661031a565b3480156105fc57600080fd5b5060408051808201909152600381526247544360e81b6020820152610291565b34801561062857600080fd5b506102c7610637366004612410565b610d97565b34801561064857600080fd5b506102c7610657366004612410565b610de6565b34801561066857600080fd5b506102ec60055481565b34801561067e57600080fd5b5061035c61068d36600461232c565b610df3565b34801561069e57600080fd5b506102ec610f36565b3480156106b357600080fd5b5061035c6106c236600461232c565b610f4f565b3480156106d357600080fd5b5061035c6106e23660046124b9565b6110b9565b3480156106f357600080fd5b506102ec61113e565b34801561070857600080fd5b5061035c61071736600461232c565b611157565b34801561072857600080fd5b506102ec610737366004612364565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b34801561076e57600080fd5b5061035c61077d366004612476565b61129b565b34801561078e57600080fd5b5061035c61079d36600461232c565b61133d565b3480156107ae57600080fd5b506102ec60065481565b3480156107c457600080fd5b5061035c6107d336600461232c565b611427565b3480156107e457600080fd5b5061035c6107f336600461232c565b611472565b60006108053384846114ee565b5060015b92915050565b6103e861081e6012600a6126cc565b61082b9062989680612777565b6108359190612669565b81565b60006108466012600a6126cc565b6108539062989680612777565b905090565b6000546001600160a01b0316331461088b5760405162461bcd60e51b81526004016108829061256b565b60405180910390fd5b600f805460ff19166001179055565b60006108a7848484611621565b6108f984336108f48560405180606001604052806028815260200161280d602891396001600160a01b038a166000908152600b602090815260408083203384529091529020549190611a4b565b6114ee565b5060019392505050565b6000546001600160a01b0316331461092d5760405162461bcd60e51b81526004016108829061256b565b60008160055461093d9190612651565b905060328111156109605760405162461bcd60e51b8152600401610882906125a0565b50600655565b6000805b600e548110156109e757600e818154811061099557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03848116911614806109c757506000546001600160a01b038481169116145b156109d55750600192915050565b806109df816127ad565b91505061096a565b50600092915050565b336000818152600b602090815260408083206001600160a01b038716845290915281205490916108059185906108f49086611a77565b6000546001600160a01b03163314610a505760405162461bcd60e51b81526004016108829061256b565b600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610acc5760405162461bcd60e51b81526004016108829061256b565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610b215760405162461bcd60e51b81526004016108829061256b565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610b955760405162461bcd60e51b81526004016108829061256b565b600081600654610ba59190612651565b90506032811115610bc85760405162461bcd60e51b8152600401610882906125a0565b50600555565b6000805b600d548110156109e757600d8181548110610bfd57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0384811691161480610c2f57506000546001600160a01b038481169116145b15610c3d5750600192915050565b80610c47816127ad565b915050610bd2565b6000546001600160a01b03163314610c795760405162461bcd60e51b81526004016108829061256b565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610cc55760405162461bcd60e51b81526004016108829061256b565b60005b8151811015610d3e57600060096000016000848481518110610cfa57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d36816127ad565b915050610cc8565b5050565b6000546001600160a01b03163314610d6c5760405162461bcd60e51b81526004016108829061256b565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b600061080533846108f48560405180606001604052806025815260200161283560259139336000908152600b602090815260408083206001600160a01b038d1684529091529020549190611a4b565b6000610805338484611621565b6000546001600160a01b03163314610e1d5760405162461bcd60e51b81526004016108829061256b565b6001600160a01b038116610e8f5760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420776974686472617720746865204554482062616c616e636520604482015272746f20746865207a65726f206164647265737360681b6064820152608401610882565b600060105411610ef05760405162461bcd60e51b815260206004820152602660248201527f546865204554482062616c616e6365206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610882565b6010805460009182905560405190916001600160a01b0384169183156108fc0291849190818181858888f19350505050158015610f31573d6000803e3d6000fd5b505050565b610f426012600a6126cc565b61083590620249f0612777565b6000546001600160a01b03163314610f795760405162461bcd60e51b81526004016108829061256b565b60005b600d54811015610d3e57816001600160a01b0316600d8281548110610fb157634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156110a757600d8054610fdc90600190612796565b81548110610ffa57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600d80546001600160a01b03909216918390811061103457634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600d80548061108157634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110b1816127ad565b915050610f7c565b6000546001600160a01b031633146110e35760405162461bcd60e51b81526004016108829061256b565b6013805460ff60a81b1916600160a81b8315158102919091179182905560405160ff9190920416151581527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599060200160405180910390a150565b61114a6012600a6126cc565b61083590620124f8612777565b6000546001600160a01b031633146111815760405162461bcd60e51b81526004016108829061256b565b60005b600e54811015610d3e57816001600160a01b0316600e82815481106111b957634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561128957600e80546111e490600190612796565b8154811061120257634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600e80546001600160a01b03909216918390811061123c57634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600e80548061108157634e487b7160e01b600052603160045260246000fd5b80611293816127ad565b915050611184565b6000546001600160a01b031633146112c55760405162461bcd60e51b81526004016108829061256b565b60005b8251811015610f315781600960000160008584815181106112f957634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611335816127ad565b9150506112c8565b6000546001600160a01b031633146113675760405162461bcd60e51b81526004016108829061256b565b6001600160a01b0381166113cc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610882565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114515760405162461bcd60e51b81526004016108829061256b565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b0316331461149c5760405162461bcd60e51b81526004016108829061256b565b600d80546001810182556000919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166115585760405162461bcd60e51b815260206004820152602b60248201527f42617365526669546f6b656e3a20617070726f76652066726f6d20746865207a60448201526a65726f206164647265737360a81b6064820152608401610882565b6001600160a01b0382166115c05760405162461bcd60e51b815260206004820152602960248201527f42617365526669546f6b656e3a20617070726f766520746f20746865207a65726044820152686f206164647265737360b81b6064820152608401610882565b6001600160a01b038381166000818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600f548390839060ff166116875761163882610bce565b80611647575061164781610966565b6116875760405162461bcd60e51b81526020600482015260116024820152701d1c985919481b9bdd081cdd185c9d1959607a1b6044820152606401610882565b6001600160a01b0385166116f25760405162461bcd60e51b815260206004820152602c60248201527f42617365526669546f6b656e3a207472616e736665722066726f6d207468652060448201526b7a65726f206164647265737360a01b6064820152608401610882565b6001600160a01b03841661175b5760405162461bcd60e51b815260206004820152602a60248201527f42617365526669546f6b656e3a207472616e7366657220746f20746865207a65604482015269726f206164647265737360b01b6064820152608401610882565b600083116117bd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610882565b6001600160a01b03841660009081526009602052604090205460ff161580156117ff57506001600160a01b03851660009081526009602052604090205460ff16155b6118415760405162461bcd60e51b8152602060048201526013602482015272165bdd48185c99481b9bdd08185b1b1bddd959606a1b6044820152606401610882565b600161184f6012600a6126cc565b61185c90620124f8612777565b84118015611870575061186e86610bce565b155b8015611882575061188085610966565b155b156118e05760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610882565b60006118ee6012600a6126cc565b6118fb90620249f0612777565b11801561190e575061190c86610bce565b155b8015611920575061191e85610966565b155b801561193a57506013546001600160a01b03868116911614155b156119e3576001600160a01b0385166000908152600a602052604081205490506119666012600a6126cc565b61197390620249f0612777565b61197d8683612651565b11156119e15760405162461bcd60e51b815260206004820152602d60248201527f4e65772062616c616e636520776f756c642065786365656420746865206d617860448201526c57616c6c657442616c616e636560981b6064820152608401610882565b505b6001600160a01b0386166000908152600c602052604090205460ff1680611a2257506001600160a01b0385166000908152600c602052604090205460ff165b15611a2b575060005b611a3786868684611a8a565b611a4386868684611aab565b505050505050565b60008184841115611a6f5760405162461bcd60e51b81526004016108829190612518565b505050900390565b6000611a838284612651565b9392505050565b306000908152600a6020526040902054611aa48186611b9f565b5050505050565b6000611ab78584611c09565b905081611ac2575060005b600080611acf8584611c25565b6001600160a01b0389166000908152600a60205260409020549193509150611af79083611c57565b6001600160a01b038089166000908152600a60205260408082209390935590881681522054611b269082611a77565b6001600160a01b0387166000908152600a6020526040902055611b498584611c63565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b8e91815260200190565b60405180910390a350505050505050565b6014548210611bae5760145491505b60155482108015908190611bcb5750601354600160a81b900460ff165b8015611be15750601354600160a01b900460ff16155b8015611bfb57506013546001600160a01b03838116911614155b15610f3157610f3183611c72565b6001600160a01b0382166000908152600a602052600854611a83565b60008080611c3f6103e8611c398787611d19565b90611d25565b90506000611c4d8683611c57565b9596945050505050565b6000611a838284612796565b8015610d3e57610d3e82611d31565b6013805460ff60a01b1916600160a01b1790556000611c92826002611d25565b90506000611ca08383611c57565b905047611cac83611dca565b6000611cb84783611c57565b9050611cc48382611f47565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506013805460ff60a01b19169055505050565b6000611a838284612777565b6000611a838284612669565b6000611d3c60075490565b905060005b81811015610f31576000806000611d578461207e565b509250925092508160001415611d6f57505050611db8565b6001836001811115611d9157634e487b7160e01b600052602160045260246000fd5b1415611da857611da386838387612135565b611db4565b611db486838387612135565b5050505b80611dc2816127ad565b915050611d41565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e0d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611e6157600080fd5b505afa158015611e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e999190612348565b81600181518110611eba57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601254611ee09130911684612190565b60125460405163791ac94760e01b81526001600160a01b039091169063791ac94790611f199085906000908690309042906004016125e1565b600060405180830381600087803b158015611f3357600080fd5b505af1158015611a43573d6000803e3d6000fd5b601254611f5f9030906001600160a01b031684612190565b601254600090819081906001600160a01b031663f305d7198530888580611f8e6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015611ff157600080fd5b505af1158015612005573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061202a91906124eb565b47601055604080518481526020810184905290810182905292955090935091507fd7f28048575eead8851d024ead087913957dfb4fd1a02b4d1573f5352a5a2be39060600160405180910390a15050505050565b600080600080600061208f8661219b565b60408051608081019091528154909190829060ff1660018111156120c357634e487b7160e01b600052602160045260246000fd5b60018111156120e257634e487b7160e01b600052602160045260246000fd5b8152600182015460208083019190915260028301546001600160a01b0316604080840191909152600390930154606092830152835190840151928401519390910151909991985091965090945092505050565b60006121476103e8611c398787611d19565b6001600160a01b0384166000908152600a602052604090205490915061216d9082611a77565b6001600160a01b0384166000908152600a6020526040902055611aa48282612240565b610f318383836114ee565b6000600754821061220a5760405162461bcd60e51b815260206004820152603360248201527f4665657353657474696e67732e5f6765744665655374727563743a2046656520604482015272696e646578206f7574206f6620626f756e647360681b6064820152608401610882565b6007828154811061222b57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600402019050919050565b600061224b8361219b565b600381015490915061225d9083611a77565b6003909101555050565b8035612272816127f4565b919050565b600082601f830112612287578081fd5b8135602067ffffffffffffffff808311156122a4576122a46127de565b8260051b604051601f19603f830116810181811084821117156122c9576122c96127de565b604052848152838101925086840182880185018910156122e7578687fd5b8692505b85831015612310576122fc81612267565b8452928401926001929092019184016122eb565b50979650505050505050565b8035801515811461227257600080fd5b60006020828403121561233d578081fd5b8135611a83816127f4565b600060208284031215612359578081fd5b8151611a83816127f4565b60008060408385031215612376578081fd5b8235612381816127f4565b91506020830135612391816127f4565b809150509250929050565b6000806000606084860312156123b0578081fd5b83356123bb816127f4565b925060208401356123cb816127f4565b929592945050506040919091013590565b600080604083850312156123ee578182fd5b82356123f9816127f4565b91506124076020840161231c565b90509250929050565b60008060408385031215612422578182fd5b823561242d816127f4565b946020939093013593505050565b60006020828403121561244c578081fd5b813567ffffffffffffffff811115612462578182fd5b61246e84828501612277565b949350505050565b60008060408385031215612488578182fd5b823567ffffffffffffffff81111561249e578283fd5b6124aa85828601612277565b9250506124076020840161231c565b6000602082840312156124ca578081fd5b611a838261231c565b6000602082840312156124e4578081fd5b5035919050565b6000806000606084860312156124ff578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b8181101561254457858101830151858201604001528201612528565b818111156125555783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526021908201527f546f74616c20666565732063616e6e6f74206265206d6f7265207468616e20356040820152602560f81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156126305784516001600160a01b03168352938301939183019160010161260b565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612664576126646127c8565b500190565b60008261268457634e487b7160e01b81526012600452602481fd5b500490565b600181815b808511156126c45781600019048211156126aa576126aa6127c8565b808516156126b757918102915b93841c939080029061268e565b509250929050565b6000611a8360ff8416836000826126e557506001610809565b816126f257506000610809565b816001811461270857600281146127125761272e565b6001915050610809565b60ff841115612723576127236127c8565b50506001821b610809565b5060208310610133831016604e8410600b8410161715612751575081810a610809565b61275b8383612689565b806000190482111561276f5761276f6127c8565b029392505050565b6000816000190483118215151615612791576127916127c8565b500290565b6000828210156127a8576127a86127c8565b500390565b60006000198214156127c1576127c16127c8565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461280957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a9d1fcdece8a5c4eaaf192812c5ae4c27b0ce3a853a53537cdd6dd7028f54cea64736f6c63430008040033

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.