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

```asm
<PrecessToEpoch>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  mov    %rsi,%rbx
  sub    $0x58,%rsp
  movsd  D209(%rip),%xmm6
  mulsd  (%rdi),%xmm6
  lea    0x48(%rsp),%r12
  lea    0x40(%rsp),%r13
  movsd  %xmm0,0x8(%rsp)
  mov    %r12,%rdi
  movsd  D209(%rip),%xmm0
  mulsd  (%rsi),%xmm0
  mov    %r13,%rsi
  divsd  D221(%rip),%xmm0
  movsd  %xmm6,0x38(%rsp)
  call   <sincos@plt>
  movsd  0x40(%rsp),%xmm4
  movsd  0x48(%rsp),%xmm5
  xor    %eax,%eax
  movsd  %xmm4,0x30(%rsp)
  movsd  %xmm5,0x28(%rsp)
  call   <JDNow@plt>
  movsd  D11(%rip),%xmm3
  mov    %r13,%rsi
  mov    %r12,%rdi
  movsd  0x8(%rsp),%xmm1
  movapd %xmm0,%xmm7
  subsd  D205(%rip),%xmm1
  mulsd  D406(%rip),%xmm1
  subsd  %xmm3,%xmm7
  movsd  D404(%rip),%xmm2
  movsd  D27(%rip),%xmm8
  divsd  %xmm2,%xmm7
  addsd  %xmm3,%xmm1
  movsd  D131(%rip),%xmm3
  subsd  %xmm0,%xmm1
  movsd  D341(%rip),%xmm0
  divsd  %xmm2,%xmm1
  movsd  D60(%rip),%xmm2
  mulsd  %xmm7,%xmm3
  mulsd  %xmm7,%xmm0
  mulsd  %xmm7,%xmm8
  addsd  D148(%rip),%xmm8
  subsd  %xmm3,%xmm2
  movsd  D218(%rip),%xmm3
  mulsd  %xmm7,%xmm0
  subsd  %xmm0,%xmm8
  movsd  D34(%rip),%xmm0
  mulsd  %xmm7,%xmm0
  mulsd  %xmm1,%xmm3
  mulsd  %xmm1,%xmm2
  mulsd  %xmm1,%xmm8
  mulsd  %xmm1,%xmm3
  mulsd  %xmm1,%xmm2
  mulsd  %xmm1,%xmm3
  addsd  %xmm8,%xmm2
  addsd  %xmm3,%xmm2
  movsd  D82(%rip),%xmm3
  mulsd  D209(%rip),%xmm2
  mulsd  %xmm7,%xmm3
  addsd  D309(%rip),%xmm3
  movsd  %xmm2,0x20(%rsp)
  mulsd  %xmm1,%xmm3
  mulsd  %xmm1,%xmm3
  addsd  %xmm8,%xmm3
  movsd  D9(%rip),%xmm8
  mulsd  %xmm1,%xmm8
  mulsd  %xmm1,%xmm8
  mulsd  %xmm1,%xmm8
  addsd  %xmm8,%xmm3
  mulsd  D209(%rip),%xmm3
  movsd  D79(%rip),%xmm8
  divsd  D166(%rip),%xmm3
  movsd  %xmm3,0x8(%rsp)
  movsd  D101(%rip),%xmm3
  mulsd  %xmm7,%xmm8
  mulsd  %xmm0,%xmm7
  subsd  %xmm8,%xmm3
  subsd  %xmm7,%xmm3
  movsd  D339(%rip),%xmm7
  subsd  %xmm0,%xmm7
  mulsd  %xmm1,%xmm3
  mulsd  %xmm1,%xmm7
  movapd %xmm7,%xmm0
  mulsd  %xmm1,%xmm0
  addsd  %xmm0,%xmm3
  movsd  D300(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  %xmm1,%xmm0
  addsd  %xmm3,%xmm0
  mulsd  D209(%rip),%xmm0
  divsd  D166(%rip),%xmm0
  call   <sincos@plt>
  mov    %r13,%rsi
  movsd  0x38(%rsp),%xmm6
  movsd  0x20(%rsp),%xmm2
  movsd  0x40(%rsp),%xmm7
  divsd  D166(%rip),%xmm2
  divsd  D65(%rip),%xmm6
  addsd  %xmm2,%xmm6
  movsd  0x48(%rsp),%xmm8
  mov    %r12,%rdi
  movsd  %xmm7,0x18(%rsp)
  movsd  %xmm8,0x10(%rsp)
  movapd %xmm6,%xmm0
  call   <sincos@plt>
  movsd  0x40(%rsp),%xmm0
  movsd  0x10(%rsp),%xmm8
  movsd  0x18(%rsp),%xmm7
  movsd  0x30(%rsp),%xmm4
  movapd %xmm0,%xmm1
  movsd  0x28(%rsp),%xmm5
  movapd %xmm8,%xmm2
  movsd  0x48(%rsp),%xmm3
  mulsd  %xmm8,%xmm0
  mulsd  %xmm7,%xmm1
  mulsd  %xmm5,%xmm7
  mulsd  %xmm5,%xmm2
  mulsd  %xmm4,%xmm3
  mulsd  %xmm4,%xmm0
  mulsd  %xmm4,%xmm1
  addsd  %xmm7,%xmm0
  comisd D266(%rip),%xmm0
  subsd  %xmm2,%xmm1
  ja     L12
  movsd  D277(%rip),%xmm2
  comisd %xmm0,%xmm2
  ja     L4
  movsd  %xmm1,0x18(%rsp)
  movsd  %xmm3,0x10(%rsp)
  call   <asin@plt>
  movsd  0x18(%rsp),%xmm1
  movsd  0x10(%rsp),%xmm3
  movq   %xmm0,%r12
L21:
  movapd %xmm3,%xmm0
  call   <atan2@plt>
  movq   %r12,%xmm1
  addsd  0x8(%rsp),%xmm0
  mulsd  D221(%rip),%xmm1
  divsd  D209(%rip),%xmm1
  comisd D184(%rip),%xmm1
  mulsd  D65(%rip),%xmm0
  divsd  D209(%rip),%xmm0
  jbe    L15
  movsd  D221(%rip),%xmm4
  addsd  D65(%rip),%xmm0
  subsd  %xmm1,%xmm4
  movapd %xmm4,%xmm1
L15:
  movsd  D350(%rip),%xmm2
  comisd %xmm1,%xmm2
  jbe    L56
  movsd  D295(%rip),%xmm2
  addsd  D65(%rip),%xmm0
  subsd  %xmm1,%xmm2
  movapd %xmm2,%xmm1
L56:
  movsd  %xmm1,0x8(%rsp)
  call   <Map24@plt>
  movsd  0x8(%rsp),%xmm1
  movsd  %xmm0,0x0(%rbp)
  movsd  %xmm1,(%rbx)
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopl   0x0(%rax,%rax,1)
L4:
  movapd %xmm1,%xmm2
  movapd %xmm3,%xmm0
  movsd  %xmm1,0x18(%rsp)
  mulsd  %xmm1,%xmm2
  movsd  %xmm3,0x10(%rsp)
  mulsd  %xmm3,%xmm0
  addsd  %xmm2,%xmm0
  call   <sqrt@plt>
  mov    %eax,%edi
  call   <acos@plt>
  xorpd  D222(%rip),%xmm0
  movsd  0x10(%rsp),%xmm3
  movsd  0x18(%rsp),%xmm1
  movq   %xmm0,%r12
  jmp    L21
  nopw   0x0(%rax,%rax,1)
L12:
  movapd %xmm1,%xmm2
  movapd %xmm3,%xmm0
  movsd  %xmm1,0x18(%rsp)
  mulsd  %xmm1,%xmm2
  movsd  %xmm3,0x10(%rsp)
  mulsd  %xmm3,%xmm0
  addsd  %xmm2,%xmm0
  call   <sqrt@plt>
  mov    %eax,%edi
  call   <acos@plt>
  movsd  0x10(%rsp),%xmm3
  movsd  0x18(%rsp),%xmm1
  movq   %xmm0,%r12
  jmp    L21
```

