ETH Price: $4,508.54 (+0.29%)

Contract

0xC5190E7FEC4d97a3a3b1aB42dfedac608e2d0793
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

FXI Sports (FXI) ($0.0039)

Multichain Info

Transaction Hash
Method
Block
From
To
Approve235346332025-10-08 17:52:113 hrs ago1759945931IN
FXI Sports: FXI Token
0 ETH0.000090751.95083463
Approve235344062025-10-08 17:06:114 hrs ago1759943171IN
FXI Sports: FXI Token
0 ETH0.000100412.16840215
Approve235339112025-10-08 15:25:595 hrs ago1759937159IN
FXI Sports: FXI Token
0 ETH0.000090111.93713121
Approve235338802025-10-08 15:19:475 hrs ago1759936787IN
FXI Sports: FXI Token
0 ETH0.000083121.78677146
Approve235330352025-10-08 12:29:238 hrs ago1759926563IN
FXI Sports: FXI Token
0 ETH0.000005150.17677631
Approve235312182025-10-08 6:22:1114 hrs ago1759904531IN
FXI Sports: FXI Token
0 ETH0.000075091.62120923
Approve235302482025-10-08 3:06:3518 hrs ago1759892795IN
FXI Sports: FXI Token
0 ETH0.000029050.62462608
Approve235290272025-10-07 23:01:1122 hrs ago1759878071IN
FXI Sports: FXI Token
0 ETH0.000041630.89494193
Approve235289922025-10-07 22:54:1122 hrs ago1759877651IN
FXI Sports: FXI Token
0 ETH0.000003220.12092396
Approve235289862025-10-07 22:52:5922 hrs ago1759877579IN
FXI Sports: FXI Token
0 ETH0.000005720.12297497
Approve235274872025-10-07 17:51:4727 hrs ago1759859507IN
FXI Sports: FXI Token
0 ETH0.000042970.9240387
Approve235249732025-10-07 9:26:2335 hrs ago1759829183IN
FXI Sports: FXI Token
0 ETH0.000053831.16450742
Transfer235209512025-10-06 19:56:112 days ago1759780571IN
FXI Sports: FXI Token
0 ETH0.000098491.79760362
Approve235207992025-10-06 19:25:472 days ago1759778747IN
FXI Sports: FXI Token
0 ETH0.000095472.06137181
Approve235173922025-10-06 7:59:112 days ago1759737551IN
FXI Sports: FXI Token
0 ETH0.000051551.11335408
Approve235155522025-10-06 1:48:352 days ago1759715315IN
FXI Sports: FXI Token
0 ETH0.000053041.14513184
Transfer235129062025-10-05 16:57:113 days ago1759683431IN
FXI Sports: FXI Token
0 ETH0.000064681.18103732
Approve235066332025-10-04 19:55:234 days ago1759607723IN
FXI Sports: FXI Token
0 ETH0.000074641.61158794
Approve235059112025-10-04 17:29:594 days ago1759598999IN
FXI Sports: FXI Token
0 ETH0.000005250.21690329
Approve235045702025-10-04 12:59:114 days ago1759582751IN
FXI Sports: FXI Token
0 ETH0.000075241.62547725
Approve235032922025-10-04 8:42:594 days ago1759567379IN
FXI Sports: FXI Token
0 ETH0.000052691.13796669
Approve235009972025-10-04 1:00:354 days ago1759539635IN
FXI Sports: FXI Token
0 ETH0.000011060.23898844
Approve235004512025-10-03 23:11:114 days ago1759533071IN
FXI Sports: FXI Token
0 ETH0.000011530.24790546
Transfer234988942025-10-03 17:58:235 days ago1759514303IN
FXI Sports: FXI Token
0 ETH0.000179752.34793634
Approve234968572025-10-03 11:08:235 days ago1759489703IN
FXI Sports: FXI Token
0 ETH0.000034681.1885648
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer235312182025-10-08 6:22:1114 hrs ago1759904531
FXI Sports: FXI Token
0.00393883 ETH
Transfer235312182025-10-08 6:22:1114 hrs ago1759904531
FXI Sports: FXI Token
0.00393883 ETH
Transfer235302492025-10-08 3:06:4718 hrs ago1759892807
FXI Sports: FXI Token
0.00521757 ETH
Transfer235302492025-10-08 3:06:4718 hrs ago1759892807
FXI Sports: FXI Token
0.00521757 ETH
Transfer235290422025-10-07 23:04:1122 hrs ago1759878251
FXI Sports: FXI Token
0.00524943 ETH
Transfer235290422025-10-07 23:04:1122 hrs ago1759878251
FXI Sports: FXI Token
0.00524943 ETH
Transfer235274872025-10-07 17:51:4727 hrs ago1759859507
FXI Sports: FXI Token
0.00580206 ETH
Transfer235274872025-10-07 17:51:4727 hrs ago1759859507
FXI Sports: FXI Token
0.00580206 ETH
Transfer235209432025-10-06 19:54:352 days ago1759780475
FXI Sports: FXI Token
0.01169974 ETH
Transfer235209432025-10-06 19:54:352 days ago1759780475
FXI Sports: FXI Token
0.01169974 ETH
Transfer235128962025-10-05 16:55:113 days ago1759683311
FXI Sports: FXI Token
0.00443649 ETH
Transfer235128962025-10-05 16:55:113 days ago1759683311
FXI Sports: FXI Token
0.00443649 ETH
Transfer235066332025-10-04 19:55:234 days ago1759607723
FXI Sports: FXI Token
0.00606922 ETH
Transfer235066332025-10-04 19:55:234 days ago1759607723
FXI Sports: FXI Token
0.00606922 ETH
Transfer234987112025-10-03 17:21:235 days ago1759512083
FXI Sports: FXI Token
0.00381242 ETH
Transfer234987112025-10-03 17:21:235 days ago1759512083
FXI Sports: FXI Token
0.00381242 ETH
Transfer234981702025-10-03 15:32:475 days ago1759505567
FXI Sports: FXI Token
0.01073764 ETH
Transfer234981702025-10-03 15:32:475 days ago1759505567
FXI Sports: FXI Token
0.01073764 ETH
Transfer234979332025-10-03 14:45:235 days ago1759502723
FXI Sports: FXI Token
0.01867013 ETH
Transfer234979332025-10-03 14:45:235 days ago1759502723
FXI Sports: FXI Token
0.01867013 ETH
Transfer234974972025-10-03 13:17:475 days ago1759497467
FXI Sports: FXI Token
0.00388043 ETH
Transfer234974972025-10-03 13:17:475 days ago1759497467
FXI Sports: FXI Token
0.00388043 ETH
Transfer234974932025-10-03 13:16:595 days ago1759497419
FXI Sports: FXI Token
0.01702768 ETH
Transfer234974932025-10-03 13:16:595 days ago1759497419
FXI Sports: FXI Token
0.01702768 ETH
Transfer234957252025-10-03 7:21:115 days ago1759476071
FXI Sports: FXI Token
0.00676557 ETH
View All Internal Transactions
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FXISportsToken

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
//SPDX-License-Identifier: None

pragma solidity ^0.8.19;

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Address.sol";
import "./interfaces/IUniswapV2Factory.sol";
import "./interfaces/IUniswapV2Router02.sol";
import "./interfaces/IFXISportsToken.sol";

/// @title FXI Sports Token
/// @title https://fx1.io/
/// @title https://t.me/fx1_sports_portal
/// @author https://PROOFplatform.io
/// @author https://5thWeb.io

