user: What is the c source code of the assembly code below?

```asm
<vroom>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xb0,%rsp
  mov    %rdi,-0x98(%rbp)
  mov    %rsi,-0xa0(%rbp)
  mov    %rdx,-0xa8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x88(%rbp)
  movl   $0x444441,-0x81(%rbp)
  movl   $0x4f4d4552,-0x71(%rbp)
  movw   $0x4556,-0x6d(%rbp)
  movb   $0x0,-0x6b(%rbp)
  movabs $0x4d4147544e495250,%rax
  mov    %rax,-0x6a(%rbp)
  movw   $0x45,-0x62(%rbp)
  movl   $0x4e495250,-0x7d(%rbp)
  movw   $0x54,-0x79(%rbp)
  movl   $0x54524150,-0x77(%rbp)
  movw   $0x32,-0x73(%rbp)
  jmp    L45
L7:
  lea    -0x60(%rbp),%rdx
  mov    -0x98(%rbp),%rax
  lea    D31(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  lea    -0x81(%rbp),%rdx
  lea    -0x60(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L10
  lea    -0x20(%rbp),%rcx
  lea    -0x40(%rbp),%rdx
  mov    -0x98(%rbp),%rax
  lea    D44(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  lea    -0x20(%rbp),%rdx
  lea    -0x40(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <createNode@plt>
  mov    %eax,%edx
  mov    -0xa8(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <addNode@plt>
  mov    %rax,-0xa8(%rbp)
  jmp    L62
L10:
  lea    -0x71(%rbp),%rdx
  lea    -0x60(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L69
  lea    -0x40(%rbp),%rdx
  mov    -0x98(%rbp),%rax
  lea    D31(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  lea    -0x40(%rbp),%rdx
  mov    -0xa8(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <subNode@plt>
  mov    %rax,-0xa8(%rbp)
  jmp    L62
L69:
  lea    -0x6a(%rbp),%rdx
  lea    -0x60(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L60
  lea    -0x20(%rbp),%rdx
  mov    -0x98(%rbp),%rax
  lea    D31(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  lea    -0x20(%rbp),%rdx
  mov    -0xa0(%rbp),%rax
  lea    D33(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  lea    -0x20(%rbp),%rdx
  mov    -0xa8(%rbp),%rcx
  mov    -0xa0(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <printGame@plt>
  jmp    L62
L60:
  lea    -0x7d(%rbp),%rdx
  lea    -0x60(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L62
  mov    -0xa0(%rbp),%rdx
  mov    -0xa8(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <printName@plt>
L62:
  lea    -0x77(%rbp),%rdx
  lea    -0x60(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L45
  mov    -0xa8(%rbp),%rdx
  mov    -0xa0(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <partDeux@plt>
L45:
  mov    -0x98(%rbp),%rax
  mov    %rax,%rdi
  call   <feof@plt>
  test   %eax,%eax
  je     L7
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L104
  call   <__stack_chk_fail@plt>
L104:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D31
type_guessed: string
name: disassemble_data
arguments: data_label: D44
type_guessed: string
name: disassemble_data
arguments: data_label: D33
type_guessed: string

tool: D31: %s

tool: D44: %s %s

tool: D33: %s:


assistant: ```c
void vroom(FILE *ifp, FILE *ofp, struct treenode *root) {
  int i = 0;
  char command[20];
  char add[4] = {'A', 'D', 'D', '\0'};
  char sub[7] = {'R', 'E', 'M', 'O', 'V', 'E', '\0'};
  char printgame[10] = {'P', 'R', 'I', 'N', 'T', 'G', 'A', 'M', 'E', '\0'};
  char print[6] = {'P', 'R', 'I', 'N', 'T', '\0'};
  char partdeux[6] = {'P', 'A', 'R', 'T', '2', '\0'};
  char tempName[20], tempGame[20];
  while (!feof(ifp)) {
    fscanf(ifp, "%s", command);
    if (strcmp(command, add) == 0) {
      fscanf(ifp, "%s %s", tempName, tempGame);
      root = addNode(root, createNode(tempName, tempGame));
    } else if (strcmp(command, sub) == 0) {
      fscanf(ifp, "%s", tempName);
      root = subNode(root, tempName);
    } else if (strcmp(command, printgame) == 0) {
      fscanf(ifp, "%s", tempGame);
      fprintf(ofp, "%s:\n", tempGame);
      printGame(ofp, root, tempGame);
    } else if (strcmp(command, print) == 0) {
      printName(root, ofp);
    }
    if (strcmp(command, partdeux) == 0) {
      partDeux(ofp, root);
    }
  }
}
```