user: Please show me the C implementation that matches the assembly code listed below:

```asm
<main>:
  endbr64
  sub    $0x18,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  lea    0x3(%rsp),%rdi
  call   <gets@plt>
  mov    %eax,%edi
  call   <strlen@plt>
  cmp    $0x3,%eax
  je     L441
  cmp    $0x2,%eax
  je     L548
  cmp    $0x1,%eax
  je     L452
L182:
  lea    D576(%rip),%rdi
  call   <printf@plt>
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L238
  mov    $0x0,%eax
  add    $0x18,%rsp
  ret
L441:
  movzbl 0x3(%rsp),%eax
  cmp    $0x31,%al
  je     L489
  sub    $0x32,%eax
  cmp    $0x7,%al
  ja     L595
  movzbl %al,%eax
  lea    D411(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
L489:
  lea    D76(%rip),%rdi
  call   <printf@plt>
L595:
  movzbl 0x4(%rsp),%eax
  cmp    $0x31,%al
  je     L554
  sub    $0x32,%eax
  cmp    $0x7,%al
  ja     L442
  movzbl %al,%eax
  lea    D298(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D350(%rip),%rdi
  call   <printf@plt>
  jmp    L595
  lea    D334(%rip),%rdi
  call   <printf@plt>
  jmp    L595
  lea    D64(%rip),%rdi
  call   <printf@plt>
  jmp    L595
  lea    D539(%rip),%rdi
  call   <printf@plt>
  jmp    L595
  lea    D244(%rip),%rdi
  call   <printf@plt>
  jmp    L595
  lea    D302(%rip),%rdi
  call   <printf@plt>
  jmp    L595
  lea    D527(%rip),%rdi
  call   <printf@plt>
  jmp    L595
  lea    D538(%rip),%rdi
  call   <printf@plt>
  jmp    L595
L554:
  lea    D340(%rip),%rdi
  call   <printf@plt>
L442:
  movzbl 0x5(%rsp),%eax
  cmp    $0x31,%al
  je     L331
  sub    $0x32,%eax
  cmp    $0x7,%al
  ja     L182
  movzbl %al,%eax
  lea    D271(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D133(%rip),%rdi
  call   <printf@plt>
  jmp    L442
  lea    D423(%rip),%rdi
  call   <printf@plt>
  jmp    L442
  lea    D551(%rip),%rdi
  call   <printf@plt>
  jmp    L442
  lea    D434(%rip),%rdi
  call   <printf@plt>
  jmp    L442
  lea    D127(%rip),%rdi
  call   <printf@plt>
  jmp    L442
  lea    D67(%rip),%rdi
  call   <printf@plt>
  jmp    L442
  lea    D365(%rip),%rdi
  call   <printf@plt>
  jmp    L442
  lea    D81(%rip),%rdi
  call   <printf@plt>
  jmp    L442
L331:
  lea    D596(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D504(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D13(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D469(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D152(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D190(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D541(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D82(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D269(%rip),%rdi
  call   <printf@plt>
  jmp    L182
L548:
  movzbl 0x3(%rsp),%eax
  cmp    $0x31,%al
  je     L352
  sub    $0x32,%eax
  cmp    $0x7,%al
  ja     L272
  movzbl %al,%eax
  lea    D581(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
L352:
  lea    D340(%rip),%rdi
  call   <printf@plt>
L272:
  movzbl 0x4(%rsp),%eax
  cmp    $0x31,%al
  je     L146
  sub    $0x32,%eax
  cmp    $0x7,%al
  ja     L182
  movzbl %al,%eax
  lea    D24(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D133(%rip),%rdi
  call   <printf@plt>
  jmp    L272
  lea    D423(%rip),%rdi
  call   <printf@plt>
  jmp    L272
  lea    D551(%rip),%rdi
  call   <printf@plt>
  jmp    L272
  lea    D434(%rip),%rdi
  call   <printf@plt>
  jmp    L272
  lea    D127(%rip),%rdi
  call   <printf@plt>
  jmp    L272
  lea    D67(%rip),%rdi
  call   <printf@plt>
  jmp    L272
  lea    D365(%rip),%rdi
  call   <printf@plt>
  jmp    L272
  lea    D81(%rip),%rdi
  call   <printf@plt>
  jmp    L272
L146:
  lea    D596(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D504(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D13(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D469(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D152(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D190(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D541(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D82(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D269(%rip),%rdi
  call   <printf@plt>
  jmp    L182
L452:
  movzbl 0x3(%rsp),%eax
  cmp    $0x31,%al
  je     L611
  sub    $0x32,%eax
  cmp    $0x7,%al
  ja     L182
  movzbl %al,%eax
  lea    D402(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
L611:
  lea    D596(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D504(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D13(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D469(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D152(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D190(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D541(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D82(%rip),%rdi
  call   <printf@plt>
  jmp    L182
  lea    D269(%rip),%rdi
  call   <printf@plt>
  jmp    L182
L238:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: data_tag: D576
type_infered: string
name: retrieve_data
arguments: data_tag: D76
type_infered: string
name: retrieve_data
arguments: data_tag: D350
type_infered: string
name: retrieve_data
arguments: data_tag: D334
type_infered: string
name: retrieve_data
arguments: data_tag: D64
type_infered: string
name: retrieve_data
arguments: data_tag: D539
type_infered: string
name: retrieve_data
arguments: data_tag: D244
type_infered: string
name: retrieve_data
arguments: data_tag: D302
type_infered: string
name: retrieve_data
arguments: data_tag: D527
type_infered: string
name: retrieve_data
arguments: data_tag: D538
type_infered: string
name: retrieve_data
arguments: data_tag: D340
type_infered: string
name: retrieve_data
arguments: data_tag: D133
type_infered: string
name: retrieve_data
arguments: data_tag: D423
type_infered: string
name: retrieve_data
arguments: data_tag: D551
type_infered: string
name: retrieve_data
arguments: data_tag: D434
type_infered: string
name: retrieve_data
arguments: data_tag: D127
type_infered: string
name: retrieve_data
arguments: data_tag: D67
type_infered: string
name: retrieve_data
arguments: data_tag: D365
type_infered: string
name: retrieve_data
arguments: data_tag: D81
type_infered: string
name: retrieve_data
arguments: data_tag: D596
type_infered: string
name: retrieve_data
arguments: data_tag: D504
type_infered: string
name: retrieve_data
arguments: data_tag: D13
type_infered: string
name: retrieve_data
arguments: data_tag: D469
type_infered: string
name: retrieve_data
arguments: data_tag: D152
type_infered: string
name: retrieve_data
arguments: data_tag: D190
type_infered: string
name: retrieve_data
arguments: data_tag: D541
type_infered: string
name: retrieve_data
arguments: data_tag: D82
type_infered: string
name: retrieve_data
arguments: data_tag: D269
type_infered: string

tool: D576: 


tool: D76: C

tool: D350: CC

tool: D334: CCC

tool: D64: CD

tool: D539: D

tool: D244: DC

tool: D302: DCC

tool: D527: DCCC

tool: D538: CM

tool: D340: X

tool: D133: XX

tool: D423: XXX

tool: D551: XL

tool: D434: L

tool: D127: LX

tool: D67: LXX

tool: D365: LXXX

tool: D81: XC

tool: D596: I

tool: D504: II

tool: D13: III

tool: D469: IV

tool: D152: V

tool: D190: VI

tool: D541: VII

tool: D82: VIII

tool: D269: IX

assistant: ```c
int main() {
  char x[5];
  int lnth;
  lnth = strlen(gets(x));
  if (lnth == 3) {
    if (x[0] == '1')
      printf("C");
    else if (x[0] == '2')
      printf("CC");
    else if (x[0] == '3')
      printf("CCC");
    else if (x[0] == '4')
      printf("CD");
    else if (x[0] == '5')
      printf("D");
    else if (x[0] == '6')
      printf("DC");
    else if (x[0] == '7')
      printf("DCC");
    else if (x[0] == '8')
      printf("DCCC");
    else if (x[0] == '9')
      printf("CM");
    if (x[1] == '1')
      printf("X");
    else if (x[1] == '2')
      printf("XX");
    else if (x[1] == '3')
      printf("XXX");
    else if (x[1] == '4')
      printf("XL");
    else if (x[1] == '5')
      printf("L");
    else if (x[1] == '6')
      printf("LX");
    else if (x[1] == '7')
      printf("LXX");
    else if (x[1] == '8')
      printf("LXXX");
    else if (x[1] == '9')
      printf("XC");
    if (x[2] == '1')
      printf("I");
    else if (x[2] == '2')
      printf("II");
    else if (x[2] == '3')
      printf("III");
    else if (x[2] == '4')
      printf("IV");
    else if (x[2] == '5')
      printf("V");
    else if (x[2] == '6')
      printf("VI");
    else if (x[2] == '7')
      printf("VII");
    else if (x[2] == '8')
      printf("VIII");
    else if (x[2] == '9')
      printf("IX");
  } else if (lnth == 2) {
    if (x[0] == '1')
      printf("X");
    else if (x[0] == '2')
      printf("XX");
    else if (x[0] == '3')
      printf("XXX");
    else if (x[0] == '4')
      printf("XL");
    else if (x[0] == '5')
      printf("L");
    else if (x[0] == '6')
      printf("LX");
    else if (x[0] == '7')
      printf("LXX");
    else if (x[0] == '8')
      printf("LXXX");
    else if (x[0] == '9')
      printf("XC");
    if (x[1] == '1')
      printf("I");
    else if (x[1] == '2')
      printf("II");
    else if (x[1] == '3')
      printf("III");
    else if (x[1] == '4')
      printf("IV");
    else if (x[1] == '5')
      printf("V");
    else if (x[1] == '6')
      printf("VI");
    else if (x[1] == '7')
      printf("VII");
    else if (x[1] == '8')
      printf("VIII");
    else if (x[1] == '9')
      printf("IX");
  } else if (lnth == 1) {
    if (x[0] == '1')
      printf("I");
    else if (x[0] == '2')
      printf("II");
    else if (x[0] == '3')
      printf("III");
    else if (x[0] == '4')
      printf("IV");
    else if (x[0] == '5')
      printf("V");
    else if (x[0] == '6')
      printf("VI");
    else if (x[0] == '7')
      printf("VII");
    else if (x[0] == '8')
      printf("VIII");
    else if (x[0] == '9')
      printf("IX");
  }
  printf("\n");
  return 0;
}
```