contract FXISportsToken is Ownable, IFXISportsToken {
    /// @notice Maps an address to its token balance
    mapping(address => uint256) private _balances;
    /// @notice Maps addresses to allowances granted by token holders
    mapping(address => mapping(address => uint256)) private _allowances;
    /// @notice Maps addresses to indicate whether they are excluded from transaction fees
    mapping(address => bool) public excludedFromFees;
    /// @notice Maps addresses to indicate whether they are excluded from maximum wallet balance limits
    mapping(address => bool) public excludedFromMaxWallet;
    /// @notice Maps addresses to indicate whether they are whitelisted
    mapping(address => bool) public whitelists;

    /// @notice Total supply of the FX1 Sports Token
    uint256 private _totalSupply = 300_000_000 * 10 ** _decimals;
    /// @notice Timestamp of the token contract launch
    uint256 public launchTime;
    /// @notice Period during which addresses can be added to the whitelist
    uint256 public whitelistPeriod;
    /// @notice Minimum amount of tokens required to trigger an automatic swap for liquidity
    uint256 public swapThreshold;
    /// @notice Maximum amount of tokens that a wallet can hold
    uint256 public maxWalletAmount;
    /// @notice Accumulated amount of tokens reserved for liquidity
    uint256 private accLiquidityAmount;
    /// @notice Accumulated amount of tokens reserved for marketing purposes
    uint256 private accMarketingAmount;

    /// @notice The cumulative fee rate applied to buy transactions
    uint256 public totalBuyFeeRate;
    /// @notice The cumulative fee rate applied to sale transactions
    uint256 public totalSellFeeRate;

    /// @notice Address for receiving marketing-related tax payments
    address public marketingTaxRecv;
    /// @notice Address of the generated token pair
    address public pair;
    /// @notice Address representing a dead wallet
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;

    /// @notice Variable indicates whether a liquidity swap is in progress
    bool private inSwapLiquidity;

    /// @notice Name of the FX1 Sports Token
    string private _name = "FXI Sports";
    /// @notice Symbol of the FX1 Sports Token
    string private _symbol = "FXI";

    /// @notice Fixed-point multiplier used for calculations
    uint256 public immutable FIXED_POINT = 1000;
    /// @notice The maximum allowable fee rate
    uint16 public constant MAX_FEE = 100;
    /// @notice Number of decimal places for token values
    uint8 private constant _decimals = 18;

    /// @notice Router for interacting with the Uniswap decentralized exchange
    IUniswapV2Router02 public dexRouter;
    /// @notice Fee rates for buying transactions
    FeeRate public buyfeeRate;
    /// @notice Fee rates for selling transactions
    FeeRate public sellfeeRate;

    /// @notice Constructs the FX1SportsToken contract
    /// @param _param A struct containing various parameters required for the token's configuration
    constructor(
        FeeRate memory _buyfeeRate,
        FeeRate memory _sellfeeRate,
        Param memory _param
    ) checkFeeRates(_buyfeeRate) checkFeeRates(_sellfeeRate) {
        require(
            _param.marketingTaxRecv != address(0),
            "Invalid MarketingTaxRecv address"
        );
        require(_param.dexRouter != address(0), "Invalid dexRouter adddress");
        require(_param.whitelistPeriod > 0, "Invalid whitelistPeriod");
        address sender = msg.sender;
        marketingTaxRecv = _param.marketingTaxRecv;
        dexRouter = IUniswapV2Router02(_param.dexRouter);
        whitelistPeriod = _param.whitelistPeriod;
        buyfeeRate.liquidityFeeRate = _buyfeeRate.liquidityFeeRate;
        buyfeeRate.marketingFeeRate = _buyfeeRate.marketingFeeRate;
        totalBuyFeeRate =
            _buyfeeRate.liquidityFeeRate +
            _buyfeeRate.marketingFeeRate;

        sellfeeRate.liquidityFeeRate = _sellfeeRate.liquidityFeeRate;
        sellfeeRate.marketingFeeRate = _sellfeeRate.marketingFeeRate;
        totalSellFeeRate =
            _sellfeeRate.liquidityFeeRate +
            _sellfeeRate.marketingFeeRate;

        excludedFromFees[sender] = true;
        excludedFromMaxWallet[sender] = true;
        excludedFromMaxWallet[address(this)] = true;
        excludedFromMaxWallet[marketingTaxRecv] = true;
        whitelists[sender] = true;
        whitelists[address(this)] = true;

        _balances[sender] += _totalSupply;
        emit Transfer(address(0), sender, _totalSupply);
        swapThreshold = _totalSupply / 10000; // 0.01%
    }

    receive() external payable {}

    /**
     * @notice A modifier to check and enforce the maximum fee rates for marketing and liquidity
     * @param _fees The structure containing marketing and liquidity fee rates
     */
    modifier checkFeeRates(FeeRate memory _fees) {
        require(
            _fees.marketingFeeRate + _fees.liquidityFeeRate <= MAX_FEE,
            "Max Rate exceeded, please lower value"
        );
        _;
    }

    /// ================================ Functions for ERC20 token ================================ ///

    function name() external view returns (string memory) {
        return _name;
    }

    function symbol() external view returns (string memory) {
        return _symbol;
    }

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

    function totalSupply() external view returns (uint256) {
        return _totalSupply;
    }

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

    function transfer(
        address _recipient,
        uint256 _amount
    ) external override returns (bool) {
        _transfer(msg.sender, _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(msg.sender, _spender, _amount);
        return true;
    }

    function transferFrom(
        address _sender,
        address _recipient,
        uint256 _amount
    ) external override returns (bool) {
        uint256 currentAllowance = _allowances[_sender][msg.sender];
        require(currentAllowance >= _amount, "Transfer > allowance");
        _approve(_sender, msg.sender, currentAllowance - _amount);
        _transfer(_sender, _recipient, _amount);
        return true;
    }

    /// ================================ External functions ================================ ///

    /**
     * @notice Updates the address of the Uniswap router
     * @param _newRouter The new address of the Uniswap router
     */
    function updateDexRouter(address _newRouter) external onlyOwner {
        require(Address.isContract(_newRouter), "Address is not a contract");
        dexRouter = IUniswapV2Router02(_newRouter);
    }

    /**
     * @notice External function update the Uniswap pair address and adjust exemption settings
     * @param _pair The new Uniswap pair address
     */
    function updatePair(address _pair) external onlyOwner {
        require(_pair != address(0), "Invalid pair address");
        if (pair != address(0)) {
            excludedFromMaxWallet[pair] = false;
            whitelists[pair] = false;
        }
        pair = _pair;
        excludedFromMaxWallet[_pair] = true;
        whitelists[_pair] = true;
    }

    /**
     * @notice External function update the whitelist period
     * @param _newWhiteListPeriod The new duration of the whitelist period in seconds
     */
    function setWhiteListPeriod(
        uint256 _newWhiteListPeriod
    ) external onlyOwner {
        require(_newWhiteListPeriod > 0, "Invalid whitelistPeriod");
        whitelistPeriod = _newWhiteListPeriod;
    }

    /**
     * @notice External function for allows the contract owner to send FX1SportsToken amounts of tokens to multiple recipients
     * @param _recipients An array of recipient addresses to send tokens to
     * @param _amounts An array of corresponding token amounts to be sent to each recipient
     */
    function multiSender(
        address[] memory _recipients,
        uint256[] memory _amounts
    ) external onlyOwner {
        require(_recipients.length == _amounts.length, "Invalid arrays length");

        uint256 totalAmountToSend = 0;
        for (uint256 i = 0; i < _recipients.length; ) {
            require(_recipients[i] != address(0), "Invalid recipient address");
            totalAmountToSend += _amounts[i];

            unchecked {
                i++;
            }
        }

        require(
            _balances[msg.sender] >= totalAmountToSend,
            "Not enough balance to send"
        );
        for (uint256 i = 0; i < _recipients.length; ) {
            _transfer(msg.sender, _recipients[i], _amounts[i]);

            unchecked {
                i++;
            }
        }
    }

    /**
     * @notice External function allows the contract owner to set the launch time of the token
     */
    function setLaunchBegin() external override onlyOwner {
        require(launchTime == 0, "Already launched");
        launchTime = block.timestamp;
    }

    /**
     * @notice External function allows the contract owner to add or remove multiple addresses from the whitelists
     * @param _accounts An array of addresses to be added or removed from the whitelists
     * @param _add A boolean indicating whether to add or remove the addresses from the whitelists
     */
    function updateWhitelists(
        address[] memory _accounts,
        bool _add
    ) external override onlyOwner {
        uint256 length = _accounts.length;
        require(length > 0, "Invalid accounts length");

        for (uint256 i = 0; i < length; ) {
            whitelists[_accounts[i]] = _add;

            unchecked {
                i++;
            }
        }
    }

    /**
     * @notice External function allows the contract owner to exclude or include multiple addresses from the list of addresses exempted from maximum wallet balance limits
     * @param _accounts An array of addresses to be excluded or included in the list
     * @param _add A boolean indicating whether to exclude or include the addresses in the list
     */
    function excludeWalletsFromMaxWallets(
        address[] memory _accounts,
        bool _add
    ) external override onlyOwner {
        uint256 length = _accounts.length;
        require(length > 0, "Invalid length array");
        for (uint256 i = 0; i < length; ) {
            excludedFromMaxWallet[_accounts[i]] = _add;

            unchecked {
                i++;
            }
        }
    }

    /**
     * @notice External function allows the contract owner to exclude or include multiple addresses from the list of addresses exempted from transaction fees
     * @param _accounts An array of addresses to be excluded or included in the list
     * @param _add A boolean indicating whether to exclude or include the addresses in the list
     */
    function excludeWalletsFromFees(
        address[] memory _accounts,
        bool _add
    ) external override onlyOwner {
        uint256 length = _accounts.length;
        require(length > 0, "Invalid length array");
        for (uint256 i = 0; i < length; ) {
            excludedFromFees[_accounts[i]] = _add;

            unchecked {
                i++;
            }
        }
    }

    /**
     * @notice External function allows the contract owner to set a new maximum wallet balance limit
     * @param newLimit The new maximum transfer amount limit to be set
     */
    function setMaxWalletAmount(uint256 newLimit) external override onlyOwner {
        require(newLimit >= (_totalSupply * 10) / 1000, "Min 1% limit");
        maxWalletAmount = newLimit;
    }

    /**
     * @notice External function allows the contract owner to set a new address for the marketing tax wallet
     * @param _marketingTaxWallet The new address to be set as the marketing tax wallet
     */
    function setMarketingTaxWallet(
        address _marketingTaxWallet
    ) external override onlyOwner {
        require(
            _marketingTaxWallet != address(0),
            "Invalid marketingTaxWallet address"
        );
        marketingTaxRecv = _marketingTaxWallet;
    }

    /**
     * @notice This function allows the contract owner to update the fee rates for buy operations
     * @param _marketingBuyFeeRate New marketing fee rate for buy operations
     * @param _liquidityBuyFeeRate New liquidity fee rate for buy operations
     */
    function updateBuyFeeRate(
        uint16 _marketingBuyFeeRate,
        uint16 _liquidityBuyFeeRate
    ) external override onlyOwner {
        require(
            _marketingBuyFeeRate + _liquidityBuyFeeRate <= MAX_FEE,
            "Max Rate exceeded, please lower value"
        );
        buyfeeRate.marketingFeeRate = _marketingBuyFeeRate;
        buyfeeRate.liquidityFeeRate = _liquidityBuyFeeRate;
        totalBuyFeeRate = _marketingBuyFeeRate + _liquidityBuyFeeRate;
    }

    /**
     * @notice This function allows the contract owner to update the fee rates for sell operations
     * @param _marketingSellFeeRate New marketing fee rate for sell operations
     * @param _liquiditySellFeeRate New liquidity fee rate for sell operations
     */
    function updateSellFeeRate(
        uint16 _marketingSellFeeRate,
        uint16 _liquiditySellFeeRate
    ) external override onlyOwner {
        require(
            _marketingSellFeeRate + _liquiditySellFeeRate <= MAX_FEE,
            "Max Rate exceeded, please lower value"
        );
        sellfeeRate.marketingFeeRate = _marketingSellFeeRate;
        sellfeeRate.liquidityFeeRate = _liquiditySellFeeRate;
        totalSellFeeRate = _marketingSellFeeRate + _liquiditySellFeeRate;
    }

    /**
     * @notice External function allows the contract owner to set a new swap threshold value
     * @param _swapThreshold The new swap threshold value to be set
     */
    function setSwapThreshold(
        uint256 _swapThreshold
    ) external override onlyOwner {
        require(_swapThreshold > 0, "Invalid swapThreshold");
        swapThreshold = _swapThreshold;
    }

    /// ================================ Internal functions ================================ ///

    /**
     * @notice Internal function to perform token transfer between two addresses, subject to various checks and conditions
     * @param _sender The address from which tokens are being transferred
     * @param _recipient The address to which tokens are being transferred
     * @param _amount The amount of tokens being transferred
     */
    function _transfer(
        address _sender,
        address _recipient,
        uint256 _amount
    ) internal {
        require(_sender != address(0), "Transfer from zero address");
        require(_recipient != address(0), "Transfer to zero address");
        require(_amount > 0, "Zero amount");
        require(_balances[_sender] >= _amount, "Not enough amount to transfer");
        require(_sender == owner() || launchTime != 0, "Not launched yet");
        if (block.timestamp < launchTime + whitelistPeriod) {
            require(whitelists[_recipient], "only whitelist");
        }
        if (maxWalletAmount > 0) {
            require(
                excludedFromMaxWallet[_recipient] ||
                    _balances[_recipient] + _amount <= maxWalletAmount,
                "Exceeds to maxWalletAmount"
            );
        }
        if (
            inSwapLiquidity ||
            excludedFromFees[_recipient] ||
            excludedFromFees[_sender]
        ) {
            _basicTransfer(_sender, _recipient, _amount);
            emit Transfer(_sender, _recipient, _amount);
            return;
        }
        if (pair != address(0)) {
            if (_sender == pair) {
                // buy
                _taxonBuyTransfer(_sender, _recipient, _amount);
            } else {
                _swapBack();

                if (_recipient == pair) {
                    // sell
                    _taxonSellTransfer(_sender, _recipient, _amount);
                } else {
                    _basicTransfer(_sender, _recipient, _amount);
                }
            }
        }

        emit Transfer(_sender, _recipient, _amount);
    }

    /**
     * @notice Internal function to swap excess tokens in the contract back to ETH and manage liquidity and fees
     */
    function _swapBack() internal {
        uint256 accTotalAmount = accLiquidityAmount + accMarketingAmount;
        if (accTotalAmount <= swapThreshold) {
            return;
        }
        inSwapLiquidity = true;
        uint256 swapAmountForLiquidity = accLiquidityAmount / 2;
        uint256 swapAmount = accTotalAmount - swapAmountForLiquidity;
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();
        _approve(address(this), address(dexRouter), swapAmount);
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapAmount,
            0,
            path,
            address(this),
            block.timestamp + 30 minutes
        );
        uint256 swappedETHAmount = address(this).balance;
        require(swappedETHAmount > 0, "Too small token for swapBack");
        uint256 ethForLiquidity = (swappedETHAmount * swapAmountForLiquidity) /
            swapAmount;

        if (ethForLiquidity > 0) {
            uint256 amountForLiquidity = accLiquidityAmount -
                swapAmountForLiquidity;
            _approve(address(this), address(dexRouter), amountForLiquidity);
            dexRouter.addLiquidityETH{value: ethForLiquidity}(
                address(this),
                amountForLiquidity,
                0,
                0,
                0x000000000000000000000000000000000000dEaD,
                block.timestamp + 30 minutes
            );
            swappedETHAmount -= ethForLiquidity;
        }

        _transferETH(marketingTaxRecv, swappedETHAmount);

        accLiquidityAmount = 0;
        accMarketingAmount = 0;
        inSwapLiquidity = false;
    }

    /**
     * @notice Internal function to handle transfers when tokens are being sold
     * @param _sender The address of the sender (seller)
     * @param _recipient The address of the recipient (buyer)
     * @param _amount The amount of tokens being transferred
     */
    function _taxonSellTransfer(
        address _sender,
        address _recipient,
        uint256 _amount
    ) internal {
        (
            uint256 marketingFeeRate,
            uint256 liquidityFeeRate
        ) = _getSellFeeRate();

        uint256 marketingFeeAmount = (_amount * marketingFeeRate) / FIXED_POINT;
        uint256 liquidityFeeAmount = (_amount * liquidityFeeRate) / FIXED_POINT;
        uint256 recvAmount = _amount -
            (marketingFeeAmount + liquidityFeeAmount);

        _balances[_sender] -= _amount;
        _balances[_recipient] += recvAmount;
        _balances[address(this)] += (marketingFeeAmount + liquidityFeeAmount);
        accLiquidityAmount += liquidityFeeAmount;
        accMarketingAmount += marketingFeeAmount;
    }

    /**
     * @notice Internal function to handle transfers when tokens are being bought
     * @param _sender The address of the sender (buyer)
     * @param _recipient The address of the recipient (seller)
     * @param _amount The amount of tokens being transferred
     */
    function _taxonBuyTransfer(
        address _sender,
        address _recipient,
        uint256 _amount
    ) internal {
        (uint256 marketingFeeRate, uint256 liquidityFeeRate) = _getBuyFeeRate();

        uint256 marketingFeeAmount = (_amount * marketingFeeRate) / FIXED_POINT;
        uint256 liquidityFeeAmount = (_amount * liquidityFeeRate) / FIXED_POINT;
        uint256 recvAmount = _amount -
            (marketingFeeAmount + liquidityFeeAmount);

        _balances[_sender] -= _amount;
        _balances[_recipient] += recvAmount;
        _balances[address(this)] += (marketingFeeAmount + liquidityFeeAmount);
        accLiquidityAmount += liquidityFeeAmount;
        accMarketingAmount += marketingFeeAmount;
    }

    /**
     * @notice Internal function to perform a basic transfer of tokens between two addresses
     * @param _sender The address of the sender
     * @param _recipient The address of the recipient
     * @param _amount The amount of tokens to transfer
     */
    function _basicTransfer(
        address _sender,
        address _recipient,
        uint256 _amount
    ) internal {
        _balances[_sender] -= _amount;
        _balances[_recipient] += _amount;
    }

    /**
     * @notice Internal function to get the fee rates for selling tokens based on the current time period after launch
     */
    function _getSellFeeRate()
        internal
        view
        returns (uint256 _marketingFeeRate, uint256 _liquidityFeeRate)
    {
        return (sellfeeRate.marketingFeeRate, sellfeeRate.liquidityFeeRate);
    }

    /**
     * @notice Internal function to get the fee rates for buying tokens based on the current time period after launch
     */
    function _getBuyFeeRate()
        internal
        view
        returns (uint256 _marketingFeeRate, uint256 _liquidityFeeRate)
    {
        return (buyfeeRate.marketingFeeRate, buyfeeRate.liquidityFeeRate);
    }

    /**
     * @notice Internal function to transfer ETH to a specified recipient
     * @param _recipient The address of the recipient to which ETH should be transferred
     * @param _amount The amount of ETH to transfer
     */
    function _transferETH(address _recipient, uint256 _amount) internal {
        if (_amount == 0) return;
        (bool sent, ) = _recipient.call{value: _amount}("");
        require(sent, "Sending ETH failed");
    }

    /// ================================ Private functions ================================ ///

    /**
     * @notice Private function to set the allowance amount that `_spender` can spend on behalf of `_owner`
     * @param _owner The address that approves spending
     * @param _spender The address that is allowed to spend
     * @param _amount The amount of tokens that `_spender` is allowed to spend
     */
    function _approve(
        address _owner,
        address _spender,
        uint256 _amount
    ) private {
        require(_owner != address(0), "Approve from zero");
        require(_spender != address(0), "Approve to zero");
        _allowances[_owner][_spender] = _amount;
        emit Approval(_owner, _spender, _amount);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    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);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountToken, uint amountETH);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function swapTokensForExactETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactTokensForETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function quote(
        uint amountA,
        uint reserveA,
        uint reserveB
    ) external pure returns (uint amountB);

    function getAmountOut(
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountOut);

    function getAmountIn(
        uint amountOut,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountIn);

    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);

    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

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

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

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

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

