user: What is the c source code of the assembly code below:

```asm
<MultiNomialAliasSetTable>:
  endbr64
  mov    %rdx,%r9
  mov    %rcx,%r10
  test   %edi,%edi
  jle    L653
  lea    -0x1(%rdi),%ecx
  cmp    $0x2,%ecx
  jbe    L636
  mov    %edi,%edx
  movdqa D36(%rip),%xmm0
  mov    %r10,%rax
  shr    $0x2,%edx
  sub    $0x1,%edx
  shl    $0x4,%rdx
  lea    0x10(%r10,%rdx,1),%rdx
  nopw   0x0(%rax,%rax,1)
L265:
  movups %xmm0,(%rax)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L265
  mov    %edi,%eax
  and    $0xfffffffc,%eax
  test   $0x3,%dil
  je     L516
L456:
  movslq %eax,%rdx
  movl   $0xfffffff7,(%r10,%rdx,4)
  lea    0x0(,%rdx,4),%r11
  lea    0x1(%rax),%edx
  cmp    %edx,%edi
  jle    L516
  movl   $0xfffffff7,0x4(%r10,%r11,1)
  add    $0x2,%eax
  cmp    %eax,%edi
  jle    L516
  movl   $0xfffffff7,0x8(%r10,%r11,1)
L516:
  pxor   %xmm1,%xmm1
  lea    0x8(%rsi),%rax
  cvtsi2sd %edi,%xmm1
  cmp    %rax,%r9
  je     L48
  cmp    $0x1,%ecx
  jbe    L48
  mov    %edi,%edx
  movapd %xmm1,%xmm2
  xor    %eax,%eax
  shr    %edx
  unpcklpd %xmm2,%xmm2
  shl    $0x4,%rdx
  nopw   0x0(%rax,%rax,1)
L270:
  movupd (%rsi,%rax,1),%xmm0
  mulpd  %xmm2,%xmm0
  movups %xmm0,(%r9,%rax,1)
  add    $0x10,%rax
  cmp    %rdx,%rax
  jne    L270
  mov    %edi,%eax
  and    $0xfffffffe,%eax
  test   $0x1,%dil
  je     L133
  mulsd  (%rsi,%rax,8),%xmm1
  movsd  %xmm1,(%r9,%rax,8)
L133:
  movslq %edi,%rax
  lea    (%r9,%rax,8),%rdx
  cmp    %rdx,%r8
  setae  %dl
  add    %r8,%rax
  cmp    %rax,%r9
  setae  %al
  or     %al,%dl
  je     L194
  cmp    $0xe,%ecx
  jbe    L194
  mov    %edi,%ecx
  mov    %r9,%rax
  pxor   %xmm12,%xmm12
  mov    %r8,%rdx
  shr    $0x4,%ecx
  pcmpeqd %xmm13,%xmm13
  movapd D60(%rip),%xmm15
  movdqa D76(%rip),%xmm14
  sub    $0x1,%ecx
  shl    $0x7,%rcx
  lea    0x80(%r9,%rcx,1),%rcx
  nopw   0x0(%rax,%rax,1)
L428:
  movupd 0x20(%rax),%xmm5
  movapd %xmm15,%xmm3
  movapd %xmm15,%xmm6
  movupd 0x40(%rax),%xmm2
  movapd %xmm15,%xmm1
  movupd (%rax),%xmm7
  movupd 0x10(%rax),%xmm4
  movapd %xmm15,%xmm0
  cmplepd %xmm5,%xmm3
  movupd 0x30(%rax),%xmm5
  sub    $0xffffffffffffff80,%rax
  add    $0x10,%rdx
  cmplepd %xmm2,%xmm1
  movupd -0x30(%rax),%xmm2
  cmplepd %xmm7,%xmm0
  movapd %xmm15,%xmm7
  cmplepd %xmm5,%xmm6
  cmplepd %xmm4,%xmm7
  movdqa %xmm3,%xmm8
  movaps %xmm0,-0x18(%rsp)
  movdqa %xmm0,%xmm9
  movupd -0x20(%rax),%xmm0
  movdqa %xmm1,%xmm11
  movdqa %xmm6,%xmm5
  movdqa %xmm7,%xmm4
  pandn  %xmm14,%xmm9
  pandn  %xmm14,%xmm5
  pandn  %xmm14,%xmm4
  pandn  %xmm14,%xmm8
  movaps %xmm5,-0x38(%rsp)
  movapd %xmm15,%xmm5
  pandn  %xmm14,%xmm11
  shufps $0x88,-0x38(%rsp),%xmm8
  cmplepd %xmm2,%xmm5
  movaps %xmm4,-0x48(%rsp)
  movapd %xmm15,%xmm4
  shufps $0x88,-0x48(%rsp),%xmm9
  paddd  %xmm12,%xmm9
  paddd  %xmm9,%xmm8
  movdqa %xmm11,%xmm9
  movdqa %xmm5,%xmm2
  pandn  %xmm14,%xmm2
  movaps %xmm2,-0x28(%rsp)
  movapd %xmm15,%xmm2
  shufps $0x88,-0x28(%rsp),%xmm9
  paddd  %xmm9,%xmm8
  cmplepd %xmm0,%xmm2
  movupd -0x10(%rax),%xmm0
  cmplepd %xmm0,%xmm4
  movdqa %xmm2,%xmm10
  pandn  %xmm14,%xmm10
  movdqa %xmm4,%xmm0
  movdqa %xmm10,%xmm9
  pandn  %xmm14,%xmm0
  shufps $0x88,%xmm0,%xmm9
  movapd -0x18(%rsp),%xmm0
  movdqa %xmm9,%xmm12
  paddd  %xmm8,%xmm12
  movdqa %xmm14,%xmm8
  pand   %xmm0,%xmm8
  pandn  %xmm13,%xmm0
  por    %xmm8,%xmm0
  movdqa %xmm14,%xmm8
  pand   %xmm7,%xmm8
  pandn  %xmm13,%xmm7
  por    %xmm8,%xmm7
  movdqa %xmm14,%xmm8
  pand   %xmm3,%xmm8
  pandn  %xmm13,%xmm3
  shufps $0x88,%xmm7,%xmm0
  por    %xmm8,%xmm3
  movdqa %xmm14,%xmm8
  pand   %xmm6,%xmm8
  pandn  %xmm13,%xmm6
  por    %xmm8,%xmm6
  movdqa %xmm14,%xmm8
  pand   %xmm1,%xmm8
  pandn  %xmm13,%xmm1
  shufps $0x88,%xmm6,%xmm3
  movdqa %xmm0,%xmm6
  por    %xmm8,%xmm1
  movdqa %xmm14,%xmm8
  punpcklwd %xmm3,%xmm0
  pand   %xmm5,%xmm8
  pandn  %xmm13,%xmm5
  punpckhwd %xmm3,%xmm6
  por    %xmm8,%xmm5
  movdqa %xmm14,%xmm8
  movdqa %xmm0,%xmm3
  pand   %xmm2,%xmm8
  punpckhwd %xmm6,%xmm3
  punpcklwd %xmm6,%xmm0
  shufps $0x88,%xmm5,%xmm1
  pandn  %xmm13,%xmm2
  punpcklwd %xmm3,%xmm0
  movdqa %xmm1,%xmm3
  por    %xmm8,%xmm2
  movdqa %xmm14,%xmm8
  pand   D6(%rip),%xmm0
  pand   %xmm4,%xmm8
  pandn  %xmm13,%xmm4
  por    %xmm8,%xmm4
  shufps $0x88,%xmm4,%xmm2
  punpcklwd %xmm2,%xmm1
  punpckhwd %xmm2,%xmm3
  movdqa %xmm1,%xmm2
  punpcklwd %xmm3,%xmm1
  punpckhwd %xmm3,%xmm2
  punpcklwd %xmm2,%xmm1
  pand   D6(%rip),%xmm1
  packuswb %xmm1,%xmm0
  movups %xmm0,-0x10(%rdx)
  cmp    %rax,%rcx
  jne    L428
  movdqa %xmm12,%xmm0
  mov    %edi,%eax
  psrldq $0x8,%xmm0
  and    $0xfffffff0,%eax
  paddd  %xmm12,%xmm0
  movdqa %xmm0,%xmm1
  psrldq $0x4,%xmm1
  paddd  %xmm1,%xmm0
  movd   %xmm0,%esi
  test   $0xf,%dil
  je     L436
  mov    %eax,%ecx
  movsd  D60(%rip),%xmm0
  movsd  (%r9,%rcx,8),%xmm1
  lea    0x0(,%rcx,8),%rdx
  lea    (%r8,%rcx,1),%r11
  mov    $0x1,%ecx
  comisd %xmm0,%xmm1
  jb     L634
L459:
  mov    %cl,(%r11)
  lea    0x1(%rax),%ecx
  cmp    %edi,%ecx
  jge    L436
  movsd  0x8(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L240
L249:
  mov    %r11b,(%rcx)
  lea    0x2(%rax),%ecx
  cmp    %ecx,%edi
  jle    L436
  movsd  0x10(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L711
L607:
  mov    %r11b,(%rcx)
  lea    0x3(%rax),%ecx
  cmp    %ecx,%edi
  jle    L436
  movsd  0x18(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L193
L567:
  mov    %r11b,(%rcx)
  lea    0x4(%rax),%ecx
  cmp    %ecx,%edi
  jle    L436
  movsd  0x20(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L413
  mov    %r11b,(%rcx)
  lea    0x5(%rax),%ecx
  cmp    %ecx,%edi
  jle    L436
L501:
  movsd  0x28(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jae    L533
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
L533:
  mov    %r11b,(%rcx)
  lea    0x6(%rax),%ecx
  cmp    %ecx,%edi
  jle    L436
  movsd  0x30(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jae    L290
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
L290:
  mov    %r11b,(%rcx)
  lea    0x7(%rax),%ecx
  cmp    %ecx,%edi
  jle    L436
  movsd  0x38(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jae    L620
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
L620:
  mov    %r11b,(%rcx)
  lea    0x8(%rax),%ecx
  cmp    %ecx,%edi
  jle    L436
  movsd  0x40(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L642
L526:
  mov    %r11b,(%rcx)
  lea    0x9(%rax),%ecx
  cmp    %ecx,%edi
  jle    L436
  movsd  0x48(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L146
L228:
  mov    %r11b,(%rcx)
  lea    0xa(%rax),%ecx
  cmp    %ecx,%edi
  jle    L436
  movsd  0x50(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L716
L382:
  mov    %r11b,(%rcx)
  lea    0xb(%rax),%ecx
  cmp    %ecx,%edi
  jle    L436
  movsd  0x58(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L34
L646:
  mov    %r11b,(%rcx)
  lea    0xc(%rax),%ecx
  cmp    %ecx,%edi
  jle    L436
  movsd  0x60(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L529
L189:
  mov    %r11b,(%rcx)
  lea    0xd(%rax),%ecx
  cmp    %ecx,%edi
  jle    L436
  movsd  0x68(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jae    L254
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
L254:
  add    $0xe,%eax
  mov    %r11b,(%rcx)
  cmp    %eax,%edi
  jle    L436
  movsd  0x70(%r9,%rdx,1),%xmm1
  cltq
  mov    $0x1,%edx
  add    %r8,%rax
  comisd %xmm0,%xmm1
  jb     L441
  mov    %dl,(%rax)
  nopw   0x0(%rax,%rax,1)
L436:
  test   %esi,%esi
  je     L653
  movsd  D60(%rip),%xmm1
  nopl   0x0(%rax)
L628:
  mov    %r8,%rcx
  mov    %r8,%rdx
  xor    %eax,%eax
  jmp    L172
  nopw   0x0(%rax,%rax,1)
L143:
  add    $0x1,%eax
  add    $0x1,%rdx
  cmp    %eax,%edi
  je     L625
L172:
  cmpb   $0xff,(%rdx)
  jne    L143
L625:
  xor    %edx,%edx
  jmp    L245
  nopl   0x0(%rax)
L173:
  add    $0x1,%edx
  add    $0x1,%rcx
  cmp    %edx,%edi
  je     L653
L245:
  cmpb   $0x1,(%rcx)
  jne    L173
  cmp    %edx,%edi
  je     L653
  cltq
  movapd %xmm1,%xmm2
  mov    %edx,(%r10,%rax,4)
  movslq %edx,%rdx
  subsd  (%r9,%rax,8),%xmm2
  add    %r8,%rax
  lea    (%r9,%rdx,8),%rcx
  movsd  (%rcx),%xmm0
  subsd  %xmm2,%xmm0
  comisd %xmm0,%xmm1
  movsd  %xmm0,(%rcx)
  ja     L524
  movb   $0x0,(%rax)
  sub    $0x1,%esi
  jne    L628
L653:
  xor    %eax,%eax
  ret
  nopl   0x0(%rax,%rax,1)
L524:
  movb   $0xff,(%r8,%rdx,1)
  movb   $0x0,(%rax)
  jmp    L628
L194:
  movsd  D60(%rip),%xmm0
  mov    %edi,%ecx
  xor    %eax,%eax
  xor    %esi,%esi
L688:
  movsd  (%r9,%rax,8),%xmm1
  mov    $0x1,%edx
  comisd %xmm0,%xmm1
  jae    L430
  add    $0x1,%esi
  mov    $0xffffffff,%edx
L430:
  mov    %dl,(%r8,%rax,1)
  add    $0x1,%rax
  cmp    %rax,%rcx
  jne    L688
  jmp    L436
L634:
  add    $0x1,%esi
  mov    $0xffffffff,%ecx
  jmp    L459
L240:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L249
L711:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L607
L193:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L567
L413:
  mov    $0xffffffff,%r11d
  add    $0x1,%esi
  mov    %r11b,(%rcx)
  lea    0x5(%rax),%ecx
  cmp    %ecx,%edi
  jg     L501
  jmp    L436
L642:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L526
L146:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L228
L716:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L382
L34:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L646
L529:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L189
L441:
  mov    $0xffffffff,%edx
  add    $0x1,%esi
  mov    %dl,(%rax)
  jmp    L436
L48:
  mov    %edi,%edx
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L384:
  movsd  (%rsi,%rax,8),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,(%r9,%rax,8)
  add    $0x1,%rax
  cmp    %rdx,%rax
  jne    L384
  jmp    L133
L636:
  xor    %eax,%eax
  jmp    L456
```

