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

```asm
<chkext>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  lea    D53(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L17
  mov    $0x0,%eax
  jmp    L93
L17:
  mov    -0x18(%rbp),%rax
  lea    D73(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L44
  mov    $0x0,%eax
  jmp    L93
L44:
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <extonly@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  lea    D7(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stricmp@plt>
  test   %rax,%rax
  jne    L8
  mov    $0x0,%eax
  jmp    L93
L8:
  mov    -0x8(%rbp),%rax
  lea    D0(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stricmp@plt>
  test   %rax,%rax
  jne    L171
  mov    $0x0,%eax
  jmp    L93
L171:
  mov    -0x8(%rbp),%rax
  lea    D79(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stricmp@plt>
  test   %rax,%rax
  jne    L130
  mov    $0x0,%eax
  jmp    L93
L130:
  mov    -0x8(%rbp),%rax
  lea    D98(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stricmp@plt>
  test   %rax,%rax
  jne    L138
  mov    $0x0,%eax
  jmp    L93
L138:
  mov    -0x8(%rbp),%rax
  lea    D9(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stricmp@plt>
  test   %rax,%rax
  jne    L57
  mov    $0x0,%eax
  jmp    L93
L57:
  mov    -0x8(%rbp),%rax
  lea    D32(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stricmp@plt>
  test   %rax,%rax
  jne    L34
  mov    $0x0,%eax
  jmp    L93
L34:
  mov    -0x8(%rbp),%rax
  lea    D93(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stricmp@plt>
  test   %rax,%rax
  jne    L116
  mov    $0x0,%eax
  jmp    L93
L116:
  mov    -0x8(%rbp),%rax
  lea    D23(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stricmp@plt>
  test   %rax,%rax
  jne    L40
  mov    $0x0,%eax
  jmp    L93
L40:
  mov    $0x1,%eax
L93:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: label: D53
data_type: string
name: unpack_data
arguments: label: D73
data_type: string
name: unpack_data
arguments: label: D7
data_type: string
name: unpack_data
arguments: label: D0
data_type: string
name: unpack_data
arguments: label: D79
data_type: string
name: unpack_data
arguments: label: D98
data_type: string
name: unpack_data
arguments: label: D9
data_type: string
name: unpack_data
arguments: label: D32
data_type: string
name: unpack_data
arguments: label: D93
data_type: string
name: unpack_data
arguments: label: D23
data_type: string

tool: D53: .

tool: D73: ..

tool: D7: com

tool: D0: dll

tool: D79: obj

tool: D98: exe

tool: D9: rel

tool: D32: lzh

tool: D93: zip

tool: D23: arc

assistant: ```c
int chkext(char *nam) {
  char *p;
  if (strcmp(nam, ".") == 0)
    return 0;
  if (strcmp(nam, "..") == 0)
    return 0;
  p = extonly(nam);
  if (stricmp(p, "com") == 0)
    return 0;
  if (stricmp(p, "dll") == 0)
    return 0;
  if (stricmp(p, "obj") == 0)
    return 0;
  if (stricmp(p, "exe") == 0)
    return 0;
  if (stricmp(p, "rel") == 0)
    return 0;
  if (stricmp(p, "lzh") == 0)
    return 0;
  if (stricmp(p, "zip") == 0)
    return 0;
  if (stricmp(p, "arc") == 0)
    return 0;
  else
    return (1);
}
```