BNB Price: $642.06 (+1.98%)
 

Overview

Max Total Supply

2,100,000,000,000,000MiniBTC

Holders

14,663

Market

Price

$0.00 @ 0.000000 BNB

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
300,000 MiniBTC

Value
$0.00
0xD1513A1a8d9692A917d204Ad610BBb957186E9E1
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
MiniBtc

Compiler Version
v0.8.30+commit.73712a01

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.30;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";

contract MiniBtc is ERC20, Ownable, ReentrancyGuard {
    // 防止BSCScan自动匹配的唯一标识
    string private constant _CONTRACT_ID = "MiniBtc_v1_20241213_guyi";
    
    address public teamWallet;
    address public lpRewardWallet;
    address public communityWallet;
    address public pancakePair;
    address public pancakeRouter; // 可选:Router 地址(识别 add/remove liquidity)
    IERC20 public usdt;

    // 卖出总税率 6% (以 1e18 为基准表示比例)
    uint256 public SELL_FEE = 6e16; // 6%
    // 分配比例(相对于 SELL_FEE)
    // 按你的要求:技术团队 1%,AMM 地址 3%,运营 2%
    uint256 public TEAM_FEE_RATIO = 1e16; // 1%
    uint256 public LP_FEE_RATIO = 3e16; // 3% -> 将优先发到 pancakePair(AMM),若未设置则发到 lpRewardWallet
    uint256 public COMMUNITY_FEE_RATIO = 2e16; // 2%

    // 部署后锁定一段时间,期间禁止 mint(原注释说 30 天)
    uint256 public constant MINT_LOCK_PERIOD = 30 days;
    uint256 public mintLockTime; // 自动锁定的时间戳(部署后到此时间之前禁止 mint)

    // 裂变相关
    bool public fissionEnabled = true;
    uint256 public constant FISSION_PER_ADDRESS = 1e14; // 0.0001 * 1e18 = 1e14 (18 decimals)
    // 排除裂变的地址(比如合约、fee 钱包、pair、router)
    mapping(address => bool) public fissionExcluded;

    // 新增:受信任合约白名单(对 anti-snipe 检查的显式豁免)
    mapping(address => bool) public trustedContracts;
    event TrustedContractSet(address indexed account, bool trusted);

    // 买币白名单与开关(保留原有白名单机制)
    mapping(address => bool) public buyWhitelist;
    bool public buyEnabled = false;

    // 新增:全局开关——是否允许普通用户买入(默认允许)
    // 当 buysAllowed == false 时,只有白名单地址或受信任合约可以买入
    bool public buysAllowed = true;
    event BuysAllowedUpdated(bool allowed);

    // 防止重复随机撞击或回放的本地 nonce
    uint256 private fissionNonce;

    // ========== Anti-snipe / Anti-bot ==========
    bool public tradingEnabled; // 交易是否已经正式开启(由 owner 开启)
    uint256 public launchBlock; // 开启交易时的区块号
    uint256 public antiSnipeBlocks = 3; // 启动后多少个区块视为防抢购期(可配置)

    mapping(address => bool) public blacklist; // 黑名单:禁止转出/卖出等
    mapping(address => uint256) public lastBuyBlock; // 上次买入的区块,用于冷却

    uint256 public maxBuyAmount; // 单笔最大买入(0 表示不限制)
    uint256 public maxWalletAmount; // 单地址持币上限(0 表示不限制)
    uint256 public cooldownBlocks = 1; // 同一地址在 cooldownBlocks 内禁止再次买入(默认 1 区块,即同区块禁止重复买)

    // ========== Events ==========
    event FeeDistributed(
        address indexed sender,
        uint256 totalFee,
        uint256 teamFee,
        uint256 ammFee,
        uint256 communityFee
    );
    event FissionSent(
        address indexed sender,
        address indexed randA,
        address indexed randB,
        uint256 amountPer
    );
    event PancakeRouterUpdated(
        address indexed oldRouter,
        address indexed newRouter
    );
    event PancakePairUpdated(address indexed oldPair, address indexed newPair);
    event FissionEnabledUpdated(bool enabled);
    event FissionExcludedSet(address indexed account, bool excluded);
    event BuyEnabledUpdated(bool enabled);
    event BuyWhitelistSet(address indexed account, bool allowed);

    event TradingEnabledUpdated(uint256 launchBlock);
    event AntiSnipeParamsUpdated(
        uint256 antiSnipeBlocks,
        uint256 maxBuyAmount,
        uint256 maxWalletAmount,
        uint256 cooldownBlocks
    );
    event Blacklisted(address indexed account, bool blacklisted);
    event MaxBuyUpdated(uint256 maxBuyAmount);
    event MaxWalletUpdated(uint256 maxWalletAmount);
    event CooldownBlocksUpdated(uint256 blocks);

    error ZeroAddress();
    error BuyDisabled();
    error InsufficientForFission();

    // ====== 这里设置为18位小数 ======
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    // constructor: 名称/符号固定为 "MiniBtca"/"MiniBtca",total supply = 2100万亿 (2,100,000,000,000,000 tokens),
    // 以 18 decimals 表示为 base units: 2_100_000_000_000_000 * 10**18
    constructor() ERC20("MiniBTC", "MiniBTC") Ownable() {
        // 预设核心钱包地址(写在合约内部)
        teamWallet = 0x4C6CD6DB700562E43e03Ec24117d230366666666; // 技术团队钱包
        lpRewardWallet = 0x874bFB571bAFA94B01994AF826b5CA6398e261fa; // 备用 LP/AMM 收款钱包(如未设置 pancakePair 则发到此地址)
        communityWallet = 0xB5f4FE35CF1748c57f7393312D35c106945A1a18; // 社区建设/运营钱包

        // 验证预设地址有效性
        if (
            teamWallet == address(0) ||
            lpRewardWallet == address(0) ||
            communityWallet == address(0)
        ) revert ZeroAddress();

        // 初始发行量为 2100万亿(2_100_000_000_000_000) tokens,按 18 小数位计入基础单位
        uint256 initialSupplyTokens = 2_100_000_000_000_000;
        uint256 initialSupply = initialSupplyTokens *
            (10 ** uint256(decimals()));
        _mint(owner(), initialSupply); // mint 给部署者 (owner)

        // 默认排除一些地址(裂变)
        fissionExcluded[address(this)] = true;
        fissionExcluded[teamWallet] = true;
        fissionExcluded[lpRewardWallet] = true;
        fissionExcluded[communityWallet] = true;

        // 默认参数
        tradingEnabled = false;
        antiSnipeBlocks = 3;
        maxBuyAmount = 0;
        maxWalletAmount = 0;
        cooldownBlocks = 1;

        // 初始化 mintLockTime(部署后的一段时间内禁止 mint)
        mintLockTime = block.timestamp + MINT_LOCK_PERIOD;
    }

    /**
     *  说明:
     *  - 我们不再 override ERC20._transfer(因为它在你的环境中非 virtual)。
     *  - 改为 override public 的 transfer 和 transferFrom(它们是 virtual 的),在这两个方法内部实现原先 _update 的全部逻辑。
     *  - 在需要把代币实际移动时调用 super._transfer(from,to,amount)。
     */

    function transfer(
        address to,
        uint256 amount
    ) public override nonReentrant returns (bool) {
        _transferWithLogic(_msgSender(), to, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public override nonReentrant returns (bool) {
        address spender = _msgSender();
        uint256 currentAllowance = allowance(from, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: transfer amount exceeds allowance"
            );
            _approve(from, spender, currentAllowance - amount);
        }
        _transferWithLogic(from, to, amount);
        return true;
    }

    // 公共逻辑集中在这里;这个函数不会被外部调用
    function _transferWithLogic(
        address from,
        address to,
        uint256 value
    ) internal {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        // 全局黑名单检查:黑名单地址不能进行转出操作(但对受信任合约豁免)
        if (blacklist[from] && !trustedContracts[from]) {
            revert("Address blacklisted");
        }

        // 1) 当有 pancakePair 并且来自 pair 的转账(可能是买入或移除流动性)
        if (
            pancakePair != address(0) && from == pancakePair && to != address(0)
        ) {
            // 允许 router 发起的移除流动性(保留)
            if (msg.sender == pancakeRouter) {
                super._transfer(from, to, value);
                return;
            }

            // 如果交易未开启,依然保留 buyEnabled + buyWhitelist 的老逻辑(用于预售/私募场景)
            if (!tradingEnabled) {
                if (buyEnabled && buyWhitelist[to]) {
                    super._transfer(from, to, value);
                    return;
                }
                revert BuyDisabled();
            }

            // 新增:全局 buysAllowed 开关(当关闭时,普通用户无法买入,白名单和受信任合约仍然可以买)
            if (!buysAllowed && !buyWhitelist[to] && !trustedContracts[to]) {
                revert("Buys disabled");
            }

            // tradingEnabled == true 时,执行防夹子逻辑
            // 如果接收者已被列入黑名单,则禁止买入(受信任合约豁免)
            if (blacklist[to] && !trustedContracts[to]) {
                revert("Recipient blacklisted");
            }

            // 冷却(同一地址在 cooldownBlocks 区块内禁止再次买入),对受信任合约豁免
            if (cooldownBlocks > 0 && !trustedContracts[to]) {
                uint256 last = lastBuyBlock[to];
                require(
                    block.number >= last + cooldownBlocks,
                    "Buy cooldown active"
                );
                lastBuyBlock[to] = block.number;
            }

            // 单笔最大买入限制(若设置),对受信任合约豁免
            if (maxBuyAmount > 0 && !trustedContracts[to]) {
                require(value <= maxBuyAmount, "Exceeds max buy amount");
            }

            // 钱包持币上限限制(若设置),对受信任合约豁免
            if (maxWalletAmount > 0 && !trustedContracts[to]) {
                require(
                    balanceOf(to) + value <= maxWalletAmount,
                    "Exceeds max wallet amount"
                );
            }

            // 在启动后的一段区块内视为抢购期:将非白名单买家自动标记为黑名单(禁售/禁转)
            if (block.number <= launchBlock + antiSnipeBlocks) {
                if (!buyWhitelist[to] && !trustedContracts[to]) {
                    blacklist[to] = true;
                    emit Blacklisted(to, true);
                    // 仍然允许此次买入(将资金锁定);如需直接 revert 可改为 revert
                }
            }

            // 正常进行买入,直接转账(买入不触发裂变/卖出手续费)
            super._transfer(from, to, value);
            return;
        }

        // 2) 发送到 pancakePair(可能是添加流动性或卖出)
        if (
            pancakePair != address(0) && to == pancakePair && from != address(0)
        ) {
            // 不再对 pancakeRouter 单独免税(避免 router 导致卖出免税漏洞)
            // 但允许任何用户/合约向 pair 添加流动性(会按常规逻辑处理:若为卖出场景会收取手续费)
            // 判断卖出并收取手续费(无论 msg.sender 是谁)
            // 如果卖家在黑名单中,禁止卖出(但对受信任合约豁免)
            if (blacklist[from] && !trustedContracts[from]) {
                revert("Seller blacklisted");
            }

            // 否则当作卖出,收取 SELL_FEE 并分配到各钱包(不触发裂变)
            uint256 totalFee = (value * SELL_FEE) / 1e18;
            uint256 transferAmount = value - totalFee;

            // 计算各部分
            uint256 teamFee = (totalFee * TEAM_FEE_RATIO) / SELL_FEE;
            uint256 ammFee = (totalFee * LP_FEE_RATIO) / SELL_FEE;
            uint256 communityFee = (totalFee * COMMUNITY_FEE_RATIO) / SELL_FEE;

            // 分发:team -> teamWallet
            if (teamFee > 0) super._transfer(from, teamWallet, teamFee);
            // AMM(优先发到 pancakePair,若未设置则发到 lpRewardWallet)
            if (ammFee > 0) {
                super._transfer(from, lpRewardWallet, ammFee);
            }
            // 运营/社区
            if (communityFee > 0)
                super._transfer(from, communityWallet, communityFee);

            super._transfer(from, to, transferAmount);

            emit FeeDistributed(from, totalFee, teamFee, ammFee, communityFee);
            return;
        }

        // 3) 其他普通转账(wallet -> wallet 等)
        // 如果裂变启用,且 from/to 未被排除,且转账金额足够支付裂变,两次裂变将被执行
        // 受信任合约自动视为排除(避免把代币裂变到伪随机地址或因不足而 revert)
        if (
            fissionEnabled &&
            !fissionExcluded[from] &&
            !fissionExcluded[to] &&
            !trustedContracts[from] &&
            !trustedContracts[to]
        ) {
            uint256 totalFission = FISSION_PER_ADDRESS * 2;
            if (value <= totalFission) {
                // 若不足以覆盖裂变则 revert;如需改为跳过裂变可修改此处逻辑
                revert InsufficientForFission();
            }

            // 生成两个伪随机地址并转账 FISSION_PER_ADDRESS 给他们(从发送者)
            fissionNonce++;
            address randA = _pseudoRandomAddress(from, to, value, fissionNonce);
            fissionNonce++;
            address randB = _pseudoRandomAddress(from, to, value, fissionNonce);

            bool sentA = false;
            bool sentB = false;

            if (randA != address(0)) {
                super._transfer(from, randA, FISSION_PER_ADDRESS);
                sentA = true;
            }
            if (randB != address(0)) {
                super._transfer(from, randB, FISSION_PER_ADDRESS);
                sentB = true;
            }

            emit FissionSent(from, randA, randB, FISSION_PER_ADDRESS);

            uint256 deducted = 0;
            if (sentA) deducted += FISSION_PER_ADDRESS;
            if (sentB) deducted += FISSION_PER_ADDRESS;

            uint256 remaining = value - deducted;
            super._transfer(from, to, remaining);
            return;
        }

        // 4) 不满足特殊条件,直接转账
        super._transfer(from, to, value);
    }

    /// @dev 伪随机地址生成(不可预测性受限,但用于产生地址)
    function _pseudoRandomAddress(
        address from,
        address to,
        uint256 value,
        uint256 nonce
    ) internal view returns (address) {
        // 注意:构造的地址通常没有私钥,收到的 token 将是不可找回的,除非恰好对应某个已有地址的私钥。
        bytes32 hash = keccak256(
            abi.encodePacked(
                block.timestamp,
                block.difficulty,
                from,
                to,
                value,
                nonce
            )
        );
        return address(uint160(uint256(hash)));
    }

    // 管理函数
    function setUsdtAddress(address _usdt) external onlyOwner {
        require(_usdt != address(0), "Zero address");
        usdt = IERC20(_usdt);
    }

    function setFeeWallets(
        address teamWallet_,
        address lpRewardWallet_,
        address communityWallet_
    ) external onlyOwner {
        if (
            teamWallet_ == address(0) ||
            lpRewardWallet_ == address(0) ||
            communityWallet_ == address(0)
        ) revert ZeroAddress();
        teamWallet = teamWallet_;
        lpRewardWallet = lpRewardWallet_;
        communityWallet = communityWallet_;
    }

    function setPancakePair(address pancakePair_) external onlyOwner {
        if (pancakePair_ == address(0)) revert ZeroAddress();
        address old = pancakePair;
        pancakePair = pancakePair_;
        emit PancakePairUpdated(old, pancakePair_);
    }

    /// @notice 设置 Pancake Router 地址(用于识别 add/remove liquidity 的调用者)
    function setPancakeRouter(address pancakeRouter_) external onlyOwner {
        if (pancakeRouter_ == address(0)) revert ZeroAddress();
        address old = pancakeRouter;
        pancakeRouter = pancakeRouter_;
        emit PancakeRouterUpdated(old, pancakeRouter_);
    }

    // 新增:控制是否允许普通用户买入(白名单和受信任合约绕过)
    function setBuysAllowed(bool allowed) external onlyOwner {
        buysAllowed = allowed;
        emit BuysAllowedUpdated(allowed);
    }

    // 裂变相关管理
    function setFissionEnabled(bool enabled) external onlyOwner {
        fissionEnabled = enabled;
        emit FissionEnabledUpdated(enabled);
    }

    function setFissionExcluded(
        address account,
        bool excluded
    ) external onlyOwner {
        require(account != address(0), "Zero address");
        fissionExcluded[account] = excluded;
        emit FissionExcludedSet(account, excluded);
    }

    // TRUSTED CONTRACTS 管理:用于给像 OneClickLP / farm / router 这类合约豁免 anti-snipe 检查
    function setTrustedContract(
        address account,
        bool trusted
    ) external onlyOwner {
        require(account != address(0), "Zero address");
        trustedContracts[account] = trusted;
        emit TrustedContractSet(account, trusted);
        // 同时把 trustedContracts 自动排除于裂变,避免代币被裂变到黑洞
        if (trusted) {
            fissionExcluded[account] = true;
            emit FissionExcludedSet(account, true);
        }
    }

    function isTrustedContract(address account) external view returns (bool) {
        return trustedContracts[account];
    }

    // 买币白名单管理
    function setBuyEnabled(bool enabled) external onlyOwner {
        buyEnabled = enabled;
        emit BuyEnabledUpdated(enabled);
    }

    function setBuyWhitelist(address account, bool allowed) external onlyOwner {
        require(account != address(0), "Zero address");
        buyWhitelist[account] = allowed;
        emit BuyWhitelistSet(account, allowed);
    }

    // ========== 核心功能2:更新手续费分配比例(仅Owner) ==========
    function setFeeRatio(
        uint256 newTeamRatio,
        uint256 newLpRatio,
        uint256 newCommunityRatio
    ) external onlyOwner {
        // 请确保 newTeamRatio + newLpRatio + newCommunityRatio == SELL_FEE 的数值(即总比例一致)
        TEAM_FEE_RATIO = newTeamRatio;
        LP_FEE_RATIO = newLpRatio;
        COMMUNITY_FEE_RATIO = newCommunityRatio;
    }

    function setSellFee(uint256 newSellFee) external onlyOwner {
        SELL_FEE = newSellFee;
    }

    // mint 只有在 lock 到期(部署后 lock 时间过去)后才允许执行
    function mint(address to, uint256 amount) external onlyOwner {
        require(
            block.timestamp >= mintLockTime,
            "Mint function locked until mintLockTime"
        );
        _mint(to, amount);
    }

    // 永久放弃所有权,调用后所有仅Owner功能将不可再使用
    function renounceOwnershipPermanently() external onlyOwner {
        _transferOwnership(address(0));
    }

    // ========== Anti-snipe / Anti-bot 管理 ==========
    /// @notice 由 owner 开启交易(记录 launchBlock),一旦开启将启用 tradingEnabled 的保护规则
    function enableTrading() external onlyOwner {
        require(!tradingEnabled, "Trading already enabled");
        tradingEnabled = true;
        launchBlock = block.number;
        emit TradingEnabledUpdated(launchBlock);
    }

    /// @notice 关闭交易(慎用)
    function disableTrading() external onlyOwner {
        tradingEnabled = false;
        emit TradingEnabledUpdated(0);
    }

    /// @notice 设置 anti-snipe 等参数
    function setAntiSnipeParams(
        uint256 antiBlocks,
        uint256 maxBuy,
        uint256 maxWallet,
        uint256 _cooldownBlocks
    ) external onlyOwner {
        antiSnipeBlocks = antiBlocks;
        maxBuyAmount = maxBuy;
        maxWalletAmount = maxWallet;
        cooldownBlocks = _cooldownBlocks;
        emit AntiSnipeParamsUpdated(
            antiBlocks,
            maxBuy,
            maxWallet,
            _cooldownBlocks
        );
    }

    function setMaxBuyAndWallet(
        uint256 maxBuy,
        uint256 maxWallet
    ) external onlyOwner {
        maxBuyAmount = maxBuy;
        maxWalletAmount = maxWallet;
        emit MaxBuyUpdated(maxBuy);
        emit MaxWalletUpdated(maxWallet);
    }

    function setCooldownBlocks(uint256 blocks_) external onlyOwner {
        cooldownBlocks = blocks_;
        emit CooldownBlocksUpdated(blocks_);
    }

    /// @notice 手动将地址加入/移出黑名单
    function setBlacklist(address account, bool flagged) external onlyOwner {
        require(account != address(0), "Zero address");
        blacklist[account] = flagged;
        emit Blacklisted(account, flagged);
    }

    /// @notice 查询地址是否被黑名单限制(便于外部调用)
    function isBlacklisted(address account) external view returns (bool) {
        return blacklist[account];
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

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

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

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

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

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

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC20.sol";

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.4) (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;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BuyDisabled","type":"error"},{"inputs":[],"name":"InsufficientForFission","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"antiSnipeBlocks","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxBuyAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxWalletAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cooldownBlocks","type":"uint256"}],"name":"AntiSnipeParamsUpdated","type":"event"},{"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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"Blacklisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"allowed","type":"bool"}],"name":"BuyWhitelistSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"allowed","type":"bool"}],"name":"BuysAllowedUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"CooldownBlocksUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"teamFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ammFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"communityFee","type":"uint256"}],"name":"FeeDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"FissionEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"FissionExcludedSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"randA","type":"address"},{"indexed":true,"internalType":"address","name":"randB","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountPer","type":"uint256"}],"name":"FissionSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxBuyAmount","type":"uint256"}],"name":"MaxBuyUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"MaxWalletUpdated","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":"oldPair","type":"address"},{"indexed":true,"internalType":"address","name":"newPair","type":"address"}],"name":"PancakePairUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldRouter","type":"address"},{"indexed":true,"internalType":"address","name":"newRouter","type":"address"}],"name":"PancakeRouterUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"launchBlock","type":"uint256"}],"name":"TradingEnabledUpdated","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"trusted","type":"bool"}],"name":"TrustedContractSet","type":"event"},{"inputs":[],"name":"COMMUNITY_FEE_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FISSION_PER_ADDRESS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LP_FEE_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_LOCK_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SELL_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TEAM_FEE_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiSnipeBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"buyWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buysAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"communityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fissionEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"fissionExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTrustedContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastBuyBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpRewardWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"pancakePair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnershipPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"antiBlocks","type":"uint256"},{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxWallet","type":"uint256"},{"internalType":"uint256","name":"_cooldownBlocks","type":"uint256"}],"name":"setAntiSnipeParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"flagged","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBuyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setBuyWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setBuysAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks_","type":"uint256"}],"name":"setCooldownBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTeamRatio","type":"uint256"},{"internalType":"uint256","name":"newLpRatio","type":"uint256"},{"internalType":"uint256","name":"newCommunityRatio","type":"uint256"}],"name":"setFeeRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"teamWallet_","type":"address"},{"internalType":"address","name":"lpRewardWallet_","type":"address"},{"internalType":"address","name":"communityWallet_","type":"address"}],"name":"setFeeWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setFissionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setFissionExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"setMaxBuyAndWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pancakePair_","type":"address"}],"name":"setPancakePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pancakeRouter_","type":"address"}],"name":"setPancakeRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSellFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"trusted","type":"bool"}],"name":"setTrustedContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_usdt","type":"address"}],"name":"setUsdtAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"trustedContracts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdt","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608060405266d529ae9e860000600d55662386f26fc10000600e55666a94d74f430000600f5566470de4df8200006010556012805460ff191660019081179091556016805461ffff19166101001790556003601a55601f5534801561006357600080fd5b506040805180820182526007808252664d696e6942544360c81b60208084018290528451808601909552918452908301529060036100a183826103c1565b5060046100ae82826103c1565b5050506100c76100c261020560201b60201c565b610209565b6001600655600780546001600160a01b0319908116734c6cd6db700562e43e03ec24117d2303666666661790915560088054821673874bfb571bafa94b01994af826b5ca6398e261fa1790556009805490911673b5f4fe35cf1748c57f7393312d35c106945a1a18179055660775f05a0740006000601261014c9060ff16600a61057e565b6101569083610591565b905061017361016d6005546001600160a01b031690565b8261025b565b306000908152601360205260408082208054600160ff1991821681179092556007546001600160a01b03908116855283852080548316841790556008548116855283852080548316841790556009541684529183208054831682179055601880549092169091556003601a55601d829055601e91909155601f556101fa62278d00426105a8565b601155506105bb9050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166102b55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546102c791906105a8565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061034d57607f821691505b60208210810361036d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561031e57806000526020600020601f840160051c8101602085101561039a5750805b601f840160051c820191505b818110156103ba57600081556001016103a6565b5050505050565b81516001600160401b038111156103da576103da610323565b6103ee816103e88454610339565b84610373565b6020601f821160018114610422576000831561040a5750848201515b600019600385901b1c1916600184901b1784556103ba565b600084815260208120601f198516915b828110156104525787850151825560209485019460019092019101610432565b50848210156104705786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b6001815b60018411156104d0578085048111156104b4576104b461047f565b60018416156104c257908102905b60019390931c928002610499565b935093915050565b6000826104e757506001610578565b816104f457506000610578565b816001811461050a576002811461051457610530565b6001915050610578565b60ff8411156105255761052561047f565b50506001821b610578565b5060208310610133831016604e8410600b8410161715610553575081810a610578565b6105606000198484610495565b80600019048211156105745761057461047f565b0290505b92915050565b600061058a83836104d8565b9392505050565b80820281158282048414176105785761057861047f565b808201808211156105785761057861047f565b61255d806105ca6000396000f3fe608060405234801561001057600080fd5b50600436106103c55760003560e01c80638a8c523c116101ff578063c77c70e01161011a578063e1817a8b116100ad578063f582d2931161007c578063f582d2931461080a578063f8316c9014610817578063f9f92be41461082a578063fe575a871461084d57600080fd5b8063e1817a8b146107b9578063e5919a4f146107cb578063eb241b2e146107ee578063f2fde38b146107f757600080fd5b8063d74d4d3e116100e9578063d74d4d3e14610780578063d93ddcef1461078a578063dd62ed3e14610793578063de84665d146107a657600080fd5b8063c77c70e014610744578063c8900c1b14610751578063d00efb2f14610764578063d6f154691461076d57600080fd5b8063a5b601be11610192578063b8c9d25c11610161578063b8c9d25c146106f8578063b90fb5a91461070b578063c21ebd071461071e578063c75748391461073157600080fd5b8063a5b601be146106b6578063a9059cbb146106c9578063aa4bde28146106dc578063b6fb0d64146106e557600080fd5b806393fea3f8116101ce57806393fea3f81461068957806395d89b411461069257806396daf89f1461069a578063a457c2d7146106a357600080fd5b80638a8c523c1461064a5780638b4cee08146106525780638da5cb5b1461066557806391f837a81461067657600080fd5b80634773a6a9116102ef5780635bf3a3151161028257806375bc50431161025157806375bc50431461061257806376482e9c1461061b57806386a156371461062e57806388e765ff1461064157600080fd5b80635bf3a3151461059a57806363bb7076146105c657806370a08231146105e9578063715018a6146104ba57600080fd5b806355fc9453116102be57806355fc94531461054457806359927044146105675780635a86d2e31461057a5780635be4d4421461058757600080fd5b80634773a6a91461050857806348d462b1146105115780634ada218b1461052457806353d173dd1461053157600080fd5b806318160ddd1161036757806334d2c0a31161033657806334d2c0a3146104ba57806337b28bfd146104c257806339509351146104e257806340c10f19146104f557600080fd5b806318160ddd1461046557806323b872dd1461046d5780632f48ab7d14610480578063313ce567146104ab57600080fd5b80630cb46b75116103a35780630cb46b751461042257806314626dc614610437578063153b0d1e1461044a57806317700f011461045d57600080fd5b806306fdde03146103ca578063095ea7b3146103e85780630baa9ed61461040b575b600080fd5b6103d2610879565b6040516103df9190612161565b60405180910390f35b6103fb6103f63660046121cb565b61090b565b60405190151581526020016103df565b610414601f5481565b6040519081526020016103df565b6104356104303660046121f5565b610925565b005b610435610445366004612210565b61097e565b610435610458366004612239565b6109c2565b610435610a50565b600254610414565b6103fb61047b36600461226c565b610a99565b600c54610493906001600160a01b031681565b6040516001600160a01b0390911681526020016103df565b604051601281526020016103df565b610435610b52565b6104146104d03660046121f5565b601c6020526000908152604090205481565b6103fb6104f03660046121cb565b610b66565b6104356105033660046121cb565b610b83565b610414600d5481565b61043561051f3660046122a9565b610bfb565b6018546103fb9060ff1681565b61043561053f3660046122ec565b610c8f565b6103fb6105523660046121f5565b60136020526000908152604090205460ff1681565b600754610493906001600160a01b031681565b6012546103fb9060ff1681565b610435610595366004612239565b610cd8565b6103fb6105a83660046121f5565b6001600160a01b031660009081526014602052604090205460ff1690565b6103fb6105d43660046121f5565b60156020526000908152604090205460ff1681565b6104146105f73660046121f5565b6001600160a01b031660009081526020819052604090205490565b610414600e5481565b610435610629366004612239565b610dbe565b61043561063c3660046122ec565b610e44565b610414601d5481565b610435610e95565b610435610660366004612210565b610f35565b6005546001600160a01b0316610493565b610435610684366004612307565b610f42565b61041460115481565b6103d2610fac565b610414600f5481565b6103fb6106b13660046121cb565b610fbb565b6104356106c43660046121f5565b611041565b6103fb6106d73660046121cb565b6110c2565b610414601e5481565b6104356106f3366004612239565b6110e4565b600a54610493906001600160a01b031681565b610435610719366004612339565b61116a565b600b54610493906001600160a01b031681565b600954610493906001600160a01b031681565b610414655af3107a400081565b61043561075f366004612365565b611180565b61041460195481565b61043561077b3660046122ec565b6111fc565b61041462278d0081565b61041460105481565b6104146107a1366004612387565b611245565b600854610493906001600160a01b031681565b6016546103fb90610100900460ff1681565b6103fb6107d93660046121f5565b60146020526000908152604090205460ff1681565b610414601a5481565b6104356108053660046121f5565b611270565b6016546103fb9060ff1681565b6104356108253660046121f5565b6112e9565b6103fb6108383660046121f5565b601b6020526000908152604090205460ff1681565b6103fb61085b3660046121f5565b6001600160a01b03166000908152601b602052604090205460ff1690565b606060038054610888906123b1565b80601f01602080910402602001604051908101604052809291908181526020018280546108b4906123b1565b80156109015780601f106108d657610100808354040283529160200191610901565b820191906000526020600020905b8154815290600101906020018083116108e457829003601f168201915b5050505050905090565b60003361091981858561136a565b60019150505b92915050565b61092d61148e565b6001600160a01b03811661095c5760405162461bcd60e51b8152600401610953906123eb565b60405180910390fd5b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b61098661148e565b601f8190556040518181527fb1e2f430dc5da940dc67b06611f06bd0cbc10e01bfd30db3db6e50e5938341c6906020015b60405180910390a150565b6109ca61148e565b6001600160a01b0382166109f05760405162461bcd60e51b8152600401610953906123eb565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527fcf3473b85df1594d47b6958f29a32bea0abff9dd68296f7bf33443646793cfd891015b60405180910390a25050565b610a5861148e565b6018805460ff19169055604051600081527f6d3472356b1ec46412b1ca10e0785ccf97029f8fbd60bb4c1c4ab1a66d639e06906020015b60405180910390a1565b6000610aa36114e8565b336000610ab08683611245565b90506000198114610b305783811015610b1c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610953565b610b308683610b2b8785612427565b61136a565b610b3b868686611541565b600192505050610b4b6001600655565b9392505050565b610b5a61148e565b610b646000611ec3565b565b600033610919818585610b798383611245565b610b2b919061243a565b610b8b61148e565b601154421015610bed5760405162461bcd60e51b815260206004820152602760248201527f4d696e742066756e6374696f6e206c6f636b656420756e74696c206d696e744c6044820152666f636b54696d6560c81b6064820152608401610953565b610bf78282611f15565b5050565b610c0361148e565b6001600160a01b0383161580610c2057506001600160a01b038216155b80610c3257506001600160a01b038116155b15610c505760405163d92e233d60e01b815260040160405180910390fd5b600780546001600160a01b039485166001600160a01b031991821617909155600880549385169382169390931790925560098054919093169116179055565b610c9761148e565b6012805460ff19168215159081179091556040519081527fe4deb9738ba3354ca53d9ea8c1eae37e672ac2fade2468b4b1f4da12853c466a906020016109b7565b610ce061148e565b6001600160a01b038216610d065760405162461bcd60e51b8152600401610953906123eb565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527fae9d0d04c9df66dd8db6150ec2206a0c5d02775a9633894adf7cdea765e18226910160405180910390a28015610bf7576001600160a01b038216600081815260136020908152604091829020805460ff1916600190811790915591519182527f1d29b450e3ee9a9b08ae53f201d60bc74c300cfc0502c01cf4c134ada36842639101610a44565b610dc661148e565b6001600160a01b038216610dec5760405162461bcd60e51b8152600401610953906123eb565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527f1d29b450e3ee9a9b08ae53f201d60bc74c300cfc0502c01cf4c134ada36842639101610a44565b610e4c61148e565b601680548215156101000261ff00199091161790556040517f0dd902887071a125360a70694a967b3d2a6805e6ceccde8427f18492ff60102b906109b790831515815260200190565b610e9d61148e565b60185460ff1615610ef05760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610953565b6018805460ff191660011790554360198190556040517f6d3472356b1ec46412b1ca10e0785ccf97029f8fbd60bb4c1c4ab1a66d639e0691610a8f9190815260200190565b610f3d61148e565b600d55565b610f4a61148e565b601a849055601d839055601e829055601f8190556040805185815260208101859052908101839052606081018290527ff09302f358dada5dab4c8ec58514ae23ebf5e041627913b282d72fc524140b839060800160405180910390a150505050565b606060048054610888906123b1565b60003381610fc98286611245565b9050838110156110295760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610953565b611036828686840361136a565b506001949350505050565b61104961148e565b6001600160a01b0381166110705760405163d92e233d60e01b815260040160405180910390fd5b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f9b0c3048787c13539ec50c0a007c2ddfc64fbbb685c0b18abb8c250cbfa5440190600090a35050565b60006110cc6114e8565b6110d7338484611541565b50600161091f6001600655565b6110ec61148e565b6001600160a01b0382166111125760405162461bcd60e51b8152600401610953906123eb565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fa0f24332c7d141c86c4d5e8803389f673e06b885f82a63bd29732d224ec665799101610a44565b61117261148e565b600e92909255600f55601055565b61118861148e565b601d829055601e8190556040518281527ffb72e27d53f87822df1c737cbe3061c70cf0f271ec9c9b993d6f4cb3da276d469060200160405180910390a16040518181527f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace9060200160405180910390a15050565b61120461148e565b6016805460ff19168215159081179091556040519081527f942be7435635e527bb73176697ed306a26e641a0520639b694d8d46c9a3270d1906020016109b7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61127861148e565b6001600160a01b0381166112dd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610953565b6112e681611ec3565b50565b6112f161148e565b6001600160a01b0381166113185760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f77eba40e44e9cdab153d4b12298db3378cf32be998a70ae85986c7f2e2df0fcc90600090a35050565b6001600160a01b0383166113cc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610953565b6001600160a01b03821661142d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610953565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610b645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610953565b60026006540361153a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610953565b6002600655565b6001600160a01b0383166115675760405162461bcd60e51b81526004016109539061244d565b6001600160a01b03821661158d5760405162461bcd60e51b815260040161095390612492565b6001600160a01b0383166000908152601b602052604090205460ff1680156115ce57506001600160a01b03831660009081526014602052604090205460ff16155b156116115760405162461bcd60e51b81526020600482015260136024820152721059191c995cdcc8189b1858dadb1a5cdd1959606a1b6044820152606401610953565b600a546001600160a01b0316158015906116385750600a546001600160a01b038481169116145b801561164c57506001600160a01b03821615155b15611a8a57600b546001600160a01b031633036116735761166e838383611fd4565b505050565b60185460ff166116d05760165460ff1680156116a757506001600160a01b03821660009081526015602052604090205460ff165b156116b75761166e838383611fd4565b604051639d7da54560e01b815260040160405180910390fd5b601654610100900460ff1615801561170157506001600160a01b03821660009081526015602052604090205460ff16155b801561172657506001600160a01b03821660009081526014602052604090205460ff16155b156117635760405162461bcd60e51b815260206004820152600d60248201526c109d5e5cc8191a5cd8589b1959609a1b6044820152606401610953565b6001600160a01b0382166000908152601b602052604090205460ff1680156117a457506001600160a01b03821660009081526014602052604090205460ff16155b156117e95760405162461bcd60e51b8152602060048201526015602482015274149958da5c1a595b9d08189b1858dadb1a5cdd1959605a1b6044820152606401610953565b6000601f5411801561181457506001600160a01b03821660009081526014602052604090205460ff16155b156118a1576001600160a01b0382166000908152601c6020526040902054601f5461183f908261243a565b4310156118845760405162461bcd60e51b815260206004820152601360248201527242757920636f6f6c646f776e2061637469766560681b6044820152606401610953565b506001600160a01b0382166000908152601c602052604090204390555b6000601d541180156118cc57506001600160a01b03821660009081526014602052604090205460ff16155b1561191c57601d5481111561191c5760405162461bcd60e51b8152602060048201526016602482015275115e18d959591cc81b585e08189d5e48185b5bdd5b9d60521b6044820152606401610953565b6000601e5411801561194757506001600160a01b03821660009081526014602052604090205460ff16155b156119c757601e548161196f846001600160a01b031660009081526020819052604090205490565b611979919061243a565b11156119c75760405162461bcd60e51b815260206004820152601960248201527f45786365656473206d61782077616c6c657420616d6f756e74000000000000006044820152606401610953565b601a546019546119d7919061243a565b4311611a7f576001600160a01b03821660009081526015602052604090205460ff16158015611a1f57506001600160a01b03821660009081526014602052604090205460ff16155b15611a7f576001600160a01b0382166000818152601b6020908152604091829020805460ff1916600190811790915591519182527fcf3473b85df1594d47b6958f29a32bea0abff9dd68296f7bf33443646793cfd8910160405180910390a25b61166e838383611fd4565b600a546001600160a01b031615801590611ab15750600a546001600160a01b038381169116145b8015611ac557506001600160a01b03831615155b15611c9f576001600160a01b0383166000908152601b602052604090205460ff168015611b0b57506001600160a01b03831660009081526014602052604090205460ff16155b15611b4d5760405162461bcd60e51b815260206004820152601260248201527114d95b1b195c88189b1858dadb1a5cdd195960721b6044820152606401610953565b6000670de0b6b3a7640000600d5483611b6691906124d5565b611b7091906124ec565b90506000611b7e8284612427565b90506000600d54600e5484611b9391906124d5565b611b9d91906124ec565b90506000600d54600f5485611bb291906124d5565b611bbc91906124ec565b90506000600d5460105486611bd191906124d5565b611bdb91906124ec565b90508215611bfb57600754611bfb9089906001600160a01b031685611fd4565b8115611c1957600854611c199089906001600160a01b031684611fd4565b8015611c3757600954611c379089906001600160a01b031683611fd4565b611c42888886611fd4565b6040805186815260208101859052908101839052606081018290526001600160a01b038916907fe29b466abf22e244968b38f750c90f5e685ce810800dbd3af88752f8a210fae29060800160405180910390a25050505050505050565b60125460ff168015611cca57506001600160a01b03831660009081526013602052604090205460ff16155b8015611cef57506001600160a01b03821660009081526013602052604090205460ff16155b8015611d1457506001600160a01b03831660009081526014602052604090205460ff16155b8015611d3957506001600160a01b03821660009081526014602052604090205460ff16155b15611a7f576000611d51655af3107a400060026124d5565b9050808211611d73576040516356436b0f60e01b815260040160405180910390fd5b60178054906000611d838361250e565b91905055506000611d988585856017546120ff565b601780549192506000611daa8361250e565b91905055506000611dbf8686866017546120ff565b90506000806001600160a01b03841615611de957611de48885655af3107a4000611fd4565b600191505b6001600160a01b03831615611e0d57611e098884655af3107a4000611fd4565b5060015b826001600160a01b0316846001600160a01b0316896001600160a01b03167f87791a4bca6e415fb436e543c1490c59caf14fa8a8dba46e5d44252c435406f8655af3107a4000604051611e6291815260200190565b60405180910390a460008215611e8557611e82655af3107a40008261243a565b90505b8115611e9e57611e9b655af3107a40008261243a565b90505b6000611eaa8289612427565b9050611eb78a8a83611fd4565b50505050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216611f6b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610953565b8060026000828254611f7d919061243a565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038316611ffa5760405162461bcd60e51b81526004016109539061244d565b6001600160a01b0382166120205760405162461bcd60e51b815260040161095390612492565b6001600160a01b038316600090815260208190526040902054818110156120985760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610953565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b604080514260208083019190915244828401526bffffffffffffffffffffffff19606097881b8116888401529590961b9094166074850152608884019290925260a8808401919091528151808403909101815260c89092019052805191012090565b602081526000825180602084015260005b8181101561218f5760208186018101516040868401015201612172565b506000604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b03811681146121c657600080fd5b919050565b600080604083850312156121de57600080fd5b6121e7836121af565b946020939093013593505050565b60006020828403121561220757600080fd5b610b4b826121af565b60006020828403121561222257600080fd5b5035919050565b803580151581146121c657600080fd5b6000806040838503121561224c57600080fd5b612255836121af565b915061226360208401612229565b90509250929050565b60008060006060848603121561228157600080fd5b61228a846121af565b9250612298602085016121af565b929592945050506040919091013590565b6000806000606084860312156122be57600080fd5b6122c7846121af565b92506122d5602085016121af565b91506122e3604085016121af565b90509250925092565b6000602082840312156122fe57600080fd5b610b4b82612229565b6000806000806080858703121561231d57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561234e57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561237857600080fd5b50508035926020909101359150565b6000806040838503121561239a57600080fd5b6123a3836121af565b9150612263602084016121af565b600181811c908216806123c557607f821691505b6020821081036123e557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600c908201526b5a65726f206164647265737360a01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561091f5761091f612411565b8082018082111561091f5761091f612411565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808202811582820484141761091f5761091f612411565b60008261250957634e487b7160e01b600052601260045260246000fd5b500490565b60006001820161252057612520612411565b506001019056fea2646970667358221220edca15ac439401beeacdff2f58190bf36d71e1135167572e6c6c4b60e3cd03ef64736f6c634300081e0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106103c55760003560e01c80638a8c523c116101ff578063c77c70e01161011a578063e1817a8b116100ad578063f582d2931161007c578063f582d2931461080a578063f8316c9014610817578063f9f92be41461082a578063fe575a871461084d57600080fd5b8063e1817a8b146107b9578063e5919a4f146107cb578063eb241b2e146107ee578063f2fde38b146107f757600080fd5b8063d74d4d3e116100e9578063d74d4d3e14610780578063d93ddcef1461078a578063dd62ed3e14610793578063de84665d146107a657600080fd5b8063c77c70e014610744578063c8900c1b14610751578063d00efb2f14610764578063d6f154691461076d57600080fd5b8063a5b601be11610192578063b8c9d25c11610161578063b8c9d25c146106f8578063b90fb5a91461070b578063c21ebd071461071e578063c75748391461073157600080fd5b8063a5b601be146106b6578063a9059cbb146106c9578063aa4bde28146106dc578063b6fb0d64146106e557600080fd5b806393fea3f8116101ce57806393fea3f81461068957806395d89b411461069257806396daf89f1461069a578063a457c2d7146106a357600080fd5b80638a8c523c1461064a5780638b4cee08146106525780638da5cb5b1461066557806391f837a81461067657600080fd5b80634773a6a9116102ef5780635bf3a3151161028257806375bc50431161025157806375bc50431461061257806376482e9c1461061b57806386a156371461062e57806388e765ff1461064157600080fd5b80635bf3a3151461059a57806363bb7076146105c657806370a08231146105e9578063715018a6146104ba57600080fd5b806355fc9453116102be57806355fc94531461054457806359927044146105675780635a86d2e31461057a5780635be4d4421461058757600080fd5b80634773a6a91461050857806348d462b1146105115780634ada218b1461052457806353d173dd1461053157600080fd5b806318160ddd1161036757806334d2c0a31161033657806334d2c0a3146104ba57806337b28bfd146104c257806339509351146104e257806340c10f19146104f557600080fd5b806318160ddd1461046557806323b872dd1461046d5780632f48ab7d14610480578063313ce567146104ab57600080fd5b80630cb46b75116103a35780630cb46b751461042257806314626dc614610437578063153b0d1e1461044a57806317700f011461045d57600080fd5b806306fdde03146103ca578063095ea7b3146103e85780630baa9ed61461040b575b600080fd5b6103d2610879565b6040516103df9190612161565b60405180910390f35b6103fb6103f63660046121cb565b61090b565b60405190151581526020016103df565b610414601f5481565b6040519081526020016103df565b6104356104303660046121f5565b610925565b005b610435610445366004612210565b61097e565b610435610458366004612239565b6109c2565b610435610a50565b600254610414565b6103fb61047b36600461226c565b610a99565b600c54610493906001600160a01b031681565b6040516001600160a01b0390911681526020016103df565b604051601281526020016103df565b610435610b52565b6104146104d03660046121f5565b601c6020526000908152604090205481565b6103fb6104f03660046121cb565b610b66565b6104356105033660046121cb565b610b83565b610414600d5481565b61043561051f3660046122a9565b610bfb565b6018546103fb9060ff1681565b61043561053f3660046122ec565b610c8f565b6103fb6105523660046121f5565b60136020526000908152604090205460ff1681565b600754610493906001600160a01b031681565b6012546103fb9060ff1681565b610435610595366004612239565b610cd8565b6103fb6105a83660046121f5565b6001600160a01b031660009081526014602052604090205460ff1690565b6103fb6105d43660046121f5565b60156020526000908152604090205460ff1681565b6104146105f73660046121f5565b6001600160a01b031660009081526020819052604090205490565b610414600e5481565b610435610629366004612239565b610dbe565b61043561063c3660046122ec565b610e44565b610414601d5481565b610435610e95565b610435610660366004612210565b610f35565b6005546001600160a01b0316610493565b610435610684366004612307565b610f42565b61041460115481565b6103d2610fac565b610414600f5481565b6103fb6106b13660046121cb565b610fbb565b6104356106c43660046121f5565b611041565b6103fb6106d73660046121cb565b6110c2565b610414601e5481565b6104356106f3366004612239565b6110e4565b600a54610493906001600160a01b031681565b610435610719366004612339565b61116a565b600b54610493906001600160a01b031681565b600954610493906001600160a01b031681565b610414655af3107a400081565b61043561075f366004612365565b611180565b61041460195481565b61043561077b3660046122ec565b6111fc565b61041462278d0081565b61041460105481565b6104146107a1366004612387565b611245565b600854610493906001600160a01b031681565b6016546103fb90610100900460ff1681565b6103fb6107d93660046121f5565b60146020526000908152604090205460ff1681565b610414601a5481565b6104356108053660046121f5565b611270565b6016546103fb9060ff1681565b6104356108253660046121f5565b6112e9565b6103fb6108383660046121f5565b601b6020526000908152604090205460ff1681565b6103fb61085b3660046121f5565b6001600160a01b03166000908152601b602052604090205460ff1690565b606060038054610888906123b1565b80601f01602080910402602001604051908101604052809291908181526020018280546108b4906123b1565b80156109015780601f106108d657610100808354040283529160200191610901565b820191906000526020600020905b8154815290600101906020018083116108e457829003601f168201915b5050505050905090565b60003361091981858561136a565b60019150505b92915050565b61092d61148e565b6001600160a01b03811661095c5760405162461bcd60e51b8152600401610953906123eb565b60405180910390fd5b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b61098661148e565b601f8190556040518181527fb1e2f430dc5da940dc67b06611f06bd0cbc10e01bfd30db3db6e50e5938341c6906020015b60405180910390a150565b6109ca61148e565b6001600160a01b0382166109f05760405162461bcd60e51b8152600401610953906123eb565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527fcf3473b85df1594d47b6958f29a32bea0abff9dd68296f7bf33443646793cfd891015b60405180910390a25050565b610a5861148e565b6018805460ff19169055604051600081527f6d3472356b1ec46412b1ca10e0785ccf97029f8fbd60bb4c1c4ab1a66d639e06906020015b60405180910390a1565b6000610aa36114e8565b336000610ab08683611245565b90506000198114610b305783811015610b1c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610953565b610b308683610b2b8785612427565b61136a565b610b3b868686611541565b600192505050610b4b6001600655565b9392505050565b610b5a61148e565b610b646000611ec3565b565b600033610919818585610b798383611245565b610b2b919061243a565b610b8b61148e565b601154421015610bed5760405162461bcd60e51b815260206004820152602760248201527f4d696e742066756e6374696f6e206c6f636b656420756e74696c206d696e744c6044820152666f636b54696d6560c81b6064820152608401610953565b610bf78282611f15565b5050565b610c0361148e565b6001600160a01b0383161580610c2057506001600160a01b038216155b80610c3257506001600160a01b038116155b15610c505760405163d92e233d60e01b815260040160405180910390fd5b600780546001600160a01b039485166001600160a01b031991821617909155600880549385169382169390931790925560098054919093169116179055565b610c9761148e565b6012805460ff19168215159081179091556040519081527fe4deb9738ba3354ca53d9ea8c1eae37e672ac2fade2468b4b1f4da12853c466a906020016109b7565b610ce061148e565b6001600160a01b038216610d065760405162461bcd60e51b8152600401610953906123eb565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527fae9d0d04c9df66dd8db6150ec2206a0c5d02775a9633894adf7cdea765e18226910160405180910390a28015610bf7576001600160a01b038216600081815260136020908152604091829020805460ff1916600190811790915591519182527f1d29b450e3ee9a9b08ae53f201d60bc74c300cfc0502c01cf4c134ada36842639101610a44565b610dc661148e565b6001600160a01b038216610dec5760405162461bcd60e51b8152600401610953906123eb565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527f1d29b450e3ee9a9b08ae53f201d60bc74c300cfc0502c01cf4c134ada36842639101610a44565b610e4c61148e565b601680548215156101000261ff00199091161790556040517f0dd902887071a125360a70694a967b3d2a6805e6ceccde8427f18492ff60102b906109b790831515815260200190565b610e9d61148e565b60185460ff1615610ef05760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610953565b6018805460ff191660011790554360198190556040517f6d3472356b1ec46412b1ca10e0785ccf97029f8fbd60bb4c1c4ab1a66d639e0691610a8f9190815260200190565b610f3d61148e565b600d55565b610f4a61148e565b601a849055601d839055601e829055601f8190556040805185815260208101859052908101839052606081018290527ff09302f358dada5dab4c8ec58514ae23ebf5e041627913b282d72fc524140b839060800160405180910390a150505050565b606060048054610888906123b1565b60003381610fc98286611245565b9050838110156110295760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610953565b611036828686840361136a565b506001949350505050565b61104961148e565b6001600160a01b0381166110705760405163d92e233d60e01b815260040160405180910390fd5b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f9b0c3048787c13539ec50c0a007c2ddfc64fbbb685c0b18abb8c250cbfa5440190600090a35050565b60006110cc6114e8565b6110d7338484611541565b50600161091f6001600655565b6110ec61148e565b6001600160a01b0382166111125760405162461bcd60e51b8152600401610953906123eb565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fa0f24332c7d141c86c4d5e8803389f673e06b885f82a63bd29732d224ec665799101610a44565b61117261148e565b600e92909255600f55601055565b61118861148e565b601d829055601e8190556040518281527ffb72e27d53f87822df1c737cbe3061c70cf0f271ec9c9b993d6f4cb3da276d469060200160405180910390a16040518181527f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace9060200160405180910390a15050565b61120461148e565b6016805460ff19168215159081179091556040519081527f942be7435635e527bb73176697ed306a26e641a0520639b694d8d46c9a3270d1906020016109b7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61127861148e565b6001600160a01b0381166112dd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610953565b6112e681611ec3565b50565b6112f161148e565b6001600160a01b0381166113185760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f77eba40e44e9cdab153d4b12298db3378cf32be998a70ae85986c7f2e2df0fcc90600090a35050565b6001600160a01b0383166113cc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610953565b6001600160a01b03821661142d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610953565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610b645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610953565b60026006540361153a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610953565b6002600655565b6001600160a01b0383166115675760405162461bcd60e51b81526004016109539061244d565b6001600160a01b03821661158d5760405162461bcd60e51b815260040161095390612492565b6001600160a01b0383166000908152601b602052604090205460ff1680156115ce57506001600160a01b03831660009081526014602052604090205460ff16155b156116115760405162461bcd60e51b81526020600482015260136024820152721059191c995cdcc8189b1858dadb1a5cdd1959606a1b6044820152606401610953565b600a546001600160a01b0316158015906116385750600a546001600160a01b038481169116145b801561164c57506001600160a01b03821615155b15611a8a57600b546001600160a01b031633036116735761166e838383611fd4565b505050565b60185460ff166116d05760165460ff1680156116a757506001600160a01b03821660009081526015602052604090205460ff165b156116b75761166e838383611fd4565b604051639d7da54560e01b815260040160405180910390fd5b601654610100900460ff1615801561170157506001600160a01b03821660009081526015602052604090205460ff16155b801561172657506001600160a01b03821660009081526014602052604090205460ff16155b156117635760405162461bcd60e51b815260206004820152600d60248201526c109d5e5cc8191a5cd8589b1959609a1b6044820152606401610953565b6001600160a01b0382166000908152601b602052604090205460ff1680156117a457506001600160a01b03821660009081526014602052604090205460ff16155b156117e95760405162461bcd60e51b8152602060048201526015602482015274149958da5c1a595b9d08189b1858dadb1a5cdd1959605a1b6044820152606401610953565b6000601f5411801561181457506001600160a01b03821660009081526014602052604090205460ff16155b156118a1576001600160a01b0382166000908152601c6020526040902054601f5461183f908261243a565b4310156118845760405162461bcd60e51b815260206004820152601360248201527242757920636f6f6c646f776e2061637469766560681b6044820152606401610953565b506001600160a01b0382166000908152601c602052604090204390555b6000601d541180156118cc57506001600160a01b03821660009081526014602052604090205460ff16155b1561191c57601d5481111561191c5760405162461bcd60e51b8152602060048201526016602482015275115e18d959591cc81b585e08189d5e48185b5bdd5b9d60521b6044820152606401610953565b6000601e5411801561194757506001600160a01b03821660009081526014602052604090205460ff16155b156119c757601e548161196f846001600160a01b031660009081526020819052604090205490565b611979919061243a565b11156119c75760405162461bcd60e51b815260206004820152601960248201527f45786365656473206d61782077616c6c657420616d6f756e74000000000000006044820152606401610953565b601a546019546119d7919061243a565b4311611a7f576001600160a01b03821660009081526015602052604090205460ff16158015611a1f57506001600160a01b03821660009081526014602052604090205460ff16155b15611a7f576001600160a01b0382166000818152601b6020908152604091829020805460ff1916600190811790915591519182527fcf3473b85df1594d47b6958f29a32bea0abff9dd68296f7bf33443646793cfd8910160405180910390a25b61166e838383611fd4565b600a546001600160a01b031615801590611ab15750600a546001600160a01b038381169116145b8015611ac557506001600160a01b03831615155b15611c9f576001600160a01b0383166000908152601b602052604090205460ff168015611b0b57506001600160a01b03831660009081526014602052604090205460ff16155b15611b4d5760405162461bcd60e51b815260206004820152601260248201527114d95b1b195c88189b1858dadb1a5cdd195960721b6044820152606401610953565b6000670de0b6b3a7640000600d5483611b6691906124d5565b611b7091906124ec565b90506000611b7e8284612427565b90506000600d54600e5484611b9391906124d5565b611b9d91906124ec565b90506000600d54600f5485611bb291906124d5565b611bbc91906124ec565b90506000600d5460105486611bd191906124d5565b611bdb91906124ec565b90508215611bfb57600754611bfb9089906001600160a01b031685611fd4565b8115611c1957600854611c199089906001600160a01b031684611fd4565b8015611c3757600954611c379089906001600160a01b031683611fd4565b611c42888886611fd4565b6040805186815260208101859052908101839052606081018290526001600160a01b038916907fe29b466abf22e244968b38f750c90f5e685ce810800dbd3af88752f8a210fae29060800160405180910390a25050505050505050565b60125460ff168015611cca57506001600160a01b03831660009081526013602052604090205460ff16155b8015611cef57506001600160a01b03821660009081526013602052604090205460ff16155b8015611d1457506001600160a01b03831660009081526014602052604090205460ff16155b8015611d3957506001600160a01b03821660009081526014602052604090205460ff16155b15611a7f576000611d51655af3107a400060026124d5565b9050808211611d73576040516356436b0f60e01b815260040160405180910390fd5b60178054906000611d838361250e565b91905055506000611d988585856017546120ff565b601780549192506000611daa8361250e565b91905055506000611dbf8686866017546120ff565b90506000806001600160a01b03841615611de957611de48885655af3107a4000611fd4565b600191505b6001600160a01b03831615611e0d57611e098884655af3107a4000611fd4565b5060015b826001600160a01b0316846001600160a01b0316896001600160a01b03167f87791a4bca6e415fb436e543c1490c59caf14fa8a8dba46e5d44252c435406f8655af3107a4000604051611e6291815260200190565b60405180910390a460008215611e8557611e82655af3107a40008261243a565b90505b8115611e9e57611e9b655af3107a40008261243a565b90505b6000611eaa8289612427565b9050611eb78a8a83611fd4565b50505050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216611f6b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610953565b8060026000828254611f7d919061243a565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038316611ffa5760405162461bcd60e51b81526004016109539061244d565b6001600160a01b0382166120205760405162461bcd60e51b815260040161095390612492565b6001600160a01b038316600090815260208190526040902054818110156120985760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610953565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b604080514260208083019190915244828401526bffffffffffffffffffffffff19606097881b8116888401529590961b9094166074850152608884019290925260a8808401919091528151808403909101815260c89092019052805191012090565b602081526000825180602084015260005b8181101561218f5760208186018101516040868401015201612172565b506000604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b03811681146121c657600080fd5b919050565b600080604083850312156121de57600080fd5b6121e7836121af565b946020939093013593505050565b60006020828403121561220757600080fd5b610b4b826121af565b60006020828403121561222257600080fd5b5035919050565b803580151581146121c657600080fd5b6000806040838503121561224c57600080fd5b612255836121af565b915061226360208401612229565b90509250929050565b60008060006060848603121561228157600080fd5b61228a846121af565b9250612298602085016121af565b929592945050506040919091013590565b6000806000606084860312156122be57600080fd5b6122c7846121af565b92506122d5602085016121af565b91506122e3604085016121af565b90509250925092565b6000602082840312156122fe57600080fd5b610b4b82612229565b6000806000806080858703121561231d57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561234e57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561237857600080fd5b50508035926020909101359150565b6000806040838503121561239a57600080fd5b6123a3836121af565b9150612263602084016121af565b600181811c908216806123c557607f821691505b6020821081036123e557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600c908201526b5a65726f206164647265737360a01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561091f5761091f612411565b8082018082111561091f5761091f612411565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808202811582820484141761091f5761091f612411565b60008261250957634e487b7160e01b600052601260045260246000fd5b500490565b60006001820161252057612520612411565b506001019056fea2646970667358221220edca15ac439401beeacdff2f58190bf36d71e1135167572e6c6c4b60e3cd03ef64736f6c634300081e0033

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

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.