user: 请将以下的汇编代码转换成C语言代码:

```asm
<predict_seq>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xf0,%rsp
  mov    %rdi,-0xd8(%rbp)
  mov    %rsi,-0xe0(%rbp)
  mov    %rdx,-0xe8(%rbp)
  mov    %rcx,-0xf0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D2(%rip),%rax
  mov    %rax,-0xc0(%rbp)
  movl   $0x0,-0xc8(%rbp)
  jmp    L123
L90:
  mov    -0xc8(%rbp),%eax
  cltq
  movl   $0x14,-0xb0(%rbp,%rax,4)
  addl   $0x1,-0xc8(%rbp)
L123:
  cmpl   $0x28,-0xc8(%rbp)
  jle    L90
  movl   $0x0,-0xc8(%rbp)
  jmp    L0
L126:
  mov    -0xc8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0xd8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%edx
  mov    -0xc0(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <strchr@plt>
  mov    %rax,-0xb8(%rbp)
  cmpq   $0x0,-0xb8(%rbp)
  je     L129
  movl   $0x1,-0xc4(%rbp)
  jmp    L121
L27:
  mov    $0x28,%eax
  sub    -0xc4(%rbp),%eax
  mov    $0x29,%edx
  mov    %edx,%ecx
  sub    -0xc4(%rbp),%ecx
  cltq
  mov    -0xb0(%rbp,%rax,4),%edx
  movslq %ecx,%rax
  mov    %edx,-0xb0(%rbp,%rax,4)
  addl   $0x1,-0xc4(%rbp)
L121:
  cmpl   $0x28,-0xc4(%rbp)
  jle    L27
  mov    -0xb8(%rbp),%rax
  sub    -0xc0(%rbp),%rax
  mov    %eax,-0xb0(%rbp)
  cmpl   $0x13,-0xc8(%rbp)
  jle    L129
  mov    -0xc8(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x50(%rax),%rdx
  mov    -0xf0(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0xc8(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x50(%rax),%rdx
  mov    -0xe8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xc8(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x50(%rax),%rsi
  mov    -0xe0(%rbp),%rax
  add    %rax,%rsi
  lea    -0xb0(%rbp),%rax
  mov    %rax,%rdi
  call   <predict@plt>
L129:
  addl   $0x1,-0xc8(%rbp)
L0:
  mov    -0xd8(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    %eax,-0xc8(%rbp)
  jl     L126
  mov    -0xd8(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  sub    $0x14,%eax
  mov    %eax,-0xc8(%rbp)
  jmp    L120
L64:
  movl   $0x1,-0xc4(%rbp)
  jmp    L98
L117:
  mov    $0x28,%eax
  sub    -0xc4(%rbp),%eax
  mov    $0x29,%edx
  mov    %edx,%ecx
  sub    -0xc4(%rbp),%ecx
  cltq
  mov    -0xb0(%rbp,%rax,4),%edx
  movslq %ecx,%rax
  mov    %edx,-0xb0(%rbp,%rax,4)
  addl   $0x1,-0xc4(%rbp)
L98:
  cmpl   $0x28,-0xc4(%rbp)
  jle    L117
  movl   $0x14,-0xb0(%rbp)
  mov    -0xc8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xf0(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0xc8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xe8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xc8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rsi
  mov    -0xe0(%rbp),%rax
  add    %rax,%rsi
  lea    -0xb0(%rbp),%rax
  mov    %rax,%rdi
  call   <predict@plt>
  addl   $0x1,-0xc8(%rbp)
L120:
  mov    -0xd8(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    %eax,-0xc8(%rbp)
  jl     L64
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L97
  call   <__stack_chk_fail@plt>
L97:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: label: D2
type_infered: string

tool: D2: FIVWMLCHYAGNRTPDEQSK

assistant: ```c
void predict_seq(char const *seq, float sm_arr[], float sb_arr[], float sr_arr[]) {
  char *alphabet = "FIVWMLCHYAGNRTPDEQSK";
  char *p;
  int i, j, s[41];
  for (i = 0; i < 41; ++i)
    s[i] = 21 - 1;
  for (i = 0; i < (int)strlen(seq); ++i) {
    p = strchr(alphabet, seq[i]);
    if (p != NULL) {
      for (j = 1; j < 41; ++j)
        s[41 - j] = s[41 - j - 1];
      s[0] = p - alphabet;
      if (i >= (41 - 1) / 2) {
        predict(s, &sm_arr[i - (41 - 1) / 2], &sb_arr[i - (41 - 1) / 2], &sr_arr[i - (41 - 1) / 2]);
      }
    }
  }
  for (i = (int)strlen(seq) - (41 - 1) / 2; i < (int)strlen(seq); ++i) {
    for (j = 1; j < 41; ++j)
      s[41 - j] = s[41 - j - 1];
    s[0] = 21 - 1;
    predict(s, &sm_arr[i], &sb_arr[i], &sr_arr[i]);
  }
  return;
}
```