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

```asm
<mapExtendedMPAARating>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  mov    %edi,%ebx
  mov    %rsi,%r12
  mov    $0x28,%edi
  call   <malloc@plt>
  mov    %rax,%rbp
  lea    D52(%rip),%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  test   $0x400000,%ebx
  jne    L180
L127:
  test   $0x800000,%ebx
  jne    L24
L161:
  test   $0x1000000,%ebx
  jne    L105
L15:
  test   $0x2000000,%ebx
  jne    L49
L34:
  test   $0x4000000,%ebx
  jne    L172
L1:
  test   $0x8000000,%ebx
  jne    L106
L46:
  test   $0x10000000,%ebx
  jne    L149
L5:
  test   $0x20000000,%ebx
  jne    L99
L86:
  test   $0x40000000,%ebx
  jne    L138
L94:
  test   %ebx,%ebx
  js     L48
L192:
  mov    %rbp,(%r12)
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L180:
  lea    D42(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  jmp    L127
L24:
  lea    D77(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  jmp    L161
L105:
  lea    D5(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  jmp    L15
L49:
  lea    D86(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  jmp    L34
L172:
  lea    D50(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  jmp    L1
L106:
  lea    D40(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  jmp    L46
L149:
  lea    D75(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  jmp    L5
L99:
  lea    D7(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  jmp    L86
L138:
  lea    D32(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  jmp    L94
L48:
  lea    D80(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  jmp    L192
```

tool_calls: name: extract_symbolic_data
arguments: tag: D52
type: string
name: extract_symbolic_data
arguments: tag: D42
type: string
name: extract_symbolic_data
arguments: tag: D77
type: string
name: extract_symbolic_data
arguments: tag: D5
type: string
name: extract_symbolic_data
arguments: tag: D86
type: string
name: extract_symbolic_data
arguments: tag: D50
type: string
name: extract_symbolic_data
arguments: tag: D40
type: string
name: extract_symbolic_data
arguments: tag: D75
type: string
name: extract_symbolic_data
arguments: tag: D7
type: string
name: extract_symbolic_data
arguments: tag: D32
type: string
name: extract_symbolic_data
arguments: tag: D80
type: string

tool: 

tool: D42: AC 

tool: D77: BN 

tool: D5: GL 

tool: D86: GV 

tool: D50: AL 

tool: D40: MV 

tool: D75: N 

tool: D7: RP 

tool: D32: SC 

tool: D80: V 

assistant: ```c
void mapExtendedMPAARating(int mpaarating, char **ratingStr) {
  char *szRating = malloc((40));
  strcpy(szRating, "");
  if (mpaarating & 0x00400000) {
    strcat(szRating, "AC ");
  }
  if (mpaarating & 0x00800000) {
    strcat(szRating, "BN ");
  }
  if (mpaarating & 0x01000000) {
    strcat(szRating, "GL ");
  }
  if (mpaarating & 0x02000000) {
    strcat(szRating, "GV ");
  }
  if (mpaarating & 0x04000000) {
    strcat(szRating, "AL ");
  }
  if (mpaarating & 0x08000000) {
    strcat(szRating, "MV ");
  }
  if (mpaarating & 0x10000000) {
    strcat(szRating, "N ");
  }
  if (mpaarating & 0x20000000) {
    strcat(szRating, "RP ");
  }
  if (mpaarating & 0x40000000) {
    strcat(szRating, "SC ");
  }
  if (mpaarating & 0x80000000) {
    strcat(szRating, "V ");
  }
  *ratingStr = szRating;
}
```