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

```asm
<cmp_barker>:
  endbr64
  push   %r13
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  push   %rbx
  xor    %ebx,%ebx
  sub    $0x28,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  lea    0xc(%rsp),%rbp
  nopl   0x0(%rax,%rax,1)
L761:
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L409
  add    $0x1,%ebx
  testl  $0xfff8,0xc(%rsp)
  jne    L738
  cmp    $0x3a98,%ebx
  je     L426
L655:
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L409
  add    $0x1,%ebx
  testl  $0xfff8,0xc(%rsp)
  jne    L738
  cmp    $0x3a98,%ebx
  je     L426
L620:
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L409
  add    $0x1,%ebx
  testl  $0xfff8,0xc(%rsp)
  jne    L738
  cmp    $0x3a98,%ebx
  je     L426
L762:
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L409
  add    $0x1,%ebx
  testl  $0xfff8,0xc(%rsp)
  jne    L738
  cmp    $0x3a98,%ebx
  je     L426
L644:
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L409
  add    $0x1,%ebx
  testl  $0xfff8,0xc(%rsp)
  jne    L738
  cmp    $0x3a98,%ebx
  je     L426
L435:
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L409
  mov    0xc(%rsp),%eax
  lea    0x1(%rbx),%edx
  test   $0xfff8,%eax
  je     L9
  or     $0xffff0007,%eax
  cmp    $0xffffffff,%eax
  je     L3
  cmp    $0x3a98,%edx
  je     L426
  mov    %edx,%ebx
  jmp    L761
  nopl   0x0(%rax,%rax,1)
L738:
  cmp    $0x3a98,%ebx
  jne    L761
L426:
  mov    $0xffffffff,%r13d
  jmp    L357
  nopw   0x0(%rax,%rax,1)
L9:
  cmp    $0x3a98,%edx
  je     L426
  mov    %edx,%ebx
  jmp    L435
  nopl   0x0(%rax)
L3:
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L409
  mov    0xc(%rsp),%eax
  lea    0x2(%rbx),%edx
  test   $0xfff8,%eax
  je     L394
  or     $0xffff0007,%eax
  cmp    $0xffffffff,%eax
  je     L162
L256:
  cmp    $0x3a97,%edx
  jg     L426
  mov    %edx,%ebx
  jmp    L761
L162:
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  je     L430
  nopw   0x0(%rax,%rax,1)
L409:
  mov    $0xfffffffe,%r13d
L357:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L840
  add    $0x28,%rsp
  mov    %r13d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopl   0x0(%rax,%rax,1)
L394:
  cmp    $0x3a97,%edx
  jg     L426
  mov    %edx,%ebx
  jmp    L655
L430:
  mov    0xc(%rsp),%eax
  lea    0x3(%rbx),%edx
  test   $0xfff8,%eax
  je     L394
  or     $0xffff0007,%eax
  cmp    $0xffffffff,%eax
  jne    L256
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L409
  testl  $0xfff8,0xc(%rsp)
  jne    L752
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L409
  mov    0xc(%rsp),%edx
  lea    0x5(%rbx),%eax
  test   $0xfff8,%edx
  je     L449
  or     $0xffff0007,%edx
  cmp    $0xffffffff,%edx
  je     L743
L739:
  cmp    $0x3a97,%eax
  jg     L426
  mov    %eax,%ebx
  jmp    L761
L752:
  add    $0x4,%ebx
  cmp    $0x3a97,%ebx
  jle    L761
  jmp    L426
  nopl   (%rax)
L449:
  cmp    $0x3a97,%eax
  jg     L426
  mov    %eax,%ebx
  jmp    L620
L743:
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L409
  testl  $0xfff8,0xc(%rsp)
  jne    L284
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L409
  testl  $0xfff8,0xc(%rsp)
  jne    L371
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L409
  mov    0xc(%rsp),%edx
  lea    0x8(%rbx),%eax
  test   $0xfff8,%edx
  je     L744
  or     $0xffff0007,%edx
  add    $0x1,%edx
  jne    L739
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  sub    $0x1,%eax
  jne    L409
  testl  $0xfff8,0xc(%rsp)
  jne    L498
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  sub    $0x1,%eax
  jne    L409
  testl  $0xfff8,0xc(%rsp)
  jne    L559
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  sub    $0x1,%eax
  jne    L409
  mov    0xc(%rsp),%r13d
  and    $0xfff8,%r13d
  jne    L65
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  sub    $0x1,%eax
  jne    L409
  mov    0xc(%rsp),%edx
  lea    0xc(%rbx),%eax
  test   $0xfff8,%edx
  je     L567
  or     $0xffff0007,%edx
  add    $0x1,%edx
  jne    L739
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  sub    $0x1,%eax
  jne    L409
  mov    0xc(%rsp),%eax
  add    $0xd,%ebx
  test   $0xfff8,%eax
  je     L790
  or     $0xffff0007,%eax
  add    $0x1,%eax
  je     L334
  cmp    $0x3a97,%ebx
  jle    L761
  jmp    L426
  nopl   0x0(%rax)
L284:
  add    $0x6,%ebx
  cmp    $0x3a97,%ebx
  jle    L761
  jmp    L426
L840:
  call   <__stack_chk_fail@plt>
L334:
  lea    0x10(%rsp),%rdi
  mov    $0x4,%r8d
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x8,%esi
  call   <fread_bo@plt>
  sub    $0x1,%eax
  je     L357
  jmp    L409
L790:
  cmp    $0x3a97,%ebx
  jg     L426
  mov    %ebx,%edx
  mov    %edx,%ebx
  jmp    L655
L567:
  cmp    $0x3a97,%eax
  jg     L426
  mov    %eax,%ebx
  jmp    L644
L65:
  add    $0xb,%ebx
  cmp    $0x3a97,%ebx
  jle    L761
  jmp    L426
L559:
  add    $0xa,%ebx
  cmp    $0x3a97,%ebx
  jle    L761
  jmp    L426
L498:
  add    $0x9,%ebx
  cmp    $0x3a97,%ebx
  jle    L761
  jmp    L426
L744:
  cmp    $0x3a97,%eax
  jg     L426
  mov    %eax,%ebx
  jmp    L762
L371:
  add    $0x7,%ebx
  cmp    $0x3a97,%ebx
  jle    L761
  jmp    L426
```

