user: Demonstrate the C code that generates the assembly output below:

```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)
L318:
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L314
  add    $0x1,%ebx
  testl  $0xfff8,0xc(%rsp)
  jne    L393
  cmp    $0x3a98,%ebx
  je     L380
L361:
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L314
  add    $0x1,%ebx
  testl  $0xfff8,0xc(%rsp)
  jne    L393
  cmp    $0x3a98,%ebx
  je     L380
L239:
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L314
  add    $0x1,%ebx
  testl  $0xfff8,0xc(%rsp)
  jne    L393
  cmp    $0x3a98,%ebx
  je     L380
L184:
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L314
  add    $0x1,%ebx
  testl  $0xfff8,0xc(%rsp)
  jne    L393
  cmp    $0x3a98,%ebx
  je     L380
L427:
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L314
  add    $0x1,%ebx
  testl  $0xfff8,0xc(%rsp)
  jne    L393
  cmp    $0x3a98,%ebx
  je     L380
L777:
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L314
  mov    0xc(%rsp),%eax
  lea    0x1(%rbx),%edx
  test   $0xfff8,%eax
  je     L64
  or     $0xffff0007,%eax
  cmp    $0xffffffff,%eax
  je     L663
  cmp    $0x3a98,%edx
  je     L380
  mov    %edx,%ebx
  jmp    L318
  nopl   0x0(%rax,%rax,1)
L393:
  cmp    $0x3a98,%ebx
  jne    L318
L380:
  mov    $0xffffffff,%r13d
  jmp    L43
  nopw   0x0(%rax,%rax,1)
L64:
  cmp    $0x3a98,%edx
  je     L380
  mov    %edx,%ebx
  jmp    L777
  nopl   0x0(%rax)
L663:
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L314
  mov    0xc(%rsp),%eax
  lea    0x2(%rbx),%edx
  test   $0xfff8,%eax
  je     L10
  or     $0xffff0007,%eax
  cmp    $0xffffffff,%eax
  je     L95
L466:
  cmp    $0x3a97,%edx
  jg     L380
  mov    %edx,%ebx
  jmp    L318
L95:
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  je     L690
  nopw   0x0(%rax,%rax,1)
L314:
  mov    $0xfffffffe,%r13d
L43:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L704
  add    $0x28,%rsp
  mov    %r13d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopl   0x0(%rax,%rax,1)
L10:
  cmp    $0x3a97,%edx
  jg     L380
  mov    %edx,%ebx
  jmp    L361
L690:
  mov    0xc(%rsp),%eax
  lea    0x3(%rbx),%edx
  test   $0xfff8,%eax
  je     L10
  or     $0xffff0007,%eax
  cmp    $0xffffffff,%eax
  jne    L466
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L314
  testl  $0xfff8,0xc(%rsp)
  jne    L366
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L314
  mov    0xc(%rsp),%edx
  lea    0x5(%rbx),%eax
  test   $0xfff8,%edx
  je     L60
  or     $0xffff0007,%edx
  cmp    $0xffffffff,%edx
  je     L316
L138:
  cmp    $0x3a97,%eax
  jg     L380
  mov    %eax,%ebx
  jmp    L318
L366:
  add    $0x4,%ebx
  cmp    $0x3a97,%ebx
  jle    L318
  jmp    L380
  nopl   (%rax)
L60:
  cmp    $0x3a97,%eax
  jg     L380
  mov    %eax,%ebx
  jmp    L239
L316:
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L314
  testl  $0xfff8,0xc(%rsp)
  jne    L417
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L314
  testl  $0xfff8,0xc(%rsp)
  jne    L843
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L314
  mov    0xc(%rsp),%edx
  lea    0x8(%rbx),%eax
  test   $0xfff8,%edx
  je     L62
  or     $0xffff0007,%edx
  add    $0x1,%edx
  jne    L138
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  sub    $0x1,%eax
  jne    L314
  testl  $0xfff8,0xc(%rsp)
  jne    L614
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  sub    $0x1,%eax
  jne    L314
  testl  $0xfff8,0xc(%rsp)
  jne    L312
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  sub    $0x1,%eax
  jne    L314
  mov    0xc(%rsp),%r13d
  and    $0xfff8,%r13d
  jne    L96
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  sub    $0x1,%eax
  jne    L314
  mov    0xc(%rsp),%edx
  lea    0xc(%rbx),%eax
  test   $0xfff8,%edx
  je     L488
  or     $0xffff0007,%edx
  add    $0x1,%edx
  jne    L138
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  mov    %rbp,%rdi
  mov    $0x4,%r8d
  call   <fread_bo@plt>
  sub    $0x1,%eax
  jne    L314
  mov    0xc(%rsp),%eax
  add    $0xd,%ebx
  test   $0xfff8,%eax
  je     L456
  or     $0xffff0007,%eax
  add    $0x1,%eax
  je     L648
  cmp    $0x3a97,%ebx
  jle    L318
  jmp    L380
  nopl   0x0(%rax)
L417:
  add    $0x6,%ebx
  cmp    $0x3a97,%ebx
  jle    L318
  jmp    L380
L704:
  call   <__stack_chk_fail@plt>
L648:
  lea    0x10(%rsp),%rdi
  mov    $0x4,%r8d
  mov    %r12,%rcx
  mov    $0x1,%edx
  mov    $0x8,%esi
  call   <fread_bo@plt>
  sub    $0x1,%eax
  je     L43
  jmp    L314
L456:
  cmp    $0x3a97,%ebx
  jg     L380
  mov    %ebx,%edx
  mov    %edx,%ebx
  jmp    L361
L488:
  cmp    $0x3a97,%eax
  jg     L380
  mov    %eax,%ebx
  jmp    L427
L96:
  add    $0xb,%ebx
  cmp    $0x3a97,%ebx
  jle    L318
  jmp    L380
L312:
  add    $0xa,%ebx
  cmp    $0x3a97,%ebx
  jle    L318
  jmp    L380
L614:
  add    $0x9,%ebx
  cmp    $0x3a97,%ebx
  jle    L318
  jmp    L380
L62:
  cmp    $0x3a97,%eax
  jg     L380
  mov    %eax,%ebx
  jmp    L184
L843:
  add    $0x7,%ebx
  cmp    $0x3a97,%ebx
  jle    L318
  jmp    L380
```

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);
}
```