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

```asm
<find_number>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %esi,-0x3c(%rbp)
  mov    %rdx,-0x48(%rbp)
  mov    %rcx,-0x50(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x48(%rbp),%rax
  movl   $0x0,(%rax)
  mov    -0x50(%rbp),%rax
  movl   $0x0,(%rax)
  cmpl   $0xc,-0x3c(%rbp)
  jle    L204
  mov    -0x3c(%rbp),%eax
  cltq
  lea    -0xd(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    $0xd,%edx
  mov    %rax,%rsi
  lea    D6(%rip),%rax
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L204
  subl   $0xd,-0x3c(%rbp)
  jmp    L359
L204:
  cmpl   $0xe,-0x3c(%rbp)
  jle    L359
  mov    -0x3c(%rbp),%eax
  cltq
  lea    -0xf(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    $0xf,%edx
  mov    %rax,%rsi
  lea    D9(%rip),%rax
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L359
  subl   $0xf,-0x3c(%rbp)
L359:
  lea    -0x20(%rbp),%rcx
  lea    -0x24(%rbp),%rdx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <find_rightmost_num@plt>
  mov    %eax,-0x10(%rbp)
  cmpl   $0x0,-0x10(%rbp)
  je     L80
  mov    -0x20(%rbp),%eax
  mov    -0x24(%rbp),%ecx
  sub    %ecx,%eax
  mov    %eax,%edx
  mov    -0x24(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x38(%rbp),%rax
  add    %rcx,%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <to_i@plt>
  mov    %eax,-0xc(%rbp)
  mov    -0x20(%rbp),%eax
  cmp    %eax,-0x3c(%rbp)
  jle    L79
  mov    -0x24(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x20(%rbp),%edx
  mov    -0x50(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L471
L79:
  movl   $0x0,-0x14(%rbp)
  mov    -0x24(%rbp),%eax
  cmp    $0x1,%eax
  jle    L293
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x5f,%al
  jne    L293
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x2(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x40,%al
  jle    L457
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x2(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x5a,%al
  jle    L305
L457:
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x2(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jle    L293
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x2(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x39,%al
  jg     L293
L305:
  movl   $0x1,-0x14(%rbp)
  jmp    L59
L293:
  cmpl   $0x0,-0xc(%rbp)
  jne    L375
  mov    -0x24(%rbp),%eax
  cmp    $0x2,%eax
  jle    L375
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x53,%al
  jne    L375
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x2(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x5f,%al
  jne    L375
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x3(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x40,%al
  jle    L319
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x3(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x5a,%al
  jle    L2
L319:
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x3(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jle    L375
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x3(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x39,%al
  jg     L375
L2:
  movl   $0x1,-0x14(%rbp)
  jmp    L59
L375:
  cmpl   $0x3,-0xc(%rbp)
  jne    L242
  mov    -0x24(%rbp),%eax
  cmp    $0x2,%eax
  jle    L242
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x4e,%al
  jne    L242
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x2(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x5f,%al
  jne    L242
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x3(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x40,%al
  jle    L87
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x3(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x5a,%al
  jle    L142
L87:
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x3(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jle    L242
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x3(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x39,%al
  jg     L242
L142:
  movl   $0x1,-0x14(%rbp)
  jmp    L59
L242:
  cmpl   $0x0,-0xc(%rbp)
  js     L59
  cmpl   $0x3,-0xc(%rbp)
  jg     L59
  mov    -0x24(%rbp),%eax
  cmp    $0x4,%eax
  jle    L59
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x54,%al
  jne    L59
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x2(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x4e,%al
  jne    L59
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x3(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x49,%al
  jne    L59
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x4(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x5f,%al
  jne    L59
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x5(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x40,%al
  jle    L144
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x5(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x5a,%al
  jle    L126
L144:
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x5(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jle    L59
  mov    -0x24(%rbp),%eax
  cltq
  lea    -0x5(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x39,%al
  jg     L59
L126:
  movl   $0x1,-0x14(%rbp)
L59:
  cmpl   $0x0,-0x14(%rbp)
  je     L173
  mov    -0x24(%rbp),%esi
  lea    -0x18(%rbp),%rcx
  lea    -0x1c(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <find_rightmost_num@plt>
  test   %eax,%eax
  jne    L7
L173:
  mov    -0x24(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x20(%rbp),%edx
  mov    -0x50(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L471
L7:
  mov    -0x1c(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x18(%rbp),%edx
  mov    -0x50(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L471
L80:
  nop
L471:
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L347
  call   <__stack_chk_fail@plt>
L347:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: tag: D6
type: string
name: retrieve_data
arguments: tag: D9
type: string

tool: D6: _DSP48A1_SITE

tool: D9: _DSP48A1_B_SITE

assistant: ```c
void find_number(const char *s, int s_len, int *num_start, int *num_end) {
  int result, dig_start, dig_end, found_num, search_more;
  int next_dig_start, next_dig_end;
  *num_start = 0;
  *num_end = 0;
  if (s_len >= 13 && !strncmp("_DSP48A1_SITE", &s[s_len - 13], 13))
    s_len -= 13;
  else if (s_len >= 15 && !strncmp("_DSP48A1_B_SITE", &s[s_len - 15], 15))
    s_len -= 15;
  result = find_rightmost_num(s, s_len, &dig_start, &dig_end);
  if (!result)
    return;
  found_num = to_i(&s[dig_start], dig_end - dig_start);
  if (dig_end < s_len) {
    *num_start = dig_start;
    *num_end = dig_end;
    return;
  }
  search_more = 0;
  if (dig_start >= 2 && s[dig_start - 1] == '_' && ((s[dig_start - 2] >= 'A' && s[dig_start - 2] <= 'Z') || (s[dig_start - 2] >= '0' && s[dig_start - 2] <= '9')))
    search_more = 1;
  else if (found_num == 0 && dig_start >= 3 && s[dig_start - 1] == 'S' && s[dig_start - 2] == '_' && ((s[dig_start - 3] >= 'A' && s[dig_start - 3] <= 'Z') || (s[dig_start - 3] >= '0' && s[dig_start - 3] <= '9')))
    search_more = 1;
  else if (found_num == 3 && dig_start >= 3 && s[dig_start - 1] == 'N' && s[dig_start - 2] == '_' && ((s[dig_start - 3] >= 'A' && s[dig_start - 3] <= 'Z') || (s[dig_start - 3] >= '0' && s[dig_start - 3] <= '9')))
    search_more = 1;
  else if ((found_num >= 0 && found_num <= 3) && dig_start >= 5 && s[dig_start - 1] == 'T' && s[dig_start - 2] == 'N' && s[dig_start - 3] == 'I' && s[dig_start - 4] == '_' && ((s[dig_start - 5] >= 'A' && s[dig_start - 5] <= 'Z') || (s[dig_start - 5] >= '0' && s[dig_start - 5] <= '9')))
    search_more = 1;
  if (!search_more || !find_rightmost_num(s, dig_start, &next_dig_start, &next_dig_end)) {
    *num_start = dig_start;
    *num_end = dig_end;
  } else {
    *num_start = next_dig_start;
    *num_end = next_dig_end;
  }
}
```