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

```asm
<bbob2009_compute_rotation>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0xea8,%rsp
  mov    %rdx,%r15
  mov    %rdi,%rbp
  xor    %edi,%edi
  mov    %rsi,%r13
  mov    %fs:0x28,%rax
  mov    %rax,0x3e98(%rsp)
  xor    %eax,%eax
  imul   %rdx,%r15
  lea    0x10(%rsp),%r14
  mov    %rdx,%r12
  cmp    $0x7cf,%r15
  setbe  %dil
  call   <assert@plt>
  mov    %r13,%rdx
  mov    %r15,%rsi
  mov    %r14,%rdi
  call   <bbob2009_gauss@plt>
  mov    %r12,%rcx
  mov    %r12,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <bbob2009_reshape@plt>
  test   %r12,%r12
  je     L1
  lea    0x0(%rbp,%r12,8),%rbx
  xor    %r13d,%r13d
  pxor   %xmm3,%xmm3
  nopw   0x0(%rax,%rax,1)
L107:
  lea    0x0(,%r13,8),%r15
  mov    %rbp,%rax
  movapd %xmm3,%xmm1
  nop
L17:
  mov    (%rax),%rdx
  add    $0x8,%rax
  movsd  (%rdx,%r15,1),%xmm0
  mulsd  %xmm0,%xmm0
  addsd  %xmm0,%xmm1
  cmp    %rax,%rbx
  jne    L17
  ucomisd %xmm1,%xmm3
  ja     L102
  sqrtsd %xmm1,%xmm1
  mov    %rbp,%rax
  nopl   0x0(%rax,%rax,1)
L19:
  mov    (%rax),%rdx
  add    $0x8,%rax
  add    %r15,%rdx
  movsd  (%rdx),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%rdx)
  cmp    %rax,%rbx
  jne    L19
L70:
  lea    0x1(%r13),%r9
  cmp    %r12,%r9
  je     L1
  lea    0x8(%r15),%rsi
  xor    %r8d,%r8d
  nopl   0x0(%rax,%rax,1)
L121:
  lea    0x0(,%r8,8),%rdi
  mov    %rbp,%rax
  movapd %xmm3,%xmm1
  nop
L64:
  mov    (%rax),%rdx
  add    $0x8,%rax
  movsd  (%rdx,%rsi,1),%xmm0
  mulsd  (%rdx,%rdi,1),%xmm0
  addsd  %xmm0,%xmm1
  cmp    %rax,%rbx
  jne    L64
  mov    %rbp,%rax
  nopl   (%rax)
L100:
  mov    (%rax),%rcx
  add    $0x8,%rax
  movsd  (%rcx,%rdi,1),%xmm2
  lea    (%rcx,%rsi,1),%rdx
  movsd  (%rdx),%xmm0
  mulsd  %xmm1,%xmm2
  subsd  %xmm2,%xmm0
  movsd  %xmm0,(%rdx)
  cmp    %rax,%rbx
  jne    L100
  lea    0x1(%r8),%rax
  cmp    %r8,%r13
  je     L53
  mov    %rax,%r8
  jmp    L121
  nopl   0x0(%rax,%rax,1)
L53:
  mov    %r9,%r13
  jmp    L107
L1:
  mov    0x3e98(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L74
  add    $0x3ea8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L102:
  mov    %rbp,%r14
L56:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  add    $0x8,%r14
  call   <sqrt@plt>
  mov    -0x8(%r14),%rax
  movsd  0x8(%rsp),%xmm1
  pxor   %xmm3,%xmm3
  movapd %xmm0,%xmm2
  add    %r15,%rax
  cmp    %r14,%rbx
  movsd  (%rax),%xmm0
  divsd  %xmm2,%xmm0
  movsd  %xmm0,(%rax)
  jne    L56
  jmp    L70
L74:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void bbob2009_compute_rotation(double **B, long seed, size_t DIM) {
  double prod;
  double gvect[2000];
  long i, j, k;
  assert(DIM * DIM < 2000);
  bbob2009_gauss(gvect, DIM * DIM, seed);
  bbob2009_reshape(B, gvect, DIM, DIM);
  for (i = 0; i < DIM; i++) {
    for (j = 0; j < i; j++) {
      prod = 0;
      for (k = 0; k < DIM; k++)
        prod += B[k][i] * B[k][j];
      for (k = 0; k < DIM; k++)
        B[k][i] -= prod * B[k][j];
    }
    prod = 0;
    for (k = 0; k < DIM; k++)
      prod += B[k][i] * B[k][i];
    for (k = 0; k < DIM; k++)
      B[k][i] /= sqrt(prod);
  }
}
```