user: Converte this assembly snippet into its equivalent C code:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xa0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movsd  D135(%rip),%xmm0
  movsd  %xmm0,-0x90(%rbp)
  movsd  D121(%rip),%xmm0
  movsd  %xmm0,-0x88(%rbp)
  movsd  D239(%rip),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  D104(%rip),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  D171(%rip),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  D84(%rip),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  D237(%rip),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  D194(%rip),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  D186(%rip),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  D234(%rip),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  D213(%rip),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  D71(%rip),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  D23(%rip),%xmm0
  movsd  %xmm0,-0xa0(%rbp)
  movsd  D161(%rip),%xmm0
  movsd  %xmm0,-0x98(%rbp)
  movsd  -0xa0(%rbp),%xmm0
  mov    -0x98(%rbp),%rdi
  lea    -0x70(%rbp),%rcx
  lea    -0x90(%rbp),%rdx
  lea    -0x50(%rbp),%rsi
  lea    -0x30(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rdi,%xmm0
  mov    %rax,%rdi
  call   <estimate_ncf@plt>
  movsd  -0x18(%rbp),%xmm2
  movsd  -0x20(%rbp),%xmm1
  movsd  -0x28(%rbp),%xmm0
  mov    -0x30(%rbp),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D207(%rip),%rax
  mov    %rax,%rdi
  mov    $0x4,%eax
  call   <printf@plt>
  movsd  D71(%rip),%xmm2
  movsd  D159(%rip),%xmm1
  movsd  D238(%rip),%xmm0
  mov    D186(%rip),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D40(%rip),%rax
  mov    %rax,%rdi
  mov    $0x4,%eax
  call   <printf@plt>
  movsd  -0x40(%rbp),%xmm1
  movsd  -0x48(%rbp),%xmm0
  mov    -0x50(%rbp),%rax
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D154(%rip),%rax
  mov    %rax,%rdi
  mov    $0x3,%eax
  call   <printf@plt>
  movsd  D45(%rip),%xmm0
  mov    D205(%rip),%rax
  pxor   %xmm2,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D115(%rip),%rax
  mov    %rax,%rdi
  mov    $0x3,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L0
  call   <__stack_chk_fail@plt>
L0:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D135
type_infered: byte[8]
name: unpack_data
arguments: data_tag: D121
type_infered: byte[8]
name: unpack_data
arguments: data_tag: D239
type_infered: byte[8]
name: unpack_data
arguments: data_tag: D104
type_infered: byte[8]
name: unpack_data
arguments: data_tag: D171
type_infered: f64
name: unpack_data
arguments: data_tag: D84
type_infered: f64
name: unpack_data
arguments: data_tag: D237
type_infered: byte[8]
name: unpack_data
arguments: data_tag: D194
type_infered: byte[8]
name: unpack_data
arguments: data_tag: D186
type_infered: f64
name: unpack_data
arguments: data_tag: D234
type_infered: f64
name: unpack_data
arguments: data_tag: D213
type_infered: f64
name: unpack_data
arguments: data_tag: D71
type_infered: f64
name: unpack_data
arguments: data_tag: D23
type_infered: f64
name: unpack_data
arguments: data_tag: D161
type_infered: f64
name: unpack_data
arguments: data_tag: D207
type_infered: string
name: unpack_data
arguments: data_tag: D159
type_infered: f64
name: unpack_data
arguments: data_tag: D238
type_infered: f64
name: unpack_data
arguments: data_tag: D40
type_infered: string
name: unpack_data
arguments: data_tag: D154
type_infered: string
name: unpack_data
arguments: data_tag: D45
type_infered: byte[8]
name: unpack_data
arguments: data_tag: D205
type_infered: byte[8]
name: unpack_data
arguments: data_tag: D115
type_infered: string

tool: {"D135": [0xf5,0x8e,0x09,0xe7,0x09,0x3a,0x10,0x3f]}

tool: {"D121": [0xd0,0xfa,0x4a,0xd6,0x97,0x5b,0xe0,0xbe]}

tool: {"D239": [0xa2,0xaf,0xc5,0x13,0xe6,0xe2,0x44,0x3f]}

tool: {"D104": [0x0a,0x68,0x22,0x6c,0x78,0x7a,0xcd,0xbf]}

tool: D171: 0.3004

tool: D84: 9.4569

tool: {"D237": [0x01,0x4d,0x84,0x0d,0x4f,0xaf,0x84,0xbf]}

tool: {"D194": [0x76,0x71,0x1b,0x0d,0xe0,0x2d,0x80,0xbf]}

tool: D186: 0.9996

tool: D234: 0.0167

tool: D213: 0.0134

tool: D71: 0.0197

tool: D23: 0.05

tool: D161: 0.1

tool: D207: q_est:	%f	%f	%f	%f


tool: D159: 0.0132

tool: D238: 0.0165

tool: D40: q_ref:	%f	%f	%f	%f


tool: D154: 
b_est:	%f	%f	%f


tool: {"D45": [0x39,0xb4,0xc8,0x76,0xbe,0x9f,0x7a,0xbf]}

tool: {"D205": [0xde,0x71,0x8a,0x8e,0xe4,0xf2,0x7f,0xbf]}

tool: D115: b_ref:	%f	%f	%f


assistant: ```c
int main(void) {
  double omega[3] = {0.0619E-3, -0.0078E-3, 0.6374E-3};
  double acc[3] = {-0.2303, 0.3004, 9.4569};
  double b_est[3] = {-0.0101, -0.0079, 0.0000};
  double q_est[4] = {0.9996, 0.0167, 0.0134, 0.0197};
  double dt = 0.05;
  double kp = 0.1;
  estimate_ncf(q_est, b_est, omega, acc, kp, dt);
  printf("q_est:\t%f\t%f\t%f\t%f\n", q_est[0], q_est[1], q_est[2], q_est[3]);
  printf("q_ref:\t%f\t%f\t%f\t%f\n", 0.9996, 0.0165, 0.0132, 0.0197);
  printf("\nb_est:\t%f\t%f\t%f\n", b_est[0], b_est[1], b_est[2]);
  printf("b_ref:\t%f\t%f\t%f\n", -0.0078, -0.0065, 0.0000);
  return 0;
}
```