user: Please show me the C implementation that matches the assembly code listed below:

```asm
<main>:
  endbr64
  push   %rbp
  xor    %eax,%eax
  push   %rbx
  sub    $0x8,%rsp
  call   <queue_make@plt>
  xor    %edi,%edi
  test   %rax,%rax
  mov    %rax,%rbp
  setne  %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_length@plt>
  xor    %edi,%edi
  test   %eax,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_print@plt>
  mov    $0x1,%esi
  mov    %rbp,%rdi
  call   <queue_push_front@plt>
  mov    %eax,%edi
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_length@plt>
  xor    %edi,%edi
  cmp    $0x1,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_front@plt>
  xor    %edi,%edi
  cmp    $0x1,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_back@plt>
  xor    %edi,%edi
  cmp    $0x1,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_print@plt>
  mov    $0x2,%esi
  mov    %rbp,%rdi
  call   <queue_push_front@plt>
  mov    %eax,%edi
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_length@plt>
  xor    %edi,%edi
  cmp    $0x2,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_front@plt>
  xor    %edi,%edi
  cmp    $0x2,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_back@plt>
  xor    %edi,%edi
  cmp    $0x1,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_print@plt>
  mov    $0x3,%esi
  mov    %rbp,%rdi
  call   <queue_push_back@plt>
  mov    %eax,%edi
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_length@plt>
  xor    %edi,%edi
  cmp    $0x3,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_front@plt>
  xor    %edi,%edi
  cmp    $0x2,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_back@plt>
  xor    %edi,%edi
  cmp    $0x3,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_print@plt>
  mov    $0x4,%esi
  mov    %rbp,%rdi
  call   <queue_push_back@plt>
  mov    %eax,%edi
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_length@plt>
  xor    %edi,%edi
  cmp    $0x4,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_front@plt>
  xor    %edi,%edi
  cmp    $0x2,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_back@plt>
  xor    %edi,%edi
  cmp    $0x4,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_print@plt>
  mov    $0x5,%esi
  mov    %rbp,%rdi
  call   <queue_push_front@plt>
  mov    %eax,%edi
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_length@plt>
  xor    %edi,%edi
  cmp    $0x5,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_front@plt>
  xor    %edi,%edi
  cmp    $0x5,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_back@plt>
  xor    %edi,%edi
  cmp    $0x4,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_print@plt>
  mov    %rbp,%rdi
  call   <queue_pop_back@plt>
  mov    %rbp,%rdi
  call   <queue_length@plt>
  xor    %edi,%edi
  cmp    $0x4,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_front@plt>
  xor    %edi,%edi
  cmp    $0x5,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_back@plt>
  xor    %edi,%edi
  cmp    $0x3,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_print@plt>
  mov    %rbp,%rdi
  call   <queue_pop_back@plt>
  mov    %rbp,%rdi
  call   <queue_length@plt>
  xor    %edi,%edi
  cmp    $0x3,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_front@plt>
  xor    %edi,%edi
  cmp    $0x5,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_back@plt>
  xor    %edi,%edi
  cmp    $0x1,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_print@plt>
  mov    %rbp,%rdi
  call   <queue_pop_back@plt>
  mov    %rbp,%rdi
  call   <queue_length@plt>
  xor    %edi,%edi
  cmp    $0x2,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_front@plt>
  xor    %edi,%edi
  cmp    $0x5,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_back@plt>
  xor    %edi,%edi
  cmp    $0x2,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_print@plt>
  mov    %rbp,%rdi
  call   <queue_pop_front@plt>
  mov    %rbp,%rdi
  call   <queue_length@plt>
  xor    %edi,%edi
  cmp    $0x1,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_front@plt>
  xor    %edi,%edi
  cmp    $0x2,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_back@plt>
  xor    %edi,%edi
  cmp    $0x2,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_print@plt>
  mov    %rbp,%rdi
  call   <queue_pop_front@plt>
  mov    %rbp,%rdi
  call   <queue_length@plt>
  xor    %edi,%edi
  test   %eax,%eax
  sete   %dil
  xor    %ebx,%ebx
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_print@plt>
  lea    D17(%rip),%rdi
  call   <printf@plt>
L12:
  mov    %ebx,%esi
  mov    %rbp,%rdi
  call   <queue_push_front@plt>
  mov    %rbp,%rdi
  call   <queue_front@plt>
  xor    %edi,%edi
  cmp    %ebx,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_back@plt>
  xor    %edi,%edi
  test   %eax,%eax
  sete   %dil
  add    $0x1,%ebx
  call   <assert@plt>
  cmp    $0x7530,%ebx
  jne    L12
  mov    %rbp,%rdi
  call   <queue_length@plt>
  xor    %edi,%edi
  cmp    $0x7530,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_clear@plt>
  mov    %rbp,%rdi
  call   <queue_length@plt>
  xor    %edi,%edi
  test   %eax,%eax
  sete   %dil
  xor    %ebx,%ebx
  call   <assert@plt>
  lea    D14(%rip),%rdi
  call   <printf@plt>
  nopw   0x0(%rax,%rax,1)
L16:
  mov    %ebx,%esi
  mov    %rbp,%rdi
  call   <queue_push_back@plt>
  mov    %rbp,%rdi
  call   <queue_front@plt>
  xor    %edi,%edi
  test   %eax,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_back@plt>
  xor    %edi,%edi
  cmp    %ebx,%eax
  sete   %dil
  add    $0x1,%ebx
  call   <assert@plt>
  cmp    $0xf4240,%ebx
  jne    L16
  mov    %rbp,%rdi
  call   <queue_length@plt>
  xor    %edi,%edi
  cmp    $0xf4240,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  call   <queue_free@plt>
  add    $0x8,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D17
type: string
name: extract_symbolic_data
arguments: data_label: D14
type: string

tool: D17: 30k stress test...


tool: D14: 1M stress test...


assistant: ```c
int main(void) {
  struct Queue *queue;
  int ok, i;
  queue = queue_make();
  assert(queue != NULL);
  assert(queue_length(queue) == 0);
  queue_print(queue);
  ok = queue_push_front(queue, 1);
  assert(ok);
  assert(queue_length(queue) == 1);
  assert(queue_front(queue) == 1);
  assert(queue_back(queue) == 1);
  queue_print(queue);
  ok = queue_push_front(queue, 2);
  assert(ok);
  assert(queue_length(queue) == 2);
  assert(queue_front(queue) == 2);
  assert(queue_back(queue) == 1);
  queue_print(queue);
  ok = queue_push_back(queue, 3);
  assert(ok);
  assert(queue_length(queue) == 3);
  assert(queue_front(queue) == 2);
  assert(queue_back(queue) == 3);
  queue_print(queue);
  ok = queue_push_back(queue, 4);
  assert(ok);
  assert(queue_length(queue) == 4);
  assert(queue_front(queue) == 2);
  assert(queue_back(queue) == 4);
  queue_print(queue);
  ok = queue_push_front(queue, 5);
  assert(ok);
  assert(queue_length(queue) == 5);
  assert(queue_front(queue) == 5);
  assert(queue_back(queue) == 4);
  queue_print(queue);
  queue_pop_back(queue);
  assert(queue_length(queue) == 4);
  assert(queue_front(queue) == 5);
  assert(queue_back(queue) == 3);
  queue_print(queue);
  queue_pop_back(queue);
  assert(queue_length(queue) == 3);
  assert(queue_front(queue) == 5);
  assert(queue_back(queue) == 1);
  queue_print(queue);
  queue_pop_back(queue);
  assert(queue_length(queue) == 2);
  assert(queue_front(queue) == 5);
  assert(queue_back(queue) == 2);
  queue_print(queue);
  queue_pop_front(queue);
  assert(queue_length(queue) == 1);
  assert(queue_front(queue) == 2);
  assert(queue_back(queue) == 2);
  queue_print(queue);
  queue_pop_front(queue);
  assert(queue_length(queue) == 0);
  queue_print(queue);
  printf("30k stress test...\n");
  for (i = 0; i < 30000; i++) {
    queue_push_front(queue, i);
    assert(queue_front(queue) == i);
    assert(queue_back(queue) == 0);
  }
  assert(queue_length(queue) == 30000);
  queue_clear(queue);
  assert(queue_length(queue) == 0);
  printf("1M stress test...\n");
  for (i = 0; i < 1000000; i++) {
    queue_push_back(queue, i);
    assert(queue_front(queue) == 0);
    assert(queue_back(queue) == i);
  }
  assert(queue_length(queue) == 1000000);
  queue_free(queue);
  return 0;
}
```