user: 请从给定的汇编指令推导出C源代码：

```asm
<main>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x870,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x2868(%rsp)
  xor    %eax,%eax
  lea    0xc(%rsp),%rsi
  lea    D8(%rip),%rdi
  call   <scanf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  mov    0xc(%rsp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,0xc(%rsp)
  lea    0x2800(%rsp),%rbx
  mov    $0x1,%ebp
  test   %eax,%eax
  jne    L86
L181:
  mov    0x2868(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L102
  mov    $0x0,%eax
  add    $0x2870,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L189:
  mov    $0x0,%esi
  jmp    L23
L190:
  cmp    $0x2f,%cl
  jne    L113
  test   %r10d,%r10d
  cmove  %ebp,%r10d
  jmp    L113
L79:
  movzbl (%rdx),%ecx
  lea    -0x41(%rcx),%esi
  cmp    $0x19,%sil
  ja     L51
  movslq %edi,%rsi
  mov    %cl,0x2790(%rsp,%rsi,1)
  lea    0x1(%rdi),%edi
L10:
  cmp    $0x11,%eax
  jg     L83
L113:
  add    $0x1,%eax
  add    $0x1,%rdx
L105:
  lea    -0x1(%rax),%ecx
  cmp    $0x8,%ecx
  jg     L79
  movzbl (%rdx),%ecx
  lea    -0x41(%rcx),%esi
  cmp    $0x19,%sil
  ja     L190
  movslq %r8d,%rsi
  mov    %cl,0x2720(%rsp,%rsi,1)
  add    $0x1,%r8d
  jmp    L113
L51:
  test   %r9d,%r9d
  jne    L10
  cmp    $0x2f,%cl
  cmove  %ebp,%r9d
  jmp    L10
L83:
  add    $0x64,%r12
  cmp    %r12,%r11
  je     L129
L30:
  mov    %r12,%rdx
  mov    $0x1,%eax
  jmp    L105
L129:
  movslq %r8d,%r8
  movb   $0x0,0x2720(%rsp,%r8,1)
  movslq %edi,%rdi
  movb   $0x0,0x2790(%rsp,%rdi,1)
  lea    0x2720(%rsp),%r13
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <dtb@plt>
  lea    0x2790(%rsp),%r12
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <dtb@plt>
  lea    0x10(%rsp),%rdi
  mov    $0x2710,%edx
  mov    $0x0,%esi
  call   <memset@plt>
  mov    $0x0,%eax
  mov    $0xc,%ecx
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  mov    $0xc,%ecx
  mov    %r13,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  mov    $0xc,%ecx
  mov    %r12,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  mov    0xc(%rsp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,0xc(%rsp)
  test   %eax,%eax
  je     L181
L86:
  lea    0x10(%rsp),%r12
  mov    %r12,%r13
  mov    $0x0,%r14d
L152:
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <gets@plt>
  mov    %rbx,%rdi
  call   <strlen@plt>
  mov    %eax,%esi
  cmpb   $0x2d,0x2800(%rsp)
  je     L111
  test   %eax,%eax
  jle    L189
  mov    $0x0,%edx
L3:
  movzbl (%rdx,%rbx,1),%ecx
  mov    %cl,0x0(%r13,%rdx,1)
  add    $0x1,%rdx
  cmp    %rdx,%rax
  jne    L3
L23:
  movslq %esi,%rax
  movb   $0x0,0x2800(%rsp,%rax,1)
  movslq %r14d,%rdx
  lea    (%rdx,%rdx,4),%rdx
  lea    (%rdx,%rdx,4),%rdx
  lea    0x2870(%rsp,%rdx,4),%rdx
  movb   $0x0,-0x2860(%rax,%rdx,1)
  add    $0x1,%r14d
  add    $0x64,%r13
  cmp    $0x8,%r14d
  jne    L152
L111:
  lea    0x2bc(%r12),%r11
  mov    $0x0,%r9d
  mov    $0x0,%r10d
  mov    $0x0,%edi
  mov    $0x0,%r8d
  jmp    L30
L102:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_tag: D8
data_type: string

tool: D8: %d

assistant: ```c
int main() {
  char ascii1[100];
  char ascii2[100], arr[100];
  char str[100][100];
  int i, j, k1, k2, l, l_num, r_num, r, ls, rs, n, ccase = 0;
  scanf("%d", &n);
  getchar();
  while (n--) {
    char g1[8][18] = {"........||.../\\...", "........||../..\\..", ".../\\...||./....\\.", "../..\\..||/......\\", "./....\\.||\\______/", "/......\\||........", "\\______/||........"};
    char g2[8][18] = {".../\\...||........", "../..\\..||........", "./....\\.||.../\\...", "/......\\||../..\\..", "\\______/||./....\\.", "........||/......\\", "........||\\______/"};
    char g3[8][18] = {"........||........", ".../\\...||.../\\...", "../..\\..||../..\\..", "./....\\.||./....\\.", "/......\\||/......\\", "\\______/||\\______/", "........||........"};
    ccase++;
    i = 0;
    while (i < 8) {
      gets(arr);
      int len = strlen(arr);
      if (arr[0] == '-')
        break;
      for (j = 0; j < len; j++) {
        str[i][j] = arr[j];
      }
      arr[j] = '\0';
      str[i][j] = '\0';
      i++;
    }
    ls = 0;
    rs = 0;
    l = 0;
    r = 0;
    k1 = 0;
    k2 = 0;
    for (i = 0; i < 7; i++) {
      for (j = 0; j < 18; j++) {
        if (j < 9) {
          if (str[i][j] >= 'A' && str[i][j] <= 'Z') {
            ascii1[k1] = str[i][j];
            k1++;
          }
          if (ls == 0) {
            if (str[i][j] == '/') {
              l = i;
              ls = 1;
            }
          }
        } else if (j > 8) {
          if (str[i][j] >= 'A' && str[i][j] <= 'Z') {
            ascii2[k2++] = str[i][j];
          }
          if (rs == 0) {
            if (str[i][j] == '/') {
              r = i;
              rs = 1;
            }
          }
        }
      }
    }
    ascii1[k1] = '\0';
    ascii2[k2] = '\0';
    l_num = dtb(ascii1);
    r_num = dtb(ascii2);
    l_num = 0, r_num = 0;
    r = 0, l = 0;
    memset(str, '\0', sizeof(str));
    memset(arr, '\0', sizeof(arr));
    memset(ascii1, '\0', sizeof(ascii1));
    memset(ascii2, '\0', sizeof(ascii2));
  }
  return 0;
}
```