user: 下面的汇编指令对应的C源代码是什么:

```asm
<str_funcs>:
  endbr64
  push   %r14
  lea    D431(%rip),%rsi
  push   %r13
  push   %r12
  push   %rbp
  mov    %rdi,%rbp
  sub    $0x8,%rsp
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L412
  lea    D260(%rip),%r13
  xor    %edi,%edi
  mov    %r13,%rsi
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%r12
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  mov    %eax,%edx
  call   <mymemcmp@plt>
  lea    D384(%rip),%rsi
  mov    %eax,%ebp
L321:
  xor    %edi,%edi
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  cmp    %eax,%ebp
  sete   %al
  movzbl %al,%eax
L37:
  add    $0x8,%rsp
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  xchg   %ax,%ax
L412:
  lea    D98(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L320
  lea    D260(%rip),%r12
  xor    %edi,%edi
  mov    %r12,%rsi
  call   <mystrtok@plt>
  mov    %r12,%rsi
  xor    %edi,%edi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  call   <mystrcmp@plt>
  lea    D384(%rip),%rsi
  mov    %eax,%ebp
  jmp    L321
  nopw   0x0(%rax,%rax,1)
L320:
  lea    D263(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  je     L89
  lea    D66(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L165
  lea    D260(%rip),%r12
  xor    %edi,%edi
  mov    %r12,%rsi
  call   <mystrtok@plt>
  mov    %r12,%rsi
  xor    %edi,%edi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  call   <mystrcat@plt>
  mov    %rax,%rbp
L209:
  xor    %edi,%edi
  lea    D428(%rip),%rsi
  call   <mystrtok@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  call   <mystrcmp@plt>
  test   %eax,%eax
  sete   %al
  add    $0x8,%rsp
  pop    %rbp
  movzbl %al,%eax
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopl   0x0(%rax,%rax,1)
L89:
  lea    D260(%rip),%r13
  xor    %edi,%edi
  mov    %r13,%rsi
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%r12
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  mov    %eax,%edx
  call   <mystrncmp@plt>
  lea    D384(%rip),%rsi
  mov    %eax,%ebp
  jmp    L321
  cs nopw 0x0(%rax,%rax,1)
L165:
  lea    D116(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  je     L231
  lea    D12(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L210
  lea    D260(%rip),%rbp
  xor    %edi,%edi
  mov    %rbp,%rsi
  call   <mystrtok@plt>
  mov    %rbp,%rsi
  xor    %edi,%edi
  mov    %rax,%r13
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  lea    0x1(%rax),%edi
  mov    %eax,%r12d
  call   <malloc@plt>
  mov    %r12d,%edx
  mov    %r13,%rsi
  mov    %rax,%rdi
  mov    %rax,%rbp
  call   <mymemcpy@plt>
  jmp    L209
  nopl   0x0(%rax)
L231:
  lea    D260(%rip),%r13
  xor    %edi,%edi
  mov    %r13,%rsi
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%r12
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %rbp,%rdi
  mov    %r12,%rsi
  mov    %eax,%edx
  call   <mystrncat@plt>
  mov    %rax,%rbp
  jmp    L209
L210:
  lea    D102(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L196
  lea    D260(%rip),%rbp
  xor    %edi,%edi
  mov    %rbp,%rsi
  call   <mystrtok@plt>
  mov    %rbp,%rsi
  xor    %edi,%edi
  mov    %rax,%r13
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  lea    0x1(%rax),%edi
  mov    %eax,%r12d
  call   <malloc@plt>
  mov    %r12d,%edx
  mov    %r13,%rsi
  mov    %rax,%rdi
  mov    %rax,%rbp
  call   <mymemmove@plt>
  jmp    L209
L196:
  lea    D417(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L207
  lea    D260(%rip),%rsi
  xor    %edi,%edi
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <mystrdup@plt>
  mov    %rax,%rbp
  jmp    L209
L207:
  lea    D373(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L152
  lea    D260(%rip),%r12
  xor    %edi,%edi
  mov    %r12,%rsi
  call   <mystrtok@plt>
  mov    %r12,%rsi
  xor    %edi,%edi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <mystrndup@plt>
  mov    %rax,%rbp
  jmp    L209
L152:
  lea    D448(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L218
  lea    D260(%rip),%rsi
  xor    %edi,%edi
  call   <mystrtok@plt>
  mov    %rax,%rdi
  mov    %rax,%rbp
  call   <mystrlen@plt>
  lea    0x1(%rax),%edi
  call   <malloc@plt>
  mov    %rbp,%rsi
  mov    %rax,%rdi
  call   <mystrcpy@plt>
  mov    %rax,%rbp
  jmp    L209
L218:
  lea    D262(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L208
  lea    D260(%rip),%r12
  xor    %edi,%edi
  mov    %r12,%rsi
  call   <mystrtok@plt>
  mov    %r12,%rsi
  xor    %edi,%edi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  lea    0x1(%rax),%edi
  mov    %eax,%r12d
  call   <malloc@plt>
  mov    %rbp,%rsi
  mov    %r12d,%edx
  mov    %rax,%rdi
  call   <mystrncpy@plt>
  mov    %rax,%rbp
  jmp    L209
L208:
  lea    D153(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L268
  lea    D260(%rip),%r13
  xor    %edi,%edi
  mov    %r13,%rsi
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%r12
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %rbp,%rdi
  mov    %r12,%rsi
  mov    %eax,%edx
  call   <mymemchr@plt>
  mov    %rax,%rbp
  jmp    L209
L268:
  lea    D6(%rip),%r14
  mov    %rbp,%rdi
  mov    %r14,%rsi
  call   <mystrcmp@plt>
  test   %eax,%eax
  je     L9
  lea    D430(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L303
L9:
  lea    D260(%rip),%r13
  xor    %edi,%edi
  mov    %r13,%rsi
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%r12
  call   <mystrtok@plt>
  mov    %r14,%rsi
  mov    %rbp,%rdi
  mov    %rax,%r13
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L313
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <mystrchr@plt>
  mov    %rax,%rbp
  jmp    L209
L313:
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <mystrrchr@plt>
  mov    %rax,%rbp
  jmp    L209
L303:
  lea    D342(%rip),%r14
  mov    %rbp,%rdi
  mov    %r14,%rsi
  call   <mystrcmp@plt>
  test   %eax,%eax
  je     L149
  lea    D164(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L177
L149:
  lea    D260(%rip),%r13
  xor    %edi,%edi
  mov    %r13,%rsi
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%r12
  call   <mystrtok@plt>
  mov    %r14,%rsi
  mov    %rbp,%rdi
  mov    %rax,%r13
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L381
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <mystrspn@plt>
  mov    %eax,%ebp
L274:
  lea    D428(%rip),%rsi
  jmp    L321
L177:
  lea    D202(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L250
  lea    D260(%rip),%r12
  xor    %edi,%edi
  mov    %r12,%rsi
  call   <mystrtok@plt>
  xor    %edi,%edi
  mov    %r12,%rsi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  call   <mystrpbrk@plt>
  xor    %edi,%edi
  lea    D428(%rip),%rsi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    $0x1,%edx
  mov    %rbp,%rdi
  mov    %rax,%rsi
  call   <mystrncmp@plt>
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  jmp    L37
L381:
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <mystrcspn@plt>
  lea    0x1(%rax),%ebp
  jmp    L274
L250:
  lea    D4(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L271
  lea    D260(%rip),%r12
  xor    %edi,%edi
  mov    %r12,%rsi
  call   <mystrtok@plt>
  mov    %r12,%rsi
  xor    %edi,%edi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  call   <mystrstr@plt>
  mov    %rax,%rbp
  jmp    L209
L271:
  lea    D287(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L295
  lea    D260(%rip),%r13
  xor    %edi,%edi
  mov    %r13,%rsi
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%r12
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  mov    %eax,%edx
  call   <mymemset@plt>
  jmp    L209
L295:
  lea    D106(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L418
  lea    D260(%rip),%rbp
  xor    %edi,%edi
  mov    %rbp,%rsi
  call   <mystrtok@plt>
  mov    %rbp,%rsi
  xor    %edi,%edi
  mov    %rax,%r13
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  lea    0x1(%rax),%edi
  mov    %eax,%r12d
  call   <malloc@plt>
  mov    %r12d,%edx
  mov    %r13,%rdi
  mov    %rax,%rsi
  mov    %rax,%rbp
  call   <myswab@plt>
  jmp    L209
L418:
  lea    D371(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  mov    %eax,%r8d
  mov    $0x2,%eax
  test   %r8d,%r8d
  jne    L37
  lea    D260(%rip),%r12
  xor    %edi,%edi
  mov    %r12,%rsi
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <mystrlen@plt>
  mov    %r12,%rsi
  mov    %eax,%ebp
  jmp    L321
```

