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

```asm
<ts2i>:
  endbr64
  push   %r15
  pxor   %xmm5,%xmm5
  mov    %rdx,%r15
  push   %r14
  mov    %rsi,%r14
  push   %r13
  mov    %r9,%r13
  push   %r12
  mov    %rcx,%r12
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  sub    $0x28,%rsp
  addsd  D257(%rip),%xmm0
  movsd  D207(%rip),%xmm1
  mov    %r8,0x8(%rsp)
  mov    0x60(%rsp),%ebx
  comisd %xmm0,%xmm5
  ja     L111
  movsd  D86(%rip),%xmm1
L111:
  test   %ebx,%ebx
  jle    L81
  cmp    $0x1,%ebx
  je     L5
  cmp    $0x2,%ebx
  je     L54
  cmp    $0x3,%ebx
  je     L106
  movsd  D37(%rip),%xmm4
  mov    $0x1,%eax
  mulsd  %xmm4,%xmm0
  movsd  %xmm4,0x10(%rsp)
  addsd  %xmm1,%xmm0
  call   <dint@plt>
  pxor   %xmm2,%xmm2
  movsd  0x10(%rsp),%xmm4
  cvtsi2sd %eax,%xmm2
L121:
  movapd %xmm2,%xmm3
  movsd  D270(%rip),%xmm1
  mov    $0x2,%eax
  movsd  %xmm2,0x18(%rsp)
  divsd  %xmm4,%xmm3
  movapd %xmm3,%xmm0
  movsd  %xmm3,0x10(%rsp)
  divsd  D213(%rip),%xmm0
  call   <dmod@plt>
  movsd  0x10(%rsp),%xmm3
  movsd  D226(%rip),%xmm1
  mov    %eax,(%r12)
  mov    $0x2,%eax
  movapd %xmm3,%xmm0
  divsd  %xmm1,%xmm0
  call   <dmod@plt>
  mov    0x8(%rsp),%rdi
  movsd  0x10(%rsp),%xmm3
  mov    %eax,(%rdi)
  mov    D226(%rip),%rax
  movapd %xmm3,%xmm0
  movq   %rax,%xmm1
  mov    $0x2,%eax
  call   <dmod@plt>
  pxor   %xmm0,%xmm0
  movsd  0x18(%rsp),%xmm2
  divsd  D249(%rip),%xmm2
  cvtsi2sd %eax,%xmm0
  mov    $0x1,%eax
  movsd  %xmm0,0x0(%r13)
  movsd  D48(%rip),%xmm0
  addsd  %xmm2,%xmm0
  call   <dint@plt>
  pxor   %xmm0,%xmm0
  pxor   %xmm6,%xmm6
  movsd  D47(%rip),%xmm2
  cvtsi2sd %eax,%xmm0
  movsd  D20(%rip),%xmm3
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  addsd  D135(%rip),%xmm1
  cvttsd2si %xmm1,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  mov    %eax,0x10(%rsp)
  mov    $0x3,%eax
  mulsd  %xmm2,%xmm1
  movsd  D72(%rip),%xmm2
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  addsd  D48(%rip),%xmm1
  cvttsd2si %xmm1,%edi
  pxor   %xmm1,%xmm1
  cmp    %eax,%edi
  cmovg  %eax,%edi
  cvtsi2sd %edi,%xmm1
  mulsd  %xmm2,%xmm1
  movsd  D145(%rip),%xmm2
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  addsd  D184(%rip),%xmm1
  cvttsd2si %xmm1,%r10d
  pxor   %xmm1,%xmm1
  cvtsi2sd %r10d,%xmm1
  mulsd  %xmm2,%xmm1
  movsd  D229(%rip),%xmm2
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  addsd  %xmm3,%xmm1
  cvttsd2si %xmm1,%r8d
  pxor   %xmm1,%xmm1
  cmp    %eax,%r8d
  cmovg  %eax,%r8d
  cvtsi2sd %r8d,%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  comisd %xmm0,%xmm6
  ja     L114
  addsd  %xmm3,%xmm0
  mov    $0x1,%edx
  mov    $0xcccccccd,%r11d
  cvttsd2si %xmm0,%ecx
  add    $0x1,%ecx
  mov    %ecx,(%r15)
  nopl   0x0(%rax,%rax,1)
L32:
  lea    -0x1(%rdx),%eax
  mov    %edx,%r9d
  imul   %r11,%rax
  shr    $0x22,%rax
  add    %edx,%eax
  add    $0x1,%edx
  and    $0x1,%eax
  cmp    $0x1,%eax
  sbb    %esi,%esi
  add    $0x1f,%esi
  cmp    %ecx,%esi
  jge    L73
  sub    %eax,%ecx
  sub    $0x1e,%ecx
  mov    %ecx,(%r15)
  cmp    $0xd,%edx
  jne    L32
  mov    $0x1,%ecx
  mov    $0x3,%edx
L2:
  imul   $0x64,%edi,%edi
  mov    %edx,(%r14)
  mov    %r13,%r9
  mov    %r15,%rdx
  imul   $0x190,0x10(%rsp),%eax
  mov    %ebx,0x60(%rsp)
  mov    %r14,%rsi
  add    %edi,%eax
  mov    %rbp,%rdi
  lea    (%rax,%r10,4),%eax
  add    %r8d,%eax
  mov    0x8(%rsp),%r8
  add    %ecx,%eax
  mov    %r12,%rcx
  mov    %eax,0x0(%rbp)
  add    $0x28,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1090 <fixdate@plt>
  cs nopw 0x0(%rax,%rax,1)
L114:
  movl   $0x1d,(%r15)
  xor    %ecx,%ecx
  mov    $0x2,%edx
  jmp    L2
L81:
  addsd  %xmm1,%xmm0
  mov    $0x1,%eax
  call   <dint@plt>
  pxor   %xmm2,%xmm2
  movsd  D37(%rip),%xmm4
  cvtsi2sd %eax,%xmm2
  mulsd  %xmm4,%xmm2
  jmp    L121
  nopw   0x0(%rax,%rax,1)
L73:
  mov    %edx,%eax
  mov    $0xaaaaaaab,%ecx
  imul   %rcx,%rax
  movslq %r9d,%rcx
  sar    $0x1f,%r9d
  imul   $0x2e8ba2e9,%rcx,%rcx
  shr    $0x23,%rax
  lea    (%rax,%rax,2),%eax
  sar    $0x21,%rcx
  shl    $0x2,%eax
  sub    %r9d,%ecx
  sub    %eax,%edx
  add    $0x1,%edx
  jmp    L2
  nopl   0x0(%rax)
L54:
  mulsd  D89(%rip),%xmm0
  mov    $0x1,%eax
  addsd  %xmm1,%xmm0
  call   <dint@plt>
  pxor   %xmm2,%xmm2
  movsd  D37(%rip),%xmm4
  cvtsi2sd %eax,%xmm2
  mulsd  D89(%rip),%xmm2
  jmp    L121
  nopl   0x0(%rax,%rax,1)
L106:
  mulsd  D212(%rip),%xmm0
  mov    $0x1,%eax
  addsd  %xmm1,%xmm0
  call   <dint@plt>
  pxor   %xmm2,%xmm2
  movsd  D37(%rip),%xmm4
  cvtsi2sd %eax,%xmm2
  mulsd  D112(%rip),%xmm2
  jmp    L121
  nopl   0x0(%rax,%rax,1)
L5:
  mulsd  D112(%rip),%xmm0
  mov    $0x1,%eax
  addsd  %xmm1,%xmm0
  call   <dint@plt>
  pxor   %xmm2,%xmm2
  movsd  D37(%rip),%xmm4
  cvtsi2sd %eax,%xmm2
  mulsd  D212(%rip),%xmm2
  jmp    L121
```

