prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Broken link in Slither recommendation due to typo in Wiki
  Hi, there is a typo (oarameters instead of parameters) in the first-level header "Unindexed ERC20 event oarameters" of the wiki: 
  https://github.com/crytic/slither/wiki/Detector-Documentation#unindexed-erc20-event-oarameters
  
  On [L. 19](https://github.com/crytic/slither/blob/3bc22a9b143828edec956f170bdef7234d6707d6/slither/detectors/erc/unindexed_event_parameters.py#L19) of the detector there is also the same typo on `WIKI_TITLE`.
  
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `slither/detectors/erc/unindexed_event_parameters.py`
  Content:
  ```
  1 """
  2 Detect mistakenly un-indexed ERC20 event parameters
  3 """
  4 from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification
  5 
  6 
  7 class UnindexedERC20EventParameters(AbstractDetector):
  8     """
  9     Un-indexed ERC20 event parameters
  10     """
  11 
  12     ARGUMENT = "erc20-indexed"
  13     HELP = "Un-indexed ERC20 event parameters"
  14     IMPACT = DetectorClassification.INFORMATIONAL
  15     CONFIDENCE = DetectorClassification.HIGH
  16 
  17     WIKI = "https://github.com/crytic/slither/wiki/Detector-Documentation#unindexed-erc20-event-parameters"
  18 
  19     WIKI_TITLE = "Unindexed ERC20 event oarameters"
  20     WIKI_DESCRIPTION = "Detects whether events defined by the `ERC20` specification that should have some parameters as `indexed` are missing the `indexed` keyword."
  21 
  22     # region wiki_exploit_scenario
  23     WIKI_EXPLOIT_SCENARIO = """
  24 ```solidity
  25 contract ERC20Bad {
  26     // ...
  27     event Transfer(address from, address to, uint value);
  28     event Approval(address owner, address spender, uint value);
  29 
  30     // ...
  31 }
  32 ```
  33 `Transfer` and `Approval` events should have the 'indexed' keyword on their two first parameters, as defined by the `ERC20` specification.
  34 Failure to include these keywords will exclude the parameter data in the transaction/block's bloom filter, so external tooling searching for these parameters may overlook them and fail to index logs from this token contract."""
  35     # endregion wiki_exploit_scenario
  36 
  37     WIKI_RECOMMENDATION = "Add the `indexed` keyword to event parameters that should include it, according to the `ERC20` specification."
  38 
  39     STANDARD_JSON = False
  40 
  41     @staticmethod
  42     def detect_erc20_unindexed_event_params(contract):
  43         """
  44         Detect un-indexed ERC20 event parameters in a given contract.
  45         :param contract: The contract to check ERC20 events for un-indexed parameters in.
  46         :return: A list of tuple(event, parameter) of parameters which should be indexed.
  47         """
  48         # Create our result array
  49         results = []
  50 
  51         # If this contract isn't an ERC20 token, we return our empty results.
  52         if not contract.is_erc20():
  53             return results
  54 
  55         # Loop through all events to look for poor form.
  56         for event in contract.events_declared:
  57 
  58             # If this is transfer/approval events, expect the first two parameters to be indexed.
  59             if event.full_name in [
  60                 "Transfer(address,address,uint256)",
  61                 "Approval(address,address,uint256)",
  62             ]:
  63                 if not event.elems[0].indexed:
  64                     results.append((event, event.elems[0]))
  65                 if not event.elems[1].indexed:
  66                     results.append((event, event.elems[1]))
  67 
  68         # Return the results.
  69         return results
  70 
  71     def _detect(self):
  72         """
  73         Detect un-indexed ERC20 event parameters in all contracts.
  74         """
  75         results = []
  76         for c in self.contracts:
  77             unindexed_params = self.detect_erc20_unindexed_event_params(c)
  78             if unindexed_params:
  79                 # Add each problematic event definition to our result list
  80                 for (event, parameter) in unindexed_params:
  81 
  82                     info = [
  83                         "ERC20 event ",
  84                         event,
  85                         f"does not index parameter {parameter}\n",
  86                     ]
  87 
  88                     # Add the events to the JSON (note: we do not add the params/vars as they have no source mapping).
  89                     res = self.generate_result(info)
  90 
  91                     res.add(event, {"parameter_name": parameter.name})
  92                     results.append(res)
  93 
  94         return results
  95
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/slither/detectors/erc/unindexed_event_parameters.py b/slither/detectors/erc/unindexed_event_parameters.py
  --- a/slither/detectors/erc/unindexed_event_parameters.py
  +++ b/slither/detectors/erc/unindexed_event_parameters.py
  @@ -16,7 +16,7 @@
   
       WIKI = "https://github.com/crytic/slither/wiki/Detector-Documentation#unindexed-erc20-event-parameters"
   
  -    WIKI_TITLE = "Unindexed ERC20 event oarameters"
  +    WIKI_TITLE = "Unindexed ERC20 event parameters"
       WIKI_DESCRIPTION = "Detects whether events defined by the `ERC20` specification that should have some parameters as `indexed` are missing the `indexed` keyword."
   
       # region wiki_exploit_scenario
  
verification_info: {"golden_diff": "diff --git a/slither/detectors/erc/unindexed_event_parameters.py b/slither/detectors/erc/unindexed_event_parameters.py\n--- a/slither/detectors/erc/unindexed_event_parameters.py\n+++ b/slither/detectors/erc/unindexed_event_parameters.py\n@@ -16,7 +16,7 @@\n \n     WIKI = \"https://github.com/crytic/slither/wiki/Detector-Documentation#unindexed-erc20-event-parameters\"\n \n-    WIKI_TITLE = \"Unindexed ERC20 event oarameters\"\n+    WIKI_TITLE = \"Unindexed ERC20 event parameters\"\n     WIKI_DESCRIPTION = \"Detects whether events defined by the `ERC20` specification that should have some parameters as `indexed` are missing the `indexed` keyword.\"\n \n     # region wiki_exploit_scenario\n", "issue": "Broken link in Slither recommendation due to typo in Wiki\nHi, there is a typo (oarameters instead of parameters) in the first-level header \"Unindexed ERC20 event oarameters\" of the wiki: \r\nhttps://github.com/crytic/slither/wiki/Detector-Documentation#unindexed-erc20-event-oarameters\r\n\r\nOn [L. 19](https://github.com/crytic/slither/blob/3bc22a9b143828edec956f170bdef7234d6707d6/slither/detectors/erc/unindexed_event_parameters.py#L19) of the detector there is also the same typo on `WIKI_TITLE`.\r\n\n", "before_files": [{"content": "\"\"\"\nDetect mistakenly un-indexed ERC20 event parameters\n\"\"\"\nfrom slither.detectors.abstract_detector import AbstractDetector, DetectorClassification\n\n\nclass UnindexedERC20EventParameters(AbstractDetector):\n    \"\"\"\n    Un-indexed ERC20 event parameters\n    \"\"\"\n\n    ARGUMENT = \"erc20-indexed\"\n    HELP = \"Un-indexed ERC20 event parameters\"\n    IMPACT = DetectorClassification.INFORMATIONAL\n    CONFIDENCE = DetectorClassification.HIGH\n\n    WIKI = \"https://github.com/crytic/slither/wiki/Detector-Documentation#unindexed-erc20-event-parameters\"\n\n    WIKI_TITLE = \"Unindexed ERC20 event oarameters\"\n    WIKI_DESCRIPTION = \"Detects whether events defined by the `ERC20` specification that should have some parameters as `indexed` are missing the `indexed` keyword.\"\n\n    # region wiki_exploit_scenario\n    WIKI_EXPLOIT_SCENARIO = \"\"\"\n```solidity\ncontract ERC20Bad {\n    // ...\n    event Transfer(address from, address to, uint value);\n    event Approval(address owner, address spender, uint value);\n\n    // ...\n}\n```\n`Transfer` and `Approval` events should have the 'indexed' keyword on their two first parameters, as defined by the `ERC20` specification.\nFailure to include these keywords will exclude the parameter data in the transaction/block's bloom filter, so external tooling searching for these parameters may overlook them and fail to index logs from this token contract.\"\"\"\n    # endregion wiki_exploit_scenario\n\n    WIKI_RECOMMENDATION = \"Add the `indexed` keyword to event parameters that should include it, according to the `ERC20` specification.\"\n\n    STANDARD_JSON = False\n\n    @staticmethod\n    def detect_erc20_unindexed_event_params(contract):\n        \"\"\"\n        Detect un-indexed ERC20 event parameters in a given contract.\n        :param contract: The contract to check ERC20 events for un-indexed parameters in.\n        :return: A list of tuple(event, parameter) of parameters which should be indexed.\n        \"\"\"\n        # Create our result array\n        results = []\n\n        # If this contract isn't an ERC20 token, we return our empty results.\n        if not contract.is_erc20():\n            return results\n\n        # Loop through all events to look for poor form.\n        for event in contract.events_declared:\n\n            # If this is transfer/approval events, expect the first two parameters to be indexed.\n            if event.full_name in [\n                \"Transfer(address,address,uint256)\",\n                \"Approval(address,address,uint256)\",\n            ]:\n                if not event.elems[0].indexed:\n                    results.append((event, event.elems[0]))\n                if not event.elems[1].indexed:\n                    results.append((event, event.elems[1]))\n\n        # Return the results.\n        return results\n\n    def _detect(self):\n        \"\"\"\n        Detect un-indexed ERC20 event parameters in all contracts.\n        \"\"\"\n        results = []\n        for c in self.contracts:\n            unindexed_params = self.detect_erc20_unindexed_event_params(c)\n            if unindexed_params:\n                # Add each problematic event definition to our result list\n                for (event, parameter) in unindexed_params:\n\n                    info = [\n                        \"ERC20 event \",\n                        event,\n                        f\"does not index parameter {parameter}\\n\",\n                    ]\n\n                    # Add the events to the JSON (note: we do not add the params/vars as they have no source mapping).\n                    res = self.generate_result(info)\n\n                    res.add(event, {\"parameter_name\": parameter.name})\n                    results.append(res)\n\n        return results\n", "path": "slither/detectors/erc/unindexed_event_parameters.py"}], "after_files": [{"content": "\"\"\"\nDetect mistakenly un-indexed ERC20 event parameters\n\"\"\"\nfrom slither.detectors.abstract_detector import AbstractDetector, DetectorClassification\n\n\nclass UnindexedERC20EventParameters(AbstractDetector):\n    \"\"\"\n    Un-indexed ERC20 event parameters\n    \"\"\"\n\n    ARGUMENT = \"erc20-indexed\"\n    HELP = \"Un-indexed ERC20 event parameters\"\n    IMPACT = DetectorClassification.INFORMATIONAL\n    CONFIDENCE = DetectorClassification.HIGH\n\n    WIKI = \"https://github.com/crytic/slither/wiki/Detector-Documentation#unindexed-erc20-event-parameters\"\n\n    WIKI_TITLE = \"Unindexed ERC20 event parameters\"\n    WIKI_DESCRIPTION = \"Detects whether events defined by the `ERC20` specification that should have some parameters as `indexed` are missing the `indexed` keyword.\"\n\n    # region wiki_exploit_scenario\n    WIKI_EXPLOIT_SCENARIO = \"\"\"\n```solidity\ncontract ERC20Bad {\n    // ...\n    event Transfer(address from, address to, uint value);\n    event Approval(address owner, address spender, uint value);\n\n    // ...\n}\n```\n`Transfer` and `Approval` events should have the 'indexed' keyword on their two first parameters, as defined by the `ERC20` specification.\nFailure to include these keywords will exclude the parameter data in the transaction/block's bloom filter, so external tooling searching for these parameters may overlook them and fail to index logs from this token contract.\"\"\"\n    # endregion wiki_exploit_scenario\n\n    WIKI_RECOMMENDATION = \"Add the `indexed` keyword to event parameters that should include it, according to the `ERC20` specification.\"\n\n    STANDARD_JSON = False\n\n    @staticmethod\n    def detect_erc20_unindexed_event_params(contract):\n        \"\"\"\n        Detect un-indexed ERC20 event parameters in a given contract.\n        :param contract: The contract to check ERC20 events for un-indexed parameters in.\n        :return: A list of tuple(event, parameter) of parameters which should be indexed.\n        \"\"\"\n        # Create our result array\n        results = []\n\n        # If this contract isn't an ERC20 token, we return our empty results.\n        if not contract.is_erc20():\n            return results\n\n        # Loop through all events to look for poor form.\n        for event in contract.events_declared:\n\n            # If this is transfer/approval events, expect the first two parameters to be indexed.\n            if event.full_name in [\n                \"Transfer(address,address,uint256)\",\n                \"Approval(address,address,uint256)\",\n            ]:\n                if not event.elems[0].indexed:\n                    results.append((event, event.elems[0]))\n                if not event.elems[1].indexed:\n                    results.append((event, event.elems[1]))\n\n        # Return the results.\n        return results\n\n    def _detect(self):\n        \"\"\"\n        Detect un-indexed ERC20 event parameters in all contracts.\n        \"\"\"\n        results = []\n        for c in self.contracts:\n            unindexed_params = self.detect_erc20_unindexed_event_params(c)\n            if unindexed_params:\n                # Add each problematic event definition to our result list\n                for (event, parameter) in unindexed_params:\n\n                    info = [\n                        \"ERC20 event \",\n                        event,\n                        f\"does not index parameter {parameter}\\n\",\n                    ]\n\n                    # Add the events to the JSON (note: we do not add the params/vars as they have no source mapping).\n                    res = self.generate_result(info)\n\n                    res.add(event, {\"parameter_name\": parameter.name})\n                    results.append(res)\n\n        return results\n", "path": "slither/detectors/erc/unindexed_event_parameters.py"}]}