tool_calls: name: extract_symbolic_data
arguments: label: D36
type: byte[16]
name: extract_symbolic_data
arguments: label: D60
type: byte[16]
name: extract_symbolic_data
arguments: label: D76
type: byte[16]
name: extract_symbolic_data
arguments: label: D6
type: byte[16]

tool: {"D36": [0xf7,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xf7,0xff,0xff,0xff]}

tool: {"D60": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

tool: {"D76": [0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D6": [0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00]}

assistant: ```c
int MultiNomialAliasSetTable(int ncat, double prob[], double F[], int L[], double space[]) {
  signed char *I = (signed char *)space;
  int i, j, k, nsmall;
  for (i = 0; i < ncat; i++)
    L[i] = -9;
  for (i = 0; i < ncat; i++)
    F[i] = ncat * prob[i];
  for (i = 0, nsmall = 0; i < ncat; i++) {
    if (F[i] >= 1)
      I[i] = 1;
    else {
      I[i] = -1;
      nsmall++;
    }
  }
  for (i = 0; nsmall > 0; i++) {
    for (j = 0; j < ncat; j++)
      if (I[j] == -1)
        break;
    for (k = 0; k < ncat; k++)
      if (I[k] == 1)
        break;
    if (k == ncat)
      break;
    L[j] = k;
    F[k] -= 1 - F[j];
    if (F[k] < 1) {
      I[k] = -1;
      nsmall++;
    }
    I[j] = 0;
    nsmall--;
  }
  return (0);
}
```