user: What would the C source look like for the assembly code provided here?

```asm
<shine_dalgarno_mm>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x90,%rsp
  mov    %rdi,-0x78(%rbp)
  mov    %esi,-0x7c(%rbp)
  mov    %edx,-0x80(%rbp)
  mov    %rcx,-0x88(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x5c(%rbp)
  mov    -0x80(%rbp),%eax
  sub    $0x4,%eax
  sub    -0x7c(%rbp),%eax
  mov    %eax,%esi
  mov    $0x6,%edi
  call   <imin@plt>
  mov    %eax,-0x58(%rbp)
  mov    -0x58(%rbp),%eax
  mov    %eax,-0x70(%rbp)
  jmp    L662
L996:
  mov    -0x70(%rbp),%eax
  cltq
  movsd  D51(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp,%rax,8)
  addl   $0x1,-0x70(%rbp)
L662:
  cmpl   $0x5,-0x70(%rbp)
  jle    L996
  movl   $0x0,-0x70(%rbp)
  jmp    L898
L393:
  mov    -0x7c(%rbp),%edx
  mov    -0x70(%rbp),%eax
  add    %edx,%eax
  test   %eax,%eax
  js     L179
  mov    -0x70(%rbp),%edx
  movslq %edx,%rax
  imul   $0x55555556,%rax,%rax
  shr    $0x20,%rax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  mov    %eax,%ecx
  add    %ecx,%ecx
  add    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  test   %eax,%eax
  jne    L623
  mov    -0x7c(%rbp),%edx
  mov    -0x70(%rbp),%eax
  add    %eax,%edx
  mov    -0x78(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <is_a@plt>
  cmp    $0x1,%eax
  jne    L159
  mov    -0x70(%rbp),%eax
  cltq
  movsd  D480(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp,%rax,8)
  jmp    L961
L159:
  mov    -0x70(%rbp),%eax
  cltq
  movsd  D359(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp,%rax,8)
  jmp    L961
L623:
  mov    -0x7c(%rbp),%edx
  mov    -0x70(%rbp),%eax
  add    %eax,%edx
  mov    -0x78(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <is_g@plt>
  cmp    $0x1,%eax
  jne    L942
  mov    -0x70(%rbp),%eax
  cltq
  movsd  D27(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp,%rax,8)
  jmp    L961
L942:
  mov    -0x70(%rbp),%eax
  cltq
  movsd  D110(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp,%rax,8)
  jmp    L961
L179:
  nop
L961:
  addl   $0x1,-0x70(%rbp)
L898:
  mov    -0x70(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  jl     L393
  movl   $0x0,-0x60(%rbp)
  mov    -0x58(%rbp),%eax
  mov    %eax,-0x70(%rbp)
  jmp    L121
L956:
  movl   $0x0,-0x6c(%rbp)
  jmp    L938
L242:
  movsd  D110(%rip),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movl   $0x0,-0x64(%rbp)
  mov    -0x6c(%rbp),%eax
  mov    %eax,-0x68(%rbp)
  jmp    L849
L657:
  mov    -0x68(%rbp),%eax
  cltq
  movsd  -0x40(%rbp,%rax,8),%xmm0
  movsd  -0x50(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  mov    -0x68(%rbp),%eax
  cltq
  movsd  -0x40(%rbp,%rax,8),%xmm1
  pxor   %xmm0,%xmm0
  comisd %xmm1,%xmm0
  jbe    L557
  addl   $0x1,-0x64(%rbp)
L557:
  mov    -0x68(%rbp),%eax
  cltq
  movsd  -0x40(%rbp,%rax,8),%xmm1
  pxor   %xmm0,%xmm0
  comisd %xmm1,%xmm0
  jbe    L691
  mov    -0x6c(%rbp),%eax
  add    $0x1,%eax
  cmp    %eax,-0x68(%rbp)
  jle    L391
  mov    -0x6c(%rbp),%edx
  mov    -0x70(%rbp),%eax
  add    %edx,%eax
  sub    $0x2,%eax
  cmp    %eax,-0x68(%rbp)
  jl     L691
L391:
  movsd  -0x50(%rbp),%xmm0
  movsd  D73(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x50(%rbp)
L691:
  addl   $0x1,-0x68(%rbp)
L849:
  mov    -0x6c(%rbp),%edx
  mov    -0x70(%rbp),%eax
  add    %edx,%eax
  cmp    %eax,-0x68(%rbp)
  jl     L657
  cmpl   $0x1,-0x64(%rbp)
  jne    L428
  mov    -0x7c(%rbp),%edx
  mov    -0x6c(%rbp),%eax
  add    %eax,%edx
  mov    -0x70(%rbp),%eax
  add    %eax,%edx
  mov    -0x80(%rbp),%eax
  sub    %edx,%eax
  mov    %eax,-0x54(%rbp)
  cmpl   $0x4,-0x54(%rbp)
  jg     L674
  movsd  D183(%rip),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  jmp    L709
L674:
  cmpl   $0xa,-0x54(%rbp)
  jle    L628
  cmpl   $0xc,-0x54(%rbp)
  jg     L628
  movsd  D480(%rip),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  jmp    L709
L628:
  cmpl   $0xc,-0x54(%rbp)
  jle    L95
  movsd  D27(%rip),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  jmp    L709
L95:
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x48(%rbp)
L709:
  cmpl   $0xf,-0x54(%rbp)
  jg     L710
  movsd  D176(%rip),%xmm0
  comisd -0x50(%rbp),%xmm0
  ja     L710
  movsd  D176(%rip),%xmm0
  comisd -0x50(%rbp),%xmm0
  jbe    L29
  movl   $0x0,-0x5c(%rbp)
  jmp    L323
L29:
  movsd  -0x50(%rbp),%xmm0
  ucomisd D176(%rip),%xmm0
  jp     L820
  movsd  -0x50(%rbp),%xmm0
  ucomisd D176(%rip),%xmm0
  jne    L820
  movsd  -0x48(%rbp),%xmm0
  ucomisd D27(%rip),%xmm0
  jp     L820
  movsd  -0x48(%rbp),%xmm0
  ucomisd D27(%rip),%xmm0
  jne    L820
  movl   $0x2,-0x5c(%rbp)
  jmp    L323
L820:
  movsd  -0x50(%rbp),%xmm0
  ucomisd D400(%rip),%xmm0
  jp     L198
  movsd  -0x50(%rbp),%xmm0
  ucomisd D400(%rip),%xmm0
  jne    L198
  movsd  -0x48(%rbp),%xmm0
  ucomisd D27(%rip),%xmm0
  jp     L198
  movsd  -0x48(%rbp),%xmm0
  ucomisd D27(%rip),%xmm0
  jne    L198
  movl   $0x2,-0x5c(%rbp)
  jmp    L323
L198:
  movsd  -0x50(%rbp),%xmm0
  ucomisd D244(%rip),%xmm0
  jp     L831
  movsd  -0x50(%rbp),%xmm0
  ucomisd D244(%rip),%xmm0
  jne    L831
  movsd  -0x48(%rbp),%xmm0
  ucomisd D27(%rip),%xmm0
  jp     L831
  movsd  -0x48(%rbp),%xmm0
  ucomisd D27(%rip),%xmm0
  jne    L831
  movl   $0x3,-0x5c(%rbp)
  jmp    L323
L831:
  movsd  -0x50(%rbp),%xmm0
  ucomisd D176(%rip),%xmm0
  jp     L344
  movsd  -0x50(%rbp),%xmm0
  ucomisd D176(%rip),%xmm0
  jne    L344
  movsd  -0x48(%rbp),%xmm0
  ucomisd D480(%rip),%xmm0
  jp     L344
  movsd  -0x48(%rbp),%xmm0
  ucomisd D480(%rip),%xmm0
  jne    L344
  movl   $0x4,-0x5c(%rbp)
  jmp    L323
L344:
  movsd  -0x50(%rbp),%xmm0
  ucomisd D176(%rip),%xmm0
  jp     L24
  movsd  -0x50(%rbp),%xmm0
  ucomisd D176(%rip),%xmm0
  jne    L24
  movsd  D183(%rip),%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jp     L24
  movsd  D183(%rip),%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jne    L24
  movl   $0x5,-0x5c(%rbp)
  jmp    L323
L24:
  movsd  -0x50(%rbp),%xmm0
  ucomisd D176(%rip),%xmm0
  jp     L740
  movsd  -0x50(%rbp),%xmm0
  ucomisd D176(%rip),%xmm0
  jne    L740
  pxor   %xmm0,%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jp     L740
  pxor   %xmm0,%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jne    L740
  movl   $0x9,-0x5c(%rbp)
  jmp    L323
L740:
  movsd  -0x50(%rbp),%xmm0
  ucomisd D400(%rip),%xmm0
  jp     L754
  movsd  -0x50(%rbp),%xmm0
  ucomisd D400(%rip),%xmm0
  jne    L754
  movsd  -0x48(%rbp),%xmm0
  ucomisd D480(%rip),%xmm0
  jp     L754
  movsd  -0x48(%rbp),%xmm0
  ucomisd D480(%rip),%xmm0
  jne    L754
  movl   $0x7,-0x5c(%rbp)
  jmp    L323
L754:
  movsd  -0x50(%rbp),%xmm0
  ucomisd D400(%rip),%xmm0
  jp     L747
  movsd  -0x50(%rbp),%xmm0
  ucomisd D400(%rip),%xmm0
  jne    L747
  movsd  D183(%rip),%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jp     L747
  movsd  D183(%rip),%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jne    L747
  movl   $0x8,-0x5c(%rbp)
  jmp    L323
L747:
  movsd  -0x50(%rbp),%xmm0
  ucomisd D400(%rip),%xmm0
  jp     L230
  movsd  -0x50(%rbp),%xmm0
  ucomisd D400(%rip),%xmm0
  jne    L230
  pxor   %xmm0,%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jp     L230
  pxor   %xmm0,%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jne    L230
  movl   $0xe,-0x5c(%rbp)
  jmp    L323
L230:
  movsd  -0x50(%rbp),%xmm0
  ucomisd D244(%rip),%xmm0
  jp     L171
  movsd  -0x50(%rbp),%xmm0
  ucomisd D244(%rip),%xmm0
  jne    L171
  movsd  -0x48(%rbp),%xmm0
  ucomisd D480(%rip),%xmm0
  jp     L171
  movsd  -0x48(%rbp),%xmm0
  ucomisd D480(%rip),%xmm0
  jne    L171
  movl   $0x11,-0x5c(%rbp)
  jmp    L323
L171:
  movsd  -0x50(%rbp),%xmm0
  ucomisd D244(%rip),%xmm0
  jp     L570
  movsd  -0x50(%rbp),%xmm0
  ucomisd D244(%rip),%xmm0
  jne    L570
  movsd  D183(%rip),%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jp     L570
  movsd  D183(%rip),%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jne    L570
  movl   $0x12,-0x5c(%rbp)
  jmp    L323
L570:
  movsd  -0x50(%rbp),%xmm0
  ucomisd D244(%rip),%xmm0
  jp     L323
  movsd  -0x50(%rbp),%xmm0
  ucomisd D244(%rip),%xmm0
  jne    L323
  pxor   %xmm0,%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jp     L323
  pxor   %xmm0,%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jne    L323
  movl   $0x13,-0x5c(%rbp)
L323:
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x60(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  comisd %xmm1,%xmm0
  ja     L621
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x60(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  ucomisd %xmm1,%xmm0
  jp     L1019
  ucomisd %xmm1,%xmm0
  jne    L1019
  mov    -0x5c(%rbp),%eax
  cmp    -0x60(%rbp),%eax
  jl     L202
L1019:
  mov    -0x5c(%rbp),%eax
  mov    %eax,-0x60(%rbp)
  jmp    L431
L428:
  nop
  jmp    L431
L710:
  nop
  jmp    L431
L621:
  nop
  jmp    L431
L202:
  nop
L431:
  addl   $0x1,-0x6c(%rbp)
L938:
  mov    -0x58(%rbp),%eax
  sub    -0x70(%rbp),%eax
  cmp    %eax,-0x6c(%rbp)
  jle    L242
  subl   $0x1,-0x70(%rbp)
L121:
  cmpl   $0x4,-0x70(%rbp)
  jg     L956
  mov    -0x60(%rbp),%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L282
  call   <__stack_chk_fail@plt>
L282:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D51
type: f32[2]
name: extract_symbolic_data
arguments: tag: D480
type: f64
name: extract_symbolic_data
arguments: tag: D359
type: f32[2]
name: extract_symbolic_data
arguments: tag: D27
type: f64
name: extract_symbolic_data
arguments: tag: D110
type: f32[2]
name: extract_symbolic_data
arguments: tag: D73
type: f64
name: extract_symbolic_data
arguments: tag: D183
type: f32[2]
name: extract_symbolic_data
arguments: tag: D176
type: f64
name: extract_symbolic_data
arguments: tag: D400
type: f64
name: extract_symbolic_data
arguments: tag: D244
type: f64

tool: {"D51": [0.0,-2.5625]}

tool: D480: 2

tool: {"D359": [0.0,-2.125]}

tool: D27: 3

tool: {"D110": [0.0,-2.0]}

tool: D73: 10

tool: {"D183": [0.0,1.875]}

tool: D176: 6

tool: D400: 7

tool: D244: 9

assistant: ```c
int shine_dalgarno_mm(unsigned char *seq, int pos, int start, double *rwt) {
  int i, j, k, mism, rdis, limit, max_val, cur_val = 0;
  double match[6], cur_ctr, dis_flag;
  limit = imin(6, start - 4 - pos);
  for (i = limit; i < 6; i++)
    match[i] = -10.0;
  for (i = 0; i < limit; i++) {
    if (pos + i < 0)
      continue;
    if (i % 3 == 0) {
      if (is_a(seq, pos + i) == 1)
        match[i] = 2.0;
      else
        match[i] = -3.0;
    } else {
      if (is_g(seq, pos + i) == 1)
        match[i] = 3.0;
      else
        match[i] = -2.0;
    }
  }
  max_val = 0;
  for (i = limit; i >= 5; i--) {
    for (j = 0; j <= limit - i; j++) {
      cur_ctr = -2.0;
      mism = 0;
      for (k = j; k < j + i; k++) {
        cur_ctr += match[k];
        if (match[k] < 0.0)
          mism++;
        if (match[k] < 0.0 && (k <= j + 1 || k >= j + i - 2))
          cur_ctr -= 10.0;
      }
      if (mism != 1)
        continue;
      rdis = start - (pos + j + i);
      if (rdis < 5) {
        dis_flag = 1;
      } else if (rdis > 10 && rdis <= 12) {
        dis_flag = 2;
      } else if (rdis >= 13) {
        dis_flag = 3;
      } else
        dis_flag = 0;
      if (rdis > 15 || cur_ctr < 6.0)
        continue;
      if (cur_ctr < 6.0)
        cur_val = 0;
      else if (cur_ctr == 6.0 && dis_flag == 3)
        cur_val = 2;
      else if (cur_ctr == 7.0 && dis_flag == 3)
        cur_val = 2;
      else if (cur_ctr == 9.0 && dis_flag == 3)
        cur_val = 3;
      else if (cur_ctr == 6.0 && dis_flag == 2)
        cur_val = 4;
      else if (cur_ctr == 6.0 && dis_flag == 1)
        cur_val = 5;
      else if (cur_ctr == 6.0 && dis_flag == 0)
        cur_val = 9;
      else if (cur_ctr == 7.0 && dis_flag == 2)
        cur_val = 7;
      else if (cur_ctr == 7.0 && dis_flag == 1)
        cur_val = 8;
      else if (cur_ctr == 7.0 && dis_flag == 0)
        cur_val = 14;
      else if (cur_ctr == 9.0 && dis_flag == 2)
        cur_val = 17;
      else if (cur_ctr == 9.0 && dis_flag == 1)
        cur_val = 18;
      else if (cur_ctr == 9.0 && dis_flag == 0)
        cur_val = 19;
      if (rwt[cur_val] < rwt[max_val])
        continue;
      if (rwt[cur_val] == rwt[max_val] && cur_val < max_val)
        continue;
      max_val = cur_val;
    }
  }
  return max_val;
}
```