user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<main>:
  endbr64
  push   %rbp
  lea    D7(%rip),%rdi
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  lea    0xc(%rsp),%rbp
  mov    %rbp,%rsi
  call   <scanf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  cmp    $0xa,%ax
  jne    L89
  movzbl 0xc(%rsp),%eax
  sub    $0x30,%eax
  cmp    $0x9,%al
  ja     L89
  movzbl 0xd(%rsp),%eax
  sub    $0x30,%eax
  cmp    $0x9,%al
  ja     L89
  movzbl 0xe(%rsp),%ecx
  lea    -0x30(%rcx),%eax
  cmp    $0x9,%al
  ja     L89
  movzbl 0xf(%rsp),%esi
  lea    -0x30(%rsi),%eax
  cmp    $0x9,%al
  ja     L89
  movzbl 0x10(%rsp),%edx
  lea    -0x30(%rdx),%eax
  cmp    $0x9,%al
  ja     L89
  movzbl 0x11(%rsp),%edi
  lea    -0x30(%rdi),%eax
  cmp    $0x9,%al
  ja     L89
  movzbl 0x12(%rsp),%eax
  sub    $0x30,%eax
  cmp    $0x9,%al
  ja     L89
  movzbl 0x13(%rsp),%eax
  sub    $0x30,%eax
  cmp    $0x9,%al
  ja     L89
  movzbl 0x14(%rsp),%eax
  sub    $0x30,%eax
  cmp    $0x9,%al
  ja     L89
  movzbl 0x15(%rsp),%eax
  sub    $0x30,%eax
  cmp    $0x9,%al
  ja     L89
  cmp    $0x35,%cl
  jg     L89
  ja     L374
  mov    $0x15,%eax
  shl    $0x31,%rax
  shr    %cl,%rax
  test   $0x1,%al
  je     L374
  cmp    $0x32,%sil
  jg     L89
L374:
  cmp    $0x33,%dl
  jg     L89
  cmp    $0x34,%cl
  ja     L239
  mov    $0x15,%eax
  shl    $0x30,%rax
  shr    %cl,%rax
  test   $0x1,%al
  je     L239
  cmp    $0x32,%sil
  je     L387
L239:
  cmpb   $0x33,0x10(%rsp)
  je     L348
L279:
  movsbw 0xc(%rsp),%ax
  movsbw 0xe(%rsp),%si
  movsbw 0x10(%rsp),%dx
  movsbw 0x12(%rsp),%cx
  movsbw 0xd(%rsp),%r10w
  movsbw 0xf(%rsp),%r9w
  movd   %eax,%xmm0
  movd   %esi,%xmm3
  movsbw 0x11(%rsp),%r8w
  movsbw 0x13(%rsp),%di
  movd   %edx,%xmm1
  movd   %ecx,%xmm2
  pinsrw $0x1,%r10d,%xmm0
  pinsrw $0x1,%r9d,%xmm3
  mov    $0xb,%esi
  movsbw 0x15(%rsp),%cx
  pinsrw $0x1,%r8d,%xmm1
  pinsrw $0x1,%edi,%xmm2
  punpckldq %xmm3,%xmm0
  punpckldq %xmm2,%xmm1
  sub    $0x30,%ecx
  punpcklqdq %xmm1,%xmm0
  paddw  D28(%rip),%xmm0
  movzwl %cx,%ecx
  pextrw $0x1,%xmm0,%edx
  pextrw $0x0,%xmm0,%eax
  lea    (%rax,%rdx,2),%eax
  pextrw $0x2,%xmm0,%edx
  lea    (%rax,%rdx,4),%edx
  pextrw $0x3,%xmm0,%eax
  lea    (%rax,%rax,4),%eax
  lea    (%rax,%rdx,2),%eax
  pextrw $0x4,%xmm0,%edx
  imul   $0xa,%edx,%edx
  add    %edx,%eax
  pextrw $0x5,%xmm0,%edx
  lea    (%rdx,%rdx,8),%edx
  add    %edx,%eax
  pextrw $0x6,%xmm0,%edx
  imul   $0x7,%edx,%edx
  add    %edx,%eax
  pextrw $0x7,%xmm0,%edx
  lea    (%rdx,%rdx,2),%edx
  add    %edx,%eax
  movsbw 0x14(%rsp),%dx
  sub    $0x30,%edx
  movzwl %dx,%edx
  imul   $0x6,%edx,%edx
  add    %edx,%eax
  cltd
  idiv   %esi
  mov    $0xa,%esi
  mov    %edx,%eax
  cltd
  idiv   %esi
  cmp    %edx,%ecx
  je     L233
