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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D596(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D295(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x1,-0x48(%rbp)
  movl   $0x2,-0x44(%rbp)
  movsd  D504(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  D625(%rip),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  mov    -0x48(%rbp),%eax
  mov    %eax,%esi
  lea    D388(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x44(%rbp),%eax
  mov    %eax,%esi
  lea    D286(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x40(%rbp),%rax
  movq   %rax,%xmm0
  lea    D318(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    -0x38(%rbp),%rax
  movq   %rax,%xmm0
  lea    D443(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    -0x48(%rbp),%rax
  mov    %rax,%rsi
  lea    D262(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x44(%rbp),%rax
  mov    %rax,%rsi
  lea    D637(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x40(%rbp),%rax
  mov    %rax,%rsi
  lea    D450(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x38(%rbp),%rax
  mov    %rax,%rsi
  lea    D353(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D562(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D295(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x30(%rbp),%rax
  mov    %rax,%rsi
  lea    D405(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x28(%rbp),%rax
  mov    %rax,%rsi
  lea    D501(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x20(%rbp),%rax
  mov    %rax,%rsi
  lea    D440(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x18(%rbp),%rax
  mov    %rax,%rsi
  lea    D207(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D265(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D295(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x48(%rbp),%rax
  mov    %rax,-0x30(%rbp)
  lea    -0x44(%rbp),%rax
  mov    %rax,-0x28(%rbp)
  lea    -0x40(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  lea    -0x38(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x30(%rbp),%rax
  mov    %rax,%rsi
  lea    D114(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x28(%rbp),%rax
  mov    %rax,%rsi
  lea    D150(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x20(%rbp),%rax
  mov    %rax,%rsi
  lea    D491(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x18(%rbp),%rax
  mov    %rax,%rsi
  lea    D479(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D535(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D295(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x30(%rbp)
  mov    -0x30(%rbp),%rax
  mov    %rax,%rsi
  lea    D192(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D213(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    -0x30(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  mov    %rax,%rsi
  lea    D28(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D387(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D295(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movq   $0x0,-0x30(%rbp)
  mov    -0x30(%rbp),%rax
  mov    %rax,%rsi
  lea    D453(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D263(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D599(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D295(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  lea    D331(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D421(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D14(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D295(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    -0x28(%rbp),%rax
  movl   $0x64,(%rax)
  mov    -0x48(%rbp),%eax
  mov    %eax,%esi
  lea    D571(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x44(%rbp),%eax
  mov    %eax,%esi
  lea    D131(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D381(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D295(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  mov    %rax,%rsi
  lea    D198(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x18(%rbp),%rax
  add    $0x8,%rax
  mov    %rax,%rsi
  lea    D573(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x28(%rbp),%rax
  sub    $0x4,%rax
  mov    %rax,%rsi
  lea    D314(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rax
  mov    %rax,%rsi
  lea    D281(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  lea    D548(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x18(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  movq   %rax,%xmm0
  lea    D85(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    -0x28(%rbp),%rax
  sub    $0x4,%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  lea    D516(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rax
  mov    (%rax),%rax
  movq   %rax,%xmm0
  lea    D559(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D602(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D295(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x48(%rbp),%rax
  mov    %rax,-0x30(%rbp)
  mov    -0x30(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  cmp    %rax,%rdx
  sete   %al
  movzbl %al,%eax
  mov    %eax,%esi
  lea    D26(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x30(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,%edx
  sete   %al
  movzbl %al,%eax
  mov    %eax,%esi
  lea    D178(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x44(%rbp),%rax
  mov    %rax,-0x30(%rbp)
  mov    -0x30(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  cmp    %rax,%rdx
  sete   %al
  movzbl %al,%eax
  mov    %eax,%esi
  lea    D105(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x30(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,%edx
  sete   %al
  movzbl %al,%eax
  mov    %eax,%esi
  lea    D622(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D404(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D295(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x8,%edi
  call   <malloc@plt>
  mov    %rax,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  movsd  D434(%rip),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x10(%rbp),%rax
  mov    %rax,%rsi
  lea    D601(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x10(%rbp),%rax
  mov    (%rax),%rax
  movq   %rax,%xmm0
  lea    D258(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D610(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D295(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    $0x8,%edi
  call   <malloc@plt>
  mov    %rax,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  mov    %rax,%rsi
  lea    D575(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L1
  call   <__stack_chk_fail@plt>
L1:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D596
type_infered: string
name: disassemble_data
arguments: data_tag: D295
type_infered: string
name: disassemble_data
arguments: data_tag: D504
type_infered: f64
name: disassemble_data
arguments: data_tag: D625
type_infered: f64
name: disassemble_data
arguments: data_tag: D388
type_infered: string
name: disassemble_data
arguments: data_tag: D286
type_infered: string
name: disassemble_data
arguments: data_tag: D318
type_infered: string
name: disassemble_data
arguments: data_tag: D443
type_infered: string
name: disassemble_data
arguments: data_tag: D262
type_infered: string
name: disassemble_data
arguments: data_tag: D637
type_infered: string
name: disassemble_data
arguments: data_tag: D450
type_infered: string
name: disassemble_data
arguments: data_tag: D353
type_infered: string
name: disassemble_data
arguments: data_tag: D562
type_infered: string
name: disassemble_data
arguments: data_tag: D405
type_infered: string
name: disassemble_data
arguments: data_tag: D501
type_infered: string
name: disassemble_data
arguments: data_tag: D440
type_infered: string
name: disassemble_data
arguments: data_tag: D207
type_infered: string
name: disassemble_data
arguments: data_tag: D265
type_infered: string
name: disassemble_data
arguments: data_tag: D114
type_infered: string
name: disassemble_data
arguments: data_tag: D150
type_infered: string
name: disassemble_data
arguments: data_tag: D491
type_infered: string
name: disassemble_data
arguments: data_tag: D479
type_infered: string
name: disassemble_data
arguments: data_tag: D535
type_infered: string
name: disassemble_data
arguments: data_tag: D192
type_infered: string
name: disassemble_data
arguments: data_tag: D213
type_infered: string
name: disassemble_data
arguments: data_tag: D28
type_infered: string
name: disassemble_data
arguments: data_tag: D387
type_infered: string
name: disassemble_data
arguments: data_tag: D453
type_infered: string
name: disassemble_data
arguments: data_tag: D263
type_infered: string
name: disassemble_data
arguments: data_tag: D599
type_infered: string
name: disassemble_data
arguments: data_tag: D331
type_infered: string
name: disassemble_data
arguments: data_tag: D421
type_infered: string
name: disassemble_data
arguments: data_tag: D14
type_infered: string
name: disassemble_data
arguments: data_tag: D571
type_infered: string
name: disassemble_data
arguments: data_tag: D131
type_infered: string
name: disassemble_data
arguments: data_tag: D381
type_infered: string
name: disassemble_data
arguments: data_tag: D198
type_infered: string
name: disassemble_data
arguments: data_tag: D573
type_infered: string
name: disassemble_data
arguments: data_tag: D314
type_infered: string
name: disassemble_data
arguments: data_tag: D281
type_infered: string
name: disassemble_data
arguments: data_tag: D548
type_infered: string
name: disassemble_data
arguments: data_tag: D85
type_infered: string
name: disassemble_data
arguments: data_tag: D516
type_infered: string
name: disassemble_data
arguments: data_tag: D559
type_infered: string
name: disassemble_data
arguments: data_tag: D602
type_infered: string
name: disassemble_data
arguments: data_tag: D26
type_infered: string
name: disassemble_data
arguments: data_tag: D178
type_infered: string
name: disassemble_data
arguments: data_tag: D105
type_infered: string
name: disassemble_data
arguments: data_tag: D622
type_infered: string
name: disassemble_data
arguments: data_tag: D404
type_infered: string
name: disassemble_data
arguments: data_tag: D434
type_infered: f64
name: disassemble_data
arguments: data_tag: D601
type_infered: string
name: disassemble_data
arguments: data_tag: D258
type_infered: string
name: disassemble_data
arguments: data_tag: D610
type_infered: string
name: disassemble_data
arguments: data_tag: D575
type_infered: string

tool: D596: Step 1

tool: D295: *************************

tool: D504: 3

tool: D625: 4

tool: D388: The chosen initial value for i1 is: %d


tool: D286: The chosen initial value for i2 is: %d


tool: D318: The chosen initial value for d1 is: %f


tool: D443: The chosen initial value for d2 is: %f



tool: D262: The address of i1 is: %p


tool: D637: The address of i2 is: %p


tool: D450: The address of d1 is: %p


tool: D353: The address of d2 is: %p


tool: D562: Step 2

tool: D405: The address of intptr1 is: %p


tool: D501: The address of intptr2 is: %p


tool: D440: The address of dubptr1 is: %p


tool: D207: The address of dubptr2 is: %p


tool: D265: Step 3

tool: D114: The value of intptr1 is: %p


tool: D150: The value of intptr2 is: %p


tool: D491: The value of dubptr1 is: %p


tool: D479: The value of dubptr2 is: %p


tool: D535: Step 4

tool: D192: The value of intptr1 after (intptr1 = intptr2) is: %p


tool: D213: The assigment of dubptr1 = intptr1 without cast causes an incompatiable type warning.

tool: D28: The value of dubptr1 = (double*)intptr1 after typcasting is: %p


tool: D387: Step 5

tool: D453: The value of intptr1 after the assignent of intptr1 = NULL is: %p


tool: D263: The assignment of intptr1 = NULL causes a segmaentation fault in step 6.

tool: D599: Step 6

tool: D331: The value of *intptr2 is: %d


tool: D421: The value of *intptr1 after the assignment to NULL causes a segmentation fault here.

tool: D14: Step 7

tool: D571: The value of i1 after *intptr2 = 100 is: %d


tool: D131: The value of i2 after *intptr2 = 100 is: %d


tool: D381: Step8

tool: D198: The value of intptr2++ is: %p


tool: D573: The value of dubptr2++ is: %p


tool: D314: The value of intptr2-- is: %p


tool: D281: The value of dubptr2-- is: %p


tool: D548: The value of *intptr2++ is: %d


tool: D85: The value of *dubptr2++ is: %f


tool: D516: The value of *intptr2-- is: %d


tool: D559: The value of *dubptr2-- is: %f


tool: D602: Step 9

tool: D26: Does intptr1 == intptr2 after intptr1 = &i1?: %d, it is false.


tool: D178: Does *intptr1 == *intptr2 after intptr1 = &i1?: %d, it is false.


tool: D105: Does intptr1 == intptr2 after i2 = (int)(intptr1)?: %d, it is true.


tool: D622: Does *intptr1 == *intptr2 after i2 = (int)(intptr1)?: %d, it is true.


tool: D404: Step 10

tool: D434: 3.1416

tool: D601: The value of ptr is: %p


tool: D258: The value of *ptr is: %f


tool: D610: Step 11

tool: D575: Is the value of ptr the same as it was in qustion 10?: %p , Yes it is.


assistant: ```c
int main() {
  printf("Step 1\n");
  printf("*************************\n");
  int i1 = 1;
  int i2 = 2;
  double d1 = 3.0;
  double d2 = 4.0;
  printf("The chosen initial value for i1 is: %d\n", i1);
  printf("The chosen initial value for i2 is: %d\n", i2);
  printf("The chosen initial value for d1 is: %f\n", d1);
  printf("The chosen initial value for d2 is: %f\n\n", d2);
  printf("The address of i1 is: %p\n", &i1);
  printf("The address of i2 is: %p\n", &i2);
  printf("The address of d1 is: %p\n", &d1);
  printf("The address of d2 is: %p\n", &d2);
  printf("\n");
  printf("Step 2\n");
  printf("*************************\n");
  int *intptr1;
  int *intptr2;
  double *dubptr1;
  double *dubptr2;
  printf("The address of intptr1 is: %p\n", &intptr1);
  printf("The address of intptr2 is: %p\n", &intptr2);
  printf("The address of dubptr1 is: %p\n", &dubptr1);
  printf("The address of dubptr2 is: %p\n", &dubptr2);
  printf("\n");
  printf("Step 3\n");
  printf("*************************\n");
  intptr1 = &i1;
  intptr2 = &i2;
  dubptr1 = &d1;
  dubptr2 = &d2;
  printf("The value of intptr1 is: %p\n", intptr1);
  printf("The value of intptr2 is: %p\n", intptr2);
  printf("The value of dubptr1 is: %p\n", dubptr1);
  printf("The value of dubptr2 is: %p\n", dubptr2);
  printf("\n");
  printf("Step 4\n");
  printf("*************************\n");
  intptr1 = intptr2;
  printf("The value of intptr1 after (intptr1 = intptr2) is: %p\n", intptr1);
  printf("The assigment of dubptr1 = intptr1 without cast causes an incompatiable type warning.\n");
  dubptr1 = (double *)intptr1;
  printf("The value of dubptr1 = (double*)intptr1 after typcasting is: %p\n", dubptr1);
  printf("\n");
  printf("Step 5\n");
  printf("*************************\n");
  intptr1 = NULL;
  printf("The value of intptr1 after the assignent of intptr1 = NULL is: %p\n", intptr1);
  printf("The assignment of intptr1 = NULL causes a segmaentation fault in step 6.\n");
  printf("\n");
  printf("Step 6\n");
  printf("*************************\n");
  printf("The value of *intptr2 is: %d\n", *intptr2);
  printf("The value of *intptr1 after the assignment to NULL causes a segmentation fault here.\n");
  printf("\n");
  printf("Step 7\n");
  printf("*************************\n");
  *intptr2 = 100;
  printf("The value of i1 after *intptr2 = 100 is: %d\n", i1);
  printf("The value of i2 after *intptr2 = 100 is: %d\n", i2);
  printf("\n");
  printf("Step8\n");
  printf("*************************\n");
  printf("The value of intptr2++ is: %p\n", (intptr2 + 1));
  printf("The value of dubptr2++ is: %p\n", (dubptr2 + 1));
  printf("The value of intptr2-- is: %p\n", (intptr2 - 1));
  printf("The value of dubptr2-- is: %p\n", (dubptr2 - 1));
  printf("The value of *intptr2++ is: %d\n", *(intptr2 + 1));
  printf("The value of *dubptr2++ is: %f\n", *(dubptr2 + 1));
  printf("The value of *intptr2-- is: %d\n", *(intptr2 - 1));
  printf("The value of *dubptr2-- is: %f\n", *(dubptr2 - 1));
  printf("\n");
  printf("Step 9\n");
  printf("*************************\n");
  intptr1 = &i1;
  printf("Does intptr1 == intptr2 after intptr1 = &i1?: %d, it is false.\n", (intptr1 == intptr2));
  printf("Does *intptr1 == *intptr2 after intptr1 = &i1?: %d, it is false.\n", (*intptr1 == *intptr2));
  intptr1 = &i2;
  printf("Does intptr1 == intptr2 after i2 = (int)(intptr1)?: %d, it is true.\n", (intptr1 == intptr2));
  printf("Does *intptr1 == *intptr2 after i2 = (int)(intptr1)?: %d, it is true.\n", (*intptr1 == *intptr2));
  printf("\n");
  printf("Step 10\n");
  printf("*************************\n");
  double *ptr;
  ptr = (double *)malloc(sizeof(100.0));
  *ptr = 3.1416;
  printf("The value of ptr is: %p\n", ptr);
  printf("The value of *ptr is: %f\n", *ptr);
  printf("\n");
  printf("Step 11\n");
  printf("*************************\n");
  free((void *)ptr);
  ptr = (double *)malloc(sizeof(100.0));
  printf("Is the value of ptr the same as it was in qustion 10?: %p , Yes it is.\n", ptr);
  printf("\n");
  return 0;
}
```