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

```asm
<perform_check>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x8(%rbp)
  mov    %esi,-0xc(%rbp)
  mov    %edx,-0x10(%rbp)
  mov    %ecx,-0x14(%rbp)
  jmp    L0
L134:
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2e,%al
  je     L70
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x23,%al
  je     L70
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L177
L70:
  mov    -0xc(%rbp),%eax
  sub    -0x14(%rbp),%eax
  mov    %eax,%edx
  movslq %edx,%rax
  imul   $0x66666667,%rax,%rax
  shr    $0x20,%rax
  sar    %eax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  mov    %eax,%ecx
  shl    $0x2,%ecx
  add    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  cmp    $0x4,%eax
  jne    L62
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L177
L62:
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L146
  mov    -0xc(%rbp),%eax
  sub    -0x14(%rbp),%eax
  mov    %eax,%edx
  movslq %edx,%rax
  imul   $0x66666667,%rax,%rax
  shr    $0x20,%rax
  sar    %eax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  mov    %eax,%ecx
  shl    $0x2,%ecx
  add    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  cmp    $0x4,%eax
  je     L146
L177:
  mov    $0x0,%eax
  jmp    L68
L146:
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L0
  addl   $0x1,-0x10(%rbp)
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L131
  addl   $0x1,-0x14(%rbp)
  cmpl   $0x19,-0x14(%rbp)
  jg     L102
  mov    -0x14(%rbp),%eax
  jmp    L68
L102:
  mov    $0x0,%eax
  jmp    L68
L131:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L10
  addl   $0x1,-0x14(%rbp)
  addl   $0x1,-0xc(%rbp)
  movl   $0x1,-0x10(%rbp)
  jmp    L0
L10:
  cmpl   $0x4,-0x10(%rbp)
  jle    L0
  mov    $0x0,%eax
  jmp    L68
L0:
  addl   $0x1,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L134
  mov    $0x0,%eax
L68:
  pop    %rbp
  ret
```

assistant: ```c
int perform_check(const char *str, int i, int j, int t) {
  while (str[++i])
    if ((str[i] != '.' && str[i] != '#' && str[i] != '\n') || ((i - t) % 5 == 4 && str[i] != '\n') || (str[i] == '\n' && (i - t) % 5 != 4))
      return (0);
    else if (str[i] == '\n') {
      j++;
      if (str[i + 1] == '\0')
        return (++t < 26 ? t : 0);
      else if (str[i + 1] == '\n') {
        t++;
        i++;
        j = 1;
      } else if (j > 4)
        return (0);
    }
  return (0);
}
```