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

```asm
<HTTP_OK2>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %edx,-0x24(%rbp)
  movl   $0x0,-0x10(%rbp)
  jmp    L106
L90:
  addl   $0x1,-0x10(%rbp)
L106:
  mov    -0x10(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jne    L90
  mov    -0x10(%rbp),%eax
  add    $0x5,%eax
  mov    %eax,-0xc(%rbp)
  cmpl   $0x9,-0x24(%rbp)
  jbe    L17
  addl   $0x1,-0xc(%rbp)
L17:
  cmpl   $0x63,-0x24(%rbp)
  jbe    L30
  addl   $0x1,-0xc(%rbp)
L30:
  cmpl   $0x3e7,-0x24(%rbp)
  jbe    L75
  addl   $0x1,-0xc(%rbp)
L75:
  mov    -0xc(%rbp),%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <put_socket@plt>
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <socket_put_string@plt>
  mov    -0x24(%rbp),%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <socket_put_decimal@plt>
  lea    D5(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <socket_put_string@plt>
  mov    $0x0,%eax
  call   <socket_flush@plt>
  mov    -0x24(%rbp),%eax
  mov    %eax,-0xc(%rbp)
  movl   $0x0,-0x8(%rbp)
  movl   $0x0,-0x4(%rbp)
  jmp    L3
L62:
  subl   $0x416,-0xc(%rbp)
  mov    $0x416,%edi
  mov    $0x0,%eax
  call   <put_socket@plt>
  movl   $0x0,-0x4(%rbp)
  jmp    L82
L94:
  mov    -0x8(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <put_socket@plt>
  addl   $0x1,-0x8(%rbp)
  addl   $0x1,-0x4(%rbp)
L82:
  cmpl   $0x20a,-0x4(%rbp)
  jbe    L94
L3:
  cmpl   $0x415,-0xc(%rbp)
  ja     L62
  mov    -0xc(%rbp),%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <put_socket@plt>
  movl   $0x0,-0x4(%rbp)
  jmp    L84
L44:
  mov    -0x8(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <put_socket@plt>
  addl   $0x1,-0x8(%rbp)
  addl   $0x1,-0x4(%rbp)
L84:
  mov    -0xc(%rbp),%eax
  shr    %eax
  cmp    %eax,-0x4(%rbp)
  jb     L44
  nop
  nop
  leave
  ret
```

tool_calls: name: read_data
arguments: tag: D5
type: string

tool: D5: 



assistant: ```c
void HTTP_OK2(unsigned body[], unsigned header[], unsigned body_length) {
  unsigned header_length;
  unsigned cnt;
  unsigned length, index, packet_count;
  header_length = 0;
  while (header[header_length])
    header_length++;
  length = header_length + 5;
  if (body_length > 9)
    length++;
  if (body_length > 99)
    length++;
  if (body_length > 999)
    length++;
  put_socket(length);
  socket_put_string(header);
  socket_put_decimal(body_length);
  socket_put_string("\r\n\r\n");
  socket_flush();
  length = body_length;
  index = 0;
  packet_count = 0;
  while (length >= 1046) {
    length -= 1046;
    put_socket(1046);
    for (packet_count = 0; packet_count < 523; packet_count++) {
      put_socket(body[index]);
      index++;
    }
  }
  put_socket(length);
  for (packet_count = 0; packet_count < (length >> 1); packet_count++) {
    put_socket(body[index]);
    index++;
  }
}
```