S Price: $0.729651 (+8.42%)

Token

BurnX (BRNx)

Overview

Max Total Supply

50,000,000 BRNx

Holders

393

Market

Price

$0.00 @ 0.000000 S

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 BRNx

Value
$0.00
0xe70f1603a92a4dcaa41f5c3ebaca00e367378306
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
BRNx

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 1 : BRNx.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.20;

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;
    }
}

abstract contract Ownable is Context {
    address private _owner;

    error OwnableUnauthorizedAccount(address account);
    error OwnableInvalidOwner(address owner);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

abstract contract ReentrancyGuard {
    uint256 private constant NOT_ENTERED = 1;
    uint256 private constant ENTERED = 2;

    uint256 private _status;

    error ReentrancyGuardReentrantCall();

    constructor() {
        _status = NOT_ENTERED;
    }

    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be NOT_ENTERED
        if (_status == ENTERED) {
            revert ReentrancyGuardReentrantCall();
        }

        // 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;
    }

    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == ENTERED;
    }
}

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

interface IERC20Errors {
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
    error ERC20InvalidSender(address sender);
    error ERC20InvalidReceiver(address receiver);
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
    error ERC20InvalidApprover(address approver);
    error ERC20InvalidSpender(address spender);
}

abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual returns (uint8) {
        return 18;
    }

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

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

    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

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

    function approve(address spender, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }

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

    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

interface IV3SwapRouter {
    struct ExactInputSingleParams {
        address tokenIn;
        address tokenOut;
        address recipient;
        uint256 amountIn;
        uint256 amountOutMinimum;
        uint160 limitSqrtPrice;
    }
    function exactInputSingle(ExactInputSingleParams calldata params) external payable returns (uint256 amountOut);
}

interface INonfungiblePositionManager {
    function createAndInitializePoolIfNecessary(
        address token0,
        address token1,
        uint160 sqrtPriceX96
        ) external payable returns (address pool);
    struct MintParams {
        address token0;
        address token1;
        int24 tickLower;
        int24 tickUpper;
        uint256 amount0Desired;
        uint256 amount1Desired;
        uint256 amount0Min;
        uint256 amount1Min;
        address recipient;
        uint256 deadline;
    }
    function mint(MintParams calldata params) external payable returns (
            uint256 tokenId,
            uint128 liquidity,
            uint256 amount0,
            uint256 amount1
        );
}


