user: What would the C source look like for the assembly code provided here?

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x38,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  lea    D46(%rip),%rdi
  call   <puts@plt>
  lea    0x24(%rsp),%rsi
  lea    D37(%rip),%rdi
  call   <scanf@plt>
  mov    0x24(%rsp),%eax
  test   %eax,%eax
  js     L152
  mov    $0x0,%r15d
  mov    $0x0,%r14d
  mov    $0x0,%r13d
  mov    $0x0,%r12d
  mov    $0x0,%ebp
  movl   $0x0,0x1c(%rsp)
  movl   $0x0,0x18(%rsp)
  movl   $0x0,0x14(%rsp)
  mov    $0x0,%ebx
  lea    0x24(%rsp),%rsi
  mov    %rsi,0x8(%rsp)
  jmp    L33
L44:
  cmp    $0x3c,%eax
  jg     L8
  cmp    $0x28,%eax
  jg     L6
  cmp    $0x27,%eax
  jg     L62
  add    $0x1,%ebp
  mov    %eax,%edx
L118:
  sub    $0x29,%edx
  cmp    $0x13,%edx
  ja     L104
  add    $0x1,%r14d
L9:
  lea    D25(%rip),%rdi
  call   <puts@plt>
  mov    0x8(%rsp),%rsi
  lea    D37(%rip),%rdi
  call   <scanf@plt>
  add    $0x1,%ebx
  mov    0x24(%rsp),%eax
  cmp    $0x63,%ebx
  jg     L14
  test   %eax,%eax
  js     L14
L33:
  cmp    $0x50,%eax
  jle    L44
  addl   $0x1,0x14(%rsp)
L8:
  addl   $0x1,0x18(%rsp)
L6:
  addl   $0x1,0x1c(%rsp)
  mov    %eax,%edx
  lea    -0x51(%rax),%ecx
  cmp    $0x13,%ecx
  ja     L110
  add    $0x1,%r12d
L104:
  cmp    $0x28,%eax
  jg     L9
  add    $0x1,%r15d
  jmp    L9
L14:
  test   %ebx,%ebx
  jg     L103
L152:
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L1
  mov    $0x0,%eax
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L103:
  mov    %ebx,%esi
  lea    D5(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  sub    $0x8,%rsp
  push   %r15
  push   %r14
  push   %r13
  mov    %r12d,%r9d
  mov    %ebp,%r8d
  mov    0x3c(%rsp),%ecx
  mov    0x38(%rsp),%edx
  mov    0x34(%rsp),%esi
  lea    D8(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x20,%rsp
  jmp    L152
L62:
  mov    %eax,%edx
L110:
  lea    -0x3d(%rdx),%ecx
  cmp    $0x13,%ecx
  ja     L118
  add    $0x1,%r13d
  jmp    L104
L1:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D46
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D37
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D25
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D5
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D8
type_infered: string

tool: D46: Enter the List of Marks (-1 to finish) 

tool: D37: %d

tool: D25: Got That!!.. Next 

tool: D5: No of Students: %d 


tool: D8:  A= %d 
 B= %d 
 C= %d 
 D= %d 
 E= %d 
 F= %d 
 G= %d 
 H= %d 


assistant: ```c
int main() {
  int len = 0, n, a = 0, b = 0, c = 0, d = 0, e = 0, f = 0, g = 0, h = 0;
  printf("Enter the List of Marks (-1 to finish) \n");
  scanf("%d", &n);
  while (n >= 0 && len < 100) {
    if (n > 80)
      a++;
    if (n > 60)
      b++;
    if (n > 40)
      c++;
    if (n < 40)
      d++;
    if (n > 80 && n <= 100)
      e++;
    if (n > 60 && n <= 80)
      f++;
    if (n > 40 && n <= 60)
      g++;
    if (n <= 40)
      h++;
    printf("Got That!!.. Next \n");
    scanf("%d", &n);
    len++;
  }
  if (len > 0) {
    printf("No of Students: %d \n", len);
    printf(" A= %d \n B= %d \n C= %d \n D= %d \n "
           "E= %d \n F= %d \n G= %d \n H= %d \n",
           a, b, c, d, e, f, g, h);
  }
  return 0;
}
```