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

```asm
<ex1>:
  endbr64
  push   %rbp
  lea    D64(%rip),%rbp
  mov    %rbp,%rdi
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  call   <print@plt>
  lea    D38(%rip),%rdi
  xor    %eax,%eax
  call   <print@plt>
  lea    D48(%rip),%rdi
  xor    %eax,%eax
  call   <print@plt>
  lea    0x14(%rsp),%rcx
  xor    %eax,%eax
  lea    0x10(%rsp),%rdx
  lea    0xc(%rsp),%rsi
  lea    D76(%rip),%rdi
  call   <scanf@plt>
  mov    0xc(%rsp),%edx
  mov    0x10(%rsp),%eax
  mov    0x14(%rsp),%ecx
  cmp    %eax,%edx
  jle    L110
  cmp    %ecx,%eax
  jge    L121
L47:
  lea    (%rax,%rdx,1),%esi
  cmp    %ecx,%esi
  jge    L107
L66:
  lea    D79(%rip),%rdi
  xor    %eax,%eax
  call   <print@plt>
L7:
  xor    %eax,%eax
  mov    %rbp,%rdi
  call   <print@plt>
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L75
  add    $0x20,%rsp
  pop    %rbp
  ret
  nopw   0x0(%rax,%rax,1)
L110:
  cmp    %ecx,%edx
  jle    L94
  mov    %eax,%esi
  mov    %edx,%eax
L96:
  mov    %esi,%edx
  lea    (%rax,%rdx,1),%esi
  cmp    %ecx,%esi
  jl     L66
L107:
  pxor   %xmm0,%xmm0
  pxor   %xmm2,%xmm2
  cvtsi2sd %ecx,%xmm0
  cvtsi2sd %edx,%xmm2
  movapd %xmm0,%xmm1
  mulsd  %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  %xmm2,%xmm2
  mulsd  %xmm0,%xmm0
  addsd  %xmm2,%xmm0
  comisd %xmm1,%xmm0
  jbe    L134
  lea    D29(%rip),%rdi
  xor    %eax,%eax
  call   <print@plt>
  jmp    L7
  nopl   0x0(%rax,%rax,1)
L134:
  comisd %xmm0,%xmm1
  jbe    L77
  lea    D42(%rip),%rdi
  xor    %eax,%eax
  call   <print@plt>
  jmp    L7
  nopl   0x0(%rax)
L94:
  cmp    %ecx,%eax
  mov    %ecx,%esi
  mov    %edx,%ecx
  jle    L96
  mov    %eax,%edx
  mov    %esi,%eax
  jmp    L47
  nopl   0x0(%rax)
L121:
  mov    %ecx,%esi
  mov    %eax,%ecx
  mov    %esi,%eax
  jmp    L47
  nopl   0x0(%rax,%rax,1)
L77:
  lea    D45(%rip),%rdi
  xor    %eax,%eax
  call   <print@plt>
  jmp    L7
L75:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: tag: D64
type: string
name: disassemble_data
arguments: tag: D38
type: string
name: disassemble_data
arguments: tag: D48
type: string
name: disassemble_data
arguments: tag: D76
type: string
name: disassemble_data
arguments: tag: D79
type: string
name: disassemble_data
arguments: tag: D29
type: string
name: disassemble_data
arguments: tag: D42
type: string
name: disassemble_data
arguments: tag: D45
type: string

tool: D64: 
------------------------------


tool: D38: Dados tres valores a, b e c, correspondentes aos lados de um triangulo.
Faca um programa C, que leia os lados e informe o tipo de triangulo.

tool: D48: Informe os tres lados do triangulo:

tool: D76: %d%d%d

tool: D79: Esses valores nao correspondem ao lado de um triangulo.

tool: D29: Esse valores correspondem a um triangulo obtusangulo.

tool: D42: Esse valores correspondem a um triangulo acutangulo.

tool: D45: Esse valores correspondem a um triangulo retangulo.

assistant: ```c
void ex1() {
  print("\n------------------------------\n");
  print("Dados tres valores a, b e c, correspondentes aos lados de um triangulo.\nFaca um programa C, que leia os lados e informe o tipo de triangulo.");
  int a, b, c;
  print("Informe os tres lados do triangulo:");
  scanf("%d%d%d", &a, &b, &c);
  int lado1, lado2, lado3;
  void setVal(n1, n2, n3) {
    lado1 = n1;
    lado2 = n2;
    lado3 = n3;
  }
  if (a > b) {
    if (b < c) {
      setVal(a, b, c);
    } else {
      if (a > c) {
        setVal(a, c, b);
      } else {
        setVal(c, a, b);
      }
    }
  } else {
    if (a > c) {
      setVal(b, a, c);
    } else {
      if (b > c) {
        setVal(b, c, a);
      } else {
        setVal(c, b, a);
      }
    }
  }
  if (lado3 > lado1 + lado2) {
    print("Esses valores nao correspondem ao lado de um triangulo.");
  } else {
    if (pow(lado3, 2) < pow(lado1, 2) + pow(lado2, 2)) {
      print("Esse valores correspondem a um triangulo obtusangulo.");
    } else if (pow(lado3, 2) > pow(lado1, 2) + pow(lado2, 2)) {
      print("Esse valores correspondem a um triangulo acutangulo.");
    } else {
      print("Esse valores correspondem a um triangulo retangulo.");
    }
  }
  print("\n------------------------------\n");
}
```