user: What is the c source code of the assembly code below:

```asm
<regValue>:
  endbr64
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  sub    $0x8,%rsp
  movsbl (%rdi),%edi
  call   <isalpha@plt>
  test   %rax,%rax
  je     L236
  movzbl 0x0(%rbp),%esi
  movsbl 0x1(%rbp),%eax
  lea    -0x61(%rsi),%edx
  mov    %eax,%ecx
  lea    -0x30(%rax),%edi
  cmp    $0x19,%dl
  ja     L6
  lea    D17(%rip),%rsi
  movzbl %dl,%edx
  movslq (%rsi,%rdx,4),%rdx
  add    %rsi,%rdx
  notrack jmp *%rdx
  nopl   0x0(%rax,%rax,1)
L236:
  movsbl 0x0(%rbp),%edi
  test   %dil,%dil
  je     L174
  lea    0x1(%rbp),%rbx
  jmp    L182
  nopw   0x0(%rax,%rax,1)
L259:
  movsbl (%rbx),%edi
  add    $0x1,%rbx
  test   %dil,%dil
  je     L174
L182:
  call   <isdigit@plt>
  test   %eax,%eax
  jne    L259
L6:
  mov    $0xffffffff,%eax
L45:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  ret
  nopl   0x0(%rax)
L174:
  mov    %rbp,%rdi
  call   <atoi@plt>
  cmp    $0x1f,%eax
  jbe    L45
  xor    %edi,%edi
  call   <assert@plt>
  jmp    L6
  xchg   %ax,%ax
  lea    D14(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  neg    %eax
  sbb    %eax,%eax
  jmp    L45
  cmp    $0x1,%edi
  ja     L6
  sub    $0x2e,%eax
  jmp    L45
  cmp    $0x7,%edi
  jbe    L135
  lea    -0x38(%rax),%edx
  cmp    $0x1,%edx
  ja     L6
L145:
  sub    $0x20,%eax
  jmp    L45
  cmp    $0x7,%edi
  jbe    L145
  cmp    $0x8,%edi
  je     L125
  mov    $0x1d,%eax
  cmp    $0x70,%cl
  je     L45
  jmp    L6
  nopw   0x0(%rax,%rax,1)
  mov    $0x1f,%eax
  cmp    $0x61,%cl
  je     L45
  jmp    L6
  cmp    $0x1,%edi
  ja     L6
  sub    $0x16,%eax
  jmp    L45
  mov    $0x1c,%eax
  cmp    $0x70,%cl
  je     L45
  jmp    L6
  sub    $0x2c,%eax
  cmp    $0x3,%edi
  jbe    L45
  mov    $0x1,%eax
  cmp    $0x74,%cl
  je     L45
  jmp    L6
L135:
  sub    $0x28,%eax
  jmp    L45
L125:
  mov    $0x1e,%eax
  jmp    L45
```

tool_calls: name: unpack_data
arguments: data_label: D14
data_type: string

tool: D14: zero

assistant: ```c
int regValue(char *c) {
  if (isalpha(c[0])) {
    int regIndex = c[1] - '0';
    switch (c[0]) {
    case 'a':
      if (regIndex >= 0 && regIndex <= 3) {
        return 4 + regIndex;
      } else if (c[1] == 't') {
        return 1;
      }
      break;
    case 'g':
      if (c[1] == 'p') {
        return 28;
      }
      break;
    case 'k':
      if (regIndex >= 0 && regIndex <= 1) {
        return 26 + regIndex;
      }
      break;
    case 'r':
      if (c[1] == 'a') {
        return 31;
      }
      break;
    case 's':
      if (regIndex >= 0 && regIndex <= 7) {
        return 16 + regIndex;
      } else if (regIndex == 8) {
        return 30;
      } else if (c[1] == 'p') {
        return 29;
      }
      break;
    case 't':
      if (regIndex >= 0 && regIndex <= 7) {
        return 8 + regIndex;
      } else if (regIndex >= 8 && regIndex <= 9) {
        return 16 + regIndex;
      }
      break;
    case 'v':
      if (regIndex >= 0 && regIndex <= 1) {
        return 2 + regIndex;
      }
      break;
    case 'z':
      if (strcmp(c, "zero") == 0) {
        return 0;
      }
      break;
    }
  } else {
    int i = 0;
    char currentChar = c[i];
    while (currentChar != '\0') {
      if (!isdigit(currentChar)) {
        return -1;
      }
      currentChar = c[++i];
    }
    int regIndex = atoi(c);
    if (regIndex >= 0 && regIndex <= 31) {
      return regIndex;
    } else {
      assert(!"Register number out of bounds");
    }
  }
  return -1;
}
```