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

```asm
<createPrintInstruction>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %esi,-0x1c(%rbp)
  cmpl   $0x2,-0x1c(%rbp)
  jg     L24
  mov    $0xffffffff,%eax
  jmp    L16
L24:
  movl   $0x2,-0x4(%rbp)
  jmp    L7
L87:
  movl   $0x1adb0,-0xc(%rbp)
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isdigit@plt>
  test   %eax,%eax
  jne    L61
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <variableExistsInTable@plt>
  mov    %eax,-0x8(%rbp)
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  jne    L62
  mov    -0x4(%rbp),%edx
  mov    -0x1c(%rbp),%ecx
  mov    -0x18(%rbp),%rax
  mov    %ecx,%esi
  mov    %rax,%rdi
  call   <addStringLiteralToMemory@plt>
  mov    %eax,-0x8(%rbp)
  movl   $0x27100,-0xc(%rbp)
  mov    -0x1c(%rbp),%eax
  mov    %eax,-0x4(%rbp)
  jmp    L124
L62:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,%rdi
  call   <strlen2@plt>
  cmp    $0x2,%eax
  jne    L69
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl 0x1(%rax),%eax
  cmp    $0x24,%al
  jne    L69
  movl   $0x27100,-0xc(%rbp)
  mov    -0x1c(%rbp),%eax
  mov    %eax,-0x4(%rbp)
  jmp    L124
L69:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,%rdi
  call   <strlen2@plt>
  cmp    $0x3,%eax
  jle    L124
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rax,%rdx
  mov    -0x8(%rbp),%eax
  mov    %eax,%esi
  mov    %rdx,%rdi
  call   <getElementAddressFromStr@plt>
  mov    %eax,-0x8(%rbp)
  cmpl   $0xffffffff,-0x8(%rbp)
  jne    L124
  mov    $0xffffffff,%eax
  jmp    L16
L61:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,%rdi
  call   <strToInt@plt>
  mov    %eax,%edi
  call   <constantExistsInTable@plt>
  mov    %eax,-0x8(%rbp)
L124:
  mov    -0x8(%rbp),%eax
  add    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
  mov    %eax,%edi
  call   <addInstructionToMemory@plt>
  cmp    $0xffffffff,%eax
  jne    L14
  mov    $0xffffffff,%eax
  jmp    L16
L14:
  addl   $0x1,-0x4(%rbp)
L7:
  mov    -0x4(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jl     L87
  mov    $0x1,%eax
L16:
  leave
  ret
```

assistant: ```c
int createPrintInstruction(char tokenArray[][20], int numberOfTokens) {
  int instruction;
  int variableAddress;
  int variableIdx;
  if (numberOfTokens < 3) {
    return -1;
  }
  for (variableIdx = 2; variableIdx < numberOfTokens; variableIdx++) {
    instruction = 11 * 10000;
    if (!isdigit(tokenArray[variableIdx][0])) {
      variableAddress = variableExistsInTable(tokenArray[variableIdx][0]);
      if (tokenArray[variableIdx][0] == '"') {
        variableAddress = addStringLiteralToMemory(tokenArray, numberOfTokens, variableIdx);
        instruction = 16 * 10000;
        variableIdx = numberOfTokens;
      } else if (strlen2(tokenArray[variableIdx]) == 2 && tokenArray[variableIdx][1] == '$') {
        instruction = 16 * 10000;
        variableIdx = numberOfTokens;
      } else if (strlen2(tokenArray[variableIdx]) > 3) {
        variableAddress = getElementAddressFromStr(tokenArray[variableIdx], variableAddress);
        if (variableAddress == -1) {
          return -1;
        }
      }
    } else
      variableAddress = constantExistsInTable(strToInt(tokenArray[variableIdx]));
    instruction += variableAddress;
    if (addInstructionToMemory(instruction) == -1)
      return -1;
    ;
  }
  return 1;
}
```