tool_calls: name: disassemble_data
arguments: data_tag: D209
type_guessed: f64
name: disassemble_data
arguments: data_tag: D221
type_guessed: f64
name: disassemble_data
arguments: data_tag: D11
type_guessed: f64
name: disassemble_data
arguments: data_tag: D205
type_guessed: f64
name: disassemble_data
arguments: data_tag: D406
type_guessed: f64
name: disassemble_data
arguments: data_tag: D404
type_guessed: f64
name: disassemble_data
arguments: data_tag: D27
type_guessed: f64
name: disassemble_data
arguments: data_tag: D131
type_guessed: f64
name: disassemble_data
arguments: data_tag: D341
type_guessed: f64
name: disassemble_data
arguments: data_tag: D60
type_guessed: f64
name: disassemble_data
arguments: data_tag: D148
type_guessed: f64
name: disassemble_data
arguments: data_tag: D218
type_guessed: f64
name: disassemble_data
arguments: data_tag: D34
type_guessed: f64
name: disassemble_data
arguments: data_tag: D82
type_guessed: f64
name: disassemble_data
arguments: data_tag: D309
type_guessed: f64
name: disassemble_data
arguments: data_tag: D9
type_guessed: f64
name: disassemble_data
arguments: data_tag: D79
type_guessed: f64
name: disassemble_data
arguments: data_tag: D166
type_guessed: byte[8]
name: disassemble_data
arguments: data_tag: D101
type_guessed: f64
name: disassemble_data
arguments: data_tag: D339
type_guessed: byte[8]
name: disassemble_data
arguments: data_tag: D300
type_guessed: byte[8]
name: disassemble_data
arguments: data_tag: D65
type_guessed: f64
name: disassemble_data
arguments: data_tag: D266
type_guessed: f64[2]
name: disassemble_data
arguments: data_tag: D277
type_guessed: byte[8]
name: disassemble_data
arguments: data_tag: D184
type_guessed: f64[2]
name: disassemble_data
arguments: data_tag: D350
type_guessed: byte[8]
name: disassemble_data
arguments: data_tag: D295
type_guessed: byte[8]
name: disassemble_data
arguments: data_tag: D222
type_guessed: byte[16]

