We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
function-id not zero-padding function signature 
```
ERC20:
+---------------------------------------+------------+
|                  Name                 |     ID     |
+---------------------------------------+------------+
|             totalSupply()             | 0x18160ddd |
|           balanceOf(address)          | 0x70a08231 |
|       allowance(address,address)      | 0xdd62ed3e |
|       transfer(address,uint256)       | 0xa9059cbb |
| transferFrom(address,address,uint256) | 0x23b872dd |
|        approve(address,uint256)       | 0x95ea7b3  |
+---------------------------------------+------------+

```

It's a minor annoyance, but for approve it outputs `0x95ea7b3` instead of `0x095ea7b3`. It is the same numerically, of course, but the function signature is more of an opaque 4-byte identifier than something numerically quantified.


function-id not zero-padding function signature 
```
ERC20:
+---------------------------------------+------------+
|                  Name                 |     ID     |
+---------------------------------------+------------+
|             totalSupply()             | 0x18160ddd |
|           balanceOf(address)          | 0x70a08231 |
|       allowance(address,address)      | 0xdd62ed3e |
|       transfer(address,uint256)       | 0xa9059cbb |
| transferFrom(address,address,uint256) | 0x23b872dd |
|        approve(address,uint256)       | 0x95ea7b3  |
+---------------------------------------+------------+

```

It's a minor annoyance, but for approve it outputs `0x95ea7b3` instead of `0x095ea7b3`. It is the same numerically, of course, but the function signature is more of an opaque 4-byte identifier than something numerically quantified.



--- 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/printers/summary/function_ids.py`
Content:
```
1 """
2     Module printing summary of the contract
3 """
4 from slither.printers.abstract_printer import AbstractPrinter
5 from slither.utils.function import get_function_id
6 from slither.utils.myprettytable import MyPrettyTable
7 
8 
9 class FunctionIds(AbstractPrinter):
10 
11     ARGUMENT = 'function-id'
12     HELP = 'Print the keccack256 signature of the functions'
13 
14     WIKI = 'https://github.com/trailofbits/slither/wiki/Printer-documentation#function-id'
15 
16     def output(self, _filename):
17         """
18             _filename is not used
19             Args:
20                 _filename(string)
21         """
22 
23         txt = ''
24         all_tables = []
25         for contract in self.slither.contracts_derived:
26             txt += '\n{}:\n'.format(contract.name)
27             table = MyPrettyTable(['Name', 'ID'])
28             for function in contract.functions:
29                 if function.visibility in ['public', 'external']:
30                     table.add_row([function.solidity_signature, hex(get_function_id(function.solidity_signature))])
31             for variable in contract.state_variables:
32                 if variable.visibility in ['public']:
33                     sig = variable.function_name
34                     table.add_row([sig, hex(get_function_id(sig))])
35             txt += str(table) + '\n'
36             all_tables.append((contract.name, table))
37 
38         self.info(txt)
39 
40         res = self.generate_output(txt)
41         for name, table in all_tables:
42             res.add_pretty_table(table, name)
43 
44         return res
```
--- 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()

```

diff --git a/slither/printers/summary/function_ids.py b/slither/printers/summary/function_ids.py
--- a/slither/printers/summary/function_ids.py
+++ b/slither/printers/summary/function_ids.py
@@ -27,11 +27,13 @@
             table = MyPrettyTable(['Name', 'ID'])
             for function in contract.functions:
                 if function.visibility in ['public', 'external']:
-                    table.add_row([function.solidity_signature, hex(get_function_id(function.solidity_signature))])
+                    function_id = get_function_id(function.solidity_signature)
+                    table.add_row([function.solidity_signature, f"{function_id:#0{10}x}"])
             for variable in contract.state_variables:
                 if variable.visibility in ['public']:
                     sig = variable.function_name
-                    table.add_row([sig, hex(get_function_id(sig))])
+                    function_id = get_function_id(sig)
+                    table.add_row([sig, f"{function_id:#0{10}x}"])
             txt += str(table) + '\n'
             all_tables.append((contract.name, table))

