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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  jmp    L70
L52:
  movsd  -0x38(%rbp),%xmm1
  pxor   %xmm0,%xmm0
  comisd %xmm1,%xmm0
  jae    L29
  movsd  -0x38(%rbp),%xmm1
  movsd  -0x30(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x20(%rbp),%xmm1
  movsd  D24(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x20(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x18(%rbp),%xmm1
  movsd  D0(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L71
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
L71:
  movsd  -0x20(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  comisd D0(%rip),%xmm0
  jb     L61
  movsd  -0x20(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x18(%rbp),%xmm1
  movsd  D94(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L61
  movsd  -0x20(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x18(%rbp),%xmm1
  movsd  D89(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D38(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
L61:
  movsd  -0x20(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  comisd D94(%rip),%xmm0
  jb     L4
  movsd  -0x20(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x18(%rbp),%xmm1
  movsd  D51(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D67(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
L4:
  movsd  -0x20(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  subsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  movq   %rax,%xmm0
  lea    D4(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L70:
  lea    -0x30(%rbp),%rdx
  lea    -0x38(%rbp),%rax
  mov    %rax,%rsi
  lea    D106(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  test   %rax,%rax
  jne    L52
  jmp    L18
L29:
  nop
L18:
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L57
  call   <__stack_chk_fail@plt>
L57:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: label: D24
data_type: f64
name: unpack_data
arguments: label: D0
data_type: byte[16]
name: unpack_data
arguments: label: D94
data_type: byte[16]
name: unpack_data
arguments: label: D89
data_type: f64
name: unpack_data
arguments: label: D38
data_type: byte[8]
name: unpack_data
arguments: label: D51
data_type: f64
name: unpack_data
arguments: label: D67
data_type: byte[8]
name: unpack_data
arguments: label: D4
data_type: string
name: unpack_data
arguments: label: D106
data_type: string

tool: D24: 0.11

tool: {"D0": [0x00,0x00,0x00,0x00,0x00,0x20,0x8c,0x40,0x00,0x00,0x00,0x00,0x00,0x20,0x9c,0x40]}

tool: {"D94": [0x00,0x00,0x00,0x00,0x00,0x20,0x9c,0x40,0x33,0x33,0x33,0x33,0x33,0x33,0xc3,0x3f]}

tool: D89: 0.15

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

tool: D51: 0.275

tool: {"D67": [0x00,0x00,0x00,0x00,0x00,0x80,0x76,0x40]}

tool: D4: %.2lf


tool: D106: %lf %lf

assistant: ```c
int main() {
  double ht, vh, sl, sb, inss, ir;
  while (scanf("%lf %lf", &ht, &vh)) {
    if (ht <= 0)
      break;
    sb = ht * vh;
    inss = sb * 0.11;
    if ((sb - inss) < 900)
      ir = 0;
    if ((sb - inss) >= 900 && (sb - inss) < 1800)
      ir = ((sb - inss) * 0.15) - 135;
    if ((sb - inss) >= 1800)
      ir = ((sb - inss) * 0.275) - 360;
    sl = sb - inss - ir;
    printf("%.2lf\n", sl);
  }
  return 0;
}
```