tool: D209: 3.14159265358

tool: D221: 180

tool: D11: 2451545

tool: D205: 2000

tool: D406: 365.25

tool: D404: 36525

tool: D27: 1.39656

tool: D131: 0.000344

tool: D341: 0.000139

tool: D60: 0.30188

tool: D148: 2306.2181

tool: D218: 0.017998

tool: D34: 0.000217

tool: D82: 6.6e-05

tool: D309: 1.09468

tool: D9: 0.018203

tool: D79: 0.8533

tool: {"D166": [0x00,0x00,0x00,0x00,0x80,0xc6,0x23,0x41]}

tool: D101: 2004.3109

tool: {"D339": [0x58,0xa8,0x35,0xcd,0x3b,0x4e,0xdb,0xbf]}

tool: {"D300": [0xbf,0x81,0xc9,0x8d,0x22,0x6b,0xa5,0xbf]}

tool: D65: 12

tool: {"D266": [0.9,-0.9]}

tool: {"D277": [0xcd,0xcc,0xcc,0xcc,0xcc,0xcc,0xec,0xbf]}

tool: {"D184": [90.0,-90.0]}

tool: {"D350": [0x00,0x00,0x00,0x00,0x00,0x80,0x56,0xc0]}

tool: {"D295": [0x00,0x00,0x00,0x00,0x00,0x80,0x66,0xc0]}

tool: {"D222": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

assistant: ```c
void PrecessToEpoch(double epoch, double *ra, double *dec) {
  double ra_in, dec_in, ra_out, dec_out;
  double a, b, c;
  double zeta, z, theta;
  double T, t;
  double jdfixed, jdnow;
  ra_in = *ra;
  dec_in = *dec;
  ra_in = ra_in * 3.14159265358 / 12.;
  dec_in = dec_in * 3.14159265358 / 180.;
  jdfixed = (epoch - 2000.0) * 365.25 + 2451545.0;
  jdnow = JDNow();
  T = (jdnow - 2451545.0) / 36525.0;
  t = (jdfixed - jdnow) / 36525.0;
  zeta = (2306.2181 + 1.39656 * T - 0.000139 * T * T) * t + (0.30188 - 0.000344 * T) * t * t + (0.017998) * t * t * t;
  z = (2306.2181 + 1.39656 * T - 0.000139 * T * T) * t + (1.09468 + 0.000066 * T) * t * t + (0.018203) * t * t * t;
  theta = (2004.3109 - 0.85330 * T - 0.000217 * T * T) * t + (-0.42665 - 0.000217 * T) * t * t + (-0.041833) * t * t * t;
  zeta = zeta * 3.14159265358 / (180. * 3600.);
  z = z * 3.14159265358 / (180. * 3600.);
  theta = theta * 3.14159265358 / (180. * 3600.);
  a = sin(ra_in + zeta) * cos(dec_in);
  b = cos(ra_in + zeta) * cos(theta) * cos(dec_in) - sin(theta) * sin(dec_in);
  c = cos(ra_in + zeta) * sin(theta) * cos(dec_in) + cos(theta) * sin(dec_in);
  if (c > 0.9) {
    dec_out = acos(sqrt(a * a + b * b));
  } else if (c < -0.9) {
    dec_out = -acos(sqrt(a * a + b * b));
  } else {
    dec_out = asin(c);
  }
  ra_out = atan2(a, b) + z;
  ra_out = ra_out * 12. / 3.14159265358;
  dec_out = dec_out * 180. / 3.14159265358;
  if (dec_out > 90.) {
    dec_out = 180. - dec_out;
    ra_out = ra_out + 12.;
  }
  if (dec_out < -90.) {
    dec_out = -180. - dec_out;
    ra_out = ra_out + 12.;
  }
  ra_out = Map24(ra_out);
  *ra = ra_out;
  *dec = dec_out;
}
```