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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    $0x0,%eax
  call   <queue_make@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  setne  %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_length@plt>
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_print@plt>
  mov    -0x8(%rbp),%rax
  mov    $0x1,%esi
  mov    %rax,%rdi
  call   <queue_push_front@plt>
  mov    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_length@plt>
  cmp    $0x1,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_front@plt>
  cmp    $0x1,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_back@plt>
  cmp    $0x1,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_print@plt>
  mov    -0x8(%rbp),%rax
  mov    $0x2,%esi
  mov    %rax,%rdi
  call   <queue_push_front@plt>
  mov    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_length@plt>
  cmp    $0x2,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_front@plt>
  cmp    $0x2,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_back@plt>
  cmp    $0x1,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_print@plt>
  mov    -0x8(%rbp),%rax
  mov    $0x3,%esi
  mov    %rax,%rdi
  call   <queue_push_back@plt>
  mov    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_length@plt>
  cmp    $0x3,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_front@plt>
  cmp    $0x2,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_back@plt>
  cmp    $0x3,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_print@plt>
  mov    -0x8(%rbp),%rax
  mov    $0x4,%esi
  mov    %rax,%rdi
  call   <queue_push_back@plt>
  mov    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_length@plt>
  cmp    $0x4,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_front@plt>
  cmp    $0x2,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_back@plt>
  cmp    $0x4,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_print@plt>
  mov    -0x8(%rbp),%rax
  mov    $0x5,%esi
  mov    %rax,%rdi
  call   <queue_push_front@plt>
  mov    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_length@plt>
  cmp    $0x5,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_front@plt>
  cmp    $0x5,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_back@plt>
  cmp    $0x4,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_print@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_pop_back@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_length@plt>
  cmp    $0x4,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_front@plt>
  cmp    $0x5,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_back@plt>
  cmp    $0x3,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_print@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_pop_back@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_length@plt>
  cmp    $0x3,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_front@plt>
  cmp    $0x5,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_back@plt>
  cmp    $0x1,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_print@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_pop_back@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_length@plt>
  cmp    $0x2,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_front@plt>
  cmp    $0x5,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_back@plt>
  cmp    $0x2,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_print@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_pop_front@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_length@plt>
  cmp    $0x1,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_front@plt>
  cmp    $0x2,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_back@plt>
  cmp    $0x2,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_print@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_pop_front@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_length@plt>
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_print@plt>
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  movl   $0x0,-0x10(%rbp)
  jmp    L30
L16:
  mov    -0x10(%rbp),%edx
  mov    -0x8(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <queue_push_front@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_front@plt>
  cmp    %eax,-0x10(%rbp)
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_back@plt>
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  addl   $0x1,-0x10(%rbp)
L30:
  cmpl   $0x752f,-0x10(%rbp)
  jle    L16
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_length@plt>
  cmp    $0x7530,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_clear@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_length@plt>
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  lea    D5(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  movl   $0x0,-0x10(%rbp)
  jmp    L7
L29:
  mov    -0x10(%rbp),%edx
  mov    -0x8(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <queue_push_back@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_front@plt>
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_back@plt>
  cmp    %eax,-0x10(%rbp)
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  addl   $0x1,-0x10(%rbp)
L7:
  cmpl   $0xf423f,-0x10(%rbp)
  jle    L29
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_length@plt>
  cmp    $0xf4240,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <queue_free@plt>
  mov    $0x0,%eax
  leave
  ret
```

tool_calls: name: read_data
arguments: tag: D3
datatype: string
name: read_data
arguments: tag: D5
datatype: string

tool: D3: 30k stress test...


tool: D5: 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;
}
```