user: Converte this assembly snippet into its equivalent C code:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  lea    D71(%rip),%rax
  mov    %rax,%rdi
  call   <running@plt>
  lea    D9(%rip),%rax
  mov    %rax,%rdi
  call   <testing@plt>
  movq   $0x4,-0x30(%rbp)
  mov    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <test_hasht_new@plt>
  mov    %rax,-0x28(%rbp)
  lea    D22(%rip),%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,-0x20(%rbp)
  lea    D0(%rip),%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,-0x18(%rbp)
  lea    D10(%rip),%rax
  mov    %rax,%rdi
  call   <testing@plt>
  mov    -0x18(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <test_hasht_insert@plt>
  lea    D27(%rip),%rax
  mov    %rax,%rdi
  call   <testing@plt>
  mov    -0x18(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <test_hasht_search@plt>
  lea    D105(%rip),%rax
  mov    %rax,%rdi
  call   <testing@plt>
  mov    -0x18(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <test_hasht_insert_duplicate@plt>
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  call   <testing@plt>
  lea    D99(%rip),%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,-0x10(%rbp)
  lea    D91(%rip),%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x10(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <test_hasht_insert@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x2,%esi
  mov    %rax,%rdi
  call   <test_hasht_used@plt>
  lea    D28(%rip),%rax
  mov    %rax,%rdi
  call   <testing@plt>
  mov    -0x30(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <test_hasht_resize@plt>
  lea    D44(%rip),%rax
  mov    %rax,%rdi
  call   <testing@plt>
  mov    -0x18(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <test_hasht_delete@plt>
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <hasht_free@plt>
  mov    $0x0,%eax
  leave
  ret
```

tool_calls: name: parse_data
arguments: tag: D71
type_guessed: string
name: parse_data
arguments: tag: D9
type_guessed: string
name: parse_data
arguments: tag: D22
type_guessed: string
name: parse_data
arguments: tag: D0
type_guessed: string
name: parse_data
arguments: tag: D10
type_guessed: string
name: parse_data
arguments: tag: D27
type_guessed: string
name: parse_data
arguments: tag: D105
type_guessed: string
name: parse_data
arguments: tag: D29
type_guessed: string
name: parse_data
arguments: tag: D99
type_guessed: string
name: parse_data
arguments: tag: D91
type_guessed: string
name: parse_data
arguments: tag: D28
type_guessed: string
name: parse_data
arguments: tag: D44
type_guessed: string

tool: D71: hash table

tool: D9: new

tool: D22: foo

tool: D0: bar

tool: D10: insert

tool: D27: search

tool: D105: insert duplicate

tool: D29: size

tool: D99: the answer?

tool: D91: 42

tool: D28: resize

tool: D44: remove

assistant: ```c
int main() {
  running("hash table");
  testing("new");
  size_t size = 4;
  struct hasht *t = test_hasht_new(size);
  char *k = strdup("foo");
  char *v = strdup("bar");
  testing("insert");
  test_hasht_insert(t, k, v);
  testing("search");
  test_hasht_search(t, k, v);
  testing("insert duplicate");
  test_hasht_insert_duplicate(t, k, v);
  testing("size");
  char *k2 = strdup("the answer?");
  char *v2 = strdup("42");
  test_hasht_insert(t, k2, v2);
  test_hasht_used(t, 2);
  testing("resize");
  test_hasht_resize(t, size);
  testing("remove");
  test_hasht_delete(t, k, v);
  hasht_free(t);
}
```