{"golden_diff": "diff --git a/slither/printers/summary/function_ids.py b/slither/printers/summary/function_ids.py\n--- a/slither/printers/summary/function_ids.py\n+++ b/slither/printers/summary/function_ids.py\n@@ -27,11 +27,13 @@\n             table = MyPrettyTable(['Name', 'ID'])\n             for function in contract.functions:\n                 if function.visibility in ['public', 'external']:\n-                    table.add_row([function.solidity_signature, hex(get_function_id(function.solidity_signature))])\n+                    function_id = get_function_id(function.solidity_signature)\n+                    table.add_row([function.solidity_signature, f\"{function_id:#0{10}x}\"])\n             for variable in contract.state_variables:\n                 if variable.visibility in ['public']:\n                     sig = variable.function_name\n-                    table.add_row([sig, hex(get_function_id(sig))])\n+                    function_id = get_function_id(sig)\n+                    table.add_row([sig, f\"{function_id:#0{10}x}\"])\n             txt += str(table) + '\\n'\n             all_tables.append((contract.name, table))\n", "issue": "function-id not zero-padding function signature \n```\r\nERC20:\r\n+---------------------------------------+------------+\r\n|                  Name                 |     ID     |\r\n+---------------------------------------+------------+\r\n|             totalSupply()             | 0x18160ddd |\r\n|           balanceOf(address)          | 0x70a08231 |\r\n|       allowance(address,address)      | 0xdd62ed3e |\r\n|       transfer(address,uint256)       | 0xa9059cbb |\r\n| transferFrom(address,address,uint256) | 0x23b872dd |\r\n|        approve(address,uint256)       | 0x95ea7b3  |\r\n+---------------------------------------+------------+\r\n\r\n```\r\n\r\nIt's a minor annoyance, but for approve it outputs `0x95ea7b3` instead of `0x095ea7b3`. It is the same numerically, of course, but the function signature is more of an opaque 4-byte identifier than something numerically quantified.\r\n\r\n\nfunction-id not zero-padding function signature \n```\r\nERC20:\r\n+---------------------------------------+------------+\r\n|                  Name                 |     ID     |\r\n+---------------------------------------+------------+\r\n|             totalSupply()             | 0x18160ddd |\r\n|           balanceOf(address)          | 0x70a08231 |\r\n|       allowance(address,address)      | 0xdd62ed3e |\r\n|       transfer(address,uint256)       | 0xa9059cbb |\r\n| transferFrom(address,address,uint256) | 0x23b872dd |\r\n|        approve(address,uint256)       | 0x95ea7b3  |\r\n+---------------------------------------+------------+\r\n\r\n```\r\n\r\nIt's a minor annoyance, but for approve it outputs `0x95ea7b3` instead of `0x095ea7b3`. It is the same numerically, of course, but the function signature is more of an opaque 4-byte identifier than something numerically quantified.\r\n\r\n\n", "before_files": [{"content": "\"\"\"\n    Module printing summary of the contract\n\"\"\"\nfrom slither.printers.abstract_printer import AbstractPrinter\nfrom slither.utils.function import get_function_id\nfrom slither.utils.myprettytable import MyPrettyTable\n\n\nclass FunctionIds(AbstractPrinter):\n\n    ARGUMENT = 'function-id'\n    HELP = 'Print the keccack256 signature of the functions'\n\n    WIKI = 'https://github.com/trailofbits/slither/wiki/Printer-documentation#function-id'\n\n    def output(self, _filename):\n        \"\"\"\n            _filename is not used\n            Args:\n                _filename(string)\n        \"\"\"\n\n        txt = ''\n        all_tables = []\n        for contract in self.slither.contracts_derived:\n            txt += '\\n{}:\\n'.format(contract.name)\n            table = MyPrettyTable(['Name', 'ID'])\n            for function in contract.functions:\n                if function.visibility in ['public', 'external']:\n                    table.add_row([function.solidity_signature, hex(get_function_id(function.solidity_signature))])\n            for variable in contract.state_variables:\n                if variable.visibility in ['public']:\n                    sig = variable.function_name\n                    table.add_row([sig, hex(get_function_id(sig))])\n            txt += str(table) + '\\n'\n            all_tables.append((contract.name, table))\n\n        self.info(txt)\n\n        res = self.generate_output(txt)\n        for name, table in all_tables:\n            res.add_pretty_table(table, name)\n\n        return res", "path": "slither/printers/summary/function_ids.py"}], "after_files": [{"content": "\"\"\"\n    Module printing summary of the contract\n\"\"\"\nfrom slither.printers.abstract_printer import AbstractPrinter\nfrom slither.utils.function import get_function_id\nfrom slither.utils.myprettytable import MyPrettyTable\n\n\nclass FunctionIds(AbstractPrinter):\n\n    ARGUMENT = 'function-id'\n    HELP = 'Print the keccack256 signature of the functions'\n\n    WIKI = 'https://github.com/trailofbits/slither/wiki/Printer-documentation#function-id'\n\n    def output(self, _filename):\n        \"\"\"\n            _filename is not used\n            Args:\n                _filename(string)\n        \"\"\"\n\n        txt = ''\n        all_tables = []\n        for contract in self.slither.contracts_derived:\n            txt += '\\n{}:\\n'.format(contract.name)\n            table = MyPrettyTable(['Name', 'ID'])\n            for function in contract.functions:\n                if function.visibility in ['public', 'external']:\n                    function_id = get_function_id(function.solidity_signature)\n                    table.add_row([function.solidity_signature, f\"{function_id:#0{10}x}\"])\n            for variable in contract.state_variables:\n                if variable.visibility in ['public']:\n                    sig = variable.function_name\n                    function_id = get_function_id(sig)\n                    table.add_row([sig, f\"{function_id:#0{10}x}\"])\n            txt += str(table) + '\\n'\n            all_tables.append((contract.name, table))\n\n        self.info(txt)\n\n        res = self.generate_output(txt)\n        for name, table in all_tables:\n            res.add_pretty_table(table, name)\n\n        return res", "path": "slither/printers/summary/function_ids.py"}]}