tool_calls: name: read_data
arguments: label: D431
type_guessed: string
name: read_data
arguments: label: D260
type_guessed: string
name: read_data
arguments: label: D384
type_guessed: string
name: read_data
arguments: label: D98
type_guessed: string
name: read_data
arguments: label: D263
type_guessed: string
name: read_data
arguments: label: D66
type_guessed: string
name: read_data
arguments: label: D428
type_guessed: string
name: read_data
arguments: label: D116
type_guessed: string
name: read_data
arguments: label: D12
type_guessed: string
name: read_data
arguments: label: D102
type_guessed: string
name: read_data
arguments: label: D417
type_guessed: string
name: read_data
arguments: label: D373
type_guessed: string
name: read_data
arguments: label: D448
type_guessed: string
name: read_data
arguments: label: D262
type_guessed: string
name: read_data
arguments: label: D153
type_guessed: string
name: read_data
arguments: label: D6
type_guessed: string
name: read_data
arguments: label: D430
type_guessed: string
name: read_data
arguments: label: D342
type_guessed: string
name: read_data
arguments: label: D164
type_guessed: string
name: read_data
arguments: label: D202
type_guessed: string
name: read_data
arguments: label: D4
type_guessed: string
name: read_data
arguments: label: D287
type_guessed: string
name: read_data
arguments: label: D106
type_guessed: string
name: read_data
arguments: label: D371
type_guessed: string

