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

```asm
<GenRandomGaussian>:
  endbr64
  push   %r14
  push   %rbp
  push   %rbx
  sub    $0x20,%rsp
  movq   %xmm0,%r14
  movsd  %xmm1,0x10(%rsp)
  movapd %xmm1,%xmm0
  mulsd  D104(%rip),%xmm0
  divsd  D79(%rip),%xmm0
  movsd  %xmm0,0x8(%rsp)
  mov    $0x0,%ebx
  pxor   %xmm6,%xmm6
  movsd  %xmm6,(%rsp)
  movapd %xmm6,%xmm1
L36:
  mulsd  0x8(%rsp),%xmm1
  movapd %xmm1,%xmm0
  xorpd  D97(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  D64(%rip),%xmm0
  movsd  0x10(%rsp),%xmm2
  divsd  %xmm2,%xmm0
  divsd  %xmm2,%xmm0
  call   <exp@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  addsd  (%rsp),%xmm0
  movsd  %xmm0,(%rsp)
  add    $0x1,%ebx
  pxor   %xmm1,%xmm1
  cvtsi2sd %ebx,%xmm1
  cmp    $0x64,%ebx
  jne    L36
  mov    $0x0,%eax
  call   <GenRandomPercentage@plt>
  movq   %xmm0,%rbp
  comisd D45(%rip),%xmm0
  jbe    L5
  movsd  D95(%rip),%xmm0
  divsd  (%rsp),%xmm0
  movsd  %xmm0,0x18(%rsp)
  mov    $0x0,%ebx
  pxor   %xmm6,%xmm6
  movsd  %xmm6,(%rsp)
L24:
  pxor   %xmm1,%xmm1
  cvtsi2sd %ebx,%xmm1
  mulsd  0x8(%rsp),%xmm1
  movapd %xmm1,%xmm0
  xorpd  D97(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  D64(%rip),%xmm0
  movsd  0x10(%rsp),%xmm5
  divsd  %xmm5,%xmm0
  divsd  %xmm5,%xmm0
  call   <exp@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  0x18(%rsp),%xmm0
  addsd  (%rsp),%xmm0
  movsd  %xmm0,(%rsp)
  add    $0x1,%ebx
  movq   %rbp,%xmm7
  comisd %xmm0,%xmm7
  ja     L24
L26:
  pxor   %xmm0,%xmm0
  cvtsi2sd %ebx,%xmm0
  mulsd  0x8(%rsp),%xmm0
  movsd  %xmm0,(%rsp)
  mov    $0x0,%eax
  call   <GenRandomPercentage@plt>
  movapd %xmm0,%xmm1
  movsd  D95(%rip),%xmm0
  comisd D64(%rip),%xmm1
  ja     L45
  movsd  D5(%rip),%xmm0
L45:
  mulsd  (%rsp),%xmm0
  movq   %r14,%xmm6
  addsd  %xmm6,%xmm0
  add    $0x20,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r14
  ret
L5:
  mov    $0x0,%ebx
  jmp    L26
```

tool_calls: name: extract_symbolic_data
arguments: tag: D104
type_infered: f32[2]
name: extract_symbolic_data
arguments: tag: D79
type_infered: f32[2]
name: extract_symbolic_data
arguments: tag: D97
type_infered: f32[4]
name: extract_symbolic_data
arguments: tag: D64
type_infered: f64[2]
name: extract_symbolic_data
arguments: tag: D45
type_infered: f32
name: extract_symbolic_data
arguments: tag: D95
type_infered: f32[2]
name: extract_symbolic_data
arguments: tag: D5
type_infered: f32[2]

tool: {"D104": [0.0,2.125]}

tool: {"D79": [0.0,3.390625]}

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

tool: {"D64": [0.5,0.0]}

tool: D45: 0

tool: {"D95": [0.0,1.875]}

tool: {"D5": [0.0,-1.875]}

assistant: ```c
double GenRandomGaussian(double mean, double sigma) {
  double rand, dist, step;
  double normalization;
  double totdist;
  double renorm;
  double nbins, excursion, signz;
  int i;
  nbins = 100;
  step = 3 * sigma / nbins;
  i = 0;
  totdist = 0.0;
  for (i = 0; i < nbins; i++) {
    totdist = totdist + exp(-(step * i) * (step * i) / 2 / sigma / sigma);
  }
  rand = GenRandomPercentage();
  i = 0;
  dist = 0.0;
  while (dist < rand) {
    dist = dist + (1 / totdist) * exp(-(step * i) * (step * i) / 2 / sigma / sigma);
    i++;
  }
  excursion = step * i;
  rand = GenRandomPercentage();
  if (rand > 0.5)
    signz = 1;
  else
    signz = -1;
  return mean + signz * excursion;
}
```