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

```asm
<ex10>:
  endbr64
  push   %r13
  lea    D48(%rip),%r13
  push   %r12
  mov    %r13,%rdi
  push   %rbp
  lea    D26(%rip),%rbp
  push   %rbx
  lea    D61(%rip),%rbx
  sub    $0x18,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  mov    %rsp,%r12
  call   <print@plt>
  lea    D7(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  movss  (%rsp),%xmm0
  pxor   %xmm4,%xmm4
  comiss %xmm4,%xmm0
  ja     L69
  nopl   (%rax)
L29:
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  movss  (%rsp),%xmm0
  pxor   %xmm2,%xmm2
  comiss %xmm2,%xmm0
  jbe    L29
L69:
  lea    D36(%rip),%rdi
  xor    %eax,%eax
  lea    0x4(%rsp),%r12
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbx,%rdi
  lea    D26(%rip),%rbp
  call   <scanf@plt>
  movss  0x4(%rsp),%xmm0
  pxor   %xmm5,%xmm5
  comiss %xmm5,%xmm0
  ja     L59
  nop
L43:
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  movss  0x4(%rsp),%xmm0
  pxor   %xmm3,%xmm3
  comiss %xmm3,%xmm0
  jbe    L43
L59:
  movss  (%rsp),%xmm1
  comiss D22(%rip),%xmm1
  ja     L79
  xor    %esi,%esi
  comiss D89(%rip),%xmm1
  seta   %al
  seta   %dl
  seta   %sil
  movzbl %al,%eax
  movzbl %dl,%edx
  lea    0x43(%rsi,%rsi,2),%esi
  lea    0x41(%rax,%rax,2),%eax
  lea    0x42(%rdx,%rdx,2),%edx
L26:
  cvtss2sd %xmm0,%xmm0
  comisd D75(%rip),%xmm0
  ja     L25
  comisd D45(%rip),%xmm0
  cmovae %edx,%eax
  mov    %eax,%esi
L25:
  lea    D2(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r13,%rdi
  call   <print@plt>
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L65
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopl   0x0(%rax,%rax,1)
L79:
  mov    $0x49,%esi
  mov    $0x47,%eax
  mov    $0x48,%edx
  jmp    L26
L65:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: data_tag: D48
data_type: string
name: retrieve_data
arguments: data_tag: D26
data_type: string
name: retrieve_data
arguments: data_tag: D61
data_type: string
name: retrieve_data
arguments: data_tag: D7
data_type: string
name: retrieve_data
arguments: data_tag: D36
data_type: string
name: retrieve_data
arguments: data_tag: D22
data_type: byte[4]
name: retrieve_data
arguments: data_tag: D89
data_type: byte[4]
name: retrieve_data
arguments: data_tag: D75
data_type: f64[2]
name: retrieve_data
arguments: data_tag: D45
data_type: f64
name: retrieve_data
arguments: data_tag: D2
data_type: string

tool: D48: 
------------------------------


tool: D26: Valor invalido, tente novamente: 

tool: D61: %f

tool: D7: Informe o peso: 

tool: D36: Informe a altura: 

tool: {"D22": [0x00,0x00,0xb4,0x42]}

tool: {"D89": [0x00,0x00,0x70,0x42]}

tool: {"D75": [1.7,1.2]}

tool: D45: 1.2

tool: D2: Sua classificacao e: %c


assistant: ```c
void ex10() {
  print("\n------------------------------\n");
  float peso, altura;
  printf("Informe o peso: ");
  scanf("%f", &peso);
  while (!(peso > 0)) {
    printf("Valor invalido, tente novamente: ");
    scanf("%f", &peso);
  }
  printf("Informe a altura: ");
  scanf("%f", &altura);
  while (!(altura > 0)) {
    printf("Valor invalido, tente novamente: ");
    scanf("%f", &altura);
  }
  int grupo = 0;
  char grupos[10] = "ABCDEFGHI";
  if (peso > 90)
    grupo += 6;
  else if (peso > 60)
    grupo += 3;
  if (altura > 1.7)
    grupo += 2;
  else if (altura >= 1.2)
    grupo++;
  printf("Sua classificacao e: %c\n", grupos[grupo]);
  print("\n------------------------------\n");
}
```