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

```asm
<practice_2>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D121(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x40(%rbp),%rax
  mov    %rax,%rsi
  lea    D94(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  movsd  D79(%rip),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x30(%rbp),%xmm1
  movsd  D131(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x28(%rbp),%xmm1
  movsd  D79(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x20(%rbp),%xmm1
  movsd  D224(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x18(%rbp),%xmm1
  movsd  D224(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x40(%rbp),%xmm1
  movsd  D96(%rip),%xmm0
  comisd %xmm1,%xmm0
  jb     L25
  movsd  -0x40(%rbp),%xmm1
  movsd  D136(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  jmp    L56
L25:
  movsd  -0x40(%rbp),%xmm1
  movsd  D98(%rip),%xmm0
  comisd %xmm1,%xmm0
  jb     L24
  movsd  -0x40(%rbp),%xmm0
  movsd  D96(%rip),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D227(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x30(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  jmp    L56
L24:
  movsd  -0x40(%rbp),%xmm1
  movsd  D75(%rip),%xmm0
  comisd %xmm1,%xmm0
  jb     L98
  movsd  -0x40(%rbp),%xmm0
  movsd  D98(%rip),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D35(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x28(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  jmp    L56
L98:
  movsd  -0x40(%rbp),%xmm1
  movsd  D53(%rip),%xmm0
  comisd %xmm1,%xmm0
  jb     L11
  movsd  -0x40(%rbp),%xmm0
  movsd  D75(%rip),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D70(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x20(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  jmp    L56
L11:
  movsd  -0x40(%rbp),%xmm1
  movsd  D43(%rip),%xmm0
  comisd %xmm1,%xmm0
  jb     L4
  movsd  -0x40(%rbp),%xmm0
  movsd  D53(%rip),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D22(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x18(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  jmp    L56
L4:
  movsd  -0x40(%rbp),%xmm0
  comisd D43(%rip),%xmm0
  jbe    L56
  movsd  -0x40(%rbp),%xmm0
  movsd  D43(%rip),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D234(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x10(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
L56:
  mov    -0x38(%rbp),%rax
  movq   %rax,%xmm0
  lea    D225(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L62
  call   <__stack_chk_fail@plt>
L62:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_tag: D121
type_guessed: string
name: retrieve_data
arguments: data_tag: D94
type_guessed: string
name: retrieve_data
arguments: data_tag: D79
type_guessed: byte[8]
name: retrieve_data
arguments: data_tag: D131
type_guessed: byte[8]
name: retrieve_data
arguments: data_tag: D224
type_guessed: byte[8]
name: retrieve_data
arguments: data_tag: D96
type_guessed: byte[8]
name: retrieve_data
arguments: data_tag: D136
type_guessed: f64
name: retrieve_data
arguments: data_tag: D98
type_guessed: byte[8]
name: retrieve_data
arguments: data_tag: D227
type_guessed: f64
name: retrieve_data
arguments: data_tag: D75
type_guessed: byte[8]
name: retrieve_data
arguments: data_tag: D35
type_guessed: f64
name: retrieve_data
arguments: data_tag: D53
type_guessed: byte[8]
name: retrieve_data
arguments: data_tag: D70
type_guessed: f64
name: retrieve_data
arguments: data_tag: D43
type_guessed: byte[16]
name: retrieve_data
arguments: data_tag: D22
type_guessed: f64
name: retrieve_data
arguments: data_tag: D234
type_guessed: f64
name: retrieve_data
arguments: data_tag: D225
type_guessed: string

tool: D121: Net income:

tool: D94: %lf

tool: {"D79": [0x00,0x00,0x00,0x00,0x00,0x88,0xc3,0x40]}

tool: {"D131": [0x00,0x00,0x00,0x00,0x00,0x4c,0xbd,0x40]}

tool: {"D224": [0x00,0x00,0x00,0x00,0x00,0x70,0xb7,0x40]}

tool: {"D96": [0x00,0x00,0x00,0x00,0x00,0x6a,0xf8,0x40]}

tool: D136: 0.1

tool: {"D98": [0x00,0x00,0x00,0x00,0x00,0x6a,0x08,0x41]}

tool: D227: 0.075

tool: {"D75": [0x00,0x00,0x00,0x00,0x00,0x6a,0x18,0x41]}

tool: D35: 0.05

tool: {"D53": [0x00,0x00,0x00,0x00,0x80,0x4f,0x22,0x41]}

tool: D70: 0.03

tool: {"D43": [0x00,0x00,0x00,0x00,0x80,0x84,0x2e,0x41,0xb8,0x1e,0x85,0xeb,0x51,0xb8,0x8e,0x3f]}

tool: D22: 0.015

tool: D234: 0.01

tool: D225: royalties: bonus=%lf

assistant: ```c
void practice_2(void) {
  double i;
  double bonus1, bonus2, bonus4, bonus6, bonus10, bonus;
  printf("Net income:");
  scanf("%lf", &i);
  bonus1 = 100000 * 0.1;
  bonus2 = bonus1 + 100000 * 0.075;
  bonus4 = bonus2 + 200000 * 0.05;
  bonus6 = bonus4 + 200000 * 0.03;
  bonus10 = bonus6 + 400000 * 0.015;
  if (i <= 100000) {
    bonus = i * 0.1;
  } else if (i <= 200000) {
    bonus = bonus1 + (i - 100000) * 0.075;
  } else if (i <= 400000) {
    bonus = bonus2 + (i - 200000) * 0.05;
  } else if (i <= 600000) {
    bonus = bonus4 + (i - 400000) * 0.03;
  } else if (i <= 1000000) {
    bonus = bonus6 + (i - 600000) * 0.015;
  } else if (i > 1000000) {
    bonus = bonus10 + (i - 1000000) * 0.01;
  }
  printf("royalties: bonus=%lf", bonus);
  printf("\n");
}
```