ETH Price: $3,448.93 (-0.77%)
Gas: 2 Gwei

Token

Magic Bag (FELIX)
 

Overview

Max Total Supply

97,623,029.37102451162100196 FELIX

Holders

188

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000010157222 FELIX

Value
$0.00
0xcad61df6c12eee40beee5053a065291e1ad2c947
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MagicBag

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 9 : MB_VERIFY.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol";
import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol";
import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol";
import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol";

contract MagicBag is Ownable, IERC20 {
    using SafeMath for uint256;

    string  private _name;
    string  private _symbol;
    uint8   private _decimals;
    uint256 private _totalSupply;

    uint256 public maxWalletLimit;
    uint256 public maxTxLimit;

    address payable public treasury;
    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;

    uint256 public buyTax;
    uint256 public sellTax;
    bool    public tradingActive;

    uint256 public totalBurned;
    uint256 public totalLpAdded;
    uint256 public totalReflected;
    uint256 public totalTreasury;
    bool    public burnStatus;
    bool    public autoLpStatus;
    bool    public reflectionStatus;
    bool    public treasuryStatus;

    uint256 public swapableRefection;
    uint256 public swapableTreasury;

    IUniswapV2Router02 public dexRouter; 
    address public lpPair;

    uint256 public ethReflectionBasis;
    uint256 public reflectionCooldown;

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

    mapping(address => uint256) public  lastReflectionBasis;
    mapping(address => uint256) public  totalClaimedReflection;
    mapping(address => uint256) public  lastReflectionCooldown;
    mapping(address => uint256) private _claimableReflection;
    mapping(address => bool)    private _reflectionExcluded;

    mapping(address => bool) public  lpPairs;
    mapping(address => bool) private _isExcludedFromTax;
    mapping(address => bool) private _bots;

    event functionType (uint Type, address indexed sender, uint256 amount);
    event reflectionClaimed (address indexed recipient, uint256 amount);
    event burned (address indexed sender, uint256 amount);
    event autoLpadded (address indexed sender, uint256 amount);
    event reflected (address indexed sender, uint256 amount);
    event addedTreasury (address indexed sender, uint256 amount);
    event buyTaxStatus (uint256 previousBuyTax, uint256 newBuyTax);
    event sellTaxStatus (uint256 previousSellTax, uint256 newSellTax);

    constructor(string memory name_, 
                string memory symbol_,
                uint256 totalSupply_,
                address payable _treasury,
                uint256 _reflectionCooldown,
                uint256 maxTxLimit_, 
                uint256 maxWalletLimit_) {
        _name              = name_;
        _symbol            = symbol_;
        _decimals          = 18;
        _totalSupply       = totalSupply_.mul(10 ** _decimals);
        _balances[owner()] = _balances[owner()].add(_totalSupply);

        treasury       = payable(_treasury);
        sellTax        = 40;
        buyTax         = 10;
        maxTxLimit     = maxTxLimit_;
        maxWalletLimit = maxWalletLimit_;
        reflectionCooldown = _reflectionCooldown; 

        // BSC Router: 0xD99D1c33F9fC3444f8101754aBC46c52416550D1
        // ETH Router: 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        dexRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        lpPair    = IUniswapV2Factory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());
        lpPairs[lpPair] = true;

        _approve(owner(), address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);

        _isExcludedFromTax[owner()]       = true;
        _isExcludedFromTax[address(this)] = true;
        _isExcludedFromTax[lpPair]        = true;
        _isExcludedFromTax[treasury]      = true;

        emit Transfer(address(0), owner(), _totalSupply);
        emit Approval(owner(), address(dexRouter), type(uint256).max);
        emit Approval(address(this), address(dexRouter), type(uint256).max);
    }

    receive() external payable {}

    /// @notice ERC20 functionalities

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

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

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

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

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

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

    function _approve(address sender, address spender, uint256 amount) internal {
        require(sender  != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

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

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        address _sender = _msgSender();
        require(_sender   != address(0), "ERC20: Zero Address");
        require(recipient != address(0), "ERC20: Zero Address");
        require(recipient != DEAD, "ERC20: Dead Address");
        require(_balances[_sender] >= amount, "ERC20: Amount exceeds account balance");

        _transfer(_sender, recipient, amount);

        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        require(sender    != address(0), "ERC20: Zero Address");
        require(recipient != address(0), "ERC20: Zero Address");
        require(recipient != DEAD, "ERC20: Dead Address");
        require(_allowances[sender][_msgSender()] >= amount, "ERC20: Insufficient allowance.");
        require(_balances[sender] >= amount, "ERC20: Amount exceeds sender's account balance");

        if (_allowances[sender][_msgSender()] != type(uint256).max) {
            _allowances[sender][_msgSender()]  = _allowances[sender][_msgSender()].sub(amount);
        }
        _transfer(sender, recipient, amount);

        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(_bots[sender] == false && _bots[recipient] == false, "ERC20: Bots can't trade");

        if (sender == owner() && lpPairs[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        }
        else if (lpPairs[sender] || lpPairs[recipient]){
            require(tradingActive == true, "ERC20: Trading is not active.");
            
            if (_isExcludedFromTax[sender] && !_isExcludedFromTax[recipient]){
                if (_checkMaxWalletLimit(recipient, amount) && _checkMaxTxLimit(amount)) {
                    _transferFromExcluded(sender, recipient, amount);//buy
                } 
            }   
            else if (!_isExcludedFromTax[sender] && _isExcludedFromTax[recipient]){
                if (_checkMaxTxLimit(amount)) {
                    _transferToExcluded(sender, recipient, amount);//sell
                }
            }
            else if (_isExcludedFromTax[sender] && _isExcludedFromTax[recipient]) {
                if (sender == owner() || recipient == owner() || sender == address(this) || recipient == address(this)) {
                    _transferBothExcluded(sender, recipient, amount);
                } else if (lpPairs[recipient]) {
                    if (_checkMaxTxLimit(amount)) {
                        _transferBothExcluded(sender, recipient, amount);
                    }
                } else if (_checkMaxWalletLimit(recipient, amount) && _checkMaxTxLimit(amount)){
                    _transferBothExcluded(sender, recipient, amount);
                }
            } 
        } else {
            if (sender == owner() || recipient == owner() || sender == address(this) || recipient == address(this)) {
                    _transferBothExcluded(sender, recipient, amount);
            } else if(_checkMaxWalletLimit(recipient, amount) && _checkMaxTxLimit(amount)){
                    _transferBothExcluded(sender, recipient, amount);
            }
        }
    }

    function _transferFromExcluded(address sender, address recipient, uint256 amount) private { //Buy
        uint256 _randomNumber = _generateRandomNumber();
        uint256 taxAmount     = amount.mul(buyTax).div(100);
        uint256 receiveAmount = amount.sub(taxAmount);

        _claimableReflection[recipient] = _claimableReflection[recipient].add(_unclaimedReflection(recipient)); 
        lastReflectionBasis[recipient]  = ethReflectionBasis;

        _balances[sender]    = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(receiveAmount);
        _balances[address(this)] = _balances[address(this)].add(taxAmount);

        if (_randomNumber == 1) {
            _balances[address(this)] = _balances[address(this)].sub(taxAmount);
            _burn(recipient, taxAmount);
        } else if (_randomNumber == 2) {
            _balances[address(this)] = _balances[address(this)].sub(taxAmount);
            _autoLp(recipient, taxAmount);
        } else if (_randomNumber == 3) {
            swapableRefection = swapableRefection.add(taxAmount);
            totalReflected    = totalReflected.add(taxAmount);
            emit reflected(recipient, taxAmount);
        } else if(_randomNumber == 4) {
            swapableTreasury = swapableTreasury.add(taxAmount);
            totalTreasury    = totalTreasury.add(taxAmount);
            emit addedTreasury(recipient, taxAmount);
        }

        emit functionType(_randomNumber, sender, taxAmount);
        emit Transfer(sender, recipient, amount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 amount) private { //Sell
        uint256 _randomNumber = _generateRandomNumber();
        uint256 taxAmount     = amount.mul(sellTax).div(100);
        uint256 sentAmount = amount.sub(taxAmount);

        _balances[sender]    = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(sentAmount);
        _balances[address(this)] = _balances[address(this)].add(taxAmount);

        if(_balances[sender] == 0) {
            _claimableReflection[recipient] = 0;
        }

        if (_randomNumber == 1) {
            _balances[address(this)] = _balances[address(this)].sub(taxAmount);
            _burn(sender, taxAmount);
        } else if (_randomNumber == 2) {
            _balances[address(this)] = _balances[address(this)].sub(taxAmount);
            _autoLp(sender, taxAmount);
        } else if (_randomNumber == 3) {
            swapableRefection = swapableRefection.add(taxAmount);
            totalReflected    = totalReflected.add(taxAmount);
            emit reflected(sender, taxAmount);
        } else if(_randomNumber == 4) {
            swapableTreasury = swapableTreasury.add(taxAmount);
            totalTreasury    = totalTreasury.add(taxAmount);
            emit addedTreasury(sender, taxAmount);
        }

        emit functionType(_randomNumber, sender, taxAmount);
        emit Transfer(sender, recipient, amount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 amount) private {
        if(recipient == owner() || recipient == address(this)){
            _balances[sender]    = _balances[sender].sub(amount);
            _balances[recipient] = _balances[recipient].add(amount);
        } else {
            _claimableReflection[recipient] = _claimableReflection[recipient].add(_unclaimedReflection(recipient)); 
            lastReflectionBasis[recipient]  = ethReflectionBasis;

            _balances[sender]    = _balances[sender].sub(amount);
            _balances[recipient] = _balances[recipient].add(amount);
        }
        emit Transfer(sender, recipient, amount);
    }

    /// @notice Burn Functionalities

    function burn(uint256 amount) public returns (bool) {
        address sender = _msgSender();
        require(_balances[sender] >= amount, "ERC20: Burn Amount exceeds account balance");
        require(amount > 0, "ERC20: Enter some amount to burn");

        _balances[sender] = _balances[sender].sub(amount);
        _burn(sender, amount);

        return true;
    }

    function _burn(address from, uint256 amount) internal {
        _totalSupply = _totalSupply.sub(amount);
        totalBurned  = totalBurned.add(amount);

        emit Transfer(from, address(0), amount);
        emit burned(from, amount);
    }

    /// @notice AutoLp Functionalities

    function _autoLp(address from, uint256 amount) private {
        if (amount > 0) {
            _balances[lpPair]  = _balances[lpPair].add(amount);
            totalLpAdded = totalLpAdded.add(amount);

            emit Transfer(from, lpPair, amount);
            emit autoLpadded(from, amount);
        }
    }

    /// @notice Reflection Functionalities

    function addReflection() public payable returns (bool) {
        ethReflectionBasis = ethReflectionBasis.add(msg.value);
        return true;
    }

    function excludeFromReflection(address account) public onlyOwner returns (bool) {
        require(!_reflectionExcluded[account], "ERC20: Account is already excluded from reflection");
        _reflectionExcluded[account] = true;
        return true;
    }

    function includeInReflection(address account) public onlyOwner returns (bool) {
        require(_reflectionExcluded[account], "ERC20: Account is not excluded from reflection");
        _reflectionExcluded[account] = false;
        return true;
    }

    function isReflectionExcluded(address account) public view returns (bool) {
        return _reflectionExcluded[account];
    }

    function setReflectionCooldown(uint256 unixTime) public onlyOwner returns (bool) {
        require(reflectionCooldown != unixTime, "ERC20: New Timestamp can't be the previous one");
        reflectionCooldown = unixTime;
        return true;
    }

    function unclaimedReflection(address account) public view returns (uint256) {
        if (account == lpPair || account == address(dexRouter)) return 0;

        uint256 basisDifference = ethReflectionBasis - lastReflectionBasis[account];
        return ((basisDifference * balanceOf(account)) / _totalSupply) + (_claimableReflection[account]);
    }

    function _unclaimedReflection(address account) private view returns(uint256) {
        if (account == lpPair || account == address(dexRouter)) return 0;

        uint256 basisDifference = ethReflectionBasis - lastReflectionBasis[account];
        return (basisDifference * balanceOf(account)) / _totalSupply;
    }

    function claimReflection() external returns (bool) {
        address sender = _msgSender(); 
        require(!_isContract(sender), "ERC20: Sender can't be a contract"); 
        require(lastReflectionCooldown[sender] + reflectionCooldown <= block.timestamp, "ERC20: Reflection cool down is implemented, try again later");
        _claimReflection(payable(sender));
        return true;
    }

    function _claimReflection(address payable account) private {
        uint256 unclaimed = unclaimedReflection(account);
        require(unclaimed > 0, "ERC20: Claim amount should be more then 0");
        require(isReflectionExcluded(account) == false, "ERC20: Address is excluded to claim reflection");
        
        lastReflectionBasis[account]  = ethReflectionBasis;
        lastReflectionCooldown[account] = block.timestamp;
        _claimableReflection[account] = 0;
        account.transfer(unclaimed);

        totalClaimedReflection[account] = totalClaimedReflection[account].add(unclaimed);
        emit reflectionClaimed(account, unclaimed);
    }

    /// @notice Magic Bag Functionalities

    function enableTrading() public onlyOwner returns (bool) {
        require(tradingActive == false, "ERC20: Trading is already active");
        tradingActive = true;
        return true;
    }

    function disableTrading() public onlyOwner returns (bool) {
        require(tradingActive == true, "ERC20: Trading is already un-active");
        tradingActive = false;
        return true;
    }

    function setBuyTax(uint256 _buyTax) public onlyOwner returns (bool) {
        require(_buyTax <= 15, "ERC20: The buy tax can't be more then 15 percentage");
        uint256 _prevBuyTax = buyTax;
        buyTax = _buyTax;

        emit buyTaxStatus(_prevBuyTax, buyTax);
        return true;
    }

    function setSellTax(uint256 _sellTax) public onlyOwner returns (bool) {
        require(_sellTax <= 15, "ERC20: The sell tax can't be more then 15 percentage");
        uint256 _prevSellTax = sellTax;
        sellTax = _sellTax;

        emit sellTaxStatus(_prevSellTax, sellTax);
        return true;
    }

    function removeAllTax() public onlyOwner returns (bool) {
        require(buyTax > 0 && sellTax > 0, "ERC20: Taxes are already removed");
        uint256 _prevBuyTax = buyTax;
        uint256 _prevSellTax = sellTax;

        buyTax  = 0;
        sellTax = 0;

        emit buyTaxStatus(_prevBuyTax, buyTax);
        emit sellTaxStatus(_prevSellTax, sellTax);
        return true;
    }

    function reduceTaxes() public onlyOwner returns (bool) {
        uint256 _prevBuyTax = buyTax;
        uint256 _prevSellTax = sellTax;

        buyTax  = 5;
        sellTax = 5;

        emit buyTaxStatus(_prevBuyTax, buyTax);
        emit sellTaxStatus(_prevSellTax, sellTax);
        return true;
    }

    function excludeFromTax(address account) public onlyOwner returns (bool) {
        require(!_isExcludedFromTax[account], "ERC20: Account is already excluded from tax");
        _isExcludedFromTax[account] = true;
        return true;
    }

    function includeInTax(address account) public onlyOwner returns (bool) {
        require(_isExcludedFromTax[account], "ERC20: Account is already included from tax");
        _isExcludedFromTax[account] = false;
        return true;
    }

    function isExcludedFromTax(address account) public view returns (bool) {
        return _isExcludedFromTax[account];
    }

    function setTreasuryAddress(address payable account) public onlyOwner returns (bool) {
        require(treasury != account, "ERC20: Account is already treasury address");
        treasury = account;
        return true;
    }

    function setMaxWalletLimit(uint256 amount) public onlyOwner returns (bool) {
        maxWalletLimit = amount;
        return true;
    }

    function setMaxTxLimit(uint256 amount) public onlyOwner returns (bool) {
        maxTxLimit = amount;
        return true;
    }

    function addBot(address botAccount) public onlyOwner returns (bool) {
        _bots[botAccount] = true;
        return true;
    }

    function addBotsInBulk(address[] memory botsAccounts) public onlyOwner returns (bool) {
        for(uint i = 0; i < botsAccounts.length; i++) {
            _bots[botsAccounts[i]] = true;
        }
        return true;
    }

    function removeBot(address botAccount) public onlyOwner returns (bool) {
        _bots[botAccount] = false;
        return true;
    }

    function isBot(address botAccount) public view returns (bool) {
        return _bots[botAccount];
    }

    function setLpPair(address LpAddress, bool status) public onlyOwner returns (bool) {
        lpPairs[LpAddress] = status;
        _isExcludedFromTax[LpAddress] = status;

        return true;
    }

    function swapReflection(uint256 amount) public onlyOwner returns (bool) {
        require(swapableRefection > 0, "ERC20: There are no tokens to swap");
        require(swapableRefection >= amount, "ERC20: Low swapable reflection");
 
        uint256 currentBalance = address(this).balance;
        _swap(address(this), amount);
        swapableRefection = swapableRefection - amount;

        uint256 ethTransfer = (address(this).balance).sub(currentBalance);
        ethReflectionBasis  = ethReflectionBasis.add(ethTransfer);
        return true;
    }

    function swapTreasury(uint256 amount) public returns (bool) { // add only owner
        require(swapableTreasury > 0, "ERC20: There are no tokens to swap");
        require(swapableTreasury >= amount, "ERC20: Low swapable reflection");

        _swap(treasury, amount);
        swapableTreasury = swapableTreasury - amount;

        return true;
    }

    function recoverAllEth(address to) public onlyOwner returns (bool) {
        payable(to).transfer(address(this).balance);
        return true;
    }

    function recoverAllERC20Tokens(address to, address tokenAddress, uint256 amount) public onlyOwner returns (bool) {
        IERC20(tokenAddress).transfer(to, amount);
        return true;
    }

    /// @notice Magical Functionalities

    function pauseBurn() public onlyOwner returns (bool) {
        require(burnStatus == false, "ERC20: Token Burn is already paused");

        if(autoLpStatus == true && reflectionStatus == true && treasuryStatus == true) {
            revert("ERC20: All four functionalities can't get paused at the same time");
        } else {
            burnStatus = true;
        }
        return true;
    }

    function pauseAutoLp() public onlyOwner returns (bool) {
        require(autoLpStatus == false, "ERC20: Auto LP is already paused");

        if(burnStatus == true && reflectionStatus == true && treasuryStatus == true) {
            revert("ERC20: All four functionalities can't get paused at the same time");
        } else {
            autoLpStatus = true;
        }
        return true;
    }

    function pauseReflection() public onlyOwner returns (bool) {
        require(reflectionStatus == false, "ERC20: Reflection is already paused");

        if(burnStatus == true && autoLpStatus == true && treasuryStatus == true) {
            revert("ERC20: All four functionalities can't get paused at the same time");
        } else {
            reflectionStatus = true;
        }
        return true;
    }

    function pauseTreasury() public onlyOwner returns (bool) {
        require(treasuryStatus == false, "ERC20: Treasury is already paused");

        if(burnStatus == true && autoLpStatus == true && reflectionStatus == true) {
            revert("ERC20: All four functionalities can't get paused at the same time");
        } else {
            treasuryStatus = true;
        }
        return true;
    }

    function unpauseBurn() public onlyOwner returns (bool) {
        require(burnStatus == true, "ERC20: Token Burn is already not paused");
        burnStatus = false;
        return true;
    }

    function unpauseAutoLp() public onlyOwner returns (bool) {
        require(autoLpStatus == true, "ERC20: Auto LP is already not paused");
        autoLpStatus = false;
        return true;
    }

    function unpauseReflection() public onlyOwner returns (bool) {
        require(reflectionStatus == true, "ERC20: Reflection is already not paused");
        reflectionStatus = false;
        return true;
    }

    function unpauseTreasury() public onlyOwner returns (bool) {
        require(treasuryStatus == true, "ERC20: Treasury is already paused");
        treasuryStatus = false;
        return true;
    }

    /// @notice Private Functionalities 

    function _generateRandomNumber() private view returns (uint256) {
        uint256 returnNumber;
        uint256 rem1 = uint256(keccak256(abi.encodePacked(block.timestamp, block.difficulty, block.gaslimit, tx.origin, block.number, tx.gasprice))) % 2;
        uint256 rem2 = uint256(keccak256(abi.encodePacked(block.timestamp, block.difficulty, block.gaslimit, tx.origin, block.number, tx.gasprice))) % 3; 

        if(burnStatus == true && autoLpStatus == true && reflectionStatus == true) { 
            returnNumber = 4;
        } 
        else if(burnStatus == true && autoLpStatus == true && treasuryStatus == true) {
            returnNumber = 3;
        } 
        else if(burnStatus == true && reflectionStatus == true && treasuryStatus == true) {
            returnNumber = 2;
        } 
        else if(autoLpStatus == true && reflectionStatus == true && treasuryStatus == true) {
            returnNumber = 1;
        } 
        
        else if(burnStatus == true && autoLpStatus == true) {
            if (rem1 == 0) {returnNumber = 3;}
            else if (rem1 == 1) {returnNumber = 4;}
        } 
        else if(burnStatus == true && reflectionStatus == true) {
            if (rem1 == 0) {returnNumber = 2;}
            else if (rem1 == 1) {returnNumber = 4;}
        } 
        else if(burnStatus == true && treasuryStatus == true) {
            if (rem1 == 0) {returnNumber = 2;}
            else if (rem1 == 1) {returnNumber = 3;}
        } 
        else if(autoLpStatus == true && reflectionStatus == true) {
            if (rem1 == 0) {returnNumber = 1;}
            else if (rem1 == 1) {returnNumber = 4;}
        } else if(autoLpStatus == true && treasuryStatus == true) {
            if (rem1 == 0) {returnNumber = 1;}
            else if (rem1 == 1) {returnNumber = 3;}
        } 
        else if(reflectionStatus == true && treasuryStatus == true) {
            if (rem1 == 0) {returnNumber = 1;}
            else if (rem1 == 1) {returnNumber = 2;}
        } 

        else if(burnStatus == true) {
            returnNumber = (uint256(keccak256(abi.encodePacked(block.timestamp, block.difficulty, block.gaslimit, tx.origin, block.number, tx.gasprice))) % 3) + 2;
        }
        else if(autoLpStatus == true) {
            if(rem2 == 0) {returnNumber = 1;}
            else if(rem2 == 1) {returnNumber = 3;}
            else if(rem2 == 2) {returnNumber = 4;}
        }
        else if(reflectionStatus == true) {
            if(rem2 == 0) {returnNumber = 1;}
            else if(rem2 == 1) {returnNumber = 2;}
            else if(rem2 == 2) {returnNumber = 4;}
        }
        else if(treasuryStatus == true) {
            returnNumber = (uint256(keccak256(abi.encodePacked(block.timestamp, block.difficulty, block.gaslimit, tx.origin, block.number, tx.gasprice))) % 3) + 1;
        }
        else {
            returnNumber = (uint256(keccak256(abi.encodePacked(block.timestamp, block.difficulty, block.gaslimit, tx.origin, block.number, tx.gasprice))) % 4) + 1;
        }

        return returnNumber;
    }

    function _checkMaxWalletLimit(address recipient, uint256 amount) private view returns (bool) {
        require(maxWalletLimit >= balanceOf(recipient).add(amount), "ERC20: Wallet limit exceeds");
        return true;
    }

    function _checkMaxTxLimit(uint256 amount) private view returns (bool) {
        require(amount <= maxTxLimit, "ERC20: Transaction limit exceeds");
        return true;
    }

    function _isContract(address _addr) private view returns (bool){
        uint32 size;
        assembly {
            size := extcodesize(_addr)
        }
        return (size > 0);
    }

    function _swap(address recipient, uint256 amount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETH(
            amount,
            0,
            path,
            recipient, 
            block.timestamp
        );
    }
}

File 2 of 9 : IUniswapV2Router02.sol
pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

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

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

File 3 of 9 : IUniswapV2Router01.sol
pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

File 4 of 9 : IUniswapV2Factory.sol
pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

File 5 of 9 : IUniswapV2Pair.sol
pragma solidity >=0.5.0;

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

File 6 of 9 : Ownable.sol
// 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);
    }
}

File 7 of 9 : SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint256","name":"totalSupply_","type":"uint256"},{"internalType":"address payable","name":"_treasury","type":"address"},{"internalType":"uint256","name":"_reflectionCooldown","type":"uint256"},{"internalType":"uint256","name":"maxTxLimit_","type":"uint256"},{"internalType":"uint256","name":"maxWalletLimit_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addedTreasury","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"autoLpadded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previousBuyTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBuyTax","type":"uint256"}],"name":"buyTaxStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"Type","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"functionType","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"reflected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"reflectionClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previousSellTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellTax","type":"uint256"}],"name":"sellTaxStatus","type":"event"},{"inputs":[{"internalType":"address","name":"botAccount","type":"address"}],"name":"addBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"botsAccounts","type":"address[]"}],"name":"addBotsInBulk","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addReflection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLpStatus","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReflection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethReflectionBasis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReflection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReflection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"botAccount","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isReflectionExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastReflectionBasis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastReflectionCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lpPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","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":"pauseAutoLp","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseReflection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseTreasury","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverAllERC20Tokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"recoverAllEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reduceTaxes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reflectionCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeAllTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"botAccount","type":"address"}],"name":"removeBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyTax","type":"uint256"}],"name":"setBuyTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"LpAddress","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setLpPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTxLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"unixTime","type":"uint256"}],"name":"setReflectionCooldown","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellTax","type":"uint256"}],"name":"setSellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"setTreasuryAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swapReflection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swapTreasury","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapableRefection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapableTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalClaimedReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLpAdded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unclaimedReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpauseAutoLp","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseReflection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseTreasury","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5060405162004c5538038062004c558339810160408190526200003491620007e7565b6200003f33620004f6565b8651620000549060019060208a01906200065b565b5085516200006a9060029060208901906200065b565b506003805460ff19166012908117909155620000a2906200008d90600a620009a1565b866200054660201b6200249f1790919060201c565b6004819055620000f89060166000620000c36000546001600160a01b031690565b6001600160a01b03166001600160a01b03168152602001908152602001600020546200055d60201b620024ab1790919060201c565b601660006200010f6000546001600160a01b031690565b6001600160a01b039081168252602080830193909352604091820160002093909355600780549388166001600160a01b03199485161790556028600955600a60085560068590556005849055601586905560128054909316737a250d5630b4cf539739df2c5dacb4c659f2488d908117909355805163c45a015560e01b8152905163c45a015592600483810193919291829003018186803b158015620001b457600080fd5b505afa158015620001c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ef9190620009b2565b6001600160a01b031663c9c6539630601260009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200024d57600080fd5b505afa15801562000262573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002889190620009b2565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002d157600080fd5b505af1158015620002e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030c9190620009b2565b601380546001600160a01b0319166001600160a01b039283169081179091556000908152601d60205260408120805460ff19166001179055546200036091166012546001600160a01b03166000196200056b565b6012546200037c9030906001600160a01b03166000196200056b565b6001601e6000620003956000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152601e909352818320805485166001908117909155601354821684528284208054861682179055600754909116835291208054909216179055620004116000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6004546040516200045991815260200190565b60405180910390a36012546001600160a01b0316620004806000546001600160a01b031690565b6001600160a01b031660008051602062004c35833981519152600019604051620004ac91815260200190565b60405180910390a360125460405160001981526001600160a01b0390911690309060008051602062004c358339815191529060200160405180910390a35050505050505062000a53565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000620005548284620009d9565b90505b92915050565b6000620005548284620009fb565b6001600160a01b038316620005bd5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b0382166200060b5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401620005b4565b6001600160a01b03838116600081815260176020908152604080832094871680845294825291829020859055905184815260008051602062004c35833981519152910160405180910390a3505050565b828054620006699062000a16565b90600052602060002090601f0160209004810192826200068d5760008555620006d8565b82601f10620006a857805160ff1916838001178555620006d8565b82800160010185558215620006d8579182015b82811115620006d8578251825591602001919060010190620006bb565b50620006e6929150620006ea565b5090565b5b80821115620006e65760008155600101620006eb565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200072957600080fd5b81516001600160401b038082111562000746576200074662000701565b604051601f8301601f19908116603f0116810190828211818310171562000771576200077162000701565b816040528381526020925086838588010111156200078e57600080fd5b600091505b83821015620007b2578582018301518183018401529082019062000793565b83821115620007c45760008385830101525b9695505050505050565b6001600160a01b0381168114620007e457600080fd5b50565b600080600080600080600060e0888a0312156200080357600080fd5b87516001600160401b03808211156200081b57600080fd5b620008298b838c0162000717565b985060208a01519150808211156200084057600080fd5b506200084f8a828b0162000717565b9650506040880151945060608801516200086981620007ce565b809450506080880151925060a0880151915060c0880151905092959891949750929550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620008e5578160001904821115620008c957620008c96200088e565b80851615620008d757918102915b93841c9390800290620008a9565b509250929050565b600082620008fe5750600162000557565b816200090d5750600062000557565b8160018114620009265760028114620009315762000951565b600191505062000557565b60ff8411156200094557620009456200088e565b50506001821b62000557565b5060208310610133831016604e8410600b841016171562000976575081810a62000557565b620009828383620008a4565b80600019048211156200099957620009996200088e565b029392505050565b60006200055460ff841683620008ed565b600060208284031215620009c557600080fd5b8151620009d281620007ce565b9392505050565b6000816000190483118215151615620009f657620009f66200088e565b500290565b6000821982111562000a115762000a116200088e565b500190565b600181811c9082168062000a2b57607f821691505b6020821081141562000a4d57634e487b7160e01b600052602260045260246000fd5b50919050565b6141d28062000a636000396000f3fe60806040526004361061042a5760003560e01c80636605bfda1161022957806395d89b411161012e578063cc1776d3116100b6578063dd62ed3e1161007a578063dd62ed3e14610c40578063e17c4c7414610c86578063f2fde38b14610ca6578063f48fd0e014610cc6578063ffecf51614610ce757600080fd5b8063cc1776d314610bbf578063d448a07014610bd5578063d83646bb14610bea578063d89135cd14610c0a578063dc1052e214610c2057600080fd5b8063b4fe8f6a116100fd578063b4fe8f6a14610b22578063ba53b52214610b37578063bbc0c74214610b57578063c2cc176914610b71578063cb4ca63114610b8657600080fd5b806395d89b4114610ac2578063a5332f2d14610ad7578063a6559fe414610aed578063a9059cbb14610b0257600080fd5b806380c581d1116101b15780638ce311c7116101805780638ce311c714610a045780638da5cb5b14610a245780639045be5814610a4257806390e0d99214610a7b5780639579d51414610a9557600080fd5b806380c581d114610999578063897534a9146109b95780638a8c523c146109cf5780638cd09d50146109e457600080fd5b806370a08231116101f857806370a0823114610901578063715018a614610937578063728607ba1461094e578063728d41c9146109635780638036d5901461098357600080fd5b80636605bfda1461089557806366a88d96146108b5578063688d12ed146108cb5780636f1eaac4146108e157600080fd5b806342966c681161032f578063559c4cbb116102b75780635fecd926116102865780635fecd926146107ff57806360d1259e1461081f57806361d027b31461083f57806361db24461461085f57806364f5a5bb1461087557600080fd5b8063559c4cbb1461077d578063588d5189146107925780635cfad287146107bf5780635facf12e146107df57600080fd5b80634675533f116102fe5780634675533f146106f35780634cac88f4146107125780634cb36a9b1461073f5780634e6be5441461075f5780634f7041a51461076757600080fd5b806342966c681461066e57806343cc8c2a1461068e578063452ed4f1146106be578063460bb303146106de57600080fd5b806323b872dd116103b2578063375632931161038157806337563293146105d65780633a28c954146105eb5780633bbac579146106005780633e8c4873146106395780634295e8571461065957600080fd5b806323b872dd1461055e57806327334a081461057e578063313ce5671461059e5780633732e214146105c057600080fd5b806309b98866116103f957806309b98866146104e55780630f9d568114610509578063136a6be11461051e57806317700f011461053457806318160ddd1461054957600080fd5b806305f82a451461043657806306fdde031461046b5780630758d9241461048d578063095ea7b3146104c557600080fd5b3661043157005b600080fd5b34801561044257600080fd5b50610456610451366004613b74565b610d07565b60405190151581526020015b60405180910390f35b34801561047757600080fd5b50610480610dba565b6040516104629190613b91565b34801561049957600080fd5b506012546104ad906001600160a01b031681565b6040516001600160a01b039091168152602001610462565b3480156104d157600080fd5b506104566104e0366004613be6565b610e4c565b3480156104f157600080fd5b506104fb60155481565b604051908152602001610462565b34801561051557600080fd5b50610456610e62565b34801561052a57600080fd5b506104fb60115481565b34801561054057600080fd5b50610456610f09565b34801561055557600080fd5b506004546104fb565b34801561056a57600080fd5b50610456610579366004613c12565b610f86565b34801561058a57600080fd5b50610456610599366004613b74565b6111ab565b3480156105aa57600080fd5b5060035460405160ff9091168152602001610462565b3480156105cc57600080fd5b506104fb600d5481565b3480156105e257600080fd5b50610456611262565b3480156105f757600080fd5b50610456611370565b34801561060c57600080fd5b5061045661061b366004613b74565b6001600160a01b03166000908152601f602052604090205460ff1690565b34801561064557600080fd5b50610456610654366004613c53565b6113f9565b34801561066557600080fd5b506104566114bc565b34801561067a57600080fd5b50610456610689366004613c53565b61153d565b34801561069a57600080fd5b506104566106a9366004613b74565b601d6020526000908152604090205460ff1681565b3480156106ca57600080fd5b506013546104ad906001600160a01b031681565b3480156106ea57600080fd5b50610456611648565b3480156106ff57600080fd5b50600f5461045690610100900460ff1681565b34801561071e57600080fd5b506104fb61072d366004613b74565b601a6020526000908152604090205481565b34801561074b57600080fd5b5061045661075a366004613c53565b611693565b61045661170f565b34801561077357600080fd5b506104fb60085481565b34801561078957600080fd5b50610456611728565b34801561079e57600080fd5b506104fb6107ad366004613b74565b60196020526000908152604090205481565b3480156107cb57600080fd5b506104566107da366004613b74565b611809565b3480156107eb57600080fd5b506104fb6107fa366004613b74565b611848565b34801561080b57600080fd5b5061045661081a366004613b74565b6118f8565b34801561082b57600080fd5b5061045661083a366004613b74565b611927565b34801561084b57600080fd5b506007546104ad906001600160a01b031681565b34801561086b57600080fd5b506104fb60145481565b34801561088157600080fd5b50610456610890366004613c53565b6119d7565b3480156108a157600080fd5b506104566108b0366004613b74565b6119ea565b3480156108c157600080fd5b506104fb60055481565b3480156108d757600080fd5b506104fb600c5481565b3480156108ed57600080fd5b506104566108fc366004613cd7565b611a8a565b34801561090d57600080fd5b506104fb61091c366004613b74565b6001600160a01b031660009081526016602052604090205490565b34801561094357600080fd5b5061094c611afc565b005b34801561095a57600080fd5b50610456611b10565b34801561096f57600080fd5b5061045661097e366004613c53565b611bb1565b34801561098f57600080fd5b506104fb60065481565b3480156109a557600080fd5b506104566109b4366004613d84565b611bc4565b3480156109c557600080fd5b506104fb600e5481565b3480156109db57600080fd5b50610456611c13565b3480156109f057600080fd5b506104566109ff366004613c53565b611c84565b348015610a1057600080fd5b50610456610a1f366004613c12565b611d47565b348015610a3057600080fd5b506000546001600160a01b03166104ad565b348015610a4e57600080fd5b50610456610a5d366004613b74565b6001600160a01b03166000908152601c602052604090205460ff1690565b348015610a8757600080fd5b50600f546104569060ff1681565b348015610aa157600080fd5b506104fb610ab0366004613b74565b60186020526000908152604090205481565b348015610ace57600080fd5b50610480611dde565b348015610ae357600080fd5b506104fb60105481565b348015610af957600080fd5b50610456611ded565b348015610b0e57600080fd5b50610456610b1d366004613be6565b611eca565b348015610b2e57600080fd5b50610456611fe2565b348015610b4357600080fd5b50610456610b52366004613c53565b612099565b348015610b6357600080fd5b50600a546104569060ff1681565b348015610b7d57600080fd5b5061045661213d565b348015610b9257600080fd5b50610456610ba1366004613b74565b6001600160a01b03166000908152601e602052604090205460ff1690565b348015610bcb57600080fd5b506104fb60095481565b348015610be157600080fd5b506104566121c1565b348015610bf657600080fd5b50600f546104569062010000900460ff1681565b348015610c1657600080fd5b506104fb600b5481565b348015610c2c57600080fd5b50610456610c3b366004613c53565b612293565b348015610c4c57600080fd5b506104fb610c5b366004613dbd565b6001600160a01b03918216600090815260176020908152604080832093909416825291909152205490565b348015610c9257600080fd5b50610456610ca1366004613b74565b612348565b348015610cb257600080fd5b5061094c610cc1366004613b74565b6123f3565b348015610cd257600080fd5b50600f54610456906301000000900460ff1681565b348015610cf357600080fd5b50610456610d02366004613b74565b61246c565b6000610d116124b7565b6001600160a01b0382166000908152601c602052604090205460ff16610d955760405162461bcd60e51b815260206004820152602e60248201527f45524332303a204163636f756e74206973206e6f74206578636c75646564206660448201526d3937b6903932b33632b1ba34b7b760911b60648201526084015b60405180910390fd5b506001600160a01b03166000908152601c60205260409020805460ff19169055600190565b606060018054610dc990613deb565b80601f0160208091040260200160405190810160405280929190818152602001828054610df590613deb565b8015610e425780601f10610e1757610100808354040283529160200191610e42565b820191906000526020600020905b815481529060010190602001808311610e2557829003601f168201915b5050505050905090565b6000610e59338484612511565b50600192915050565b6000610e6c6124b7565b600f546301000000900460ff1615610e965760405162461bcd60e51b8152600401610d8c90613e26565b600f5460ff1615156001148015610eba5750600f5460ff6101009091041615156001145b8015610ed35750600f5462010000900460ff1615156001145b15610ef05760405162461bcd60e51b8152600401610d8c90613e67565b600f805463ff0000001916630100000017905550600190565b6000610f136124b7565b600a5460ff161515600114610f765760405162461bcd60e51b815260206004820152602360248201527f45524332303a2054726164696e6720697320616c726561647920756e2d61637460448201526269766560e81b6064820152608401610d8c565b50600a805460ff19169055600190565b60006001600160a01b038416610fae5760405162461bcd60e51b8152600401610d8c90613ece565b6001600160a01b038316610fd45760405162461bcd60e51b8152600401610d8c90613ece565b6001600160a01b03831661dead14156110255760405162461bcd60e51b815260206004820152601360248201527245524332303a2044656164204164647265737360681b6044820152606401610d8c565b6001600160a01b03841660009081526017602090815260408083203384529091529020548211156110985760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20496e73756666696369656e7420616c6c6f77616e63652e00006044820152606401610d8c565b6001600160a01b0384166000908152601660205260409020548211156111175760405162461bcd60e51b815260206004820152602e60248201527f45524332303a20416d6f756e7420657863656564732073656e6465722773206160448201526d63636f756e742062616c616e636560901b6064820152608401610d8c565b6001600160a01b038416600090815260176020908152604080832033845290915290205460001914611196576001600160a01b038416600090815260176020908152604080832033845290915290205461117190836125bf565b6001600160a01b03851660009081526017602090815260408083203384529091529020555b6111a18484846125cb565b5060019392505050565b60006111b56124b7565b6001600160a01b0382166000908152601c602052604090205460ff16156112395760405162461bcd60e51b815260206004820152603260248201527f45524332303a204163636f756e7420697320616c7265616479206578636c756460448201527132b210333937b6903932b33632b1ba34b7b760711b6064820152608401610d8c565b506001600160a01b03166000908152601c60205260409020805460ff1916600190811790915590565b60003363ffffffff813b16156112c45760405162461bcd60e51b815260206004820152602160248201527f45524332303a2053656e6465722063616e2774206265206120636f6e747261636044820152601d60fa1b6064820152608401610d8c565b6015546001600160a01b0382166000908152601a602052604090205442916112eb91613f11565b111561135f5760405162461bcd60e51b815260206004820152603b60248201527f45524332303a205265666c656374696f6e20636f6f6c20646f776e206973206960448201527f6d706c656d656e7465642c2074727920616761696e206c6174657200000000006064820152608401610d8c565b61136881612964565b600191505090565b600061137a6124b7565b600f5462010000900460ff1615156001146113e75760405162461bcd60e51b815260206004820152602760248201527f45524332303a205265666c656374696f6e20697320616c7265616479206e6f74604482015266081c185d5cd95960ca1b6064820152608401610d8c565b50600f805462ff000019169055600190565b60006114036124b7565b6000601054116114255760405162461bcd60e51b8152600401610d8c90613f29565b8160105410156114775760405162461bcd60e51b815260206004820152601e60248201527f45524332303a204c6f77207377617061626c65207265666c656374696f6e00006044820152606401610d8c565b476114823084612b32565b826010546114909190613f6b565b601055600061149f47836125bf565b6014549091506114af90826124ab565b6014555060019392505050565b60006114c66124b7565b600f5460ff16151560011461152d5760405162461bcd60e51b815260206004820152602760248201527f45524332303a20546f6b656e204275726e20697320616c7265616479206e6f74604482015266081c185d5cd95960ca1b6064820152608401610d8c565b50600f805460ff19169055600190565b336000818152601660205260408120549091908311156115b25760405162461bcd60e51b815260206004820152602a60248201527f45524332303a204275726e20416d6f756e742065786365656473206163636f756044820152696e742062616c616e636560b01b6064820152608401610d8c565b600083116116025760405162461bcd60e51b815260206004820181905260248201527f45524332303a20456e74657220736f6d6520616d6f756e7420746f206275726e6044820152606401610d8c565b6001600160a01b03811660009081526016602052604090205461162590846125bf565b6001600160a01b038216600090815260166020526040902055610e598184612ca8565b60006116526124b7565b600f546301000000900460ff1615156001146116805760405162461bcd60e51b8152600401610d8c90613e26565b50600f805463ff00000019169055600190565b600061169d6124b7565b8160155414156117065760405162461bcd60e51b815260206004820152602e60248201527f45524332303a204e65772054696d657374616d702063616e277420626520746860448201526d652070726576696f7573206f6e6560901b6064820152608401610d8c565b50601555600190565b60145460009061171f90346124ab565b60145550600190565b60006117326124b7565b600f5462010000900460ff16156117975760405162461bcd60e51b815260206004820152602360248201527f45524332303a205265666c656374696f6e20697320616c7265616479207061756044820152621cd95960ea1b6064820152608401610d8c565b600f5460ff16151560011480156117bb5750600f5460ff6101009091041615156001145b80156117d55750600f546301000000900460ff1615156001145b156117f25760405162461bcd60e51b8152600401610d8c90613e67565b600f805462ff000019166201000017905550600190565b60006118136124b7565b6040516001600160a01b038316904780156108fc02916000818181858888f19350505050158015610e59573d6000803e3d6000fd5b6013546000906001600160a01b038381169116148061187457506012546001600160a01b038381169116145b1561188157506000919050565b6001600160a01b0382166000908152601860205260408120546014546118a79190613f6b565b6001600160a01b0384166000908152601b6020908152604080832054600454601690935292205492935090916118dd9084613f82565b6118e79190613fb7565b6118f19190613f11565b9392505050565b60006119026124b7565b506001600160a01b03166000908152601f60205260409020805460ff19169055600190565b60006119316124b7565b6001600160a01b0382166000908152601e602052604090205460ff16156119ae5760405162461bcd60e51b815260206004820152602b60248201527f45524332303a204163636f756e7420697320616c7265616479206578636c756460448201526a0cac840cce4deda40e8c2f60ab1b6064820152608401610d8c565b506001600160a01b03166000908152601e60205260409020805460ff1916600190811790915590565b60006119e16124b7565b50600655600190565b60006119f46124b7565b6007546001600160a01b0383811691161415611a655760405162461bcd60e51b815260206004820152602a60248201527f45524332303a204163636f756e7420697320616c7265616479207472656173756044820152697279206164647265737360b01b6064820152608401610d8c565b50600780546001600160a01b0383166001600160a01b03199091161790556001919050565b6000611a946124b7565b60005b8251811015610e59576001601f6000858481518110611ab857611ab8613fcb565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611af481613fe1565b915050611a97565b611b046124b7565b611b0e6000612d32565b565b6000611b1a6124b7565b600880546009805460059384905590839055604080518381526020810194909452919290917fcaf24a92738254645a1e260866df8998f2a8a7e4915fd123b906e5426e6e92c691015b60405180910390a16009546040805183815260208101929092527f5e2deb0291797955e0066c5cebbc900e815e1099432b8f07462265a4f1c61b51910160405180910390a160019250505090565b6000611bbb6124b7565b50600555600190565b6000611bce6124b7565b506001600160a01b0382166000908152601d60209081526040808320805485151560ff199182168117909255601e909352922080549091169091179055600192915050565b6000611c1d6124b7565b600a5460ff1615611c705760405162461bcd60e51b815260206004820181905260248201527f45524332303a2054726164696e6720697320616c7265616479206163746976656044820152606401610d8c565b50600a805460ff1916600190811790915590565b6000611c8e6124b7565b600f821115611cfc5760405162461bcd60e51b815260206004820152603460248201527f45524332303a205468652073656c6c207461782063616e2774206265206d6f7260448201527365207468656e2031352070657263656e7461676560601b6064820152608401610d8c565b600980549083905560408051828152602081018590527f5e2deb0291797955e0066c5cebbc900e815e1099432b8f07462265a4f1c61b5191015b60405180910390a150600192915050565b6000611d516124b7565b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905284169063a9059cbb90604401602060405180830381600087803b158015611d9b57600080fd5b505af1158015611daf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd39190613ffc565b506001949350505050565b606060028054610dc990613deb565b6000611df76124b7565b600f5460ff1615611e565760405162461bcd60e51b815260206004820152602360248201527f45524332303a20546f6b656e204275726e20697320616c7265616479207061756044820152621cd95960ea1b6064820152608401610d8c565b600f5460ff6101009091041615156001148015611e805750600f5462010000900460ff1615156001145b8015611e9a5750600f546301000000900460ff1615156001145b15611eb75760405162461bcd60e51b8152600401610d8c90613e67565b600f805460ff1916600117905550600190565b60003380611eea5760405162461bcd60e51b8152600401610d8c90613ece565b6001600160a01b038416611f105760405162461bcd60e51b8152600401610d8c90613ece565b6001600160a01b03841661dead1415611f615760405162461bcd60e51b815260206004820152601360248201527245524332303a2044656164204164647265737360681b6044820152606401610d8c565b6001600160a01b038116600090815260166020526040902054831115611fd75760405162461bcd60e51b815260206004820152602560248201527f45524332303a20416d6f756e742065786365656473206163636f756e742062616044820152646c616e636560d81b6064820152608401610d8c565b6111a18185856125cb565b6000611fec6124b7565b600060085411801561200057506000600954115b61204c5760405162461bcd60e51b815260206004820181905260248201527f45524332303a2054617865732061726520616c72656164792072656d6f7665646044820152606401610d8c565b600880546009805460009384905590839055604080518381526020810194909452919290917fcaf24a92738254645a1e260866df8998f2a8a7e4915fd123b906e5426e6e92c69101611b63565b600080601154116120bc5760405162461bcd60e51b8152600401610d8c90613f29565b81601154101561210e5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a204c6f77207377617061626c65207265666c656374696f6e00006044820152606401610d8c565b600754612124906001600160a01b031683612b32565b816011546121329190613f6b565b601155506001919050565b60006121476124b7565b600f5460ff6101009091041615156001146121b05760405162461bcd60e51b8152602060048201526024808201527f45524332303a204175746f204c5020697320616c7265616479206e6f742070616044820152631d5cd95960e21b6064820152608401610d8c565b50600f805461ff0019169055600190565b60006121cb6124b7565b600f54610100900460ff16156122235760405162461bcd60e51b815260206004820181905260248201527f45524332303a204175746f204c5020697320616c7265616479207061757365646044820152606401610d8c565b600f5460ff16151560011480156122475750600f5462010000900460ff1615156001145b80156122615750600f546301000000900460ff1615156001145b1561227e5760405162461bcd60e51b8152600401610d8c90613e67565b600f805461ff00191661010017905550600190565b600061229d6124b7565b600f82111561230a5760405162461bcd60e51b815260206004820152603360248201527f45524332303a2054686520627579207461782063616e2774206265206d6f7265604482015272207468656e2031352070657263656e7461676560681b6064820152608401610d8c565b600880549083905560408051828152602081018590527fcaf24a92738254645a1e260866df8998f2a8a7e4915fd123b906e5426e6e92c69101611d36565b60006123526124b7565b6001600160a01b0382166000908152601e602052604090205460ff166123ce5760405162461bcd60e51b815260206004820152602b60248201527f45524332303a204163636f756e7420697320616c726561647920696e636c756460448201526a0cac840cce4deda40e8c2f60ab1b6064820152608401610d8c565b506001600160a01b03166000908152601e60205260409020805460ff19169055600190565b6123fb6124b7565b6001600160a01b0381166124605760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d8c565b61246981612d32565b50565b60006124766124b7565b506001600160a01b03166000908152601f60205260409020805460ff1916600190811790915590565b60006118f18284613f82565b60006118f18284613f11565b6000546001600160a01b03163314611b0e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d8c565b6001600160a01b0383166125375760405162461bcd60e51b8152600401610d8c90613ece565b6001600160a01b03821661255d5760405162461bcd60e51b8152600401610d8c90613ece565b6001600160a01b0383811660008181526017602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006118f18284613f6b565b6001600160a01b0383166000908152601f602052604090205460ff1615801561260d57506001600160a01b0382166000908152601f602052604090205460ff16155b6126595760405162461bcd60e51b815260206004820152601760248201527f45524332303a20426f74732063616e27742074726164650000000000000000006044820152606401610d8c565b6000546001600160a01b03848116911614801561268e57506001600160a01b0382166000908152601d602052604090205460ff165b156126a35761269e838383612d82565b505050565b6001600160a01b0383166000908152601d602052604090205460ff16806126e257506001600160a01b0382166000908152601d602052604090205460ff165b1561290557600a5460ff16151560011461273e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f74206163746976652e0000006044820152606401610d8c565b6001600160a01b0383166000908152601e602052604090205460ff16801561277f57506001600160a01b0382166000908152601e602052604090205460ff16155b156127ae5761278e8282612f03565b801561279e575061279e81612f7f565b1561269e5761269e838383612fdb565b6001600160a01b0383166000908152601e602052604090205460ff161580156127ef57506001600160a01b0382166000908152601e602052604090205460ff165b1561280d576127fd81612f7f565b1561269e5761269e8383836132cc565b6001600160a01b0383166000908152601e602052604090205460ff16801561284d57506001600160a01b0382166000908152601e602052604090205460ff165b1561269e576000546001600160a01b038481169116148061287b57506000546001600160a01b038381169116145b8061288e57506001600160a01b03831630145b806128a157506001600160a01b03821630145b156128b15761269e838383612d82565b6001600160a01b0382166000908152601d602052604090205460ff16156128eb576128db81612f7f565b1561269e5761269e838383612d82565b6128f58282612f03565b80156128db57506128db81612f7f565b6000546001600160a01b038481169116148061292e57506000546001600160a01b038381169116145b8061294157506001600160a01b03831630145b8061295457506001600160a01b03821630145b156128eb5761269e838383612d82565b600061296f82611848565b9050600081116129d35760405162461bcd60e51b815260206004820152602960248201527f45524332303a20436c61696d20616d6f756e742073686f756c64206265206d6f60448201526807265207468656e20360bc1b6064820152608401610d8c565b6001600160a01b0382166000908152601c602052604090205460ff1615612a535760405162461bcd60e51b815260206004820152602e60248201527f45524332303a2041646472657373206973206578636c7564656420746f20636c60448201526d30b4b6903932b33632b1ba34b7b760911b6064820152608401610d8c565b6014546001600160a01b038316600081815260186020908152604080832094909455601a8152838220429055601b90528281208190559151909183156108fc02918491818181858888f19350505050158015612ab3573d6000803e3d6000fd5b506001600160a01b038216600090815260196020526040902054612ad790826124ab565b6001600160a01b038316600081815260196020526040908190209290925590517faba62311dcf381aba06c0e76b1bb8e427e7c715edb8c84fc169cc1d1f51ac84e90612b269084815260200190565b60405180910390a25050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b6757612b67613fcb565b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612bbb57600080fd5b505afa158015612bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf39190614019565b81600181518110612c0657612c06613fcb565b6001600160a01b0392831660209182029290920101526012546040516318cbafe560e01b81529116906318cbafe590612c4c908590600090869089904290600401614036565b600060405180830381600087803b158015612c6657600080fd5b505af1158015612c7a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612ca291908101906140a7565b50505050565b600454612cb590826125bf565b600455600b54612cc590826124ab565b600b556040518181526000906001600160a01b0384169060008051602061417d8339815191529060200160405180910390a3816001600160a01b03167f8b1897d4e7a3b42570088bb1182eb6518c96a754d44bc9edd4669568bfa9832682604051612b2691815260200190565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b0383811691161480612da657506001600160a01b03821630145b15612e1b576001600160a01b038316600090815260166020526040902054612dce90826125bf565b6001600160a01b038085166000908152601660205260408082209390935590841681522054612dfd90826124ab565b6001600160a01b038316600090815260166020526040902055612ed0565b612e46612e2783613505565b6001600160a01b0384166000908152601b6020526040902054906124ab565b6001600160a01b038084166000908152601b60209081526040808320949094556014546018825284832055918616815260169091522054612e8790826125bf565b6001600160a01b038085166000908152601660205260408082209390935590841681522054612eb690826124ab565b6001600160a01b0383166000908152601660205260409020555b816001600160a01b0316836001600160a01b031660008051602061417d833981519152836040516125b291815260200190565b6000612f2e82612f28856001600160a01b031660009081526016602052604090205490565b906124ab565b6005541015610e595760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2057616c6c6574206c696d6974206578636565647300000000006044820152606401610d8c565b6000600654821115612fd35760405162461bcd60e51b815260206004820181905260248201527f45524332303a205472616e73616374696f6e206c696d697420657863656564736044820152606401610d8c565b506001919050565b6000612fe561359c565b9050600061300960646130036008548661249f90919063ffffffff16565b90613a8b565b9050600061301784836125bf565b905061304461302586613505565b6001600160a01b0387166000908152601b6020526040902054906124ab565b6001600160a01b038087166000908152601b6020908152604080832094909455601454601882528483205591891681526016909152205461308590856125bf565b6001600160a01b0380881660009081526016602052604080822093909355908716815220546130b490826124ab565b6001600160a01b0386166000908152601660205260408082209290925530815220546130e090836124ab565b306000908152601660205260409020556001831415613132573060009081526016602052604090205461311390836125bf565b3060009081526016602052604090205561312d8583612ca8565b613245565b826002141561316f573060009081526016602052604090205461315590836125bf565b3060009081526016602052604090205561312d8583613a97565b82600314156131dc5760105461318590836124ab565b601055600d5461319590836124ab565b600d556040518281526001600160a01b038616907fb7489ef47c48c720c40f3a3d8ee43af2461787f8211836228289add459fd887c906020015b60405180910390a2613245565b8260041415613245576011546131f290836124ab565b601155600e5461320290836124ab565b600e556040518281526001600160a01b038616907f1929a4bace25a65ec09f6599a42b7e272b7b015dbf1ac423102375dc81d74e15906020015b60405180910390a25b60408051848152602081018490526001600160a01b038816917f43430960b1421ddf891d3754c233acfb8948fc4b9912cbd819ca4f09701fbf58910160405180910390a2846001600160a01b0316866001600160a01b031660008051602061417d833981519152866040516132bc91815260200190565b60405180910390a3505050505050565b60006132d661359c565b905060006132f460646130036009548661249f90919063ffffffff16565b9050600061330284836125bf565b6001600160a01b03871660009081526016602052604090205490915061332890856125bf565b6001600160a01b03808816600090815260166020526040808220939093559087168152205461335790826124ab565b6001600160a01b03861660009081526016602052604080822092909255308152205461338390836124ab565b30600090815260166020526040808220929092556001600160a01b038816815220546133c3576001600160a01b0385166000908152601b60205260408120555b826001141561340057306000908152601660205260409020546133e690836125bf565b3060009081526016602052604090205561312d8683612ca8565b826002141561343d573060009081526016602052604090205461342390836125bf565b3060009081526016602052604090205561312d8683613a97565b82600314156134a15760105461345390836124ab565b601055600d5461346390836124ab565b600d556040518281526001600160a01b038716907fb7489ef47c48c720c40f3a3d8ee43af2461787f8211836228289add459fd887c906020016131cf565b8260041415613245576011546134b790836124ab565b601155600e546134c790836124ab565b600e556040518281526001600160a01b038716907f1929a4bace25a65ec09f6599a42b7e272b7b015dbf1ac423102375dc81d74e159060200161323c565b6013546000906001600160a01b038381169116148061353157506012546001600160a01b038381169116145b1561353e57506000919050565b6001600160a01b0382166000908152601860205260408120546014546135649190613f6b565b9050600454613588846001600160a01b031660009081526016602052604090205490565b6135929083613f82565b6118f19190613fb7565b6000806000600242444532433a6040516020016135be9695949392919061412d565b6040516020818303038152906040528051906020012060001c6135e19190614168565b90506000600342444532433a6040516020016136029695949392919061412d565b6040516020818303038152906040528051906020012060001c6136259190614168565b600f5490915060ff161515600114801561364c5750600f5460ff6101009091041615156001145b80156136655750600f5462010000900460ff1615156001145b156136735760049250613a83565b600f5460ff16151560011480156136975750600f5460ff6101009091041615156001145b80156136b15750600f546301000000900460ff1615156001145b156136bf5760039250613a83565b600f5460ff16151560011480156136e35750600f5462010000900460ff1615156001145b80156136fd5750600f546301000000900460ff1615156001145b1561370b5760029250613a83565b600f5460ff61010090910416151560011480156137355750600f5462010000900460ff1615156001145b801561374f5750600f546301000000900460ff1615156001145b1561375d5760019250613a83565b600f5460ff16151560011480156137815750600f5460ff6101009091041615156001145b156137a757816137945760039250613a83565b81600114156137a257600492505b613a83565b600f5460ff16151560011480156137cb5750600f5462010000900460ff1615156001145b156137de57816137945760029250613a83565b600f5460ff16151560011480156138035750600f546301000000900460ff1615156001145b1561382857816138165760029250613a83565b81600114156137a25760039250613a83565b600f5460ff61010090910416151560011480156138525750600f5462010000900460ff1615156001145b1561386557816137945760019250613a83565b600f5460ff61010090910416151560011480156138905750600f546301000000900460ff1615156001145b156138a357816138165760019250613a83565b600f5462010000900460ff16151560011480156138ce5750600f546301000000900460ff1615156001145b156138f357816138e15760019250613a83565b81600114156137a25760029250613a83565b600f5460ff1615156001141561395557600342444532433a6040516020016139209695949392919061412d565b6040516020818303038152906040528051906020012060001c6139439190614168565b61394e906002613f11565b9250613a83565b600f5460ff6101009091041615156001141561399d57806139795760019250613a83565b806001141561398b5760039250613a83565b80600214156137a25760049250613a83565b600f5462010000900460ff161515600114156139d357806139c15760019250613a83565b806001141561398b5760029250613a83565b600f546301000000900460ff16151560011415613a3557600342444532433a604051602001613a079695949392919061412d565b6040516020818303038152906040528051906020012060001c613a2a9190614168565b61394e906001613f11565b600442444532433a604051602001613a529695949392919061412d565b6040516020818303038152906040528051906020012060001c613a759190614168565b613a80906001613f11565b92505b509092915050565b60006118f18284613fb7565b8015613b5b576013546001600160a01b0316600090815260166020526040902054613ac290826124ab565b6013546001600160a01b0316600090815260166020526040902055600c54613aea90826124ab565b600c556013546040518281526001600160a01b039182169184169060008051602061417d8339815191529060200160405180910390a3816001600160a01b03167ffb42d133eca0812491d47088ea70321250d6ab9cfc23a318f640f7def1cb201c82604051612b2691815260200190565b5050565b6001600160a01b038116811461246957600080fd5b600060208284031215613b8657600080fd5b81356118f181613b5f565b600060208083528351808285015260005b81811015613bbe57858101830151858201604001528201613ba2565b81811115613bd0576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215613bf957600080fd5b8235613c0481613b5f565b946020939093013593505050565b600080600060608486031215613c2757600080fd5b8335613c3281613b5f565b92506020840135613c4281613b5f565b929592945050506040919091013590565b600060208284031215613c6557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613cab57613cab613c6c565b604052919050565b600067ffffffffffffffff821115613ccd57613ccd613c6c565b5060051b60200190565b60006020808385031215613cea57600080fd5b823567ffffffffffffffff811115613d0157600080fd5b8301601f81018513613d1257600080fd5b8035613d25613d2082613cb3565b613c82565b81815260059190911b82018301908381019087831115613d4457600080fd5b928401925b82841015613d6b578335613d5c81613b5f565b82529284019290840190613d49565b979650505050505050565b801515811461246957600080fd5b60008060408385031215613d9757600080fd5b8235613da281613b5f565b91506020830135613db281613d76565b809150509250929050565b60008060408385031215613dd057600080fd5b8235613ddb81613b5f565b91506020830135613db281613b5f565b600181811c90821680613dff57607f821691505b60208210811415613e2057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526021908201527f45524332303a20547265617375727920697320616c72656164792070617573656040820152601960fa1b606082015260800190565b60208082526041908201527f45524332303a20416c6c20666f75722066756e6374696f6e616c69746965732060408201527f63616e27742067657420706175736564206174207468652073616d652074696d6060820152606560f81b608082015260a00190565b60208082526013908201527245524332303a205a65726f204164647265737360681b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115613f2457613f24613efb565b500190565b60208082526022908201527f45524332303a20546865726520617265206e6f20746f6b656e7320746f207377604082015261061760f41b606082015260800190565b600082821015613f7d57613f7d613efb565b500390565b6000816000190483118215151615613f9c57613f9c613efb565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613fc657613fc6613fa1565b500490565b634e487b7160e01b600052603260045260246000fd5b6000600019821415613ff557613ff5613efb565b5060010190565b60006020828403121561400e57600080fd5b81516118f181613d76565b60006020828403121561402b57600080fd5b81516118f181613b5f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156140865784516001600160a01b031683529383019391830191600101614061565b50506001600160a01b03969096166060850152505050608001529392505050565b600060208083850312156140ba57600080fd5b825167ffffffffffffffff8111156140d157600080fd5b8301601f810185136140e257600080fd5b80516140f0613d2082613cb3565b81815260059190911b8201830190838101908783111561410f57600080fd5b928401925b82841015613d6b57835182529284019290840190614114565b95865260208601949094526040850192909252606090811b6bffffffffffffffffffffffff1916908401526074830152609482015260b40190565b60008261417757614177613fa1565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220f2ebad4a85ba1f775c84296e406de093790dee4d548789888fc387f1f46a732864736f6c634300080900338c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92500000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000005f5e100000000000000000000000000ef681b51075a9d48ab27c53c5b8aff157ecef185000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000001a784379d99db4200000000000000000000000000000000000000000000000001a784379d99db4200000000000000000000000000000000000000000000000000000000000000000000094d61676963204261670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000546454c4958000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061042a5760003560e01c80636605bfda1161022957806395d89b411161012e578063cc1776d3116100b6578063dd62ed3e1161007a578063dd62ed3e14610c40578063e17c4c7414610c86578063f2fde38b14610ca6578063f48fd0e014610cc6578063ffecf51614610ce757600080fd5b8063cc1776d314610bbf578063d448a07014610bd5578063d83646bb14610bea578063d89135cd14610c0a578063dc1052e214610c2057600080fd5b8063b4fe8f6a116100fd578063b4fe8f6a14610b22578063ba53b52214610b37578063bbc0c74214610b57578063c2cc176914610b71578063cb4ca63114610b8657600080fd5b806395d89b4114610ac2578063a5332f2d14610ad7578063a6559fe414610aed578063a9059cbb14610b0257600080fd5b806380c581d1116101b15780638ce311c7116101805780638ce311c714610a045780638da5cb5b14610a245780639045be5814610a4257806390e0d99214610a7b5780639579d51414610a9557600080fd5b806380c581d114610999578063897534a9146109b95780638a8c523c146109cf5780638cd09d50146109e457600080fd5b806370a08231116101f857806370a0823114610901578063715018a614610937578063728607ba1461094e578063728d41c9146109635780638036d5901461098357600080fd5b80636605bfda1461089557806366a88d96146108b5578063688d12ed146108cb5780636f1eaac4146108e157600080fd5b806342966c681161032f578063559c4cbb116102b75780635fecd926116102865780635fecd926146107ff57806360d1259e1461081f57806361d027b31461083f57806361db24461461085f57806364f5a5bb1461087557600080fd5b8063559c4cbb1461077d578063588d5189146107925780635cfad287146107bf5780635facf12e146107df57600080fd5b80634675533f116102fe5780634675533f146106f35780634cac88f4146107125780634cb36a9b1461073f5780634e6be5441461075f5780634f7041a51461076757600080fd5b806342966c681461066e57806343cc8c2a1461068e578063452ed4f1146106be578063460bb303146106de57600080fd5b806323b872dd116103b2578063375632931161038157806337563293146105d65780633a28c954146105eb5780633bbac579146106005780633e8c4873146106395780634295e8571461065957600080fd5b806323b872dd1461055e57806327334a081461057e578063313ce5671461059e5780633732e214146105c057600080fd5b806309b98866116103f957806309b98866146104e55780630f9d568114610509578063136a6be11461051e57806317700f011461053457806318160ddd1461054957600080fd5b806305f82a451461043657806306fdde031461046b5780630758d9241461048d578063095ea7b3146104c557600080fd5b3661043157005b600080fd5b34801561044257600080fd5b50610456610451366004613b74565b610d07565b60405190151581526020015b60405180910390f35b34801561047757600080fd5b50610480610dba565b6040516104629190613b91565b34801561049957600080fd5b506012546104ad906001600160a01b031681565b6040516001600160a01b039091168152602001610462565b3480156104d157600080fd5b506104566104e0366004613be6565b610e4c565b3480156104f157600080fd5b506104fb60155481565b604051908152602001610462565b34801561051557600080fd5b50610456610e62565b34801561052a57600080fd5b506104fb60115481565b34801561054057600080fd5b50610456610f09565b34801561055557600080fd5b506004546104fb565b34801561056a57600080fd5b50610456610579366004613c12565b610f86565b34801561058a57600080fd5b50610456610599366004613b74565b6111ab565b3480156105aa57600080fd5b5060035460405160ff9091168152602001610462565b3480156105cc57600080fd5b506104fb600d5481565b3480156105e257600080fd5b50610456611262565b3480156105f757600080fd5b50610456611370565b34801561060c57600080fd5b5061045661061b366004613b74565b6001600160a01b03166000908152601f602052604090205460ff1690565b34801561064557600080fd5b50610456610654366004613c53565b6113f9565b34801561066557600080fd5b506104566114bc565b34801561067a57600080fd5b50610456610689366004613c53565b61153d565b34801561069a57600080fd5b506104566106a9366004613b74565b601d6020526000908152604090205460ff1681565b3480156106ca57600080fd5b506013546104ad906001600160a01b031681565b3480156106ea57600080fd5b50610456611648565b3480156106ff57600080fd5b50600f5461045690610100900460ff1681565b34801561071e57600080fd5b506104fb61072d366004613b74565b601a6020526000908152604090205481565b34801561074b57600080fd5b5061045661075a366004613c53565b611693565b61045661170f565b34801561077357600080fd5b506104fb60085481565b34801561078957600080fd5b50610456611728565b34801561079e57600080fd5b506104fb6107ad366004613b74565b60196020526000908152604090205481565b3480156107cb57600080fd5b506104566107da366004613b74565b611809565b3480156107eb57600080fd5b506104fb6107fa366004613b74565b611848565b34801561080b57600080fd5b5061045661081a366004613b74565b6118f8565b34801561082b57600080fd5b5061045661083a366004613b74565b611927565b34801561084b57600080fd5b506007546104ad906001600160a01b031681565b34801561086b57600080fd5b506104fb60145481565b34801561088157600080fd5b50610456610890366004613c53565b6119d7565b3480156108a157600080fd5b506104566108b0366004613b74565b6119ea565b3480156108c157600080fd5b506104fb60055481565b3480156108d757600080fd5b506104fb600c5481565b3480156108ed57600080fd5b506104566108fc366004613cd7565b611a8a565b34801561090d57600080fd5b506104fb61091c366004613b74565b6001600160a01b031660009081526016602052604090205490565b34801561094357600080fd5b5061094c611afc565b005b34801561095a57600080fd5b50610456611b10565b34801561096f57600080fd5b5061045661097e366004613c53565b611bb1565b34801561098f57600080fd5b506104fb60065481565b3480156109a557600080fd5b506104566109b4366004613d84565b611bc4565b3480156109c557600080fd5b506104fb600e5481565b3480156109db57600080fd5b50610456611c13565b3480156109f057600080fd5b506104566109ff366004613c53565b611c84565b348015610a1057600080fd5b50610456610a1f366004613c12565b611d47565b348015610a3057600080fd5b506000546001600160a01b03166104ad565b348015610a4e57600080fd5b50610456610a5d366004613b74565b6001600160a01b03166000908152601c602052604090205460ff1690565b348015610a8757600080fd5b50600f546104569060ff1681565b348015610aa157600080fd5b506104fb610ab0366004613b74565b60186020526000908152604090205481565b348015610ace57600080fd5b50610480611dde565b348015610ae357600080fd5b506104fb60105481565b348015610af957600080fd5b50610456611ded565b348015610b0e57600080fd5b50610456610b1d366004613be6565b611eca565b348015610b2e57600080fd5b50610456611fe2565b348015610b4357600080fd5b50610456610b52366004613c53565b612099565b348015610b6357600080fd5b50600a546104569060ff1681565b348015610b7d57600080fd5b5061045661213d565b348015610b9257600080fd5b50610456610ba1366004613b74565b6001600160a01b03166000908152601e602052604090205460ff1690565b348015610bcb57600080fd5b506104fb60095481565b348015610be157600080fd5b506104566121c1565b348015610bf657600080fd5b50600f546104569062010000900460ff1681565b348015610c1657600080fd5b506104fb600b5481565b348015610c2c57600080fd5b50610456610c3b366004613c53565b612293565b348015610c4c57600080fd5b506104fb610c5b366004613dbd565b6001600160a01b03918216600090815260176020908152604080832093909416825291909152205490565b348015610c9257600080fd5b50610456610ca1366004613b74565b612348565b348015610cb257600080fd5b5061094c610cc1366004613b74565b6123f3565b348015610cd257600080fd5b50600f54610456906301000000900460ff1681565b348015610cf357600080fd5b50610456610d02366004613b74565b61246c565b6000610d116124b7565b6001600160a01b0382166000908152601c602052604090205460ff16610d955760405162461bcd60e51b815260206004820152602e60248201527f45524332303a204163636f756e74206973206e6f74206578636c75646564206660448201526d3937b6903932b33632b1ba34b7b760911b60648201526084015b60405180910390fd5b506001600160a01b03166000908152601c60205260409020805460ff19169055600190565b606060018054610dc990613deb565b80601f0160208091040260200160405190810160405280929190818152602001828054610df590613deb565b8015610e425780601f10610e1757610100808354040283529160200191610e42565b820191906000526020600020905b815481529060010190602001808311610e2557829003601f168201915b5050505050905090565b6000610e59338484612511565b50600192915050565b6000610e6c6124b7565b600f546301000000900460ff1615610e965760405162461bcd60e51b8152600401610d8c90613e26565b600f5460ff1615156001148015610eba5750600f5460ff6101009091041615156001145b8015610ed35750600f5462010000900460ff1615156001145b15610ef05760405162461bcd60e51b8152600401610d8c90613e67565b600f805463ff0000001916630100000017905550600190565b6000610f136124b7565b600a5460ff161515600114610f765760405162461bcd60e51b815260206004820152602360248201527f45524332303a2054726164696e6720697320616c726561647920756e2d61637460448201526269766560e81b6064820152608401610d8c565b50600a805460ff19169055600190565b60006001600160a01b038416610fae5760405162461bcd60e51b8152600401610d8c90613ece565b6001600160a01b038316610fd45760405162461bcd60e51b8152600401610d8c90613ece565b6001600160a01b03831661dead14156110255760405162461bcd60e51b815260206004820152601360248201527245524332303a2044656164204164647265737360681b6044820152606401610d8c565b6001600160a01b03841660009081526017602090815260408083203384529091529020548211156110985760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20496e73756666696369656e7420616c6c6f77616e63652e00006044820152606401610d8c565b6001600160a01b0384166000908152601660205260409020548211156111175760405162461bcd60e51b815260206004820152602e60248201527f45524332303a20416d6f756e7420657863656564732073656e6465722773206160448201526d63636f756e742062616c616e636560901b6064820152608401610d8c565b6001600160a01b038416600090815260176020908152604080832033845290915290205460001914611196576001600160a01b038416600090815260176020908152604080832033845290915290205461117190836125bf565b6001600160a01b03851660009081526017602090815260408083203384529091529020555b6111a18484846125cb565b5060019392505050565b60006111b56124b7565b6001600160a01b0382166000908152601c602052604090205460ff16156112395760405162461bcd60e51b815260206004820152603260248201527f45524332303a204163636f756e7420697320616c7265616479206578636c756460448201527132b210333937b6903932b33632b1ba34b7b760711b6064820152608401610d8c565b506001600160a01b03166000908152601c60205260409020805460ff1916600190811790915590565b60003363ffffffff813b16156112c45760405162461bcd60e51b815260206004820152602160248201527f45524332303a2053656e6465722063616e2774206265206120636f6e747261636044820152601d60fa1b6064820152608401610d8c565b6015546001600160a01b0382166000908152601a602052604090205442916112eb91613f11565b111561135f5760405162461bcd60e51b815260206004820152603b60248201527f45524332303a205265666c656374696f6e20636f6f6c20646f776e206973206960448201527f6d706c656d656e7465642c2074727920616761696e206c6174657200000000006064820152608401610d8c565b61136881612964565b600191505090565b600061137a6124b7565b600f5462010000900460ff1615156001146113e75760405162461bcd60e51b815260206004820152602760248201527f45524332303a205265666c656374696f6e20697320616c7265616479206e6f74604482015266081c185d5cd95960ca1b6064820152608401610d8c565b50600f805462ff000019169055600190565b60006114036124b7565b6000601054116114255760405162461bcd60e51b8152600401610d8c90613f29565b8160105410156114775760405162461bcd60e51b815260206004820152601e60248201527f45524332303a204c6f77207377617061626c65207265666c656374696f6e00006044820152606401610d8c565b476114823084612b32565b826010546114909190613f6b565b601055600061149f47836125bf565b6014549091506114af90826124ab565b6014555060019392505050565b60006114c66124b7565b600f5460ff16151560011461152d5760405162461bcd60e51b815260206004820152602760248201527f45524332303a20546f6b656e204275726e20697320616c7265616479206e6f74604482015266081c185d5cd95960ca1b6064820152608401610d8c565b50600f805460ff19169055600190565b336000818152601660205260408120549091908311156115b25760405162461bcd60e51b815260206004820152602a60248201527f45524332303a204275726e20416d6f756e742065786365656473206163636f756044820152696e742062616c616e636560b01b6064820152608401610d8c565b600083116116025760405162461bcd60e51b815260206004820181905260248201527f45524332303a20456e74657220736f6d6520616d6f756e7420746f206275726e6044820152606401610d8c565b6001600160a01b03811660009081526016602052604090205461162590846125bf565b6001600160a01b038216600090815260166020526040902055610e598184612ca8565b60006116526124b7565b600f546301000000900460ff1615156001146116805760405162461bcd60e51b8152600401610d8c90613e26565b50600f805463ff00000019169055600190565b600061169d6124b7565b8160155414156117065760405162461bcd60e51b815260206004820152602e60248201527f45524332303a204e65772054696d657374616d702063616e277420626520746860448201526d652070726576696f7573206f6e6560901b6064820152608401610d8c565b50601555600190565b60145460009061171f90346124ab565b60145550600190565b60006117326124b7565b600f5462010000900460ff16156117975760405162461bcd60e51b815260206004820152602360248201527f45524332303a205265666c656374696f6e20697320616c7265616479207061756044820152621cd95960ea1b6064820152608401610d8c565b600f5460ff16151560011480156117bb5750600f5460ff6101009091041615156001145b80156117d55750600f546301000000900460ff1615156001145b156117f25760405162461bcd60e51b8152600401610d8c90613e67565b600f805462ff000019166201000017905550600190565b60006118136124b7565b6040516001600160a01b038316904780156108fc02916000818181858888f19350505050158015610e59573d6000803e3d6000fd5b6013546000906001600160a01b038381169116148061187457506012546001600160a01b038381169116145b1561188157506000919050565b6001600160a01b0382166000908152601860205260408120546014546118a79190613f6b565b6001600160a01b0384166000908152601b6020908152604080832054600454601690935292205492935090916118dd9084613f82565b6118e79190613fb7565b6118f19190613f11565b9392505050565b60006119026124b7565b506001600160a01b03166000908152601f60205260409020805460ff19169055600190565b60006119316124b7565b6001600160a01b0382166000908152601e602052604090205460ff16156119ae5760405162461bcd60e51b815260206004820152602b60248201527f45524332303a204163636f756e7420697320616c7265616479206578636c756460448201526a0cac840cce4deda40e8c2f60ab1b6064820152608401610d8c565b506001600160a01b03166000908152601e60205260409020805460ff1916600190811790915590565b60006119e16124b7565b50600655600190565b60006119f46124b7565b6007546001600160a01b0383811691161415611a655760405162461bcd60e51b815260206004820152602a60248201527f45524332303a204163636f756e7420697320616c7265616479207472656173756044820152697279206164647265737360b01b6064820152608401610d8c565b50600780546001600160a01b0383166001600160a01b03199091161790556001919050565b6000611a946124b7565b60005b8251811015610e59576001601f6000858481518110611ab857611ab8613fcb565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611af481613fe1565b915050611a97565b611b046124b7565b611b0e6000612d32565b565b6000611b1a6124b7565b600880546009805460059384905590839055604080518381526020810194909452919290917fcaf24a92738254645a1e260866df8998f2a8a7e4915fd123b906e5426e6e92c691015b60405180910390a16009546040805183815260208101929092527f5e2deb0291797955e0066c5cebbc900e815e1099432b8f07462265a4f1c61b51910160405180910390a160019250505090565b6000611bbb6124b7565b50600555600190565b6000611bce6124b7565b506001600160a01b0382166000908152601d60209081526040808320805485151560ff199182168117909255601e909352922080549091169091179055600192915050565b6000611c1d6124b7565b600a5460ff1615611c705760405162461bcd60e51b815260206004820181905260248201527f45524332303a2054726164696e6720697320616c7265616479206163746976656044820152606401610d8c565b50600a805460ff1916600190811790915590565b6000611c8e6124b7565b600f821115611cfc5760405162461bcd60e51b815260206004820152603460248201527f45524332303a205468652073656c6c207461782063616e2774206265206d6f7260448201527365207468656e2031352070657263656e7461676560601b6064820152608401610d8c565b600980549083905560408051828152602081018590527f5e2deb0291797955e0066c5cebbc900e815e1099432b8f07462265a4f1c61b5191015b60405180910390a150600192915050565b6000611d516124b7565b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905284169063a9059cbb90604401602060405180830381600087803b158015611d9b57600080fd5b505af1158015611daf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd39190613ffc565b506001949350505050565b606060028054610dc990613deb565b6000611df76124b7565b600f5460ff1615611e565760405162461bcd60e51b815260206004820152602360248201527f45524332303a20546f6b656e204275726e20697320616c7265616479207061756044820152621cd95960ea1b6064820152608401610d8c565b600f5460ff6101009091041615156001148015611e805750600f5462010000900460ff1615156001145b8015611e9a5750600f546301000000900460ff1615156001145b15611eb75760405162461bcd60e51b8152600401610d8c90613e67565b600f805460ff1916600117905550600190565b60003380611eea5760405162461bcd60e51b8152600401610d8c90613ece565b6001600160a01b038416611f105760405162461bcd60e51b8152600401610d8c90613ece565b6001600160a01b03841661dead1415611f615760405162461bcd60e51b815260206004820152601360248201527245524332303a2044656164204164647265737360681b6044820152606401610d8c565b6001600160a01b038116600090815260166020526040902054831115611fd75760405162461bcd60e51b815260206004820152602560248201527f45524332303a20416d6f756e742065786365656473206163636f756e742062616044820152646c616e636560d81b6064820152608401610d8c565b6111a18185856125cb565b6000611fec6124b7565b600060085411801561200057506000600954115b61204c5760405162461bcd60e51b815260206004820181905260248201527f45524332303a2054617865732061726520616c72656164792072656d6f7665646044820152606401610d8c565b600880546009805460009384905590839055604080518381526020810194909452919290917fcaf24a92738254645a1e260866df8998f2a8a7e4915fd123b906e5426e6e92c69101611b63565b600080601154116120bc5760405162461bcd60e51b8152600401610d8c90613f29565b81601154101561210e5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a204c6f77207377617061626c65207265666c656374696f6e00006044820152606401610d8c565b600754612124906001600160a01b031683612b32565b816011546121329190613f6b565b601155506001919050565b60006121476124b7565b600f5460ff6101009091041615156001146121b05760405162461bcd60e51b8152602060048201526024808201527f45524332303a204175746f204c5020697320616c7265616479206e6f742070616044820152631d5cd95960e21b6064820152608401610d8c565b50600f805461ff0019169055600190565b60006121cb6124b7565b600f54610100900460ff16156122235760405162461bcd60e51b815260206004820181905260248201527f45524332303a204175746f204c5020697320616c7265616479207061757365646044820152606401610d8c565b600f5460ff16151560011480156122475750600f5462010000900460ff1615156001145b80156122615750600f546301000000900460ff1615156001145b1561227e5760405162461bcd60e51b8152600401610d8c90613e67565b600f805461ff00191661010017905550600190565b600061229d6124b7565b600f82111561230a5760405162461bcd60e51b815260206004820152603360248201527f45524332303a2054686520627579207461782063616e2774206265206d6f7265604482015272207468656e2031352070657263656e7461676560681b6064820152608401610d8c565b600880549083905560408051828152602081018590527fcaf24a92738254645a1e260866df8998f2a8a7e4915fd123b906e5426e6e92c69101611d36565b60006123526124b7565b6001600160a01b0382166000908152601e602052604090205460ff166123ce5760405162461bcd60e51b815260206004820152602b60248201527f45524332303a204163636f756e7420697320616c726561647920696e636c756460448201526a0cac840cce4deda40e8c2f60ab1b6064820152608401610d8c565b506001600160a01b03166000908152601e60205260409020805460ff19169055600190565b6123fb6124b7565b6001600160a01b0381166124605760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d8c565b61246981612d32565b50565b60006124766124b7565b506001600160a01b03166000908152601f60205260409020805460ff1916600190811790915590565b60006118f18284613f82565b60006118f18284613f11565b6000546001600160a01b03163314611b0e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d8c565b6001600160a01b0383166125375760405162461bcd60e51b8152600401610d8c90613ece565b6001600160a01b03821661255d5760405162461bcd60e51b8152600401610d8c90613ece565b6001600160a01b0383811660008181526017602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006118f18284613f6b565b6001600160a01b0383166000908152601f602052604090205460ff1615801561260d57506001600160a01b0382166000908152601f602052604090205460ff16155b6126595760405162461bcd60e51b815260206004820152601760248201527f45524332303a20426f74732063616e27742074726164650000000000000000006044820152606401610d8c565b6000546001600160a01b03848116911614801561268e57506001600160a01b0382166000908152601d602052604090205460ff165b156126a35761269e838383612d82565b505050565b6001600160a01b0383166000908152601d602052604090205460ff16806126e257506001600160a01b0382166000908152601d602052604090205460ff165b1561290557600a5460ff16151560011461273e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f74206163746976652e0000006044820152606401610d8c565b6001600160a01b0383166000908152601e602052604090205460ff16801561277f57506001600160a01b0382166000908152601e602052604090205460ff16155b156127ae5761278e8282612f03565b801561279e575061279e81612f7f565b1561269e5761269e838383612fdb565b6001600160a01b0383166000908152601e602052604090205460ff161580156127ef57506001600160a01b0382166000908152601e602052604090205460ff165b1561280d576127fd81612f7f565b1561269e5761269e8383836132cc565b6001600160a01b0383166000908152601e602052604090205460ff16801561284d57506001600160a01b0382166000908152601e602052604090205460ff165b1561269e576000546001600160a01b038481169116148061287b57506000546001600160a01b038381169116145b8061288e57506001600160a01b03831630145b806128a157506001600160a01b03821630145b156128b15761269e838383612d82565b6001600160a01b0382166000908152601d602052604090205460ff16156128eb576128db81612f7f565b1561269e5761269e838383612d82565b6128f58282612f03565b80156128db57506128db81612f7f565b6000546001600160a01b038481169116148061292e57506000546001600160a01b038381169116145b8061294157506001600160a01b03831630145b8061295457506001600160a01b03821630145b156128eb5761269e838383612d82565b600061296f82611848565b9050600081116129d35760405162461bcd60e51b815260206004820152602960248201527f45524332303a20436c61696d20616d6f756e742073686f756c64206265206d6f60448201526807265207468656e20360bc1b6064820152608401610d8c565b6001600160a01b0382166000908152601c602052604090205460ff1615612a535760405162461bcd60e51b815260206004820152602e60248201527f45524332303a2041646472657373206973206578636c7564656420746f20636c60448201526d30b4b6903932b33632b1ba34b7b760911b6064820152608401610d8c565b6014546001600160a01b038316600081815260186020908152604080832094909455601a8152838220429055601b90528281208190559151909183156108fc02918491818181858888f19350505050158015612ab3573d6000803e3d6000fd5b506001600160a01b038216600090815260196020526040902054612ad790826124ab565b6001600160a01b038316600081815260196020526040908190209290925590517faba62311dcf381aba06c0e76b1bb8e427e7c715edb8c84fc169cc1d1f51ac84e90612b269084815260200190565b60405180910390a25050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b6757612b67613fcb565b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612bbb57600080fd5b505afa158015612bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf39190614019565b81600181518110612c0657612c06613fcb565b6001600160a01b0392831660209182029290920101526012546040516318cbafe560e01b81529116906318cbafe590612c4c908590600090869089904290600401614036565b600060405180830381600087803b158015612c6657600080fd5b505af1158015612c7a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612ca291908101906140a7565b50505050565b600454612cb590826125bf565b600455600b54612cc590826124ab565b600b556040518181526000906001600160a01b0384169060008051602061417d8339815191529060200160405180910390a3816001600160a01b03167f8b1897d4e7a3b42570088bb1182eb6518c96a754d44bc9edd4669568bfa9832682604051612b2691815260200190565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b0383811691161480612da657506001600160a01b03821630145b15612e1b576001600160a01b038316600090815260166020526040902054612dce90826125bf565b6001600160a01b038085166000908152601660205260408082209390935590841681522054612dfd90826124ab565b6001600160a01b038316600090815260166020526040902055612ed0565b612e46612e2783613505565b6001600160a01b0384166000908152601b6020526040902054906124ab565b6001600160a01b038084166000908152601b60209081526040808320949094556014546018825284832055918616815260169091522054612e8790826125bf565b6001600160a01b038085166000908152601660205260408082209390935590841681522054612eb690826124ab565b6001600160a01b0383166000908152601660205260409020555b816001600160a01b0316836001600160a01b031660008051602061417d833981519152836040516125b291815260200190565b6000612f2e82612f28856001600160a01b031660009081526016602052604090205490565b906124ab565b6005541015610e595760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2057616c6c6574206c696d6974206578636565647300000000006044820152606401610d8c565b6000600654821115612fd35760405162461bcd60e51b815260206004820181905260248201527f45524332303a205472616e73616374696f6e206c696d697420657863656564736044820152606401610d8c565b506001919050565b6000612fe561359c565b9050600061300960646130036008548661249f90919063ffffffff16565b90613a8b565b9050600061301784836125bf565b905061304461302586613505565b6001600160a01b0387166000908152601b6020526040902054906124ab565b6001600160a01b038087166000908152601b6020908152604080832094909455601454601882528483205591891681526016909152205461308590856125bf565b6001600160a01b0380881660009081526016602052604080822093909355908716815220546130b490826124ab565b6001600160a01b0386166000908152601660205260408082209290925530815220546130e090836124ab565b306000908152601660205260409020556001831415613132573060009081526016602052604090205461311390836125bf565b3060009081526016602052604090205561312d8583612ca8565b613245565b826002141561316f573060009081526016602052604090205461315590836125bf565b3060009081526016602052604090205561312d8583613a97565b82600314156131dc5760105461318590836124ab565b601055600d5461319590836124ab565b600d556040518281526001600160a01b038616907fb7489ef47c48c720c40f3a3d8ee43af2461787f8211836228289add459fd887c906020015b60405180910390a2613245565b8260041415613245576011546131f290836124ab565b601155600e5461320290836124ab565b600e556040518281526001600160a01b038616907f1929a4bace25a65ec09f6599a42b7e272b7b015dbf1ac423102375dc81d74e15906020015b60405180910390a25b60408051848152602081018490526001600160a01b038816917f43430960b1421ddf891d3754c233acfb8948fc4b9912cbd819ca4f09701fbf58910160405180910390a2846001600160a01b0316866001600160a01b031660008051602061417d833981519152866040516132bc91815260200190565b60405180910390a3505050505050565b60006132d661359c565b905060006132f460646130036009548661249f90919063ffffffff16565b9050600061330284836125bf565b6001600160a01b03871660009081526016602052604090205490915061332890856125bf565b6001600160a01b03808816600090815260166020526040808220939093559087168152205461335790826124ab565b6001600160a01b03861660009081526016602052604080822092909255308152205461338390836124ab565b30600090815260166020526040808220929092556001600160a01b038816815220546133c3576001600160a01b0385166000908152601b60205260408120555b826001141561340057306000908152601660205260409020546133e690836125bf565b3060009081526016602052604090205561312d8683612ca8565b826002141561343d573060009081526016602052604090205461342390836125bf565b3060009081526016602052604090205561312d8683613a97565b82600314156134a15760105461345390836124ab565b601055600d5461346390836124ab565b600d556040518281526001600160a01b038716907fb7489ef47c48c720c40f3a3d8ee43af2461787f8211836228289add459fd887c906020016131cf565b8260041415613245576011546134b790836124ab565b601155600e546134c790836124ab565b600e556040518281526001600160a01b038716907f1929a4bace25a65ec09f6599a42b7e272b7b015dbf1ac423102375dc81d74e159060200161323c565b6013546000906001600160a01b038381169116148061353157506012546001600160a01b038381169116145b1561353e57506000919050565b6001600160a01b0382166000908152601860205260408120546014546135649190613f6b565b9050600454613588846001600160a01b031660009081526016602052604090205490565b6135929083613f82565b6118f19190613fb7565b6000806000600242444532433a6040516020016135be9695949392919061412d565b6040516020818303038152906040528051906020012060001c6135e19190614168565b90506000600342444532433a6040516020016136029695949392919061412d565b6040516020818303038152906040528051906020012060001c6136259190614168565b600f5490915060ff161515600114801561364c5750600f5460ff6101009091041615156001145b80156136655750600f5462010000900460ff1615156001145b156136735760049250613a83565b600f5460ff16151560011480156136975750600f5460ff6101009091041615156001145b80156136b15750600f546301000000900460ff1615156001145b156136bf5760039250613a83565b600f5460ff16151560011480156136e35750600f5462010000900460ff1615156001145b80156136fd5750600f546301000000900460ff1615156001145b1561370b5760029250613a83565b600f5460ff61010090910416151560011480156137355750600f5462010000900460ff1615156001145b801561374f5750600f546301000000900460ff1615156001145b1561375d5760019250613a83565b600f5460ff16151560011480156137815750600f5460ff6101009091041615156001145b156137a757816137945760039250613a83565b81600114156137a257600492505b613a83565b600f5460ff16151560011480156137cb5750600f5462010000900460ff1615156001145b156137de57816137945760029250613a83565b600f5460ff16151560011480156138035750600f546301000000900460ff1615156001145b1561382857816138165760029250613a83565b81600114156137a25760039250613a83565b600f5460ff61010090910416151560011480156138525750600f5462010000900460ff1615156001145b1561386557816137945760019250613a83565b600f5460ff61010090910416151560011480156138905750600f546301000000900460ff1615156001145b156138a357816138165760019250613a83565b600f5462010000900460ff16151560011480156138ce5750600f546301000000900460ff1615156001145b156138f357816138e15760019250613a83565b81600114156137a25760029250613a83565b600f5460ff1615156001141561395557600342444532433a6040516020016139209695949392919061412d565b6040516020818303038152906040528051906020012060001c6139439190614168565b61394e906002613f11565b9250613a83565b600f5460ff6101009091041615156001141561399d57806139795760019250613a83565b806001141561398b5760039250613a83565b80600214156137a25760049250613a83565b600f5462010000900460ff161515600114156139d357806139c15760019250613a83565b806001141561398b5760029250613a83565b600f546301000000900460ff16151560011415613a3557600342444532433a604051602001613a079695949392919061412d565b6040516020818303038152906040528051906020012060001c613a2a9190614168565b61394e906001613f11565b600442444532433a604051602001613a529695949392919061412d565b6040516020818303038152906040528051906020012060001c613a759190614168565b613a80906001613f11565b92505b509092915050565b60006118f18284613fb7565b8015613b5b576013546001600160a01b0316600090815260166020526040902054613ac290826124ab565b6013546001600160a01b0316600090815260166020526040902055600c54613aea90826124ab565b600c556013546040518281526001600160a01b039182169184169060008051602061417d8339815191529060200160405180910390a3816001600160a01b03167ffb42d133eca0812491d47088ea70321250d6ab9cfc23a318f640f7def1cb201c82604051612b2691815260200190565b5050565b6001600160a01b038116811461246957600080fd5b600060208284031215613b8657600080fd5b81356118f181613b5f565b600060208083528351808285015260005b81811015613bbe57858101830151858201604001528201613ba2565b81811115613bd0576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215613bf957600080fd5b8235613c0481613b5f565b946020939093013593505050565b600080600060608486031215613c2757600080fd5b8335613c3281613b5f565b92506020840135613c4281613b5f565b929592945050506040919091013590565b600060208284031215613c6557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613cab57613cab613c6c565b604052919050565b600067ffffffffffffffff821115613ccd57613ccd613c6c565b5060051b60200190565b60006020808385031215613cea57600080fd5b823567ffffffffffffffff811115613d0157600080fd5b8301601f81018513613d1257600080fd5b8035613d25613d2082613cb3565b613c82565b81815260059190911b82018301908381019087831115613d4457600080fd5b928401925b82841015613d6b578335613d5c81613b5f565b82529284019290840190613d49565b979650505050505050565b801515811461246957600080fd5b60008060408385031215613d9757600080fd5b8235613da281613b5f565b91506020830135613db281613d76565b809150509250929050565b60008060408385031215613dd057600080fd5b8235613ddb81613b5f565b91506020830135613db281613b5f565b600181811c90821680613dff57607f821691505b60208210811415613e2057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526021908201527f45524332303a20547265617375727920697320616c72656164792070617573656040820152601960fa1b606082015260800190565b60208082526041908201527f45524332303a20416c6c20666f75722066756e6374696f6e616c69746965732060408201527f63616e27742067657420706175736564206174207468652073616d652074696d6060820152606560f81b608082015260a00190565b60208082526013908201527245524332303a205a65726f204164647265737360681b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115613f2457613f24613efb565b500190565b60208082526022908201527f45524332303a20546865726520617265206e6f20746f6b656e7320746f207377604082015261061760f41b606082015260800190565b600082821015613f7d57613f7d613efb565b500390565b6000816000190483118215151615613f9c57613f9c613efb565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613fc657613fc6613fa1565b500490565b634e487b7160e01b600052603260045260246000fd5b6000600019821415613ff557613ff5613efb565b5060010190565b60006020828403121561400e57600080fd5b81516118f181613d76565b60006020828403121561402b57600080fd5b81516118f181613b5f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156140865784516001600160a01b031683529383019391830191600101614061565b50506001600160a01b03969096166060850152505050608001529392505050565b600060208083850312156140ba57600080fd5b825167ffffffffffffffff8111156140d157600080fd5b8301601f810185136140e257600080fd5b80516140f0613d2082613cb3565b81815260059190911b8201830190838101908783111561410f57600080fd5b928401925b82841015613d6b57835182529284019290840190614114565b95865260208601949094526040850192909252606090811b6bffffffffffffffffffffffff1916908401526074830152609482015260b40190565b60008261417757614177613fa1565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220f2ebad4a85ba1f775c84296e406de093790dee4d548789888fc387f1f46a732864736f6c63430008090033

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

