user: Please show me the C implementation that matches the assembly code listed below:

```asm
<main_test>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  lea    D389(%rip),%rax
  mov    %rax,-0x10(%rbp)
  movl   $0x6,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x3,%edx
  lea    D45(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L1109
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L726
L1109:
  mov    $0x0,%eax
  call   <abort@plt>
L726:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x3,%edx
  mov    %rax,%rsi
  lea    D45(%rip),%rax
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L441
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L924
L441:
  mov    $0x0,%eax
  call   <abort@plt>
L924:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x4,%edx
  lea    D45(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L188
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L26
L188:
  mov    $0x0,%eax
  call   <abort@plt>
L26:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x4,%edx
  mov    %rax,%rsi
  lea    D45(%rip),%rax
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L968
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L526
L968:
  mov    $0x0,%eax
  call   <abort@plt>
L526:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x5,%edx
  lea    D45(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L488
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L826
L488:
  mov    $0x0,%eax
  call   <abort@plt>
L826:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x5,%edx
  mov    %rax,%rsi
  lea    D45(%rip),%rax
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jns    L876
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L50
L876:
  mov    $0x0,%eax
  call   <abort@plt>
L50:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x6,%edx
  lea    D45(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L568
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L1168
L568:
  mov    $0x0,%eax
  call   <abort@plt>
L1168:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x6,%edx
  mov    %rax,%rsi
  lea    D45(%rip),%rax
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jns    L1193
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L1158
L1193:
  mov    $0x0,%eax
  call   <abort@plt>
L1158:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x3,%edx
  lea    D162(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jns    L872
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L1124
L872:
  mov    $0x0,%eax
  call   <abort@plt>
L1124:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x3,%edx
  mov    %rax,%rsi
  lea    D162(%rip),%rax
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L240
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L1014
L240:
  mov    $0x0,%eax
  call   <abort@plt>
L1014:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x4,%edx
  lea    D162(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jns    L767
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L817
L767:
  mov    $0x0,%eax
  call   <abort@plt>
L817:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x4,%edx
  mov    %rax,%rsi
  lea    D162(%rip),%rax
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L640
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L25
L640:
  mov    $0x0,%eax
  call   <abort@plt>
L25:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x5,%edx
  lea    D162(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jns    L421
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L1120
L421:
  mov    $0x0,%eax
  call   <abort@plt>
L1120:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x5,%edx
  mov    %rax,%rsi
  lea    D162(%rip),%rax
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L679
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L641
L679:
  mov    $0x0,%eax
  call   <abort@plt>
L641:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x6,%edx
  lea    D162(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jns    L255
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L246
L255:
  mov    $0x0,%eax
  call   <abort@plt>
L246:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x6,%edx
  mov    %rax,%rsi
  lea    D162(%rip),%rax
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L739
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L916
L739:
  mov    $0x0,%eax
  call   <abort@plt>
L916:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x3,%edx
  lea    D284(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L187
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L426
L187:
  mov    $0x0,%eax
  call   <abort@plt>
L426:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x3,%edx
  mov    %rax,%rsi
  lea    D284(%rip),%rax
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jns    L956
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L353
L956:
  mov    $0x0,%eax
  call   <abort@plt>
L353:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x4,%edx
  lea    D284(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L143
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L637
L143:
  mov    $0x0,%eax
  call   <abort@plt>
L637:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x4,%edx
  mov    %rax,%rsi
  lea    D284(%rip),%rax
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jns    L304
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L241
L304:
  mov    $0x0,%eax
  call   <abort@plt>
L241:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x5,%edx
  lea    D284(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L210
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L668
L210:
  mov    $0x0,%eax
  call   <abort@plt>
L668:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x5,%edx
  mov    %rax,%rsi
  lea    D284(%rip),%rax
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jns    L558
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L400
L558:
  mov    $0x0,%eax
  call   <abort@plt>
L400:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x6,%edx
  lea    D284(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L707
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L810
L707:
  mov    $0x0,%eax
  call   <abort@plt>
L810:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x6,%edx
  mov    %rax,%rsi
  lea    D284(%rip),%rax
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jns    L1024
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  je     L55
L1024:
  mov    $0x0,%eax
  call   <abort@plt>
L55:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x2,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
  mov    -0x14(%rbp),%eax
  cltq
  and    $0x3,%eax
  mov    %rax,%rdx
  mov    -0x10(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  addq   $0x1,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L390
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L390
  cmpl   $0x3,-0x18(%rbp)
  je     L117
L390:
  mov    $0x0,%eax
  call   <abort@plt>
L117:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x2,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x14(%rbp),%eax
  cltq
  and    $0x3,%eax
  mov    %rax,%rdx
  mov    -0x10(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  mov    %rax,%rsi
  mov    %rcx,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L496
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L496
  cmpl   $0x3,-0x18(%rbp)
  je     L464
L496:
  mov    $0x0,%eax
  call   <abort@plt>
L464:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x3,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
  mov    -0x14(%rbp),%eax
  cltq
  and    $0x3,%eax
  mov    %rax,%rdx
  mov    -0x10(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  addq   $0x1,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L897
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L897
  cmpl   $0x4,-0x18(%rbp)
  je     L854
L897:
  mov    $0x0,%eax
  call   <abort@plt>
L854:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x3,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x14(%rbp),%eax
  cltq
  and    $0x3,%eax
  mov    %rax,%rdx
  mov    -0x10(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  mov    %rax,%rsi
  mov    %rcx,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L828
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L828
  cmpl   $0x4,-0x18(%rbp)
  je     L447
L828:
  mov    $0x0,%eax
  call   <abort@plt>
L447:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x4,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
  mov    -0x14(%rbp),%eax
  cltq
  and    $0x3,%eax
  mov    %rax,%rdx
  mov    -0x10(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  addq   $0x1,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L770
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L770
  cmpl   $0x5,-0x18(%rbp)
  je     L829
L770:
  mov    $0x0,%eax
  call   <abort@plt>
L829:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x4,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x14(%rbp),%eax
  cltq
  and    $0x3,%eax
  mov    %rax,%rdx
  mov    -0x10(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  mov    %rax,%rsi
  mov    %rcx,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L530
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L530
  cmpl   $0x5,-0x18(%rbp)
  je     L839
L530:
  mov    $0x0,%eax
  call   <abort@plt>
L839:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x5,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
  mov    -0x14(%rbp),%eax
  cltq
  and    $0x3,%eax
  mov    %rax,%rdx
  mov    -0x10(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  addq   $0x1,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L67
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L67
  cmpl   $0x6,-0x18(%rbp)
  je     L170
L67:
  mov    $0x0,%eax
  call   <abort@plt>
L170:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x5,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x14(%rbp),%eax
  cltq
  and    $0x3,%eax
  mov    %rax,%rdx
  mov    -0x10(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  mov    %rax,%rsi
  mov    %rcx,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L608
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L608
  cmpl   $0x6,-0x18(%rbp)
  je     L720
L608:
  mov    $0x0,%eax
  call   <abort@plt>
L720:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x2,-0x18(%rbp)
  addl   $0x1,-0x18(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  lea    D162(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jns    L310
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L310
  cmpl   $0x3,-0x18(%rbp)
  je     L476
L310:
  mov    $0x0,%eax
  call   <abort@plt>
L476:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x2,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  mov    %rax,%rsi
  lea    D162(%rip),%rax
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L1074
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L1074
  cmpl   $0x3,-0x18(%rbp)
  je     L647
L1074:
  mov    $0x0,%eax
  call   <abort@plt>
L647:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x3,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  lea    D162(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jns    L1188
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L1188
  cmpl   $0x4,-0x18(%rbp)
  je     L453
L1188:
  mov    $0x0,%eax
  call   <abort@plt>
L453:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x3,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  mov    %rax,%rsi
  lea    D162(%rip),%rax
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L257
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L257
  cmpl   $0x4,-0x18(%rbp)
  je     L1018
L257:
  mov    $0x0,%eax
  call   <abort@plt>
L1018:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x4,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  lea    D162(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jns    L769
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L769
  cmpl   $0x5,-0x18(%rbp)
  je     L462
L769:
  mov    $0x0,%eax
  call   <abort@plt>
L462:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x4,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  mov    %rax,%rsi
  lea    D162(%rip),%rax
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L291
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L291
  cmpl   $0x5,-0x18(%rbp)
  je     L84
L291:
  mov    $0x0,%eax
  call   <abort@plt>
L84:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x5,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  lea    D162(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jns    L1035
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L1035
  cmpl   $0x6,-0x18(%rbp)
  je     L549
L1035:
  mov    $0x0,%eax
  call   <abort@plt>
L549:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x5,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  mov    %rax,%rsi
  lea    D162(%rip),%rax
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L470
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L470
  cmpl   $0x6,-0x18(%rbp)
  je     L134
L470:
  mov    $0x0,%eax
  call   <abort@plt>
L134:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x2,-0x18(%rbp)
  addl   $0x1,-0x18(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  lea    D284(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L950
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L950
  cmpl   $0x3,-0x18(%rbp)
  je     L603
L950:
  mov    $0x0,%eax
  call   <abort@plt>
L603:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x2,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  mov    %rax,%rsi
  lea    D284(%rip),%rax
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jns    L1150
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L1150
  cmpl   $0x3,-0x18(%rbp)
  je     L1063
L1150:
  mov    $0x0,%eax
  call   <abort@plt>
L1063:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x3,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  lea    D284(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L699
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L699
  cmpl   $0x4,-0x18(%rbp)
  je     L972
L699:
  mov    $0x0,%eax
  call   <abort@plt>
L972:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x3,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  mov    %rax,%rsi
  lea    D284(%rip),%rax
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jns    L216
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L216
  cmpl   $0x4,-0x18(%rbp)
  je     L178
L216:
  mov    $0x0,%eax
  call   <abort@plt>
L178:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x4,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  lea    D284(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L883
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L883
  cmpl   $0x5,-0x18(%rbp)
  je     L842
L883:
  mov    $0x0,%eax
  call   <abort@plt>
L842:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x4,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  mov    %rax,%rsi
  lea    D284(%rip),%rax
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jns    L156
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L156
  cmpl   $0x5,-0x18(%rbp)
  je     L573
L156:
  mov    $0x0,%eax
  call   <abort@plt>
L573:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x5,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  lea    D284(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L948
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L948
  cmpl   $0x6,-0x18(%rbp)
  je     L28
L948:
  mov    $0x0,%eax
  call   <abort@plt>
L28:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x5,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%rax
  mov    %rax,%rsi
  lea    D284(%rip),%rax
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jns    L634
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  cmp    %rax,-0x8(%rbp)
  jne    L634
  cmpl   $0x6,-0x18(%rbp)
  je     L527
L634:
  mov    $0x0,%eax
  call   <abort@plt>
L527:
  nop
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: label: D389
type_infered: string
name: disassemble_data
arguments: label: D45
type_infered: string
name: disassemble_data
arguments: label: D162
type_infered: string
name: disassemble_data
arguments: label: D284
type_infered: string

tool: D389: hello world

tool: D45: ello

tool: D162: zllo

tool: D284: allo

assistant: ```c
void main_test(void) {
  const char *const s1 = "hello world";
  const char *s2, *s3;
  int n = 6, x;
  s2 = s1;
  if (strncmp(++s2, "ello", 3) != 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp("ello", ++s2, 3) != 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp(++s2, "ello", 4) != 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp("ello", ++s2, 4) != 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp(++s2, "ello", 5) <= 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp("ello", ++s2, 5) >= 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp(++s2, "ello", 6) <= 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp("ello", ++s2, 6) >= 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp(++s2, "zllo", 3) >= 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp("zllo", ++s2, 3) <= 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp(++s2, "zllo", 4) >= 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp("zllo", ++s2, 4) <= 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp(++s2, "zllo", 5) >= 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp("zllo", ++s2, 5) <= 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp(++s2, "zllo", 6) >= 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp("zllo", ++s2, 6) <= 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp(++s2, "allo", 3) <= 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp("allo", ++s2, 3) >= 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp(++s2, "allo", 4) <= 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp("allo", ++s2, 4) >= 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp(++s2, "allo", 5) <= 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp("allo", ++s2, 5) >= 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp(++s2, "allo", 6) <= 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  if (strncmp("allo", ++s2, 6) >= 0 || s2 != s1 + 1)
    abort();
  s2 = s1;
  n = 2;
  x = 1;
  if (strncmp(++s2, s1 + (x & 3), ++n) != 0 || s2 != s1 + 1 || n != 3)
    abort();
  s2 = s1;
  n = 2;
  x = 1;
  if (strncmp(s1 + (x & 3), ++s2, ++n) != 0 || s2 != s1 + 1 || n != 3)
    abort();
  s2 = s1;
  n = 3;
  x = 1;
  if (strncmp(++s2, s1 + (x & 3), ++n) != 0 || s2 != s1 + 1 || n != 4)
    abort();
  s2 = s1;
  n = 3;
  x = 1;
  if (strncmp(s1 + (x & 3), ++s2, ++n) != 0 || s2 != s1 + 1 || n != 4)
    abort();
  s2 = s1;
  n = 4;
  x = 1;
  if (strncmp(++s2, s1 + (x & 3), ++n) != 0 || s2 != s1 + 1 || n != 5)
    abort();
  s2 = s1;
  n = 4;
  x = 1;
  if (strncmp(s1 + (x & 3), ++s2, ++n) != 0 || s2 != s1 + 1 || n != 5)
    abort();
  s2 = s1;
  n = 5;
  x = 1;
  if (strncmp(++s2, s1 + (x & 3), ++n) != 0 || s2 != s1 + 1 || n != 6)
    abort();
  s2 = s1;
  n = 5;
  x = 1;
  if (strncmp(s1 + (x & 3), ++s2, ++n) != 0 || s2 != s1 + 1 || n != 6)
    abort();
  s2 = s1;
  n = 2;
  if (strncmp(++s2, "zllo", ++n) >= 0 || s2 != s1 + 1 || n != 3)
    abort();
  s2 = s1;
  n = 2;
  x = 1;
  if (strncmp("zllo", ++s2, ++n) <= 0 || s2 != s1 + 1 || n != 3)
    abort();
  s2 = s1;
  n = 3;
  x = 1;
  if (strncmp(++s2, "zllo", ++n) >= 0 || s2 != s1 + 1 || n != 4)
    abort();
  s2 = s1;
  n = 3;
  x = 1;
  if (strncmp("zllo", ++s2, ++n) <= 0 || s2 != s1 + 1 || n != 4)
    abort();
  s2 = s1;
  n = 4;
  x = 1;
  if (strncmp(++s2, "zllo", ++n) >= 0 || s2 != s1 + 1 || n != 5)
    abort();
  s2 = s1;
  n = 4;
  x = 1;
  if (strncmp("zllo", ++s2, ++n) <= 0 || s2 != s1 + 1 || n != 5)
    abort();
  s2 = s1;
  n = 5;
  x = 1;
  if (strncmp(++s2, "zllo", ++n) >= 0 || s2 != s1 + 1 || n != 6)
    abort();
  s2 = s1;
  n = 5;
  x = 1;
  if (strncmp("zllo", ++s2, ++n) <= 0 || s2 != s1 + 1 || n != 6)
    abort();
  s2 = s1;
  n = 2;
  if (strncmp(++s2, "allo", ++n) <= 0 || s2 != s1 + 1 || n != 3)
    abort();
  s2 = s1;
  n = 2;
  x = 1;
  if (strncmp("allo", ++s2, ++n) >= 0 || s2 != s1 + 1 || n != 3)
    abort();
  s2 = s1;
  n = 3;
  x = 1;
  if (strncmp(++s2, "allo", ++n) <= 0 || s2 != s1 + 1 || n != 4)
    abort();
  s2 = s1;
  n = 3;
  x = 1;
  if (strncmp("allo", ++s2, ++n) >= 0 || s2 != s1 + 1 || n != 4)
    abort();
  s2 = s1;
  n = 4;
  x = 1;
  if (strncmp(++s2, "allo", ++n) <= 0 || s2 != s1 + 1 || n != 5)
    abort();
  s2 = s1;
  n = 4;
  x = 1;
  if (strncmp("allo", ++s2, ++n) >= 0 || s2 != s1 + 1 || n != 5)
    abort();
  s2 = s1;
  n = 5;
  x = 1;
  if (strncmp(++s2, "allo", ++n) <= 0 || s2 != s1 + 1 || n != 6)
    abort();
  s2 = s1;
  n = 5;
  x = 1;
  if (strncmp("allo", ++s2, ++n) >= 0 || s2 != s1 + 1 || n != 6)
    abort();
}
```