user: Translate the below assembly code into C programming language:

```asm
<Gmatch>:
  endbr64
  push   %r15
  mov    %rdi,%r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  lea    D7(%rip),%rbp
  push   %rbx
  mov    %rsi,%rbx
  sub    $0x68,%rsp
L444:
  movzbl (%r15),%r8d
  movzbl (%rbx),%eax
  lea    0x1(%rbx),%rsi
  mov    %r8d,%r9d
  mov    %r8d,%ecx
  and    $0x7f,%r9d
  and    $0x7f,%ecx
  cmp    $0x3f,%al
  je     L1292
  jg     L615
  test   %al,%al
  je     L370
  cmp    $0x2a,%al
  jne    L261
  cmpb   $0x0,0x1(%rbx)
  mov    %rsi,0x20(%rsp)
  je     L428
  test   %r8b,%r8b
  je     L1448
  mov    %r15,0x8(%rsp)
  mov    %r8d,%eax
L387:
  mov    0x20(%rsp),%rbx
  mov    0x8(%rsp),%r15
L28:
  movzbl (%rbx),%edx
  mov    %eax,%edi
  mov    %eax,%ecx
  lea    0x1(%rbx),%rsi
  and    $0x7f,%edi
  and    $0x7f,%ecx
  cmp    $0x3f,%dl
  je     L1670
  jg     L412
  test   %dl,%dl
  je     L77
  cmp    $0x2a,%dl
  jne    L343
  cmpb   $0x0,0x1(%rbx)
  mov    %rsi,0x28(%rsp)
  je     L428
  test   %al,%al
  je     L1322
  mov    %r15,0x10(%rsp)
L1474:
  mov    0x28(%rsp),%rbx
  mov    0x10(%rsp),%r14
L764:
  movzbl (%rbx),%edx
  mov    %eax,%edi
  mov    %eax,%ecx
  lea    0x1(%rbx),%rsi
  and    $0x7f,%edi
  and    $0x7f,%ecx
  cmp    $0x3f,%dl
  je     L1908
  jg     L1589
  test   %dl,%dl
  je     L960
  cmp    $0x2a,%dl
  jne    L822
  cmpb   $0x0,0x1(%rbx)
  mov    %rsi,0x30(%rsp)
  je     L428
  test   %al,%al
  je     L1522
  mov    %r14,0x18(%rsp)
L801:
  mov    0x30(%rsp),%rbx
  mov    0x18(%rsp),%r15
L617:
  movzbl (%rbx),%edx
  mov    %eax,%edi
  mov    %eax,%ecx
  lea    0x1(%rbx),%rsi
  and    $0x7f,%edi
  and    $0x7f,%ecx
  cmp    $0x3f,%dl
  je     L1625
  jg     L105
  test   %dl,%dl
  je     L1871
  cmp    $0x2a,%dl
  jne    L570
  cmpb   $0x0,0x1(%rbx)
  mov    %rsi,0x38(%rsp)
  je     L428
L1799:
  test   %al,%al
  je     L1092
  mov    0x38(%rsp),%rbp
  mov    %r15,%rbx
L1070:
  movzbl 0x0(%rbp),%edx
  mov    %eax,%edi
  mov    %eax,%ecx
  lea    0x1(%rbp),%rsi
  and    $0x7f,%edi
  and    $0x7f,%ecx
  cmp    $0x3f,%dl
  je     L935
  jg     L529
  test   %dl,%dl
  je     L1478
  cmp    $0x2a,%dl
  jne    L590
  cmpb   $0x0,0x1(%rbp)
  mov    %rsi,0x40(%rsp)
  je     L428
  test   %al,%al
  je     L1772
  mov    %r15,0x50(%rsp)
L1431:
  mov    0x40(%rsp),%r12
  mov    %rbx,%rbp
L1112:
  movzbl (%r12),%edx
  mov    %eax,%ecx
  mov    %eax,%esi
  lea    0x1(%r12),%r15
  and    $0x7f,%ecx
  and    $0x7f,%esi
  cmp    $0x3f,%dl
  je     L129
  jg     L535
  test   %dl,%dl
  je     L481
  cmp    $0x2a,%dl
  jne    L816
  cmpb   $0x0,0x1(%r12)
  je     L428
  test   %al,%al
  je     L1444
  mov    %rbx,0x58(%rsp)
  mov    %r15,0x48(%rsp)
L923:
  mov    0x48(%rsp),%r12
  mov    %rbp,%r13
L1130:
  movzbl (%r12),%edx
  mov    %eax,%esi
  mov    %eax,%ecx
  lea    0x1(%r12),%r14
  and    $0x7f,%esi
  and    $0x7f,%ecx
  cmp    $0x3f,%dl
  je     L437
  jg     L1516
  test   %dl,%dl
  je     L1740
  cmp    $0x2a,%dl
  jne    L1432
  cmpb   $0x0,0x1(%r12)
  je     L428
  test   %al,%al
  je     L107
L1598:
  mov    %r14,%r12
  mov    %r13,%rbx
L744:
  movzbl (%rbx),%edx
  movzbl (%r12),%eax
  lea    0x1(%r12),%r15
  mov    %edx,%esi
  mov    %edx,%ecx
  and    $0x7f,%esi
  and    $0x7f,%ecx
  cmp    $0x3f,%al
  je     L1550
  jg     L67
  test   %al,%al
  je     L294
  cmp    $0x2a,%al
  jne    L1071
  cmpb   $0x0,0x1(%r12)
  je     L428
  test   %dl,%dl
  je     L1110
L1315:
  xor    %eax,%eax
  mov    %r15,%rsi
  mov    %rbx,%rdi
  call   <Gmatch>
  test   %eax,%eax
  jne    L428
  add    $0x1,%rbx
  cmpb   $0x0,(%rbx)
  jne    L1315
  nopw   0x0(%rax,%rax,1)
L1110:
  add    $0x1,%r13
  cmpb   $0x0,0x0(%r13)
  jne    L1598
  nopl   0x0(%rax,%rax,1)
L107:
  movzbl 0x1(%rbp),%eax
  add    $0x1,%rbp
  test   %al,%al
  jne    L923
L164:
  mov    0x58(%rsp),%rbx
  nopl   (%rax)
L1444:
  movzbl 0x1(%rbx),%eax
  add    $0x1,%rbx
  test   %al,%al
  jne    L1431
L1339:
  mov    0x50(%rsp),%r15
L1772:
  add    $0x1,%r15
  movzbl (%r15),%eax
  jmp    L1799
  nopw   0x0(%rax,%rax,1)
L960:
  test   %ecx,%ecx
  jne    L1522
L428:
  mov    $0x1,%eax
L575:
  add    $0x68,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L615:
  cmp    $0x5b,%al
  jne    L261
  movsbl 0x1(%rbx),%edx
  lea    0x2(%rbx),%rdi
  test   %edx,%edx
  je     L518
  mov    $0x7fff,%r8d
  xor    %eax,%eax
  cmp    $0x5d,%edx
  je     L685
L507:
  cmp    $0x2d,%edx
  je     L1406
  mov    %edx,%r8d
  xor    %edx,%edx
  cmp    %r8d,%ecx
  sete   %dl
  add    %edx,%eax
L159:
  movsbl (%rdi),%edx
  lea    0x1(%rdi),%rbx
  test   %edx,%edx
  je     L351
  mov    %rdi,%rsi
  mov    %rbx,%rdi
  cmp    $0x5d,%edx
  jne    L507
L685:
  test   %eax,%eax
  je     L575
  mov    %rdi,%rbx
  jmp    L1877
  xchg   %ax,%ax
L261:
  and    $0x7f,%eax
  cmp    %al,%r9b
  je     L755
L1448:
  xor    %eax,%eax
L10:
  add    $0x68,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L370:
  xor    %eax,%eax
  test   %ecx,%ecx
  sete   %al
  add    $0x68,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  cs nopw 0x0(%rax,%rax,1)
L1292:
  test   %r9b,%r9b
  je     L1448
L755:
  mov    %rsi,%rbx
L1877:
  add    $0x1,%r15
  jmp    L444
  nopl   0x0(%rax)
L518:
  mov    %rdi,%rbx
L351:
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <bferr@plt>
  jmp    L1877
  nopw   0x0(%rax,%rax,1)
L412:
  cmp    $0x5b,%dl
  jne    L343
  movsbl 0x1(%rbx),%eax
  lea    0x2(%rbx),%rdx
  test   %eax,%eax
  je     L484
  xor    %r9d,%r9d
  mov    $0x7fff,%r8d
  cmp    $0x5d,%eax
  je     L473
L1536:
  cmp    $0x2d,%eax
  je     L1443
  mov    %eax,%r8d
  xor    %eax,%eax
  cmp    %r8d,%ecx
  sete   %al
  add    %eax,%r9d
L877:
  movsbl (%rdx),%eax
  lea    0x1(%rdx),%rbx
  test   %eax,%eax
  je     L287
  mov    %rdx,%rsi
  mov    %rbx,%rdx
  cmp    $0x5d,%eax
  jne    L1536
L473:
  test   %r9d,%r9d
  je     L1322
  mov    %rdx,%rbx
  jmp    L920
  nopl   0x0(%rax)
L1589:
  cmp    $0x5b,%dl
  jne    L822
  movsbl 0x1(%rbx),%eax
  lea    0x2(%rbx),%rdx
  test   %eax,%eax
  je     L639
  xor    %r9d,%r9d
  mov    $0x7fff,%r8d
  cmp    $0x5d,%eax
  je     L379
L1720:
  cmp    $0x2d,%eax
  je     L1511
  mov    %eax,%r8d
  xor    %eax,%eax
  cmp    %r8d,%ecx
  sete   %al
  add    %eax,%r9d
L544:
  movsbl (%rdx),%eax
  lea    0x1(%rdx),%rbx
  test   %eax,%eax
  je     L1805
  mov    %rdx,%rsi
  mov    %rbx,%rdx
  cmp    $0x5d,%eax
  jne    L1720
L379:
  test   %r9d,%r9d
  je     L1522
  mov    %rdx,%rbx
  jmp    L1333
  nopl   0x0(%rax)
L105:
  cmp    $0x5b,%dl
  jne    L570
  movsbl 0x1(%rbx),%eax
  lea    0x2(%rbx),%rdx
  test   %eax,%eax
  je     L1234
  xor    %r9d,%r9d
  mov    $0x7fff,%r8d
  cmp    $0x5d,%eax
  je     L60
L364:
  cmp    $0x2d,%eax
  je     L1107
  mov    %eax,%r8d
  xor    %eax,%eax
  cmp    %ecx,%r8d
  sete   %al
  add    %eax,%r9d
L970:
  movsbl (%rdx),%eax
  lea    0x1(%rdx),%rbx
  test   %eax,%eax
  je     L839
  mov    %rdx,%rsi
  mov    %rbx,%rdx
  cmp    $0x5d,%eax
  jne    L364
L60:
  test   %r9d,%r9d
  je     L1092
  mov    %rdx,%rbx
  jmp    L135
  nopl   0x0(%rax)
L529:
  cmp    $0x5b,%dl
  jne    L590
  movsbl 0x1(%rbp),%eax
  lea    0x2(%rbp),%rdx
  test   %eax,%eax
  je     L855
  xor    %r9d,%r9d
  mov    $0x7fff,%r8d
  cmp    $0x5d,%eax
  je     L1222
L868:
  cmp    $0x2d,%eax
  je     L1420
  mov    %eax,%r8d
  xor    %eax,%eax
  cmp    %r8d,%ecx
  sete   %al
  add    %eax,%r9d
L1504:
  movsbl (%rdx),%eax
  lea    0x1(%rdx),%rbp
  test   %eax,%eax
  je     L1042
  mov    %rdx,%rsi
  mov    %rbp,%rdx
  cmp    $0x5d,%eax
  jne    L868
L1222:
  test   %r9d,%r9d
  je     L1772
  mov    %rdx,%rbp
  jmp    L1654
  nopl   0x0(%rax)
L535:
  cmp    $0x5b,%dl
  jne    L816
  movsbl 0x1(%r12),%eax
  lea    0x2(%r12),%rdx
  test   %eax,%eax
  je     L878
  xor    %r8d,%r8d
  mov    $0x7fff,%edi
  cmp    $0x5d,%eax
  je     L1581
L1811:
  cmp    $0x2d,%eax
  je     L1048
  mov    %eax,%edi
  xor    %eax,%eax
  cmp    %edi,%esi
  sete   %al
  add    %eax,%r8d
L1357:
  movsbl (%rdx),%eax
  lea    0x1(%rdx),%r12
  test   %eax,%eax
  je     L1470
  mov    %rdx,%r15
  mov    %r12,%rdx
  cmp    $0x5d,%eax
  jne    L1811
L1581:
  test   %r8d,%r8d
  je     L1444
  mov    %rdx,%r12
  jmp    L751
  nopl   0x0(%rax)
L77:
  test   %ecx,%ecx
  je     L428
L1322:
  addq   $0x1,0x8(%rsp)
  mov    0x8(%rsp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L387
  xor    %eax,%eax
  jmp    L10
  nopl   (%rax)
L1516:
  cmp    $0x5b,%dl
  jne    L1432
  movsbl 0x1(%r12),%eax
  lea    0x2(%r12),%rdx
  test   %eax,%eax
  je     L1410
  xor    %r8d,%r8d
  mov    $0x7fff,%edi
  cmp    $0x5d,%eax
  je     L201
L445:
  cmp    $0x2d,%eax
  je     L433
  mov    %eax,%edi
  xor    %eax,%eax
  cmp    %edi,%ecx
  sete   %al
  add    %eax,%r8d
L313:
  movsbl (%rdx),%eax
  lea    0x1(%rdx),%r12
  test   %eax,%eax
  je     L574
  mov    %rdx,%r14
  mov    %r12,%rdx
  cmp    $0x5d,%eax
  jne    L445
L201:
  test   %r8d,%r8d
  je     L107
  mov    %rdx,%r12
  jmp    L46
  nopl   0x0(%rax)
L1908:
  test   %dil,%dil
  jne    L797
  nopl   0x0(%rax)
L1522:
  addq   $0x1,0x10(%rsp)
  mov    0x10(%rsp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L1474
  jmp    L1322
  nopl   0x0(%rax,%rax,1)
L67:
  cmp    $0x5b,%al
  jne    L1071
  movsbl 0x1(%r12),%eax
  lea    0x2(%r12),%rdx
  test   %eax,%eax
  je     L1396
  xor    %r8d,%r8d
  mov    $0x7fff,%edi
  cmp    $0x5d,%eax
  je     L992
L1154:
  cmp    $0x2d,%eax
  je     L279
  mov    %eax,%edi
  xor    %eax,%eax
  cmp    %edi,%ecx
  sete   %al
  add    %eax,%r8d
L173:
  movsbl (%rdx),%eax
  lea    0x1(%rdx),%r12
  test   %eax,%eax
  je     L138
  mov    %rdx,%r15
  mov    %r12,%rdx
  cmp    $0x5d,%eax
  jne    L1154
L992:
  test   %r8d,%r8d
  je     L1110
  mov    %rdx,%r12
  jmp    L948
L1871:
  test   %ecx,%ecx
  je     L428
L1092:
  addq   $0x1,0x18(%rsp)
  mov    0x18(%rsp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L801
  jmp    L1522
  nopl   0x0(%rax,%rax,1)
L1670:
  test   %dil,%dil
  je     L1322
L85:
  mov    %rsi,%rbx
L920:
  add    $0x1,%r15
  movzbl (%r15),%eax
  jmp    L28
  nopl   0x0(%rax)
L343:
  and    $0x7f,%edx
  cmp    %dl,%dil
  jne    L1322
  jmp    L85
  cs nopw 0x0(%rax,%rax,1)
L484:
  mov    %rdx,%rbx
L287:
  lea    D7(%rip),%rdi
  xor    %eax,%eax
  call   <bferr@plt>
  jmp    L920
  nopl   0x0(%rax,%rax,1)
L822:
  and    $0x7f,%edx
  cmp    %dl,%dil
  jne    L1522
L797:
  mov    %rsi,%rbx
L1333:
  add    $0x1,%r14
  movzbl (%r14),%eax
  jmp    L764
  nopl   0x0(%rax)
L1478:
  test   %ecx,%ecx
  je     L428
  add    $0x1,%r15
  movzbl (%r15),%eax
  jmp    L1799
  nopl   (%rax)
L639:
  mov    %rdx,%rbx
L1805:
  lea    D7(%rip),%rdi
  xor    %eax,%eax
  call   <bferr@plt>
  jmp    L1333
  nopl   0x0(%rax,%rax,1)
L1625:
  test   %dil,%dil
  je     L1092
L1682:
  mov    %rsi,%rbx
L135:
  add    $0x1,%r15
  movzbl (%r15),%eax
  jmp    L617
  nopl   0x0(%rax)
L570:
  and    $0x7f,%edx
  cmp    %dl,%dil
  jne    L1092
  jmp    L1682
  cs nopw 0x0(%rax,%rax,1)
L481:
  test   %esi,%esi
  je     L428
  movzbl 0x1(%rbx),%eax
  add    $0x1,%rbx
  test   %al,%al
  jne    L1431
  jmp    L1339
  nopl   (%rax)
L1234:
  mov    %rdx,%rbx
L839:
  lea    D7(%rip),%rdi
  xor    %eax,%eax
  call   <bferr@plt>
  jmp    L135
  nopl   0x0(%rax,%rax,1)
L1406:
  cmp    %r8d,%ecx
  jl     L159
  xor    %edx,%edx
  cmp    %r9b,0x1(%rsi)
  lea    0x2(%rsi),%rdi
  setge  %dl
  add    %edx,%eax
  jmp    L159
  nopl   (%rax)
L935:
  test   %dil,%dil
  je     L1772
L973:
  mov    %rsi,%rbp
L1654:
  add    $0x1,%rbx
  movzbl (%rbx),%eax
  jmp    L1070
L590:
  and    $0x7f,%edx
  cmp    %dl,%dil
  je     L973
  add    $0x1,%r15
  movzbl (%r15),%eax
  jmp    L1799
  nopl   (%rax)
L1740:
  test   %ecx,%ecx
  je     L428
  movzbl 0x1(%rbp),%eax
  add    $0x1,%rbp
  test   %al,%al
  jne    L923
  jmp    L164
  nopl   (%rax)
L855:
  mov    %rdx,%rbp
L1042:
  lea    D7(%rip),%rdi
  xor    %eax,%eax
  call   <bferr@plt>
  jmp    L1654
  nopl   0x0(%rax,%rax,1)
L1443:
  cmp    %r8d,%ecx
  jl     L877
  xor    %eax,%eax
  cmp    0x1(%rsi),%dil
  lea    0x2(%rsi),%rdx
  setle  %al
  add    %eax,%r9d
  jmp    L877
  xchg   %ax,%ax
L816:
  and    $0x7f,%edx
  cmp    %dl,%cl
  jne    L1444
L169:
  mov    %r15,%r12
L751:
  add    $0x1,%rbp
  movzbl 0x0(%rbp),%eax
  jmp    L1112
  nopl   0x0(%rax,%rax,1)
L129:
  test   %cl,%cl
  je     L1444
  jmp    L169
  nopw   0x0(%rax,%rax,1)
L294:
  test   %ecx,%ecx
  je     L428
  add    $0x1,%r13
  cmpb   $0x0,0x0(%r13)
  jne    L1598
  jmp    L107
  nopl   0x0(%rax)
L878:
  mov    %rdx,%r12
L1470:
  lea    D7(%rip),%rdi
  xor    %eax,%eax
  call   <bferr@plt>
  jmp    L751
  nopl   0x0(%rax,%rax,1)
L1511:
  cmp    %r8d,%ecx
  jl     L544
  xor    %eax,%eax
  cmp    0x1(%rsi),%dil
  lea    0x2(%rsi),%rdx
  setle  %al
  add    %eax,%r9d
  jmp    L544
  cs nopw 0x0(%rax,%rax,1)
L1432:
  and    $0x7f,%edx
  cmp    %dl,%sil
  jne    L107
L143:
  mov    %r14,%r12
L46:
  add    $0x1,%r13
  movzbl 0x0(%r13),%eax
  jmp    L1130
  nopl   (%rax)
L437:
  test   %sil,%sil
  je     L107
  jmp    L143
  nopl   0x0(%rax,%rax,1)
L1410:
  mov    %rdx,%r12
L574:
  lea    D7(%rip),%rdi
  xor    %eax,%eax
  call   <bferr@plt>
  jmp    L46
  nopl   0x0(%rax,%rax,1)
L1107:
  cmp    %r8d,%ecx
  jl     L970
  xor    %eax,%eax
  cmp    0x1(%rsi),%dil
  lea    0x2(%rsi),%rdx
  setle  %al
  add    %eax,%r9d
  jmp    L970
  cs nopw 0x0(%rax,%rax,1)
L1071:
  and    $0x7f,%eax
  cmp    %al,%sil
  jne    L1110
L109:
  mov    %r15,%r12
L948:
  add    $0x1,%rbx
  jmp    L744
  nopl   0x0(%rax,%rax,1)
L1550:
  test   %sil,%sil
  je     L1110
  jmp    L109
  nopl   0x0(%rax,%rax,1)
L1396:
  mov    %rdx,%r12
L138:
  lea    D7(%rip),%rdi
  xor    %eax,%eax
  call   <bferr@plt>
  jmp    L948
  nopl   0x0(%rax,%rax,1)
L1420:
  cmp    %r8d,%ecx
  jl     L1504
  xor    %eax,%eax
  cmp    0x1(%rsi),%dil
  lea    0x2(%rsi),%rdx
  setle  %al
  add    %eax,%r9d
  jmp    L1504
  cs nopw 0x0(%rax,%rax,1)
L1048:
  cmp    %edi,%esi
  jl     L1357
  xor    %eax,%eax
  cmp    0x1(%r15),%cl
  lea    0x2(%r15),%rdx
  setle  %al
  add    %eax,%r8d
  jmp    L1357
  nopl   (%rax)
L433:
  cmp    %edi,%ecx
  jl     L313
  xor    %eax,%eax
  cmp    0x1(%r14),%sil
  lea    0x2(%r14),%rdx
  setle  %al
  add    %eax,%r8d
  jmp    L313
  nopl   (%rax)
L279:
  cmp    %edi,%ecx
  jl     L173
  xor    %eax,%eax
  cmp    0x1(%r15),%sil
  lea    0x2(%r15),%rdx
  setle  %al
  add    %eax,%r8d
  jmp    L173
```

tool_calls: name: parse_data
arguments: data_label: D7
type: string

tool: D7: Missing ]

assistant: ```c
Gmatch(s, p) register char *s, *p;
{
  register int scc;
  int ok, lc;
  int c, cc;
  for (;;) {
    scc = *s++ & 0177;
    switch (c = *p++) {
    case '[':
      ok = 0;
      lc = 077777;
      while (cc = *p++) {
        if (cc == ']') {
          if (ok)
            break;
          return (0);
        }
        if (cc == '-') {
          if (lc <= scc && scc <= *p++)
            ok++;
        } else if (scc == (lc = cc))
          ok++;
      }
      if (cc == 0)
        bferr("Missing ]");
      continue;
    case '*':
      if (!*p)
        return (1);
      for (s--; *s; s++)
        if (Gmatch(s, p))
          return (1);
      return (0);
    case 0:
      return (scc == 0);
    default:
      if ((c & 0177) != scc)
        return (0);
      continue;
    case '?':
      if (scc == 0)
        return (0);
      continue;
    }
  }
}
```