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

```asm
<vectores>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xf8,%rsp
  mov    %rdi,0x20(%rsp)
  mov    %edx,0x18(%rsp)
  mov    %ecx,0x2c(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0xe8(%rsp)
  xor    %eax,%eax
  movl   $0x0,0x30(%rsp)
  movl   $0x0,0x34(%rsp)
  movl   $0x0,0x38(%rsp)
  movl   $0x0,0x3c(%rsp)
  movq   $0x0,0x40(%rsp)
  movq   $0x0,0x48(%rsp)
  movq   $0x0,0x50(%rsp)
  movq   $0x0,0x58(%rsp)
  sub    %ecx,%esi
  mov    %esi,%r13d
  test   %esi,%esi
  jle    L178
  movslq %edx,%rax
  shl    $0x3,%rax
  mov    %rax,0x8(%rsp)
  mov    %ecx,%eax
  imul   %edx,%eax
  cltq
  movslq %ecx,%rdx
  add    %rdx,%rax
  lea    (%rdi,%rax,8),%rbp
  mov    $0x0,%ebx
  mov    $0x0,%r15d
  mov    $0x0,%r14d
  lea    D16(%rip),%r12
  jmp    L105
L72:
  jne    L206
  movsd  D71(%rip),%xmm7
  movsd  %xmm7,(%rsp)
L144:
  movsd  (%rsp),%xmm3
  movsd  %xmm3,0x40(%rsp,%rbx,8)
  lea    D64(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movsd  (%rsp),%xmm0
  mov    %r12,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  add    $0x1,%rbx
  add    0x8(%rsp),%rbp
  cmp    %ebx,%r13d
  jle    L196
L105:
  cvttsd2si 0x0(%rbp),%esi
  mov    %esi,0x30(%rsp,%rbx,4)
  mov    %esi,%eax
  imul   %esi,%eax
  add    %eax,%r14d
  test   %ebx,%ebx
  jle    L72
  add    %eax,%r15d
L206:
  pxor   %xmm7,%xmm7
  cvtsi2sd %esi,%xmm7
  movsd  %xmm7,(%rsp)
  jmp    L144
L196:
  pxor   %xmm0,%xmm0
  cvtsi2sd %r14d,%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L96
L79:
  sqrtsd %xmm0,%xmm0
  movsd  %xmm0,0x8(%rsp)
L145:
  pxor   %xmm5,%xmm5
  cvtsi2sd %r15d,%xmm5
  movsd  %xmm5,(%rsp)
  movsd  0x8(%rsp),%xmm0
  lea    D1(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movsd  (%rsp),%xmm0
  lea    D68(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  test   %r15d,%r15d
  je     L1
  mov    0x30(%rsp),%eax
  test   %eax,%eax
  jle    L167
  movsd  (%rsp),%xmm1
  xorpd  D44(%rip),%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  addsd  0x8(%rsp),%xmm0
  divsd  %xmm0,%xmm1
  movsd  %xmm1,0x10(%rsp)
L1:
  movsd  0x10(%rsp),%xmm3
  movapd %xmm3,%xmm0
  mulsd  %xmm3,%xmm0
  movapd %xmm0,%xmm1
  addsd  %xmm0,%xmm1
  addsd  (%rsp),%xmm0
  divsd  %xmm0,%xmm1
  movsd  %xmm1,0x8(%rsp)
  test   %r13d,%r13d
  jle    L18
  lea    0x40(%rsp),%rbx
  lea    -0x1(%r13),%eax
  lea    0x48(%rsp,%rax,8),%r12
  lea    D171(%rip),%rbp
L76:
  movsd  (%rbx),%xmm0
  divsd  0x10(%rsp),%xmm0
  movsd  %xmm0,(%rbx)
  mov    %rbp,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  add    $0x8,%rbx
  cmp    %r12,%rbx
  jne    L76
  movsd  0x8(%rsp),%xmm0
  lea    D51(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movsd  0x10(%rsp),%xmm0
  lea    D108(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    0x60(%rsp),%rdi
  mov    $0x10,%ecx
  mov    $0x0,%eax
  rep stos %rax,%es:(%rdi)
  mov    0x18(%rsp),%ecx
  movslq %ecx,%rax
  shl    $0x3,%rax
  mov    %rax,0x18(%rsp)
  mov    %ecx,%eax
  mov    0x2c(%rsp),%edx
  imul   %edx,%eax
  cltq
  movslq %edx,%rdx
  add    %rdx,%rax
  mov    0x20(%rsp),%rcx
  lea    (%rcx,%rax,8),%rax
  mov    %rax,0x10(%rsp)
  lea    0x60(%rsp),%r14
  mov    $0x0,%r12d
  jmp    L3
L178:
  mov    $0x0,%r15d
  pxor   %xmm0,%xmm0
  jmp    L79
L96:
  call   <sqrt@plt>
  movsd  %xmm0,0x8(%rsp)
  jmp    L145
L167:
  pxor   %xmm0,%xmm0
  cvtsi2sdl 0x34(%rsp),%xmm0
  movapd %xmm0,%xmm5
  subsd  0x8(%rsp),%xmm5
  movsd  %xmm5,0x10(%rsp)
  jmp    L1
L92:
  movsd  0x8(%rsp),%xmm1
  mulsd  0x40(%rsp,%r12,8),%xmm1
  mulsd  0x40(%rsp,%rbx,8),%xmm1
  movsd  D71(%rip),%xmm0
  subsd  %xmm1,%xmm0
L88:
  movsd  %xmm0,(%r14,%rbx,8)
  mov    0x30(%rsp,%rbx,4),%ebp
  pxor   %xmm1,%xmm1
  cvtsi2sd %ebp,%xmm1
  mulsd  %xmm0,%xmm1
  addsd  (%rsp),%xmm1
  movsd  %xmm1,(%rsp)
  lea    D56(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    %ebp,%esi
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x1,%rbx
  cmp    %ebx,%r13d
  jle    L154
L56:
  cmp    %r12d,%ebx
  je     L92
  movsd  0x8(%rsp),%xmm0
  mulsd  0x40(%rsp,%r12,8),%xmm0
  mulsd  0x40(%rsp,%rbx,8),%xmm0
  xorpd  D44(%rip),%xmm0
  jmp    L88
L154:
  mov    0x10(%rsp),%rbx
  movsd  (%rsp),%xmm4
  movsd  %xmm4,(%rbx)
  movapd %xmm4,%xmm0
  lea    D136(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    D81(%rip),%rdi
  call   <puts@plt>
  add    $0x1,%r12
  mov    0x18(%rsp),%rax
  add    %rax,%rbx
  mov    %rbx,0x10(%rsp)
  add    $0x20,%r14
  cmp    %r12d,%r13d
  jle    L165
L3:
  mov    $0x0,%ebx
  pxor   %xmm6,%xmm6
  movsd  %xmm6,(%rsp)
  lea    D125(%rip),%r15
  jmp    L56
L18:
  movsd  0x8(%rsp),%xmm0
  lea    D51(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movsd  0x10(%rsp),%xmm0
  lea    D108(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    0x60(%rsp),%rdi
  mov    $0x10,%ecx
  mov    $0x0,%eax
  rep stos %rax,%es:(%rdi)
L165:
  lea    0x60(%rsp),%rdi
  mov    $0x4,%edx
  mov    $0x4,%esi
  mov    $0x0,%eax
  call   <show@plt>
  lea    D69(%rip),%rdi
  call   <puts@plt>
  mov    $0x3,%edx
  mov    $0x4,%esi
  mov    0x20(%rsp),%rdi
  mov    $0x0,%eax
  call   <show@plt>
  mov    0xe8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L181
  mov    $0x0,%eax
  add    $0xf8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L181:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: tag: D16
datatype: string
name: extract_symbolic_data
arguments: tag: D71
datatype: f32[2]
name: extract_symbolic_data
arguments: tag: D64
datatype: string
name: extract_symbolic_data
arguments: tag: D1
datatype: string
name: extract_symbolic_data
arguments: tag: D68
datatype: string
name: extract_symbolic_data
arguments: tag: D44
datatype: f32[4]
name: extract_symbolic_data
arguments: tag: D171
datatype: string
name: extract_symbolic_data
arguments: tag: D51
datatype: string
name: extract_symbolic_data
arguments: tag: D108
datatype: string
name: extract_symbolic_data
arguments: tag: D56
datatype: string
name: extract_symbolic_data
arguments: tag: D136
datatype: string
name: extract_symbolic_data
arguments: tag: D81
datatype: string
name: extract_symbolic_data
arguments: tag: D125
datatype: string
name: extract_symbolic_data
arguments: tag: D69
datatype: string

tool: D16:  Vector V : %f 


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

tool: D64:  Vector completo: %d 


tool: D1:  MU: %f 


tool: D68:  sigma: %f 



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

tool: D171:  Vector V de householder : %f 


tool: D51:  
 Beta: %f 



tool: D108:  
 V_1: %f 



tool: D56:  I_Bvvt:  %f

tool: D136: MULTIPLICA %f

tool: D81: acaboooooo 

tool: D125:  vectorc[j] %d

tool: D69: Nuevoooo 

assistant: ```c
double *vectores(double *arr, int row, int col, int c_actual) {
  int i, j;
  int sum_prod_c = 0;
  int sum_prod_p = 0;
  int sum_prod_v = 0;
  double beta = 0;
  double mu, sigma, v_1, acumula;
  int vectorc[4] = {0, 0, 0, 0};
  double vector[4] = {0, 0, 0, 0};
  for (i = 0; i < row - c_actual; i++) {
    vectorc[i] = *(arr + ((i + c_actual) * col) + c_actual);
    sum_prod_c += vectorc[i] * vectorc[i];
    if (i > 0)
      sum_prod_p += vectorc[i] * vectorc[i];
    if (i == 0)
      vector[i] = 1;
    else
      vector[i] = vectorc[i];
    printf(" Vector completo: %d \n", vectorc[i]);
    printf(" Vector V : %f \n", vector[i]);
  }
  mu = sqrt(sum_prod_c);
  sigma = sum_prod_p;
  printf(" MU: %f \n", mu);
  printf(" sigma: %f \n\n", sigma);
  if (sigma == 0 && vectorc[0] >= 0)
    beta = 0;
  else if (sigma == 0 && vectorc[0] < 0)
    beta = -2;
  else if (vectorc[0] <= 0)
    v_1 = vectorc[1] - mu;
  else
    v_1 = -sigma / (vectorc[0] + mu);
  beta = 2 * pow(v_1, 2) / (sigma + pow(v_1, 2));
  for (i = 0; i < row - c_actual; i++) {
    vector[i] = vector[i] / v_1;
    sum_prod_v += vector[i] * vector[i];
    printf(" Vector V de householder : %f \n", vector[i]);
  }
  printf(" \n Beta: %f \n\n", beta);
  printf(" \n V_1: %f \n\n", v_1);
  double I_Bvvt[4][4] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}};
  for (i = 0; i < row - c_actual; i++) {
    for (j = 0; j < row - c_actual; j++) {
      if (i != j)
        I_Bvvt[i][j] = -1 * (beta * vector[i] * vector[j]);
      else
        I_Bvvt[i][j] = 1 - (beta * vector[i] * vector[j]);
      acumula += ((I_Bvvt[i][j]) * vectorc[j]);
      printf(" I_Bvvt:  %f", I_Bvvt[i][j]);
      printf(" vectorc[j] %d", vectorc[j]);
    }
    *(arr + ((i + c_actual) * col) + c_actual) = acumula;
    printf("MULTIPLICA %f", acumula);
    printf("acaboooooo \n");
    acumula = 0;
  }
  show((double *)I_Bvvt, 4, 4);
  printf("Nuevoooo \n");
  show((double *)arr, 4, 3);
}
```