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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
L94:
  lea    D25(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D19(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0x78(%rbp),%rax
  mov    %rax,%rsi
  lea    D103(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    -0x78(%rbp),%eax
  cmp    $0x4,%eax
  ja     L72
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D1(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D1(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    $0x0,%eax
  call   <init@plt>
  lea    D158(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D22(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  jmp    L30
  lea    D133(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0x70(%rbp),%rax
  mov    %rax,%rsi
  lea    D58(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  lea    -0x7c(%rbp),%rax
  mov    %rax,%rsi
  lea    D103(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    -0x7c(%rbp),%edx
  lea    -0x70(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <add@plt>
  mov    %eax,-0x74(%rbp)
  cmpl   $0x1,-0x74(%rbp)
  jne    L92
  lea    D113(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L7
L92:
  lea    D128(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L7:
  lea    D22(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  jmp    L30
  mov    $0x0,%eax
  call   <print@plt>
  lea    D22(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  jmp    L30
  mov    $0x0,%eax
  call   <hapus_depan@plt>
  lea    D32(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D22(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  jmp    L30
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L87
  jmp    L8
L72:
  lea    D94(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L30:
  jmp    L94
L8:
  call   <__stack_chk_fail@plt>
L87:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: tag: D25
data_type: string
name: retrieve_data
arguments: tag: D19
data_type: string
name: retrieve_data
arguments: tag: D103
data_type: string
name: retrieve_data
arguments: tag: D158
data_type: string
name: retrieve_data
arguments: tag: D22
data_type: string
name: retrieve_data
arguments: tag: D133
data_type: string
name: retrieve_data
arguments: tag: D58
data_type: string
name: retrieve_data
arguments: tag: D113
data_type: string
name: retrieve_data
arguments: tag: D128
data_type: string
name: retrieve_data
arguments: tag: D32
data_type: string
name: retrieve_data
arguments: tag: D94
data_type: string

tool: D25: cls

tool: D19: 1.Inisiasi Linked head
2.Tambah data
3.cetak semua data
4.Hapus data
0.Exit


tool: D103: %d

tool: D158: Linked head terinisialisasi


tool: D22: pause

tool: D133: Ketik nama yang diinput 

tool: D58: %100s

tool: D113: Data berhasil ditambahkan


tool: D128: Data gagal diinput


tool: D32: Data berhasil dihapus


tool: D94: Salah pilihan,ulangi lagi


assistant: ```c
int main() {
  int id;
  char data[100];
  while (1) {
    system("cls");
    printf("1.Inisiasi Linked head\n2.Tambah data\n3.cetak semua data\n4.Hapus data\n0.Exit\n");
    int pilihan;
    scanf("%d", &pilihan);
    switch (pilihan) {
    case 1:
      init();
      printf("Linked head terinisialisasi\n");
      system("pause");
      break;
    case 2:
      printf("Ketik nama yang diinput ");
      scanf("%100s", data);
      scanf("%d", &id);
      int hasil = add(data, id);
      if (hasil == 1)
        printf("Data berhasil ditambahkan\n");
      else
        printf("Data gagal diinput\n");
      system("pause");
      break;
    case 3:
      print();
      system("pause");
      break;
    case 4:
      hapus_depan();
      printf("Data berhasil dihapus\n");
      system("pause");
      break;
    case 0:
      return 0;
      break;
    default:
      printf("Salah pilihan,ulangi lagi\n");
    }
  }
}
```