assistant: ```c
int cmp_barker(FILE *fp) {
  int word, ncount = 0, wsize = sizeof(int), buf[2], state = 0;
  while (ncount < 15000) {
    if (state == 0) {
      if (1 != fread_bo(&word, wsize, 1, fp, wsize))
        return (-2);
      ncount++;
      if ((word & 0x0000fff8) != 0x00000000) {
        state = 0;
        continue;
      } else {
        state = 1;
        continue;
      }
    }
    if (state == 1) {
      if (1 != fread_bo(&word, wsize, 1, fp, wsize))
        return (-2);
      ncount++;
      if ((word & 0x0000fff8) != 0x00000000) {
        state = 0;
        continue;
      } else {
        state = 2;
        continue;
      }
    }
    if (state == 2) {
      if (1 != fread_bo(&word, wsize, 1, fp, wsize))
        return (-2);
      ncount++;
      if ((word & 0x0000fff8) != 0x00000000) {
        state = 0;
        continue;
      } else {
        state = 3;
        continue;
      }
    }
    if (state == 3) {
      if (1 != fread_bo(&word, wsize, 1, fp, wsize))
        return (-2);
      ncount++;
      if ((word & 0x0000fff8) != 0x00000000) {
        state = 0;
        continue;
      } else {
        state = 4;
        continue;
      }
    }
    if (state == 4) {
      if (1 != fread_bo(&word, wsize, 1, fp, wsize))
        return (-2);
      ncount++;
      if ((word & 0x0000fff8) != 0x00000000) {
        state = 0;
        continue;
      } else {
        state = 5;
        continue;
      }
    }
    if (state == 5) {
      if (1 != fread_bo(&word, wsize, 1, fp, wsize))
        return (-2);
      ncount++;
      if ((word & 0x0000fff8) == 0x00000000) {
        state = 5;
        continue;
      } else if ((word | 0xffff0007) != 0xffffffff) {
        state = 0;
        continue;
      }
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) == 0x00000000) {
      state = 1;
      continue;
    } else if ((word | 0xffff0007) != 0xffffffff) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) == 0x00000000) {
      state = 1;
      continue;
    } else if ((word | 0xffff0007) != 0xffffffff) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) != 0x00000000) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) == 0x00000000) {
      state = 2;
      continue;
    } else if ((word | 0xffff0007) != 0xffffffff) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) != 0x00000000) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) != 0x00000000) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) == 0x00000000) {
      state = 3;
      continue;
    } else if ((word | 0xffff0007) != 0xffffffff) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) != 0x00000000) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) != 0x00000000) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) != 0x00000000) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) == 0x00000000) {
      state = 4;
      continue;
    } else if ((word | 0xffff0007) != 0xffffffff) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) == 0x00000000) {
      state = 1;
      continue;
    } else if ((word | 0xffff0007) != 0xffffffff) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(buf, 2 * wsize, 1, fp, wsize))
      return (-2);
    return (0);
  }
  return (-1);
}
```