user: Converte this assembly snippet into its equivalent C code:

```asm
<main>:
  endbr64
  push   %r13
  xor    %edi,%edi
  xor    %r13d,%r13d
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  call   <time@plt>
  mov    %eax,%edi
  call   <srand@plt>
  mov    $0x2faf0800,%edi
  call   <malloc@plt>
  mov    $0x2faf0800,%edi
  mov    %rax,%r12
  call   <malloc@plt>
  mov    $0x2faf0800,%edi
  mov    %rax,%rbp
  call   <malloc@plt>
  mov    %rax,%rbx
  xor    %eax,%eax
  call   <rand@plt>
  pxor   %xmm0,%xmm0
  lea    D5(%rip),%rdi
  cvtsi2sd %eax,%xmm0
  mov    $0x1,%eax
  call   <printf@plt>
  cs nopw 0x0(%rax,%rax,1)
L50:
  xor    %eax,%eax
  call   <rand@plt>
  pxor   %xmm0,%xmm0
  movslq %eax,%rdx
  mov    %eax,%ecx
  imul   $0x6b5fca6b,%rdx,%rdx
  sar    $0x1f,%ecx
  sar    $0x36,%rdx
  sub    %ecx,%edx
  imul   $0x989680,%edx,%edx
  sub    %edx,%eax
  cvtsi2sd %eax,%xmm0
  mulsd  D35(%rip),%xmm0
  xor    %eax,%eax
  movsd  %xmm0,(%r12,%r13,1)
  call   <rand@plt>
  pxor   %xmm0,%xmm0
  movslq %eax,%rdx
  mov    %eax,%ecx
  imul   $0x10624dd3,%rdx,%rdx
  sar    $0x1f,%ecx
  sar    $0x26,%rdx
  sub    %ecx,%edx
  imul   $0x3e8,%edx,%edx
  sub    %edx,%eax
  cvtsi2sd %eax,%xmm0
  mulsd  D35(%rip),%xmm0
  movsd  %xmm0,0x0(%rbp,%r13,1)
  movq   $0x0,(%rbx,%r13,1)
  add    $0x8,%r13
  cmp    $0x2faf0800,%r13
  jne    L50
  xor    %eax,%eax
  call   <omp_get_wtime@plt>
  lea    0x8(%rbp),%rax
  movsd  %xmm0,0x8(%rsp)
  cmp    %rax,%rbx
  je     L42
  lea    0x8(%r12),%rax
  cmp    %rax,%rbx
  je     L42
  xor    %eax,%eax
L8:
  movupd (%r12,%rax,1),%xmm0
  movupd 0x0(%rbp,%rax,1),%xmm1
  divpd  %xmm1,%xmm0
  movups %xmm0,(%rbx,%rax,1)
  add    $0x10,%rax
  cmp    $0x2faf0800,%rax
  jne    L8
L53:
  xor    %eax,%eax
  call   <omp_get_wtime@plt>
  subsd  0x8(%rsp),%xmm0
  mov    $0x1,%eax
  lea    D1(%rip),%rdi
  call   <printf@plt>
  add    $0x18,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L42:
  xor    %eax,%eax
  nopl   (%rax)
L56:
  movsd  (%r12,%rax,1),%xmm0
  divsd  0x0(%rbp,%rax,1),%xmm0
  movsd  %xmm0,(%rbx,%rax,1)
  add    $0x8,%rax
  cmp    $0x2faf0800,%rax
  jne    L56
  jmp    L53
```

tool_calls: name: unpack_data
arguments: data_tag: D5
data_type: string
name: unpack_data
arguments: data_tag: D35
data_type: f64
name: unpack_data
arguments: data_tag: D1
data_type: string

tool: D5: %lf


tool: D35: 0.01

tool: D1: Vector Division Complete - %lf Seconds


assistant: ```c
int main(int argc, char *argv[]) {
  srand(time(NULL));
  int i = 0;
  double *mainVector = malloc(100000000 * sizeof(double));
  double *divVector = malloc(100000000 * sizeof(double));
  double *solVector = malloc(100000000 * sizeof(double));
  double x = rand();
  printf("%lf\n", x);
  for (i = 0; i < 100000000; i++) {
    mainVector[i] = (rand() % 10000000) * 0.01;
    divVector[i] = (rand() % 1000) * 0.01;
    solVector[i] = 0;
  }
  if (0) {
    for (i = 0; i < 100000000; i++) {
      printf("  %5.2lf %1.2lf\n", mainVector[i], divVector[i]);
    }
  }
  double start = omp_get_wtime();
#pragma omp parallel for shared(mainVector, divVector, solVector) private(i) schedule(static, 10) num_threads(4)
  for (i = 0; i < 100000000; i++) {
    solVector[i] = mainVector[i] / divVector[i];
  }
  double end = omp_get_wtime();
  if (0) {
    for (i = 0; i < 100000000; i++) {
      printf("  %1.2lf\n", solVector[i]);
    }
  }
  double solTime = end - start;
  printf("Vector Division Complete - %lf Seconds\n", solTime);
  return 0;
}
```