//SPDX-License-Identifier: None

pragma solidity ^0.8.19;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

/// @title FXI Sports Token
/// @title https://fx1.io/
/// @title https://t.me/fx1_sports_portal
/// @author https://PROOFplatform.io
/// @author https://5thWeb.io

interface IFXISportsToken is IERC20 {
    struct Param {
        address marketingTaxRecv;
        address dexRouter;
        uint256 whitelistPeriod;
    }

    struct FeeRate {
        uint256 marketingFeeRate;
        uint256 liquidityFeeRate;
    }

    /// @notice Locks trading until called. Cannont be called twice.
    /// @dev Only owner can call this function.
    function setLaunchBegin() external;

    /// @notice Add/Remove whitelists.
    /// @dev Only owner can call this function.
    /// @param _accounts The address of whitelists.
    /// @param _add True/False = Add/Remove
    function updateWhitelists(address[] memory _accounts, bool _add) external;

    /// @notice Add/Remove wallets to excludedMaxWallet.
    /// @dev Only owner can call this function.
    /// @param _accounts The address of accounts.
    /// @param _add True/False = Add/Remove
    function excludeWalletsFromMaxWallets(
        address[] memory _accounts,
        bool _add
    ) external;

    /// @notice Add/Remove wallets to excludedFromFees.
    /// @dev Only owner can call this function.
    /// @param _accounts The address of accounts.
    /// @param _add True/False = Add/Remove
    function excludeWalletsFromFees(
        address[] memory _accounts,
        bool _add
    ) external;

