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

```asm
<bslipds>:
  endbr64
  sub    $0x78,%rsp
  movsd  (%rsi),%xmm6
  movsd  0x8(%rsi),%xmm8
  pxor   %xmm9,%xmm9
  movsd  0x10(%rsi),%xmm5
  movapd %xmm6,%xmm4
  subsd  0x50(%rdx),%xmm4
  movapd %xmm8,%xmm12
  mulsd  %xmm8,%xmm12
  movapd %xmm5,%xmm3
  subsd  0x60(%rdx),%xmm3
  movapd %xmm4,%xmm2
  mulsd  %xmm4,%xmm2
  movapd %xmm3,%xmm0
  mulsd  %xmm3,%xmm0
  addsd  %xmm12,%xmm2
  addsd  %xmm0,%xmm2
  ucomisd %xmm2,%xmm9
  ja     L69
  sqrtsd %xmm2,%xmm2
L66:
  movsd  0x80(%rdx),%xmm13
  movsd  D4(%rip),%xmm11
  ucomisd %xmm11,%xmm13
  jp     L35
  jne    L35
  movsd  (%rdx),%xmm7
  movapd %xmm2,%xmm0
  subsd  0x20(%rdx),%xmm0
  movq   D22(%rip),%xmm10
  xorpd  %xmm10,%xmm7
  mulsd  %xmm0,%xmm7
L93:
  movapd %xmm9,%xmm1
  subsd  0x68(%rdx),%xmm6
  subsd  0x78(%rdx),%xmm5
  maxsd  %xmm7,%xmm1
  movapd %xmm5,%xmm0
  mulsd  %xmm5,%xmm0
  movapd %xmm1,%xmm7
  movapd %xmm6,%xmm1
  mulsd  %xmm6,%xmm1
  addsd  %xmm12,%xmm1
  addsd  %xmm0,%xmm1
  ucomisd %xmm1,%xmm9
  ja     L15
  sqrtsd %xmm1,%xmm1
L16:
  ucomisd %xmm11,%xmm13
  jp     L19
  jne    L19
  movsd  0x8(%rdx),%xmm0
  xorpd  %xmm10,%xmm0
  movapd %xmm1,%xmm10
  subsd  0x28(%rdx),%xmm10
  mulsd  %xmm10,%xmm0
L17:
  divsd  %xmm2,%xmm4
  maxsd  %xmm0,%xmm9
  movapd %xmm9,%xmm0
  movsd  0x18(%rsi),%xmm9
  movsd  %xmm9,(%rcx)
  movsd  0x20(%rsi),%xmm9
  movsd  %xmm9,0x8(%rcx)
  movsd  0x28(%rsi),%xmm9
  movsd  %xmm9,0x10(%rcx)
  divsd  %xmm1,%xmm6
  mulsd  %xmm7,%xmm4
  divsd  %xmm2,%xmm3
  mulsd  %xmm0,%xmm6
  addsd  %xmm6,%xmm4
  divsd  0x40(%rdx),%xmm4
  movsd  %xmm4,0x18(%rcx)
  movapd %xmm8,%xmm4
  divsd  %xmm2,%xmm4
  mulsd  %xmm7,%xmm3
  divsd  %xmm1,%xmm8
  mulsd  %xmm7,%xmm4
  divsd  %xmm1,%xmm5
  mulsd  %xmm0,%xmm8
  addsd  %xmm8,%xmm4
  divsd  0x40(%rdx),%xmm4
  addsd  0x48(%rdx),%xmm4
  movsd  %xmm4,0x20(%rcx)
  mulsd  %xmm0,%xmm5
  addsd  %xmm5,%xmm3
  divsd  0x40(%rdx),%xmm3
  movsd  %xmm3,0x28(%rcx)
  add    $0x78,%rsp
  ret
  nopl   (%rax)
L35:
  movsd  0x8(%rdx),%xmm7
  movapd %xmm2,%xmm0
  subsd  0x28(%rdx),%xmm0
  movq   D22(%rip),%xmm10
  xorpd  %xmm10,%xmm7
  mulsd  %xmm0,%xmm7
  jmp    L93
  nopl   (%rax)
L19:
  movsd  (%rdx),%xmm0
  xorpd  %xmm10,%xmm0
  movapd %xmm1,%xmm10
  subsd  0x20(%rdx),%xmm10
  mulsd  %xmm10,%xmm0
  jmp    L17
L69:
  movapd %xmm2,%xmm0
  mov    %rcx,0x48(%rsp)
  mov    %rdx,0x40(%rsp)
  mov    %rsi,0x38(%rsp)
  movsd  %xmm3,0x30(%rsp)
  movsd  %xmm4,0x28(%rsp)
  movsd  %xmm12,0x20(%rsp)
  movsd  %xmm8,0x18(%rsp)
  movsd  %xmm5,0x10(%rsp)
  movsd  %xmm6,0x8(%rsp)
  call   <sqrt@plt>
  mov    0x48(%rsp),%rcx
  mov    0x40(%rsp),%rdx
  pxor   %xmm9,%xmm9
  mov    0x38(%rsp),%rsi
  movsd  0x30(%rsp),%xmm3
  movapd %xmm0,%xmm2
  movsd  0x28(%rsp),%xmm4
  movsd  0x20(%rsp),%xmm12
  movsd  0x18(%rsp),%xmm8
  movsd  0x10(%rsp),%xmm5
  movsd  0x8(%rsp),%xmm6
  jmp    L66
L15:
  movapd %xmm1,%xmm0
  mov    %rcx,0x58(%rsp)
  mov    %rdx,0x50(%rsp)
  mov    %rsi,0x48(%rsp)
  movaps %xmm10,0x60(%rsp)
  movsd  %xmm5,0x40(%rsp)
  movsd  %xmm6,0x38(%rsp)
  movsd  %xmm2,0x30(%rsp)
  movsd  %xmm3,0x28(%rsp)
  movsd  %xmm4,0x20(%rsp)
  movsd  %xmm7,0x18(%rsp)
  movsd  %xmm13,0x10(%rsp)
  movsd  %xmm8,0x8(%rsp)
  call   <sqrt@plt>
  mov    0x58(%rsp),%rcx
  mov    0x50(%rsp),%rdx
  pxor   %xmm9,%xmm9
  mov    D4(%rip),%rax
  mov    0x48(%rsp),%rsi
  movapd %xmm0,%xmm1
  movapd 0x60(%rsp),%xmm10
  movsd  0x40(%rsp),%xmm5
  movsd  0x38(%rsp),%xmm6
  movsd  0x30(%rsp),%xmm2
  movq   %rax,%xmm11
  movsd  0x28(%rsp),%xmm3
  movsd  0x20(%rsp),%xmm4
  movsd  0x18(%rsp),%xmm7
  movsd  0x10(%rsp),%xmm13
  movsd  0x8(%rsp),%xmm8
  jmp    L16
```

