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

```asm
<GetINIString>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x140,%rsp
  mov    %rdi,-0x118(%rbp)
  mov    %rsi,-0x120(%rbp)
  mov    %rdx,-0x128(%rbp)
  mov    %rcx,-0x130(%rbp)
  mov    %r8d,-0x134(%rbp)
  mov    %r9,-0x140(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x130(%rbp),%rax
  cmp    -0x128(%rbp),%rax
  je     L8
  mov    -0x128(%rbp),%rdx
  mov    -0x130(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
L8:
  mov    -0x140(%rbp),%rax
  lea    D12(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x108(%rbp)
  cmpq   $0x0,-0x108(%rbp)
  je     L85
  lea    -0xb0(%rbp),%rax
  lea    D24(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x118(%rbp),%rdx
  lea    -0xb0(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  lea    -0xb0(%rbp),%rax
  lea    D17(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  mov    -0x120(%rbp),%rdx
  lea    -0x60(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x60(%rbp),%rax
  lea    D39(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L11:
  mov    -0x108(%rbp),%rdx
  lea    -0x100(%rbp),%rax
  mov    $0x50,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  lea    -0x100(%rbp),%rdx
  lea    -0x100(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <sgets@plt>
  lea    -0xb0(%rbp),%rdx
  lea    -0x100(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %rax,%rax
  jne    L57
L40:
  mov    -0x108(%rbp),%rdx
  lea    -0x100(%rbp),%rax
  mov    $0x50,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  lea    -0x100(%rbp),%rdx
  lea    -0x100(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <sgets@plt>
  lea    -0x60(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  lea    -0x60(%rbp),%rcx
  lea    -0x100(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncasecmp@plt>
  test   %rax,%rax
  jne    L101
  lea    -0x60(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cltq
  lea    -0x100(%rbp),%rdx
  add    %rax,%rdx
  mov    -0x130(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x108(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  jmp    L44
L101:
  movzbl -0x100(%rbp),%eax
  test   %al,%al
  je     L57
  mov    -0x108(%rbp),%rax
  mov    %rax,%rdi
  call   <feof@plt>
  test   %eax,%eax
  jne    L57
  mov    -0x108(%rbp),%rax
  mov    %rax,%rdi
  call   <ferror@plt>
  test   %eax,%eax
  je     L40
L57:
  mov    -0x108(%rbp),%rax
  mov    %rax,%rdi
  call   <feof@plt>
  test   %eax,%eax
  jne    L98
  mov    -0x108(%rbp),%rax
  mov    %rax,%rdi
  call   <ferror@plt>
  test   %eax,%eax
  je     L11
L98:
  mov    -0x108(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  jmp    L44
L85:
  nop
L44:
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L16
  call   <__stack_chk_fail@plt>
L16:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D12
datatype: string
name: extract_symbolic_data
arguments: label: D24
datatype: string
name: extract_symbolic_data
arguments: label: D17
datatype: string
name: extract_symbolic_data
arguments: label: D39
datatype: string

tool: D12: rb

tool: D24: [

tool: D17: ]

tool: D39: =

assistant: ```c
void GetINIString(char *section, char *key, char *def, char *dest, int destsize, char *filename) {
  FILE *fp;
  char s1[80], s2[80], s3[80];
  if (dest != def)
    strcpy(dest, def);
  fp = fopen(filename, "rb");
  if (fp == NULL)
    return;
  strcpy(s2, "[");
  strcat(s2, section);
  strcat(s2, "]");
  strcpy(s3, key);
  strcat(s3, "=");
  do {
    fgets(s1, 80, fp);
    sgets(s1, s1);
    if (strcasecmp(s1, s2) == 0) {
      do {
        fgets(s1, 80, fp);
        sgets(s1, s1);
        if (strncasecmp(s1, s3, strlen(s3)) == 0) {
          strcpy(dest, s1 + strlen(s3));
          fclose(fp);
          return;
        }
      } while (s1[0] != 0 && !feof(fp) && !ferror(fp));
    }
  } while (!feof(fp) && !ferror(fp));
  fclose(fp);
}
```