    /// @notice Set maxWalletAmount.
    /// @dev Only owner can call this function.
    /// @param _maxWalletAmount New maxWalletAmount.
    function setMaxWalletAmount(uint256 _maxWalletAmount) external;

    /// @notice Set marketingTaxRecipient wallet address.
    /// @dev Only owner can call this function.
    /// @param _marketingTaxWallet The address of marketingTaxRecipient wallet.
    function setMarketingTaxWallet(address _marketingTaxWallet) external;

    /// @notice UpdateBuyFeeRate.
    /// @dev Only owner can call this function.
    /// @dev Max Rate of 100(10%) 10 = 1%
    /// @param _marketingBuyFeeRate New MarketingBuyFeeRate.
    /// @param _liquidityBuyFeeRate New LiquidityBuyFeeRate.
    function updateBuyFeeRate(
        uint16 _marketingBuyFeeRate,
        uint16 _liquidityBuyFeeRate
    ) external;

    /// @notice UpdateSellFeeRate.
    /// @dev Only owner can call this function.
    /// @dev Max Rate of 100(10%) 10 = 1%
    /// @param _marketingSellFeeRate New MarketingSellFeeRate.
    /// @param _liquiditySellFeeRate New LiquiditySellFeeRate.
    function updateSellFeeRate(
        uint16 _marketingSellFeeRate,
        uint16 _liquiditySellFeeRate
    ) external;

