user: Demonstrate the C code that generates the assembly output below:

```asm
<main>:
  endbr64
  push   %rbx
  sub    $0x40,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x38(%rsp)
  xor    %eax,%eax
  lea    D37(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%ebx
  jmp    L31
L94:
  mov    %al,0x10(%rsp,%rbx,1)
  add    $0x1,%rbx
L31:
  mov    $0x0,%eax
  call   <getchar@plt>
  cmp    $0x18,%ebx
  jg     L47
  cmp    $0xa,%al
  jne    L94
L47:
  lea    D4(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0xc(%rsp),%rsi
  lea    D3(%rip),%rdi
  call   <scanf@plt>
  mov    0xc(%rsp),%edx
  cmp    $0xc7,%edx
  jg     L64
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  mulsd  D11(%rip),%xmm0
  cvtsd2ss %xmm0,%xmm0
L61:
  comiss D5(%rip),%xmm0
  jbe    L96
  cvtss2sd %xmm0,%xmm0
  movapd %xmm0,%xmm1
  mulsd  D22(%rip),%xmm1
  addsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
L96:
  cvtss2sd %xmm0,%xmm0
  lea    0x10(%rsp),%rsi
  lea    D63(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    0x38(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L59
  mov    $0x0,%eax
  add    $0x40,%rsp
  pop    %rbx
  ret
L64:
  lea    -0xc8(%rdx),%eax
  cmp    $0x63,%eax
  ja     L4
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  D80(%rip),%xmm0
  addsd  D29(%rip),%xmm0
  cvtsd2ss %xmm0,%xmm0
  jmp    L61
L4:
  pxor   %xmm0,%xmm0
  cmp    $0x12b,%edx
  jle    L96
  lea    -0x12c(%rdx),%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  addsd  D88(%rip),%xmm0
  cvtsd2ss %xmm0,%xmm0
  jmp    L61
L59:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D37
type: string
name: extract_symbolic_data
arguments: data_tag: D4
type: string
name: extract_symbolic_data
arguments: data_tag: D3
type: string
name: extract_symbolic_data
arguments: data_tag: D11
type: f64
name: extract_symbolic_data
arguments: data_tag: D5
type: byte[4]
name: extract_symbolic_data
arguments: data_tag: D22
type: f64
name: extract_symbolic_data
arguments: data_tag: D63
type: string
name: extract_symbolic_data
arguments: data_tag: D80
type: f64
name: extract_symbolic_data
arguments: data_tag: D29
type: f32[2]
name: extract_symbolic_data
arguments: data_tag: D88
type: f32[2]

tool: D37: Enter the Name of Consumer: 

tool: D4: Enter the Units Consumed: 

tool: D3: %d

tool: D11: 0.8

tool: {"D5": [0x00,0x00,0xc8,0x43]}

tool: D22: 0.15

tool: D63: ******************************
Name: %-25s 
Units Consumed: %d
AMT: %.2f 
******************************


tool: D80: 0.9

tool: {"D29": [0.0,3.5625]}

tool: {"D88": [0.0,3.73828125]}

assistant: ```c
int main() {
  char name[25], ch;
  int u, i = 0;
  float t = 0;
  printf("Enter the Name of Consumer: ");
  while ((ch = getchar()) != '\n' && i < 25)
    name[i++] = ch;
  printf("Enter the Units Consumed: ");
  scanf("%d", &u);
  if (u < 200)
    t = u * 0.80;
  if (u >= 200 && u < 300)
    t = 200 * 0.80 + (u - 200) * 0.90;
  if (u >= 300)
    t = 200 * 0.80 + 100 * 0.90 + (u - 300);
  if (t > 400)
    t += t * 0.15;
  printf("******************************\n"
         "Name: %-25s \n"
         "Units Consumed: %d\n"
         "AMT: %.2f \n"
         "******************************\n",
         name, u, t);
  return 0;
}
```