```\nfunction _transfer(\n    address from,\n    address to,\n    uint256 amount\n) 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\n    if (amount == 0) {\n        super._transfer(from, to, 0);\n        return;\n    }\n\n    if (limitsEnabled) {\n        if (\n            from != owner() &&\n            to != owner() &&\n            to != address(0) &&\n            to != address(0xdead) &&\n            !swapping\n        ) {\n            if (!tradingEnabled) {\n                require(\n                    transferTaxExempt[from] || transferTaxExempt[to],\n                    "_transfer:: Trading is not active."\n                );\n            }\n\n            // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.\n            if (transferDelayEnabled) {\n                if (\n                    to != owner() &&\n                    to != address(dexRouter) &&\n                    to != address(dexPair)\n                ) {\n                    require(\n                        _holderLastTransferTimestamp[tx.origin] <\n                            block.number,\n                        "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."\n                    );\n                    _holderLastTransferTimestamp[tx.origin] = block.number;\n                }\n            }\n\n            //when buy\n            if (\n                automatedMarketMakerPairs[from] && !transferLimitExempt[to]\n            ) {\n                require(\n                    amount <= maxTx,\n                    "Buy transfer amount exceeds the maxTx."\n                );\n                require(\n                    amount + balanceOf(to) <= maxWallet,\n                    "Max wallet exceeded"\n                );\n            }\n            //when sell\n            else if (\n                automatedMarketMakerPairs[to] && !transferLimitExempt[from]\n            ) {\n                require(\n                    amount <= maxTx,\n                    "Sell transfer amount exceeds the maxTx."\n                );\n            } else if (!transferLimitExempt[to]) {\n                require(\n                    amount + balanceOf(to) <= maxWallet,\n                    "Max wallet exceeded"\n                );\n            }\n        }\n    }\n\n    uint256 contractTokenBalance = balanceOf(address(this));\n\n    bool canSwap = contractTokenBalance >= swapBackValueMin;\n\n    if (\n        canSwap &&\n        swapbackEnabled &&\n        !swapping &&\n        !automatedMarketMakerPairs[from] &&\n        !transferTaxExempt[from] &&\n        !transferTaxExempt[to]\n    ) {\n        swapping = true;\n\n        swapBack();\n\n        swapping = false;\n    }\n\n    bool takeFee = !swapping;\n\n    // if any account belongs to _isExcludedFromFee account then remove the fee\n    if (transferTaxExempt[from] || transferTaxExempt[to]) {\n        takeFee = false;\n    }\n\n    uint256 fees = 0;\n    // only take fees on buys/sells, do not take on wallet transfers\n    if (takeFee) {\n        // on sell\n        if (automatedMarketMakerPairs[to] && sellTaxTotal > 0) {\n            fees = amount.mul(sellTaxTotal).div(100);\n            tokensForProject += (fees * sellProjectTax) / sellTaxTotal;\n            tokensForMarketing += (fees * sellMarketingTax) / sellTaxTotal;\n        }\n        // on buy\n        else if (automatedMarketMakerPairs[from] && buyTaxTotal > 0) {\n            fees = amount.mul(buyTaxTotal).div(100);\n            tokensForProject += (fees * buyProjectTax) / buyTaxTotal;\n            tokensForMarketing += (fees * buyMarketingTax) / buyTaxTotal;\n        }\n\n        if (fees > 0) {\n            super._transfer(from, address(this), fees);\n        }\n\n        amount -= fees;\n    }\n\n    super._transfer(from, to, amount);\n}\n```\n