```\nfunction _transfer(address from, address to, uint256 amount) internal override {\n    require(from != address(0), "ERC20: transfer from the zero address");\n    require(to != address(0), "ERC20: transfer to the zero address");\n    uint256 RewardsFee;\n    uint256 deadFees;\n    uint256 marketingFees;\n    uint256 liquidityFee;\n\n    if (!canTransferBeforeTradingIsEnabled[from]) {\n        require(tradingEnabled, "Trading has not yet been enabled");\n    }\n    if (amount == 0) {\n        super._transfer(from, to, 0);\n        return;\n    } \n\n    if (_isVesting[from]) {\n        if (block.timestamp < _vestingTimestamp[from] + 5 minutes) {\n            require(balanceOf(from) - amount >= tokensVesting[from], "cant sell vested tokens");\n        }\n        else {\n            tokensVesting[from] = 0;\n            _isVesting[from] = false;\n        }\n    }\n\n    \n    else if (!swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {\n        bool isSelling = automatedMarketMakerPairs[to];\n        bool isBuying = automatedMarketMakerPairs[from];\n\n        if (!isBuying && !isSelling) {\n            if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {\n                uint256 tFees = amount.mul(transferFee).div(100);\n                amount = amount.sub(tFees);\n                super._transfer(from, address(this), tFees);\n                super._transfer(from, to, amount);\n                dividendTracker.setBalance(from, getMultiplier(from));\n                dividendTracker.setBalance(to, getMultiplier(to));\n                _diamondHands[from] = false;\n                _multiplier[from] = false;\n                _holderFirstBuyTimestamp[from] = block.timestamp;\n                return;\n            }\n            else {\n                super._transfer(from, to, amount);\n                dividendTracker.setBalance(from, getMultiplier(from));\n                dividendTracker.setBalance(to, getMultiplier(to));\n                _diamondHands[from] = false;\n                _multiplier[from] = false;\n                _holderFirstBuyTimestamp[from] = block.timestamp;\n                return;\n            }\n        }\n\n        else if (isSelling) {\n            if (amount >= minimumForDiamondHands) {\n                RewardsFee = 8;\n            }\n            else {\n                RewardsFee = sellRewardsFee;\n            }\n            deadFees = sellDeadFees;\n            marketingFees = sellMarketingFees;\n            liquidityFee = sellLiquidityFee;\n\n            if (limitsInEffect) {\n            require(block.timestamp >= _holderLastTransferTimestamp[from] + cooldowntimer,\n                    "cooldown period active");\n            require(amount <= maxTX,"above max transaction limit");\n            _holderLastTransferTimestamp[from] = block.timestamp;\n\n            }\n            _diamondHands[from] = false;\n            _multiplier[from] = false;\n            _holderFirstBuyTimestamp[from] = block.timestamp;\n\n\n        } else if (isBuying) {\n\n            if (_diamondHands[to]) {\n                if (block.timestamp >= _holderBuy1Timestamp[to] + 1 days && balanceOf(to) >= minimumForDiamondHands) {\n                    super._transfer(from, to, amount);\n                    dividendTracker.setBalance(from, getMultiplier(from));\n                    dividendTracker.setBalance(to, getMultiplier(to));\n                    return;\n                }\n            }\n\n            if (!_multiplier[to]) {\n                _multiplier[to] = true;\n                _holderFirstBuyTimestamp[to] = block.timestamp;\n            }\n\n            if (!_diamondHands[to]) {\n                _diamondHands[to] = true;\n                _holderBuy1Timestamp[to] = block.timestamp;\n            }\n\n            RewardsFee = buyRewardsFee;\n            deadFees = buyDeadFees;\n            marketingFees = buyMarketingFees;\n            liquidityFee = buyLiquidityFee;\n\n            if (limitsInEffect) {\n            require(block.timestamp > launchtimestamp + delay,"you shall not pass");\n            require(tx.gasprice <= gasPriceLimit,"Gas price exceeds limit.");\n            require(_holderLastTransferBlock[to] != block.number,"Too many TX in block");\n            require(amount <= maxTX,"above max transaction limit");\n            _holderLastTransferBlock[to] = block.number;\n            }\n\n            uint256 contractBalanceRecipient = balanceOf(to);\n            require(contractBalanceRecipient + amount <= maxWallet,"Exceeds maximum wallet token amount." );\n        }\n\n        uint256 totalFees = RewardsFee.add(liquidityFee + marketingFees);\n\n        uint256 contractTokenBalance = balanceOf(address(this));\n\n        bool canSwap = contractTokenBalance >= swapTokensAtAmount;\n\n        if (canSwap && isSelling) {\n            swapping = true;\n\n            if (swapAndLiquifyEnabled && liquidityFee > 0 && totalBuyFees > 0) {\n                uint256 totalBuySell = buyAmount.add(sellAmount);\n                uint256 swapAmountBought = contractTokenBalance.mul(buyAmount).div(totalBuySell);\n                uint256 swapAmountSold = contractTokenBalance.mul(sellAmount).div(totalBuySell);\n                uint256 swapBuyTokens = swapAmountBought.mul(liquidityFee).div(totalBuyFees);\n                uint256 swapSellTokens = swapAmountSold.mul(liquidityFee).div(totalSellFees);\n                uint256 swapTokens = swapSellTokens.add(swapBuyTokens);\n\n                swapAndLiquify(swapTokens);\n            }\n\n            uint256 remainingBalance = balanceOf(address(this));\n            swapAndSendDividends(remainingBalance);\n            buyAmount = 1;\n            sellAmount = 1;\n            swapping = false;\n        }\n\n        uint256 fees = amount.mul(totalFees).div(100);\n        uint256 burntokens;\n\n        if (deadFees > 0) {\n        burntokens = amount.mul(deadFees) / 100;\n        super._transfer(from, DEAD, burntokens);\n        _totalSupply = _totalSupply.sub(burntokens);\n\n        }\n\n        amount = amount.sub(fees + burntokens);\n\n        if (isSelling) {\n            sellAmount = sellAmount.add(fees);\n        } \n        else {\n            buyAmount = buyAmount.add(fees);\n        }\n\n        super._transfer(from, address(this), fees);\n\n        uint256 gas = gasForProcessing;\n\n        try dividendTracker.process(gas) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) {\n            emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gas);\n        } catch {}\n    }\n\n    super._transfer(from, to, amount);\n    dividendTracker.setBalance(from, getMultiplier(from));\n    dividendTracker.setBalance(to, getMultiplier(to));\n}\n```\n