user: What would the C source look like for the assembly code provided here?

```asm
<parse_stat_file>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xc0,%rsp
  mov    %rdi,-0xb8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D28(%rip),%rax
  mov    %rax,%rsi
  lea    D54(%rip),%rax
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0xa0(%rbp)
  cmpq   $0x0,-0xa0(%rbp)
  je     L87
  mov    -0xa0(%rbp),%rax
  mov    %rax,%rdi
  call   <rewind@plt>
  movl   $0x0,-0xa4(%rbp)
  jmp    L20
L26:
  lea    -0x90(%rbp),%rax
  lea    D57(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strtok@plt>
  mov    %rax,-0x98(%rbp)
  cmpq   $0x0,-0x98(%rbp)
  jne    L32
  jmp    L20
L32:
  lea    D57(%rip),%rax
  mov    %rax,%rsi
  mov    $0x0,%edi
  call   <strtok@plt>
  mov    %rax,-0x98(%rbp)
  cmpq   $0x0,-0x98(%rbp)
  jne    L21
  jmp    L20
L21:
  mov    -0x98(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  test   %eax,%eax
  jle    L18
  mov    -0x98(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
L18:
  mov    -0xa4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0xb8(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x98(%rbp),%rax
  mov    %rax,%rdx
  lea    D51(%rip),%rax
  mov    %rax,%rsi
  mov    %rcx,%rdi
  call   <sprintf@plt>
  mov    %eax,%edx
  mov    -0xa4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0xa4(%rbp)
L20:
  mov    -0xa0(%rbp),%rdx
  lea    -0x90(%rbp),%rax
  mov    $0x80,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  jne    L26
  mov    -0xa0(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  lea    D45(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  cmpl   $0x0,-0xa4(%rbp)
  jle    L103
  mov    -0xa4(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0xb8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  jmp    L114
L103:
  mov    -0xa4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0xb8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  jmp    L114
L87:
  nop
L114:
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L86
  call   <__stack_chk_fail@plt>
L86:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_label: D28
data_type: string
name: retrieve_data
arguments: data_label: D54
data_type: string
name: retrieve_data
arguments: data_label: D57
data_type: string
name: retrieve_data
arguments: data_label: D51
data_type: string
name: retrieve_data
arguments: data_label: D45
data_type: string

tool: D28: r

tool: D54: /tmp/rndc_tsar.txt

tool: D57: ,

tool: D51: %s,

tool: D45: rm /tmp/rndc_tsar.txt

assistant: ```c
void parse_stat_file(char buf[]) {
  FILE *fp = fopen("/tmp/rndc_tsar.txt", "r");
  if (!fp)
    return;
  rewind(fp);
  int pos = 0;
  char line[128];
  while (fgets(line, 128, fp)) {
    char *s = strtok(line, ",");
    if (!s)
      continue;
    s = strtok(NULL, ",");
    if (!s)
      continue;
    if (strlen(s) > 0)
      s[strlen(s) - 1] = '\0';
    pos += sprintf(buf + pos, "%s,", s);
  }
  fclose(fp);
  system("rm /tmp/rndc_tsar.txt");
  if (pos > 0)
    buf[pos - 1] = '\0';
  else
    buf[pos] = '\0';
}
```