user: Please show me the C implementation that matches the assembly code listed below:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xa0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x94(%rbp)
  movb   $0x0,-0x96(%rbp)
  movb   $0x0,-0x95(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x90(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x88(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x80(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x78(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x70(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x68(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x58(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  lea    D78(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D58(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x88(%rbp),%rdx
  lea    -0x90(%rbp),%rax
  mov    %rax,%rsi
  lea    D327(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movsd  -0x90(%rbp),%xmm1
  movsd  -0x88(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  -0x88(%rbp),%xmm0
  mov    -0x90(%rbp),%rax
  movsd  -0x38(%rbp),%xmm1
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D355(%rip),%rax
  mov    %rax,%rdi
  mov    $0x3,%eax
  call   <printf@plt>
  lea    D231(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x78(%rbp),%rdx
  lea    -0x80(%rbp),%rax
  mov    %rax,%rsi
  lea    D327(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movsd  -0x80(%rbp),%xmm1
  movsd  D324(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x80(%rbp),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x78(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x78(%rbp),%xmm1
  movsd  -0x80(%rbp),%xmm0
  movsd  -0x30(%rbp),%xmm2
  mov    D324(%rip),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D0(%rip),%rax
  mov    %rax,%rdi
  mov    $0x4,%eax
  call   <printf@plt>
  lea    D145(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x96(%rbp),%rax
  mov    %rax,%rsi
  lea    D311(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movzbl -0x96(%rbp),%eax
  add    $0x4,%eax
  mov    %al,-0x95(%rbp)
  movsbl -0x95(%rbp),%edx
  movzbl -0x96(%rbp),%eax
  movsbl %al,%eax
  mov    %eax,%esi
  lea    D185(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movsd  D334(%rip),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  lea    D207(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movsd  -0x28(%rbp),%xmm2
  movsd  D235(%rip),%xmm1
  movsd  D214(%rip),%xmm0
  mov    D49(%rip),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D247(%rip),%rax
  mov    %rax,%rdi
  mov    $0x4,%eax
  call   <printf@plt>
  lea    D276(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D38(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x60(%rbp),%rcx
  lea    -0x68(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    %rax,%rsi
  lea    D357(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movsd  -0x70(%rbp),%xmm1
  movsd  D4(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x70(%rbp),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x68(%rbp),%xmm2
  movsd  -0x70(%rbp),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0x60(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  lea    D225(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movsd  -0x60(%rbp),%xmm2
  movsd  -0x70(%rbp),%xmm1
  movsd  -0x68(%rbp),%xmm0
  mov    -0x70(%rbp),%rax
  movsd  -0x20(%rbp),%xmm3
  movapd %xmm3,%xmm4
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D60(%rip),%rax
  mov    %rax,%rdi
  mov    $0x5,%eax
  call   <printf@plt>
  lea    D234(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D2(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x50(%rbp),%rdx
  lea    -0x58(%rbp),%rax
  mov    %rax,%rsi
  lea    D327(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movsd  -0x58(%rbp),%xmm0
  movsd  -0x50(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x18(%rbp)
  movsd  -0x50(%rbp),%xmm0
  mov    -0x58(%rbp),%rax
  movsd  -0x18(%rbp),%xmm1
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D259(%rip),%rax
  mov    %rax,%rdi
  mov    $0x3,%eax
  call   <printf@plt>
  lea    D208(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D188(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x94(%rbp),%rcx
  lea    -0x40(%rbp),%rdx
  lea    -0x48(%rbp),%rax
  mov    %rax,%rsi
  lea    D237(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movsd  -0x48(%rbp),%xmm1
  movsd  D70(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x40(%rbp),%xmm1
  mov    -0x94(%rbp),%eax
  cltd
  shr    $0x1f,%edx
  add    %edx,%eax
  and    $0x1,%eax
  sub    %edx,%eax
  pxor   %xmm3,%xmm3
  cvtsi2sd %eax,%xmm3
  movapd %xmm1,%xmm2
  divsd  %xmm3,%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D324(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  mov    -0x94(%rbp),%edx
  movsd  -0x40(%rbp),%xmm1
  movsd  -0x48(%rbp),%xmm0
  movsd  -0x10(%rbp),%xmm3
  movsd  D324(%rip),%xmm2
  mov    D70(%rip),%rax
  movapd %xmm3,%xmm4
  movapd %xmm2,%xmm3
  mov    %edx,%esi
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D46(%rip),%rax
  mov    %rax,%rdi
  mov    $0x5,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L2
  call   <__stack_chk_fail@plt>
L2:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D78
type: string
name: unpack_data
arguments: data_tag: D58
type: string
name: unpack_data
arguments: data_tag: D327
type: string
name: unpack_data
arguments: data_tag: D355
type: string
name: unpack_data
arguments: data_tag: D231
type: string
name: unpack_data
arguments: data_tag: D324
type: f64
name: unpack_data
arguments: data_tag: D0
type: string
name: unpack_data
arguments: data_tag: D145
type: string
name: unpack_data
arguments: data_tag: D311
type: string
name: unpack_data
arguments: data_tag: D185
type: string
name: unpack_data
arguments: data_tag: D334
type: byte[8]
name: unpack_data
arguments: data_tag: D207
type: string
name: unpack_data
arguments: data_tag: D235
type: f64
name: unpack_data
arguments: data_tag: D214
type: f64
name: unpack_data
arguments: data_tag: D49
type: f64
name: unpack_data
arguments: data_tag: D247
type: string
name: unpack_data
arguments: data_tag: D276
type: string
name: unpack_data
arguments: data_tag: D38
type: string
name: unpack_data
arguments: data_tag: D357
type: string
name: unpack_data
arguments: data_tag: D4
type: f32[2]
name: unpack_data
arguments: data_tag: D225
type: string
name: unpack_data
arguments: data_tag: D60
type: string
name: unpack_data
arguments: data_tag: D234
type: string
name: unpack_data
arguments: data_tag: D2
type: string
name: unpack_data
arguments: data_tag: D259
type: string
name: unpack_data
arguments: data_tag: D208
type: string
name: unpack_data
arguments: data_tag: D188
type: string
name: unpack_data
arguments: data_tag: D237
type: string
name: unpack_data
arguments: data_tag: D70
type: f32[2]
name: unpack_data
arguments: data_tag: D46
type: string

tool: D78: *************** WELCOME TO THE EQUATION EVALUATOR **************


tool: D58: Please enter the mass and acceleration (both floating-point values) for use in Newton's Second Law: 

tool: D327: %lf%lf

tool: D355: Newton's Second Law: force = mass * acceleration = %lf * %lf = %lf


tool: D231: 
Please enter the radius and height (both floating_point values) for use in a volume of cylinder equation: 

tool: D324: 3.141592

tool: D0: Volume of a cylinder: volume_cylinder = PI * radius^2 * height = %lf * %lf^2 * %lf = %lf


tool: D145: 
Please enter the plaintext character for use in a character encoding equation: 

tool: D311:  %c

tool: D185: Character encoding: encoded_character = (plaintext_character + 4) = %c + 4 = %c


tool: {"D334": [0x56,0x0e,0x2d,0xb2,0x9d,0x7f,0x58,0x40]}

tool: D207: 
Atomic mass of phosphate: phosphate_atomic_mass = 3 * hydrogen_mass + 4 * oxygen_mass + phosphorous_mass

tool: D235: 30.97

tool: D214: 16

tool: D49: 1.008

tool: D247:  = 3 * %lf + 4 * %lf + %lf = %lf


tool: D276: 
Please enter the time, initial velocity, and initial height (all floating-point values) for use in

tool: D38:  the height of projectile equation: 

tool: D357: %lf%lf%lf

tool: {"D4": [0.0,-2.75]}

tool: D225: Height of projectile: height = -16 * time^2 + initial_velocity * time + initial_height

tool: D60:  = -16 * %lf^2 + %lf * %lf + %lf = %lf


tool: D234: 
Please enter the power and resistance (both floating-point values) for use in the current

tool: D2:  through circuit equation: 

tool: D259: Curent through circuit: current = square root of (power / resistance) = sqrt (%lf / %lf) = %lf


tool: D208: 
Please enter x and z (both floating_point values) and a (an integer value)

tool: D188:  for use in a general equation: 

tool: D237: %lf%lf%d

tool: {"D70": [0.0,1.8125]}

tool: D46: general equation: y = 3/4 * x - z / (a %% 2) + PI
 = %lf * %lf - %lf / (%d %% 2) + %lf = %lf



assistant: ```c
int main(void) {
  int a = 0;
  char plaintext_character = '\0', encoded_character = '\0';
  double mass = 0.0, acceleration = 0.0, force = 0.0, radius = 0.0, cylinder_height = 0.0, volume_cylinder = 0.0, phosphate_atomic_mass = 0.0, time = 0.0, initial_velocity = 0.0, initial_height = 0.0, projectile_height = 0.0, power = 0.0, resistance = 0.0, current = 0.0, x = 0.0, z = 0.0, y = 0.0;
  printf("*************** WELCOME TO THE EQUATION EVALUATOR **************\n\n");
  printf("Please enter the mass and acceleration (both floating-point values) for use in Newton's Second Law: ");
  scanf("%lf%lf", &mass, &acceleration);
  force = mass * acceleration;
  printf("Newton's Second Law: force = mass * acceleration = %lf * %lf = %lf\n", mass, acceleration, force);
  printf("\nPlease enter the radius and height (both floating_point values) for use in a volume of cylinder equation: ");
  scanf("%lf%lf", &radius, &cylinder_height);
  volume_cylinder = 3.141592 * radius * radius * cylinder_height;
  printf("Volume of a cylinder: volume_cylinder = PI * radius^2 * height = %lf * %lf^2 * %lf = %lf\n", 3.141592, radius, cylinder_height, volume_cylinder);
  printf("\nPlease enter the plaintext character for use in a character encoding equation: ");
  scanf(" %c", &plaintext_character);
  encoded_character = (plaintext_character + 4);
  printf("Character encoding: encoded_character = (plaintext_character + 4) = %c + 4 = %c\n", plaintext_character, encoded_character);
  phosphate_atomic_mass = 3 * 1.008 + 4 * 16.0 + 30.97;
  printf("\nAtomic mass of phosphate: phosphate_atomic_mass = 3 * hydrogen_mass + 4 * oxygen_mass + phosphorous_mass\n");
  printf(" = 3 * %lf + 4 * %lf + %lf = %lf\n", 1.008, 16.0, 30.97, phosphate_atomic_mass);
  printf("\nPlease enter the time, initial velocity, and initial height (all floating-point values) for use in\n");
  printf(" the height of projectile equation: ");
  scanf("%lf%lf%lf", &time, &initial_velocity, &initial_height);
  projectile_height = -16 * time * time + initial_velocity * time + initial_height;
  printf("Height of projectile: height = -16 * time^2 + initial_velocity * time + initial_height\n");
  printf(" = -16 * %lf^2 + %lf * %lf + %lf = %lf\n", time, initial_velocity, time, initial_height, projectile_height);
  printf("\nPlease enter the power and resistance (both floating-point values) for use in the current\n");
  printf(" through circuit equation: ");
  scanf("%lf%lf", &power, &resistance);
  current = sqrt(power / resistance);
  printf("Curent through circuit: current = square root of (power / resistance) = sqrt (%lf / %lf) = %lf\n", power, resistance, current);
  printf("\nPlease enter x and z (both floating_point values) and a (an integer value)\n");
  printf(" for use in a general equation: ");
  scanf("%lf%lf%d", &x, &z, &a);
  y = ((double)3 / 4) * x - z / (a % 2) + 3.141592;
  printf("general equation: y = 3/4 * x - z / (a %% 2) + PI\n = %lf * %lf - %lf / (%d %% 2) + %lf = %lf\n\n", ((double)3 / 4), x, z, a, 3.141592, y);
  return 0;
}
```