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

```asm
<r_mvndu>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0xbd8,%rsp
  mov    %r8,0x8(%rsp)
  mov    %r9,0x10(%rsp)
  mov    0x1c10(%rsp),%rax
  mov    %rax,0x18(%rsp)
  mov    0x1c18(%rsp),%rax
  mov    %rax,0x20(%rsp)
  mov    0x1c20(%rsp),%rax
  mov    %rax,0x28(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x1bc8(%rsp)
  xor    %eax,%eax
  mov    (%rdi),%r10d
  mov    (%r8),%r9d
  mov    %r9d,%r12d
  neg    %r12d
  cmovs  %r9d,%r12d
  test   %r10d,%r10d
  jle    L151
  mov    %rsi,%r11
  mov    %rdx,%rbx
  mov    %rcx,%rbp
  lea    0x360(%rsp),%rdx
  mov    %r10d,%ecx
  mov    $0x0,%edi
  mov    $0x0,%r8d
L74:
  movslq %r8d,%rax
  lea    0x0(%rbp,%rax,8),%rsi
  mov    $0x0,%eax
L46:
  movsd  (%rsi,%rax,8),%xmm0
  movsd  %xmm0,0x8(%rdx,%rax,8)
  add    $0x1,%rax
  cmp    %rcx,%rax
  jne    L46
  add    %r10d,%r8d
  movsd  (%r11,%rdi,8),%xmm0
  movsd  %xmm0,0xe8(%rsp,%rdi,8)
  movsd  (%rbx,%rdi,8),%xmm0
  movsd  %xmm0,0x188(%rsp,%rdi,8)
  add    $0x1,%rdi
  add    $0xa0,%rdx
  cmp    %rcx,%rdi
  jne    L74
L151:
  cmp    %r12d,%r10d
  jle    L124
  movslq %r10d,%rsi
  lea    0x2c0(%rsp),%r8
  lea    (%r8,%rsi,8),%rax
  lea    -0x1(%r10),%edi
  lea    (%rdi,%rdi,4),%rdx
  lea    (%rsi,%rdx,4),%rdx
  lea    0x360(%rsp,%rdx,8),%r11
  movslq %r12d,%rcx
  mov    %rcx,%rdx
  sub    %rsi,%rdx
L97:
  movsd  0xa0(%rax),%xmm0
  movsd  0xa0(%rax,%rdx,8),%xmm1
  movsd  %xmm1,0xa0(%rax)
  movsd  %xmm0,0xa0(%rax,%rdx,8)
  add    $0xa0,%rax
  cmp    %r11,%rax
  jne    L97
  lea    0x0(,%rsi,4),%rdx
  lea    (%rdx,%rsi,1),%rax
  shl    $0x5,%rax
  lea    0x2c0(%rsp,%rax,1),%rax
  add    %rsi,%rdx
  lea    (%rdi,%rdx,4),%rdx
  lea    0x8(%r8,%rdx,8),%rdi
  imul   $0xffffffffffffff60,%rsi,%rsi
  lea    (%rcx,%rcx,4),%rcx
  shl    $0x5,%rcx
L170:
  movsd  0x8(%rax),%xmm0
  lea    (%rax,%rsi,1),%rdx
  movsd  0x8(%rdx,%rcx,1),%xmm1
  movsd  %xmm1,0x8(%rax)
  movsd  %xmm0,0x8(%rdx,%rcx,1)
  add    $0x8,%rax
  cmp    %rdi,%rax
  jne    L170
  movslq %r10d,%rax
  movsd  0xe0(%rsp,%rax,8),%xmm0
  movslq %r12d,%r12
  movsd  0xe0(%rsp,%r12,8),%xmm1
  movsd  %xmm1,0xe0(%rsp,%rax,8)
  movsd  %xmm0,0xe0(%rsp,%r12,8)
  movsd  0x180(%rsp,%rax,8),%xmm0
  movsd  0x180(%rsp,%r12,8),%xmm1
  movsd  %xmm1,0x180(%rsp,%rax,8)
  movsd  %xmm0,0x180(%rsp,%r12,8)
L124:
  lea    -0x1(%r10),%r14d
  test   %r9d,%r9d
  jle    L50
  movslq %r10d,%rax
  mov    0x180(%rsp,%rax,8),%r12
L55:
  test   %r14d,%r14d
  jle    L35
  movslq %r10d,%rax
  lea    0x360(%rsp,%rax,8),%rcx
  lea    0x48(%rsp),%r9
  lea    -0x2(%r10),%ebp
  lea    0x368(%rsp,%rbp,8),%rdi
  lea    0x0(,%rbp,8),%r15
  lea    0x50(%rsp,%r15,1),%rbx
  mov    %rax,%r11
  neg    %r11
  shl    $0x3,%r11
  lea    (%rax,%rax,4),%r8
  shl    $0x5,%r8
  mov    $0xffffffffffffff60,%rsi
  movq   %r12,%xmm2
L157:
  lea    (%rcx,%r11,1),%rax
  mov    %rcx,%r10
L154:
  lea    (%rax,%rsi,1),%rdx
  movsd  0x8(%r8,%rdx,1),%xmm1
  mulsd  (%rcx),%xmm1
  movsd  0x8(%rax),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x8(%rax)
  add    $0x8,%rax
  cmp    %rdi,%rax
  jne    L154
  movapd %xmm2,%xmm0
  mulsd  (%r10),%xmm0
  movsd  %xmm0,(%r9)
  add    $0xa0,%rcx
  add    $0x8,%r9
  sub    $0xa0,%rsi
  add    $0xa0,%rdi
  cmp    %rbx,%r9
  jne    L157
  movq   %xmm2,%r12
  add    $0x2,%rbp
  lea    0x0(,%rbp,8),%r13
  mov    $0x8,%ebx
L182:
  lea    (%rbx,%rbx,4),%rax
  lea    (%rbx,%rax,4),%rax
  movsd  0x2c0(%rsp,%rax,1),%xmm0
  pxor   %xmm3,%xmm3
  ucomisd %xmm0,%xmm3
  ja     L159
  sqrtsd %xmm0,%xmm0
L72:
  movsd  %xmm0,0x220(%rsp,%rbx,1)
  movsd  0x40(%rsp,%rbx,1),%xmm2
  movsd  0xe0(%rsp,%rbx,1),%xmm1
  subsd  %xmm2,%xmm1
  divsd  %xmm0,%xmm1
  movsd  %xmm1,0xe0(%rsp,%rbx,1)
  movsd  0x180(%rsp,%rbx,1),%xmm1
  subsd  %xmm2,%xmm1
  divsd  %xmm0,%xmm1
  movsd  %xmm1,0x180(%rsp,%rbx,1)
  add    $0x8,%rbx
  cmp    %r13,%rbx
  jne    L182
  lea    0x228(%rsp),%rdi
  lea    0x360(%rsp),%rcx
  lea    0xfe0(%rsp),%rdx
  lea    0x230(%rsp,%r15,1),%r8
  lea    0x220(%rsp),%rsi
L66:
  movsd  (%rdi),%xmm2
  mov    $0x1,%eax
L141:
  movapd %xmm2,%xmm1
  mulsd  (%rsi,%rax,8),%xmm1
  movsd  (%rcx,%rax,8),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%rdx,%rax,8)
  add    $0x1,%rax
  cmp    %rbp,%rax
  jne    L141
  add    $0x8,%rdi
  add    $0xa0,%rcx
  add    $0xa0,%rdx
  cmp    %rdi,%r8
  jne    L66
L35:
  lea    0xf40(%rsp),%rcx
  lea    0x180(%rsp),%rdx
  lea    0xe0(%rsp),%rsi
  push   0x20(%rsp)
  lea    0x40(%rsp),%rax
  push   %rax
  lea    0x40(%rsp),%r9
  mov    0x28(%rsp),%rax
  movsd  (%rax),%xmm0
  mov    0x20(%rsp),%rax
  mov    (%rax),%r8d
  mov    %r14d,%edi
  call   <mvn1@plt>
  movq   %r12,%xmm0
  call   <phi@plt>
  mulsd  0x40(%rsp),%xmm0
  add    $0x10,%rsp
  mov    0x8(%rsp),%rax
  cmpl   $0x0,(%rax)
  js     L54
L43:
  mov    0x28(%rsp),%rax
  movsd  %xmm0,(%rax)
  mov    0x1bc8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L129
  add    $0x1bd8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L50:
  movslq %r10d,%rax
  mov    0xe0(%rsp,%rax,8),%r12
  jmp    L55
L159:
  call   <sqrt@plt>
  jmp    L72
L54:
  xorpd  D7(%rip),%xmm0
  jmp    L43
L129:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_label: D7
type_infered: byte[16]

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

assistant: ```c
void r_mvndu(int *m0, double *w, double *x, double *rhmat, int *ksign, int *nsim, double *eps, int *ifail, double *der0) {
  double der, tem, bb, pr, sd;
  double rr[20][20], mu[20], a[20], b[20], rc[20][20], dd[20];
  int i, j, m1, k, m, ii;
  void mvn1(int, double[], double[], double[][20], int, double, double *, double *, int *);
  double phi(double);
  m = *m0;
  k = abs(*ksign);
  for (i = 1, ii = 0; i <= m; i++) {
    for (j = 1; j <= m; j++) {
      rr[i][j] = rhmat[ii];
      ii++;
    }
    a[i] = w[i - 1];
    b[i] = x[i - 1];
  }
  if (k < m) {
    for (i = 1; i <= m; i++) {
      tem = rr[i][m];
      rr[i][m] = rr[i][k];
      rr[i][k] = tem;
    }
    for (i = 1; i <= m; i++) {
      tem = rr[m][i];
      rr[m][i] = rr[k][i];
      rr[k][i] = tem;
    }
    tem = a[m];
    a[m] = a[k];
    a[k] = tem;
    tem = b[m];
    b[m] = b[k];
    b[k] = tem;
  }
  m1 = m - 1;
  if ((*ksign) > 0)
    bb = b[m];
  else
    bb = a[m];
  for (i = 1; i <= m1; i++) {
    for (j = 1; j <= m1; j++)
      rr[i][j] -= rr[i][m] * rr[m][j];
    mu[i] = rr[i][m] * bb;
  }
  for (i = 1; i <= m1; i++) {
    dd[i] = sqrt(rr[i][i]);
    a[i] = (a[i] - mu[i]) / dd[i];
    b[i] = (b[i] - mu[i]) / dd[i];
  }
  for (i = 1; i <= m1; i++) {
    for (j = 1; j <= m1; j++)
      rc[i][j] = rr[i][j] / (dd[i] * dd[j]);
  }
  mvn1(m1, a, b, rc, *nsim, *eps, &pr, &sd, ifail);
  der = phi(bb) * pr;
  if (*ksign < 0)
    der = -der;
  *der0 = der;
}
```