user: Translate the below assembly code into C programming language:

```asm
<GetConsensusDetailed>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,-0x14(%rbp)
  mov    %esi,-0x18(%rbp)
  mov    %edx,-0x1c(%rbp)
  mov    %ecx,-0x20(%rbp)
  mov    %r8d,-0x24(%rbp)
  mov    %r9d,-0x28(%rbp)
  movl   $0x0,-0x8(%rbp)
  mov    0x30(%rbp),%rax
  movb   $0x4e,(%rax)
  mov    0x80(%rbp),%rax
  movl   $0x0,(%rax)
  mov    0x80(%rbp),%rax
  mov    (%rax),%edx
  mov    0x78(%rbp),%rax
  mov    %edx,(%rax)
  mov    0x78(%rbp),%rax
  mov    (%rax),%edx
  mov    0x70(%rbp),%rax
  mov    %edx,(%rax)
  mov    0x70(%rbp),%rax
  mov    (%rax),%edx
  mov    0x68(%rbp),%rax
  mov    %edx,(%rax)
  mov    0x68(%rbp),%rax
  mov    (%rax),%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mov    0x60(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    0x60(%rbp),%rax
  movss  (%rax),%xmm0
  mov    0x58(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    0x58(%rbp),%rax
  movss  (%rax),%xmm0
  mov    0x50(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    0x50(%rbp),%rax
  movss  (%rax),%xmm0
  mov    0x48(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    0x48(%rbp),%rax
  movss  (%rax),%xmm0
  mov    0x40(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%eax
  add    %eax,%edx
  mov    -0x1c(%rbp),%eax
  add    %eax,%edx
  mov    -0x20(%rbp),%eax
  add    %edx,%eax
  cmp    %eax,0x28(%rbp)
  jg     L3
  mov    -0x20(%rbp),%edx
  mov    -0x1c(%rbp),%eax
  cmp    %eax,%edx
  cmovl  %eax,%edx
  mov    -0x18(%rbp),%ecx
  mov    -0x14(%rbp),%eax
  cmp    %eax,%ecx
  cmovge %ecx,%eax
  cmp    %eax,%edx
  cmovge %edx,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jne    L164
  mov    0x30(%rbp),%rax
  movb   $0x41,(%rax)
  mov    -0x28(%rbp),%eax
  mov    %eax,-0x8(%rbp)
L164:
  mov    -0x4(%rbp),%eax
  cmp    -0x18(%rbp),%eax
  jne    L32
  mov    0x10(%rbp),%eax
  cmp    -0x8(%rbp),%eax
  jle    L32
  mov    0x30(%rbp),%rax
  movb   $0x54,(%rax)
  mov    0x10(%rbp),%eax
  mov    %eax,-0x8(%rbp)
L32:
  mov    -0x4(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jne    L55
  mov    0x18(%rbp),%eax
  cmp    -0x8(%rbp),%eax
  jle    L55
  mov    0x30(%rbp),%rax
  movb   $0x47,(%rax)
  mov    0x18(%rbp),%eax
  mov    %eax,-0x8(%rbp)
L55:
  mov    -0x4(%rbp),%eax
  cmp    -0x20(%rbp),%eax
  jne    L3
  mov    0x20(%rbp),%eax
  cmp    -0x8(%rbp),%eax
  jle    L3
  mov    0x30(%rbp),%rax
  movb   $0x43,(%rax)
  mov    0x20(%rbp),%eax
  mov    %eax,-0x8(%rbp)
L3:
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%eax
  add    %eax,%edx
  mov    -0x1c(%rbp),%eax
  add    %eax,%edx
  mov    -0x20(%rbp),%eax
  add    %eax,%edx
  mov    0x38(%rbp),%rax
  mov    %edx,(%rax)
  mov    0x38(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jle    L81
  cmpl   $0x1,0x88(%rbp)
  jne    L52
  cmpl   $0x0,-0x14(%rbp)
  jle    L139
  mov    -0x28(%rbp),%eax
  cltd
  idivl  -0x14(%rbp)
  mov    %eax,%edx
  mov    0x68(%rbp),%rax
  mov    %edx,(%rax)
  mov    0x68(%rbp),%rax
  mov    (%rax),%eax
  lea    -0x21(%rax),%edx
  mov    0x68(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x14(%rbp),%eax
  imul   $0x64,%eax,%eax
  mov    0x38(%rbp),%rdx
  mov    (%rdx),%esi
  cltd
  idiv   %esi
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mov    0x40(%rbp),%rax
  movss  %xmm0,(%rax)
L139:
  cmpl   $0x0,-0x18(%rbp)
  jle    L112
  mov    0x10(%rbp),%eax
  cltd
  idivl  -0x18(%rbp)
  mov    %eax,%edx
  mov    0x70(%rbp),%rax
  mov    %edx,(%rax)
  mov    0x70(%rbp),%rax
  mov    (%rax),%eax
  lea    -0x21(%rax),%edx
  mov    0x70(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x18(%rbp),%eax
  imul   $0x64,%eax,%eax
  mov    0x38(%rbp),%rdx
  mov    (%rdx),%edi
  cltd
  idiv   %edi
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mov    0x48(%rbp),%rax
  movss  %xmm0,(%rax)
L112:
  cmpl   $0x0,-0x1c(%rbp)
  jle    L91
  mov    0x18(%rbp),%eax
  cltd
  idivl  -0x1c(%rbp)
  mov    %eax,%edx
  mov    0x78(%rbp),%rax
  mov    %edx,(%rax)
  mov    0x78(%rbp),%rax
  mov    (%rax),%eax
  lea    -0x21(%rax),%edx
  mov    0x78(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x1c(%rbp),%eax
  imul   $0x64,%eax,%eax
  mov    0x38(%rbp),%rdx
  mov    (%rdx),%esi
  cltd
  idiv   %esi
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mov    0x50(%rbp),%rax
  movss  %xmm0,(%rax)
L91:
  cmpl   $0x0,-0x20(%rbp)
  jle    L22
  mov    0x20(%rbp),%eax
  cltd
  idivl  -0x20(%rbp)
  mov    %eax,%edx
  mov    0x80(%rbp),%rax
  mov    %edx,(%rax)
  mov    0x80(%rbp),%rax
  mov    (%rax),%eax
  lea    -0x21(%rax),%edx
  mov    0x80(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x20(%rbp),%eax
  imul   $0x64,%eax,%eax
  mov    0x38(%rbp),%rdx
  mov    (%rdx),%edi
  cltd
  idiv   %edi
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mov    0x58(%rbp),%rax
  movss  %xmm0,(%rax)
L22:
  cmpl   $0x0,-0x24(%rbp)
  jle    L81
  mov    -0x24(%rbp),%eax
  imul   $0x64,%eax,%eax
  mov    0x38(%rbp),%rdx
  mov    (%rdx),%ecx
  cltd
  idiv   %ecx
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mov    0x60(%rbp),%rax
  movss  %xmm0,(%rax)
  jmp    L81
L52:
  cmpl   $0x0,-0x14(%rbp)
  jle    L193
  mov    -0x28(%rbp),%eax
  cltd
  idivl  -0x14(%rbp)
  mov    %eax,%edx
  mov    0x68(%rbp),%rax
  mov    %edx,(%rax)
  mov    0x68(%rbp),%rax
  mov    (%rax),%eax
  lea    -0x21(%rax),%edx
  mov    0x68(%rbp),%rax
  mov    %edx,(%rax)
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x14(%rbp),%xmm0
  mov    0x40(%rbp),%rax
  movss  %xmm0,(%rax)
L193:
  cmpl   $0x0,-0x18(%rbp)
  jle    L66
  mov    0x10(%rbp),%eax
  cltd
  idivl  -0x18(%rbp)
  mov    %eax,%edx
  mov    0x70(%rbp),%rax
  mov    %edx,(%rax)
  mov    0x70(%rbp),%rax
  mov    (%rax),%eax
  lea    -0x21(%rax),%edx
  mov    0x70(%rbp),%rax
  mov    %edx,(%rax)
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x18(%rbp),%xmm0
  mov    0x48(%rbp),%rax
  movss  %xmm0,(%rax)
L66:
  cmpl   $0x0,-0x1c(%rbp)
  jle    L140
  mov    0x18(%rbp),%eax
  cltd
  idivl  -0x1c(%rbp)
  mov    %eax,%edx
  mov    0x78(%rbp),%rax
  mov    %edx,(%rax)
  mov    0x78(%rbp),%rax
  mov    (%rax),%eax
  lea    -0x21(%rax),%edx
  mov    0x78(%rbp),%rax
  mov    %edx,(%rax)
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x1c(%rbp),%xmm0
  mov    0x50(%rbp),%rax
  movss  %xmm0,(%rax)
L140:
  cmpl   $0x0,-0x20(%rbp)
  jle    L100
  mov    0x20(%rbp),%eax
  cltd
  idivl  -0x20(%rbp)
  mov    %eax,%edx
  mov    0x80(%rbp),%rax
  mov    %edx,(%rax)
  mov    0x80(%rbp),%rax
  mov    (%rax),%eax
  lea    -0x21(%rax),%edx
  mov    0x80(%rbp),%rax
  mov    %edx,(%rax)
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x20(%rbp),%xmm0
  mov    0x58(%rbp),%rax
  movss  %xmm0,(%rax)
L100:
  cmpl   $0x0,-0x24(%rbp)
  jle    L81
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x24(%rbp),%xmm0
  mov    0x60(%rbp),%rax
  movss  %xmm0,(%rax)
L81:
  nop
  pop    %rbp
  ret
```

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;
      }
    }
  }
}
```