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

```asm
<get_closeless>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x38,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  movl   $0x0,-0x18(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x14(%rbp)
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <str_len@plt>
  mov    %eax,%ebx
  mov    -0x40(%rbp),%rax
  mov    %rax,%rdi
  call   <str_len@plt>
  cmp    %eax,%ebx
  jne    L164
  movss  -0x14(%rbp),%xmm1
  movss  D32(%rip),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x14(%rbp)
  jmp    L146
L164:
  mov    -0x40(%rbp),%rax
  mov    %rax,%rdi
  call   <str_len@plt>
  mov    %eax,%ebx
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <str_len@plt>
  cmp    %eax,%ebx
  jge    L239
  lea    -0x40(%rbp),%rdx
  lea    -0x38(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <add_swap@plt>
  movl   $0x1,-0x18(%rbp)
L239:
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <str_len@plt>
  mov    %eax,-0x24(%rbp)
  jmp    L202
L22:
  movl   $0x0,-0x20(%rbp)
  jmp    L137
L214:
  mov    -0x40(%rbp),%rdx
  mov    -0x24(%rbp),%eax
  cltq
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x38(%rbp),%rcx
  mov    -0x20(%rbp),%eax
  cltq
  add    %rcx,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  jne    L104
  movss  -0x14(%rbp),%xmm1
  movss  D7(%rip),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x14(%rbp)
  jmp    L96
L104:
  addl   $0x1,-0x20(%rbp)
L137:
  mov    -0x38(%rbp),%rdx
  mov    -0x20(%rbp),%eax
  cltq
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L214
L96:
  addl   $0x1,-0x24(%rbp)
L202:
  mov    -0x40(%rbp),%rax
  mov    %rax,%rdi
  call   <str_len@plt>
  cmp    %eax,-0x24(%rbp)
  jl     L22
L146:
  movl   $0x0,-0x24(%rbp)
  jmp    L84
L98:
  mov    -0x38(%rbp),%rdx
  mov    -0x24(%rbp),%eax
  cltq
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x40(%rbp),%rcx
  mov    -0x24(%rbp),%eax
  cltq
  add    %rcx,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  jne    L179
  movss  -0x14(%rbp),%xmm1
  movss  D25(%rip),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x14(%rbp)
  jmp    L83
L179:
  movl   $0x0,-0x20(%rbp)
  jmp    L42
L191:
  mov    -0x40(%rbp),%rdx
  mov    -0x24(%rbp),%eax
  cltq
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x38(%rbp),%rcx
  mov    -0x20(%rbp),%eax
  cltq
  add    %rcx,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  je     L203
  addl   $0x1,-0x20(%rbp)
L42:
  mov    -0x38(%rbp),%rdx
  mov    -0x20(%rbp),%eax
  cltq
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L191
  jmp    L21
L203:
  nop
L21:
  movl   $0x0,-0x1c(%rbp)
  jmp    L101
L45:
  mov    -0x38(%rbp),%rdx
  mov    -0x24(%rbp),%eax
  cltq
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x40(%rbp),%rcx
  mov    -0x1c(%rbp),%eax
  cltq
  add    %rcx,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  je     L225
  addl   $0x1,-0x1c(%rbp)
L101:
  mov    -0x40(%rbp),%rdx
  mov    -0x1c(%rbp),%eax
  cltq
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L45
  jmp    L134
L225:
  nop
L134:
  mov    -0x38(%rbp),%rdx
  mov    -0x20(%rbp),%eax
  cltq
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L83
  mov    -0x40(%rbp),%rdx
  mov    -0x1c(%rbp),%eax
  cltq
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L83
  movss  -0x14(%rbp),%xmm1
  movss  D7(%rip),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x14(%rbp)
L83:
  addl   $0x1,-0x24(%rbp)
L84:
  mov    -0x38(%rbp),%rdx
  mov    -0x24(%rbp),%eax
  cltq
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L98
  cmpl   $0x1,-0x18(%rbp)
  jne    L230
  lea    -0x40(%rbp),%rdx
  lea    -0x38(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <add_swap@plt>
L230:
  movss  -0x14(%rbp),%xmm0
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: label: D32
type_guessed: byte[4]
name: retrieve_data
arguments: label: D7
type_guessed: f32
name: retrieve_data
arguments: label: D25
type_guessed: byte[4]

tool: {"D32": [0x00,0x00,0x80,0x3f]}

tool: D7: 0.5

tool: {"D25": [0x00,0x00,0x00,0x40]}

assistant: ```c
float get_closeless(char *word1, char *word2) {
  int i, j, k, flag = 0;
  float close = 0;
  if (str_len(word1) == str_len(word2))
    close++;
  else {
    if (str_len(word2) < str_len(word1)) {
      add_swap(&word1, &word2);
      flag = 1;
    }
    for (i = str_len(word1); i < str_len(word2); i++) {
      for (j = 0; word1[j] != '\0'; j++) {
        if (word2[i] == word1[j]) {
          close += 0.5;
          break;
        }
      }
    }
  }
  for (i = 0; word1[i] != '\0'; i++) {
    if (word1[i] == word2[i])
      close += 2;
    else {
      for (j = 0; word1[j] != '\0'; j++) {
        if (word2[i] == word1[j])
          break;
      }
      for (k = 0; word2[k] != '\0'; k++) {
        if (word1[i] == word2[k])
          break;
      }
      if ((word1[j] != '\0') && (word2[k] != '\0'))
        close += 0.5;
    }
  }
  if (flag == 1) {
    add_swap(&word1, &word2);
  }
  return close;
}
```