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

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xe8,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0xd8(%rsp)
  xor    %eax,%eax
  movq   $0x302f,0x10(%rsp)
  movq   $0x0,0x18(%rsp)
  movq   $0x0,0x20(%rsp)
  movq   $0x0,0x28(%rsp)
  movq   $0x0,0x30(%rsp)
  movq   $0x0,0x38(%rsp)
  movq   $0x0,0x40(%rsp)
  movq   $0x0,0x48(%rsp)
  movq   $0x0,0x50(%rsp)
  movq   $0x0,0x58(%rsp)
  movq   $0x0,0x60(%rsp)
  movq   $0x0,0x68(%rsp)
  movq   $0x0,0x70(%rsp)
  movq   $0x0,0x78(%rsp)
  movq   $0x0,0x80(%rsp)
  movq   $0x0,0x88(%rsp)
  movq   $0x0,0x90(%rsp)
  movq   $0x0,0x98(%rsp)
  movq   $0x0,0xa0(%rsp)
  movq   $0x0,0xa8(%rsp)
  movq   $0x0,0xb0(%rsp)
  movq   $0x0,0xb8(%rsp)
  movq   $0x0,0xc0(%rsp)
  movq   $0x0,0xc8(%rsp)
  movq   $0x0,0xd0(%rsp)
  mov    $0x2,%esi
  lea    D9(%rip),%rdi
  call   <printf@plt>
  mov    $0x1f,%esi
  lea    D2(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0x10(%rsp),%rbp
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <gets@plt>
  lea    0xd8(%rsp),%rax
  mov    %rax,0x8(%rsp)
  mov    $0x0,%r15d
  mov    $0x0,%r13d
  mov    $0x0,%r14d
L6:
  movzbl 0x0(%rbp),%ebx
  movsbl %bl,%r12d
  mov    %r12d,%edi
  call   <isalpha@plt>
  cmp    $0x1,%eax
  sbb    $0xffffffff,%r13d
  mov    %r12d,%edi
  call   <isspace@plt>
  cmp    $0x1,%eax
  sbb    $0xffffffff,%r15d
  mov    %r12d,%ebx
  sub    $0x30,%ebx
  cmp    $0xa,%ebx
  adc    $0x0,%r14d
  add    $0x1,%rbp
  cmp    0x8(%rsp),%rbp
  jne    L6
  lea    D47(%rip),%rdi
  call   <puts@plt>
  lea    D21(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %r15d,%ecx
  mov    %r14d,%edx
  mov    %r13d,%esi
  lea    D5(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    0xd8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L5
  mov    $0x0,%eax
  add    $0xe8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L5:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_tag: D9
type: string
name: disassemble_data
arguments: data_tag: D2
type: string
name: disassemble_data
arguments: data_tag: D47
type: string
name: disassemble_data
arguments: data_tag: D21
type: string
name: disassemble_data
arguments: data_tag: D5
type: string

tool: D9: 		The great letter counting program %c



tool: D2: Type here the sentence of which you want the letters to be counted: %c


tool: D47: 

	Here comes the results....

tool: D21: So....

tool: D5: 
In the previous sentence you had %d letters, %d digits and %d spaces!




assistant: ```c
int main() {
  char s[200] = {"/0"};
  int x, d, l, sp;
  x = l = sp = d = 0;
  printf("\t\tThe great letter counting program %c\n\n", 2);
  printf("Type here the sentence of which you want the letters to be counted: %c\n", 31);
  gets(s);
  for (x = 0; x < 200; x++) {
    if (isalpha(s[x]))
      l++;
    if (isspace(s[x]))
      sp++;
    if (isdigit(s[x]))
      d++;
  }
  printf("\n\n\tHere comes the results....\n");
  printf("So....");
  printf("\nIn the previous sentence you had %d letters, %d digits and %d spaces!\n\n\n", l, d, sp);
}
```