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

```asm
<wear_bit_name>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %edi,-0x4(%rbp)
  movb   $0x0,D67(%rip)
  mov    -0x4(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L90
  lea    D331(%rip),%rax
  mov    %rax,%rsi
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <strcat@plt>
L90:
  mov    -0x4(%rbp),%eax
  and    $0x2,%eax
  test   %eax,%eax
  je     L137
  lea    D147(%rip),%rax
  mov    %rax,%rsi
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <strcat@plt>
L137:
  mov    -0x4(%rbp),%eax
  and    $0x4,%eax
  test   %eax,%eax
  je     L9
  lea    D320(%rip),%rax
  mov    %rax,%rsi
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <strcat@plt>
L9:
  mov    -0x4(%rbp),%eax
  and    $0x8,%eax
  test   %eax,%eax
  je     L81
  lea    D57(%rip),%rax
  mov    %rax,%rsi
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <strcat@plt>
L81:
  mov    -0x4(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  je     L40
  lea    D366(%rip),%rax
  mov    %rax,%rsi
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <strcat@plt>
L40:
  mov    -0x4(%rbp),%eax
  and    $0x20,%eax
  test   %eax,%eax
  je     L60
  lea    D271(%rip),%rax
  mov    %rax,%rsi
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <strcat@plt>
L60:
  mov    -0x4(%rbp),%eax
  and    $0x40,%eax
  test   %eax,%eax
  je     L142
  lea    D30(%rip),%rax
  mov    %rax,%rsi
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <strcat@plt>
L142:
  mov    -0x4(%rbp),%eax
  and    $0x80,%eax
  test   %eax,%eax
  je     L34
  lea    D184(%rip),%rax
  mov    %rax,%rsi
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <strcat@plt>
L34:
  mov    -0x4(%rbp),%eax
  and    $0x100,%eax
  test   %eax,%eax
  je     L92
  lea    D333(%rip),%rax
  mov    %rax,%rsi
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <strcat@plt>
L92:
  mov    -0x4(%rbp),%eax
  and    $0x200,%eax
  test   %eax,%eax
  je     L119
  lea    D79(%rip),%rax
  mov    %rax,%rsi
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <strcat@plt>
L119:
  mov    -0x4(%rbp),%eax
  and    $0x400,%eax
  test   %eax,%eax
  je     L18
  lea    D19(%rip),%rax
  mov    %rax,%rsi
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <strcat@plt>
L18:
  mov    -0x4(%rbp),%eax
  and    $0x800,%eax
  test   %eax,%eax
  je     L149
  lea    D36(%rip),%rax
  mov    %rax,%rsi
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <strcat@plt>
L149:
  mov    -0x4(%rbp),%eax
  and    $0x1000,%eax
  test   %eax,%eax
  je     L74
  lea    D312(%rip),%rax
  mov    %rax,%rsi
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <strcat@plt>
L74:
  mov    -0x4(%rbp),%eax
  and    $0x2000,%eax
  test   %eax,%eax
  je     L86
  lea    D391(%rip),%rax
  mov    %rax,%rsi
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <strcat@plt>
L86:
  mov    -0x4(%rbp),%eax
  and    $0x4000,%eax
  test   %eax,%eax
  je     L71
  lea    D37(%rip),%rax
  mov    %rax,%rsi
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <strcat@plt>
L71:
  mov    -0x4(%rbp),%eax
  and    $0x10000,%eax
  test   %eax,%eax
  je     L47
  lea    D351(%rip),%rax
  mov    %rax,%rsi
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <strcat@plt>
L47:
  mov    -0x4(%rbp),%eax
  and    $0x20000,%eax
  test   %eax,%eax
  je     L70
  lea    D49(%rip),%rax
  mov    %rax,%rsi
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <strcat@plt>
L70:
  mov    -0x4(%rbp),%eax
  and    $0x8000,%eax
  test   %eax,%eax
  je     L43
  lea    D110(%rip),%rax
  mov    %rax,%rsi
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <strcat@plt>
L43:
  movzbl D67(%rip),%eax
  test   %al,%al
  je     L178
  lea    D206(%rip),%rax
  jmp    L160
L178:
  lea    D152(%rip),%rax
L160:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_label: D331
datatype: string
name: retrieve_data
arguments: data_label: D147
datatype: string
name: retrieve_data
arguments: data_label: D320
datatype: string
name: retrieve_data
arguments: data_label: D57
datatype: string
name: retrieve_data
arguments: data_label: D366
datatype: string
name: retrieve_data
arguments: data_label: D271
datatype: string
name: retrieve_data
arguments: data_label: D30
datatype: string
name: retrieve_data
arguments: data_label: D184
datatype: string
name: retrieve_data
arguments: data_label: D333
datatype: string
name: retrieve_data
arguments: data_label: D79
datatype: string
name: retrieve_data
arguments: data_label: D19
datatype: string
name: retrieve_data
arguments: data_label: D36
datatype: string
name: retrieve_data
arguments: data_label: D312
datatype: string
name: retrieve_data
arguments: data_label: D391
datatype: string
name: retrieve_data
arguments: data_label: D37
datatype: string
name: retrieve_data
arguments: data_label: D351
datatype: string
name: retrieve_data
arguments: data_label: D49
datatype: string
name: retrieve_data
arguments: data_label: D110
datatype: string
name: retrieve_data
arguments: data_label: D152
datatype: string

tool: D331:  take

tool: D147:  finger

tool: D320:  neck

tool: D57:  torso

tool: D366:  head

tool: D271:  legs

tool: D30:  feet

tool: D184:  hands

tool: D333:  arms

tool: D79:  shield

tool: D19:  body

tool: D36:  waist

tool: D312:  wrist

tool: D391:  wield

tool: D37:  hold

tool: D351:  float

tool: D49:  face

tool: D110:  no_sac

tool: D152: none

assistant: ```c
char *wear_bit_name(int wear_flags) {
  static char buf[512];
  buf[0] = '\0';
  if (wear_flags & (1))
    strcat(buf, " take");
  if (wear_flags & (2))
    strcat(buf, " finger");
  if (wear_flags & (4))
    strcat(buf, " neck");
  if (wear_flags & (8))
    strcat(buf, " torso");
  if (wear_flags & (16))
    strcat(buf, " head");
  if (wear_flags & (32))
    strcat(buf, " legs");
  if (wear_flags & (64))
    strcat(buf, " feet");
  if (wear_flags & (128))
    strcat(buf, " hands");
  if (wear_flags & (256))
    strcat(buf, " arms");
  if (wear_flags & (512))
    strcat(buf, " shield");
  if (wear_flags & (1024))
    strcat(buf, " body");
  if (wear_flags & (2048))
    strcat(buf, " waist");
  if (wear_flags & (4096))
    strcat(buf, " wrist");
  if (wear_flags & (8192))
    strcat(buf, " wield");
  if (wear_flags & (16384))
    strcat(buf, " hold");
  if (wear_flags & (65536))
    strcat(buf, " float");
  if (wear_flags & (131072))
    strcat(buf, " face");
  if (wear_flags & (32768))
    strcat(buf, " no_sac");
  return (buf[0] != '\0') ? buf + 1 : "none";
}
```