00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000005f5e100000000000000000000000000ef681b51075a9d48ab27c53c5b8aff157ecef185000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000001a784379d99db4200000000000000000000000000000000000000000000000001a784379d99db4200000000000000000000000000000000000000000000000000000000000000000000094d61676963204261670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000546454c4958000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Magic Bag
Arg [1] : symbol_ (string): FELIX
Arg [2] : totalSupply_ (uint256): 100000000
Arg [3] : _treasury (address): 0xEf681B51075A9D48ab27C53C5B8afF157ECef185
Arg [4] : _reflectionCooldown (uint256): 60
Arg [5] : maxTxLimit_ (uint256): 2000000000000000000000000
Arg [6] : maxWalletLimit_ (uint256): 2000000000000000000000000

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 0000000000000000000000000000000000000000000000000000000005f5e100
Arg [3] : 000000000000000000000000ef681b51075a9d48ab27c53c5b8aff157ecef185
Arg [4] : 000000000000000000000000000000000000000000000000000000000000003c
Arg [5] : 00000000000000000000000000000000000000000001a784379d99db42000000
Arg [6] : 00000000000000000000000000000000000000000001a784379d99db42000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [8] : 4d61676963204261670000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [10] : 46454c4958000000000000000000000000000000000000000000000000000000


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.