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

```asm
<getsplitnumv4>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  test   %eax,%eax
  jg     L111
  mov    $0xffffffff,%eax
  jmp    L84
L111:
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x3,%eax
  jg     L41
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jne    L188
  addq   $0x1,-0x28(%rbp)
L188:
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0xc(%rbp)
  cmpl   $0x0,-0xc(%rbp)
  jle    L176
  cmpl   $0x20,-0xc(%rbp)
  jle    L219
L176:
  mov    $0xffffffff,%eax
  jmp    L84
L219:
  movl   $0x0,-0x14(%rbp)
  movl   $0x0,-0x10(%rbp)
  jmp    L198
L159:
  mov    -0x10(%rbp),%eax
  mov    $0x80000000,%edx
  mov    %eax,%ecx
  shr    %cl,%edx
  mov    %edx,%eax
  mov    %eax,%edx
  mov    -0x14(%rbp),%eax
  or     %edx,%eax
  mov    %eax,-0x14(%rbp)
  addl   $0x1,-0x10(%rbp)
L198:
  mov    -0x10(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  jl     L159
  jmp    L202
L41:
  mov    -0x28(%rbp),%rax
  lea    D2(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strstr@plt>
  test   %eax,%eax
  jne    L3
  mov    -0x28(%rbp),%rax
  mov    $0x10,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <strtoul@plt>
  mov    %eax,-0x14(%rbp)
  jmp    L202
L3:
  lea    -0x14(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <quadtonum@plt>
  test   %rax,%rax
  je     L202
  mov    $0xffffffff,%eax
  jmp    L84
L202:
  movl   $0x0,-0xc(%rbp)
  movl   $0x0,-0x10(%rbp)
  jmp    L79
L101:
  cmpl   $0x0,-0xc(%rbp)
  jne    L167
  mov    -0x14(%rbp),%edx
  mov    $0x1f,%eax
  sub    -0x10(%rbp),%eax
  mov    %eax,%ecx
  sar    %cl,%edx
  mov    %edx,%eax
  and    $0x1,%eax
  test   %eax,%eax
  jne    L167
  movl   $0x1,-0xc(%rbp)
L167:
  cmpl   $0x1,-0xc(%rbp)
  jne    L133
  mov    -0x14(%rbp),%edx
  mov    $0x1f,%eax
  sub    -0x10(%rbp),%eax
  mov    %eax,%ecx
  sar    %cl,%edx
  mov    %edx,%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L133
  movl   $0x2,-0xc(%rbp)
L133:
  addl   $0x1,-0x10(%rbp)
L79:
  cmpl   $0x1f,-0x10(%rbp)
  jle    L101
  cmpl   $0x2,-0xc(%rbp)
  jne    L87
  mov    $0xffffffff,%eax
  jmp    L84
L87:
  mov    -0x14(%rbp),%edx
  mov    -0x30(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x0,%eax
L84:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L49
  call   <__stack_chk_fail@plt>
L49:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D2
datatype: string

tool: D2: .

assistant: ```c
int getsplitnumv4(char *buf, u_int32_t *splitmask) {
  int x, y;
  u_int32_t sm;
  if (strlen(buf) < 1)
    return -1;
  if (strlen(buf) < 4) {
    if (buf[0] == '/')
      buf++;
    y = atoi(buf);
    if (y < 1 || y > 32)
      return -1;
    sm = 0;
    for (x = 0; x < y; x++)
      sm = sm | (1 << (31 - x));
  } else {
    if (!strstr(buf, "."))
      sm = strtoul(buf, (char **)NULL, 16);
    else {
      if (quadtonum(buf, &sm))
        return -1;
    }
  }
  y = 0;
  for (x = 0; x < 32; x++) {
    if (!y && !((sm >> (31 - x)) & 1))
      y = 1;
    if (y == 1 && ((sm >> (31 - x)) & 1))
      y = 2;
  }
  if (y == 2)
    return -1;
  *splitmask = sm;
  return 0;
}
```