tool_calls: name: disassemble_data
arguments: label: D4
type_guessed: f64
name: disassemble_data
arguments: label: D22
type_guessed: f32[2]

tool: D4: 1

tool: {"D22": [0.0,-0.0]}

assistant: ```c
void bslipds(unsigned n, double t, double *Y, double *p, double *f) {
  double l1, l2, F1, Fx1, Fy1, Fz1, Fx2, Fy2, Fz2, F2;
  double xr1, zr1, xr2, zr2;
  xr1 = Y[0] - p[10];
  zr1 = Y[2] - p[12];
  l1 = sqrt(xr1 * xr1 + Y[1] * Y[1] + zr1 * zr1);
  if (p[16] == 1.) {
    F1 = -p[0] * (l1 - p[4]);
  } else {
    F1 = -p[1] * (l1 - p[5]);
  }
  if (F1 < 0.) {
    F1 = 0.;
  }
  xr2 = Y[0] - p[13];
  zr2 = Y[2] - p[15];
  l2 = sqrt(xr2 * xr2 + Y[1] * Y[1] + zr2 * zr2);
  if (p[16] == 1.) {
    F2 = -p[1] * (l2 - p[5]);
  } else {
    F2 = -p[0] * (l2 - p[4]);
  }
  if (F2 < 0.) {
    F2 = 0.;
  }
  Fx1 = xr1 / l1 * F1;
  Fy1 = Y[1] / l1 * F1;
  Fz1 = zr1 / l1 * F1;
  Fx2 = xr2 / l2 * F2;
  Fy2 = Y[1] / l2 * F2;
  Fz2 = zr2 / l2 * F2;
  f[0] = Y[3];
  f[1] = Y[4];
  f[2] = Y[5];
  f[3] = (Fx1 + Fx2) / p[8];
  f[4] = (Fy1 + Fy2) / p[8] + p[9];
  f[5] = (Fz1 + Fz2) / p[8];
}
```