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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x110,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movss  D378(%rip),%xmm0
  movss  %xmm0,-0x100(%rbp)
  movss  D378(%rip),%xmm0
  movss  %xmm0,-0xfc(%rbp)
  movss  D378(%rip),%xmm0
  movss  %xmm0,-0xf8(%rbp)
  movss  D183(%rip),%xmm0
  movss  %xmm0,-0xf4(%rbp)
  movss  D226(%rip),%xmm0
  movss  %xmm0,-0xf0(%rbp)
  movss  D396(%rip),%xmm0
  movss  %xmm0,-0xec(%rbp)
  movss  D491(%rip),%xmm0
  movss  %xmm0,-0xe8(%rbp)
  movss  D491(%rip),%xmm0
  movss  %xmm0,-0xe4(%rbp)
  movss  D40(%rip),%xmm0
  movss  %xmm0,-0xe0(%rbp)
  movss  D60(%rip),%xmm0
  movss  %xmm0,-0xdc(%rbp)
  movss  D455(%rip),%xmm0
  movss  %xmm0,-0xd8(%rbp)
  movss  D192(%rip),%xmm0
  movss  %xmm0,-0xd4(%rbp)
  movss  D617(%rip),%xmm0
  movss  %xmm0,-0xd0(%rbp)
  movss  D599(%rip),%xmm0
  movss  %xmm0,-0xcc(%rbp)
  movss  D396(%rip),%xmm0
  movss  %xmm0,-0xc8(%rbp)
  movss  D429(%rip),%xmm0
  movss  %xmm0,-0xc4(%rbp)
  movss  D60(%rip),%xmm0
  movss  %xmm0,-0xc0(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0xbc(%rbp)
  movss  D390(%rip),%xmm0
  movss  %xmm0,-0xb8(%rbp)
  movss  D97(%rip),%xmm0
  movss  %xmm0,-0xb4(%rbp)
  movss  D81(%rip),%xmm0
  movss  %xmm0,-0xb0(%rbp)
  movss  D97(%rip),%xmm0
  movss  %xmm0,-0xac(%rbp)
  movss  D58(%rip),%xmm0
  movss  %xmm0,-0xa8(%rbp)
  movss  D109(%rip),%xmm0
  movss  %xmm0,-0xa4(%rbp)
  movss  D316(%rip),%xmm0
  movss  %xmm0,-0xa0(%rbp)
  movss  D617(%rip),%xmm0
  movss  %xmm0,-0x9c(%rbp)
  movss  D446(%rip),%xmm0
  movss  %xmm0,-0x98(%rbp)
  movss  D378(%rip),%xmm0
  movss  %xmm0,-0x94(%rbp)
  movss  D296(%rip),%xmm0
  movss  %xmm0,-0x90(%rbp)
  movss  D425(%rip),%xmm0
  movss  %xmm0,-0x8c(%rbp)
  movss  D491(%rip),%xmm0
  movss  %xmm0,-0x88(%rbp)
  movss  D491(%rip),%xmm0
  movss  %xmm0,-0x84(%rbp)
  movss  D625(%rip),%xmm0
  movss  %xmm0,-0x80(%rbp)
  movss  D317(%rip),%xmm0
  movss  %xmm0,-0x7c(%rbp)
  movss  D466(%rip),%xmm0
  movss  %xmm0,-0x78(%rbp)
  movss  D202(%rip),%xmm0
  movss  %xmm0,-0x74(%rbp)
  movss  D461(%rip),%xmm0
  movss  %xmm0,-0x70(%rbp)
  movss  D284(%rip),%xmm0
  movss  %xmm0,-0x6c(%rbp)
  movss  D202(%rip),%xmm0
  movss  %xmm0,-0x68(%rbp)
  movss  D50(%rip),%xmm0
  movss  %xmm0,-0x64(%rbp)
  movss  D396(%rip),%xmm0
  movss  %xmm0,-0x60(%rbp)
  movss  D425(%rip),%xmm0
  movss  %xmm0,-0x5c(%rbp)
  movss  D40(%rip),%xmm0
  movss  %xmm0,-0x58(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x54(%rbp)
  movss  D457(%rip),%xmm0
  movss  %xmm0,-0x50(%rbp)
  movss  D456(%rip),%xmm0
  movss  %xmm0,-0x4c(%rbp)
  movss  D378(%rip),%xmm0
  movss  %xmm0,-0x48(%rbp)
  movss  D299(%rip),%xmm0
  movss  %xmm0,-0x44(%rbp)
  movss  D267(%rip),%xmm0
  movss  %xmm0,-0x40(%rbp)
  movss  D545(%rip),%xmm0
  movss  %xmm0,-0x3c(%rbp)
  movss  D133(%rip),%xmm0
  movss  %xmm0,-0x38(%rbp)
  movss  D397(%rip),%xmm0
  movss  %xmm0,-0x34(%rbp)
  movss  D133(%rip),%xmm0
  movss  %xmm0,-0x30(%rbp)
  movss  D491(%rip),%xmm0
  movss  %xmm0,-0x2c(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x24(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x20(%rbp)
  movss  D404(%rip),%xmm0
  movss  %xmm0,-0x1c(%rbp)
  movss  D406(%rip),%xmm0
  movss  %xmm0,-0x18(%rbp)
  movss  D390(%rip),%xmm0
  movss  %xmm0,-0x14(%rbp)
  lea    D230(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x110(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x104(%rbp)
  jmp    L31
L47:
  movl   $0x0,-0x10c(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x108(%rbp)
  jmp    L63
L67:
  mov    -0x10c(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x110(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  movss  -0x100(%rbp,%rax,4),%xmm0
  movss  -0x108(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x108(%rbp)
  addl   $0x1,-0x10c(%rbp)
L63:
  cmpl   $0xb,-0x10c(%rbp)
  jle    L67
  pxor   %xmm2,%xmm2
  cvtss2sd -0x108(%rbp),%xmm2
  movq   %xmm2,%rax
  mov    -0x110(%rbp),%edx
  add    $0x7d0,%edx
  movq   %rax,%xmm0
  mov    %edx,%esi
  lea    D343(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movss  -0x104(%rbp),%xmm0
  addss  -0x108(%rbp),%xmm0
  movss  %xmm0,-0x104(%rbp)
  addl   $0x1,-0x110(%rbp)
L31:
  cmpl   $0x4,-0x110(%rbp)
  jle    L47
  movss  -0x104(%rbp),%xmm0
  movss  D38(%rip),%xmm1
  divss  %xmm1,%xmm0
  pxor   %xmm3,%xmm3
  cvtss2sd %xmm0,%xmm3
  movq   %xmm3,%rax
  movq   %rax,%xmm0
  lea    D21(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    D201(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D36(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x10c(%rbp)
  jmp    L14
L37:
  movl   $0x0,-0x110(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x108(%rbp)
  jmp    L27
L30:
  mov    -0x10c(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x110(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  movss  -0x100(%rbp,%rax,4),%xmm0
  movss  -0x108(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x108(%rbp)
  addl   $0x1,-0x110(%rbp)
L27:
  cmpl   $0x4,-0x110(%rbp)
  jle    L30
  movss  -0x108(%rbp),%xmm0
  movss  D38(%rip),%xmm1
  divss  %xmm1,%xmm0
  pxor   %xmm4,%xmm4
  cvtss2sd %xmm0,%xmm4
  movq   %xmm4,%rax
  movq   %rax,%xmm0
  lea    D124(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  addl   $0x1,-0x10c(%rbp)
L14:
  cmpl   $0xb,-0x10c(%rbp)
  jle    L37
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L84
  call   <__stack_chk_fail@plt>
L84:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D378
type_infered: f32
name: extract_symbolic_data
arguments: tag: D183
type_infered: f32
name: extract_symbolic_data
arguments: tag: D226
type_infered: f32
name: extract_symbolic_data
arguments: tag: D396
type_infered: f32
name: extract_symbolic_data
arguments: tag: D491
type_infered: f32
name: extract_symbolic_data
arguments: tag: D40
type_infered: f32
name: extract_symbolic_data
arguments: tag: D60
type_infered: f32
name: extract_symbolic_data
arguments: tag: D455
type_infered: f32
name: extract_symbolic_data
arguments: tag: D192
type_infered: f32
name: extract_symbolic_data
arguments: tag: D617
type_infered: f32
name: extract_symbolic_data
arguments: tag: D599
type_infered: f32
name: extract_symbolic_data
arguments: tag: D429
type_infered: f32
name: extract_symbolic_data
arguments: tag: D390
type_infered: f32
name: extract_symbolic_data
arguments: tag: D97
type_infered: f32
name: extract_symbolic_data
arguments: tag: D81
type_infered: f32
name: extract_symbolic_data
arguments: tag: D58
type_infered: f32
name: extract_symbolic_data
arguments: tag: D109
type_infered: f32
name: extract_symbolic_data
arguments: tag: D316
type_infered: f32
name: extract_symbolic_data
arguments: tag: D446
type_infered: f32
name: extract_symbolic_data
arguments: tag: D296
type_infered: f32
name: extract_symbolic_data
arguments: tag: D425
type_infered: f32
name: extract_symbolic_data
arguments: tag: D625
type_infered: f32
name: extract_symbolic_data
arguments: tag: D317
type_infered: f32
name: extract_symbolic_data
arguments: tag: D466
type_infered: f32
name: extract_symbolic_data
arguments: tag: D202
type_infered: f32
name: extract_symbolic_data
arguments: tag: D461
type_infered: f32
name: extract_symbolic_data
arguments: tag: D284
type_infered: f32
name: extract_symbolic_data
arguments: tag: D50
type_infered: f32
name: extract_symbolic_data
arguments: tag: D457
type_infered: f32
name: extract_symbolic_data
arguments: tag: D456
type_infered: f32
name: extract_symbolic_data
arguments: tag: D299
type_infered: f32
name: extract_symbolic_data
arguments: tag: D267
type_infered: f32
name: extract_symbolic_data
arguments: tag: D545
type_infered: f32
name: extract_symbolic_data
arguments: tag: D133
type_infered: f32
name: extract_symbolic_data
arguments: tag: D397
type_infered: f32
name: extract_symbolic_data
arguments: tag: D404
type_infered: f32
name: extract_symbolic_data
arguments: tag: D406
type_infered: f32
name: extract_symbolic_data
arguments: tag: D230
type_infered: string
name: extract_symbolic_data
arguments: tag: D343
type_infered: string
name: extract_symbolic_data
arguments: tag: D38
type_infered: byte[4]
name: extract_symbolic_data
arguments: tag: D21
type_infered: string
name: extract_symbolic_data
arguments: tag: D201
type_infered: string
name: extract_symbolic_data
arguments: tag: D36
type_infered: string
name: extract_symbolic_data
arguments: tag: D124
type_infered: string

tool: D378: 4.3

tool: D183: 3

tool: D226: 2

tool: D396: 1.2

tool: D491: 0.2

tool: D40: 0.4

tool: D60: 2.4

tool: D455: 3.5

tool: D192: 6.6

tool: D617: 8.5

tool: D599: 8.2

tool: D429: 1.6

tool: D390: 5.2

tool: D97: 0.9

tool: D81: 0.3

tool: D58: 1.4

tool: D109: 7.3

tool: D316: 9.1

tool: D446: 6.7

tool: D296: 2.1

tool: D425: 0.8

tool: D625: 1.1

tool: D317: 2.3

tool: D466: 6.1

tool: D202: 8.4

tool: D461: 7.2

tool: D284: 9.9

tool: D50: 3.3

tool: D457: 0.6

tool: D456: 1.7

tool: D299: 6.2

tool: D267: 7.6

tool: D545: 5.6

tool: D133: 3.8

tool: D397: 2.8

tool: D404: 1.3

tool: D406: 2.6

tool: D230:  YEAR RAINFALL (inches) 

tool: D343: %5d %15.1f


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

tool: D21: 
The yearly average is %.1f inches.



tool: D201: MONTHLY AVERAGES: 


tool: D36:  Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

tool: D124: %4.1f 

assistant: ```c
int main(void) {
  const float rain[5][12] = {{4.3, 4.3, 4.3, 3.0, 2.0, 1.2, 0.2, 0.2, 0.4, 2.4, 3.5, 6.6}, {8.5, 8.2, 1.2, 1.6, 2.4, 0.0, 5.2, 0.9, 0.3, 0.9, 1.4, 7.3}, {9.1, 8.5, 6.7, 4.3, 2.1, 0.8, 0.2, 0.2, 1.1, 2.3, 6.1, 8.4}, {7.2, 9.9, 8.4, 3.3, 1.2, 0.8, 0.4, 0.0, 0.6, 1.7, 4.3, 6.2}, {7.6, 5.6, 3.8, 2.8, 3.8, 0.2, 0.0, 0.0, 0.0, 1.3, 2.6, 5.2}};
  int year, month;
  float subtot, total;
  printf(" YEAR RAINFALL (inches) \n");
  for (year = 0, total = 0; year < 5; year++) {
    for (month = 0, subtot = 0; month < 12; month++)
      subtot += rain[year][month];
    printf("%5d %15.1f\n", 2000 + year, subtot);
    total += subtot;
  }
  printf("\nThe yearly average is %.1f inches.\n\n", total / 5);
  printf("MONTHLY AVERAGES: \n\n");
  printf(" Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec\n");
  for (month = 0; month < 12; month++) {
    for (year = 0, subtot = 0; year < 5; year++)
      subtot += rain[year][month];
    printf("%4.1f ", subtot / 5);
  }
  printf("\n");
  return 0;
}
```