user: Converte this assembly snippet into its equivalent C code:

```asm
<changeYourPassword>:
  endbr64
  push   %r15
  lea    D42(%rip),%r15
  push   %r14
  mov    %rdi,%r14
  push   %r13
  mov    %rsi,%r13
  push   %r12
  push   %rbp
  push   %rbx
  xor    %ebx,%ebx
  sub    $0x18,%rsp
  nopl   0x0(%rax)
L105:
  mov    %r15,%rdi
  call   <printf@plt>
  mov    $0x1,%edi
  call   <stringInput@plt>
  mov    %r13,%rsi
  mov    %r14,%rdi
  mov    %rax,%rdx
  mov    %rax,%rbp
  call   <searchForUser@plt>
  test   %rax,%rax
  jne    L94
  cmp    $0x2,%ebx
  je     L64
  lea    D94(%rip),%rdi
  add    $0x1,%ebx
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <free@plt>
  mov    $0x2,%edi
  call   <sleep@plt>
  jmp    L105
  nopl   0x0(%rax)
L94:
  lea    D44(%rip),%rdi
  call   <printf@plt>
  mov    $0x1,%edi
  call   <stringInput@plt>
  mov    %rax,%rdi
  mov    %rax,%r12
  call   <strlen@plt>
  test   %rax,%rax
  jne    L28
  lea    D32(%rip),%rdi
  add    $0x1,%ebx
  call   <printf@plt>
L119:
  mov    %r12,%rdi
  call   <free@plt>
  mov    %rbp,%rdi
  call   <free@plt>
  mov    $0x2,%edi
  call   <sleep@plt>
  cmp    $0x2,%ebx
  jle    L105
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L64:
  lea    D36(%rip),%rdi
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <free@plt>
  add    $0x18,%rsp
  mov    $0x2,%edi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1130 <sleep@plt>
  nopl   0x0(%rax)
L28:
  lea    D80(%rip),%rdi
  call   <printf@plt>
  mov    $0x1,%edi
  call   <stringInput@plt>
  mov    %rax,%rdi
  mov    %rax,0x8(%rsp)
  call   <strlen@plt>
  mov    0x8(%rsp),%r8
  test   %rax,%rax
  jne    L52
  lea    D32(%rip),%rdi
  add    $0x1,%ebx
  call   <printf@plt>
  mov    0x8(%rsp),%r8
L112:
  mov    %r8,%rdi
  call   <free@plt>
  jmp    L119
  xchg   %ax,%ax
L52:
  mov    %r8,%rsi
  mov    %r12,%rdi
  mov    %r8,0x8(%rsp)
  call   <strcmp@plt>
  mov    0x8(%rsp),%r8
  test   %rax,%rax
  je     L68
  mov    %r8,0x8(%rsp)
  cmp    $0x2,%ebx
  je     L15
  lea    D37(%rip),%rdi
  add    $0x1,%ebx
  call   <printf@plt>
  mov    0x8(%rsp),%r8
  jmp    L112
  nopw   0x0(%rax,%rax,1)
L68:
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    %r14,%rdi
  mov    $0x4,%ebx
  call   <changePassword@plt>
  lea    D87(%rip),%rdi
  call   <printf@plt>
  mov    0x8(%rsp),%r8
  jmp    L112
  cs nopw 0x0(%rax,%rax,1)
L15:
  lea    D36(%rip),%rdi
  mov    $0x3,%ebx
  call   <printf@plt>
  mov    0x8(%rsp),%r8
  jmp    L112
```

tool_calls: name: parse_data
arguments: data_tag: D42
data_type: string
name: parse_data
arguments: data_tag: D94
data_type: string
name: parse_data
arguments: data_tag: D44
data_type: string
name: parse_data
arguments: data_tag: D32
data_type: string
name: parse_data
arguments: data_tag: D36
data_type: string
name: parse_data
arguments: data_tag: D80
data_type: string
name: parse_data
arguments: data_tag: D37
data_type: string
name: parse_data
arguments: data_tag: D87
data_type: string

tool: D42: Current password: 

tool: D94: 
Incorrect password. Try again.


tool: D44: New password: 

tool: D32: 
Invalid password entered. Please try again.


tool: D36: 
Too many tries used. Exiting program.


tool: D80: Re-enter new password: 

tool: D37: 
Non-equal inputs detected. Please try again.


tool: D87: 
Password change successful. Exiting program.


assistant: ```c
void changeYourPassword(sqlite3 *db, char *username) {
  char *password;
  char *newPassword, *newPassword2;
  for (int i = 0; i < 3; i++) {
    printf("Current password: ");
    password = stringInput(1);
    if (searchForUser(db, username, password)) {
      printf("New password: ");
      newPassword = stringInput(1);
      if (strlen(newPassword) <= 0) {
        printf("\nInvalid password entered. Please try again.\n");
      } else {
        printf("Re-enter new password: ");
        newPassword2 = stringInput(1);
        if (strlen(newPassword2) <= 0) {
          printf("\nInvalid password entered. Please try again.\n");
        } else {
          if (strcmp(newPassword, newPassword2) == 0) {
            changePassword(db, username, newPassword);
            printf("\nPassword change successful. Exiting program.\n");
            i = 3;
          } else if (i == 2) {
            printf("\nToo many tries used. Exiting program.\n");
          } else {
            printf("\nNon-equal inputs detected. Please try again.\n");
          }
        }
        free(newPassword2);
      }
      free(newPassword);
    } else if (i == 2) {
      printf("\nToo many tries used. Exiting program.\n");
    } else {
      printf("\nIncorrect password. Try again.\n");
    }
    free(password);
    sleep(2);
  }
}
```