tool_calls: name: read_data
arguments: data_tag: D257
type_guessed: f64
name: read_data
arguments: data_tag: D207
type_guessed: f32[2]
name: read_data
arguments: data_tag: D86
type_guessed: f64
name: read_data
arguments: data_tag: D37
type_guessed: f64
name: read_data
arguments: data_tag: D270
type_guessed: f64
name: read_data
arguments: data_tag: D213
type_guessed: f64
name: read_data
arguments: data_tag: D226
type_guessed: f64
name: read_data
arguments: data_tag: D249
type_guessed: f64
name: read_data
arguments: data_tag: D48
type_guessed: f64
name: read_data
arguments: data_tag: D47
type_guessed: f64
name: read_data
arguments: data_tag: D20
type_guessed: f64
name: read_data
arguments: data_tag: D135
type_guessed: f64
name: read_data
arguments: data_tag: D72
type_guessed: f64
name: read_data
arguments: data_tag: D145
type_guessed: f64
name: read_data
arguments: data_tag: D184
type_guessed: f64
name: read_data
arguments: data_tag: D229
type_guessed: f64
name: read_data
arguments: data_tag: D89
type_guessed: f64
name: read_data
arguments: data_tag: D212
type_guessed: f64
name: read_data
arguments: data_tag: D112
type_guessed: f64

