user: 请将以下的汇编代码转换成C语言代码：

```asm
<parse_uint64>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%r14
  mov    %rsi,%rbp
  cmpb   $0x0,(%rdi)
  setne  %cl
  movzbl %cl,%ecx
  lea    D59(%rip),%rdx
  mov    $0x563,%esi
  lea    D35(%rip),%rdi
  call   <test_true@plt>
  test   %eax,%eax
  je     L73
  movl   $0x0,0x0(%rbp)
  mov    %r14,%rbx
  mov    $0x0,%eax
  lea    D60(%rip),%r13
  lea    D35(%rip),%r12
  cmpb   $0x0,(%r14)
  je     L23
L89:
  lea    (%rax,%rax,4),%eax
  add    %eax,%eax
  mov    %eax,0x0(%rbp)
  movzbl (%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  setne  %cl
  movzbl %cl,%ecx
  mov    %r13,%rdx
  mov    $0x56d,%esi
  mov    %r12,%rdi
  call   <test_true@plt>
  test   %eax,%eax
  je     L44
  movsbl (%rbx),%edx
  mov    0x0(%rbp),%eax
  lea    -0x30(%rdx,%rax,1),%eax
  mov    %eax,0x0(%rbp)
  add    $0x1,%rbx
  cmpb   $0x0,(%rbx)
  je     L29
  test   %eax,%eax
  jle    L89
  mov    %r14,%rcx
  lea    D30(%rip),%rdx
  mov    $0x569,%esi
  lea    D35(%rip),%rdi
  call   <test_error@plt>
  mov    $0xffffffff,%eax
L85:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L73:
  lea    D52(%rip),%rdx
  mov    $0x564,%esi
  lea    D35(%rip),%rdi
  call   <test_info@plt>
  mov    $0xffffffff,%eax
  jmp    L85
L23:
  mov    $0x1,%eax
  jmp    L85
L44:
  mov    %r14,%rcx
  lea    D16(%rip),%rdx
  mov    $0x56e,%esi
  lea    D35(%rip),%rdi
  call   <test_error@plt>
  mov    $0xffffffff,%eax
  jmp    L85
L29:
  mov    $0x1,%eax
  jmp    L85
```

tool_calls: name: disassemble_data
arguments: data_label: D59
type_guessed: string
name: disassemble_data
arguments: data_label: D35
type_guessed: string
name: disassemble_data
arguments: data_label: D60
type_guessed: string
name: disassemble_data
arguments: data_label: D30
type_guessed: string
name: disassemble_data
arguments: data_label: D52
type_guessed: string
name: disassemble_data
arguments: data_label: D16
type_guessed: string

tool: D59: *p

tool: D35: /scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/papyrussolution/OpenPapyrus/refs/heads/master/Src/OSF/OpenSSL-111/test/evp_test.c

tool: D60: isdigit((unsigned char)*p)

tool: D30: Integer overflow in string %s

tool: D52: Invalid empty integer value

tool: D16: Invalid character in string %s

assistant: ```c
int parse_uint64(const char *value, uint64_t *pr) {
  const char *p = value;
  if (!test_true("/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/papyrussolution/OpenPapyrus/refs/heads/master/Src/OSF/OpenSSL-111/test/evp_test.c", 1379, "*p", (*p) != 0)) {
    test_info("/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/papyrussolution/OpenPapyrus/refs/heads/master/Src/OSF/OpenSSL-111/test/evp_test.c", 1380, "Invalid empty integer value");
    return -1;
  }
  for (*pr = 0; *p;) {
    if (*pr > ((uint64_t)-1) / 10) {
      test_error("/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/papyrussolution/OpenPapyrus/refs/heads/master/Src/OSF/OpenSSL-111/test/evp_test.c", 1385, "Integer overflow in string %s", value);
      return -1;
    }
    *pr *= 10;
    if (!test_true("/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/papyrussolution/OpenPapyrus/refs/heads/master/Src/OSF/OpenSSL-111/test/evp_test.c", 1389, "isdigit((unsigned char)*p)", (isdigit((unsigned char)*p)) != 0)) {
      test_error("/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/papyrussolution/OpenPapyrus/refs/heads/master/Src/OSF/OpenSSL-111/test/evp_test.c", 1390, "Invalid character in string %s", value);
      return -1;
    }
    *pr += *p - '0';
    p++;
  }
  return 1;
}
```