tool: D431: mymemcmp

tool: D260:  	

tool: D384:  	


tool: D98: mystrcmp

tool: D263: mystrncmp

tool: D66: mystrcat

tool: D428:  


tool: D116: mystrncat

tool: D12: mymemcpy

tool: D102: mymemmove

tool: D417: mystrdup

tool: D373: mystrndup

tool: D448: mystrcpy

tool: D262: mystrncpy

tool: D153: mymemchr

tool: D6: mystrchr

tool: D430: mystrrchr

tool: D342: mystrspn

tool: D164: mystrcspn

tool: D202: mystrpbrk

tool: D4: mystrstr

tool: D287: mymemset

tool: D106: myswab

tool: D371: mystrlen

assistant: ```c
int str_funcs(char *func, char *line) {
  char *str1, *str2, *delim, *str3, *str4, *token;
  int i, val;
  if (mystrcmp(func, "mymemcmp") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    delim = mystrtok(NULL, " \t");
    i = atoi(delim);
    val = mymemcmp(str1, str2, i);
    token = mystrtok(NULL, " \t\n");
    i = atoi(token);
    if (val == i)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrcmp") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    val = mystrcmp(str1, str2);
    token = mystrtok(NULL, " \t\n");
    i = atoi(token);
    if (val == i)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrncmp") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    delim = mystrtok(NULL, " \t");
    i = atoi(delim);
    val = mystrncmp(str1, str2, i);
    token = mystrtok(NULL, " \t\n");
    i = atoi(token);
    if (val == i)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrcat") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    str3 = mystrcat(str1, str2);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str3, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrncat") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    delim = mystrtok(NULL, " \t");
    i = atoi(delim);
    str3 = mystrncat(str1, str2, i);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str3, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mymemcpy") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    i = atoi(str2);
    str3 = (char *)malloc(i + 1);
    mymemcpy(str3, str1, i);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str3, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mymemmove") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    i = atoi(str2);
    str3 = (char *)malloc(i + 1);
    mymemmove(str3, str1, i);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str3, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrdup") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrdup(str1);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str2, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrndup") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    i = atoi(str2);
    str3 = mystrndup(str1, i);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str3, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrcpy") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = (char *)malloc(mystrlen(str1) + 1);
    str2 = mystrcpy(str2, str1);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str2, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrncpy") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    i = atoi(str2);
    str3 = (char *)malloc(i + 1);
    str3 = mystrncpy(str3, str1, i);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str3, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mymemchr") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    str3 = mystrtok(NULL, " \t");
    i = atoi(str3);
    str4 = mymemchr(str1, str2, i);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str4, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrchr") == 0 || mystrcmp(func, "mystrrchr") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    if (mystrcmp(func, "mystrchr") == 0)
      str3 = mystrchr(str1, str2);
    else
      str3 = mystrrchr(str1, str2);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str3, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrspn") == 0 || mystrcmp(func, "mystrcspn") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    if (mystrcmp(func, "mystrspn") == 0)
      i = mystrspn(str1, str2);
    else
      i = mystrcspn(str1, str2) + 1;
    token = mystrtok(NULL, " \n");
    val = atoi(token);
    if (i == val)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrpbrk") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    str3 = mystrpbrk(str1, str2);
    token = mystrtok(NULL, " \n");
    i = mystrncmp(str3, token, 1);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrstr") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    str3 = mystrstr(str1, str2);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str3, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mymemset") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    str3 = mystrtok(NULL, " \t");
    i = atoi(str3);
    mymemset(str1, str2, i);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str1, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "myswab") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    i = atoi(str2);
    str3 = (char *)malloc(i + 1);
    myswab(str1, str3, i);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str3, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrlen") == 0) {
    str1 = mystrtok(NULL, " \t");
    val = mystrlen(str1);
    token = mystrtok(NULL, " \t");
    i = atoi(token);
    if (val == i)
      return 1;
    else
      return 0;
  }
  return 2;
}
```