user: 请从给定的汇编指令推导出C源代码:

```asm
<GetConsensusDetailed>:
  endbr64
  push   %r15
  mov    %esi,%r11d
  mov    %ecx,%r10d
  mov    %edx,%esi
  push   %r14
  mov    %r9d,%eax
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    0xa8(%rsp),%rcx
  mov    0x58(%rsp),%rdx
  mov    0x90(%rsp),%r12
  mov    0x98(%rsp),%rbx
  mov    0x68(%rsp),%rbp
  movb   $0x4e,(%rdx)
  mov    0x60(%rsp),%r9
  movl   $0x0,(%rcx)
  mov    0xa0(%rsp),%rcx
  movl   $0x0,(%rcx)
  mov    0x88(%rsp),%rcx
  movl   $0x0,(%rbx)
  movl   $0x0,(%r12)
  movl   $0x0,(%rcx)
  mov    0x80(%rsp),%rcx
  movl   $0x0,(%rcx)
  mov    0x78(%rsp),%rcx
  movl   $0x0,(%rcx)
  mov    0x70(%rsp),%rcx
  movl   $0x0,(%rcx)
  lea    (%rdi,%r11,1),%ecx
  add    %esi,%ecx
  movl   $0x0,0x0(%rbp)
  add    %r10d,%ecx
  cmp    0x50(%rsp),%ecx
  jl     L64
  cmp    %r10d,%esi
  mov    %r10d,%r13d
  mov    %edi,%r14d
  cmovge %esi,%r13d
  cmp    %r11d,%r13d
  cmovl  %r11d,%r13d
  cmp    %edi,%r13d
  cmovge %r13d,%r14d
  jle    L45
  movzbl (%rdx),%r15d
  xor    %r13d,%r13d
L204:
  mov    %r15b,(%rdx)
  cmp    0x38(%rsp),%r13d
  jge    L3
  cmp    %r14d,%r11d
  je     L182
L3:
  cmp    %r14d,%esi
  jne    L89
  cmp    0x40(%rsp),%r13d
  jl     L94
L89:
  cmp    0x48(%rsp),%r13d
  jge    L64
  cmp    %r14d,%r10d
  je     L35
L64:
  mov    %ecx,(%r9)
  test   %ecx,%ecx
  jle    L186
  cmpl   $0x1,0xb0(%rsp)
  je     L39
  test   %edi,%edi
  jle    L114
  cltd
  pxor   %xmm0,%xmm0
  idiv   %edi
  cvtsi2ss %edi,%xmm0
  sub    $0x21,%eax
  mov    %eax,(%r12)
  movss  %xmm0,0x0(%rbp)
L114:
  test   %r11d,%r11d
  jle    L172
  mov    0x38(%rsp),%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %r11d,%xmm0
  cltd
  idiv   %r11d
  sub    $0x21,%eax
  mov    %eax,(%rbx)
  mov    0x70(%rsp),%rax
  movss  %xmm0,(%rax)
L172:
  test   %esi,%esi
  jle    L107
  mov    0x40(%rsp),%eax
  pxor   %xmm0,%xmm0
  mov    0xa0(%rsp),%rbx
  cvtsi2ss %esi,%xmm0
  cltd
  idiv   %esi
  sub    $0x21,%eax
  mov    %eax,(%rbx)
  mov    0x78(%rsp),%rax
  movss  %xmm0,(%rax)
L107:
  test   %r10d,%r10d
  jle    L56
  mov    0x48(%rsp),%eax
  pxor   %xmm0,%xmm0
  mov    0xa8(%rsp),%rbx
  cvtsi2ss %r10d,%xmm0
  cltd
  idiv   %r10d
  sub    $0x21,%eax
  mov    %eax,(%rbx)
  mov    0x80(%rsp),%rax
  movss  %xmm0,(%rax)
L56:
  test   %r8d,%r8d
  jle    L186
  pxor   %xmm0,%xmm0
  mov    0x88(%rsp),%rax
  cvtsi2ss %r8d,%xmm0
  movss  %xmm0,(%rax)
L186:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L39:
  test   %edi,%edi
  jle    L200
  cltd
  pxor   %xmm0,%xmm0
  idiv   %edi
  sub    $0x21,%eax
  mov    %eax,(%r12)
  imul   $0x64,%edi,%eax
  mov    (%r9),%ecx
  cltd
  idiv   %ecx
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,0x0(%rbp)
L200:
  test   %r11d,%r11d
  jle    L164
  mov    0x38(%rsp),%eax
  pxor   %xmm0,%xmm0
  cltd
  idiv   %r11d
  sub    $0x21,%eax
  mov    %eax,(%rbx)
  imul   $0x64,%r11d,%eax
  mov    (%r9),%ecx
  cltd
  idiv   %ecx
  cvtsi2ss %eax,%xmm0
  mov    0x70(%rsp),%rax
  movss  %xmm0,(%rax)
L164:
  test   %esi,%esi
  jle    L76
  mov    0x40(%rsp),%eax
  mov    0xa0(%rsp),%rbx
  pxor   %xmm0,%xmm0
  cltd
  idiv   %esi
  sub    $0x21,%eax
  mov    %eax,(%rbx)
  imul   $0x64,%esi,%eax
  mov    (%r9),%ecx
  cltd
  idiv   %ecx
  cvtsi2ss %eax,%xmm0
  mov    0x78(%rsp),%rax
  movss  %xmm0,(%rax)
L76:
  test   %r10d,%r10d
  jle    L168
  mov    0x48(%rsp),%eax
  mov    0xa8(%rsp),%rbx
  pxor   %xmm0,%xmm0
  cltd
  idiv   %r10d
  sub    $0x21,%eax
  mov    %eax,(%rbx)
  imul   $0x64,%r10d,%eax
  mov    (%r9),%ecx
  cltd
  idiv   %ecx
  cvtsi2ss %eax,%xmm0
  mov    0x80(%rsp),%rax
  movss  %xmm0,(%rax)
L168:
  test   %r8d,%r8d
  jle    L186
  imul   $0x64,%r8d,%eax
  pxor   %xmm0,%xmm0
  cltd
  idiv   %ecx
  cvtsi2ss %eax,%xmm0
  mov    0x88(%rsp),%rax
  movss  %xmm0,(%rax)
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L45:
  mov    %eax,%r13d
  mov    $0x41,%r15d
  jmp    L204
  xchg   %ax,%ax
L35:
  movb   $0x43,(%rdx)
  jmp    L64
  nopl   0x0(%rax,%rax,1)
L94:
  movb   $0x47,(%rdx)
  mov    0x40(%rsp),%r13d
  jmp    L89
  nopl   (%rax)
L182:
  movb   $0x54,(%rdx)
  mov    0x38(%rsp),%r13d
  jmp    L3
```

