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

```asm
<foo>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x3f0,%rsp
  mov    %edi,-0x3e4(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x3d4(%rbp)
  movl   $0x0,-0x3d8(%rbp)
  jmp    L212
L279:
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm0
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  %xmm0,-0x1f0(%rbp,%rax,4)
  addl   $0x1,-0x3d8(%rbp)
L212:
  mov    -0x3d8(%rbp),%eax
  cmp    -0x3e4(%rbp),%eax
  jl     L279
  lea    -0x1f0(%rbp),%rax
  mov    %rax,%rdi
  call   <fbar@plt>
  movl   $0x0,-0x3d8(%rbp)
  jmp    L225
L42:
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm0
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  %xmm0,-0x1f0(%rbp,%rax,4)
  addl   $0x1,-0x3d8(%rbp)
L225:
  cmpl   $0xf,-0x3d8(%rbp)
  jle    L42
  lea    -0x1f0(%rbp),%rax
  mov    %rax,%rdi
  call   <fbar@plt>
  movl   $0x0,-0x3d8(%rbp)
  jmp    L111
L69:
  mov    -0x3d8(%rbp),%eax
  cltq
  movsd  -0x120(%rbp,%rax,8),%xmm0
  mov    -0x3d8(%rbp),%eax
  cltq
  movsd  %xmm0,-0x1a0(%rbp,%rax,8)
  addl   $0x1,-0x3d8(%rbp)
L111:
  cmpl   $0xf,-0x3d8(%rbp)
  jle    L69
  lea    -0x1f0(%rbp),%rax
  mov    %rax,%rdi
  call   <fbar@plt>
  movl   $0x0,-0x3d8(%rbp)
  jmp    L276
L115:
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  D1(%rip),%xmm0
  movss  %xmm0,-0x1f0(%rbp,%rax,4)
  addl   $0x1,-0x3d8(%rbp)
L276:
  cmpl   $0xf,-0x3d8(%rbp)
  jle    L115
  lea    -0x1f0(%rbp),%rax
  mov    %rax,%rdi
  call   <fbar@plt>
  movl   $0x0,-0x3d8(%rbp)
  jmp    L263
L286:
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm1
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm0
  addss  %xmm0,%xmm1
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x2f0(%rbp,%rax,4),%xmm0
  addss  %xmm1,%xmm0
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  %xmm0,-0x1f0(%rbp,%rax,4)
  addl   $0x1,-0x3d8(%rbp)
L263:
  cmpl   $0xf,-0x3d8(%rbp)
  jle    L286
  lea    -0x1f0(%rbp),%rax
  mov    %rax,%rdi
  call   <fbar@plt>
  movl   $0x0,-0x3d8(%rbp)
  jmp    L238
L21:
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm1
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm0
  mulss  %xmm1,%xmm0
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  %xmm0,-0x1f0(%rbp,%rax,4)
  addl   $0x1,-0x3d8(%rbp)
L238:
  cmpl   $0xf,-0x3d8(%rbp)
  jle    L21
  lea    -0x1f0(%rbp),%rax
  mov    %rax,%rdi
  call   <fbar@plt>
  movl   $0x0,-0x3d8(%rbp)
  jmp    L159
L259:
  mov    -0x3d8(%rbp),%eax
  add    $0x8,%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm1
  mov    -0x3d8(%rbp),%eax
  add    $0x8,%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm0
  mulss  %xmm1,%xmm0
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm2
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  %xmm0,-0x1f0(%rbp,%rax,4)
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm1
  mov    -0x3d8(%rbp),%eax
  add    $0x8,%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x3d8(%rbp),%eax
  add    $0x8,%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm2
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  %xmm0,-0x2f0(%rbp,%rax,4)
  addl   $0x1,-0x3d8(%rbp)
L159:
  cmpl   $0x7,-0x3d8(%rbp)
  jle    L259
  lea    -0x1f0(%rbp),%rax
  mov    %rax,%rdi
  call   <fbar@plt>
  movl   $0x0,-0x3d8(%rbp)
  jmp    L12
L184:
  mov    -0x3d8(%rbp),%eax
  add    $0x8,%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm1
  mov    -0x3d8(%rbp),%eax
  add    $0x8,%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm0
  mulss  %xmm1,%xmm0
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm2
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  %xmm0,-0x1f0(%rbp,%rax,4)
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm1
  mov    -0x3d8(%rbp),%eax
  add    $0x8,%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x3d8(%rbp),%eax
  add    $0x8,%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm2
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm0
  mulss  %xmm2,%xmm0
  mov    -0x3d8(%rbp),%eax
  add    $0x8,%eax
  addss  %xmm1,%xmm0
  cltq
  movss  %xmm0,-0x1f0(%rbp,%rax,4)
  addl   $0x1,-0x3d8(%rbp)
L12:
  cmpl   $0x7,-0x3d8(%rbp)
  jle    L184
  lea    -0x1f0(%rbp),%rax
  mov    %rax,%rdi
  call   <fbar@plt>
  movl   $0x0,-0x3d8(%rbp)
  jmp    L161
L132:
  mov    -0x3d8(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm1
  mov    -0x3d8(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm0
  mulss  %xmm1,%xmm0
  mov    -0x3d8(%rbp),%eax
  add    %eax,%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm2
  mov    -0x3d8(%rbp),%eax
  add    %eax,%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  %xmm0,-0x1f0(%rbp,%rax,4)
  mov    -0x3d8(%rbp),%eax
  add    %eax,%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm1
  mov    -0x3d8(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x3d8(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm2
  mov    -0x3d8(%rbp),%eax
  add    %eax,%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  %xmm0,-0x2f0(%rbp,%rax,4)
  addl   $0x1,-0x3d8(%rbp)
L161:
  cmpl   $0x7,-0x3d8(%rbp)
  jle    L132
  lea    -0x1f0(%rbp),%rax
  mov    %rax,%rdi
  call   <fbar@plt>
  movl   $0x0,-0x3d8(%rbp)
  jmp    L124
L244:
  mov    -0x3d8(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm1
  mov    -0x3d8(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm0
  mulss  %xmm1,%xmm0
  mov    -0x3d8(%rbp),%eax
  add    %eax,%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm2
  mov    -0x3d8(%rbp),%eax
  add    %eax,%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm1
  mulss  %xmm2,%xmm1
  mov    -0x3d8(%rbp),%eax
  add    %eax,%eax
  subss  %xmm1,%xmm0
  cltq
  movss  %xmm0,-0x1f0(%rbp,%rax,4)
  mov    -0x3d8(%rbp),%eax
  add    %eax,%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm1
  mov    -0x3d8(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x3d8(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm2
  mov    -0x3d8(%rbp),%eax
  add    %eax,%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm0
  mulss  %xmm2,%xmm0
  mov    -0x3d8(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  addss  %xmm1,%xmm0
  cltq
  movss  %xmm0,-0x1f0(%rbp,%rax,4)
  addl   $0x1,-0x3d8(%rbp)
L124:
  cmpl   $0x7,-0x3d8(%rbp)
  jle    L244
  lea    -0x1f0(%rbp),%rax
  mov    %rax,%rdi
  call   <fbar@plt>
  movl   $0x0,-0x3d8(%rbp)
  jmp    L187
L34:
  mov    -0x3d8(%rbp),%eax
  cltq
  mov    -0x270(%rbp,%rax,4),%edx
  mov    -0x3d8(%rbp),%eax
  cltq
  mov    -0x230(%rbp,%rax,4),%eax
  imul   %eax,%edx
  mov    -0x3d8(%rbp),%eax
  cltq
  mov    %edx,-0x2b0(%rbp,%rax,4)
  addl   $0x1,-0x3d8(%rbp)
L187:
  cmpl   $0xf,-0x3d8(%rbp)
  jle    L34
  lea    -0x2b0(%rbp),%rax
  mov    %rax,%rdi
  call   <ibar@plt>
  movl   $0x0,-0x3d8(%rbp)
  jmp    L32
L174:
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm1
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm0
  addss  %xmm1,%xmm0
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  %xmm0,-0x1f0(%rbp,%rax,4)
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm1
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm0
  addss  %xmm1,%xmm0
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  %xmm0,-0x2f0(%rbp,%rax,4)
  mov    -0x3d8(%rbp),%eax
  cltq
  mov    -0x270(%rbp,%rax,4),%edx
  mov    -0x3d8(%rbp),%eax
  cltq
  mov    -0x230(%rbp,%rax,4),%eax
  add    %eax,%edx
  mov    -0x3d8(%rbp),%eax
  cltq
  mov    %edx,-0x2b0(%rbp,%rax,4)
  addl   $0x1,-0x3d8(%rbp)
L32:
  cmpl   $0xf,-0x3d8(%rbp)
  jle    L174
  lea    -0x2b0(%rbp),%rax
  mov    %rax,%rdi
  call   <ibar@plt>
  lea    -0x1f0(%rbp),%rax
  mov    %rax,%rdi
  call   <fbar@plt>
  lea    -0x2f0(%rbp),%rax
  mov    %rax,%rdi
  call   <fbar@plt>
  movl   $0x0,-0x3d8(%rbp)
  jmp    L70
L190:
  mov    -0x3d8(%rbp),%eax
  cltq
  mov    -0x270(%rbp,%rax,4),%edx
  mov    -0x3d8(%rbp),%eax
  cltq
  mov    -0x230(%rbp,%rax,4),%eax
  add    %eax,%edx
  mov    -0x3d8(%rbp),%eax
  cltq
  mov    %edx,-0x2b0(%rbp,%rax,4)
  mov    -0x3d8(%rbp),%eax
  cltq
  movzwl -0x3b0(%rbp,%rax,2),%eax
  mov    %eax,%edx
  mov    -0x3d8(%rbp),%eax
  cltq
  movzwl -0x390(%rbp,%rax,2),%eax
  add    %edx,%eax
  mov    %eax,%edx
  mov    -0x3d8(%rbp),%eax
  cltq
  mov    %dx,-0x3d0(%rbp,%rax,2)
  addl   $0x1,-0x3d8(%rbp)
L70:
  cmpl   $0xf,-0x3d8(%rbp)
  jle    L190
  lea    -0x2b0(%rbp),%rax
  mov    %rax,%rdi
  call   <ibar@plt>
  lea    -0x3d0(%rbp),%rax
  mov    %rax,%rdi
  call   <sbar@plt>
  movl   $0x0,-0x3d8(%rbp)
  jmp    L90
L13:
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm1
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm0
  addss  %xmm1,%xmm0
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  %xmm0,-0x1f0(%rbp,%rax,4)
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x370(%rbp,%rax,4),%xmm1
  mov    -0x3d8(%rbp),%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm0
  mov    -0x3d8(%rbp),%eax
  add    $0x1,%eax
  addss  %xmm1,%xmm0
  cltq
  movss  %xmm0,-0x1f0(%rbp,%rax,4)
  addl   $0x1,-0x3d8(%rbp)
L90:
  cmpl   $0xf,-0x3d8(%rbp)
  jle    L13
  lea    -0x1f0(%rbp),%rax
  mov    %rax,%rdi
  call   <fbar@plt>
  nop
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L57
  call   <__stack_chk_fail@plt>
L57:
  leave
  ret
```

