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

```asm
<main>:
  endbr64
  sub    $0x18,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  call   <adainit@plt>
  lea    D84(%rip),%rdi
  call   <printf@plt>
  lea    D16(%rip),%rdi
  call   <printf@plt>
  lea    D22(%rip),%rdi
  call   <printf@plt>
  lea    D81(%rip),%rdi
  call   <printf@plt>
  lea    D65(%rip),%rdi
  call   <printf@plt>
  lea    D41(%rip),%rdi
  call   <printf@plt>
  lea    D61(%rip),%rdi
  call   <printf@plt>
  lea    D29(%rip),%rdi
  call   <printf@plt>
  lea    0x4(%rsp),%rsi
  lea    D88(%rip),%rdi
  call   <scanf@plt>
  mov    0x4(%rsp),%eax
  test   %eax,%eax
  je     L17
  cmp    $0x5,%eax
  ja     L59
  lea    D101(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
L17:
  call   <standard_polysys_solver@plt>
L47:
  xor    %eax,%eax
  call   <adafinal@plt>
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L10
  xor    %eax,%eax
  add    $0x18,%rsp
  ret
  xor    %eax,%eax
  call   <quaddobl_laursys_solver@plt>
  jmp    L47
  xor    %eax,%eax
  call   <standard_laursys_solver@plt>
  jmp    L47
  xor    %eax,%eax
  call   <dobldobl_polysys_solver@plt>
  jmp    L47
  xor    %eax,%eax
  call   <dobldobl_laursys_solver@plt>
  jmp    L47
  xor    %eax,%eax
  call   <quaddobl_polysys_solver@plt>
  jmp    L47
L59:
  lea    D20(%rip),%rdi
  call   <printf@plt>
  jmp    L47
L10:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_label: D84
datatype: string
name: unpack_data
arguments: data_label: D16
datatype: string
name: unpack_data
arguments: data_label: D22
datatype: string
name: unpack_data
arguments: data_label: D81
datatype: string
name: unpack_data
arguments: data_label: D65
datatype: string
name: unpack_data
arguments: data_label: D41
datatype: string
name: unpack_data
arguments: data_label: D61
datatype: string
name: unpack_data
arguments: data_label: D29
datatype: string
name: unpack_data
arguments: data_label: D88
datatype: string
name: unpack_data
arguments: data_label: D20
datatype: string

tool: D84: 
MENU for the precision and type of system :


tool: D16:   0. standard double precision on a polynomial system


tool: D22:   1. standard double precision on a Laurent polynomial system


tool: D81:   2. double double precision on a polynomial system


tool: D65:   3. double double precision on a Laurent polynomial system


tool: D41:   4. quad double precision on a polynomial system


tool: D61:   5. quad double precision on a Laurent polynomial system


tool: D29: Type 0, 1, 2, 3, 4, or 5 : 

tool: D88: %d

tool: D20: invalid choice


assistant: ```c
int main(int argc, char *argv[]) {
  int fail, choice;
  adainit();
  printf("\nMENU for the precision and type of system :\n");
  printf("  0. standard double precision on a polynomial system\n");
  printf("  1. standard double precision on a Laurent polynomial system\n");
  printf("  2. double double precision on a polynomial system\n");
  printf("  3. double double precision on a Laurent polynomial system\n");
  printf("  4. quad double precision on a polynomial system\n");
  printf("  5. quad double precision on a Laurent polynomial system\n");
  printf("Type 0, 1, 2, 3, 4, or 5 : ");
  scanf("%d", &choice);
  if (choice == 0)
    fail = standard_polysys_solver();
  else if (choice == 1)
    fail = standard_laursys_solver();
  else if (choice == 2)
    fail = dobldobl_polysys_solver();
  else if (choice == 3)
    fail = dobldobl_laursys_solver();
  else if (choice == 4)
    fail = quaddobl_polysys_solver();
  else if (choice == 5)
    fail = quaddobl_laursys_solver();
  else
    printf("invalid choice\n");
  adafinal();
  return 0;
}
```