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

```asm
<qfits_getkey>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  cmpq   $0x0,-0x18(%rbp)
  jne    L22
  mov    $0x0,%eax
  jmp    L191
L22:
  mov    -0x18(%rbp),%rax
  mov    $0x8,%edx
  lea    D125(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L27
  lea    D125(%rip),%rax
  mov    %rax,%rsi
  lea    D65(%rip),%rax
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    D65(%rip),%rax
  jmp    L191
L27:
  mov    -0x18(%rbp),%rax
  mov    $0x8,%edx
  lea    D191(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L49
  lea    D87(%rip),%rax
  mov    %rax,%rsi
  lea    D65(%rip),%rax
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    D65(%rip),%rax
  jmp    L191
L49:
  mov    -0x18(%rbp),%rax
  mov    $0x8,%edx
  lea    D117(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L102
  lea    D12(%rip),%rax
  mov    %rax,%rsi
  lea    D65(%rip),%rax
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    D65(%rip),%rax
  jmp    L191
L102:
  mov    -0x18(%rbp),%rax
  mov    $0x4,%edx
  lea    D5(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L3
  lea    D105(%rip),%rax
  mov    %rax,%rsi
  lea    D65(%rip),%rax
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    D65(%rip),%rax
  jmp    L191
L3:
  mov    $0x51,%edx
  mov    $0x0,%esi
  lea    D65(%rip),%rax
  mov    %rax,%rdi
  call   <memset@plt>
  movl   $0x0,-0x4(%rbp)
  jmp    L24
L60:
  addl   $0x1,-0x4(%rbp)
L24:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3d,%al
  je     L15
  cmpl   $0x4f,-0x4(%rbp)
  jle    L60
L15:
  cmpl   $0x4f,-0x4(%rbp)
  jle    L75
  mov    $0x0,%eax
  jmp    L191
L75:
  subl   $0x1,-0x4(%rbp)
  jmp    L170
L5:
  subl   $0x1,-0x4(%rbp)
L170:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  jne    L65
  cmpl   $0x0,-0x4(%rbp)
  jns    L5
L65:
  cmpl   $0x0,-0x4(%rbp)
  jg     L56
  mov    $0x0,%eax
  jmp    L191
L56:
  addl   $0x1,-0x4(%rbp)
  mov    -0x4(%rbp),%edx
  mov    -0x18(%rbp),%rax
  mov    %rax,%rsi
  lea    D65(%rip),%rax
  mov    %rax,%rdi
  call   <strncpy@plt>
  mov    -0x4(%rbp),%eax
  add    $0x1,%eax
  cltq
  lea    D65(%rip),%rdx
  movb   $0x0,(%rax,%rdx,1)
  lea    D65(%rip),%rax
L191:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D125
data_type: string
name: extract_symbolic_data
arguments: data_label: D191
data_type: string
name: extract_symbolic_data
arguments: data_label: D87
data_type: string
name: extract_symbolic_data
arguments: data_label: D117
data_type: string
name: extract_symbolic_data
arguments: data_label: D12
data_type: string
name: extract_symbolic_data
arguments: data_label: D5
data_type: string
name: extract_symbolic_data
arguments: data_label: D105
data_type: string

tool: D125:         

tool: D191: HISTORY 

tool: D87: HISTORY

tool: D117: COMMENT 

tool: D12: COMMENT

tool: D5: END 

tool: D105: END

assistant: ```c
char *qfits_getkey(const char *line) {
  static char key[81];
  int i;
  if (line == NULL) {
    return NULL;
  }
  if (!strncmp(line, "        ", 8)) {
    strcpy(key, "        ");
    return key;
  }
  if (!strncmp(line, "HISTORY ", 8)) {
    strcpy(key, "HISTORY");
    return key;
  }
  if (!strncmp(line, "COMMENT ", 8)) {
    strcpy(key, "COMMENT");
    return key;
  }
  if (!strncmp(line, "END ", 4)) {
    strcpy(key, "END");
    return key;
  }
  memset(key, 0, 81);
  i = 0;
  while (line[i] != '=' && i < 80)
    i++;
  if (i >= 80) {
    return NULL;
  }
  i--;
  while (line[i] == ' ' && i >= 0)
    i--;
  if (i <= 0) {
    return NULL;
  }
  i++;
  strncpy(key, line, i);
  key[i + 1] = (char)0;
  return key;
}
```