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

```asm
<HTTP_OK2>:
  endbr64
  push   %r13
  mov    %edx,%r13d
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    (%rsi),%edi
  test   %edi,%edi
  je     L4
  xor    %edi,%edi
L43:
  lea    0x1(%rdi),%eax
  mov    %edi,%edx
  mov    %rax,%rdi
  mov    0x0(%rbp,%rax,4),%eax
  test   %eax,%eax
  jne    L43
  add    $0x6,%edx
L114:
  cmp    $0x9,%r13d
  jbe    L9
  cmp    $0x63,%r13d
  jbe    L53
  cmp    $0x3e7,%r13d
  jbe    L98
  add    $0x8,%edi
  xor    %eax,%eax
  call   <put_socket@plt>
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    $0x20b,%ebp
  call   <socket_put_string@plt>
  mov    %r13d,%edi
  xor    %eax,%eax
  call   <socket_put_decimal@plt>
  lea    D3(%rip),%rdi
  xor    %eax,%eax
  call   <socket_put_string@plt>
  xor    %eax,%eax
  call   <socket_flush@plt>
  cmp    $0x415,%r13d
  jbe    L105
L57:
  mov    $0x416,%edi
  xor    %eax,%eax
  lea    -0x20b(%rbp),%ebx
  sub    $0x416,%r13d
  call   <put_socket@plt>
  nopl   (%rax)
L103:
  mov    %ebx,%eax
  add    $0x1,%ebx
  mov    (%r12,%rax,4),%edi
  xor    %eax,%eax
  call   <put_socket@plt>
  cmp    %ebp,%ebx
  jne    L103
  lea    0x20b(%rbp),%eax
  cmp    $0x415,%r13d
  jbe    L19
  mov    %eax,%ebp
  jmp    L57
L9:
  mov    %edx,%edi
  xor    %eax,%eax
  call   <put_socket@plt>
  mov    %rbp,%rdi
  xor    %eax,%eax
  xor    %ebp,%ebp
  call   <socket_put_string@plt>
  mov    %r13d,%edi
  xor    %eax,%eax
  call   <socket_put_decimal@plt>
  lea    D3(%rip),%rdi
  xor    %eax,%eax
  call   <socket_put_string@plt>
  xor    %eax,%eax
  call   <socket_flush@plt>
L19:
  mov    %r13d,%edi
  xor    %eax,%eax
  call   <put_socket@plt>
  shr    %r13d
  je     L51
L135:
  xor    %ebx,%ebx
L128:
  lea    0x0(%rbp,%rbx,1),%eax
  add    $0x1,%ebx
  mov    (%r12,%rax,4),%edi
  xor    %eax,%eax
  call   <put_socket@plt>
  cmp    %r13d,%ebx
  jb     L128
L51:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L53:
  add    $0x6,%edi
L86:
  xor    %eax,%eax
  call   <put_socket@plt>
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <socket_put_string@plt>
  mov    %r13d,%edi
  xor    %eax,%eax
  call   <socket_put_decimal@plt>
  lea    D3(%rip),%rdi
  xor    %eax,%eax
  call   <socket_put_string@plt>
  xor    %eax,%eax
  call   <socket_flush@plt>
L105:
  mov    %r13d,%edi
  xor    %eax,%eax
  shr    %r13d
  xor    %ebp,%ebp
  call   <put_socket@plt>
  jmp    L135
L4:
  mov    $0x5,%edx
  jmp    L114
L98:
  add    $0x7,%edi
  jmp    L86
```

tool_calls: name: read_data
arguments: data_tag: D3
datatype: string

tool: D3: 



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++;
  }
}
```