user: What is the c source code of the assembly code below?

```asm
<fk52ecl>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xe0,%rsp
  mov    %rdi,-0xc8(%rbp)
  mov    %rsi,-0xd0(%rbp)
  movsd  %xmm0,-0xd8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movsd  D181(%rip),%xmm0
  movsd  %xmm0,-0xa8(%rbp)
  mov    -0xc8(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D38(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D168(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0xb0(%rbp)
  mov    -0xd0(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D38(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D168(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0xb8(%rbp)
  movsd  -0xd8(%rbp),%xmm0
  ucomisd D40(%rip),%xmm0
  jp     L23
  movsd  -0xd8(%rbp),%xmm0
  ucomisd D40(%rip),%xmm0
  je     L14
L23:
  lea    -0xb8(%rbp),%rcx
  lea    -0xb0(%rbp),%rdx
  movsd  -0xd8(%rbp),%xmm0
  mov    D40(%rip),%rax
  mov    %rcx,%rsi
  mov    %rdx,%rdi
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <fk5prec@plt>
L14:
  movsd  -0xb8(%rbp),%xmm0
  mov    -0xb0(%rbp),%rax
  lea    -0x90(%rbp),%rdx
  mov    %rdx,%rdi
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <slaDcs2c@plt>
  movsd  -0xd8(%rbp),%xmm0
  movsd  D40(%rip),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D138(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0xa0(%rbp)
  movsd  -0xa0(%rbp),%xmm1
  movsd  D98(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D63(%rip),%xmm1
  subsd  %xmm1,%xmm0
  mulsd  -0xa0(%rbp),%xmm0
  movsd  D30(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0xa0(%rbp),%xmm1
  movsd  D125(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  -0xa8(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x98(%rbp)
  lea    -0x50(%rbp),%rdx
  mov    -0x98(%rbp),%rax
  mov    %rdx,%rsi
  pxor   %xmm2,%xmm2
  pxor   %xmm1,%xmm1
  movq   %rax,%xmm0
  lea    D129(%rip),%rax
  mov    %rax,%rdi
  mov    $0x3,%eax
  call   <slaDeuler@plt>
  lea    -0x70(%rbp),%rdx
  lea    -0x90(%rbp),%rcx
  lea    -0x50(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <slaDmxv@plt>
  lea    -0xb8(%rbp),%rdx
  lea    -0xb0(%rbp),%rcx
  lea    -0x70(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <slaDcc2s@plt>
  mov    -0xb0(%rbp),%rax
  movq   %rax,%xmm0
  mov    $0x1,%eax
  call   <slaDranrm@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0xb0(%rbp)
  mov    -0xb8(%rbp),%rax
  movq   %rax,%xmm0
  mov    $0x1,%eax
  call   <slaDrange@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0xb8(%rbp)
  movsd  -0xb0(%rbp),%xmm1
  movsd  D168(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D38(%rip),%xmm1
  divsd  %xmm1,%xmm0
  mov    -0xc8(%rbp),%rax
  movsd  %xmm0,(%rax)
  movsd  -0xb8(%rbp),%xmm1
  movsd  D168(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D38(%rip),%xmm1
  divsd  %xmm1,%xmm0
  mov    -0xd0(%rbp),%rax
  movsd  %xmm0,(%rax)
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L28
  call   <__stack_chk_fail@plt>
L28:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D181
type: byte[8]
name: extract_symbolic_data
arguments: label: D38
type: f64
name: extract_symbolic_data
arguments: label: D168
type: f64
name: extract_symbolic_data
arguments: label: D40
type: f64
name: extract_symbolic_data
arguments: label: D138
type: f64
name: extract_symbolic_data
arguments: label: D98
type: f64
name: extract_symbolic_data
arguments: label: D63
type: f64
name: extract_symbolic_data
arguments: label: D30
type: f64
name: extract_symbolic_data
arguments: label: D125
type: f64
name: extract_symbolic_data
arguments: label: D129
type: string

tool: {"D181": [0x9d,0x8f,0xff,0xb2,0xa5,0x55,0xd4,0x3e]}

tool: D38: 3.141592653589793

tool: D168: 180

tool: D40: 2000

tool: D138: 0.01

tool: D98: 0.001813

tool: D63: 0.00059

tool: D30: 46.815

tool: D125: 84381.448

tool: D129: X

assistant: ```c
void fk52ecl(double *dtheta, double *dphi, double epoch) {
  double t, eps0, rphi, rtheta;
  double rmat[3][3];
  double das2r = 4.8481368110953599358991410235794797595635330237270e-6;
  double v1[3], v2[3];
  void fk5prec();
  rtheta = ((*dtheta) * 3.141592653589793238462643 / 180.);
  rphi = ((*dphi) * 3.141592653589793238462643 / 180.);
  if (epoch != 2000.0)
    fk5prec(2000.0, epoch, &rtheta, &rphi);
  slaDcs2c(rtheta, rphi, v1);
  t = (epoch - 2000.0) * 0.01;
  eps0 = das2r * (84381.448 + (-46.8150 + (-0.00059 + 0.001813 * t) * t) * t);
  slaDeuler("X", eps0, 0.0, 0.0, rmat);
  slaDmxv(rmat, v1, v2);
  slaDcc2s(v2, &rtheta, &rphi);
  rtheta = slaDranrm(rtheta);
  rphi = slaDrange(rphi);
  *dtheta = ((rtheta)*180. / 3.141592653589793238462643);
  *dphi = ((rphi)*180. / 3.141592653589793238462643);
}
```