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

```asm
<cunning_convert>:
  endbr64
  sub    $0x1a8,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x198(%rsp)
  xor    %eax,%eax
  lea    D38(%rip),%rax
  mov    %rax,(%rsp)
  mov    %rax,0x8(%rsp)
  mov    %rax,0x10(%rsp)
  mov    %rax,0x18(%rsp)
  mov    %rax,0x20(%rsp)
  mov    %rax,0x28(%rsp)
  mov    %rax,0x30(%rsp)
  mov    %rax,0x38(%rsp)
  mov    %rax,0x40(%rsp)
  mov    %rax,0x48(%rsp)
  lea    D1(%rip),%r8
  mov    %r8,0x50(%rsp)
  lea    D28(%rip),%rcx
  mov    %rcx,0x58(%rsp)
  mov    %rcx,0x60(%rsp)
  mov    %rcx,0x68(%rsp)
  lea    D32(%rip),%rdx
  mov    %rdx,0x70(%rsp)
  mov    %rax,0x78(%rsp)
  mov    %rax,0x80(%rsp)
  mov    %rdx,0x88(%rsp)
  mov    %rax,0x90(%rsp)
  mov    %rdx,0x98(%rsp)
  mov    %rdx,0xa0(%rsp)
  mov    %rax,0xa8(%rsp)
  mov    %rax,0xb0(%rsp)
  mov    %rcx,0xb8(%rsp)
  mov    %rdx,0xc0(%rsp)
  mov    %rax,0xc8(%rsp)
  mov    %rcx,0xd0(%rsp)
  mov    %rdx,0xd8(%rsp)
  mov    %rcx,0xe0(%rsp)
  mov    %r8,0xe8(%rsp)
  mov    %rdx,0xf0(%rsp)
  mov    %rax,0xf8(%rsp)
  mov    %rcx,0x100(%rsp)
  mov    %rax,0x108(%rsp)
  mov    %rdx,0x110(%rsp)
  mov    %rcx,0x118(%rsp)
  mov    %rax,0x120(%rsp)
  mov    %r8,0x128(%rsp)
  mov    %rcx,0x130(%rsp)
  mov    %rdx,0x138(%rsp)
  mov    %rdx,0x140(%rsp)
  mov    %rcx,0x148(%rsp)
  mov    %rax,0x150(%rsp)
  mov    %rax,0x158(%rsp)
  mov    %r8,0x160(%rsp)
  mov    %rcx,0x168(%rsp)
  mov    %rcx,0x170(%rsp)
  mov    %rdx,0x178(%rsp)
  mov    %rax,0x180(%rsp)
  mov    %rdx,0x188(%rsp)
  cmp    $0x47,%sil
  je     L77
  jg     L12
  lea    0x50(%rsp),%rax
  cmp    $0x41,%sil
  je     L78
  cmp    $0x43,%sil
  jne    L25
  lea    0x140(%rsp),%rax
L78:
  movslq %edi,%rdi
  mov    (%rax,%rdi,8),%rax
  mov    0x198(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L67
  add    $0x1a8,%rsp
  ret
L12:
  lea    0xa0(%rsp),%rdx
  mov    %rsp,%rax
  cmp    $0x54,%sil
  cmove  %rdx,%rax
  jmp    L78
L77:
  lea    0xf0(%rsp),%rax
  jmp    L78
L25:
  mov    %rsp,%rax
  jmp    L78
L67:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D38
type: string
name: extract_symbolic_data
arguments: data_label: D1
type: string
name: extract_symbolic_data
arguments: data_label: D28
type: string
name: extract_symbolic_data
arguments: data_label: D32
type: string

tool: D38: ./.

tool: D1: 0/0

tool: D28: 0/1

tool: D32: 1/1

assistant: ```c
const char *cunning_convert(int input, char ref) {
  const char *n[] = {"./.", "./.", "./.", "./.", "./.", "./.", "./.", "./.", "./.", "./."};
  const char *a[] = {"0/0", "0/1", "0/1", "0/1", "1/1", "./.", "./.", "1/1", "./.", "1/1"};
  const char *t[] = {"1/1", "./.", "./.", "0/1", "1/1", "./.", "0/1", "1/1", "0/1", "0/0"};
  const char *g[] = {"1/1", "./.", "0/1", "./.", "1/1", "0/1", "./.", "0/0", "0/1", "1/1"};
  const char *c[] = {"1/1", "0/1", "./.", "./.", "0/0", "0/1", "0/1", "1/1", "./.", "1/1"};
  const char **table = n;
  switch (ref) {
  case 'A':
    table = a;
    break;
  case 'T':
    table = t;
    break;
  case 'G':
    table = g;
    break;
  case 'C':
    table = c;
    break;
  default:
    table = n;
  }
  return table[input];
}
```