user: 请将以下的汇编代码转换成C语言代码：

```asm
<PrintExpectedArgListInfo>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  sub    $0x340,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x338(%rsp)
  xor    %eax,%eax
  lea    0x1a0(%rsp),%r12
  cmp    $0x4,%edi
  je     L25
  lea    D177(%rip),%rbp
  mov    %r12,%rdi
  lea    0xd0(%rsp),%r15
  mov    %rsp,%r14
  mov    %rbp,%rsi
  call   <sprintf@plt>
  lea    D194(%rip),%rsi
  mov    %r15,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rsi
L27:
  lea    0x270(%rsp),%r13
  mov    %r14,%rdi
  lea    D198(%rip),%rbp
  call   <sprintf@plt>
  lea    D5(%rip),%rsi
  mov    %r13,%rdi
  call   <sprintf@plt>
  mov    %r14,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D73(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r15,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r14,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D248(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r15,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r14,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D263(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r15,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r14,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D226(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D78(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %eax,%eax
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D200(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D203(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r15,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r14,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D15(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D185(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %eax,%eax
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D250(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D184(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D262(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r15,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r14,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D113(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %eax,%eax
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D135(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D191(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D116(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D148(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %eax,%eax
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D209(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D77(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r15,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r14,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D99(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D267(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %eax,%eax
  lea    D214(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <printf@plt>
  mov    0x338(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L26
  add    $0x340,%rsp
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L25:
  lea    D245(%rip),%rsi
  mov    %r12,%rdi
  lea    0xd0(%rsp),%r15
  mov    %rsp,%r14
  call   <sprintf@plt>
  lea    D282(%rip),%rsi
  mov    %r15,%rdi
  call   <sprintf@plt>
  lea    D167(%rip),%rsi
  jmp    L27
L26:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_label: D177
data_type: string
name: parse_data
arguments: data_label: D194
data_type: string
name: parse_data
arguments: data_label: D198
data_type: string
name: parse_data
arguments: data_label: D5
data_type: string
name: parse_data
arguments: data_label: D73
data_type: string
name: parse_data
arguments: data_label: D248
data_type: string
name: parse_data
arguments: data_label: D263
data_type: string
name: parse_data
arguments: data_label: D226
data_type: string
name: parse_data
arguments: data_label: D78
data_type: string
name: parse_data
arguments: data_label: D200
data_type: string
name: parse_data
arguments: data_label: D203
data_type: string
name: parse_data
arguments: data_label: D15
data_type: string
name: parse_data
arguments: data_label: D185
data_type: string
name: parse_data
arguments: data_label: D250
data_type: string
name: parse_data
arguments: data_label: D184
data_type: string
name: parse_data
arguments: data_label: D262
data_type: string
name: parse_data
arguments: data_label: D113
data_type: string
name: parse_data
arguments: data_label: D135
data_type: string
name: parse_data
arguments: data_label: D191
data_type: string
name: parse_data
arguments: data_label: D116
data_type: string
name: parse_data
arguments: data_label: D148
data_type: string
name: parse_data
arguments: data_label: D209
data_type: string
name: parse_data
arguments: data_label: D77
data_type: string
name: parse_data
arguments: data_label: D99
data_type: string
name: parse_data
arguments: data_label: D267
data_type: string
name: parse_data
arguments: data_label: D214
data_type: string
name: parse_data
arguments: data_label: D245
data_type: string
name: parse_data
arguments: data_label: D282
data_type: string
name: parse_data
arguments: data_label: D167
data_type: string

tool: D177: 	

tool: D194: 



tool: D198: %s

tool: D5: 


tool: D73: "J" refers to an integer argument to an option

tool: D248: "R" refers to a real number argument to an option

tool: D263: "S" refers to a string argument to an option

tool: D226: "F" refers to a file path argument to an option. For example,

tool: D78: "datfile.txt" if the file is in the current working directory, or

tool: D200: something like "~/eriq/Documents/data/datfile.txt" if you want to

tool: D203: provide a complete file path.  (Beware of spaces in file paths!)

tool: D15: "D" refers to a directory path argument to an option. For example,

tool: D185: "data_direcory/" if the directory is in the current working directory, or

tool: D250: something like "~/eriq/Documents/data_directory/" if you want to

tool: D184: provide a complete directory path.  Note that the trailing slash should be

tool: D262: optional, but currently is not.  (ERIC ADD MACROS FOR GETTING FILES AND DIRECTORIES

tool: D113: "G" refers to a string that gives a (possibly) discontinous range of

tool: D135: nonnegative integers.  For example:  "1-5,7,9,10-15" specifies

tool: D191: the integers 1 through 5, 7, 9, and 10 through 15.  There can be no

tool: D116: whitespace in the string specifying the range, and the numbers must all

tool: D148: be increasing.  Also, the string cannot start nor end with a comma or a dash.

tool: D209: Finally, you should not use "-" to denote two ranges without placing any

tool: D77: commas in between.

tool: D99: "C" refers to a "constrained" string argument to an option,

tool: D267: i.e., the argument is a string that may only be drawn from a small

tool: D214: set of alternatives, as specified in the help-full description.

tool: D245:  

tool: D282: 
<br>
<br>

tool: D167: &nbsp&nbsp&nbsp&nbsp&nbsp

assistant: ```c
void PrintExpectedArgListInfo(int CommentLevel) {
  char hardtab[200];
  char twolinebreak[200];
  char tab[200];
  char softlinebreak[200];
  if (CommentLevel != 4) {
    sprintf(tab, "\t");
    sprintf(twolinebreak, "\n\n");
    sprintf(hardtab, "\t");
    sprintf(softlinebreak, "\n");
  } else if (CommentLevel == 4) {
    sprintf(tab, " ");
    sprintf(twolinebreak, "\n<br>\n<br>");
    sprintf(hardtab, "&nbsp&nbsp&nbsp&nbsp&nbsp");
    sprintf(softlinebreak, "\n");
  }
  printf("%s", hardtab);
  printf("\"J\" refers to an integer argument to an option");
  printf("%s", twolinebreak);
  printf("%s", hardtab);
  printf("\"R\" refers to a real number argument to an option");
  printf("%s", twolinebreak);
  printf("%s", hardtab);
  printf("\"S\" refers to a string argument to an option");
  printf("%s", twolinebreak);
  printf("%s", hardtab);
  printf("\"F\" refers to a file path argument to an option. For example,");
  printf("%s", softlinebreak);
  printf("%s", tab);
  printf("%s", tab);
  printf("\"datfile.txt\" if the file is in the current working directory, or");
  printf("%s", softlinebreak);
  printf("%s", tab);
  printf("%s", tab);
  printf("something like \"~/eriq/Documents/data/datfile.txt\" if you want to");
  printf("%s", softlinebreak);
  printf("%s", tab);
  printf("%s", tab);
  printf("provide a complete file path.  (Beware of spaces in file paths!)");
  printf("%s", twolinebreak);
  printf("%s", hardtab);
  printf("\"D\" refers to a directory path argument to an option. For example,");
  printf("%s", softlinebreak);
  printf("%s", tab);
  printf("%s", tab);
  printf("\"data_direcory/\" if the directory is in the current working directory, or");
  printf("%s", softlinebreak);
  printf("%s", tab);
  printf("%s", tab);
  printf("something like \"~/eriq/Documents/data_directory/\" if you want to");
  printf("%s", softlinebreak);
  printf("%s", tab);
  printf("%s", tab);
  printf("provide a complete directory path.  Note that the trailing slash should be");
  printf("%s", softlinebreak);
  printf("%s", tab);
  printf("%s", tab);
  printf("optional, but currently is not.  (ERIC ADD MACROS FOR GETTING FILES AND DIRECTORIES");
  printf("%s", twolinebreak);
  printf("%s", hardtab);
  printf("\"G\" refers to a string that gives a (possibly) discontinous range of");
  printf("%s", softlinebreak);
  printf("%s", tab);
  printf("%s", tab);
  printf("nonnegative integers.  For example:  \"1-5,7,9,10-15\" specifies");
  printf("%s", softlinebreak);
  printf("%s", tab);
  printf("%s", tab);
  printf("the integers 1 through 5, 7, 9, and 10 through 15.  There can be no");
  printf("%s", softlinebreak);
  printf("%s", tab);
  printf("%s", tab);
  printf("whitespace in the string specifying the range, and the numbers must all");
  printf("%s", softlinebreak);
  printf("%s", tab);
  printf("%s", tab);
  printf("be increasing.  Also, the string cannot start nor end with a comma or a dash.");
  printf("%s", softlinebreak);
  printf("%s", tab);
  printf("%s", tab);
  printf("Finally, you should not use \"-\" to denote two ranges without placing any");
  printf("%s", softlinebreak);
  printf("%s", tab);
  printf("%s", tab);
  printf("commas in between.");
  printf("%s", twolinebreak);
  printf("%s", hardtab);
  printf("\"C\" refers to a \"constrained\" string argument to an option,");
  printf("%s", softlinebreak);
  printf("%s", tab);
  printf("%s", tab);
  printf("i.e., the argument is a string that may only be drawn from a small");
  printf("%s", softlinebreak);
  printf("%s", tab);
  printf("%s", tab);
  printf("set of alternatives, as specified in the help-full description.");
  printf("%s", softlinebreak);
}
```