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

```asm
<isstrstr>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x170,%rsp
  mov    %rdi,-0x1158(%rbp)
  mov    %rsi,-0x1160(%rbp)
  mov    %edx,-0x1164(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x1140(%rbp)
  mov    -0x1160(%rbp),%rax
  mov    %rax,-0x1138(%rbp)
  movb   $0x2c,-0x1141(%rbp)
  movq   $0x0,-0x1128(%rbp)
  lea    -0x1010(%rbp),%rax
  mov    %rax,-0x1130(%rbp)
  cmpq   $0x0,-0x1158(%rbp)
  je     L44
  cmpq   $0x0,-0x1160(%rbp)
  je     L44
  mov    -0x1158(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L118
  mov    -0x1160(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L118
  mov    -0x1158(%rbp),%rax
  mov    %rax,-0x1120(%rbp)
  movb   $0x0,-0x1010(%rbp)
  cmpq   $0x0,-0x1120(%rbp)
  je     L11
  mov    -0x1120(%rbp),%rcx
  lea    -0x1010(%rbp),%rax
  mov    $0xfe0,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  movb   $0x0,-0x30(%rbp)
L11:
  cmpl   $0x0,-0x1164(%rbp)
  jne    L65
  lea    -0x1010(%rbp),%rax
  mov    %rax,-0x1130(%rbp)
  jmp    L4
L105:
  mov    -0x1130(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isupper@plt>
  test   %rax,%rax
  je     L97
  mov    -0x1130(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <tolower@plt>
  mov    -0x1130(%rbp),%rdx
  mov    %al,(%rdx)
L97:
  addq   $0x1,-0x1130(%rbp)
L4:
  mov    -0x1130(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L105
  jmp    L65
L33:
  movsbl -0x1141(%rbp),%edx
  mov    -0x1138(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <strchr@plt>
  mov    %rax,-0x1128(%rbp)
  cmpq   $0x0,-0x1128(%rbp)
  jne    L46
  mov    -0x1138(%rbp),%rax
  mov    %rax,-0x1118(%rbp)
  movb   $0x0,-0x1110(%rbp)
  cmpq   $0x0,-0x1118(%rbp)
  je     L145
  mov    -0x1118(%rbp),%rcx
  lea    -0x1110(%rbp),%rax
  mov    $0xff,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  movb   $0x0,-0x1011(%rbp)
L145:
  movq   $0x0,-0x1138(%rbp)
  jmp    L1
L46:
  mov    -0x1128(%rbp),%rax
  sub    -0x1138(%rbp),%rax
  sub    $0x1,%eax
  mov    %eax,-0x113c(%rbp)
  mov    -0x113c(%rbp),%edx
  mov    -0x1138(%rbp),%rcx
  lea    -0x1110(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  mov    -0x113c(%rbp),%eax
  cltq
  movb   $0x0,-0x1110(%rbp,%rax,1)
  mov    -0x1128(%rbp),%rax
  add    $0x1,%rax
  mov    %rax,-0x1138(%rbp)
L1:
  cmpl   $0x0,-0x1164(%rbp)
  jne    L73
  lea    -0x1110(%rbp),%rax
  mov    %rax,-0x1130(%rbp)
  jmp    L222
L135:
  mov    -0x1130(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isupper@plt>
  test   %rax,%rax
  je     L18
  mov    -0x1130(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <tolower@plt>
  mov    -0x1130(%rbp),%rdx
  mov    %al,(%rdx)
L18:
  addq   $0x1,-0x1130(%rbp)
L222:
  mov    -0x1130(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L135
L73:
  lea    -0x1110(%rbp),%rdx
  lea    -0x1010(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strstr@plt>
  test   %rax,%rax
  je     L65
  movl   $0x1,-0x1140(%rbp)
  jmp    L54
L65:
  cmpq   $0x0,-0x1138(%rbp)
  jne    L33
  jmp    L54
L44:
  nop
  jmp    L54
L118:
  nop
L54:
  mov    -0x1140(%rbp),%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L63
  call   <__stack_chk_fail@plt>
L63:
  leave
  ret
```

assistant: ```c
int isstrstr(char *string, char *snippets, int iscase) {
  int status = 0;
  char snip[256], *snipptr = snippets, delim = ',', *delimptr = NULL;
  char stringcp[4096], *cp = stringcp;
  if (string == NULL || snippets == NULL)
    goto end_of_job;
  if (*string == '\000' || *snippets == '\000')
    goto end_of_job;
  if ((stringcp) != NULL && (4064) >= 0) {
    char *thissource = (string);
    (stringcp)[0] = '\000';
    if ((4064) > 0 && thissource != NULL) {
      strncpy((stringcp), thissource, (4064));
      (stringcp)[(4064)] = '\000';
    }
  };
  if (!iscase)
    for (cp = stringcp; *cp != '\000'; cp++)
      if (isupper(*cp))
        *cp = tolower(*cp);
  while (snipptr != NULL) {
    if ((delimptr = strchr(snipptr, delim)) == NULL) {
      if ((snip) != NULL && (255) >= 0) {
        char *thissource = (snipptr);
        (snip)[0] = '\000';
        if ((255) > 0 && thissource != NULL) {
          strncpy((snip), thissource, (255));
          (snip)[(255)] = '\000';
        }
      };
      snipptr = NULL;
    } else {
      int sniplen = (int)(delimptr - snipptr) - 1;
      memcpy(snip, snipptr, sniplen);
      snip[sniplen] = '\000';
      snipptr = delimptr + 1;
    }
    if (!iscase)
      for (cp = snip; *cp != '\000'; cp++)
        if (isupper(*cp))
          *cp = tolower(*cp);
    if (strstr(stringcp, snip) != NULL) {
      status = 1;
      break;
    }
  }
end_of_job:
  return (status);
}
```