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

```asm
<number>:
  endbr64
  push   %r15
  push   %r14
  mov    %rdi,%r14
  push   %r13
  lea    D22(%rip),%r13
  push   %r12
  lea    D13(%rip),%r12
  push   %rbp
  mov    $0x1,%ebp
  push   %rbx
  sub    $0x8,%rsp
  jmp    L64
  nopw   0x0(%rax,%rax,1)
L70:
  neg    %ebp
L64:
  mov    %r13,%rdi
  call   <match@plt>
  mov    %r12,%rdi
  mov    %rax,%rbx
  call   <match@plt>
  test   %rax,%rax
  jne    L70
  test   %rbx,%rbx
  jne    L64
  xor    %eax,%eax
  call   <ch@plt>
  movsbl %al,%edi
  mov    %edi,%ebx
  call   <numeric@plt>
  mov    %rax,%r8
  xor    %eax,%eax
  test   %r8,%r8
  jne    L10
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L10:
  lea    D25(%rip),%rdi
  call   <match@plt>
  test   %rax,%rax
  je     L39
L104:
  xor    %r13d,%r13d
  jmp    L58
  nop
L54:
  xor    %eax,%eax
  and    $0x7,%ebx
  shl    $0x4,%r13d
  call   <inbyte@plt>
  mov    %r15d,%edi
  lea    0x9(%rbx),%r12d
  sub    $0x30,%r15d
  call   <numeric@plt>
  test   %rax,%rax
  cmovne %r15d,%r12d
  add    %r12d,%r13d
L58:
  xor    %eax,%eax
  call   <ch@plt>
  movsbl %al,%r15d
  mov    %r15d,%edi
  mov    %r15d,%ebx
  call   <numeric@plt>
  test   %rax,%rax
  jne    L54
  mov    %r15d,%eax
  and    $0xffffffdf,%eax
  sub    $0x41,%eax
  cmp    $0x5,%al
  jbe    L54
L14:
  mov    %r13d,%eax
  neg    %eax
  cmp    $0xffffffff,%ebp
  cmove  %eax,%r13d
  mov    %r13d,%eax
  mov    %r13d,(%r14)
  add    $0x8,%rsp
  shr    $0x1f,%eax
  pop    %rbx
  pop    %rbp
  add    $0x8,%eax
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L39:
  lea    D18(%rip),%rdi
  call   <match@plt>
  test   %rax,%rax
  jne    L104
  cmp    $0x30,%bl
  setne  %bl
  xor    %r13d,%r13d
  movzbl %bl,%ebx
  lea    0x8(%rbx,%rbx,1),%ebx
  jmp    L79
L117:
  mov    %r13d,%r12d
  xor    %eax,%eax
  call   <inbyte@plt>
  imul   %ebx,%r12d
  movsbl %al,%edx
  lea    -0x30(%r12,%rdx,1),%r13d
L79:
  xor    %eax,%eax
  call   <ch@plt>
  movsbl %al,%edi
  call   <numeric@plt>
  test   %rax,%rax
  jne    L117
  jmp    L14
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D22
type_infered: string
name: extract_symbolic_data
arguments: data_label: D13
type_infered: string
name: extract_symbolic_data
arguments: data_label: D25
type_infered: string
name: extract_symbolic_data
arguments: data_label: D18
type_infered: string

tool: D22: +

tool: D13: -

tool: D25: 0x

tool: D18: 0X

assistant: ```c
int number(int val[]) {
  int k, minus, base;
  char c;
  k = minus = 1;
  while (k) {
    k = 0;
    if (match("+"))
      k = 1;
    if (match("-")) {
      minus = (-minus);
      k = 1;
    }
  }
  if (!numeric(c = ch()))
    return (0);
  if (match("0x") || match("0X"))
    while (numeric(c = ch()) || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')) {
      inbyte();
      k = k * 16 + (numeric(c) ? (c - '0') : ((c & 07) + 9));
    }
  else {
    base = (c == '0') ? 8 : 10;
    while (numeric(ch())) {
      c = inbyte();
      k = k * base + (c - '0');
    }
  }
  if (minus < 0)
    k = (-k);
  val[0] = k;
  if (k < 0) {
    return (((2 << 2) + 1));
  } else {
    return ((2 << 2));
  }
}
```