L89:
  lea    D35(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
L191:
  mov    0x18(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L309
  add    $0x20,%rsp
  pop    %rbp
  ret
L233:
  lea    D8(%rip),%rdi
  call   <printf@plt>
  mov    $0x1,%eax
  jmp    L191
L348:
  movzbl 0xf(%rsp),%eax
  mov    %eax,%edx
  and    $0xfffffffd,%edx
  cmp    $0x34,%dl
  je     L274
  cmp    $0x39,%al
  jne    L158
L274:
  cmpb   $0x30,0x11(%rsp)
  jle    L279
  jmp    L89
L387:
  cmp    $0x33,%dl
  je     L89
  cmp    $0x32,%dl
  jne    L279
  cmp    $0x39,%dil
  jne    L279
  sub    $0x34,%ecx
  cmp    $0x1,%cl
  jbe    L279
  mov    %rbp,%rdi
  call   <dividable_4@plt>
  test   %rax,%rax
  je     L89
  cmpb   $0x30,0xc(%rsp)
  jne    L239
  cmpb   $0x30,0xd(%rsp)
  jne    L239
  jmp    L89
L158:
  cmp    $0x31,%al
  je     L268
L267:
  cmpb   $0x31,0x11(%rsp)
  jle    L279
  jmp    L89
L268:
  movsbl 0xe(%rsp),%eax
  mov    $0x2,%ecx
  sub    $0x30,%eax
  cltd
  idiv   %ecx
  sub    $0x1,%edx
  jne    L267
  jmp    L274
L309:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: tag: D7
type_guessed: string
name: extract_symbolic_data
arguments: tag: D28
type_guessed: byte[16]
name: extract_symbolic_data
arguments: tag: D35
type_guessed: string
name: extract_symbolic_data
arguments: tag: D8
type_guessed: string

tool: D7: %s

tool: {"D28": [0xd0,0xff,0xd0,0xff,0xd0,0xff,0xd0,0xff,0xd0,0xff,0xd0,0xff,0xd0,0xff,0xd0,0xff]}

tool: D35: 0

tool: D8: 1

assistant: ```c
int main() {
  char input[12];
  short unsigned int i, l, n[10];
  scanf("%s", input);
  l = strlen(input);
  if (l != 10) {
    printf("0");
    return 0;
  }
  for (i = 0; i < 10; i++)
    if (input[i] < '0' || input[i] > '9') {
      printf("0");
      return 0;
    }
  if (input[2] > '5') {
    printf("0");
    return 0;
  }
  if ((input[2] == '5' || input[2] == '3' || input[2] == '1') && input[3] > '2') {
    printf("0");
    return 0;
  }
  if (input[4] > '3') {
    printf("0");
    return 0;
  }
  if ((input[2] == '0' || input[2] == '2' || input[2] == '4') && input[3] == '2') {
    if (input[4] > '2') {
      printf("0");
      return 0;
    }
    if (input[4] == '2' && input[5] == '9' && !((input[2] == '4' || input[2] == '5') || (dividable_4(input) && !(input[0] == '0' && input[1] == '0')))) {
      printf("0");
      return 0;
    }
  }
  if (input[4] == '3') {
    if (input[3] == '4' || input[3] == '6' || input[3] == '9' || (input[3] == '1' && ((int)input[2] - 48) % 2 == 1)) {
      if (input[5] > '0') {
        printf("0");
        return 0;
      }
    } else if (input[5] > '1') {
      printf("0");
      return 0;
    }
  }
  for (i = 0; i < 10; i++)
    n[i] = (short unsigned int)input[i] - 48;
  if (n[9] != ((n[0] * 2 + n[1] * 4 + n[2] * 8 + n[3] * 5 + n[4] * 10 + n[5] * 9 + n[6] * 7 + n[7] * 3 + n[8] * 6) % 11) % 10) {
    printf("0");
    return 0;
  }
  printf("1");
  return 1;
}
```