user: Translate the below assembly code into C programming language:

```asm
<network_corr>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x88,%rsp
  mov    %rdi,0x20(%rsp)
  mov    %rsi,0x68(%rsp)
  mov    %rdx,0x70(%rsp)
  mov    %rcx,0x28(%rsp)
  mov    %r8,0x30(%rsp)
  mov    %r9,0x78(%rsp)
  cmpl   $0x0,0xd0(%rsp)
  jle    L35
  movslq 0xd8(%rsp),%rax
  shl    $0x2,%rax
  mov    %rax,0x50(%rsp)
  mov    0xd8(%rsp),%eax
  lea    -0x1(%rax),%eax
  lea    0x4(%r9,%rax,4),%rax
  mov    %rax,0x10(%rsp)
  mov    0xd8(%rsp),%eax
  imul   0xc8(%rsp),%eax
  mov    %eax,0x5c(%rsp)
  mov    0xc8(%rsp),%eax
  add    $0x1,%eax
  mov    %eax,0x38(%rsp)
  imul   0xd8(%rsp),%eax
  mov    %eax,0x60(%rsp)
  mov    0xd8(%rsp),%eax
  imul   0xc0(%rsp),%eax
  mov    %eax,0x64(%rsp)
  movq   $0x0,0x48(%rsp)
  movl   $0x0,0x58(%rsp)
  movl   $0x0,0x44(%rsp)
  movl   $0x0,0x40(%rsp)
  pxor   %xmm4,%xmm4
  movss  %xmm4,0x1c(%rsp)
  movl   $0x0,0x3c(%rsp)
  jmp    L72
L29:
  mov    (%r14),%eax
  lea    0x0(%rbp,%rax,1),%edx
  movslq %edx,%rdx
  mov    0x30(%rsp),%rcx
  lea    (%rcx,%rdx,8),%rdx
  add    %r15d,%eax
  cltq
  mov    0x28(%rsp),%rcx
  lea    (%rcx,%rax,4),%rsi
  movslq %r12d,%rax
  mov    0x20(%rsp),%rdi
  lea    (%rdi,%rax,4),%rdi
  mov    0xc0(%rsp),%ecx
  movss  0x0(%r13),%xmm0
  call   <corrc@plt>
  mov    0x8(%rsp),%rax
  mulss  (%rax),%xmm0
  addss  0x1c(%rsp),%xmm0
  movss  %xmm0,0x1c(%rsp)
L8:
  add    $0x4,%rbx
  add    $0x4,%r14
  add    0xc8(%rsp),%r15d
  add    0x38(%rsp),%ebp
  add    $0x4,%r13
  add    0xc0(%rsp),%r12d
  cmp    0x10(%rsp),%rbx
  je     L32
L4:
  mov    %rbx,0x8(%rsp)
  pxor   %xmm1,%xmm1
  ucomiss (%rbx),%xmm1
  jp     L29
  je     L8
  jmp    L29
L32:
  addl   $0x1,0x3c(%rsp)
  mov    0x3c(%rsp),%eax
  mov    0x50(%rsp),%rcx
  add    %rcx,0x10(%rsp)
  mov    0x5c(%rsp),%edi
  add    %edi,0x40(%rsp)
  mov    0x60(%rsp),%edi
  add    %edi,0x44(%rsp)
  mov    0x64(%rsp),%esi
  add    %esi,0x58(%rsp)
  add    %rcx,0x48(%rsp)
  cmp    %eax,0xd0(%rsp)
  je     L14
L72:
  cmpl   $0x0,0xd8(%rsp)
  jle    L32
  mov    0x78(%rsp),%rbx
  mov    0x48(%rsp),%rax
  add    %rax,%rbx
  mov    0x70(%rsp),%r14
  add    %rax,%r14
  mov    0x68(%rsp),%r13
  add    %rax,%r13
  mov    0x58(%rsp),%r12d
  mov    0x44(%rsp),%ebp
  mov    0x40(%rsp),%r15d
  jmp    L4
L35:
  pxor   %xmm5,%xmm5
  movss  %xmm5,0x1c(%rsp)
L14:
  movss  0x1c(%rsp),%xmm0
  add    $0x88,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
float network_corr(float *templates, float *sum_square_template, int *moveouts, float *data, double *csum_square_data, float *weights, int n_samples_template, int n_samples_data, int n_stations, int n_components) {
  int s, c, d, dd, t;
  int station_offset, component_offset;
  float cc, cc_sum = 0;
  for (s = 0; s < n_stations; s++) {
    station_offset = s * n_components;
    cc = 0;
    for (c = 0; c < n_components; c++) {
      component_offset = station_offset + c;
      if (weights[component_offset] == 0)
        continue;
      t = component_offset * n_samples_template;
      d = component_offset * n_samples_data + moveouts[component_offset];
      dd = component_offset * (n_samples_data + 1) + moveouts[component_offset];
      cc = corrc(templates + t, sum_square_template[component_offset], data + d, csum_square_data + dd, n_samples_template);
      cc_sum += cc * weights[component_offset];
    }
  }
  return cc_sum;
}
```