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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x370,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x368(%rbp)
  movl   $0x0,-0x364(%rbp)
  movl   $0x0,-0x36c(%rbp)
  movb   $0x0,-0x36f(%rbp)
  movb   $0x0,-0x370(%rbp)
  lea    D174(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D51(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D195(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D23(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D65(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D121(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D177(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D16(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movb   $0x0,-0x370(%rbp)
  jmp    L66
L130:
  lea    -0x1b0(%rbp),%rax
  mov    %rax,%rdi
  call   <getline_my@plt>
  movzbl -0x1b0(%rbp),%eax
  mov    %al,-0x36f(%rbp)
  movsbl -0x36f(%rbp),%eax
  cmp    $0x35,%eax
  jg     L121
  cmp    $0x31,%eax
  jl     L77
  sub    $0x31,%eax
  cmp    $0x4,%eax
  ja     L77
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D179(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D179(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
L121:
  cmp    $0x71,%eax
  je     L101
  jmp    L77
  lea    -0x1b0(%rbp),%rax
  mov    $0x64,%esi
  mov    %rax,%rdi
  call   <clean_text@plt>
  lea    D13(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x1b0(%rbp),%rax
  mov    %rax,%rdi
  call   <getline_my@plt>
  lea    -0x1b0(%rbp),%rax
  mov    %rax,%rdi
  call   <atoi_2@plt>
  mov    %eax,-0x368(%rbp)
  mov    -0x368(%rbp),%eax
  mov    %eax,%esi
  lea    D138(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movb   $0x1,-0x370(%rbp)
  jmp    L66
  lea    -0x1b0(%rbp),%rdx
  lea    -0x360(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <getarray_sort@plt>
  mov    %eax,-0x364(%rbp)
  mov    -0x364(%rbp),%edx
  lea    -0x360(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <shellsort@plt>
  lea    D70(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0x36c(%rbp)
  jmp    L158
L153:
  mov    -0x36c(%rbp),%eax
  cltq
  mov    -0x360(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D142(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0x36c(%rbp)
L158:
  mov    -0x36c(%rbp),%eax
  cmp    -0x364(%rbp),%eax
  jl     L153
  mov    $0xa,%edi
  call   <putchar@plt>
  movb   $0x1,-0x370(%rbp)
  jmp    L66
  lea    D130(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x1b0(%rbp),%rax
  mov    $0x64,%esi
  mov    %rax,%rdi
  call   <clean_text@plt>
  lea    -0x1b0(%rbp),%rax
  mov    %rax,%rdi
  call   <getline_my@plt>
  lea    -0x1b0(%rbp),%rax
  mov    %rax,%rdi
  call   <reverse_string@plt>
  lea    -0x1b0(%rbp),%rax
  mov    %rax,%rsi
  lea    D154(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movb   $0x1,-0x370(%rbp)
  jmp    L66
  lea    D60(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x1d0(%rbp),%rax
  mov    $0x1e,%esi
  mov    %rax,%rdi
  call   <clean_text@plt>
  lea    -0x140(%rbp),%rax
  mov    $0x12c,%esi
  mov    %rax,%rdi
  call   <clean_text@plt>
  lea    -0x1d0(%rbp),%rax
  mov    %rax,%rdi
  call   <getline_my@plt>
  lea    -0x140(%rbp),%rdx
  lea    -0x1d0(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <expand_my@plt>
  lea    -0x140(%rbp),%rax
  mov    %rax,%rsi
  lea    D183(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movb   $0x1,-0x370(%rbp)
  jmp    L66
  lea    D187(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x1b0(%rbp),%rax
  mov    %rax,%rdi
  call   <getline_my@plt>
  lea    -0x1b0(%rbp),%rax
  mov    %rax,%rdi
  call   <atoi_2@plt>
  mov    %ax,-0x36e(%rbp)
  lea    -0x140(%rbp),%rax
  mov    $0x12c,%esi
  mov    %rax,%rdi
  call   <clean_text@plt>
  movswl -0x36e(%rbp),%eax
  lea    -0x140(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <itoa_dw@plt>
  lea    -0x140(%rbp),%rax
  mov    %rax,%rsi
  lea    D176(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movb   $0x1,-0x370(%rbp)
  jmp    L66
L101:
  movb   $0x1,-0x370(%rbp)
  jmp    L66
L77:
  lea    D50(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  nop
L66:
  cmpb   $0x0,-0x370(%rbp)
  je     L130
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L29
  call   <__stack_chk_fail@plt>
L29:
  leave
  ret
```

tool_calls: name: read_data
arguments: tag: D174
type_guessed: string
name: read_data
arguments: tag: D51
type_guessed: string
name: read_data
arguments: tag: D195
type_guessed: string
name: read_data
arguments: tag: D23
type_guessed: string
name: read_data
arguments: tag: D65
type_guessed: string
name: read_data
arguments: tag: D121
type_guessed: string
name: read_data
arguments: tag: D177
type_guessed: string
name: read_data
arguments: tag: D16
type_guessed: string
name: read_data
arguments: tag: D13
type_guessed: string
name: read_data
arguments: tag: D138
type_guessed: string
name: read_data
arguments: tag: D70
type_guessed: string
name: read_data
arguments: tag: D142
type_guessed: string
name: read_data
arguments: tag: D130
type_guessed: string
name: read_data
arguments: tag: D154
type_guessed: string
name: read_data
arguments: tag: D60
type_guessed: string
name: read_data
arguments: tag: D183
type_guessed: string
name: read_data
arguments: tag: D187
type_guessed: string
name: read_data
arguments: tag: D176
type_guessed: string
name: read_data
arguments: tag: D50
type_guessed: string

tool: D174: 



















































tool: D51: Choose please what you want to do (press q to exit):

tool: D195: Variants :

tool: D23: 1. Convert from char to integer.

tool: D65: 2. Shellsorting.

tool: D121: 3. Reverse string.

tool: D177: 4. Expand string.

tool: D16: 5. Convert digit to string.

tool: D13: Input please chars to convert to integer:

tool: D138: Getted digit from char = %d;


tool: D70: After sorting array seems so:

tool: D142: %d,

tool: D130: Enter please line to reverse:

tool: D154: After reverse string seens so:
%s


tool: D60: Enter please string:

tool: D183: After expand line seems so:%s


tool: D187: Input please digit which you want to convert to string:

tool: D176: Getted string is:
%s;


tool: D50: Wrong input, try again.

assistant: ```c
void main() {
  char line[100];
  char short_line[30];
  char long_line[300];
  int sort[100];
  int digit = 0;
  int len = 0;
  int i = 0;
  char choise = 0;
  char exit = 0;
  short int converted;
  printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
  printf("Choose please what you want to do (press q to exit):\n");
  printf("Variants :\n");
  printf("1. Convert from char to integer.\n");
  printf("2. Shellsorting.\n");
  printf("3. Reverse string.\n");
  printf("4. Expand string.\n");
  printf("5. Convert digit to string.\n");
  exit = 0;
  while (exit == 0) {
    getline_my(line);
    choise = line[0];
    switch (choise) {
    case '1':
      clean_text(line, 100);
      printf("Input please chars to convert to integer:\n");
      getline_my(line);
      digit = atoi_2(line);
      printf("Getted digit from char = %d;\n", digit);
      exit = 1;
      break;
    case '2':
      len = getarray_sort(sort, line);
      shellsort(sort, len);
      printf("After sorting array seems so:");
      for (i = 0; i < len; ++i) {
        printf("%d,", sort[i]);
      };
      printf("\n");
      exit = 1;
      break;
    case '3':
      printf("Enter please line to reverse:\n");
      clean_text(line, 100);
      getline_my(line);
      reverse_string(line);
      printf("After reverse string seens so:\n%s\n", line);
      exit = 1;
      break;
    case '4':
      printf("Enter please string:\n");
      clean_text(short_line, 30);
      clean_text(long_line, 300);
      getline_my(short_line);
      expand_my(short_line, long_line);
      printf("After expand line seems so:%s\n", long_line);
      exit = 1;
      break;
    case '5':
      printf("Input please digit which you want to convert to string:\n");
      getline_my(line);
      converted = atoi_2(line);
      clean_text(long_line, 300);
      itoa_dw(converted, long_line);
      printf("Getted string is:\n%s;\n", long_line);
      exit = 1;
      break;
    case 'q':
      exit = 1;
      break;
    default:
      printf("Wrong input, try again.\n");
      break;
    };
  }
}
```