user: What would the C source look like for the assembly code provided here:

```asm
<main_test>:
  endbr64
  push   %r13
  mov    $0x3,%edx
  push   %r12
  lea    D30(%rip),%r12
  push   %rbp
  lea    D39(%rip),%rbp
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L404
L424:
  mov    $0x3,%edx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L673
L56:
  mov    $0x4,%edx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L540
L34:
  mov    $0x4,%edx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L692
L27:
  mov    $0x5,%edx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L652
L543:
  mov    $0x5,%edx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  js     L396
  xor    %eax,%eax
  call   <abort@plt>
L396:
  mov    $0x6,%edx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L416
L232:
  mov    $0x6,%edx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  js     L373
  xor    %eax,%eax
  call   <abort@plt>
L373:
  lea    D9(%rip),%r13
  mov    $0x3,%edx
  mov    %rbp,%rdi
  mov    %r13,%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  js     L164
  xor    %eax,%eax
  call   <abort@plt>
L164:
  mov    $0x3,%edx
  mov    %rbp,%rsi
  mov    %r13,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L550
L285:
  mov    $0x4,%edx
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  js     L213
  xor    %eax,%eax
  call   <abort@plt>
L213:
  mov    $0x4,%edx
  mov    %rbp,%rsi
  mov    %r13,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L91
L152:
  mov    $0x5,%edx
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  js     L708
  xor    %eax,%eax
  call   <abort@plt>
L708:
  mov    $0x5,%edx
  mov    %rbp,%rsi
  mov    %r13,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L387
L7:
  mov    $0x6,%edx
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  js     L168
  xor    %eax,%eax
  call   <abort@plt>
L168:
  mov    $0x6,%edx
  mov    %rbp,%rsi
  mov    %r13,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L206
L631:
  lea    D1(%rip),%r12
  mov    $0x3,%edx
  mov    %rbp,%rdi
  mov    %r12,%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L18
L711:
  mov    $0x3,%edx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  js     L622
  xor    %eax,%eax
  call   <abort@plt>
L622:
  mov    $0x4,%edx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L266
L529:
  mov    $0x4,%edx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  js     L608
  xor    %eax,%eax
  call   <abort@plt>
L608:
  mov    $0x5,%edx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L149
L267:
  mov    $0x5,%edx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  js     L630
  xor    %eax,%eax
  call   <abort@plt>
L630:
  mov    $0x6,%edx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L605
L180:
  mov    $0x6,%edx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  js     L163
  xor    %eax,%eax
  call   <abort@plt>
L163:
  mov    $0x3,%edx
  mov    %rbp,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L451
L552:
  mov    $0x3,%edx
  mov    %rbp,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L248
L242:
  mov    $0x4,%edx
  mov    %rbp,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L308
L573:
  mov    $0x4,%edx
  mov    %rbp,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L113
L131:
  mov    $0x5,%edx
  mov    %rbp,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L253
L255:
  mov    $0x5,%edx
  mov    %rbp,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L400
L575:
  mov    $0x6,%edx
  mov    %rbp,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L478
L477:
  mov    $0x6,%edx
  mov    %rbp,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L439
L98:
  mov    $0x3,%edx
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  js     L662
  xor    %eax,%eax
  call   <abort@plt>
L662:
  mov    $0x3,%edx
  mov    %rbp,%rsi
  mov    %r13,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L177
L582:
  mov    $0x4,%edx
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  js     L328
  xor    %eax,%eax
  call   <abort@plt>
L328:
  mov    $0x4,%edx
  mov    %rbp,%rsi
  mov    %r13,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L197
L526:
  mov    $0x5,%edx
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  js     L377
  xor    %eax,%eax
  call   <abort@plt>
L377:
  mov    $0x5,%edx
  mov    %rbp,%rsi
  mov    %r13,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L325
L390:
  mov    $0x6,%edx
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  js     L20
  xor    %eax,%eax
  call   <abort@plt>
L20:
  mov    $0x6,%edx
  mov    %rbp,%rsi
  mov    %r13,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L41
L16:
  mov    $0x3,%edx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L44
L743:
  mov    $0x3,%edx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  js     L532
  xor    %eax,%eax
  call   <abort@plt>
L532:
  mov    $0x4,%edx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L453
L716:
  mov    $0x4,%edx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  js     L183
  xor    %eax,%eax
  call   <abort@plt>
L183:
  mov    $0x5,%edx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L496
L236:
  mov    $0x5,%edx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  js     L175
  xor    %eax,%eax
  call   <abort@plt>
L175:
  mov    $0x6,%edx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jle    L238
L102:
  mov    $0x6,%edx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jns    L767
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopw   0x0(%rax,%rax,1)
L767:
  pop    %rbp
  xor    %eax,%eax
  pop    %r12
  pop    %r13
  jmp    1060 <abort@plt>
  nopl   0x0(%rax)
L439:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L98
  nopl   0x0(%rax)
L478:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L477
  nopl   0x0(%rax)
L400:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L575
  nopl   0x0(%rax)
L253:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L255
  nopl   0x0(%rax)
L113:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L131
  nopl   0x0(%rax)
L308:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L573
  nopl   0x0(%rax)
L248:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L242
  nopl   0x0(%rax)
L451:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L552
  nopl   0x0(%rax)
L692:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L27
  nopl   0x0(%rax)
L540:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L34
  nopl   0x0(%rax)
L673:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L56
  nopl   0x0(%rax)
L404:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L424
  nopl   0x0(%rax)
L605:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L180
  nopl   0x0(%rax)
L149:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L267
  nopl   0x0(%rax)
L266:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L529
  nopl   0x0(%rax)
L18:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L711
  nopl   0x0(%rax)
L206:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L631
  nopl   0x0(%rax)
L387:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L7
  nopl   0x0(%rax)
L91:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L152
  nopl   0x0(%rax)
L550:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L285
  nopl   0x0(%rax)
L416:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L232
  nopl   0x0(%rax)
L652:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L543
  nopl   0x0(%rax)
L453:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L716
  nopl   0x0(%rax)
L44:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L743
  nopl   0x0(%rax)
L41:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L16
  nopl   0x0(%rax)
L325:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L390
  nopl   0x0(%rax)
L238:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L102
  nopl   0x0(%rax)
L496:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L236
  nopl   0x0(%rax)
L197:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L526
  nopl   0x0(%rax)
L177:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L582
```

tool_calls: name: parse_data
arguments: tag: D30
type_infered: string
name: parse_data
arguments: tag: D39
type_infered: string
name: parse_data
arguments: tag: D9
type_infered: string
name: parse_data
arguments: tag: D1
type_infered: string

tool: D30: ello

tool: D39: ello world

tool: D9: zllo

tool: D1: 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();
}
```