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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x18(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x14(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x10(%rbp)
  lea    D64(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x1a(%rbp),%rax
  mov    %rax,%rdi
  call   <get_input@plt>
  movzbl -0x1a(%rbp),%eax
  cmp    $0x4c,%al
  je     L68
  lea    D140(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x19(%rbp),%rax
  mov    %rax,%rdi
  call   <get_input@plt>
L68:
  movzbl -0x1a(%rbp),%eax
  movsbl %al,%eax
  cmp    $0x4c,%eax
  je     L233
  cmp    $0x4c,%eax
  jg     L110
  cmp    $0x4b,%eax
  je     L266
  cmp    $0x4b,%eax
  jg     L110
  cmp    $0x43,%eax
  je     L158
  cmp    $0x46,%eax
  jne    L110
  movzbl -0x19(%rbp),%eax
  cmp    $0x43,%al
  jne    L93
  lea    D220(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <get_num@plt>
  lea    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <To_Celsius@plt>
  movss  -0x18(%rbp),%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm0,%xmm2
  movq   %xmm2,%rax
  movq   %rax,%xmm0
  lea    D236(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L296
L93:
  movzbl -0x19(%rbp),%eax
  cmp    $0x4b,%al
  jne    L165
  lea    D220(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <get_num@plt>
  lea    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <To_Celsius@plt>
  movss  -0x18(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D215(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x18(%rbp)
  movss  -0x18(%rbp),%xmm0
  pxor   %xmm3,%xmm3
  cvtss2sd %xmm0,%xmm3
  movq   %xmm3,%rax
  movq   %rax,%xmm0
  lea    D40(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L296
L165:
  movzbl -0x19(%rbp),%eax
  cmp    $0x46,%al
  jne    L296
  lea    D220(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <get_num@plt>
  movss  -0x18(%rbp),%xmm0
  pxor   %xmm4,%xmm4
  cvtss2sd %xmm0,%xmm4
  movq   %xmm4,%rax
  movq   %rax,%xmm0
  lea    D90(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L296
L158:
  movzbl -0x19(%rbp),%eax
  cmp    $0x46,%al
  jne    L260
  lea    D220(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <get_num@plt>
  lea    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <To_Fahr@plt>
  movss  -0x18(%rbp),%xmm0
  pxor   %xmm5,%xmm5
  cvtss2sd %xmm0,%xmm5
  movq   %xmm5,%rax
  movq   %rax,%xmm0
  lea    D274(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L261
L260:
  movzbl -0x19(%rbp),%eax
  cmp    $0x4b,%al
  jne    L92
  lea    D220(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <get_num@plt>
  movss  -0x18(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D215(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x18(%rbp)
  movss  -0x18(%rbp),%xmm0
  pxor   %xmm6,%xmm6
  cvtss2sd %xmm0,%xmm6
  movq   %xmm6,%rax
  movq   %rax,%xmm0
  lea    D40(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L261
L92:
  movzbl -0x19(%rbp),%eax
  cmp    $0x43,%al
  jne    L261
  lea    D220(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <get_num@plt>
  movss  -0x18(%rbp),%xmm0
  pxor   %xmm7,%xmm7
  cvtss2sd %xmm0,%xmm7
  movq   %xmm7,%rax
  movq   %rax,%xmm0
  lea    D160(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L261
L266:
  movzbl -0x19(%rbp),%eax
  cmp    $0x46,%al
  jne    L136
  lea    D220(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <get_num@plt>
  movss  -0x18(%rbp),%xmm0
  cvtss2sd %xmm0,%xmm0
  movsd  D215(%rip),%xmm1
  subsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x18(%rbp)
  lea    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <To_Fahr@plt>
  movss  -0x18(%rbp),%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm0,%xmm2
  movq   %xmm2,%rax
  movq   %rax,%xmm0
  lea    D98(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L196
L136:
  movzbl -0x19(%rbp),%eax
  cmp    $0x43,%al
  jne    L91
  lea    D220(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <get_num@plt>
  movss  -0x18(%rbp),%xmm0
  cvtss2sd %xmm0,%xmm0
  movsd  D215(%rip),%xmm1
  subsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x18(%rbp)
  movss  -0x18(%rbp),%xmm0
  pxor   %xmm3,%xmm3
  cvtss2sd %xmm0,%xmm3
  movq   %xmm3,%rax
  movq   %rax,%xmm0
  lea    D122(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L196
L91:
  movzbl -0x19(%rbp),%eax
  cmp    $0x4b,%al
  jne    L196
  lea    D220(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <get_num@plt>
  movss  -0x18(%rbp),%xmm0
  pxor   %xmm4,%xmm4
  cvtss2sd %xmm0,%xmm4
  movq   %xmm4,%rax
  movq   %rax,%xmm0
  lea    D105(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L196
L233:
  lea    D258(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0xffffffd8,-0xc(%rbp)
  jmp    L147
L212:
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0xc(%rbp),%xmm0
  movss  %xmm0,-0x10(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0xc(%rbp),%xmm0
  movss  %xmm0,-0x14(%rbp)
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <To_Celsius@plt>
  lea    -0x14(%rbp),%rax
  mov    %rax,%rdi
  call   <To_Celsius@plt>
  movss  -0x14(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D215(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x14(%rbp)
  movss  -0x14(%rbp),%xmm0
  cvtss2sd %xmm0,%xmm0
  movss  -0x10(%rbp),%xmm1
  pxor   %xmm5,%xmm5
  cvtss2sd %xmm1,%xmm5
  movq   %xmm5,%rdx
  mov    -0xc(%rbp),%eax
  movapd %xmm0,%xmm1
  movq   %rdx,%xmm0
  mov    %eax,%esi
  lea    D207(%rip),%rax
  mov    %rax,%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  addl   $0x14,-0xc(%rbp)
L147:
  cmpl   $0xc8,-0xc(%rbp)
  jle    L212
  jmp    L143
L110:
  lea    D209(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L143
L296:
  nop
  jmp    L143
L261:
  nop
  jmp    L143
L196:
  nop
L143:
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L213
  call   <__stack_chk_fail@plt>
L213:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D64
type_infered: string
name: parse_data
arguments: data_tag: D140
type_infered: string
name: parse_data
arguments: data_tag: D220
type_infered: string
name: parse_data
arguments: data_tag: D236
type_infered: string
name: parse_data
arguments: data_tag: D215
type_infered: f64
name: parse_data
arguments: data_tag: D40
type_infered: string
name: parse_data
arguments: data_tag: D90
type_infered: string
name: parse_data
arguments: data_tag: D274
type_infered: string
name: parse_data
arguments: data_tag: D160
type_infered: string
name: parse_data
arguments: data_tag: D98
type_infered: string
name: parse_data
arguments: data_tag: D122
type_infered: string
name: parse_data
arguments: data_tag: D105
type_infered: string
name: parse_data
arguments: data_tag: D258
type_infered: string
name: parse_data
arguments: data_tag: D207
type_infered: string
name: parse_data
arguments: data_tag: D209
type_infered: string

tool: D64: 
Would you like to convert from (F)ahrenheit, (C)elsius, (K)elvin, or see a (L)ist of conversions?

tool: D140: Convert to (F)ahrenheit, (C)elsius, or (K)elvin?

tool: D220: Enter Temperature to convert:

tool: D236: %06.3f Degrees Celsius


tool: D215: 273.15

tool: D40: %06.3f Kelvin


tool: D90: %06.3f Degrees Fahrenheit, Duh


tool: D274: %06.3f Degrees Fahrenheit


tool: D160: %06.3f Degrees Celsius, Duh


tool: D98: %06.3f Degrees Fehrenheit


tool: D122: %06.3f Celsius


tool: D105: %06.3f Kelvin, Duh


tool: D258: Fahrenheit	Celcius	Kelvin


tool: D207: 
	%3d	%06.3f	%06.3f


tool: D209: Something went wrong.

assistant: ```c
int main() {
  char deg_in, deg_out;
  float deg_num = 0.0;
  float kelvin_loop = 0.0;
  float celsius_loop = 0.0;
  int i;
  printf("\nWould you like to convert from (F)ahrenheit, (C)elsius, (K)elvin, or see a (L)ist of conversions?\n");
  get_input(&deg_in);
  if (deg_in != 'L') {
    printf("Convert to (F)ahrenheit, (C)elsius, or (K)elvin?\n");
    get_input(&deg_out);
  }
  switch (deg_in) {
  case 'F':
    if (deg_out == 'C') {
      printf("Enter Temperature to convert:\n");
      get_num(&deg_num);
      To_Celsius(&deg_num);
      printf("%06.3f Degrees Celsius\n", deg_num);
    } else if (deg_out == 'K') {
      printf("Enter Temperature to convert:\n");
      get_num(&deg_num);
      To_Celsius(&deg_num);
      deg_num += 273.15;
      printf("%06.3f Kelvin\n", deg_num);
    } else if (deg_out == 'F') {
      printf("Enter Temperature to convert:\n");
      get_num(&deg_num);
      printf("%06.3f Degrees Fahrenheit, Duh\n", deg_num);
    }
    break;
  case 'C':
    if (deg_out == 'F') {
      printf("Enter Temperature to convert:\n");
      get_num(&deg_num);
      To_Fahr(&deg_num);
      printf("%06.3f Degrees Fahrenheit\n", deg_num);
    } else if (deg_out == 'K') {
      printf("Enter Temperature to convert:\n");
      get_num(&deg_num);
      deg_num += 273.15;
      printf("%06.3f Kelvin\n", deg_num);
    } else if (deg_out == 'C') {
      printf("Enter Temperature to convert:\n");
      get_num(&deg_num);
      printf("%06.3f Degrees Celsius, Duh\n", deg_num);
    }
    break;
  case 'K':
    if (deg_out == 'F') {
      printf("Enter Temperature to convert:\n");
      get_num(&deg_num);
      deg_num -= 273.15;
      To_Fahr(&deg_num);
      printf("%06.3f Degrees Fehrenheit\n", deg_num);
    } else if (deg_out == 'C') {
      printf("Enter Temperature to convert:\n");
      get_num(&deg_num);
      deg_num -= 273.15;
      printf("%06.3f Celsius\n", deg_num);
    } else if (deg_out == 'K') {
      printf("Enter Temperature to convert:\n");
      get_num(&deg_num);
      printf("%06.3f Kelvin, Duh\n", deg_num);
    }
    break;
  case 'L':
    printf("Fahrenheit\tCelcius\tKelvin\n\n");
    for (i = -40; i <= 200; i += 20) {
      celsius_loop = i;
      kelvin_loop = i;
      To_Celsius(&celsius_loop);
      To_Celsius(&kelvin_loop);
      kelvin_loop += 273.15;
      printf("\n\t%3d\t%06.3f\t%06.3f\n", i, celsius_loop, kelvin_loop);
    }
    break;
  default:
    printf("Something went wrong.\n");
    break;
  }
}
```