tool: D257: 61530883200

tool: {"D207": [0.0,-1.75]}

tool: D86: 0.5

tool: D37: 10000

tool: D270: 24

tool: D213: 3600

tool: D226: 60

tool: D249: 864000000

tool: D48: 1e-06

tool: D47: 146097

tool: D20: 1e-08

tool: D135: 1e-05

tool: D72: 36524

tool: D145: 1461

tool: D184: 1e-10

tool: D229: 365

tool: D89: 100

tool: D212: 1000

tool: D112: 10

assistant: ```c
void ts2i(tsec, iyr, imon, iday, ihr, imn, sec, ndsec) double tsec;
int *iyr;
int *imon;
int *iday;
int *ihr;
int *imn;
double *sec;
int ndsec;
{
  double t, days, ts, dts;
  int nc, nc4, nly, ny, m, im;
  ts = tsec + 61530883200.0;
  if (ts < 0.0)
    dts = -0.5;
  else
    dts = 0.5;
  if (ndsec < 1)
    t = dint(ts + dts) * 10000.0;
  else if (ndsec < 2)
    t = dint(ts * 10.0 + dts) * 1000.0;
  else if (ndsec < 3)
    t = dint(ts * 100.0 + dts) * 100.0;
  else if (ndsec < 4)
    t = dint(ts * 1000.0 + dts) * 10.0;
  else
    t = dint(ts * 10000.0 + dts);
  ts = t / 10000.0;
  *ihr = (int)(dmod(ts / 3600.0, 24.0));
  *imn = (int)(dmod(ts / 60.0, 60.0));
  *sec = dmod(ts, 60.0);
  days = dint((t / 864000000.0) + 0.000001);
  nc4 = (int)((days / 146097.0) + 0.00001);
  days = days - (146097.0 * (double)(nc4));
  nc = (int)((days / 36524.0) + 0.000001);
  if (nc > 3)
    nc = 3;
  days = days - (36524.0 * nc);
  nly = (int)((days / 1461.0) + 0.0000000001);
  days = days - (1461.0 * (double)nly);
  ny = (int)((days / 365.0) + 0.00000001);
  if (ny > 3)
    ny = 3;
  days = days - (365.0 * (double)ny);
  if (days < 0) {
    m = 0;
    *iday = 29;
  } else {
    *iday = (int)(days + 0.00000001) + 1;
    for (m = 1; m <= 12; m++) {
      im = (m + ((m - 1) / 5)) % 2;
      if (*iday - 1 < im + 30)
        break;
      *iday = *iday - im - 30;
    }
  }
  *imon = ((m + 1) % 12) + 1;
  *iyr = nc4 * 400 + nc * 100 + nly * 4 + ny + m / 11;
  fixdate(iyr, imon, iday, ihr, imn, sec, ndsec);
  return;
}
```