user: What is the c source code of the assembly code below:

```asm
<wpa_supplicant_cipher_txt>:
  endbr64
  push   %r15
  xor    %eax,%eax
  push   %r14
  push   %r13
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  mov    %rsi,%rbp
  sub    %edi,%esi
  push   %rbx
  mov    %edx,%ebx
  lea    D70(%rip),%rdx
  mov    %ebx,%r13d
  mov    %ebx,%r14d
  mov    %ebx,%r15d
  and    $0x10,%r13d
  and    $0x8,%r14d
  and    $0x4,%r15d
  sub    $0x18,%rsp
  call   <snprintf@plt>
  mov    %ebx,%r8d
  cltq
  and    $0x2,%r8d
  add    %rax,%r12
  and    $0x1,%ebx
  jne    L51
  test   %r8d,%r8d
  je     L21
  lea    D113(%rip),%rcx
L139:
  mov    %ebp,%esi
  mov    %r12,%rdi
  lea    D43(%rip),%rdx
  xor    %eax,%eax
  sub    %r12d,%esi
  call   <snprintf@plt>
  cltq
  add    %rax,%r12
  test   %r15d,%r15d
  jne    L162
  test   %r14d,%r14d
  jne    L174
  test   %r13d,%r13d
  je     L179
L85:
  lea    D5(%rip),%rcx
L154:
  mov    %ebp,%esi
  mov    %r12,%rdi
  lea    D127(%rip),%rdx
  xor    %eax,%eax
  sub    %r12d,%esi
  call   <snprintf@plt>
  cltq
  add    %rax,%r12
  jmp    L179
  cs nopw 0x0(%rax,%rax,1)
L21:
  lea    D113(%rip),%rcx
  test   %r15d,%r15d
  je     L169
L19:
  mov    %ebp,%esi
  mov    %r12,%rdi
  lea    D78(%rip),%rdx
  xor    %eax,%eax
  sub    %r12d,%esi
  call   <snprintf@plt>
  cltq
  add    %rax,%r12
  test   %r14d,%r14d
  jne    L174
L124:
  test   %r13d,%r13d
  jne    L85
L179:
  add    $0x18,%rsp
  mov    %r12,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L51:
  mov    %ebp,%esi
  lea    D113(%rip),%rcx
  mov    %r12,%rdi
  xor    %eax,%eax
  sub    %r12d,%esi
  lea    D0(%rip),%rdx
  mov    %r8d,0xc(%rsp)
  call   <snprintf@plt>
  mov    0xc(%rsp),%r8d
  lea    D5(%rip),%rcx
  cltq
  add    %rax,%r12
  test   %r8d,%r8d
  jne    L139
  test   %r15d,%r15d
  jne    L162
  test   %r14d,%r14d
  je     L124
L174:
  lea    D5(%rip),%r8
L59:
  mov    %ebp,%esi
  mov    %r12,%rdi
  mov    %r8,%rcx
  xor    %eax,%eax
  sub    %r12d,%esi
  lea    D126(%rip),%rdx
  call   <snprintf@plt>
  cltq
  add    %rax,%r12
  test   %r13d,%r13d
  jne    L85
  jmp    L179
  nopl   0x0(%rax)
L162:
  lea    D5(%rip),%rcx
  jmp    L19
  nopl   0x0(%rax)
L169:
  mov    %rcx,%r8
  test   %r14d,%r14d
  jne    L59
  test   %r13d,%r13d
  jne    L154
  jmp    L179
```

tool_calls: name: parse_data
arguments: tag: D70
datatype: string
name: parse_data
arguments: tag: D113
datatype: string
name: parse_data
arguments: tag: D43
datatype: string
name: parse_data
arguments: tag: D5
datatype: string
name: parse_data
arguments: tag: D127
datatype: string
name: parse_data
arguments: tag: D78
datatype: string
name: parse_data
arguments: tag: D0
datatype: string
name: parse_data
arguments: tag: D126
datatype: string

tool: D70: -

tool: 

tool: D43: %sWEP40

tool: D5: +

tool: D127: %sCCMP

tool: D78: %sWEP104

tool: D0: %sNONE

tool: D126: %sTKIP

assistant: ```c
char *wpa_supplicant_cipher_txt(char *pos, char *end, int cipher) {
  int first = 1;
  pos += snprintf(pos, end - pos, "-");
  if (cipher & (1 << (0))) {
    pos += snprintf(pos, end - pos, "%sNONE", first ? "" : "+");
    first = 0;
  }
  if (cipher & (1 << (1))) {
    pos += snprintf(pos, end - pos, "%sWEP40", first ? "" : "+");
    first = 0;
  }
  if (cipher & (1 << (2))) {
    pos += snprintf(pos, end - pos, "%sWEP104", first ? "" : "+");
    first = 0;
  }
  if (cipher & (1 << (3))) {
    pos += snprintf(pos, end - pos, "%sTKIP", first ? "" : "+");
    first = 0;
  }
  if (cipher & (1 << (4))) {
    pos += snprintf(pos, end - pos, "%sCCMP", first ? "" : "+");
    first = 0;
  }
  return pos;
}
```