contract BRNx is ERC20, Ownable, ReentrancyGuard {

    // CONSTANT VARIABLES
    IV3SwapRouter public constant SWAP_ROUTER = IV3SwapRouter(0xA047e2AbF8263FcA7c368F43e2f960A06FD9949f);
    INonfungiblePositionManager public constant NONFUNGIBLE_POSITION_MANAGER = INonfungiblePositionManager(0xd82Fe82244ad01AaD671576202F9b46b76fAdFE2);
    address public constant TOKEN_PAIR_ADDRESS = 0xA04BC7140c26fc9BB1F36B1A604C7A5a88fb0E70; //SWPx
    uint16 public constant BUY_FEES = 600; //6%
    uint16 public constant BURN_SHARE = 400; //4%
    uint16 public constant TREASURY_SHARE = 175; //1.75%
    uint16 public constant CALLER_SHARE = 25; //0.25%
    address private constant DEAD_ADDRESS = address(0xdead);
    
    // OTHER VARIABLES
    bool private swapping;
    address public treasuryWallet;
    address public devWallet;
    address public algebraV3Pair;
    uint256 public minimumBalanceBB;
    uint40 public cooldownPeriodBB;
    bool private limitsInEffect;
    uint256 private maxW;

    // MAPPINGS
    mapping(address => bool) public isExcludedFromFees;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => uint256) public lastBBCalledTime;

    // EVENTS
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ChangeAutomatedMarketMakerPairs(address indexed automatedMarketMakerPairs, bool isAutomatedMarketMakerPairs);
    event ChangeMinimumBalanceBB(uint256 newMinimumBalanceBB, uint256 oldMinimumBalanceBB);
    event ChangeCooldownPeriodBB(uint40 newCooldownPeriodBB, uint40 oldCooldownPeriodBB);
    event BuyAndBurn(address indexed caller, uint256 amountToBurn, uint256 amountToTreasury, uint256 amountToCaller);

    // DEVWALLET CHANGE TIMELOCK VARIABLES
    struct DevWalletChange {
        address newDevWallet;
        uint256 effectiveTime;
        bool pending;
    }
    DevWalletChange public pendingDevWalletChange;
    uint256 public constant DEV_WALLET_TIMELOCK = 2 days;
    event ChangeDevWallet(address indexed newDevWallet, address oldDevWallet);

    // TREASURYWALLET CHANGE TIMELOCK VARIABLES
    struct TreasuryWalletChange {
        address newTreasuryWallet;
        uint256 effectiveTime;
        bool pending;
    }
    TreasuryWalletChange public pendingTreasuryWalletChange;
    uint256 public constant TREASURY_WALLET_TIMELOCK = 1 days;
    event ChangeTreasuryWallet(address indexed newTreasuryWallet, address oldTreasuryWallet);

    // MODIFIERS
    modifier onlyDev() {
        require(msg.sender == devWallet, "Only the dev can run this function");
        _;
    }

    constructor(
    )
        ERC20("BurnX", "BRNx")
        Ownable(msg.sender)
    {
        devWallet = msg.sender;
        treasuryWallet = 0x6DC5c03F0dF164D14D5F42F60559AeA37E93c6a9;
        minimumBalanceBB = 1000 * 10**18; // 1000 BRNx
        cooldownPeriodBB = 8 hours;

        uint256 _totalSupply = 50_000_000 * 10**18; // 50M BRNx
        maxW = _totalSupply * 2 / 100;
        limitsInEffect = true;
        
        // exclude from paying fees
        isExcludedFromFees[address(this)] = true;
        isExcludedFromFees[DEAD_ADDRESS] = true;
        isExcludedFromFees[address(NONFUNGIBLE_POSITION_MANAGER)] = true;
        isExcludedFromFees[treasuryWallet] = true;

        _mint(address(this), _totalSupply);

    }


    // OWNER FUNCTIONS
    function mintAndRenounce(uint160 _sqrtPriceX96, int24 _tickLower, int24 _tickUpper) public onlyOwner {

        address token0;
        address token1;
        uint256 amount0Desired;
        uint256 amount1Desired;

        // create a new pair and initialize at a certain price
        if (address(this) < TOKEN_PAIR_ADDRESS) {
            algebraV3Pair = NONFUNGIBLE_POSITION_MANAGER.createAndInitializePoolIfNecessary(address(this), TOKEN_PAIR_ADDRESS, _sqrtPriceX96);
            token0 = address(this);
            token1 = TOKEN_PAIR_ADDRESS;
            amount0Desired = balanceOf(address(this));
            amount1Desired = 0;
        }
        else {
            algebraV3Pair = NONFUNGIBLE_POSITION_MANAGER.createAndInitializePoolIfNecessary(TOKEN_PAIR_ADDRESS, address(this), _sqrtPriceX96);
            token0 = TOKEN_PAIR_ADDRESS;
            token1 = address(this);
            amount0Desired = 0;
            amount1Desired = balanceOf(address(this));
        }

        automatedMarketMakerPairs[algebraV3Pair] = true;

        //addLP automatically
        _approve(address(this), address(NONFUNGIBLE_POSITION_MANAGER), balanceOf(address(this)));

        // build the params to mint
        INonfungiblePositionManager.MintParams memory params;
        params = INonfungiblePositionManager.MintParams({
            token0: token0,
            token1: token1,
            tickLower: _tickLower,
            tickUpper: _tickUpper,
            amount0Desired: amount0Desired,
            amount1Desired: amount1Desired,
            amount0Min: 0,
            amount1Min: 0,
            recipient: devWallet,
            deadline: block.timestamp
        });

        // mint the position
        NONFUNGIBLE_POSITION_MANAGER.mint(params);

        // renounce ownership
        renounceOwnership();

    }


    // DEV FUNCTIONS -> can be run by the dev after renounce in order to manage the project even after the contract is renounced
    function removeLimits() public onlyDev {
        require(limitsInEffect, "Limits were removed already");
     
        limitsInEffect = false;

        // it's gonna call the buyAndBurn function first and send the caller's share to the treasury
        _buyAndBurn(treasuryWallet);   
    }

    function excludeFromFees(address _account, bool _excluded) public onlyDev nonReentrant {
        require(!automatedMarketMakerPairs[_account], "Pool addresses cannot be excluded from fees!");

        isExcludedFromFees[_account] = _excluded;

        emit ExcludeFromFees(_account, _excluded);
    }

    function changeAutomatedMarketMakerPairs(address _automatedMarketMakerPairs, bool _isAutomatedMarketMakerPairs) public onlyDev nonReentrant {
        require(_automatedMarketMakerPairs != address(0), "Automated Market Maker Pair must be a valid address");
        require(_automatedMarketMakerPairs != algebraV3Pair, "Can't remove algebraV3Pair from the Automated Market Maker Pairs!");

        automatedMarketMakerPairs[_automatedMarketMakerPairs] = _isAutomatedMarketMakerPairs;
        
        emit ChangeAutomatedMarketMakerPairs(_automatedMarketMakerPairs, _isAutomatedMarketMakerPairs);
    }
    
    function changeMinimumBalanceBB(uint256 _newMinimumBalanceBB) public onlyDev nonReentrant {
        require(_newMinimumBalanceBB > 1 * 10**18, "Cannot set the minimumBalanceBB to lower than 1 BRNx");

        uint256 oldMinimumBalanceBB = minimumBalanceBB;
        minimumBalanceBB = _newMinimumBalanceBB;

        emit ChangeMinimumBalanceBB(_newMinimumBalanceBB, oldMinimumBalanceBB);
    }

    function changeCooldownPeriodBB(uint40 _newCooldownPeriodBB) public onlyDev nonReentrant {
        require(
            _newCooldownPeriodBB >= 1 minutes && _newCooldownPeriodBB <= 24 hours,
            "cooldownPeriodBB must be between 1 minute and 24 hours"
        );

        uint40 oldCooldownPeriodBB = cooldownPeriodBB;
        cooldownPeriodBB = _newCooldownPeriodBB;

        emit ChangeCooldownPeriodBB(_newCooldownPeriodBB, oldCooldownPeriodBB);
    }


    // DEVWALLET CHANGE -> will be subject to a timelock as a measure of security
    function initiateDevWalletChange(address _newDevWallet) public onlyDev nonReentrant {
        require(_newDevWallet != address(0), "New Dev Wallet must be a valid address");
        require(!pendingDevWalletChange.pending, "Dev Wallet change already pending");
        
        pendingDevWalletChange = DevWalletChange({
            newDevWallet: _newDevWallet,
            effectiveTime: block.timestamp + DEV_WALLET_TIMELOCK,
            pending: true
        });
    }

    function executeDevWalletChange() public onlyDev nonReentrant {
        require(pendingDevWalletChange.pending, "No Dev Wallet change pending");
        require(block.timestamp >= pendingDevWalletChange.effectiveTime, "Timelock not expired");
        
        address oldDevWallet = devWallet;
        devWallet = pendingDevWalletChange.newDevWallet;
        
        // Reset the pending change
        pendingDevWalletChange.pending = false;
        
        emit ChangeDevWallet(pendingDevWalletChange.newDevWallet, oldDevWallet);
    }

    function cancelDevWalletChange() public onlyDev nonReentrant {
        require(pendingDevWalletChange.pending, "No Dev Wallet change pending");
        
        pendingDevWalletChange.pending = false;
    }


    // TREASURYWALLET CHANGE -> will be subject to a timelock as a measure of security
    function initiateTreasuryWalletChange(address _newTreasuryWallet) public onlyDev nonReentrant {
        require(_newTreasuryWallet != address(0), "New Treasury Wallet must be a valid address");
        require(!pendingTreasuryWalletChange.pending, "Treasury Wallet change already pending");
        
        pendingTreasuryWalletChange = TreasuryWalletChange({
            newTreasuryWallet: _newTreasuryWallet,
            effectiveTime: block.timestamp + TREASURY_WALLET_TIMELOCK,
            pending: true
        });
    }

    function executeTreasuryWalletChange() public onlyDev nonReentrant {
        require(pendingTreasuryWalletChange.pending, "No Treasury Wallet change pending");
        require(block.timestamp >= pendingTreasuryWalletChange.effectiveTime, "Timelock not expired");
        
        address oldTreasuryWallet = treasuryWallet;
        treasuryWallet = pendingTreasuryWalletChange.newTreasuryWallet;
        
        // Reset the pending change
        pendingTreasuryWalletChange.pending = false;
        
        emit ChangeTreasuryWallet(pendingTreasuryWalletChange.newTreasuryWallet, oldTreasuryWallet);
    }

    function cancelTreasuryWalletChange() public onlyDev nonReentrant {
        require(pendingTreasuryWalletChange.pending, "No Treasury Wallet change pending");
        
        pendingTreasuryWalletChange.pending = false;
    }


    // PRIVATE FUNCTIONS
    function _tokenTransfer(address from, address to, uint256 amount) private {

        if (
            amount == 0 ||
            isExcludedFromFees[from] ||
            isExcludedFromFees[to] ||
            (_isEOA(from) && _isEOA(to)) ||
            swapping
            ) {
            _transfer(from, to, amount);
            return;
        }
            
        //when buy, charge tax
        if (automatedMarketMakerPairs[from]) {
            
            //apply an anti-snipe limit
            if (limitsInEffect) {
                require(amount + balanceOf(to) <= maxW, "Max wallet exceeded");
            }

            // calculate the fees and send them to this address
            uint256 fees = amount * BUY_FEES / 10000;
            amount -= fees;
            _transfer(from, address(this), fees);
        }
        
        //when sell, do nothing and continue as normal
        else if (automatedMarketMakerPairs[to]) {}

        //can't be done
        else {
            revert("Can't buy, sell or add LP on another pool");
        }

        //in the end, it'll make the swap of the tokens as requested
        _transfer(from, to, amount);
    }

    function _swapTokensForTokens(uint256 tokenAmount) private {
        // generate the algebra pair path of token -> TOKEN_PAIR_ADDRESS
        address tokenIn = address(this);
        address tokenOut = address(TOKEN_PAIR_ADDRESS);

        _approve(address(this), address(SWAP_ROUTER), tokenAmount);

        // build the params to swap
        IV3SwapRouter.ExactInputSingleParams memory params = IV3SwapRouter.ExactInputSingleParams({
            tokenIn: tokenIn,
            tokenOut: tokenOut,
            recipient: address(this),
            amountIn: tokenAmount,
            amountOutMinimum: 0,
            limitSqrtPrice: 0
        });

        // make the swap
        SWAP_ROUTER.exactInputSingle(params);
    }

    function _buyAndBurn(address caller) private {
        // make sure there's something to swap and that it follows the rules
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance >= minimumBalanceBB, "Can only call the buyAndBurn function when BRNx balance of the contract is over the minimumBalanceBB");
        require(
            block.timestamp >= lastBBCalledTime[caller] + cooldownPeriodBB,
            "Can only call the buyAndBurn function after the cooldownPeriodBB is over"
        );

        // update last called time
        lastBBCalledTime[caller] = block.timestamp;

        // swap the tokens to the TOKEN_PAIR_ADDRESS
        swapping = true;
        _swapTokensForTokens(contractBalance);
        swapping = false;

        // calculate amounts
        IERC20 token = IERC20(TOKEN_PAIR_ADDRESS);
        uint256 tokenContractBalance = token.balanceOf(address(this));
        uint256 amountToBurn = tokenContractBalance * BURN_SHARE / BUY_FEES;
        uint256 amountToTreasury = tokenContractBalance * TREASURY_SHARE / BUY_FEES;
        uint256 amountToCaller = tokenContractBalance - amountToBurn - amountToTreasury; //remaining balance goes to the caller

        // distribute amounts
        token.transfer(DEAD_ADDRESS, amountToBurn); //burn
        token.transfer(treasuryWallet, amountToTreasury); //treasury
        token.transfer(caller, amountToCaller); //caller

        emit BuyAndBurn(caller, amountToBurn, amountToTreasury, amountToCaller);
    }

    function _isEOA(address contractAddress) private view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(contractAddress)
        }
        return size == 0;
    }


    // PUBLIC FUNCTIONS
    function transfer(address to, uint256 value) public virtual override returns (bool) {
        address owner = _msgSender();
        _tokenTransfer(owner, to, value);
        return true;
    }

    function transferFrom(address from, address to, uint256 value) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _tokenTransfer(from, to, value);
        return true;
    }


    // COMMUNITY FUNCTIONS
    function buyAndBurn() external {
        require(!limitsInEffect, "Can't call buyAndBurn while limits are in effect");
        _buyAndBurn(msg.sender);
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"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":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountToBurn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToTreasury","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToCaller","type":"uint256"}],"name":"BuyAndBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"automatedMarketMakerPairs","type":"address"},{"indexed":false,"internalType":"bool","name":"isAutomatedMarketMakerPairs","type":"bool"}],"name":"ChangeAutomatedMarketMakerPairs","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint40","name":"newCooldownPeriodBB","type":"uint40"},{"indexed":false,"internalType":"uint40","name":"oldCooldownPeriodBB","type":"uint40"}],"name":"ChangeCooldownPeriodBB","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newDevWallet","type":"address"},{"indexed":false,"internalType":"address","name":"oldDevWallet","type":"address"}],"name":"ChangeDevWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMinimumBalanceBB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldMinimumBalanceBB","type":"uint256"}],"name":"ChangeMinimumBalanceBB","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newTreasuryWallet","type":"address"},{"indexed":false,"internalType":"address","name":"oldTreasuryWallet","type":"address"}],"name":"ChangeTreasuryWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BURN_SHARE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BUY_FEES","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CALLER_SHARE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEV_WALLET_TIMELOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NONFUNGIBLE_POSITION_MANAGER","outputs":[{"internalType":"contract INonfungiblePositionManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SWAP_ROUTER","outputs":[{"internalType":"contract IV3SwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_PAIR_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TREASURY_SHARE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TREASURY_WALLET_TIMELOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"algebraV3Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyAndBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelDevWalletChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelTreasuryWalletChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_automatedMarketMakerPairs","type":"address"},{"internalType":"bool","name":"_isAutomatedMarketMakerPairs","type":"bool"}],"name":"changeAutomatedMarketMakerPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint40","name":"_newCooldownPeriodBB","type":"uint40"}],"name":"changeCooldownPeriodBB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMinimumBalanceBB","type":"uint256"}],"name":"changeMinimumBalanceBB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownPeriodBB","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"executeDevWalletChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"executeTreasuryWalletChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newDevWallet","type":"address"}],"name":"initiateDevWalletChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newTreasuryWallet","type":"address"}],"name":"initiateTreasuryWalletChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastBBCalledTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumBalanceBB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint160","name":"_sqrtPriceX96","type":"uint160"},{"internalType":"int24","name":"_tickLower","type":"int24"},{"internalType":"int24","name":"_tickUpper","type":"int24"}],"name":"mintAndRenounce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingDevWalletChange","outputs":[{"internalType":"address","name":"newDevWallet","type":"address"},{"internalType":"uint256","name":"effectiveTime","type":"uint256"},{"internalType":"bool","name":"pending","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingTreasuryWalletChange","outputs":[{"internalType":"address","name":"newTreasuryWallet","type":"address"},{"internalType":"uint256","name":"effectiveTime","type":"uint256"},{"internalType":"bool","name":"pending","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608034620004fd576040906001600160401b039080830182811182821017620004e7578352600580825260209164084eae4dcb60db1b8382015284519385850185811082821117620004e757865260049485815263084a49cf60e31b858201528251828111620004d2576003918254916001958684811c94168015620004c7575b89851014620004b2578190601f948581116200045e575b508990858311600114620003f757600092620003eb575b505060001982861b1c191690861b1783555b8051938411620003d65787548581811c91168015620003cb575b88821014620003b65790818386959493116200035e575b5087918411600114620002f357600093620002e7575b505082841b92600019911b1c19161784555b3315620002d05781546001600160a01b0319808216339081179094558651936001600160a01b03939284167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a38160065533906008541617600855746dc5c03f0df164d14d5f42f60559aea37e93c6a900610100600160a81b03196007541617600755683635c9adc5dea00000600a5565010000007080600b5469d3c21bcecceda1000000600c5565ffffffffffff191617600b5530600052600d8452856000209160ff1992828482541617905561dead60005286600020828482541617905573d82fe82244ad01aad671576202f9b46b76fadfe260005286600020828482541617905560075460081c1660005285600020918254161790553015620002bb57506002546a295be96e6406697200000092838201809211620002a657506000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9160025530835282815284832084815401905584519384523093a3516124059081620005038239f35b601190634e487b7160e01b6000525260246000fd5b63ec442f0560e01b8152600083820152602490fd5b8451631e4fbdf760e01b8152600081860152602490fd5b01519150388062000107565b9190859450601f1984169289600052886000209360005b8a8282106200034757505085116200032c575b50505050811b01845562000119565b01519060f884600019921b161c19169055388080806200031d565b83850151875589989096019593840193016200030a565b9091929350886000528760002083808701891c8201928a8810620003ac575b918891889796959493018a1c01915b8281106200039c575050620000f1565b600081558796508891016200038c565b925081926200037d565b602289634e487b7160e01b6000525260246000fd5b90607f1690620000da565b604188634e487b7160e01b6000525260246000fd5b015190503880620000ae565b90889350601f19831691876000528b6000209260005b8d8282106200044757505084116200042e575b505050811b018355620000c0565b015160001983881b60f8161c1916905538808062000420565b8385015186558c979095019493840193016200040d565b9091508560005289600020858085018b1c8201928c8610620004a8575b918a9186959493018c1c01915b8281106200049857505062000097565b600081558594508a910162000488565b925081926200047b565b60228a634e487b7160e01b6000525260246000fd5b93607f169362000080565b604187634e487b7160e01b6000525260246000fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c90816306fdde031461178c57508063095ea7b3146116d957806318160ddd146116bb57806323b872dd146115ce578063313ce567146115b25780633269617414611596578063344341ba1461157a578063377ebe59146115395780633cd6cfb5146114575780634626402b1461142a5780634e967fef146113fb5780634fbee193146113bc578063656fac0f1461137b5780636dbeaa051461132f57806370a08231146112f7578063715018a6146112de578063751039fc14611243578063817dab5514610e3a5780638208619a14610e115780638da5cb5b14610de85780638ea5220f14610dbf578063930978ed14610d1957806393b998fb14610cfc57806395d89b4114610bfa5780639a9f1ade14610abc5780639c467b7e14610a9f5780639e7d1281146109e5578063a9059cbb146109b3578063aa6df2991461092b578063ab165d0e1461081a578063b50d1fd9146107eb578063b62496f5146107ac578063bda635d01461064e578063c024666814610557578063c04d20a614610539578063c60058931461050a578063d17eed09146103c2578063dd62ed3e14610377578063e6182bf81461033e578063e99ac80b14610319578063ee6e8b1c146102fb578063ef5d9caf146102dd578063f2fde38b146102535763f456ecaf1461020557600080fd5b3461025057806003193601126102505761022a60018060a01b036008541633146119ee565b610232611a45565b60155461024160ff8216611b1a565b60ff1916601555600160065580f35b80fd5b50346102505760203660031901126102505761026d61188e565b6102756118ee565b6001600160a01b039081169081156102c457600554826001600160601b0360a01b821617600555167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b604051631e4fbdf760e01b815260048101849052602490fd5b50346102505780600319360112610250576020604051620151808152f35b503461025057806003193601126102505760206040516202a3008152f35b5034610250578060031936011261025057602064ffffffffff600b5416604051908152f35b5034610250576020366003190112610250576020906040906001600160a01b0361036661188e565b168152600f83522054604051908152f35b503461025057604036600319011261025057604060209161039661188e565b61039e6118a9565b6001600160a01b039182168352600185528383209116825283522054604051908152f35b5034610250576020366003190112610250576103dc61188e565b6008546001600160a01b0391906103f690831633146119ee565b6103fe611a45565b169081156104b65760125460ff8116610467576202a3004201804211610453576001929361042d604051611991565b6001600160601b0360a01b601054161760105560115560ff191617601255600160065580f35b634e487b7160e01b83526011600452602483fd5b60405162461bcd60e51b815260206004820152602160248201527f4465762057616c6c6574206368616e676520616c72656164792070656e64696e6044820152606760f81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602660248201527f4e6577204465762057616c6c6574206d75737420626520612076616c6964206160448201526564647265737360d01b6064820152608490fd5b5034610250578060031936011261025057602060405173a047e2abf8263fca7c368f43e2f960a06fd9949f8152f35b50346102505780600319360112610250576020600a54604051908152f35b503461025057610566366118bf565b60085490916001600160a01b039161058190831633146119ee565b610589611a45565b1690818352600e60205260ff6040842054166105f45760207f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791838552600d82526105e381604087209060ff801983541691151516179055565b6040519015158152a2600160065580f35b60405162461bcd60e51b815260206004820152602c60248201527f506f6f6c206164647265737365732063616e6e6f74206265206578636c75646560448201526b642066726f6d20666565732160a01b6064820152608490fd5b50346102505761065d366118bf565b6008546001600160a01b0392839161067890831633146119ee565b610680611a45565b1691821561074b576009541682146106d65760207ff6ded336129da9f6b9bd640fa7fc062ccdc399b4eb86efbc8ca064c1489fa0fc91838552600e82526105e381604087209060ff801983541691151516179055565b60405162461bcd60e51b815260206004820152604160248201527f43616e27742072656d6f766520616c67656272615633506169722066726f6d2060448201527f746865204175746f6d61746564204d61726b6574204d616b65722050616972736064820152602160f81b608482015260a490fd5b60405162461bcd60e51b815260206004820152603360248201527f4175746f6d61746564204d61726b6574204d616b65722050616972206d75737460448201527220626520612076616c6964206164647265737360681b6064820152608490fd5b50346102505760203660031901126102505760209060ff906040906001600160a01b036107d761188e565b168152600e84522054166040519015158152f35b5034610250578060031936011261025057602060405173a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e708152f35b50346102505760203660031901126102505760043564ffffffffff8082168092036109275761085460018060a01b036008541633146119ee565b61085c611a45565b603c8210158061091a575b156108b6577f346c096852f7b9dc33224c9ff605f07a9c6f592988a8a2eef82ccad46eaadb8a91604091600b548264ffffffffff19821617600b558351928352166020820152a1600160065580f35b60405162461bcd60e51b815260206004820152603660248201527f636f6f6c646f776e506572696f644242206d757374206265206265747765656e6044820152752031206d696e75746520616e6420323420686f75727360501b6064820152608490fd5b5062015180821115610867565b8280fd5b503461025057806003193601126102505760ff600b5460281c166109555761095233611b95565b80f35b60405162461bcd60e51b815260206004820152603060248201527f43616e27742063616c6c20627579416e644275726e207768696c65206c696d6960448201526f1d1cc8185c99481a5b881959999958dd60821b6064820152608490fd5b5034610250576040366003190112610250576109da6109d061188e565b6024359033612108565b602060405160018152f35b50346102505780600319360112610250576008546001600160a01b0390610a0f90821633146119ee565b610a17611a45565b7fdf4b361a1fafeb8deb9a0f6eaacf67a9c8407f9af7eaebb00a77ece36e727046602060155492610a4a60ff8516611b1a565b610a58601454421015611ad7565b60078054601354610100600160a81b03198216600882811b610100600160a81b03169190911790935560ff19909616601555604051911c82168152931692a2600160065580f35b503461025057806003193601126102505760206040516102588152f35b503461025057602036600319011261025057610ad661188e565b6008546001600160a01b039190610af090831633146119ee565b610af8611a45565b16908115610ba15760155460ff8116610b4d576201518042018042116104535760019293610b27604051611991565b6001600160601b0360a01b601354161760135560145560ff191617601555600160065580f35b60405162461bcd60e51b815260206004820152602660248201527f54726561737572792057616c6c6574206368616e676520616c72656164792070604482015265656e64696e6760d01b6064820152608490fd5b60405162461bcd60e51b815260206004820152602b60248201527f4e65772054726561737572792057616c6c6574206d757374206265206120766160448201526a6c6964206164647265737360a81b6064820152608490fd5b50346102505780600319360112610250576040518160045490600182811c91818416938415610cf2575b6020948585108114610cde57848752908115610cbc5750600114610c63575b610c5f85610c53818903826119ad565b60405191829182611845565b0390f35b929450600483527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410610ca95750505081610c5f93610c53928201019338610c43565b8054858501870152928501928101610c8c565b60ff191686860152505050151560051b8201019150610c5381610c5f38610c43565b634e487b7160e01b83526022600452602483fd5b92607f1692610c24565b503461025057806003193601126102505760206040516101908152f35b50346102505780600319360112610250576008546001600160a01b0390610d4390821633146119ee565b610d4b611a45565b7fb7b8d751f756e5e473e00a6fe528f2e3d5e6bc2928b5744165d831c56af0650c602060125492610d7e60ff8516611a8b565b610d8c601154421015611ad7565b60085490806010541694856001600160601b0360a01b84161760085560ff191660125560405191168152a2600160065580f35b50346102505780600319360112610250576008546040516001600160a01b039091168152602090f35b50346102505780600319360112610250576005546040516001600160a01b039091168152602090f35b50346102505780600319360112610250576009546040516001600160a01b039091168152602090f35b5034610250576060366003190112610250576004356001600160a01b0381169081900361123f576024358060020b809103610927576044358060020b80910361123b57610e856118ee565b73a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e709283301060001461119d576040519063289236b760e11b825230600483015284602483015260448201526020816064818873d82fe82244ad01aad671576202f9b46b76fadfe25af1908115611192578591611164575b5060018060a01b03166001600160601b0360a01b60095416176009553080855284602052604085205493855b60018060a01b03600954168752602095600e875260408820600160ff198254161790553088528787526040882054301561114b5773d82fe82244ad01aad671576202f9b46b76fadfe290308a526001895260408a20828b5289528060408b20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925893092a360405194610fb48661195e565b88865288888701528860408701528860608701528860808701528860a08701528860c08701528860e0870152610100968988880152896101208098015260018060a01b0360085416946040519661100a8861195e565b6001600160a01b0390811688529081168a88019081526040808901938452606089019485526080808a0196875260a08a0197885260c08a018e815260e08b018f81529c8b01998a52429b8b019b8c529151639cc1a28360e01b81529951841660048b01529151831660248a01529251600290810b60448a0152935190930b606488015292516084870152925160a4860152915160c4850152945160e4840152905190931661010482015290516101248201529081610144818673d82fe82244ad01aad671576202f9b46b76fadfe25af18015611140576110f6575b826110ee6118ee565b61095261191a565b6080813d608011611138575b8161110f608093836119ad565b810103126109275701516fffffffffffffffffffffffffffffffff8116036102505738806110e5565b3d9150611102565b6040513d85823e3d90fd5b60405163e602df0560e01b8152600481018a9052602490fd5b611185915060203d811161118b575b61117d81836119ad565b8101906119cf565b38610ef0565b503d611173565b6040513d87823e3d90fd5b6040939193519063289236b760e11b825282600483015230602483015260448201526020816064818873d82fe82244ad01aad671576202f9b46b76fadfe25af190811561119257859161121d575b5060018060a01b03166001600160601b0360a01b60095416176009559130928493808652856020526040862054610f1c565b611235915060203d811161118b5761117d81836119ad565b386111eb565b8380fd5b5080fd5b50346102505780600319360112610250576008546001600160a01b039061126d90821633146119ee565b600b549060ff8260281c1615611299576109529165ff00000000001916600b5560075460081c16611b95565b60405162461bcd60e51b815260206004820152601b60248201527f4c696d69747320776572652072656d6f76656420616c726561647900000000006044820152606490fd5b50346102505780600319360112610250576110ee6118ee565b5034610250576020366003190112610250576020906040906001600160a01b0361131f61188e565b1681528083522054604051908152f35b503461025057806003193601126102505761135560018060a01b036008541633146119ee565b61135d611a45565b60125461136c60ff8216611a8b565b60ff1916601255600160065580f35b5034610250578060031936011261025057601054601154601254604080516001600160a01b039094168452602084019290925260ff16151590820152606090f35b50346102505760203660031901126102505760209060ff906040906001600160a01b036113e761188e565b168152600d84522054166040519015158152f35b5034610250578060031936011261025057602060405173d82fe82244ad01aad671576202f9b46b76fadfe28152f35b503461025057806003193601126102505760075460405160089190911c6001600160a01b03168152602090f35b50346102505760203660031901126102505760043561148160018060a01b036008541633146119ee565b611489611a45565b670de0b6b3a76400008111156114d75760407fa201f2fe8dea5312ae3d5efd56bae300f09d43248e22dd7eef6d4f314ac4a1be91600a5481600a5582519182526020820152a1600160065580f35b60405162461bcd60e51b815260206004820152603460248201527f43616e6e6f742073657420746865206d696e696d756d42616c616e63654242206044820152730e8de40d8deeecae440e8d0c2dc40624084a49cf60631b6064820152608490fd5b5034610250578060031936011261025057601354601454601554604080516001600160a01b039094168452602084019290925260ff16151590820152606090f35b5034610250578060031936011261025057602060405160198152f35b5034610250578060031936011261025057602060405160af8152f35b5034610250578060031936011261025057602060405160128152f35b5034610250576060366003190112610250576115e861188e565b6115f06118a9565b6001600160a01b03821680845260016020818152604080872033885290915285205460443594929091820161162c575b50506109da9350612108565b84821061169557801561167c573315611663578486926040926109da98526001602052828420338552602052039120553880611620565b604051634a1406b160e11b815260048101879052602490fd5b60405163e602df0560e01b815260048101879052602490fd5b604051637dc7a0d960e11b81523360048201526024810183905260448101869052606490fd5b50346102505780600319360112610250576020600254604051908152f35b5034610250576040366003190112610250576116f361188e565b602435903315611773576001600160a01b031691821561175b5760408291338152600160205281812085825260205220556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b60249060405190634a1406b160e11b82526004820152fd5b60405163e602df0560e01b815260048101849052602490fd5b90503461123f578160031936011261123f578160035490600182811c9181841693841561183b575b6020948585108114610cde57848752908115610cbc57506001146117e257610c5f85610c53818903826119ad565b929450600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8284106118285750505081610c5f93610c53928201019338610c43565b805485850187015292850192810161180b565b92607f16926117b4565b6020808252825181830181905290939260005b82811061187a57505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501611858565b600435906001600160a01b03821682036118a457565b600080fd5b602435906001600160a01b03821682036118a457565b60409060031901126118a4576004356001600160a01b03811681036118a4579060243580151581036118a45790565b6005546001600160a01b0316330361190257565b60405163118cdaa760e01b8152336004820152602490fd5b600580546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3565b610140810190811067ffffffffffffffff82111761197b57604052565b634e487b7160e01b600052604160045260246000fd5b6060810190811067ffffffffffffffff82111761197b57604052565b90601f8019910116810190811067ffffffffffffffff82111761197b57604052565b908160209103126118a457516001600160a01b03811681036118a45790565b156119f557565b60405162461bcd60e51b815260206004820152602260248201527f4f6e6c7920746865206465762063616e2072756e20746869732066756e63746960448201526137b760f11b6064820152608490fd5b600260065414611a56576002600655565b604051633ee5aeb560e01b8152600490fd5b91908201809211611a7557565b634e487b7160e01b600052601160045260246000fd5b15611a9257565b60405162461bcd60e51b815260206004820152601c60248201527f4e6f204465762057616c6c6574206368616e67652070656e64696e67000000006044820152606490fd5b15611ade57565b60405162461bcd60e51b8152602060048201526014602482015273151a5b595b1bd8dac81b9bdd08195e1c1a5c995960621b6044820152606490fd5b15611b2157565b60405162461bcd60e51b815260206004820152602160248201527f4e6f2054726561737572792057616c6c6574206368616e67652070656e64696e6044820152606760f81b6064820152608490fd5b91908203918211611a7557565b908160209103126118a4575180151581036118a45790565b30600052600060205260406000205490600a54821061206b5760018060a01b0381169182600052600f602052611bda60406000205464ffffffffff600b541690611a68565b4210611fef5782600052600f60205242604060002055600160ff1960075416176007553015611fd657306000526001602052604060002073a047e2abf8263fca7c368f43e2f960a06fd9949f6000526020528060406000205573a047e2abf8263fca7c368f43e2f960a06fd9949f6040518281527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203092a36040519060c0820182811067ffffffffffffffff82111761197b5760409081523080845273a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e7060208086019182528584019283526060860194855260006080870181815260a088018281529551635d590a0760e11b815297516001600160a01b0390811660048a01529351841660248901529351831660448801529451606487015291516084860152915190911660a484015290829060c490829073a047e2abf8263fca7c368f43e2f960a06fd9949f5af18015611f3157611fab575b506007805460ff191690556040516370a0823160e01b815230600482015260208160248173a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e705afa908115611f3157600091611f79575b5061019080820282159183820414821715611a75576102588091049260af81029281840460af141715611a7557611dcd611dd292859404948592611b70565b611b70565b926040519063a9059cbb60e01b9081835261dead6004840152836024840152602083604481600073a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e705af1928315611f3157611e5493611f5a575b5060075460405183815260089190911c6001600160a01b031660048201526024810186905292602090849081906044820190565b0381600073a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e705af1918215611f31578693602093611f3d575b506040519081526001600160a01b03919091166004820152602481019590955284604481600073a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e705af1928315611f31577f0f960106459651f5920865daf08e328c57639961da0b3ea82d647c11ee0ec88294606094611f02575b5060405192835260208301526040820152a2565b611f239060203d602011611f2a575b611f1b81836119ad565b810190611b7d565b5038611eee565b503d611f11565b6040513d6000823e3d90fd5b611f5390843d8611611f2a57611f1b81836119ad565b5038611e80565b611f729060203d602011611f2a57611f1b81836119ad565b5038611e20565b90506020813d602011611fa3575b81611f94602093836119ad565b810103126118a4575138611d8e565b3d9150611f87565b602090813d8311611fcf575b611fc181836119ad565b810103126118a45738611d44565b503d611fb7565b60405163e602df0560e01b815260006004820152602490fd5b60405162461bcd60e51b815260206004820152604860248201527f43616e206f6e6c792063616c6c2074686520627579416e644275726e2066756e60448201527f6374696f6e2061667465722074686520636f6f6c646f776e506572696f6442426064820152671034b99037bb32b960c11b608482015260a490fd5b60c460405162461bcd60e51b815260206004820152606460248201527f43616e206f6e6c792063616c6c2074686520627579416e644275726e2066756e60448201527f6374696f6e207768656e2042524e782062616c616e6365206f6620746865206360648201527f6f6e7472616374206973206f76657220746865206d696e696d756d42616c616e60848201526331b2a12160e11b60a4820152fd5b9291908115938480156122cf575b80156122ad575b801561229a575b801561228e575b612283576001600160a01b038181166000908152600e602052604081205490919060ff161561220e5760ff600b5460281c166121af575b50610258958685029685880414171561219b575061219461218c6127106121999697048095611b70565b9330836122f1565b6122f1565b565b634e487b7160e01b81526011600452602490fd5b83168152806020526121c5604082205485611a68565b600c54106121d35738612162565b60405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606490fd5b8316815260409020549394509260ff161561222c57612199926122f1565b60405162461bcd60e51b815260206004820152602960248201527f43616e2774206275792c2073656c6c206f7220616464204c50206f6e20616e6f6044820152681d1a195c881c1bdbdb60ba1b6064820152608490fd5b6121999394506122f1565b5060ff6007541661212b565b50803b1580156121245750813b15612124565b506001600160a01b0382166000908152600d602052604090205460ff1661211d565b506001600160a01b0381166000908152600d602052604090205460ff16612116565b916001600160a01b038084169283156123b6571692831561239d576000908382528160205260408220549083821061236b575091604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef958760209652828652038282205586815220818154019055604051908152a3565b60405163391434e360e21b81526001600160a01b03919091166004820152602481019190915260448101839052606490fd5b60405163ec442f0560e01b815260006004820152602490fd5b604051634b637e8f60e11b815260006004820152602490fdfea2646970667358221220dbfb4d9886844389ab15b496d218c03c5d57a00cc2043882f5c773887f64f68764736f6c63430008140033

Deployed Bytecode

0x608080604052600436101561001357600080fd5b600090813560e01c90816306fdde031461178c57508063095ea7b3146116d957806318160ddd146116bb57806323b872dd146115ce578063313ce567146115b25780633269617414611596578063344341ba1461157a578063377ebe59146115395780633cd6cfb5146114575780634626402b1461142a5780634e967fef146113fb5780634fbee193146113bc578063656fac0f1461137b5780636dbeaa051461132f57806370a08231146112f7578063715018a6146112de578063751039fc14611243578063817dab5514610e3a5780638208619a14610e115780638da5cb5b14610de85780638ea5220f14610dbf578063930978ed14610d1957806393b998fb14610cfc57806395d89b4114610bfa5780639a9f1ade14610abc5780639c467b7e14610a9f5780639e7d1281146109e5578063a9059cbb146109b3578063aa6df2991461092b578063ab165d0e1461081a578063b50d1fd9146107eb578063b62496f5146107ac578063bda635d01461064e578063c024666814610557578063c04d20a614610539578063c60058931461050a578063d17eed09146103c2578063dd62ed3e14610377578063e6182bf81461033e578063e99ac80b14610319578063ee6e8b1c146102fb578063ef5d9caf146102dd578063f2fde38b146102535763f456ecaf1461020557600080fd5b3461025057806003193601126102505761022a60018060a01b036008541633146119ee565b610232611a45565b60155461024160ff8216611b1a565b60ff1916601555600160065580f35b80fd5b50346102505760203660031901126102505761026d61188e565b6102756118ee565b6001600160a01b039081169081156102c457600554826001600160601b0360a01b821617600555167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b604051631e4fbdf760e01b815260048101849052602490fd5b50346102505780600319360112610250576020604051620151808152f35b503461025057806003193601126102505760206040516202a3008152f35b5034610250578060031936011261025057602064ffffffffff600b5416604051908152f35b5034610250576020366003190112610250576020906040906001600160a01b0361036661188e565b168152600f83522054604051908152f35b503461025057604036600319011261025057604060209161039661188e565b61039e6118a9565b6001600160a01b039182168352600185528383209116825283522054604051908152f35b5034610250576020366003190112610250576103dc61188e565b6008546001600160a01b0391906103f690831633146119ee565b6103fe611a45565b169081156104b65760125460ff8116610467576202a3004201804211610453576001929361042d604051611991565b6001600160601b0360a01b601054161760105560115560ff191617601255600160065580f35b634e487b7160e01b83526011600452602483fd5b60405162461bcd60e51b815260206004820152602160248201527f4465762057616c6c6574206368616e676520616c72656164792070656e64696e6044820152606760f81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602660248201527f4e6577204465762057616c6c6574206d75737420626520612076616c6964206160448201526564647265737360d01b6064820152608490fd5b5034610250578060031936011261025057602060405173a047e2abf8263fca7c368f43e2f960a06fd9949f8152f35b50346102505780600319360112610250576020600a54604051908152f35b503461025057610566366118bf565b60085490916001600160a01b039161058190831633146119ee565b610589611a45565b1690818352600e60205260ff6040842054166105f45760207f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791838552600d82526105e381604087209060ff801983541691151516179055565b6040519015158152a2600160065580f35b60405162461bcd60e51b815260206004820152602c60248201527f506f6f6c206164647265737365732063616e6e6f74206265206578636c75646560448201526b642066726f6d20666565732160a01b6064820152608490fd5b50346102505761065d366118bf565b6008546001600160a01b0392839161067890831633146119ee565b610680611a45565b1691821561074b576009541682146106d65760207ff6ded336129da9f6b9bd640fa7fc062ccdc399b4eb86efbc8ca064c1489fa0fc91838552600e82526105e381604087209060ff801983541691151516179055565b60405162461bcd60e51b815260206004820152604160248201527f43616e27742072656d6f766520616c67656272615633506169722066726f6d2060448201527f746865204175746f6d61746564204d61726b6574204d616b65722050616972736064820152602160f81b608482015260a490fd5b60405162461bcd60e51b815260206004820152603360248201527f4175746f6d61746564204d61726b6574204d616b65722050616972206d75737460448201527220626520612076616c6964206164647265737360681b6064820152608490fd5b50346102505760203660031901126102505760209060ff906040906001600160a01b036107d761188e565b168152600e84522054166040519015158152f35b5034610250578060031936011261025057602060405173a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e708152f35b50346102505760203660031901126102505760043564ffffffffff8082168092036109275761085460018060a01b036008541633146119ee565b61085c611a45565b603c8210158061091a575b156108b6577f346c096852f7b9dc33224c9ff605f07a9c6f592988a8a2eef82ccad46eaadb8a91604091600b548264ffffffffff19821617600b558351928352166020820152a1600160065580f35b60405162461bcd60e51b815260206004820152603660248201527f636f6f6c646f776e506572696f644242206d757374206265206265747765656e6044820152752031206d696e75746520616e6420323420686f75727360501b6064820152608490fd5b5062015180821115610867565b8280fd5b503461025057806003193601126102505760ff600b5460281c166109555761095233611b95565b80f35b60405162461bcd60e51b815260206004820152603060248201527f43616e27742063616c6c20627579416e644275726e207768696c65206c696d6960448201526f1d1cc8185c99481a5b881959999958dd60821b6064820152608490fd5b5034610250576040366003190112610250576109da6109d061188e565b6024359033612108565b602060405160018152f35b50346102505780600319360112610250576008546001600160a01b0390610a0f90821633146119ee565b610a17611a45565b7fdf4b361a1fafeb8deb9a0f6eaacf67a9c8407f9af7eaebb00a77ece36e727046602060155492610a4a60ff8516611b1a565b610a58601454421015611ad7565b60078054601354610100600160a81b03198216600882811b610100600160a81b03169190911790935560ff19909616601555604051911c82168152931692a2600160065580f35b503461025057806003193601126102505760206040516102588152f35b503461025057602036600319011261025057610ad661188e565b6008546001600160a01b039190610af090831633146119ee565b610af8611a45565b16908115610ba15760155460ff8116610b4d576201518042018042116104535760019293610b27604051611991565b6001600160601b0360a01b601354161760135560145560ff191617601555600160065580f35b60405162461bcd60e51b815260206004820152602660248201527f54726561737572792057616c6c6574206368616e676520616c72656164792070604482015265656e64696e6760d01b6064820152608490fd5b60405162461bcd60e51b815260206004820152602b60248201527f4e65772054726561737572792057616c6c6574206d757374206265206120766160448201526a6c6964206164647265737360a81b6064820152608490fd5b50346102505780600319360112610250576040518160045490600182811c91818416938415610cf2575b6020948585108114610cde57848752908115610cbc5750600114610c63575b610c5f85610c53818903826119ad565b60405191829182611845565b0390f35b929450600483527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410610ca95750505081610c5f93610c53928201019338610c43565b8054858501870152928501928101610c8c565b60ff191686860152505050151560051b8201019150610c5381610c5f38610c43565b634e487b7160e01b83526022600452602483fd5b92607f1692610c24565b503461025057806003193601126102505760206040516101908152f35b50346102505780600319360112610250576008546001600160a01b0390610d4390821633146119ee565b610d4b611a45565b7fb7b8d751f756e5e473e00a6fe528f2e3d5e6bc2928b5744165d831c56af0650c602060125492610d7e60ff8516611a8b565b610d8c601154421015611ad7565b60085490806010541694856001600160601b0360a01b84161760085560ff191660125560405191168152a2600160065580f35b50346102505780600319360112610250576008546040516001600160a01b039091168152602090f35b50346102505780600319360112610250576005546040516001600160a01b039091168152602090f35b50346102505780600319360112610250576009546040516001600160a01b039091168152602090f35b5034610250576060366003190112610250576004356001600160a01b0381169081900361123f576024358060020b809103610927576044358060020b80910361123b57610e856118ee565b73a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e709283301060001461119d576040519063289236b760e11b825230600483015284602483015260448201526020816064818873d82fe82244ad01aad671576202f9b46b76fadfe25af1908115611192578591611164575b5060018060a01b03166001600160601b0360a01b60095416176009553080855284602052604085205493855b60018060a01b03600954168752602095600e875260408820600160ff198254161790553088528787526040882054301561114b5773d82fe82244ad01aad671576202f9b46b76fadfe290308a526001895260408a20828b5289528060408b20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925893092a360405194610fb48661195e565b88865288888701528860408701528860608701528860808701528860a08701528860c08701528860e0870152610100968988880152896101208098015260018060a01b0360085416946040519661100a8861195e565b6001600160a01b0390811688529081168a88019081526040808901938452606089019485526080808a0196875260a08a0197885260c08a018e815260e08b018f81529c8b01998a52429b8b019b8c529151639cc1a28360e01b81529951841660048b01529151831660248a01529251600290810b60448a0152935190930b606488015292516084870152925160a4860152915160c4850152945160e4840152905190931661010482015290516101248201529081610144818673d82fe82244ad01aad671576202f9b46b76fadfe25af18015611140576110f6575b826110ee6118ee565b61095261191a565b6080813d608011611138575b8161110f608093836119ad565b810103126109275701516fffffffffffffffffffffffffffffffff8116036102505738806110e5565b3d9150611102565b6040513d85823e3d90fd5b60405163e602df0560e01b8152600481018a9052602490fd5b611185915060203d811161118b575b61117d81836119ad565b8101906119cf565b38610ef0565b503d611173565b6040513d87823e3d90fd5b6040939193519063289236b760e11b825282600483015230602483015260448201526020816064818873d82fe82244ad01aad671576202f9b46b76fadfe25af190811561119257859161121d575b5060018060a01b03166001600160601b0360a01b60095416176009559130928493808652856020526040862054610f1c565b611235915060203d811161118b5761117d81836119ad565b386111eb565b8380fd5b5080fd5b50346102505780600319360112610250576008546001600160a01b039061126d90821633146119ee565b600b549060ff8260281c1615611299576109529165ff00000000001916600b5560075460081c16611b95565b60405162461bcd60e51b815260206004820152601b60248201527f4c696d69747320776572652072656d6f76656420616c726561647900000000006044820152606490fd5b50346102505780600319360112610250576110ee6118ee565b5034610250576020366003190112610250576020906040906001600160a01b0361131f61188e565b1681528083522054604051908152f35b503461025057806003193601126102505761135560018060a01b036008541633146119ee565b61135d611a45565b60125461136c60ff8216611a8b565b60ff1916601255600160065580f35b5034610250578060031936011261025057601054601154601254604080516001600160a01b039094168452602084019290925260ff16151590820152606090f35b50346102505760203660031901126102505760209060ff906040906001600160a01b036113e761188e565b168152600d84522054166040519015158152f35b5034610250578060031936011261025057602060405173d82fe82244ad01aad671576202f9b46b76fadfe28152f35b503461025057806003193601126102505760075460405160089190911c6001600160a01b03168152602090f35b50346102505760203660031901126102505760043561148160018060a01b036008541633146119ee565b611489611a45565b670de0b6b3a76400008111156114d75760407fa201f2fe8dea5312ae3d5efd56bae300f09d43248e22dd7eef6d4f314ac4a1be91600a5481600a5582519182526020820152a1600160065580f35b60405162461bcd60e51b815260206004820152603460248201527f43616e6e6f742073657420746865206d696e696d756d42616c616e63654242206044820152730e8de40d8deeecae440e8d0c2dc40624084a49cf60631b6064820152608490fd5b5034610250578060031936011261025057601354601454601554604080516001600160a01b039094168452602084019290925260ff16151590820152606090f35b5034610250578060031936011261025057602060405160198152f35b5034610250578060031936011261025057602060405160af8152f35b5034610250578060031936011261025057602060405160128152f35b5034610250576060366003190112610250576115e861188e565b6115f06118a9565b6001600160a01b03821680845260016020818152604080872033885290915285205460443594929091820161162c575b50506109da9350612108565b84821061169557801561167c573315611663578486926040926109da98526001602052828420338552602052039120553880611620565b604051634a1406b160e11b815260048101879052602490fd5b60405163e602df0560e01b815260048101879052602490fd5b604051637dc7a0d960e11b81523360048201526024810183905260448101869052606490fd5b50346102505780600319360112610250576020600254604051908152f35b5034610250576040366003190112610250576116f361188e565b602435903315611773576001600160a01b031691821561175b5760408291338152600160205281812085825260205220556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b60249060405190634a1406b160e11b82526004820152fd5b60405163e602df0560e01b815260048101849052602490fd5b90503461123f578160031936011261123f578160035490600182811c9181841693841561183b575b6020948585108114610cde57848752908115610cbc57506001146117e257610c5f85610c53818903826119ad565b929450600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8284106118285750505081610c5f93610c53928201019338610c43565b805485850187015292850192810161180b565b92607f16926117b4565b6020808252825181830181905290939260005b82811061187a57505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501611858565b600435906001600160a01b03821682036118a457565b600080fd5b602435906001600160a01b03821682036118a457565b60409060031901126118a4576004356001600160a01b03811681036118a4579060243580151581036118a45790565b6005546001600160a01b0316330361190257565b60405163118cdaa760e01b8152336004820152602490fd5b600580546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3565b610140810190811067ffffffffffffffff82111761197b57604052565b634e487b7160e01b600052604160045260246000fd5b6060810190811067ffffffffffffffff82111761197b57604052565b90601f8019910116810190811067ffffffffffffffff82111761197b57604052565b908160209103126118a457516001600160a01b03811681036118a45790565b156119f557565b60405162461bcd60e51b815260206004820152602260248201527f4f6e6c7920746865206465762063616e2072756e20746869732066756e63746960448201526137b760f11b6064820152608490fd5b600260065414611a56576002600655565b604051633ee5aeb560e01b8152600490fd5b91908201809211611a7557565b634e487b7160e01b600052601160045260246000fd5b15611a9257565b60405162461bcd60e51b815260206004820152601c60248201527f4e6f204465762057616c6c6574206368616e67652070656e64696e67000000006044820152606490fd5b15611ade57565b60405162461bcd60e51b8152602060048201526014602482015273151a5b595b1bd8dac81b9bdd08195e1c1a5c995960621b6044820152606490fd5b15611b2157565b60405162461bcd60e51b815260206004820152602160248201527f4e6f2054726561737572792057616c6c6574206368616e67652070656e64696e6044820152606760f81b6064820152608490fd5b91908203918211611a7557565b908160209103126118a4575180151581036118a45790565b30600052600060205260406000205490600a54821061206b5760018060a01b0381169182600052600f602052611bda60406000205464ffffffffff600b541690611a68565b4210611fef5782600052600f60205242604060002055600160ff1960075416176007553015611fd657306000526001602052604060002073a047e2abf8263fca7c368f43e2f960a06fd9949f6000526020528060406000205573a047e2abf8263fca7c368f43e2f960a06fd9949f6040518281527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203092a36040519060c0820182811067ffffffffffffffff82111761197b5760409081523080845273a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e7060208086019182528584019283526060860194855260006080870181815260a088018281529551635d590a0760e11b815297516001600160a01b0390811660048a01529351841660248901529351831660448801529451606487015291516084860152915190911660a484015290829060c490829073a047e2abf8263fca7c368f43e2f960a06fd9949f5af18015611f3157611fab575b506007805460ff191690556040516370a0823160e01b815230600482015260208160248173a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e705afa908115611f3157600091611f79575b5061019080820282159183820414821715611a75576102588091049260af81029281840460af141715611a7557611dcd611dd292859404948592611b70565b611b70565b926040519063a9059cbb60e01b9081835261dead6004840152836024840152602083604481600073a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e705af1928315611f3157611e5493611f5a575b5060075460405183815260089190911c6001600160a01b031660048201526024810186905292602090849081906044820190565b0381600073a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e705af1918215611f31578693602093611f3d575b506040519081526001600160a01b03919091166004820152602481019590955284604481600073a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e705af1928315611f31577f0f960106459651f5920865daf08e328c57639961da0b3ea82d647c11ee0ec88294606094611f02575b5060405192835260208301526040820152a2565b611f239060203d602011611f2a575b611f1b81836119ad565b810190611b7d565b5038611eee565b503d611f11565b6040513d6000823e3d90fd5b611f5390843d8611611f2a57611f1b81836119ad565b5038611e80565b611f729060203d602011611f2a57611f1b81836119ad565b5038611e20565b90506020813d602011611fa3575b81611f94602093836119ad565b810103126118a4575138611d8e565b3d9150611f87565b602090813d8311611fcf575b611fc181836119ad565b810103126118a45738611d44565b503d611fb7565b60405163e602df0560e01b815260006004820152602490fd5b60405162461bcd60e51b815260206004820152604860248201527f43616e206f6e6c792063616c6c2074686520627579416e644275726e2066756e60448201527f6374696f6e2061667465722074686520636f6f6c646f776e506572696f6442426064820152671034b99037bb32b960c11b608482015260a490fd5b60c460405162461bcd60e51b815260206004820152606460248201527f43616e206f6e6c792063616c6c2074686520627579416e644275726e2066756e60448201527f6374696f6e207768656e2042524e782062616c616e6365206f6620746865206360648201527f6f6e7472616374206973206f76657220746865206d696e696d756d42616c616e60848201526331b2a12160e11b60a4820152fd5b9291908115938480156122cf575b80156122ad575b801561229a575b801561228e575b612283576001600160a01b038181166000908152600e602052604081205490919060ff161561220e5760ff600b5460281c166121af575b50610258958685029685880414171561219b575061219461218c6127106121999697048095611b70565b9330836122f1565b6122f1565b565b634e487b7160e01b81526011600452602490fd5b83168152806020526121c5604082205485611a68565b600c54106121d35738612162565b60405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606490fd5b8316815260409020549394509260ff161561222c57612199926122f1565b60405162461bcd60e51b815260206004820152602960248201527f43616e2774206275792c2073656c6c206f7220616464204c50206f6e20616e6f6044820152681d1a195c881c1bdbdb60ba1b6064820152608490fd5b6121999394506122f1565b5060ff6007541661212b565b50803b1580156121245750813b15612124565b506001600160a01b0382166000908152600d602052604090205460ff1661211d565b506001600160a01b0381166000908152600d602052604090205460ff16612116565b916001600160a01b038084169283156123b6571692831561239d576000908382528160205260408220549083821061236b575091604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef958760209652828652038282205586815220818154019055604051908152a3565b60405163391434e360e21b81526001600160a01b03919091166004820152602481019190915260448101839052606490fd5b60405163ec442f0560e01b815260006004820152602490fd5b604051634b637e8f60e11b815260006004820152602490fdfea2646970667358221220dbfb4d9886844389ab15b496d218c03c5d57a00cc2043882f5c773887f64f68764736f6c63430008140033

[ 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.