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

```asm
<linear_GRP_2D_solver_Edir>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xf8,%rsp
  mov    %rdi,%r13
  mov    %rsi,%rbx
  mov    %rdx,%r12
  movsd  %xmm0,0x38(%rsp)
  movsd  %xmm1,0x30(%rsp)
  movsd  %xmm2,0x8(%rsp)
  movsd  %xmm3,0x58(%rsp)
  movsd  %xmm4,0x60(%rsp)
  movsd  %xmm5,0x18(%rsp)
  movsd  %xmm6,0x10(%rsp)
  movsd  %xmm7,0x48(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0xe8(%rsp)
  xor    %eax,%eax
  movsd  0x178(%rsp),%xmm0
  mulsd  0x158(%rsp),%xmm0
  divsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L574
  sqrtsd %xmm0,%xmm0
  movsd  %xmm0,0x28(%rsp)
L95:
  movsd  0x178(%rsp),%xmm0
  mulsd  0x160(%rsp),%xmm0
  divsd  0x8(%rsp),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L469
  sqrtsd %xmm0,%xmm0
  movsd  %xmm0,0x20(%rsp)
L591:
  movsd  0x158(%rsp),%xmm2
  subsd  0x160(%rsp),%xmm2
  movsd  0x30(%rsp),%xmm10
  movapd %xmm10,%xmm0
  movsd  0x8(%rsp),%xmm11
  subsd  %xmm11,%xmm0
  mulsd  %xmm0,%xmm0
  movsd  0x18(%rsp),%xmm7
  movapd %xmm7,%xmm1
  movsd  0x10(%rsp),%xmm5
  subsd  %xmm5,%xmm1
  mulsd  %xmm1,%xmm1
  addsd  %xmm1,%xmm0
  mulsd  %xmm2,%xmm2
  addsd  %xmm2,%xmm0
  movsd  0x180(%rsp),%xmm4
  comisd %xmm0,%xmm4
  jbe    L168
  movapd %xmm7,%xmm0
  movsd  0x28(%rsp),%xmm6
  subsd  %xmm6,%xmm0
  movsd  %xmm0,0x0(%r13)
  movapd %xmm5,%xmm0
  movsd  0x20(%rsp),%xmm13
  addsd  %xmm13,%xmm0
  movsd  %xmm0,0x8(%r13)
  movsd  D456(%rip),%xmm0
  movapd %xmm7,%xmm2
  addsd  %xmm5,%xmm2
  mulsd  %xmm0,%xmm2
  movsd  %xmm2,0xd0(%rsp)
  movsd  0x158(%rsp),%xmm4
  addsd  0x160(%rsp),%xmm4
  mulsd  %xmm0,%xmm4
  movsd  %xmm4,0xd8(%rsp)
  movapd %xmm6,%xmm0
  mulsd  %xmm10,%xmm0
  movsd  0x168(%rsp),%xmm1
  divsd  %xmm0,%xmm1
  movsd  0x48(%rsp),%xmm14
  addsd  %xmm14,%xmm1
  movapd %xmm6,%xmm0
  addsd  %xmm7,%xmm0
  mulsd  %xmm0,%xmm1
  movapd %xmm11,%xmm3
  mulsd  %xmm13,%xmm3
  movsd  0x170(%rsp),%xmm0
  divsd  %xmm3,%xmm0
  movsd  0x130(%rsp),%xmm3
  subsd  %xmm0,%xmm3
  subsd  %xmm13,%xmm5
  mulsd  %xmm5,%xmm3
  movapd %xmm1,%xmm5
  addsd  %xmm3,%xmm5
  movsd  D21(%rip),%xmm0
  mulsd  %xmm0,%xmm5
  movsd  %xmm5,0x8(%rbx)
  mulsd  %xmm10,%xmm0
  mulsd  %xmm6,%xmm0
  subsd  %xmm3,%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,0x18(%rbx)
  movsd  0x38(%rsp),%xmm12
  comisd %xmm12,%xmm2
  jbe    L546
  movsd  %xmm10,(%r12)
  movsd  %xmm2,0x8(%r12)
  movsd  0x138(%rsp),%xmm5
  movsd  %xmm5,0x10(%r12)
  movsd  %xmm4,0x18(%r12)
  movsd  0x8(%rbx),%xmm3
  movapd %xmm6,%xmm1
  mulsd  %xmm6,%xmm1
  movsd  0x58(%rsp),%xmm4
  mulsd  %xmm4,%xmm1
  movsd  0x168(%rsp),%xmm0
  subsd  %xmm1,%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm3,%xmm0
  divsd  %xmm6,%xmm0
  divsd  %xmm6,%xmm0
  mulsd  %xmm12,%xmm4
  addsd  %xmm4,%xmm0
  movsd  %xmm0,(%rbx)
  movapd %xmm14,%xmm0
  mulsd  %xmm12,%xmm0
  addsd  %xmm3,%xmm0
  movsd  %xmm0,0x8(%rbx)
  mulsd  0x148(%rsp),%xmm7
  movapd %xmm12,%xmm0
  mulsd  0x148(%rsp),%xmm0
  subsd  %xmm7,%xmm0
  movsd  %xmm0,0x10(%rbx)
  mulsd  0x168(%rsp),%xmm12
  movapd %xmm12,%xmm0
  addsd  0x18(%rbx),%xmm0
L335:
  movsd  %xmm0,0x18(%rbx)
L354:
  mov    0xe8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L236
  add    $0xf8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L574:
  call   <sqrt@plt>
  movsd  %xmm0,0x28(%rsp)
  jmp    L95
L469:
  call   <sqrt@plt>
  movsd  %xmm0,0x20(%rsp)
  jmp    L591
L546:
  movsd  0x8(%rsp),%xmm6
  movsd  %xmm6,(%r12)
  movsd  %xmm2,0x8(%r12)
  movsd  0x140(%rsp),%xmm3
  movsd  %xmm3,0x10(%r12)
  movsd  %xmm4,0x18(%r12)
  movsd  0x8(%rbx),%xmm3
  movsd  0x20(%rsp),%xmm7
  movapd %xmm7,%xmm1
  mulsd  %xmm7,%xmm1
  movsd  0x60(%rsp),%xmm6
  mulsd  %xmm6,%xmm1
  movsd  0x170(%rsp),%xmm0
  subsd  %xmm1,%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm3,%xmm0
  divsd  %xmm7,%xmm0
  divsd  %xmm7,%xmm0
  movapd %xmm6,%xmm1
  movsd  0x38(%rsp),%xmm6
  mulsd  %xmm6,%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rbx)
  movapd %xmm6,%xmm0
  mulsd  0x130(%rsp),%xmm0
  addsd  %xmm3,%xmm0
  movsd  %xmm0,0x8(%rbx)
  movsd  0x10(%rsp),%xmm1
  mulsd  0x150(%rsp),%xmm1
  movapd %xmm6,%xmm0
  mulsd  0x150(%rsp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x10(%rbx)
  mulsd  0x170(%rsp),%xmm6
  movapd %xmm6,%xmm0
  addsd  0x18(%rbx),%xmm0
  jmp    L335
L168:
  movsd  D488(%rip),%xmm0
  movsd  0x178(%rsp),%xmm4
  subsd  %xmm0,%xmm4
  movapd %xmm0,%xmm3
  addsd  0x178(%rsp),%xmm3
  movsd  %xmm3,0x68(%rsp)
  movsd  %xmm4,0x40(%rsp)
  movapd %xmm4,%xmm7
  divsd  %xmm3,%xmm7
  movsd  %xmm7,0x50(%rsp)
  lea    0xe0(%rsp),%rdx
  lea    0xd8(%rsp),%rsi
  lea    0xd0(%rsp),%rdi
  mov    $0x1f4,%ecx
  movsd  0x180(%rsp),%xmm7
  movsd  0x20(%rsp),%xmm6
  movsd  0x28(%rsp),%xmm5
  movsd  0x160(%rsp),%xmm4
  movsd  0x158(%rsp),%xmm3
  movsd  0x10(%rsp),%xmm2
  movsd  0x18(%rsp),%xmm1
  movsd  0x178(%rsp),%xmm0
  mov    $0x8,%eax
  call   <Riemann_solver_exact@plt>
  mov    0xe0(%rsp),%r15d
  test   %r15d,%r15d
  je     L387
  movsd  0xd8(%rsp),%xmm0
  divsd  0x158(%rsp),%xmm0
  movq   %xmm0,%r14
  movsd  D488(%rip),%xmm1
  divsd  0x178(%rsp),%xmm1
  call   <pow@plt>
  mulsd  0x30(%rsp),%xmm0
  movsd  %xmm0,0x80(%rsp)
  movsd  0x40(%rsp),%xmm1
  mulsd  D456(%rip),%xmm1
  divsd  0x178(%rsp),%xmm1
  movq   %r14,%xmm0
  call   <pow@plt>
  movsd  0x28(%rsp),%xmm4
  mulsd  %xmm4,%xmm0
  movsd  %xmm0,0x70(%rsp)
  movsd  0x18(%rsp),%xmm5
  subsd  %xmm4,%xmm5
  movq   %xmm5,%rbp
L77:
  mov    0xe4(%rsp),%r14d
  test   %r14d,%r14d
  je     L122
  movsd  0xd8(%rsp),%xmm0
  divsd  0x160(%rsp),%xmm0
  movsd  %xmm0,0x78(%rsp)
  movsd  D488(%rip),%xmm1
  divsd  0x178(%rsp),%xmm1
  call   <pow@plt>
  mulsd  0x8(%rsp),%xmm0
  movsd  %xmm0,0x88(%rsp)
  movsd  0x40(%rsp),%xmm1
  mulsd  D456(%rip),%xmm1
  divsd  0x178(%rsp),%xmm1
  movsd  0x78(%rsp),%xmm0
  call   <pow@plt>
  movsd  0x20(%rsp),%xmm7
  mulsd  %xmm7,%xmm0
  movsd  %xmm0,0x78(%rsp)
  movsd  0x10(%rsp),%xmm0
  addsd  %xmm7,%xmm0
L203:
  mov    %rbp,0x0(%r13)
  movsd  %xmm0,0x8(%r13)
  movq   %rbp,%xmm5
  movsd  0x38(%rsp),%xmm4
  comisd %xmm4,%xmm5
  jbe    L349
  movq   D150(%rip),%xmm0
  movsd  0x18(%rsp),%xmm6
  movapd %xmm6,%xmm1
  xorpd  %xmm0,%xmm1
  movsd  0x58(%rsp),%xmm7
  xorpd  %xmm7,%xmm0
  mulsd  %xmm6,%xmm0
  movsd  0x30(%rsp),%xmm5
  movapd %xmm5,%xmm2
  movsd  0x48(%rsp),%xmm3
  mulsd  %xmm3,%xmm2
  subsd  %xmm2,%xmm0
  movapd %xmm7,%xmm2
  mulsd  %xmm4,%xmm2
  addsd  %xmm2,%xmm0
  movsd  %xmm0,(%rbx)
  movapd %xmm3,%xmm0
  mulsd  %xmm1,%xmm0
  movsd  0x168(%rsp),%xmm2
  divsd  %xmm5,%xmm2
  subsd  %xmm2,%xmm0
  movapd %xmm4,%xmm2
  mulsd  %xmm3,%xmm2
  addsd  %xmm2,%xmm0
  movsd  %xmm0,0x8(%rbx)
  mulsd  0x148(%rsp),%xmm1
  movapd %xmm4,%xmm0
  mulsd  0x148(%rsp),%xmm0
  addsd  %xmm0,%xmm1
  movsd  %xmm1,0x10(%rbx)
  mulsd  0x168(%rsp),%xmm4
  movapd %xmm4,%xmm1
  movsd  0x28(%rsp),%xmm4
  movapd %xmm4,%xmm0
  mulsd  %xmm5,%xmm0
  mulsd  %xmm4,%xmm0
  mulsd  %xmm3,%xmm0
  movapd %xmm6,%xmm2
  mulsd  0x168(%rsp),%xmm2
  addsd  %xmm2,%xmm0
  subsd  %xmm0,%xmm1
  movsd  %xmm1,0x18(%rbx)
  movsd  %xmm5,(%r12)
  movsd  %xmm6,0x8(%r12)
  movsd  0x138(%rsp),%xmm6
  movsd  %xmm6,0x10(%r12)
  movsd  0x158(%rsp),%xmm4
  movsd  %xmm4,0x18(%r12)
  jmp    L354
L387:
  mov    0xd8(%rsp),%r14
  movsd  0x50(%rsp),%xmm7
  movapd %xmm7,%xmm0
  mulsd  0x158(%rsp),%xmm0
  movq   %r14,%xmm5
  addsd  %xmm5,%xmm0
  mulsd  0x30(%rsp),%xmm0
  movq   %r14,%xmm1
  mulsd  %xmm7,%xmm1
  addsd  0x158(%rsp),%xmm1
  movapd %xmm0,%xmm7
  divsd  %xmm1,%xmm7
  movsd  %xmm7,0x80(%rsp)
  movq   %r14,%xmm0
  mulsd  0x178(%rsp),%xmm0
  divsd  %xmm7,%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L361
  sqrtsd %xmm0,%xmm0
  movsd  %xmm0,0x70(%rsp)
L492:
  movq   %r14,%xmm0
  divsd  0x158(%rsp),%xmm0
  mulsd  0x68(%rsp),%xmm0
  addsd  0x40(%rsp),%xmm0
  mulsd  D456(%rip),%xmm0
  divsd  0x178(%rsp),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L167
  sqrtsd %xmm0,%xmm0
L286:
  mulsd  0x28(%rsp),%xmm0
  movsd  0x18(%rsp),%xmm6
  subsd  %xmm0,%xmm6
  movq   %xmm6,%rbp
  jmp    L77
L361:
  call   <sqrt@plt>
  movsd  %xmm0,0x70(%rsp)
  jmp    L492
L167:
  call   <sqrt@plt>
  jmp    L286
L122:
  movsd  0xd8(%rsp),%xmm7
  movsd  %xmm7,0x90(%rsp)
  movsd  0x50(%rsp),%xmm4
  movapd %xmm4,%xmm0
  mulsd  0x160(%rsp),%xmm0
  addsd  %xmm7,%xmm0
  mulsd  0x8(%rsp),%xmm0
  movapd %xmm7,%xmm1
  mulsd  %xmm4,%xmm1
  addsd  0x160(%rsp),%xmm1
  movapd %xmm0,%xmm6
  divsd  %xmm1,%xmm6
  movsd  %xmm6,0x88(%rsp)
  mulsd  0x178(%rsp),%xmm7
  movapd %xmm7,%xmm0
  divsd  %xmm6,%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L460
  sqrtsd %xmm0,%xmm0
  movsd  %xmm0,0x78(%rsp)
L275:
  movsd  0x90(%rsp),%xmm0
  divsd  0x160(%rsp),%xmm0
  mulsd  0x68(%rsp),%xmm0
  addsd  0x40(%rsp),%xmm0
  mulsd  D456(%rip),%xmm0
  divsd  0x178(%rsp),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L457
  sqrtsd %xmm0,%xmm0
L513:
  mulsd  0x20(%rsp),%xmm0
  addsd  0x10(%rsp),%xmm0
  jmp    L203
L460:
  call   <sqrt@plt>
  movsd  %xmm0,0x78(%rsp)
  jmp    L275
L457:
  call   <sqrt@plt>
  jmp    L513
L349:
  movsd  0x38(%rsp),%xmm6
  comisd %xmm0,%xmm6
  jbe    L404
  movq   D150(%rip),%xmm0
  movsd  0x10(%rsp),%xmm3
  movapd %xmm3,%xmm1
  xorpd  %xmm0,%xmm1
  movsd  0x60(%rsp),%xmm5
  xorpd  %xmm5,%xmm0
  mulsd  %xmm3,%xmm0
  movsd  0x8(%rsp),%xmm4
  movapd %xmm4,%xmm2
  mulsd  0x130(%rsp),%xmm2
  subsd  %xmm2,%xmm0
  movapd %xmm5,%xmm2
  mulsd  %xmm6,%xmm2
  addsd  %xmm2,%xmm0
  movsd  %xmm0,(%rbx)
  movapd %xmm1,%xmm0
  mulsd  0x130(%rsp),%xmm0
  movsd  0x170(%rsp),%xmm2
  divsd  %xmm4,%xmm2
  subsd  %xmm2,%xmm0
  movapd %xmm6,%xmm2
  mulsd  0x130(%rsp),%xmm2
  addsd  %xmm2,%xmm0
  movsd  %xmm0,0x8(%rbx)
  mulsd  0x150(%rsp),%xmm1
  movapd %xmm6,%xmm0
  mulsd  0x150(%rsp),%xmm0
  addsd  %xmm0,%xmm1
  movsd  %xmm1,0x10(%rbx)
  mulsd  0x170(%rsp),%xmm6
  movapd %xmm6,%xmm1
  movapd %xmm4,%xmm0
  movsd  0x20(%rsp),%xmm6
  mulsd  %xmm6,%xmm0
  mulsd  %xmm6,%xmm0
  mulsd  0x130(%rsp),%xmm0
  movapd %xmm3,%xmm2
  mulsd  0x170(%rsp),%xmm2
  addsd  %xmm2,%xmm0
  subsd  %xmm0,%xmm1
  movsd  %xmm1,0x18(%rbx)
  movsd  %xmm4,(%r12)
  movsd  %xmm3,0x8(%r12)
  movsd  0x140(%rsp),%xmm7
  movsd  %xmm7,0x10(%r12)
  movsd  0x160(%rsp),%xmm4
  movsd  %xmm4,0x18(%r12)
  jmp    L354
L404:
  test   %r15d,%r15d
  je     L238
  movsd  0xd0(%rsp),%xmm0
  subsd  0x70(%rsp),%xmm0
  comisd 0x38(%rsp),%xmm0
  ja     L588
  test   %r14d,%r14d
  je     L562
  movsd  0x78(%rsp),%xmm0
  addsd  0xd0(%rsp),%xmm0
  movsd  0x38(%rsp),%xmm4
  comisd %xmm0,%xmm4
  ja     L403
L562:
  movsd  D488(%rip),%xmm0
  divsd  0x80(%rsp),%xmm0
  movsd  0x70(%rsp),%xmm5
  divsd  %xmm5,%xmm0
  movsd  %xmm0,0x98(%rsp)
  movsd  D488(%rip),%xmm1
  movsd  0x50(%rsp),%xmm7
  addsd  %xmm7,%xmm1
  movsd  %xmm1,0x90(%rsp)
  movsd  D456(%rip),%xmm0
  divsd  %xmm7,%xmm0
  movsd  %xmm0,0xa0(%rsp)
  movapd %xmm0,%xmm1
  divsd  0x28(%rsp),%xmm5
  movq   %xmm5,%rbp
  movapd %xmm5,%xmm0
  call   <pow@plt>
  movq   %xmm0,%r13
  movsd  0x90(%rsp),%xmm1
  divsd  0x50(%rsp),%xmm1
  movq   %rbp,%xmm0
  call   <pow@plt>
  movq   %r13,%xmm4
  mulsd  0x90(%rsp),%xmm4
  movapd %xmm4,%xmm1
  movsd  0x50(%rsp),%xmm7
  mulsd  %xmm7,%xmm0
  addsd  %xmm0,%xmm1
  movapd %xmm7,%xmm0
  addsd  %xmm7,%xmm0
  addsd  D488(%rip),%xmm0
  divsd  %xmm0,%xmm1
  movsd  0x28(%rsp),%xmm2
  movapd %xmm2,%xmm3
  mulsd  0x58(%rsp),%xmm3
  movsd  %xmm3,0x90(%rsp)
  mulsd  %xmm3,%xmm2
  movsd  0x168(%rsp),%xmm0
  subsd  %xmm2,%xmm0
  divsd  0x40(%rsp),%xmm0
  divsd  0x30(%rsp),%xmm0
  mulsd  %xmm1,%xmm0
  movq   %xmm0,%r13
  movsd  0xa0(%rsp),%xmm1
  movq   %rbp,%xmm0
  call   <pow@plt>
  movsd  0x178(%rsp),%xmm1
  mulsd  0x168(%rsp),%xmm1
  movsd  0x28(%rsp),%xmm2
  divsd  %xmm2,%xmm1
  subsd  0x90(%rsp),%xmm1
  divsd  0x40(%rsp),%xmm1
  divsd  0x30(%rsp),%xmm1
  addsd  0x48(%rsp),%xmm1
  mulsd  %xmm2,%xmm0
  mulsd  %xmm0,%xmm1
  movq   %r13,%xmm4
  subsd  %xmm1,%xmm4
  movsd  %xmm4,0xa0(%rsp)
  mov    D488(%rip),%rax
  mov    %rax,0x90(%rsp)
L579:
  test   %r14d,%r14d
  je     L229
  movsd  D198(%rip),%xmm0
  divsd  0x88(%rsp),%xmm0
  movsd  0x78(%rsp),%xmm2
  divsd  %xmm2,%xmm0
  movsd  %xmm0,0xa8(%rsp)
  movsd  D488(%rip),%xmm1
  movsd  0x50(%rsp),%xmm4
  addsd  %xmm4,%xmm1
  movsd  %xmm1,0xb0(%rsp)
  movsd  D456(%rip),%xmm0
  divsd  %xmm4,%xmm0
  movsd  %xmm0,0xb8(%rsp)
  movapd %xmm0,%xmm1
  divsd  0x20(%rsp),%xmm2
  movq   %xmm2,%rbp
  movapd %xmm2,%xmm0
  call   <pow@plt>
  movq   %xmm0,%r13
  movsd  0xb0(%rsp),%xmm1
  divsd  0x50(%rsp),%xmm1
  movq   %rbp,%xmm0
  call   <pow@plt>
  movq   %r13,%xmm7
  mulsd  0xb0(%rsp),%xmm7
  movapd %xmm7,%xmm1
  movsd  0x50(%rsp),%xmm4
  mulsd  %xmm4,%xmm0
  addsd  %xmm0,%xmm1
  movapd %xmm4,%xmm0
  addsd  %xmm4,%xmm0
  addsd  D488(%rip),%xmm0
  divsd  %xmm0,%xmm1
  movsd  0x60(%rsp),%xmm4
  movsd  0x20(%rsp),%xmm3
  mulsd  %xmm3,%xmm4
  movsd  %xmm4,0xb0(%rsp)
  movapd %xmm4,%xmm2
  mulsd  %xmm3,%xmm2
  movsd  0x170(%rsp),%xmm0
  subsd  %xmm2,%xmm0
  divsd  0x40(%rsp),%xmm0
  divsd  0x8(%rsp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,0xc0(%rsp)
  movsd  0xb8(%rsp),%xmm1
  movq   %rbp,%xmm0
  call   <pow@plt>
  movsd  0x178(%rsp),%xmm2
  mulsd  0x170(%rsp),%xmm2
  movsd  0x20(%rsp),%xmm3
  divsd  %xmm3,%xmm2
  subsd  0xb0(%rsp),%xmm2
  divsd  0x40(%rsp),%xmm2
  divsd  0x8(%rsp),%xmm2
  movsd  0x130(%rsp),%xmm1
  subsd  %xmm2,%xmm1
  mulsd  %xmm3,%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0xc0(%rsp),%xmm0
  mov    D488(%rip),%rax
  movq   %rax,%xmm4
L423:
  movsd  0x50(%rsp),%xmm7
  movapd %xmm7,%xmm6
  mulsd  %xmm7,%xmm6
  movsd  %xmm6,0xb0(%rsp)
  movsd  0x90(%rsp),%xmm5
  movapd %xmm5,%xmm2
  movsd  0xa8(%rsp),%xmm6
  mulsd  %xmm6,%xmm2
  movsd  0x98(%rsp),%xmm3
  movapd %xmm3,%xmm1
  mulsd  %xmm4,%xmm1
  subsd  %xmm1,%xmm2
  movsd  0xa0(%rsp),%xmm15
  mulsd  %xmm15,%xmm6
  movapd %xmm6,%xmm1
  mulsd  %xmm0,%xmm3
  subsd  %xmm3,%xmm1
  movapd %xmm1,%xmm3
  divsd  %xmm2,%xmm3
  movsd  %xmm3,0x90(%rsp)
  mulsd  %xmm5,%xmm0
  movapd %xmm15,%xmm1
  mulsd  %xmm4,%xmm1
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm4
  divsd  %xmm2,%xmm4
  movsd  %xmm4,0x98(%rsp)
  mov    0xd0(%rsp),%r13
  movsd  0x38(%rsp),%xmm5
  movq   %r13,%xmm6
  comisd %xmm6,%xmm5
  jbe    L239
  movsd  0x88(%rsp),%xmm6
  movsd  %xmm6,(%r12)
  mov    %r13,0x8(%r12)
  movsd  0x140(%rsp),%xmm2
  movsd  %xmm2,0x10(%r12)
  mov    0xd8(%rsp),%rbp
  mov    %rbp,0x18(%r12)
  movq   %r13,%xmm1
  subsd  %xmm5,%xmm1
  movapd %xmm4,%xmm0
  mulsd  %xmm1,%xmm0
  divsd  %xmm6,%xmm0
  movsd  0x78(%rsp),%xmm2
  divsd  %xmm2,%xmm0
  divsd  %xmm2,%xmm0
  addsd  %xmm3,%xmm0
  movsd  %xmm0,0x8(%rbx)
  mulsd  %xmm6,%xmm1
  movsd  %xmm1,0x18(%rsp)
  movapd %xmm1,%xmm0
  mulsd  %xmm3,%xmm0
  movapd %xmm0,%xmm3
  addsd  %xmm4,%xmm3
  movq   %xmm3,%r15
  movsd  %xmm3,0x18(%rbx)
  test   %r14d,%r14d
  je     L476
  movapd %xmm7,%xmm1
  addsd  D488(%rip),%xmm1
  movapd %xmm2,%xmm0
  divsd  0x20(%rsp),%xmm0
  divsd  %xmm7,%xmm1
  call   <pow@plt>
  movapd %xmm0,%xmm2
  movsd  0x60(%rsp),%xmm3
  movsd  0x20(%rsp),%xmm4
  mulsd  %xmm4,%xmm3
  movapd %xmm3,%xmm1
  mulsd  %xmm4,%xmm1
  movsd  0x170(%rsp),%xmm3
  subsd  %xmm1,%xmm3
  movapd %xmm3,%xmm0
  movsd  0x18(%rsp),%xmm1
  mulsd  %xmm2,%xmm1
  mulsd  %xmm1,%xmm0
  movsd  0x8(%rsp),%xmm4
  divsd  %xmm4,%xmm0
  movq   %r15,%xmm3
  addsd  %xmm3,%xmm0
  movsd  0x78(%rsp),%xmm2
  divsd  %xmm2,%xmm0
  divsd  %xmm2,%xmm0
  movsd  %xmm0,(%rbx)
  movsd  0x8(%r12),%xmm0
  xorpd  D150(%rip),%xmm0
  mulsd  0x150(%rsp),%xmm0
  mulsd  (%r12),%xmm0
  divsd  %xmm4,%xmm0
  movsd  0x38(%rsp),%xmm1
  mulsd  0x150(%rsp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,0x10(%rbx)
  jmp    L354
L588:
  movsd  0x28(%rsp),%xmm5
  movapd %xmm5,%xmm0
  movsd  0x38(%rsp),%xmm4
  addsd  %xmm4,%xmm0
  addsd  %xmm0,%xmm0
  movsd  0x40(%rsp),%xmm2
  divsd  %xmm2,%xmm0
  addsd  0x18(%rsp),%xmm0
  mulsd  0x50(%rsp),%xmm0
  movsd  %xmm0,0x8(%r12)
  subsd  %xmm4,%xmm0
  movsd  %xmm0,0x10(%rsp)
  movapd %xmm0,%xmm3
  divsd  %xmm5,%xmm3
  movapd %xmm3,%xmm0
  movsd  %xmm3,0x8(%rsp)
  movsd  0x178(%rsp),%xmm1
  addsd  %xmm1,%xmm1
  divsd  %xmm2,%xmm1
  call   <pow@plt>
  mulsd  0x158(%rsp),%xmm0
  movsd  %xmm0,0x18(%r12)
  mulsd  0x178(%rsp),%xmm0
  movsd  0x10(%rsp),%xmm3
  divsd  %xmm3,%xmm0
  divsd  %xmm3,%xmm0
  movsd  %xmm0,(%r12)
  movsd  0x58(%rsp),%xmm1
  movsd  0x28(%rsp),%xmm5
  mulsd  %xmm5,%xmm1
  movapd %xmm5,%xmm0
  movsd  %xmm1,0x58(%rsp)
  mulsd  %xmm1,%xmm0
  movsd  0x168(%rsp),%xmm1
  subsd  %xmm0,%xmm1
  movsd  %xmm1,0x18(%rsp)
  movsd  D488(%rip),%xmm8
  movsd  0x50(%rsp),%xmm6
  addsd  %xmm6,%xmm8
  movsd  %xmm8,0x20(%rsp)
  movsd  D456(%rip),%xmm0
  movapd %xmm0,%xmm15
  divsd  %xmm6,%xmm15
  movq   %xmm15,%r13
  movapd %xmm15,%xmm1
  movsd  0x8(%rsp),%xmm0
  call   <pow@plt>
  movq   %xmm0,%r14
  movsd  0x20(%rsp),%xmm9
  divsd  0x50(%rsp),%xmm9
  movq   %xmm9,%r15
  movapd %xmm9,%xmm1
  movsd  0x8(%rsp),%xmm0
  call   <pow@plt>
  movq   %xmm0,%rbp
  movq   %r13,%xmm1
  movsd  0x8(%rsp),%xmm0
  call   <pow@plt>
  movq   %r14,%xmm15
  mulsd  0x20(%rsp),%xmm15
  movapd %xmm15,%xmm1
  movq   %rbp,%xmm8
  movsd  0x50(%rsp),%xmm6
  mulsd  %xmm6,%xmm8
  addsd  %xmm8,%xmm1
  movapd %xmm6,%xmm2
  addsd  %xmm6,%xmm2
  addsd  D488(%rip),%xmm2
  divsd  %xmm2,%xmm1
  movsd  0x18(%rsp),%xmm6
  movsd  0x40(%rsp),%xmm7
  divsd  %xmm7,%xmm6
  movapd %xmm6,%xmm2
  movsd  0x30(%rsp),%xmm8
  divsd  %xmm8,%xmm2
  mulsd  %xmm2,%xmm1
  movsd  0x178(%rsp),%xmm2
  mulsd  0x168(%rsp),%xmm2
  movsd  0x28(%rsp),%xmm5
  divsd  %xmm5,%xmm2
  subsd  0x58(%rsp),%xmm2
  divsd  %xmm7,%xmm2
  divsd  %xmm8,%xmm2
  addsd  0x48(%rsp),%xmm2
  mulsd  %xmm5,%xmm0
  mulsd  %xmm0,%xmm2
  subsd  %xmm2,%xmm1
  movsd  %xmm1,0x8(%rbx)
  movsd  0x8(%r12),%xmm0
  movsd  0x38(%rsp),%xmm4
  subsd  %xmm4,%xmm0
  mulsd  (%r12),%xmm0
  mulsd  %xmm1,%xmm0
  movq   %xmm0,%rbp
  movsd  %xmm0,0x18(%rbx)
  movsd  0x8(%r12),%xmm0
  subsd  %xmm4,%xmm0
  mulsd  (%r12),%xmm0
  movsd  %xmm0,0x20(%rsp)
  movq   %r15,%xmm1
  movsd  0x8(%rsp),%xmm0
  call   <pow@plt>
  mulsd  0x20(%rsp),%xmm0
  mulsd  0x18(%rsp),%xmm0
  movsd  0x30(%rsp),%xmm5
  divsd  %xmm5,%xmm0
  movq   %rbp,%xmm4
  addsd  %xmm4,%xmm0
  movsd  0x10(%rsp),%xmm3
  divsd  %xmm3,%xmm0
  divsd  %xmm3,%xmm0
  movsd  %xmm0,(%rbx)
  movsd  0x138(%rsp),%xmm6
  movsd  %xmm6,0x10(%r12)
  movsd  0x8(%r12),%xmm0
  xorpd  D150(%rip),%xmm0
  mulsd  0x148(%rsp),%xmm0
  mulsd  (%r12),%xmm0
  divsd  %xmm5,%xmm0
  movsd  %xmm0,0x10(%rbx)
  jmp    L354
L136:
  call   <sqrt@plt>
  movq   %xmm0,%r13
  jmp    L536
L261:
  call   <sqrt@plt>
  movsd  %xmm0,0xa0(%rsp)
  jmp    L34
L62:
  call   <sqrt@plt>
  jmp    L483
L229:
  movsd  0xd8(%rsp),%xmm4
  movsd  %xmm4,0xa8(%rsp)
  movsd  0x68(%rsp),%xmm0
  mulsd  0x160(%rsp),%xmm0
  movsd  0x40(%rsp),%xmm1
  mulsd  %xmm4,%xmm1
  addsd  %xmm1,%xmm0
  mulsd  D456(%rip),%xmm0
  divsd  0x88(%rsp),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L600
  sqrtsd %xmm0,%xmm0
  movsd  %xmm0,0xb0(%rsp)
L515:
  movsd  0x40(%rsp),%xmm1
  mulsd  0x160(%rsp),%xmm1
  movsd  0x68(%rsp),%xmm0
  mulsd  0xa8(%rsp),%xmm0
  addsd  %xmm1,%xmm0
  mulsd  D456(%rip),%xmm0
  divsd  0x8(%rsp),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L606
  sqrtsd %xmm0,%xmm0
  movsd  %xmm0,0xb8(%rsp)
L610:
  movsd  0x50(%rsp),%xmm3
  movapd %xmm3,%xmm6
  mulsd  0x160(%rsp),%xmm6
  movsd  %xmm6,0xc0(%rsp)
  movsd  0xa8(%rsp),%xmm5
  addsd  %xmm6,%xmm5
  movsd  %xmm5,0xc8(%rsp)
  movsd  D488(%rip),%xmm0
  subsd  %xmm3,%xmm0
  mulsd  0x8(%rsp),%xmm5
  divsd  %xmm5,%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L425
  sqrtsd %xmm0,%xmm0
L604:
  movapd %xmm0,%xmm4
  mulsd  D456(%rip),%xmm4
  movsd  D488(%rip),%xmm5
  movsd  0x50(%rsp),%xmm2
  movapd %xmm2,%xmm1
  addsd  %xmm2,%xmm1
  addsd  %xmm5,%xmm1
  mulsd  0x160(%rsp),%xmm1
  movsd  0xa8(%rsp),%xmm7
  addsd  %xmm7,%xmm1
  mulsd  %xmm4,%xmm1
  movapd %xmm1,%xmm6
  movsd  0xc8(%rsp),%xmm1
  divsd  %xmm1,%xmm6
  addsd  D228(%rip),%xmm2
  mulsd  %xmm7,%xmm2
  addsd  0xc0(%rsp),%xmm2
  movq   D150(%rip),%xmm3
  xorpd  %xmm3,%xmm4
  mulsd  %xmm4,%xmm2
  divsd  %xmm1,%xmm2
  subsd  0x160(%rsp),%xmm7
  movapd %xmm7,%xmm1
  mulsd  D21(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  0x8(%rsp),%xmm9
  divsd  %xmm9,%xmm1
  movsd  0x88(%rsp),%xmm7
  movapd %xmm7,%xmm4
  movsd  0xb0(%rsp),%xmm0
  mulsd  %xmm0,%xmm4
  mulsd  %xmm6,%xmm4
  addsd  %xmm5,%xmm4
  movapd %xmm7,%xmm5
  movsd  0x78(%rsp),%xmm7
  mulsd  %xmm7,%xmm5
  mulsd  %xmm7,%xmm5
  divsd  %xmm5,%xmm0
  addsd  %xmm6,%xmm0
  xorpd  %xmm3,%xmm0
  movsd  %xmm0,0xa8(%rsp)
  movsd  0x20(%rsp),%xmm6
  movapd %xmm6,%xmm3
  mulsd  %xmm6,%xmm3
  mulsd  %xmm2,%xmm3
  addsd  %xmm1,%xmm3
  mulsd  %xmm9,%xmm3
  movsd  0xb8(%rsp),%xmm6
  movapd %xmm6,%xmm0
  subsd  %xmm3,%xmm0
  mulsd  0x130(%rsp),%xmm0
  mulsd  %xmm6,%xmm1
  mulsd  0x60(%rsp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  D198(%rip),%xmm1
  divsd  %xmm9,%xmm1
  mulsd  %xmm6,%xmm2
  addsd  %xmm1,%xmm2
  mulsd  0x170(%rsp),%xmm2
  addsd  %xmm2,%xmm0
  jmp    L423
L600:
  call   <sqrt@plt>
  movsd  %xmm0,0xb0(%rsp)
  jmp    L515
L606:
  call   <sqrt@plt>
  movsd  %xmm0,0xb8(%rsp)
  jmp    L610
L425:
  call   <sqrt@plt>
  jmp    L604
L476:
  movsd  0x68(%rsp),%xmm0
  mulsd  0x160(%rsp),%xmm0
  movq   %rbp,%xmm1
  mulsd  0x40(%rsp),%xmm1
  addsd  %xmm1,%xmm0
  mulsd  D456(%rip),%xmm0
  divsd  0x88(%rsp),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L461
  sqrtsd %xmm0,%xmm0
  movsd  %xmm0,0x18(%rsp)
L594:
  movq   %rbp,%xmm0
  mulsd  0x68(%rsp),%xmm0
  movsd  0x40(%rsp),%xmm1
  mulsd  0x160(%rsp),%xmm1
  addsd  %xmm1,%xmm0
  mulsd  D456(%rip),%xmm0
  divsd  0x8(%rsp),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L5
  sqrtsd %xmm0,%xmm0
L400:
  movq   %rbp,%xmm1
  movsd  0x50(%rsp),%xmm7
  mulsd  %xmm7,%xmm1
  addsd  0x160(%rsp),%xmm1
  movsd  0x8(%rsp),%xmm6
  movapd %xmm6,%xmm4
  mulsd  0x160(%rsp),%xmm4
  movsd  D488(%rip),%xmm3
  movapd %xmm3,%xmm2
  movsd  0xb0(%rsp),%xmm5
  subsd  %xmm5,%xmm2
  mulsd  %xmm2,%xmm4
  divsd  %xmm1,%xmm4
  divsd  %xmm1,%xmm4
  movq   %rbp,%xmm2
  mulsd  %xmm6,%xmm2
  subsd  %xmm3,%xmm5
  mulsd  %xmm5,%xmm2
  divsd  %xmm1,%xmm2
  divsd  %xmm1,%xmm2
  movapd %xmm7,%xmm5
  mulsd  0x160(%rsp),%xmm5
  movq   %rbp,%xmm3
  addsd  %xmm3,%xmm5
  divsd  %xmm1,%xmm5
  movsd  0x20(%rsp),%xmm3
  movapd %xmm3,%xmm1
  mulsd  %xmm2,%xmm1
  mulsd  %xmm3,%xmm1
  addsd  %xmm5,%xmm1
  movapd %xmm6,%xmm3
  xorpd  D150(%rip),%xmm3
  mulsd  %xmm3,%xmm1
  mulsd  0x130(%rsp),%xmm1
  movq   %r13,%xmm3
  movsd  0x18(%rsp),%xmm8
  addsd  %xmm8,%xmm3
  movsd  0x78(%rsp),%xmm6
  divsd  %xmm6,%xmm3
  divsd  %xmm6,%xmm3
  movq   %r13,%xmm6
  mulsd  %xmm4,%xmm6
  subsd  %xmm6,%xmm3
  movsd  0x98(%rsp),%xmm15
  mulsd  %xmm15,%xmm3
  movq   %r13,%xmm6
  movsd  0x88(%rsp),%xmm9
  mulsd  %xmm9,%xmm6
  mulsd  %xmm8,%xmm6
  mulsd  %xmm4,%xmm6
  movsd  0x90(%rsp),%xmm14
  mulsd  %xmm14,%xmm6
  addsd  %xmm6,%xmm3
  movapd %xmm5,%xmm6
  mulsd  %xmm0,%xmm6
  movsd  0x60(%rsp),%xmm11
  mulsd  %xmm11,%xmm6
  movapd %xmm2,%xmm7
  mulsd  %xmm0,%xmm7
  mulsd  0x170(%rsp),%xmm7
  addsd  %xmm7,%xmm6
  addsd  %xmm1,%xmm6
  movq   %r13,%xmm7
  mulsd  %xmm7,%xmm6
  subsd  %xmm6,%xmm3
  divsd  %xmm8,%xmm3
  mulsd  0x170(%rsp),%xmm2
  mulsd  %xmm11,%xmm5
  addsd  %xmm5,%xmm2
  mulsd  %xmm0,%xmm2
  addsd  %xmm1,%xmm2
  movapd %xmm9,%xmm5
  mulsd  %xmm8,%xmm5
  mulsd  %xmm14,%xmm5
  movapd %xmm15,%xmm1
  subsd  %xmm5,%xmm1
  mulsd  %xmm4,%xmm1
  addsd  %xmm2,%xmm1
  subsd  %xmm3,%xmm1
  movsd  0x10(%rsp),%xmm2
  addsd  %xmm0,%xmm2
  divsd  %xmm2,%xmm1
  movsd  0x38(%rsp),%xmm2
  mulsd  %xmm2,%xmm1
  addsd  %xmm3,%xmm1
  movsd  %xmm1,(%rbx)
  mulsd  0x150(%rsp),%xmm2
  movapd %xmm2,%xmm1
  mulsd  0x8(%r12),%xmm0
  mulsd  0x150(%rsp),%xmm0
  divsd  %xmm8,%xmm0
  subsd  %xmm0,%xmm1
  movsd  %xmm1,0x10(%rbx)
  jmp    L354
L461:
  call   <sqrt@plt>
  movsd  %xmm0,0x18(%rsp)
  jmp    L594
L5:
  call   <sqrt@plt>
  jmp    L400
L239:
  movsd  0x80(%rsp),%xmm5
  movsd  %xmm5,(%r12)
  mov    %r13,0x8(%r12)
  movsd  0x138(%rsp),%xmm6
  movsd  %xmm6,0x10(%r12)
  mov    0xd8(%rsp),%r14
  mov    %r14,0x18(%r12)
  movq   %r13,%xmm1
  subsd  0x38(%rsp),%xmm1
  movsd  0x98(%rsp),%xmm2
  movapd %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  divsd  %xmm5,%xmm0
  movsd  0x70(%rsp),%xmm4
  divsd  %xmm4,%xmm0
  divsd  %xmm4,%xmm0
  movsd  0x90(%rsp),%xmm3
  addsd  %xmm3,%xmm0
  movsd  %xmm0,0x8(%rbx)
  mulsd  %xmm5,%xmm1
  movsd  %xmm1,0x8(%rsp)
  movapd %xmm1,%xmm0
  mulsd  %xmm3,%xmm0
  movapd %xmm0,%xmm3
  addsd  %xmm2,%xmm3
  movsd  %xmm3,0x10(%rsp)
  movsd  %xmm3,0x18(%rbx)
  test   %r15d,%r15d
  je     L266
  movsd  0x50(%rsp),%xmm6
  movapd %xmm6,%xmm7
  addsd  D488(%rip),%xmm7
  movapd %xmm7,%xmm1
  movapd %xmm4,%xmm0
  divsd  0x28(%rsp),%xmm0
  divsd  %xmm6,%xmm1
  call   <pow@plt>
  movapd %xmm0,%xmm2
  movsd  0x58(%rsp),%xmm5
  movsd  0x28(%rsp),%xmm7
  mulsd  %xmm7,%xmm5
  movapd %xmm5,%xmm1
  mulsd  %xmm7,%xmm1
  movsd  0x168(%rsp),%xmm5
  subsd  %xmm1,%xmm5
  movapd %xmm5,%xmm0
  movsd  0x8(%rsp),%xmm1
  mulsd  %xmm2,%xmm1
  mulsd  %xmm1,%xmm0
  movsd  0x30(%rsp),%xmm7
  divsd  %xmm7,%xmm0
  addsd  0x10(%rsp),%xmm0
  movsd  0x70(%rsp),%xmm4
  divsd  %xmm4,%xmm0
  divsd  %xmm4,%xmm0
  movsd  %xmm0,(%rbx)
  movsd  0x8(%r12),%xmm0
  xorpd  D150(%rip),%xmm0
  mulsd  0x148(%rsp),%xmm0
  mulsd  (%r12),%xmm0
  divsd  %xmm7,%xmm0
  movsd  0x38(%rsp),%xmm1
  mulsd  0x148(%rsp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,0x10(%rbx)
  jmp    L354
L266:
  movsd  0x68(%rsp),%xmm0
  mulsd  0x158(%rsp),%xmm0
  movq   %r14,%xmm1
  mulsd  0x40(%rsp),%xmm1
  addsd  %xmm1,%xmm0
  mulsd  D456(%rip),%xmm0
  divsd  0x80(%rsp),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L161
  sqrtsd %xmm0,%xmm0
  movsd  %xmm0,0x8(%rsp)
L165:
  movsd  0x8(%rsp),%xmm3
  xorpd  D150(%rip),%xmm3
  movsd  %xmm3,0x10(%rsp)
  movq   %r14,%xmm5
  mulsd  0x68(%rsp),%xmm5
  movsd  0x40(%rsp),%xmm0
  mulsd  0x158(%rsp),%xmm0
  addsd  %xmm0,%xmm5
  mulsd  D456(%rip),%xmm5
  divsd  0x30(%rsp),%xmm5
  pxor   %xmm0,%xmm0
  ucomisd %xmm5,%xmm0
  ja     L312
  sqrtsd %xmm5,%xmm5
L25:
  movq   D150(%rip),%xmm4
  movapd %xmm5,%xmm3
  xorpd  %xmm4,%xmm3
  movq   %r14,%xmm6
  movsd  0x50(%rsp),%xmm8
  mulsd  %xmm8,%xmm6
  addsd  0x158(%rsp),%xmm6
  movsd  0x30(%rsp),%xmm15
  movapd %xmm15,%xmm0
  mulsd  0x158(%rsp),%xmm0
  movsd  D488(%rip),%xmm7
  movapd %xmm7,%xmm1
  movsd  0xb0(%rsp),%xmm2
  subsd  %xmm2,%xmm1
  mulsd  %xmm1,%xmm0
  divsd  %xmm6,%xmm0
  divsd  %xmm6,%xmm0
  movq   %r14,%xmm1
  mulsd  %xmm15,%xmm1
  subsd  %xmm7,%xmm2
  mulsd  %xmm2,%xmm1
  divsd  %xmm6,%xmm1
  divsd  %xmm6,%xmm1
  mulsd  0x158(%rsp),%xmm8
  movq   %r14,%xmm2
  addsd  %xmm2,%xmm8
  divsd  %xmm6,%xmm8
  movsd  0x28(%rsp),%xmm2
  movapd %xmm2,%xmm6
  mulsd  %xmm1,%xmm6
  mulsd  %xmm2,%xmm6
  addsd  %xmm8,%xmm6
  movapd %xmm15,%xmm2
  xorpd  %xmm4,%xmm2
  mulsd  %xmm2,%xmm6
  mulsd  0x48(%rsp),%xmm6
  movq   %r13,%xmm2
  movsd  0x8(%rsp),%xmm15
  subsd  %xmm15,%xmm2
  movsd  0x70(%rsp),%xmm7
  divsd  %xmm7,%xmm2
  divsd  %xmm7,%xmm2
  movq   %r13,%xmm7
  mulsd  %xmm0,%xmm7
  subsd  %xmm7,%xmm2
  movsd  0x98(%rsp),%xmm14
  mulsd  %xmm14,%xmm2
  movq   %r13,%xmm7
  movsd  0x80(%rsp),%xmm11
  mulsd  %xmm11,%xmm7
  movsd  0x10(%rsp),%xmm10
  mulsd  %xmm10,%xmm7
  mulsd  %xmm0,%xmm7
  movsd  0x90(%rsp),%xmm13
  mulsd  %xmm13,%xmm7
  addsd  %xmm7,%xmm2
  movapd %xmm3,%xmm7
  mulsd  %xmm8,%xmm7
  movsd  0x58(%rsp),%xmm12
  mulsd  %xmm12,%xmm7
  movapd %xmm3,%xmm9
  mulsd  %xmm1,%xmm9
  mulsd  0x168(%rsp),%xmm9
  addsd  %xmm9,%xmm7
  addsd  %xmm6,%xmm7
  movq   %r13,%xmm9
  mulsd  %xmm9,%xmm7
  subsd  %xmm7,%xmm2
  xorpd  %xmm4,%xmm2
  movapd %xmm2,%xmm7
  divsd  %xmm15,%xmm7
  mulsd  0x168(%rsp),%xmm1
  mulsd  %xmm12,%xmm8
  addsd  %xmm8,%xmm1
  mulsd  %xmm3,%xmm1
  addsd  %xmm6,%xmm1
  movapd %xmm11,%xmm6
  mulsd  %xmm10,%xmm6
  mulsd  %xmm13,%xmm6
  movapd %xmm14,%xmm2
  subsd  %xmm6,%xmm2
  mulsd  %xmm0,%xmm2
  addsd  %xmm2,%xmm1
  movapd %xmm1,%xmm0
  subsd  %xmm7,%xmm0
  movsd  0x18(%rsp),%xmm1
  subsd  %xmm5,%xmm1
  divsd  %xmm1,%xmm0
  movsd  0x38(%rsp),%xmm5
  mulsd  %xmm5,%xmm0
  addsd  %xmm7,%xmm0
  movsd  %xmm0,(%rbx)
  mulsd  0x148(%rsp),%xmm5
  movapd %xmm5,%xmm1
  mulsd  0x8(%r12),%xmm3
  mulsd  0x148(%rsp),%xmm3
  xorpd  %xmm4,%xmm3
  movapd %xmm3,%xmm0
  divsd  %xmm15,%xmm0
  subsd  %xmm0,%xmm1
  movsd  %xmm1,0x10(%rbx)
  jmp    L354
L161:
  call   <sqrt@plt>
  movsd  %xmm0,0x8(%rsp)
  jmp    L165
L312:
  movapd %xmm5,%xmm0
  call   <sqrt@plt>
  movapd %xmm0,%xmm5
  jmp    L25
L238:
  test   %r14d,%r14d
  jne    L194
L407:
  movsd  0xd8(%rsp),%xmm7
  movsd  %xmm7,0x90(%rsp)
  movsd  0x68(%rsp),%xmm0
  mulsd  0x158(%rsp),%xmm0
  movsd  0x40(%rsp),%xmm1
  mulsd  %xmm7,%xmm1
  addsd  %xmm1,%xmm0
  mulsd  D456(%rip),%xmm0
  divsd  0x80(%rsp),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L136
  sqrtsd %xmm0,%xmm0
  movq   %xmm0,%r13
L536:
  movq   %r13,%xmm3
  xorpd  D150(%rip),%xmm3
  movq   %xmm3,%rbp
  movsd  0x40(%rsp),%xmm1
  mulsd  0x158(%rsp),%xmm1
  movsd  0x68(%rsp),%xmm0
  mulsd  0x90(%rsp),%xmm0
  addsd  %xmm1,%xmm0
  mulsd  D456(%rip),%xmm0
  divsd  0x30(%rsp),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L261
  sqrtsd %xmm0,%xmm0
  movsd  %xmm0,0xa0(%rsp)
L34:
  movsd  0xa0(%rsp),%xmm4
  xorpd  D150(%rip),%xmm4
  movsd  %xmm4,0xb0(%rsp)
  movsd  0x50(%rsp),%xmm7
  movapd %xmm7,%xmm4
  mulsd  0x158(%rsp),%xmm4
  movsd  %xmm4,0x98(%rsp)
  movsd  0x90(%rsp),%xmm6
  addsd  %xmm4,%xmm6
  movsd  %xmm6,0xa8(%rsp)
  movsd  D488(%rip),%xmm0
  subsd  %xmm7,%xmm0
  mulsd  0x30(%rsp),%xmm6
  divsd  %xmm6,%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L62
  sqrtsd %xmm0,%xmm0
L483:
  mulsd  D456(%rip),%xmm0
  movsd  D488(%rip),%xmm3
  movsd  0x50(%rsp),%xmm5
  movapd %xmm5,%xmm1
  addsd  %xmm5,%xmm1
  addsd  %xmm3,%xmm1
  mulsd  0x158(%rsp),%xmm1
  movsd  0x90(%rsp),%xmm7
  addsd  %xmm7,%xmm1
  mulsd  %xmm0,%xmm1
  movapd %xmm1,%xmm2
  movsd  0xa8(%rsp),%xmm6
  divsd  %xmm6,%xmm2
  movapd %xmm0,%xmm1
  xorpd  D150(%rip),%xmm1
  addsd  D228(%rip),%xmm5
  movapd %xmm5,%xmm4
  mulsd  %xmm7,%xmm4
  addsd  0x98(%rsp),%xmm4
  mulsd  %xmm1,%xmm4
  divsd  %xmm6,%xmm4
  subsd  0x158(%rsp),%xmm7
  movapd %xmm7,%xmm0
  mulsd  %xmm1,%xmm0
  movsd  0x30(%rsp),%xmm7
  divsd  %xmm7,%xmm0
  movq   %rbp,%xmm1
  movsd  0x80(%rsp),%xmm5
  mulsd  %xmm5,%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm3
  movsd  %xmm3,0x90(%rsp)
  movapd %xmm5,%xmm3
  movsd  0x70(%rsp),%xmm5
  mulsd  %xmm5,%xmm3
  mulsd  %xmm5,%xmm3
  movq   %r13,%xmm1
  divsd  %xmm3,%xmm1
  addsd  %xmm2,%xmm1
  movsd  %xmm1,0x98(%rsp)
  movsd  0x28(%rsp),%xmm2
  movapd %xmm2,%xmm1
  mulsd  %xmm2,%xmm1
  mulsd  %xmm4,%xmm1
  addsd  %xmm0,%xmm1
  mulsd  %xmm7,%xmm1
  movsd  0xa0(%rsp),%xmm3
  subsd  %xmm3,%xmm1
  mulsd  0x48(%rsp),%xmm1
  mulsd  %xmm3,%xmm0
  mulsd  0x58(%rsp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  D198(%rip),%xmm1
  divsd  %xmm7,%xmm1
  movsd  0xb0(%rsp),%xmm2
  mulsd  %xmm4,%xmm2
  subsd  %xmm2,%xmm1
  mulsd  0x168(%rsp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,0xa0(%rsp)
  jmp    L579
L194:
  movsd  0x78(%rsp),%xmm0
  addsd  0xd0(%rsp),%xmm0
  movsd  0x38(%rsp),%xmm4
  comisd %xmm0,%xmm4
  jbe    L407
L403:
  movsd  0x20(%rsp),%xmm4
  movapd %xmm4,%xmm0
  movsd  0x38(%rsp),%xmm3
  subsd  %xmm3,%xmm0
  addsd  %xmm0,%xmm0
  movsd  0x40(%rsp),%xmm7
  divsd  %xmm7,%xmm0
  movsd  0x10(%rsp),%xmm1
  subsd  %xmm0,%xmm1
  mulsd  0x50(%rsp),%xmm1
  movsd  %xmm1,0x8(%r12)
  movapd %xmm3,%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x18(%rsp)
  divsd  %xmm4,%xmm0
  movsd  %xmm0,0x10(%rsp)
  movsd  0x178(%rsp),%xmm1
  addsd  %xmm1,%xmm1
  divsd  %xmm7,%xmm1
  call   <pow@plt>
  mulsd  0x160(%rsp),%xmm0
  movsd  %xmm0,0x18(%r12)
  mulsd  0x178(%rsp),%xmm0
  movsd  0x18(%rsp),%xmm6
  divsd  %xmm6,%xmm0
  divsd  %xmm6,%xmm0
  movsd  %xmm0,(%r12)
  movsd  0x60(%rsp),%xmm5
  movsd  0x20(%rsp),%xmm4
  mulsd  %xmm4,%xmm5
  movsd  %xmm5,0x48(%rsp)
  movapd %xmm5,%xmm1
  mulsd  %xmm4,%xmm1
  movsd  0x170(%rsp),%xmm8
  subsd  %xmm1,%xmm8
  movsd  %xmm8,0x28(%rsp)
  movsd  D488(%rip),%xmm9
  movsd  0x50(%rsp),%xmm2
  addsd  %xmm2,%xmm9
  movsd  %xmm9,0x30(%rsp)
  movsd  D456(%rip),%xmm0
  movapd %xmm0,%xmm14
  divsd  %xmm2,%xmm14
  movq   %xmm14,%r13
  movapd %xmm14,%xmm1
  movsd  0x10(%rsp),%xmm0
  call   <pow@plt>
  movq   %xmm0,%r14
  movsd  0x30(%rsp),%xmm15
  divsd  0x50(%rsp),%xmm15
  movq   %xmm15,%r15
  movapd %xmm15,%xmm1
  movsd  0x10(%rsp),%xmm0
  call   <pow@plt>
  movq   %xmm0,%rbp
  movq   %r13,%xmm1
  movsd  0x10(%rsp),%xmm0
  call   <pow@plt>
  movapd %xmm0,%xmm3
  movq   %r14,%xmm14
  mulsd  0x30(%rsp),%xmm14
  movapd %xmm14,%xmm0
  movq   %rbp,%xmm1
  movsd  0x50(%rsp),%xmm2
  mulsd  %xmm2,%xmm1
  addsd  %xmm1,%xmm0
  movapd %xmm2,%xmm1
  addsd  %xmm2,%xmm1
  addsd  D488(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  0x28(%rsp),%xmm2
  movsd  0x40(%rsp),%xmm7
  divsd  %xmm7,%xmm2
  movapd %xmm2,%xmm1
  movsd  0x8(%rsp),%xmm9
  divsd  %xmm9,%xmm1
  mulsd  %xmm1,%xmm0
  movsd  0x178(%rsp),%xmm1
  mulsd  0x170(%rsp),%xmm1
  movsd  0x20(%rsp),%xmm4
  divsd  %xmm4,%xmm1
  subsd  0x48(%rsp),%xmm1
  divsd  %xmm7,%xmm1
  divsd  %xmm9,%xmm1
  movsd  0x130(%rsp),%xmm5
  subsd  %xmm1,%xmm5
  movapd %xmm5,%xmm2
  mulsd  %xmm3,%xmm4
  mulsd  %xmm4,%xmm2
  addsd  %xmm2,%xmm0
  movsd  %xmm0,0x8(%rbx)
  movsd  0x8(%r12),%xmm1
  movsd  0x38(%rsp),%xmm3
  subsd  %xmm3,%xmm1
  mulsd  (%r12),%xmm1
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rbp
  movsd  %xmm1,0x18(%rbx)
  movsd  0x8(%r12),%xmm0
  subsd  %xmm3,%xmm0
  mulsd  (%r12),%xmm0
  movsd  %xmm0,0x20(%rsp)
  movq   %r15,%xmm1
  movsd  0x10(%rsp),%xmm0
  call   <pow@plt>
  mulsd  0x20(%rsp),%xmm0
  mulsd  0x28(%rsp),%xmm0
  movsd  0x8(%rsp),%xmm4
  divsd  %xmm4,%xmm0
  movq   %rbp,%xmm5
  addsd  %xmm5,%xmm0
  movsd  0x18(%rsp),%xmm3
  divsd  %xmm3,%xmm0
  divsd  %xmm3,%xmm0
  movsd  %xmm0,(%rbx)
  movsd  0x140(%rsp),%xmm3
  movsd  %xmm3,0x10(%r12)
  movsd  0x8(%r12),%xmm0
  xorpd  D150(%rip),%xmm0
  mulsd  0x148(%rsp),%xmm0
  mulsd  (%r12),%xmm0
  divsd  %xmm4,%xmm0
  movsd  %xmm0,0x10(%rbx)
  jmp    L354
L236:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: tag: D456
type_infered: f64
name: extract_symbolic_data
arguments: tag: D21
type_infered: byte[8]
name: extract_symbolic_data
arguments: tag: D488
type_infered: f64
name: extract_symbolic_data
arguments: tag: D150
type_infered: byte[16]
name: extract_symbolic_data
arguments: tag: D198
type_infered: byte[8]
name: extract_symbolic_data
arguments: tag: D228
type_infered: f64

tool: D456: 0.5

tool: {"D21": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xbf]}

tool: D488: 1

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

tool: {"D198": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xbf]}

tool: D228: 2

assistant: ```c
void linear_GRP_2D_solver_Edir(double *wave_speed, double *direvative, double *source, double lambda, double rho_L, double rho_R, double d_rho_L, double d_rho_R, double u_L, double u_R, double d_u_L, double d_u_R, double v_L, double v_R, double d_v_L, double d_v_R, double p_L, double p_R, double d_p_L, double d_p_R, double gamma, double eps) {
  double dist;
  double c_L, c_R, c_frac;
  int CRW[2];
  double d_Phi, d_Psi, TdS, VAR, RIEL, RIER;
  double u_star, p_star, rho_star_L, rho_star_R, c_star_L, c_star_R;
  double PI, H1, H2, H3;
  double a_L, b_L, d_L, a_R, b_R, d_R, detA;
  double L_u, L_p, L_rho;
  double u_t_mat, p_t_mat;
  double shk_spd, SmUs, SmUL, SmUR, zeta = (gamma - 1.0) / (gamma + 1.0), zts = zeta * zeta;
  double C, rho_x;
  double g_rho, g_u, g_p, f;
  double speed_L, speed_R;
  c_L = sqrt(gamma * p_L / rho_L);
  c_R = sqrt(gamma * p_R / rho_R);
  dist = (rho_L - rho_R) * (rho_L - rho_R) + (u_L - u_R) * (u_L - u_R) + (p_L - p_R) * (p_L - p_R);
  if (dist < eps) {
    wave_speed[0] = u_L - c_L;
    wave_speed[1] = u_R + c_R;
    rho_star_L = rho_L;
    rho_star_R = rho_R;
    c_star_L = c_L;
    c_star_R = c_R;
    u_star = 0.5 * (u_R + u_L);
    p_star = 0.5 * (p_R + p_L);
    RIEL = d_u_L + d_p_L / (rho_L * c_L);
    RIER = d_u_R - d_p_R / (rho_R * c_R);
    direvative[1] = -0.5 * ((u_L + c_L) * RIEL + (u_R - c_R) * RIER);
    direvative[3] = -0.5 * rho_L * c_L * ((u_L + c_L) * RIEL - (u_R - c_R) * RIER);
    if (u_star > lambda) {
      source[0] = rho_star_L;
      source[1] = u_star;
      source[2] = v_L;
      source[3] = p_star;
      direvative[0] = (direvative[1] + u_star * (d_p_L - c_L * c_L * d_rho_L)) / c_L / c_L;
      direvative[2] = -u_L * d_v_L;
      direvative[0] = direvative[0] + lambda * d_rho_L;
      direvative[1] = direvative[1] + lambda * d_u_L;
      direvative[2] = direvative[2] + lambda * d_v_L;
      direvative[3] = direvative[3] + lambda * d_p_L;
    } else {
      source[0] = rho_star_R;
      source[1] = u_star;
      source[2] = v_R;
      source[3] = p_star;
      direvative[0] = (direvative[1] + u_star * (d_p_R - c_R * c_R * d_rho_R)) / c_R / c_R;
      direvative[2] = -u_R * d_v_R;
      direvative[0] = direvative[0] + lambda * d_rho_R;
      direvative[1] = direvative[1] + lambda * d_u_R;
      direvative[2] = direvative[2] + lambda * d_v_R;
      direvative[3] = direvative[3] + lambda * d_p_R;
    }
    return;
  }
  Riemann_solver_exact(&u_star, &p_star, gamma, u_L, u_R, p_L, p_R, c_L, c_R, CRW, eps, 500);
  if (CRW[0]) {
    rho_star_L = rho_L * pow(p_star / p_L, 1.0 / gamma);
    c_star_L = c_L * pow(p_star / p_L, 0.5 * (gamma - 1.0) / gamma);
    speed_L = u_L - c_L;
  } else {
    rho_star_L = rho_L * (p_star + zeta * p_L) / (p_L + zeta * p_star);
    c_star_L = sqrt(gamma * p_star / rho_star_L);
    speed_L = u_L - c_L * sqrt(0.5 * ((gamma + 1.0) * (p_star / p_L) + (gamma - 1.0)) / gamma);
  }
  if (CRW[1]) {
    rho_star_R = rho_R * pow(p_star / p_R, 1.0 / gamma);
    c_star_R = c_R * pow(p_star / p_R, 0.5 * (gamma - 1.0) / gamma);
    speed_R = u_R + c_R;
  } else {
    rho_star_R = rho_R * (p_star + zeta * p_R) / (p_R + zeta * p_star);
    c_star_R = sqrt(gamma * p_star / rho_star_R);
    speed_R = u_R + c_R * sqrt(0.5 * ((gamma + 1.0) * (p_star / p_R) + (gamma - 1.0)) / gamma);
  }
  wave_speed[0] = speed_L;
  wave_speed[1] = speed_R;
  if (speed_L > lambda) {
    direvative[0] = -d_rho_L * u_L - rho_L * d_u_L;
    direvative[1] = -u_L * d_u_L - d_p_L / rho_L;
    direvative[2] = -u_L * d_v_L;
    direvative[3] = -(rho_L * c_L * c_L * d_u_L + u_L * d_p_L);
    direvative[0] = direvative[0] + lambda * d_rho_L;
    direvative[1] = direvative[1] + lambda * d_u_L;
    direvative[2] = direvative[2] + lambda * d_v_L;
    direvative[3] = direvative[3] + lambda * d_p_L;
    source[0] = rho_L;
    source[1] = u_L;
    source[2] = v_L;
    source[3] = p_L;
  } else if (speed_R < lambda) {
    direvative[0] = -d_rho_R * u_R - rho_R * d_u_R;
    direvative[1] = -u_R * d_u_R - d_p_R / rho_R;
    direvative[2] = -u_R * d_v_R;
    direvative[3] = -(rho_R * c_R * c_R * d_u_R + u_R * d_p_R);
    direvative[0] = direvative[0] + lambda * d_rho_R;
    direvative[1] = direvative[1] + lambda * d_u_R;
    direvative[2] = direvative[2] + lambda * d_v_R;
    direvative[3] = direvative[3] + lambda * d_p_R;
    source[0] = rho_R;
    source[1] = u_R;
    source[2] = v_R;
    source[3] = p_R;
  } else {
    if ((CRW[0]) && ((u_star - c_star_L) > lambda)) {
      source[1] = zeta * (u_L + 2.0 * (c_L + lambda) / (gamma - 1.0));
      C = source[1] - lambda;
      source[3] = pow(C / c_L, 2.0 * gamma / (gamma - 1.0)) * p_L;
      source[0] = gamma * source[3] / C / C;
      c_frac = C / c_L;
      TdS = (d_p_L - d_rho_L * c_L * c_L) / (gamma - 1.0) / rho_L;
      d_Psi = d_u_L + (gamma * d_p_L / c_L - c_L * d_rho_L) / (gamma - 1.0) / rho_L;
      direvative[1] = ((1.0 + zeta) * pow(c_frac, 0.5 / zeta) + zeta * pow(c_frac, (1.0 + zeta) / zeta)) / (1.0 + 2.0 * zeta);
      direvative[1] = direvative[1] * TdS;
      direvative[1] = direvative[1] - c_L * pow(c_frac, 0.5 / zeta) * d_Psi;
      direvative[3] = source[0] * (source[1] - lambda) * direvative[1];
      direvative[0] = source[0] * (source[1] - lambda) * pow(c_frac, (1.0 + zeta) / zeta) * (d_p_L - d_rho_L * c_L * c_L) / rho_L;
      direvative[0] = (direvative[0] + direvative[3]) / C / C;
      source[2] = v_L;
      direvative[2] = -source[1] * d_v_L * source[0] / rho_L;
    } else if ((CRW[1]) && ((u_star + c_star_R) < lambda)) {
      source[1] = zeta * (u_R - 2.0 * (c_R - lambda) / (gamma - 1.0));
      C = lambda - source[1];
      source[3] = pow(C / c_R, 2.0 * gamma / (gamma - 1.0)) * p_R;
      source[0] = gamma * source[3] / C / C;
      c_frac = C / c_R;
      TdS = (d_p_R - d_rho_R * c_R * c_R) / (gamma - 1.0) / rho_R;
      d_Phi = d_u_R - (gamma * d_p_R / c_R - c_R * d_rho_R) / (gamma - 1.0) / rho_R;
      direvative[1] = ((1.0 + zeta) * pow(c_frac, 0.5 / zeta) + zeta * pow(c_frac, (1.0 + zeta) / zeta)) / (1.0 + 2.0 * zeta);
      direvative[1] = direvative[1] * TdS;
      direvative[1] = direvative[1] + c_R * pow(c_frac, 0.5 / zeta) * d_Phi;
      direvative[3] = source[0] * (source[1] - lambda) * direvative[1];
      direvative[0] = source[0] * (source[1] - lambda) * pow(c_frac, (1.0 + zeta) / zeta) * (d_p_R - d_rho_R * c_R * c_R) / rho_R;
      direvative[0] = (direvative[0] + direvative[3]) / C / C;
      source[2] = v_R;
      direvative[2] = -source[1] * d_v_L * source[0] / rho_R;
    } else {
      if (CRW[0]) {
        a_L = 1.0;
        b_L = 1.0 / rho_star_L / c_star_L;
        c_frac = c_star_L / c_L;
        TdS = (d_p_L - d_rho_L * c_L * c_L) / (gamma - 1.0) / rho_L;
        d_Psi = d_u_L + (gamma * d_p_L / c_L - c_L * d_rho_L) / (gamma - 1.0) / rho_L;
        d_L = ((1.0 + zeta) * pow(c_frac, 0.5 / zeta) + zeta * pow(c_frac, (1.0 + zeta) / zeta)) / (1.0 + 2.0 * zeta);
        d_L = d_L * TdS;
        d_L = d_L - c_L * pow(c_frac, 0.5 / zeta) * d_Psi;
      } else {
        SmUs = -sqrt(0.5 * ((gamma + 1.0) * p_L + (gamma - 1.0) * p_star) / rho_star_L);
        SmUL = -sqrt(0.5 * ((gamma + 1.0) * p_star + (gamma - 1.0) * p_L) / rho_L);
        VAR = sqrt((1 - zeta) / (rho_L * (p_star + zeta * p_L)));
        H1 = 0.5 * VAR * (p_star + (1.0 + 2.0 * zeta) * p_L) / (p_star + zeta * p_L);
        H2 = -0.5 * VAR * ((2.0 + zeta) * p_star + zeta * p_L) / (p_star + zeta * p_L);
        H3 = -0.5 * VAR * (p_star - p_L) / rho_L;
        L_p = -1.0 / rho_L - SmUL * H2;
        L_u = SmUL + rho_L * (c_L * c_L * H2 + H3);
        L_rho = -SmUL * H3;
        a_L = 1.0 - rho_star_L * SmUs * H1;
        b_L = -SmUs / (rho_star_L * c_star_L * c_star_L) + H1;
        d_L = L_rho * d_rho_L + L_u * d_u_L + L_p * d_p_L;
      }
      if (CRW[1]) {
        a_R = 1.0;
        b_R = -1.0 / rho_star_R / c_star_R;
        c_frac = c_star_R / c_R;
        TdS = (d_p_R - d_rho_R * c_R * c_R) / (gamma - 1.0) / rho_R;
        d_Phi = d_u_R - (gamma * d_p_R / c_R - c_R * d_rho_R) / (gamma - 1.0) / rho_R;
        d_R = ((1.0 + zeta) * pow(c_frac, 0.5 / zeta) + zeta * pow(c_frac, (1.0 + zeta) / zeta)) / (1.0 + 2.0 * zeta);
        d_R = d_R * TdS;
        d_R = d_R + c_R * pow(c_frac, 0.5 / zeta) * d_Phi;
      } else {
        SmUs = sqrt(0.5 * ((gamma + 1.0) * p_R + (gamma - 1.0) * p_star) / rho_star_R);
        SmUR = sqrt(0.5 * ((gamma + 1.0) * p_star + (gamma - 1.0) * p_R) / rho_R);
        VAR = sqrt((1.0 - zeta) / (rho_R * (p_star + zeta * p_R)));
        H1 = 0.5 * VAR * (p_star + (1 + 2.0 * zeta) * p_R) / (p_star + zeta * p_R);
        H2 = -0.5 * VAR * ((2.0 + zeta) * p_star + zeta * p_R) / (p_star + zeta * p_R);
        H3 = -0.5 * (p_star - p_R) * VAR / rho_R;
        L_p = -1.0 / rho_R + SmUR * H2;
        L_u = SmUR - rho_R * (c_R * c_R * H2 + H3);
        L_rho = SmUR * H3;
        a_R = 1.0 + rho_star_R * SmUs * H1;
        b_R = -(SmUs / (rho_star_R * c_star_R * c_star_R) + H1);
        d_R = L_rho * d_rho_R + L_u * d_u_R + L_p * d_p_R;
      }
      detA = a_L * b_R - b_L * a_R;
      u_t_mat = (b_R * d_L - b_L * d_R) / detA;
      p_t_mat = (a_L * d_R - a_R * d_L) / detA;
      if (u_star < lambda) {
        source[0] = rho_star_R;
        source[1] = u_star;
        source[2] = v_R;
        source[3] = p_star;
        direvative[1] = u_t_mat + (u_star - lambda) * p_t_mat / rho_star_R / c_star_R / c_star_R;
        direvative[3] = p_t_mat + rho_star_R * (u_star - lambda) * u_t_mat;
        if (CRW[1]) {
          direvative[0] = rho_star_R * (u_star - lambda) * pow(c_star_R / c_R, (1.0 + zeta) / zeta) * (d_p_R - d_rho_R * c_R * c_R) / rho_R;
          direvative[0] = (direvative[0] + direvative[3]) / c_star_R / c_star_R;
          direvative[2] = -source[1] * d_v_R * source[0] / rho_R;
          direvative[2] = direvative[2] + lambda * d_v_R;
        } else {
          SmUs = sqrt(0.5 * ((gamma + 1.0) * p_R + (gamma - 1.0) * p_star) / rho_star_R);
          SmUR = sqrt(0.5 * ((gamma + 1.0) * p_star + (gamma - 1.0) * p_R) / rho_R);
          VAR = p_R + zeta * p_star;
          H1 = rho_R * p_R * (1.0 - zts) / VAR / VAR;
          H2 = rho_R * p_star * (zts - 1.0) / VAR / VAR;
          H3 = (p_star + zeta * p_R) / VAR;
          L_rho = SmUR * H3 * d_rho_R;
          L_u = -rho_R * (H2 * c_R * c_R + H3) * d_u_R;
          L_p = H2 * SmUR * d_p_R;
          direvative[0] = ((u_star + SmUs) / c_star_R / c_star_R - u_star * H1) * p_t_mat + rho_star_R * u_star * SmUs * H1 * u_t_mat;
          direvative[0] = (direvative[0] - u_star * (L_p + L_rho + L_u)) / SmUs;
          f = SmUR * (H2 * d_p_R + H3 * d_rho_R) - rho_R * (H2 * c_R * c_R + H3) * d_u_R;
          rho_x = (f + H1 * (p_t_mat - rho_star_R * SmUs * u_t_mat) - direvative[0]) / (SmUR + u_R);
          direvative[0] = direvative[0] + lambda * rho_x;
          direvative[2] = source[1] * SmUR * d_v_R / SmUs;
          direvative[2] = -direvative[2] + lambda * d_v_R;
        }
      } else {
        source[0] = rho_star_L;
        source[1] = u_star;
        source[2] = v_L;
        source[3] = p_star;
        direvative[1] = u_t_mat + (u_star - lambda) * p_t_mat / rho_star_L / c_star_L / c_star_L;
        direvative[3] = p_t_mat + rho_star_L * (u_star - lambda) * u_t_mat;
        if (CRW[0]) {
          direvative[0] = rho_star_L * (u_star - lambda) * pow(c_star_L / c_L, (1.0 + zeta) / zeta) * (d_p_L - d_rho_L * c_L * c_L) / rho_L;
          direvative[0] = (direvative[0] + direvative[3]) / c_star_L / c_star_L;
          direvative[2] = -source[1] * d_v_L * source[0] / rho_L;
          direvative[2] = direvative[2] + lambda * d_v_L;
        } else {
          SmUs = -sqrt(0.5 * ((gamma + 1.0) * p_L + (gamma - 1.0) * p_star) / rho_star_L);
          SmUL = -sqrt(0.5 * ((gamma + 1.0) * p_star + (gamma - 1.0) * p_L) / rho_L);
          VAR = p_L + zeta * p_star;
          H1 = rho_L * p_L * (1.0 - zts) / VAR / VAR;
          H2 = rho_L * p_star * (zts - 1.0) / VAR / VAR;
          H3 = (p_star + zeta * p_L) / VAR;
          L_rho = SmUL * H3 * d_rho_L;
          L_u = -rho_L * (H2 * c_L * c_L + H3) * d_u_L;
          L_p = H2 * SmUL * d_p_L;
          direvative[0] = ((u_star + SmUs) / c_star_L / c_star_L - H1 * u_star) * p_t_mat + rho_star_L * u_star * SmUs * H1 * u_t_mat;
          direvative[0] = (direvative[0] - u_star * (L_p + L_rho + L_u)) / SmUs;
          f = SmUL * (H2 * d_p_L + H3 * d_rho_L) - rho_L * (H2 * c_L * c_L + H3) * d_u_L;
          rho_x = (f + H1 * (p_t_mat - rho_star_L * SmUs * u_t_mat) - direvative[0]) / (SmUL + u_L);
          direvative[0] = direvative[0] + lambda * rho_x;
          direvative[2] = source[1] * SmUL * d_v_L / SmUs;
          direvative[2] = -direvative[2] + lambda * d_v_L;
        }
      }
    }
  }
}
```