    /// @notice Set swapThreshold.
    /// @dev Only owner can call this function.
    /// @param _swapThreshold New swapThreshold amount.
    function setSwapThreshold(uint256 _swapThreshold) external;
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"components":[{"internalType":"uint256","name":"marketingFeeRate","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeRate","type":"uint256"}],"internalType":"struct IFXISportsToken.FeeRate","name":"_buyfeeRate","type":"tuple"},{"components":[{"internalType":"uint256","name":"marketingFeeRate","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeRate","type":"uint256"}],"internalType":"struct IFXISportsToken.FeeRate","name":"_sellfeeRate","type":"tuple"},{"components":[{"internalType":"address","name":"marketingTaxRecv","type":"address"},{"internalType":"address","name":"dexRouter","type":"address"},{"internalType":"uint256","name":"whitelistPeriod","type":"uint256"}],"internalType":"struct IFXISportsToken.Param","name":"_param","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FIXED_POINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FEE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyfeeRate","outputs":[{"internalType":"uint256","name":"marketingFeeRate","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeRate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"bool","name":"_add","type":"bool"}],"name":"excludeWalletsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"bool","name":"_add","type":"bool"}],"name":"excludeWalletsFromMaxWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxRecv","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"multiSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellfeeRate","outputs":[{"internalType":"uint256","name":"marketingFeeRate","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeRate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"setLaunchBegin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingTaxWallet","type":"address"}],"name":"setMarketingTaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapThreshold","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newWhiteListPeriod","type":"uint256"}],"name":"setWhiteListPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_marketingBuyFeeRate","type":"uint16"},{"internalType":"uint16","name":"_liquidityBuyFeeRate","type":"uint16"}],"name":"updateBuyFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRouter","type":"address"}],"name":"updateDexRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"updatePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_marketingSellFeeRate","type":"uint16"},{"internalType":"uint16","name":"_liquiditySellFeeRate","type":"uint16"}],"name":"updateSellFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"bool","name":"_add","type":"bool"}],"name":"updateWhitelists","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052620000126012600a62000584565b62000022906311e1a3006200059c565b60065560408051808201909152600a8152694658492053706f72747360b01b60208201526011906200005590826200065b565b5060408051808201909152600381526246584960e81b60208201526012906200007f90826200065b565b506103e86080523480156200009357600080fd5b5060405162002d1d38038062002d1d833981016040819052620000b69162000796565b620000c1336200041f565b602083015183518491606491620000d991906200083f565b11156200012a5760405162461bcd60e51b8152602060048201526025602482015260008051602062002cfd83398151915260448201526476616c756560d81b60648201526084015b60405180910390fd5b6020830151835184916064916200014291906200083f565b11156200018f5760405162461bcd60e51b8152602060048201526025602482015260008051602062002cfd83398151915260448201526476616c756560d81b606482015260840162000121565b82516001600160a01b0316620001e85760405162461bcd60e51b815260206004820181905260248201527f496e76616c6964204d61726b6574696e67546178526563762061646472657373604482015260640162000121565b60208301516001600160a01b0316620002445760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420646578526f75746572206164646472657373000000000000604482015260640162000121565b60008360400151116200029a5760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642077686974656c697374506572696f64000000000000000000604482015260640162000121565b8251600f80546001600160a01b03199081166001600160a01b039384161790915560208086015160138054909316931692909217905560408401516008558501516015819055855160148190553391620002f591906200083f565b600d55602085015160178190558551601681905562000314916200083f565b600e556001600160a01b0381811660008181526003602090815260408083208054600160ff199182168117909255600484528285208054821683179055308086528386208054831684179055600f549097168552828520805482168317905585855260058452828520805482168317905595845281842080549096168117909555600654938352939052918220805491929091620003b49084906200083f565b90915550506006546040519081526001600160a01b038216906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36127106006546200040f919062000855565b6009555062000878945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004c6578160001904821115620004aa57620004aa6200046f565b80851615620004b857918102915b93841c93908002906200048a565b509250929050565b600082620004df575060016200057e565b81620004ee575060006200057e565b8160018114620005075760028114620005125762000532565b60019150506200057e565b60ff8411156200052657620005266200046f565b50506001821b6200057e565b5060208310610133831016604e8410600b841016171562000557575081810a6200057e565b62000563838362000485565b80600019048211156200057a576200057a6200046f565b0290505b92915050565b60006200059560ff841683620004ce565b9392505050565b80820281158282048414176200057e576200057e6200046f565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005e157607f821691505b6020821081036200060257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200065657600081815260208120601f850160051c81016020861015620006315750805b601f850160051c820191505b8181101562000652578281556001016200063d565b5050505b505050565b81516001600160401b03811115620006775762000677620005b6565b6200068f81620006888454620005cc565b8462000608565b602080601f831160018114620006c75760008415620006ae5750858301515b600019600386901b1c1916600185901b17855562000652565b600085815260208120601f198616915b82811015620006f857888601518255948401946001909101908401620006d7565b5085821015620007175787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000604082840312156200073a57600080fd5b604080519081016001600160401b03811182821017156200075f576200075f620005b6565b604052825181526020928301519281019290925250919050565b80516001600160a01b03811681146200079157600080fd5b919050565b600080600083850360e0811215620007ad57600080fd5b620007b9868662000727565b9350620007ca866040870162000727565b92506060607f1982011215620007df57600080fd5b50604051606081016001600160401b0381118282101715620008055762000805620005b6565b604052620008166080860162000779565b81526200082660a0860162000779565b602082015260c094909401516040850152509093909250565b808201808211156200057e576200057e6200046f565b6000826200087357634e487b7160e01b600052601260045260246000fd5b500490565b60805161245b620008a26000396000818161055b0152818161193b0152611974015261245b6000f3fe60806040526004361061024a5760003560e01c8063790ca41311610139578063aa4bde28116100b6578063d82e49c81161007a578063d82e49c8146106f4578063dbe66ca014610709578063dd22a9de14610739578063dd62ed3e14610754578063f2fde38b1461079a578063f7712862146107ba57600080fd5b8063aa4bde2814610660578063b48e665e14610676578063bc063e1a1461068c578063bcac45d8146106b4578063d650b6f5146106d457600080fd5b806395d89b41116100fd57806395d89b41146105cb5780639d0014b1146105e0578063a4fd3e9914610600578063a8aa1b3114610620578063a9059cbb1461064057600080fd5b8063790ca41314610513578063794dca89146105295780637a458d7a146105495780637d99f9a41461057d5780638da5cb5b146105ad57600080fd5b8063256c2cd1116101c757806370a082311161018b57806370a082311461047257806370af439c146104a8578063714f75e0146104be578063715018a6146104de5780637653f01e146104f357600080fd5b8063256c2cd1146103e057806327a14fc21461040057806328b88eb114610420578063313ce5671461043657806345a1f81e1461045257600080fd5b8063095ea7b31161020e578063095ea7b31461032b57806318160ddd1461035b5780631b56bbf9146103705780631e7be2101461039057806323b872dd146103c057600080fd5b8063026e9ff2146102565780630445b6671461028b57806306fdde03146102af5780630758d924146102d157806308a580691461030957600080fd5b3661025157005b600080fd5b34801561026257600080fd5b50601454601554610271919082565b604080519283526020830191909152015b60405180910390f35b34801561029757600080fd5b506102a160095481565b604051908152602001610282565b3480156102bb57600080fd5b506102c46107da565b6040516102829190611e92565b3480156102dd57600080fd5b506013546102f1906001600160a01b031681565b6040516001600160a01b039091168152602001610282565b34801561031557600080fd5b50610329610324366004611ef7565b61086c565b005b34801561033757600080fd5b5061034b610346366004611f3f565b6108f0565b6040519015158152602001610282565b34801561036757600080fd5b506006546102a1565b34801561037c57600080fd5b5061032961038b366004611f6b565b610907565b34801561039c57600080fd5b5061034b6103ab366004611f6b565b60056020526000908152604090205460ff1681565b3480156103cc57600080fd5b5061034b6103db366004611f8f565b610a21565b3480156103ec57600080fd5b506103296103fb3660046120af565b610ab6565b34801561040c57600080fd5b5061032961041b366004612106565b610b88565b34801561042c57600080fd5b506102a1600d5481565b34801561044257600080fd5b5060405160128152602001610282565b34801561045e57600080fd5b5061032961046d366004611ef7565b610c11565b34801561047e57600080fd5b506102a161048d366004611f6b565b6001600160a01b031660009081526001602052604090205490565b3480156104b457600080fd5b506102a1600e5481565b3480156104ca57600080fd5b506103296104d9366004611f6b565b610c8c565b3480156104ea57600080fd5b50610329610d2f565b3480156104ff57600080fd5b50600f546102f1906001600160a01b031681565b34801561051f57600080fd5b506102a160075481565b34801561053557600080fd5b506103296105443660046120af565b610d65565b34801561055557600080fd5b506102a17f000000000000000000000000000000000000000000000000000000000000000081565b34801561058957600080fd5b5061034b610598366004611f6b565b60046020526000908152604090205460ff1681565b3480156105b957600080fd5b506000546001600160a01b03166102f1565b3480156105d757600080fd5b506102c4610e3a565b3480156105ec57600080fd5b506103296105fb366004612106565b610e49565b34801561060c57600080fd5b5061032961061b366004611f6b565b610ec0565b34801561062c57600080fd5b506010546102f1906001600160a01b031681565b34801561064c57600080fd5b5061034b61065b366004611f3f565b610f6d565b34801561066c57600080fd5b506102a1600a5481565b34801561068257600080fd5b506102a160085481565b34801561069857600080fd5b506106a1606481565b60405161ffff9091168152602001610282565b3480156106c057600080fd5b506103296106cf366004612106565b610f7a565b3480156106e057600080fd5b506103296106ef36600461211f565b610ff9565b34801561070057600080fd5b506103296111d4565b34801561071557600080fd5b5061034b610724366004611f6b565b60036020526000908152604090205460ff1681565b34801561074557600080fd5b50601654601754610271919082565b34801561076057600080fd5b506102a161076f3660046121da565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156107a657600080fd5b506103296107b5366004611f6b565b611247565b3480156107c657600080fd5b506103296107d53660046120af565b6112e2565b6060601180546107e990612208565b80601f016020809104026020016040519081016040528092919081815260200182805461081590612208565b80156108625780601f1061083757610100808354040283529160200191610862565b820191906000526020600020905b81548152906001019060200180831161084557829003601f168201915b5050505050905090565b6000546001600160a01b0316331461089f5760405162461bcd60e51b815260040161089690612242565b60405180910390fd5b60646108ab828461228d565b61ffff1611156108cd5760405162461bcd60e51b8152600401610896906122af565b61ffff80831660165581166017556108e5818361228d565b61ffff16600e555050565b60006108fd3384846113ae565b5060015b92915050565b6000546001600160a01b031633146109315760405162461bcd60e51b815260040161089690612242565b6001600160a01b03811661097e5760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642070616972206164647265737360601b6044820152606401610896565b6010546001600160a01b0316156109ce57601080546001600160a01b039081166000908152600460209081526040808320805460ff19908116909155945490931682526005905220805490911690555b601080546001600160a01b039092166001600160a01b0319909216821790556000908152600460209081526040808320805460ff1990811660019081179092556005909352922080549091169091179055565b6001600160a01b038316600090815260026020908152604080832033845290915281205482811015610a8c5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610896565b610aa08533610a9b86856122f4565b6113ae565b610aab8585856114a2565b506001949350505050565b6000546001600160a01b03163314610ae05760405162461bcd60e51b815260040161089690612242565b815180610b265760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206c656e67746820617272617960601b6044820152606401610896565b60005b81811015610b82578260036000868481518110610b4857610b48612307565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101610b29565b50505050565b6000546001600160a01b03163314610bb25760405162461bcd60e51b815260040161089690612242565b6103e8600654600a610bc4919061231d565b610bce9190612334565b811015610c0c5760405162461bcd60e51b815260206004820152600c60248201526b135a5b880c49481b1a5b5a5d60a21b6044820152606401610896565b600a55565b6000546001600160a01b03163314610c3b5760405162461bcd60e51b815260040161089690612242565b6064610c47828461228d565b61ffff161115610c695760405162461bcd60e51b8152600401610896906122af565b61ffff8083166014558116601555610c81818361228d565b61ffff16600d555050565b6000546001600160a01b03163314610cb65760405162461bcd60e51b815260040161089690612242565b6001600160a01b0381163b610d0d5760405162461bcd60e51b815260206004820152601960248201527f41646472657373206973206e6f74206120636f6e7472616374000000000000006044820152606401610896565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610d595760405162461bcd60e51b815260040161089690612242565b610d636000611873565b565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b815260040161089690612242565b815180610dde5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206163636f756e7473206c656e6774680000000000000000006044820152606401610896565b60005b81811015610b82578260056000868481518110610e0057610e00612307565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101610de1565b6060601280546107e990612208565b6000546001600160a01b03163314610e735760405162461bcd60e51b815260040161089690612242565b60008111610ebb5760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a59081cddd85c151a1c995cda1bdb19605a1b6044820152606401610896565b600955565b6000546001600160a01b03163314610eea5760405162461bcd60e51b815260040161089690612242565b6001600160a01b038116610f4b5760405162461bcd60e51b815260206004820152602260248201527f496e76616c6964206d61726b6574696e6754617857616c6c6574206164647265604482015261737360f01b6064820152608401610896565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b60006108fd3384846114a2565b6000546001600160a01b03163314610fa45760405162461bcd60e51b815260040161089690612242565b60008111610ff45760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642077686974656c697374506572696f640000000000000000006044820152606401610896565b600855565b6000546001600160a01b031633146110235760405162461bcd60e51b815260040161089690612242565b805182511461106c5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840c2e4e4c2f2e640d8cadccee8d605b1b6044820152606401610896565b6000805b83518110156111235760006001600160a01b031684828151811061109657611096612307565b60200260200101516001600160a01b0316036110f45760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420726563697069656e742061646472657373000000000000006044820152606401610896565b82818151811061110657611106612307565b6020026020010151826111199190612356565b9150600101611070565b50336000908152600160205260409020548111156111835760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420656e6f7567682062616c616e636520746f2073656e640000000000006044820152606401610896565b60005b8351811015610b82576111cc338583815181106111a5576111a5612307565b60200260200101518584815181106111bf576111bf612307565b60200260200101516114a2565b600101611186565b6000546001600160a01b031633146111fe5760405162461bcd60e51b815260040161089690612242565b600754156112415760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b6044820152606401610896565b42600755565b6000546001600160a01b031633146112715760405162461bcd60e51b815260040161089690612242565b6001600160a01b0381166112d65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610896565b6112df81611873565b50565b6000546001600160a01b0316331461130c5760405162461bcd60e51b815260040161089690612242565b8151806113525760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206c656e67746820617272617960601b6044820152606401610896565b60005b81811015610b8257826004600086848151811061137457611374612307565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101611355565b6001600160a01b0383166113f85760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610896565b6001600160a01b0382166114405760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610896565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166114f85760405162461bcd60e51b815260206004820152601a60248201527f5472616e736665722066726f6d207a65726f20616464726573730000000000006044820152606401610896565b6001600160a01b03821661154e5760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220746f207a65726f206164647265737300000000000000006044820152606401610896565b6000811161158c5760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b6044820152606401610896565b6001600160a01b0383166000908152600160205260409020548111156115f45760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f75676820616d6f756e7420746f207472616e736665720000006044820152606401610896565b6000546001600160a01b0384811691161480611611575060075415155b6116505760405162461bcd60e51b815260206004820152601060248201526f139bdd081b185d5b98da1959081e595d60821b6044820152606401610896565b6008546007546116609190612356565b4210156116c0576001600160a01b03821660009081526005602052604090205460ff166116c05760405162461bcd60e51b815260206004820152600e60248201526d1bdb9b1e481dda1a5d195b1a5cdd60921b6044820152606401610896565b600a5415611760576001600160a01b03821660009081526004602052604090205460ff16806117145750600a546001600160a01b038316600090815260016020526040902054611711908390612356565b11155b6117605760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746f206d617857616c6c6574416d6f756e740000000000006044820152606401610896565b601054600160a01b900460ff168061179057506001600160a01b03821660009081526003602052604090205460ff165b806117b357506001600160a01b03831660009081526003602052604090205460ff165b15611808576117c38383836118c3565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161149591815260200190565b6010546001600160a01b0316156117c3576010546001600160a01b039081169084160361183f5761183a838383611922565b6117c3565b611847611a89565b6010546001600160a01b03908116908316036118685761183a838383611dd9565b6117c38383836118c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316600090815260016020526040812080548392906118eb9084906122f4565b90915550506001600160a01b03821660009081526001602052604081208054839290611918908490612356565b9091555050505050565b6000806119326014546015549091565b909250905060007f0000000000000000000000000000000000000000000000000000000000000000611964848661231d565b61196e9190612334565b905060007f000000000000000000000000000000000000000000000000000000000000000061199d848761231d565b6119a79190612334565b905060006119b58284612356565b6119bf90876122f4565b6001600160a01b0389166000908152600160205260408120805492935088929091906119ec9084906122f4565b90915550506001600160a01b03871660009081526001602052604081208054839290611a19908490612356565b90915550611a2990508284612356565b3060009081526001602052604081208054909190611a48908490612356565b9250508190555081600b6000828254611a619190612356565b9250508190555082600c6000828254611a7a9190612356565b90915550505050505050505050565b6000600c54600b54611a9b9190612356565b90506009548111611aa95750565b6010805460ff60a01b1916600160a01b179055600b54600090611ace90600290612334565b90506000611adc82846122f4565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611b1657611b16612307565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b939190612369565b81600181518110611ba657611ba6612307565b6001600160a01b039283166020918202929092010152601354611bcc91309116846113ae565b6013546001600160a01b031663791ac9478360008430611bee42610708612356565b6040518663ffffffff1660e01b8152600401611c0e959493929190612386565b600060405180830381600087803b158015611c2857600080fd5b505af1158015611c3c573d6000803e3d6000fd5b50479250505080611c8f5760405162461bcd60e51b815260206004820152601c60248201527f546f6f20736d616c6c20746f6b656e20666f7220737761704261636b000000006044820152606401610896565b600083611c9c868461231d565b611ca69190612334565b90508015611da457600085600b54611cbe91906122f4565b601354909150611cd99030906001600160a01b0316836113ae565b6013546001600160a01b031663f305d71983308460008061dead611cff42610708612356565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af1158015611d6c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d9191906123f7565b5050508183611da091906122f4565b9250505b600f54611dba906001600160a01b031683611de9565b50506000600b819055600c5550506010805460ff60a01b191690555050565b6000806119326016546017549091565b80600003611df5575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611e42576040519150601f19603f3d011682016040523d82523d6000602084013e611e47565b606091505b5050905080611e8d5760405162461bcd60e51b815260206004820152601260248201527114d95b991a5b99c81155120819985a5b195960721b6044820152606401610896565b505050565b600060208083528351808285015260005b81811015611ebf57858101830151858201604001528201611ea3565b506000604082860101526040601f19601f8301168501019250505092915050565b803561ffff81168114611ef257600080fd5b919050565b60008060408385031215611f0a57600080fd5b611f1383611ee0565b9150611f2160208401611ee0565b90509250929050565b6001600160a01b03811681146112df57600080fd5b60008060408385031215611f5257600080fd5b8235611f5d81611f2a565b946020939093013593505050565b600060208284031215611f7d57600080fd5b8135611f8881611f2a565b9392505050565b600080600060608486031215611fa457600080fd5b8335611faf81611f2a565b92506020840135611fbf81611f2a565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561200f5761200f611fd0565b604052919050565b600067ffffffffffffffff82111561203157612031611fd0565b5060051b60200190565b600082601f83011261204c57600080fd5b8135602061206161205c83612017565b611fe6565b82815260059290921b8401810191818101908684111561208057600080fd5b8286015b848110156120a457803561209781611f2a565b8352918301918301612084565b509695505050505050565b600080604083850312156120c257600080fd5b823567ffffffffffffffff8111156120d957600080fd5b6120e58582860161203b565b925050602083013580151581146120fb57600080fd5b809150509250929050565b60006020828403121561211857600080fd5b5035919050565b6000806040838503121561213257600080fd5b823567ffffffffffffffff8082111561214a57600080fd5b6121568683870161203b565b935060209150818501358181111561216d57600080fd5b85019050601f8101861361218057600080fd5b803561218e61205c82612017565b81815260059190911b820183019083810190888311156121ad57600080fd5b928401925b828410156121cb578335825292840192908401906121b2565b80955050505050509250929050565b600080604083850312156121ed57600080fd5b82356121f881611f2a565b915060208301356120fb81611f2a565b600181811c9082168061221c57607f821691505b60208210810361223c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b61ffff8181168382160190808211156122a8576122a8612277565b5092915050565b60208082526025908201527f4d617820526174652065786365656465642c20706c65617365206c6f7765722060408201526476616c756560d81b606082015260800190565b8181038181111561090157610901612277565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761090157610901612277565b60008261235157634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561090157610901612277565b60006020828403121561237b57600080fd5b8151611f8881611f2a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123d65784516001600160a01b0316835293830193918301916001016123b1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561240c57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220efee4ba0b843bc47ec0f767576171cec1953273c20d1f3be7b446402395fcffb64736f6c634300081300334d617820526174652065786365656465642c20706c65617365206c6f776572200000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afc94420451fca019dc97100d14abcb8704d6e650000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000000000003c