assistant: ```c
void GetConsensusDetailed(int A, int T, int G, int C, int N, int Aq, int Tq, int Gq, int Cq, int depth, char *consensus, int *coverage, float *af, float *tf, float *gf, float *cf, float *nf, int *aq, int *tq, int *gq, int *cq, int freq) {
  int max, Qual = 0;
  *consensus = 'N';
  *af = *tf = *gf = *cf = *nf = *aq = *tq = *gq = *cq = 0;
  if (A + T + G + C >= depth) {
    max = ((((A) > (T) ? (A) : (T))) > (((G) > (C) ? (G) : (C))) ? (((A) > (T) ? (A) : (T))) : (((G) > (C) ? (G) : (C))));
    if (max == A) {
      *consensus = 'A';
      Qual = Aq;
    }
    if (max == T) {
      if (Tq > Qual) {
        *consensus = 'T';
        Qual = Tq;
      }
    }
    if (max == G) {
      if (Gq > Qual) {
        *consensus = 'G';
        Qual = Gq;
      }
    }
    if (max == C) {
      if (Cq > Qual) {
        *consensus = 'C';
        Qual = Cq;
      }
    }
  }
  *coverage = A + T + G + C;
  if (*coverage > 0) {
    if (freq == 1) {
      if (A > 0) {
        *aq = Aq / A;
        *aq -= 33;
        *af = A * 100 / *coverage;
      }
      if (T > 0) {
        *tq = Tq / T;
        *tq -= 33;
        *tf = T * 100 / *coverage;
      }
      if (G > 0) {
        *gq = Gq / G;
        *gq -= 33;
        *gf = G * 100 / *coverage;
      }
      if (C > 0) {
        *cq = Cq / C;
        *cq -= 33;
        *cf = C * 100 / *coverage;
      }
      if (N > 0) {
        *nf = N * 100 / *coverage;
      }
    } else {
      if (A > 0) {
        *aq = Aq / A;
        *aq -= 33;
        *af = A;
      }
      if (T > 0) {
        *tq = Tq / T;
        *tq -= 33;
        *tf = T;
      }
      if (G > 0) {
        *gq = Gq / G;
        *gq -= 33;
        *gf = G;
      }
      if (C > 0) {
        *cq = Cq / C;
        *cq -= 33;
        *cf = C;
      }
      if (N > 0) {
        *nf = N;
      }
    }
  }
}
```