tool_calls: name: parse_data
arguments: tag: D1
data_type: byte[4]

tool: {"D1": [0x00,0x00,0xa0,0x40]}

assistant: ```c
foo(int n) {
  float a[16 + 1];
  float b[16];
  float c[16];
  float d[16];
  int ia[16];
  int ib[16];
  int ic[16];
  double da[16];
  double db[16];
  short sa[16];
  short sb[16];
  short sc[16];
  int i, j;
  int diff = 0;
  char cb[16];
  char cc[16];
  char image[16][16];
  char block[16][16];
  for (i = 0; i < n; i++) {
    a[i] = b[i];
  }
  fbar(a);
  for (i = 0; i < 16; i++) {
    a[i] = b[i];
  }
  fbar(a);
  for (i = 0; i < 16; i++) {
    da[i] = db[i];
  }
  fbar(a);
  for (i = 0; i < 16; i++) {
    a[i] = 5;
  }
  fbar(a);
  for (i = 0; i < 16; i++) {
    a[i] = b[i] + c[i] + d[i];
  }
  fbar(a);
  for (i = 0; i < 16; i++) {
    a[i] = b[i] * c[i];
  }
  fbar(a);
  for (i = 0; i < 16 / 2; i++) {
    a[i] = b[i + 16 / 2] * c[i + 16 / 2] - b[i] * c[i];
    d[i] = b[i] * c[i + 16 / 2] + b[i + 16 / 2] * c[i];
  }
  fbar(a);
  for (i = 0; i < 16 / 2; i++) {
    a[i] = b[i + 16 / 2] * c[i + 16 / 2] - b[i] * c[i];
    a[i + 16 / 2] = b[i] * c[i + 16 / 2] + b[i + 16 / 2] * c[i];
  }
  fbar(a);
  for (i = 0; i < 16 / 2; i++) {
    a[i] = b[2 * i + 1] * c[2 * i + 1] - b[2 * i] * c[2 * i];
    d[i] = b[2 * i] * c[2 * i + 1] + b[2 * i + 1] * c[2 * i];
  }
  fbar(a);
  for (i = 0; i < 16 / 2; i++) {
    a[2 * i] = b[2 * i + 1] * c[2 * i + 1] - b[2 * i] * c[2 * i];
    a[2 * i + 1] = b[2 * i] * c[2 * i + 1] + b[2 * i + 1] * c[2 * i];
  }
  fbar(a);
  for (i = 0; i < 16; i++) {
    ia[i] = ib[i] * ic[i];
  }
  ibar(ia);
  for (i = 0; i < 16; i++) {
    a[i] = b[i] + c[i];
    d[i] = b[i] + c[i];
    ia[i] = ib[i] + ic[i];
  }
  ibar(ia);
  fbar(a);
  fbar(d);
  for (i = 0; i < 16; i++) {
    ia[i] = ib[i] + ic[i];
    sa[i] = sb[i] + sc[i];
  }
  ibar(ia);
  sbar(sa);
  for (i = 0; i < 16; i++) {
    a[i] = b[i] + c[i];
    a[i + 1] = b[i] + c[i];
  }
  fbar(a);
}
```