Deployed Bytecode

0x60806040526004361061024a5760003560e01c8063790ca41311610139578063aa4bde28116100b6578063d82e49c81161007a578063d82e49c8146106f4578063dbe66ca014610709578063dd22a9de14610739578063dd62ed3e14610754578063f2fde38b1461079a578063f7712862146107ba57600080fd5b8063aa4bde2814610660578063b48e665e14610676578063bc063e1a1461068c578063bcac45d8146106b4578063d650b6f5146106d457600080fd5b806395d89b41116100fd57806395d89b41146105cb5780639d0014b1146105e0578063a4fd3e9914610600578063a8aa1b3114610620578063a9059cbb1461064057600080fd5b8063790ca41314610513578063794dca89146105295780637a458d7a146105495780637d99f9a41461057d5780638da5cb5b146105ad57600080fd5b8063256c2cd1116101c757806370a082311161018b57806370a082311461047257806370af439c146104a8578063714f75e0146104be578063715018a6146104de5780637653f01e146104f357600080fd5b8063256c2cd1146103e057806327a14fc21461040057806328b88eb114610420578063313ce5671461043657806345a1f81e1461045257600080fd5b8063095ea7b31161020e578063095ea7b31461032b57806318160ddd1461035b5780631b56bbf9146103705780631e7be2101461039057806323b872dd146103c057600080fd5b8063026e9ff2146102565780630445b6671461028b57806306fdde03146102af5780630758d924146102d157806308a580691461030957600080fd5b3661025157005b600080fd5b34801561026257600080fd5b50601454601554610271919082565b604080519283526020830191909152015b60405180910390f35b34801561029757600080fd5b506102a160095481565b604051908152602001610282565b3480156102bb57600080fd5b506102c46107da565b6040516102829190611e92565b3480156102dd57600080fd5b506013546102f1906001600160a01b031681565b6040516001600160a01b039091168152602001610282565b34801561031557600080fd5b50610329610324366004611ef7565b61086c565b005b34801561033757600080fd5b5061034b610346366004611f3f565b6108f0565b6040519015158152602001610282565b34801561036757600080fd5b506006546102a1565b34801561037c57600080fd5b5061032961038b366004611f6b565b610907565b34801561039c57600080fd5b5061034b6103ab366004611f6b565b60056020526000908152604090205460ff1681565b3480156103cc57600080fd5b5061034b6103db366004611f8f565b610a21565b3480156103ec57600080fd5b506103296103fb3660046120af565b610ab6565b34801561040c57600080fd5b5061032961041b366004612106565b610b88565b34801561042c57600080fd5b506102a1600d5481565b34801561044257600080fd5b5060405160128152602001610282565b34801561045e57600080fd5b5061032961046d366004611ef7565b610c11565b34801561047e57600080fd5b506102a161048d366004611f6b565b6001600160a01b031660009081526001602052604090205490565b3480156104b457600080fd5b506102a1600e5481565b3480156104ca57600080fd5b506103296104d9366004611f6b565b610c8c565b3480156104ea57600080fd5b50610329610d2f565b3480156104ff57600080fd5b50600f546102f1906001600160a01b031681565b34801561051f57600080fd5b506102a160075481565b34801561053557600080fd5b506103296105443660046120af565b610d65565b34801561055557600080fd5b506102a17f00000000000000000000000000000000000000000000000000000000000003e881565b34801561058957600080fd5b5061034b610598366004611f6b565b60046020526000908152604090205460ff1681565b3480156105b957600080fd5b506000546001600160a01b03166102f1565b3480156105d757600080fd5b506102c4610e3a565b3480156105ec57600080fd5b506103296105fb366004612106565b610e49565b34801561060c57600080fd5b5061032961061b366004611f6b565b610ec0565b34801561062c57600080fd5b506010546102f1906001600160a01b031681565b34801561064c57600080fd5b5061034b61065b366004611f3f565b610f6d565b34801561066c57600080fd5b506102a1600a5481565b34801561068257600080fd5b506102a160085481565b34801561069857600080fd5b506106a1606481565b60405161ffff9091168152602001610282565b3480156106c057600080fd5b506103296106cf366004612106565b610f7a565b3480156106e057600080fd5b506103296106ef36600461211f565b610ff9565b34801561070057600080fd5b506103296111d4565b34801561071557600080fd5b5061034b610724366004611f6b565b60036020526000908152604090205460ff1681565b34801561074557600080fd5b50601654601754610271919082565b34801561076057600080fd5b506102a161076f3660046121da565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156107a657600080fd5b506103296107b5366004611f6b565b611247565b3480156107c657600080fd5b506103296107d53660046120af565b6112e2565b6060601180546107e990612208565b80601f016020809104026020016040519081016040528092919081815260200182805461081590612208565b80156108625780601f1061083757610100808354040283529160200191610862565b820191906000526020600020905b81548152906001019060200180831161084557829003601f168201915b5050505050905090565b6000546001600160a01b0316331461089f5760405162461bcd60e51b815260040161089690612242565b60405180910390fd5b60646108ab828461228d565b61ffff1611156108cd5760405162461bcd60e51b8152600401610896906122af565b61ffff80831660165581166017556108e5818361228d565b61ffff16600e555050565b60006108fd3384846113ae565b5060015b92915050565b6000546001600160a01b031633146109315760405162461bcd60e51b815260040161089690612242565b6001600160a01b03811661097e5760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642070616972206164647265737360601b6044820152606401610896565b6010546001600160a01b0316156109ce57601080546001600160a01b039081166000908152600460209081526040808320805460ff19908116909155945490931682526005905220805490911690555b601080546001600160a01b039092166001600160a01b0319909216821790556000908152600460209081526040808320805460ff1990811660019081179092556005909352922080549091169091179055565b6001600160a01b038316600090815260026020908152604080832033845290915281205482811015610a8c5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610896565b610aa08533610a9b86856122f4565b6113ae565b610aab8585856114a2565b506001949350505050565b6000546001600160a01b03163314610ae05760405162461bcd60e51b815260040161089690612242565b815180610b265760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206c656e67746820617272617960601b6044820152606401610896565b60005b81811015610b82578260036000868481518110610b4857610b48612307565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101610b29565b50505050565b6000546001600160a01b03163314610bb25760405162461bcd60e51b815260040161089690612242565b6103e8600654600a610bc4919061231d565b610bce9190612334565b811015610c0c5760405162461bcd60e51b815260206004820152600c60248201526b135a5b880c49481b1a5b5a5d60a21b6044820152606401610896565b600a55565b6000546001600160a01b03163314610c3b5760405162461bcd60e51b815260040161089690612242565b6064610c47828461228d565b61ffff161115610c695760405162461bcd60e51b8152600401610896906122af565b61ffff8083166014558116601555610c81818361228d565b61ffff16600d555050565b6000546001600160a01b03163314610cb65760405162461bcd60e51b815260040161089690612242565b6001600160a01b0381163b610d0d5760405162461bcd60e51b815260206004820152601960248201527f41646472657373206973206e6f74206120636f6e7472616374000000000000006044820152606401610896565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610d595760405162461bcd60e51b815260040161089690612242565b610d636000611873565b565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b815260040161089690612242565b815180610dde5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206163636f756e7473206c656e6774680000000000000000006044820152606401610896565b60005b81811015610b82578260056000868481518110610e0057610e00612307565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101610de1565b6060601280546107e990612208565b6000546001600160a01b03163314610e735760405162461bcd60e51b815260040161089690612242565b60008111610ebb5760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a59081cddd85c151a1c995cda1bdb19605a1b6044820152606401610896565b600955565b6000546001600160a01b03163314610eea5760405162461bcd60e51b815260040161089690612242565b6001600160a01b038116610f4b5760405162461bcd60e51b815260206004820152602260248201527f496e76616c6964206d61726b6574696e6754617857616c6c6574206164647265604482015261737360f01b6064820152608401610896565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b60006108fd3384846114a2565b6000546001600160a01b03163314610fa45760405162461bcd60e51b815260040161089690612242565b60008111610ff45760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642077686974656c697374506572696f640000000000000000006044820152606401610896565b600855565b6000546001600160a01b031633146110235760405162461bcd60e51b815260040161089690612242565b805182511461106c5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840c2e4e4c2f2e640d8cadccee8d605b1b6044820152606401610896565b6000805b83518110156111235760006001600160a01b031684828151811061109657611096612307565b60200260200101516001600160a01b0316036110f45760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420726563697069656e742061646472657373000000000000006044820152606401610896565b82818151811061110657611106612307565b6020026020010151826111199190612356565b9150600101611070565b50336000908152600160205260409020548111156111835760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420656e6f7567682062616c616e636520746f2073656e640000000000006044820152606401610896565b60005b8351811015610b82576111cc338583815181106111a5576111a5612307565b60200260200101518584815181106111bf576111bf612307565b60200260200101516114a2565b600101611186565b6000546001600160a01b031633146111fe5760405162461bcd60e51b815260040161089690612242565b600754156112415760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b6044820152606401610896565b42600755565b6000546001600160a01b031633146112715760405162461bcd60e51b815260040161089690612242565b6001600160a01b0381166112d65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610896565b6112df81611873565b50565b6000546001600160a01b0316331461130c5760405162461bcd60e51b815260040161089690612242565b8151806113525760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206c656e67746820617272617960601b6044820152606401610896565b60005b81811015610b8257826004600086848151811061137457611374612307565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101611355565b6001600160a01b0383166113f85760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610896565b6001600160a01b0382166114405760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610896565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166114f85760405162461bcd60e51b815260206004820152601a60248201527f5472616e736665722066726f6d207a65726f20616464726573730000000000006044820152606401610896565b6001600160a01b03821661154e5760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220746f207a65726f206164647265737300000000000000006044820152606401610896565b6000811161158c5760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b6044820152606401610896565b6001600160a01b0383166000908152600160205260409020548111156115f45760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f75676820616d6f756e7420746f207472616e736665720000006044820152606401610896565b6000546001600160a01b0384811691161480611611575060075415155b6116505760405162461bcd60e51b815260206004820152601060248201526f139bdd081b185d5b98da1959081e595d60821b6044820152606401610896565b6008546007546116609190612356565b4210156116c0576001600160a01b03821660009081526005602052604090205460ff166116c05760405162461bcd60e51b815260206004820152600e60248201526d1bdb9b1e481dda1a5d195b1a5cdd60921b6044820152606401610896565b600a5415611760576001600160a01b03821660009081526004602052604090205460ff16806117145750600a546001600160a01b038316600090815260016020526040902054611711908390612356565b11155b6117605760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746f206d617857616c6c6574416d6f756e740000000000006044820152606401610896565b601054600160a01b900460ff168061179057506001600160a01b03821660009081526003602052604090205460ff165b806117b357506001600160a01b03831660009081526003602052604090205460ff165b15611808576117c38383836118c3565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161149591815260200190565b6010546001600160a01b0316156117c3576010546001600160a01b039081169084160361183f5761183a838383611922565b6117c3565b611847611a89565b6010546001600160a01b03908116908316036118685761183a838383611dd9565b6117c38383836118c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316600090815260016020526040812080548392906118eb9084906122f4565b90915550506001600160a01b03821660009081526001602052604081208054839290611918908490612356565b9091555050505050565b6000806119326014546015549091565b909250905060007f00000000000000000000000000000000000000000000000000000000000003e8611964848661231d565b61196e9190612334565b905060007f00000000000000000000000000000000000000000000000000000000000003e861199d848761231d565b6119a79190612334565b905060006119b58284612356565b6119bf90876122f4565b6001600160a01b0389166000908152600160205260408120805492935088929091906119ec9084906122f4565b90915550506001600160a01b03871660009081526001602052604081208054839290611a19908490612356565b90915550611a2990508284612356565b3060009081526001602052604081208054909190611a48908490612356565b9250508190555081600b6000828254611a619190612356565b9250508190555082600c6000828254611a7a9190612356565b90915550505050505050505050565b6000600c54600b54611a9b9190612356565b90506009548111611aa95750565b6010805460ff60a01b1916600160a01b179055600b54600090611ace90600290612334565b90506000611adc82846122f4565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611b1657611b16612307565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b939190612369565b81600181518110611ba657611ba6612307565b6001600160a01b039283166020918202929092010152601354611bcc91309116846113ae565b6013546001600160a01b031663791ac9478360008430611bee42610708612356565b6040518663ffffffff1660e01b8152600401611c0e959493929190612386565b600060405180830381600087803b158015611c2857600080fd5b505af1158015611c3c573d6000803e3d6000fd5b50479250505080611c8f5760405162461bcd60e51b815260206004820152601c60248201527f546f6f20736d616c6c20746f6b656e20666f7220737761704261636b000000006044820152606401610896565b600083611c9c868461231d565b611ca69190612334565b90508015611da457600085600b54611cbe91906122f4565b601354909150611cd99030906001600160a01b0316836113ae565b6013546001600160a01b031663f305d71983308460008061dead611cff42610708612356565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af1158015611d6c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d9191906123f7565b5050508183611da091906122f4565b9250505b600f54611dba906001600160a01b031683611de9565b50506000600b819055600c5550506010805460ff60a01b191690555050565b6000806119326016546017549091565b80600003611df5575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611e42576040519150601f19603f3d011682016040523d82523d6000602084013e611e47565b606091505b5050905080611e8d5760405162461bcd60e51b815260206004820152601260248201527114d95b991a5b99c81155120819985a5b195960721b6044820152606401610896565b505050565b600060208083528351808285015260005b81811015611ebf57858101830151858201604001528201611ea3565b506000604082860101526040601f19601f8301168501019250505092915050565b803561ffff81168114611ef257600080fd5b919050565b60008060408385031215611f0a57600080fd5b611f1383611ee0565b9150611f2160208401611ee0565b90509250929050565b6001600160a01b03811681146112df57600080fd5b60008060408385031215611f5257600080fd5b8235611f5d81611f2a565b946020939093013593505050565b600060208284031215611f7d57600080fd5b8135611f8881611f2a565b9392505050565b600080600060608486031215611fa457600080fd5b8335611faf81611f2a565b92506020840135611fbf81611f2a565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561200f5761200f611fd0565b604052919050565b600067ffffffffffffffff82111561203157612031611fd0565b5060051b60200190565b600082601f83011261204c57600080fd5b8135602061206161205c83612017565b611fe6565b82815260059290921b8401810191818101908684111561208057600080fd5b8286015b848110156120a457803561209781611f2a565b8352918301918301612084565b509695505050505050565b600080604083850312156120c257600080fd5b823567ffffffffffffffff8111156120d957600080fd5b6120e58582860161203b565b925050602083013580151581146120fb57600080fd5b809150509250929050565b60006020828403121561211857600080fd5b5035919050565b6000806040838503121561213257600080fd5b823567ffffffffffffffff8082111561214a57600080fd5b6121568683870161203b565b935060209150818501358181111561216d57600080fd5b85019050601f8101861361218057600080fd5b803561218e61205c82612017565b81815260059190911b820183019083810190888311156121ad57600080fd5b928401925b828410156121cb578335825292840192908401906121b2565b80955050505050509250929050565b600080604083850312156121ed57600080fd5b82356121f881611f2a565b915060208301356120fb81611f2a565b600181811c9082168061221c57607f821691505b60208210810361223c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b61ffff8181168382160190808211156122a8576122a8612277565b5092915050565b60208082526025908201527f4d617820526174652065786365656465642c20706c65617365206c6f7765722060408201526476616c756560d81b606082015260800190565b8181038181111561090157610901612277565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761090157610901612277565b60008261235157634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561090157610901612277565b60006020828403121561237b57600080fd5b8151611f8881611f2a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123d65784516001600160a01b0316835293830193918301916001016123b1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561240c57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220efee4ba0b843bc47ec0f767576171cec1953273c20d1f3be7b446402395fcffb64736f6c63430008130033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afc94420451fca019dc97100d14abcb8704d6e650000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000000000003c

-----Decoded View---------------
Arg [0] : _buyfeeRate (tuple):
Arg [1] : marketingFeeRate (uint256): 20
Arg [2] : liquidityFeeRate (uint256): 0

Arg [1] : _sellfeeRate (tuple):
Arg [1] : marketingFeeRate (uint256): 20
Arg [2] : liquidityFeeRate (uint256): 0

Arg [2] : _param (tuple):
Arg [1] : marketingTaxRecv (address): 0xafc94420451Fca019dC97100D14AbCb8704D6e65
Arg [2] : dexRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [3] : whitelistPeriod (uint256): 60


-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 000000000000000000000000afc94420451fca019dc97100d14abcb8704d6e65
Arg [5] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [6] : 000000000000000000000000000000000000000000000000000000000000003c


Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

The $FXI token serves as your key to the FX1 community. Acquire $FXI to access platform services, hold it for exclusive benefits, or stake it for APY yield.

Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.