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

```asm
<_find_middle>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x28(%rbp)
  mov    %esi,-0x2c(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0xc(%rbp)
  cmpq   $0x0,-0x28(%rbp)
  jne    L21
  pxor   %xmm0,%xmm0
  jmp    L152
L21:
  cmpl   $0x0,-0x2c(%rbp)
  jns    L47
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rax
  test   %rax,%rax
  js     L78
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  jmp    L152
L78:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2ss %rdx,%xmm0
  addss  %xmm0,%xmm0
  jmp    L152
L47:
  movl   $0x0,-0x14(%rbp)
  jmp    L76
L94:
  mov    -0x14(%rbp),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L162
L77:
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x28(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rax
  cmp    %rax,%rdx
  jae    L98
  mov    -0x14(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    -0x14(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x28(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%rax
  mov    %rax,(%rdx)
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x8(%rbp),%rax
  mov    %rax,(%rdx)
L98:
  addl   $0x1,-0x10(%rbp)
L162:
  mov    -0x10(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L77
  addl   $0x1,-0x14(%rbp)
L76:
  mov    -0x14(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L94
  mov    -0x2c(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,-0x14(%rbp)
  mov    -0x14(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  test   %rax,%rax
  js     L140
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  jmp    L34
L140:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2ss %rdx,%xmm0
  addss  %xmm0,%xmm0
L34:
  movss  %xmm0,-0xc(%rbp)
  mov    -0x2c(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  jne    L135
  cmpl   $0x0,-0x2c(%rbp)
  jle    L135
  mov    -0x14(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  test   %rax,%rax
  js     L104
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  jmp    L8
L104:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2ss %rdx,%xmm0
  addss  %xmm0,%xmm0
L8:
  movss  -0xc(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0xc(%rbp)
  movss  -0xc(%rbp),%xmm0
  movss  D3(%rip),%xmm1
  divss  %xmm1,%xmm0
  movss  %xmm0,-0xc(%rbp)
L135:
  movss  -0xc(%rbp),%xmm0
L152:
  pop    %rbp
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D3
type_guessed: byte[4]

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

assistant: ```c
float _find_middle(unsigned long long *list, int size) {
  int i, j;
  unsigned long long tmp;
  float middle = 0.0f;
  if (!list)
    return 0;
  if (size < 0)
    return list[0];
  for (i = 0; i < size; i++) {
    for (j = i; j < size; j++) {
      if (list[j] < list[i]) {
        tmp = list[i];
        list[i] = list[j];
        list[j] = tmp;
      }
    }
  }
  i = size / 2;
  middle = (float)list[i];
  if (!(size % 2) && size > 0) {
    middle += (float)list[i - 1];
    middle /= 2;
  }
  return middle;
}
```