user: 下面的汇编指令对应的C源代码是什么:

```asm
<CompareSeqs>:
  endbr64
  push   %rbp
  mov    %rsi,%r10
  mov    %ecx,%eax
  lea    -0x1(%rdx),%esi
  push   %rbx
  test   %ecx,%ecx
  je     L133
  test   %edx,%edx
  jle    L26
  movabs $0x8000000000006001,%rbp
  movslq %edx,%r11
  xor    %edx,%edx
  nopl   (%rax)
L176:
  movzbl (%rdi,%rdx,1),%ebx
  mov    %edx,%r9d
  mov    %edx,%eax
  lea    -0x20(%rbx),%ecx
  cmp    $0x3f,%cl
  jbe    L42
L157:
  movzbl (%r10,%rdx,1),%ebx
  sub    $0x20,%ebx
  cmp    $0x3f,%bl
  jbe    L35
L224:
  movabs $0x8000000000006001,%r11
  mov    %r11,%r9
  shr    %cl,%r9
  not    %r9
  and    $0x1,%r9d
  cmp    $0x3f,%cl
  mov    $0x1,%ecx
  cmovbe %r9d,%ecx
  jmp    L144
  nopl   0x0(%rax,%rax,1)
L86:
  sub    $0x1,%esi
  jb     L209
L144:
  test   %cl,%cl
  je     L86
  movzbl (%r10,%rdx,1),%ebx
  lea    -0x20(%rbx),%r9d
  cmp    $0x3f,%r9b
  ja     L133
  bt     %r9,%r11
  jb     L86
  nopw   0x0(%rax,%rax,1)
L133:
  cmp    %esi,%eax
  jg     L209
  cltq
  xor    %r9d,%r9d
  xor    %ebx,%ebx
  movabs $0x8000000000006001,%rbp
  jmp    L196
  nopl   0x0(%rax,%rax,1)
L219:
  add    $0x1,%rax
  add    $0x1,%ebx
  cmp    %eax,%esi
  jl     L129
L196:
  movzbl (%rdi,%rax,1),%edx
  movzbl (%r10,%rax,1),%ecx
  xor    %r11d,%r11d
  cmp    %cl,%dl
  setne  %r11b
  sub    $0x20,%edx
  add    %r11d,%r9d
  cmp    $0x3f,%dl
  ja     L219
  bt     %rdx,%rbp
  jae    L219
  sub    $0x20,%ecx
  cmp    $0x3f,%cl
  ja     L219
  bt     %rcx,%rbp
  jae    L219
  add    $0x1,%rax
  cmp    %eax,%esi
  jge    L196
L129:
  pxor   %xmm0,%xmm0
  test   %ebx,%ebx
  je     L221
  pxor   %xmm0,%xmm0
  pxor   %xmm1,%xmm1
  cvtsi2ss %r9d,%xmm0
  cvtsi2ss %ebx,%xmm1
  divss  %xmm1,%xmm0
L221:
  mov    $0x1,%eax
  pop    %rbx
  movss  %xmm0,(%r8)
  pop    %rbp
  ret
  cs nopw 0x0(%rax,%rax,1)
L42:
  bt     %rcx,%rbp
  jae    L157
L49:
  add    $0x1,%rdx
  lea    0x1(%r9),%eax
  cmp    %rdx,%r11
  jne    L176
  movslq %eax,%rdx
  movzbl (%rdi,%rdx,1),%ebx
  lea    -0x20(%rbx),%ecx
  jmp    L224
  nopw   0x0(%rax,%rax,1)
L35:
  bt     %rbx,%rbp
  jb     L49
  jmp    L224
  nopl   0x0(%rax,%rax,1)
L209:
  pxor   %xmm0,%xmm0
  mov    $0x1,%eax
  pop    %rbx
  pop    %rbp
  movss  %xmm0,(%r8)
  ret
L26:
  test   %esi,%esi
  js     L209
  movzbl (%rdi),%eax
  xor    %edx,%edx
  lea    -0x20(%rax),%ecx
  xor    %eax,%eax
  jmp    L224
```

assistant: ```c
int CompareSeqs(char *s1, char *s2, int alen, int allow_ragged_ends, float *ret_diff) {
  int pos;
  int syms;
  int diff;
  int from, to;
  if (allow_ragged_ends) {
    for (from = 0; from < alen; from++)
      if (!((s1[from]) == ' ' || (s1[from]) == '.' || (s1[from]) == '_' || (s1[from]) == '-') && !((s2[from]) == ' ' || (s2[from]) == '.' || (s2[from]) == '_' || (s2[from]) == '-'))
        break;
    for (to = alen - 1; to >= 0; to--)
      if (!((s1[from]) == ' ' || (s1[from]) == '.' || (s1[from]) == '_' || (s1[from]) == '-') && !((s2[from]) == ' ' || (s2[from]) == '.' || (s2[from]) == '_' || (s2[from]) == '-'))
        break;
  } else {
    from = 0;
    to = alen - 1;
  }
  diff = syms = 0;
  for (pos = from; pos <= to; pos++) {
    if (s1[pos] != s2[pos])
      diff++;
    if ((!((s1[pos]) == ' ' || (s1[pos]) == '.' || (s1[pos]) == '_' || (s1[pos]) == '-')) || (!((s2[pos]) == ' ' || (s2[pos]) == '.' || (s2[pos]) == '_' || (s2[pos]) == '-')))
      syms++;
  }
  *ret_diff = syms > 0 ? (float)diff / (float)syms : 0.0;
  return 1;
}
```