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

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xb8,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0xa8(%rsp)
  xor    %eax,%eax
  movb   $0x38,0x20(%rsp)
  movb   $0x36,0x21(%rsp)
  movb   $0x34,0x25(%rsp)
  movb   $0x31,0x26(%rsp)
  mov    $0x0,%r15d
  movl   $0x0,0xc(%rsp)
  mov    $0x30,%r13d
  lea    0x1e(%rsp),%rax
  mov    %rax,(%rsp)
  jmp    L4
L50:
  addl   $0x1,0xc(%rsp)
L100:
  add    $0x1,%ebx
  cmp    $0x3a,%ebx
  je     L104
L99:
  mov    %bl,0x23(%rsp)
  cmp    %ebp,%r13d
  je     L100
  add    $0x1,%r15d
  mov    %r13b,0x22(%rsp)
  mov    %bpl,0x24(%rsp)
  lea    0x20(%rsp),%r12
  mov    (%rsp),%rdx
  mov    $0x7,%esi
  mov    %r12,%rdi
  call   <decchk@plt>
  movzbl 0x1e(%rsp),%eax
  mov    %al,0x27(%rsp)
  lea    0x1f(%rsp),%r14
  mov    %r14,%rdx
  mov    $0x8,%esi
  mov    %r12,%rdi
  call   <decchk@plt>
  mov    %eax,0x8(%rsp)
  mov    %bpl,0x22(%rsp)
  mov    %r13b,0x24(%rsp)
  mov    %r14,%rdx
  mov    $0x8,%esi
  mov    %r12,%rdi
  call   <decchk@plt>
  cmpl   $0x0,0x8(%rsp)
  je     L50
  test   %eax,%eax
  je     L100
  jmp    L50
L104:
  add    $0x1,%ebp
  cmp    $0x3a,%ebp
  je     L96
L68:
  mov    $0x30,%ebx
  jmp    L99
L96:
  add    $0x1,%r13d
  cmp    $0x3a,%r13d
  je     L114
L4:
  mov    $0x30,%ebp
  jmp    L68
L114:
  mov    %r15d,%ecx
  lea    D11(%rip),%rbx
  mov    %rbx,%rdx
  lea    D26(%rip),%rsi
  lea    D19(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    0xc(%rsp),%r14d
  mov    %r14d,%ecx
  mov    %rbx,%rdx
  lea    D80(%rip),%rsi
  lea    D77(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %r15d,%eax
  sub    %r14d,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  pxor   %xmm1,%xmm1
  cvtsi2ss %r15d,%xmm1
  divss  %xmm1,%xmm0
  cvtss2sd %xmm0,%xmm0
  mov    %rbx,%rdx
  lea    D16(%rip),%rsi
  lea    D68(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    D93(%rip),%r14
  lea    0x20(%rsp),%rbp
  lea    0x1e(%rsp),%r13
  lea    D66(%rip),%r12
L103:
  mov    %r14,%rdi
  call   <puts@plt>
  mov    %rbp,%rdi
  call   <gets@plt>
  test   %rax,%rax
  je     L61
  lea    0x20(%rsp),%rax
  mov    $0x0,%ebx
L117:
  cmpb   $0x78,(%rax)
  je     L25
  add    $0x1,%ebx
  add    $0x1,%rax
  cmp    $0x80,%ebx
  jne    L117
L98:
  mov    %r13,%rdx
  mov    %ebx,%esi
  mov    %rbp,%rdi
  call   <decchk@plt>
  movslq %ebx,%rax
  movzbl 0x1e(%rsp),%edx
  mov    %dl,0x20(%rsp,%rax,1)
  add    $0x1,%ebx
  lea    0x1f(%rsp),%rdx
  mov    %ebx,%esi
  mov    %rbp,%rdi
  call   <decchk@plt>
  movslq %ebx,%rbx
  movb   $0x0,0x20(%rsp,%rbx,1)
  cmp    $0x1,%eax
  sbb    %edx,%edx
  and    $0xfffffff2,%edx
  add    $0x54,%edx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L103
L25:
  test   %ebx,%ebx
  jne    L98
L61:
  lea    D9(%rip),%rdi
  call   <puts@plt>
  mov    0xa8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L159
  mov    $0x0,%eax
  add    $0xb8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L159:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: label: D11
datatype: string
name: unpack_data
arguments: label: D26
datatype: string
name: unpack_data
arguments: label: D19
datatype: string
name: unpack_data
arguments: label: D80
datatype: string
name: unpack_data
arguments: label: D77
datatype: string
name: unpack_data
arguments: label: D16
datatype: string
name: unpack_data
arguments: label: D68
datatype: string
name: unpack_data
arguments: label: D93
datatype: string
name: unpack_data
arguments: label: D66
datatype: string
name: unpack_data
arguments: label: D9
datatype: string

tool: D11:  

tool: D26: Total tries:

tool: D19: %s %14s %3d


tool: D80: Bad tries:

tool: D77: %s %16s %3d


tool: D16: Fraction good:

tool: D68: %s %11s %4.2f


tool: D93: enter string terminated by x:

tool: D66: %s checks as %c


tool: D9: Normal completion

assistant: ```c
int main(void) {
  int j, k, l, n, nbad = 0, ntot = 0;
  int iok, jok;
  char lin[128 + 2], ch, chh;
  lin[0] = '8';
  lin[1] = '6';
  lin[5] = '4';
  lin[6] = '1';
  for (j = 48; j <= 57; j++) {
    for (k = 48; k <= 57; k++) {
      for (l = 48; l <= 57; l++) {
        lin[3] = l;
        if (j != k) {
          ntot++;
          lin[2] = j;
          lin[4] = k;
          iok = decchk(lin, 7, &ch);
          lin[7] = ch;
          iok = decchk(lin, 8, &chh);
          lin[2] = k;
          lin[4] = j;
          jok = decchk(lin, 8, &chh);
          if (!iok || jok)
            nbad++;
        }
      }
    }
  }
  printf("%s %14s %3d\n", "Total tries:", " ", ntot);
  printf("%s %16s %3d\n", "Bad tries:", " ", nbad);
  printf("%s %11s %4.2f\n", "Fraction good:", " ", ((float)(ntot - nbad)) / ntot);
  for (;;) {
    printf("enter string terminated by x:\n");
    if (gets(lin) == NULL)
      break;
    for (j = 0; j < 128; j++)
      if (lin[j] == 'x')
        break;
    n = j;
    if (!n)
      break;
    iok = decchk(lin, n, &ch);
    lin[n] = ch;
    jok = decchk(lin, n + 1, &chh);
    lin[n + 1] = 0;
    printf("%s checks as %c\n", lin, jok ? 'T' : 'F');
  }
  printf("Normal completion\n");
  return 0;
}
```