// File: ncbi[P]amr/seq.cpp
// Function: Seq_sp::codon2aa(char const*, unsigned char, bool)
char codon2aa (const char codon [3],
               Gencode gencode,
               bool lowercasePossibleStartCodon)
{
  char c [3];
  FOR (size_t, i, 3)
    c [i] = toLower (codon [i]);


  char aa = 'X';
  switch (c [0])
  {
    case 't':
     	switch (c [1])
   	  {
   	    case 't':
   	      switch (c [2])
      		{
      		  case 't': case 'c': case 'y': aa = 'F';
      		  Case 'a': case 'g': case 'r': aa = 'L';
      		}
   	    Case 'c':                         aa = 'S'; 
   	    Case 'a':
   	      switch (c [2])
      		{
      		  case 't': case 'c': case 'y': aa = 'Y';
      		  Case 'a': case 'g': case 'r': aa = *terminator;
      		}
   	    Case 'g':
   	      switch (c [2])
      		{
      		  case 't': case 'c': case 'y': aa = 'C';
      		  Case 'a': 
      		    switch (gencode)
      		    {
      		      case 4: case 25:          aa = 'W';
      		      Default:                  aa = *terminator;
      		    }
      		  Case 'g':                     aa = 'W';
      		}
   	    Case 'r':
   	      if (c [2] == 'a')          aa = *terminator;
   	  }
    Case 'c':
     	switch (c [1])
   	  {
   	    case 't':                         aa = 'L';
   	    Case 'c':                         aa = 'P';
   	    Case 'a':
   	      switch (c [2])
      		{
      		  case 't': case 'c': case 'y': aa = 'H';
      		  Case 'a': case 'g': case 'r': aa = 'Q';
      		}
   	    Case 'g':                         aa = 'R';
   	  }
    Case 'a':
     	switch (c [1])
   	  {
   	    case 't':
   	      switch (c [2])
      		{
      		  case 't': case 'c': case 'a':
      		  case 'y': case 'w': case 'm':
      		  case 'h':                     aa = 'I';
      		  Case 'g':                     aa = 'M'; 
      		}
   	    Case 'c':                         aa = 'T';
   	    Case 'a':
   	      switch (c [2])
      		{
      		  case 't': case 'c': case 'y': aa = 'N';
      		  Case 'a': case 'g': case 'r': aa = 'K';
      		}
   	    Case 'g':
   	      switch (c [2])
      		{
      		  case 't': case 'c': case 'y': aa = 'S';
      		  Case 'a': case 'g': case 'r': aa = 'R';
      		}
   	  }
    Case 'g':
     	switch (c [1])
   	  {
   	    case 't':                         aa = 'V';
   	    Case 'c':                         aa = 'A';
   	    Case 'a':
   	      switch (c [2])
      		{
      		  case 't': case 'c': case 'y': aa = 'D';
      		  Case 'a': case 'g': case 'r': aa = 'E';
      		}
   	    Case 'g':                         aa = 'G';
   	  }
    Case 'm':
      if (c [1] == 'g' &&
          charInSet (c [2], "agr"))  aa = 'R';
    Case 'r':
      if (c [1] == 'a' &&
          charInSet (c [2], "tcy"))  aa = 'B';
    Case 's':
      if (c [1] == 'a' &&
          charInSet (c [2], "agr"))  aa = 'Z';
    Case 'y':
      if (c [1] == 't' &&
          charInSet (c [2], "agr"))  aa = 'L';
  }
  ASSERT (charInSet (aa, extTermPeptideAlphabet));
  
  
  if (lowercasePossibleStartCodon)
  {
    bool startcodon = false;
    switch (gencode)
    {
      case  1: if (    c[0] == 'a' && c[1] == 't' && c[2] == 'g' )  startcodon = true;
      Case  4: if (   (               c[1] == 't' && c[2] == 'g')
                   || (c[0] == 'a' && c[1] == 't'               )
                   || (c[0] == 't' && c[1] == 't' && c[2] == 'a'))  startcodon = true;
      Case 11: if (                  (c[1] == 't' && c[2] == 'g')
                   || (c[0] == 'a' && c[1] == 't')               )  startcodon = true;  
      Case 25: if (    c[0] != 'c' && c[1] == 't' && c[2] == 'g' )  startcodon = true;
      Default: throw runtime_error (FUNC "Genetic code " + to_string ((int) gencode) + " is not implemented");
    }
    if (startcodon)
      aa = toLower (aa);
  }


  return aa;
}

// Assembly:
subq $0x398, %rsp            # imm = 0x398
movb %dl, %al
movb %sil, %cl
movq %rdi, 0x390(%rsp)
movb %cl, 0x38f(%rsp)
andb $0x1, %al
movb %al, 0x38e(%rsp)
movq $0x0, 0x380(%rsp)
cmpq $0x3, 0x380(%rsp)
jae 0xad4cb
movq 0x390(%rsp), %rax
movq 0x380(%rsp), %rcx
movsbl (%rax,%rcx), %edi
callq 0x4cb20
movb %al, %cl
movq 0x380(%rsp), %rax
movb %cl, 0x38b(%rsp,%rax)
movq 0x380(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x380(%rsp)
jmp 0xad480
movb $0x58, 0x37f(%rsp)
movsbl 0x38b(%rsp), %eax
addl $-0x61, %eax
movl %eax, %ecx
movq %rcx, 0xd8(%rsp)
subl $0x18, %eax
ja 0xadf49
movq 0xd8(%rsp), %rax
leaq 0x3ab38(%rip), %rcx     # 0xe8038
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movsbl 0x38c(%rsp), %eax
addl $-0x61, %eax
movl %eax, %ecx
movq %rcx, 0xd0(%rsp)
subl $0x13, %eax
ja 0xad6df
movq 0xd0(%rsp), %rax
leaq 0x3ac56(%rip), %rcx     # 0xe818c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movsbl 0x38d(%rsp), %eax
movl %eax, 0xcc(%rsp)
subl $0x61, %eax
je 0xad5a5
jmp 0xad555
movl 0xcc(%rsp), %eax
subl $0x63, %eax
je 0xad59b
jmp 0xad563
movl 0xcc(%rsp), %eax
subl $0x67, %eax
je 0xad5a5
jmp 0xad571
movl 0xcc(%rsp), %eax
subl $0x72, %eax
je 0xad5a5
jmp 0xad57f
movl 0xcc(%rsp), %eax
subl $0x74, %eax
je 0xad59b
jmp 0xad58d
movl 0xcc(%rsp), %eax
subl $0x79, %eax
jne 0xad5ad
jmp 0xad59b
movb $0x46, 0x37f(%rsp)
jmp 0xad5ad
movb $0x4c, 0x37f(%rsp)
jmp 0xad6df
movb $0x53, 0x37f(%rsp)
jmp 0xad6df
movsbl 0x38d(%rsp), %eax
movl %eax, 0xc8(%rsp)
subl $0x61, %eax
je 0xad625
jmp 0xad5d5
movl 0xc8(%rsp), %eax
subl $0x63, %eax
je 0xad61b
jmp 0xad5e3
movl 0xc8(%rsp), %eax
subl $0x67, %eax
je 0xad625
jmp 0xad5f1
movl 0xc8(%rsp), %eax
subl $0x72, %eax
je 0xad625
jmp 0xad5ff
movl 0xc8(%rsp), %eax
subl $0x74, %eax
je 0xad61b
jmp 0xad60d
movl 0xc8(%rsp), %eax
subl $0x79, %eax
jne 0xad635
jmp 0xad61b
movb $0x59, 0x37f(%rsp)
jmp 0xad635
movq 0x73774(%rip), %rax     # 0x120da0
movb (%rax), %al
movb %al, 0x37f(%rsp)
jmp 0xad6df
movsbl 0x38d(%rsp), %eax
addl $-0x61, %eax
movl %eax, %ecx
movq %rcx, 0xc0(%rsp)
subl $0x18, %eax
ja 0xad6be
movq 0xc0(%rsp), %rax
leaq 0x3ab79(%rip), %rcx     # 0xe81dc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movb $0x43, 0x37f(%rsp)
jmp 0xad6be
movzbl 0x38f(%rsp), %eax
movl %eax, 0xbc(%rsp)
subl $0x4, %eax
je 0xad69a
jmp 0xad68c
movl 0xbc(%rsp), %eax
subl $0x19, %eax
jne 0xad6a4
jmp 0xad69a
movb $0x57, 0x37f(%rsp)
jmp 0xad6b4
movq 0x736f5(%rip), %rax     # 0x120da0
movb (%rax), %al
movb %al, 0x37f(%rsp)
jmp 0xad6be
movb $0x57, 0x37f(%rsp)
jmp 0xad6df
movsbl 0x38d(%rsp), %eax
cmpl $0x61, %eax
jne 0xad6dd
movq 0x736cc(%rip), %rax     # 0x120da0
movb (%rax), %al
movb %al, 0x37f(%rsp)
jmp 0xad6df
jmp 0xadf49
movsbl 0x38c(%rsp), %eax
addl $-0x61, %eax
movl %eax, %ecx
movq %rcx, 0xb0(%rsp)
subl $0x13, %eax
ja 0xad7a9
movq 0xb0(%rsp), %rax
leaq 0x3aa2b(%rip), %rcx     # 0xe813c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movb $0x4c, 0x37f(%rsp)
jmp 0xad7a9
movb $0x50, 0x37f(%rsp)
jmp 0xad7a9
movsbl 0x38d(%rsp), %eax
movl %eax, 0xac(%rsp)
subl $0x61, %eax
je 0xad797
jmp 0xad747
movl 0xac(%rsp), %eax
subl $0x63, %eax
je 0xad78d
jmp 0xad755
movl 0xac(%rsp), %eax
subl $0x67, %eax
je 0xad797
jmp 0xad763
movl 0xac(%rsp), %eax
subl $0x72, %eax
je 0xad797
jmp 0xad771
movl 0xac(%rsp), %eax
subl $0x74, %eax
je 0xad78d
jmp 0xad77f
movl 0xac(%rsp), %eax
subl $0x79, %eax
jne 0xad79f
jmp 0xad78d
movb $0x48, 0x37f(%rsp)
jmp 0xad79f
movb $0x51, 0x37f(%rsp)
jmp 0xad7a9
movb $0x52, 0x37f(%rsp)
jmp 0xadf49
movsbl 0x38c(%rsp), %eax
addl $-0x61, %eax
movl %eax, %ecx
movq %rcx, 0xa0(%rsp)
subl $0x13, %eax
ja 0xad960
movq 0xa0(%rsp), %rax
leaq 0x3a911(%rip), %rcx     # 0xe80ec
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movsbl 0x38d(%rsp), %eax
movl %eax, 0x9c(%rsp)
subl $0x61, %eax
je 0xad85c
jmp 0xad7fa
movl 0x9c(%rsp), %eax
subl $0x63, %eax
je 0xad85c
jmp 0xad808
movl 0x9c(%rsp), %eax
subl $0x67, %eax
je 0xad866
jmp 0xad816
movl 0x9c(%rsp), %eax
subl $0x68, %eax
je 0xad85c
jmp 0xad824
movl 0x9c(%rsp), %eax
subl $0x6d, %eax
je 0xad85c
jmp 0xad832
movl 0x9c(%rsp), %eax
subl $0x74, %eax
je 0xad85c
jmp 0xad840
movl 0x9c(%rsp), %eax
subl $0x77, %eax
je 0xad85c
jmp 0xad84e
movl 0x9c(%rsp), %eax
subl $0x79, %eax
jne 0xad86e
jmp 0xad85c
movb $0x49, 0x37f(%rsp)
jmp 0xad86e
movb $0x4d, 0x37f(%rsp)
jmp 0xad960
movb $0x54, 0x37f(%rsp)
jmp 0xad960
movsbl 0x38d(%rsp), %eax
movl %eax, 0x98(%rsp)
subl $0x61, %eax
je 0xad8e6
jmp 0xad896
movl 0x98(%rsp), %eax
subl $0x63, %eax
je 0xad8dc
jmp 0xad8a4
movl 0x98(%rsp), %eax
subl $0x67, %eax
je 0xad8e6
jmp 0xad8b2
movl 0x98(%rsp), %eax
subl $0x72, %eax
je 0xad8e6
jmp 0xad8c0
movl 0x98(%rsp), %eax
subl $0x74, %eax
je 0xad8dc
jmp 0xad8ce
movl 0x98(%rsp), %eax
subl $0x79, %eax
jne 0xad8ee
jmp 0xad8dc
movb $0x4e, 0x37f(%rsp)
jmp 0xad8ee
movb $0x4b, 0x37f(%rsp)
jmp 0xad960
movsbl 0x38d(%rsp), %eax
movl %eax, 0x94(%rsp)
subl $0x61, %eax
je 0xad956
jmp 0xad906
movl 0x94(%rsp), %eax
subl $0x63, %eax
je 0xad94c
jmp 0xad914
movl 0x94(%rsp), %eax
subl $0x67, %eax
je 0xad956
jmp 0xad922
movl 0x94(%rsp), %eax
subl $0x72, %eax
je 0xad956
jmp 0xad930
movl 0x94(%rsp), %eax
subl $0x74, %eax
je 0xad94c
jmp 0xad93e
movl 0x94(%rsp), %eax
subl $0x79, %eax
jne 0xad95e
jmp 0xad94c
movb $0x53, 0x37f(%rsp)
jmp 0xad95e
movb $0x52, 0x37f(%rsp)
jmp 0xad960
jmp 0xadf49
movsbl 0x38c(%rsp), %eax
addl $-0x61, %eax
movl %eax, %ecx
movq %rcx, 0x88(%rsp)
subl $0x13, %eax
ja 0xada2a
movq 0x88(%rsp), %rax
leaq 0x3a70a(%rip), %rcx     # 0xe809c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movb $0x56, 0x37f(%rsp)
jmp 0xada2a
movb $0x41, 0x37f(%rsp)
jmp 0xada2a
movsbl 0x38d(%rsp), %eax
movl %eax, 0x84(%rsp)
subl $0x61, %eax
je 0xada18
jmp 0xad9c8
movl 0x84(%rsp), %eax
subl $0x63, %eax
je 0xada0e
jmp 0xad9d6
movl 0x84(%rsp), %eax
subl $0x67, %eax
je 0xada18
jmp 0xad9e4
movl 0x84(%rsp), %eax
subl $0x72, %eax
je 0xada18
jmp 0xad9f2
movl 0x84(%rsp), %eax
subl $0x74, %eax
je 0xada0e
jmp 0xada00
movl 0x84(%rsp), %eax
subl $0x79, %eax
jne 0xada20
jmp 0xada0e
movb $0x44, 0x37f(%rsp)
jmp 0xada20
movb $0x45, 0x37f(%rsp)
jmp 0xada2a
movb $0x47, 0x37f(%rsp)
jmp 0xadf49
movsbl 0x38c(%rsp), %ecx
movb $0x0, 0x356(%rsp)
movb $0x0, 0x343(%rsp)
xorl %eax, %eax
cmpl $0x67, %ecx
movb %al, 0x83(%rsp)
jne 0xadac4
movb 0x38d(%rsp), %al
movb %al, 0x77(%rsp)
leaq 0x357(%rsp), %rdi
movq %rdi, 0x78(%rsp)
callq 0xdd50
movq 0x78(%rsp), %rdx
movb $0x1, 0x356(%rsp)
leaq 0x3acd7(%rip), %rsi     # 0xe875d
leaq 0x358(%rsp), %rdi
callq 0xfae0
jmp 0xada95
movb 0x77(%rsp), %al
movb $0x1, 0x343(%rsp)
movsbl %al, %edi
leaq 0x358(%rsp), %rsi
callq 0x4cba0
movb %al, 0x76(%rsp)
jmp 0xadab7
movb 0x76(%rsp), %al
movb %al, 0x83(%rsp)
jmp 0xadac4
movb 0x83(%rsp), %al
movb %al, 0x75(%rsp)
testb $0x1, 0x343(%rsp)
jne 0xadadb
jmp 0xadae8
leaq 0x358(%rsp), %rdi
callq 0xdf08
testb $0x1, 0x356(%rsp)
jne 0xadaf4
jmp 0xadb01
leaq 0x357(%rsp), %rdi
callq 0xd7a0
movb 0x75(%rsp), %al
testb $0x1, %al
jne 0xadb0b
jmp 0xadb78
movb $0x52, 0x37f(%rsp)
jmp 0xadb78
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
jmp 0xadb5a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
testb $0x1, 0x343(%rsp)
jne 0xadb4b
jmp 0xadb58
leaq 0x358(%rsp), %rdi
callq 0xdf08
jmp 0xadb5a
testb $0x1, 0x356(%rsp)
jne 0xadb66
jmp 0xadb73
leaq 0x357(%rsp), %rdi
callq 0xd7a0
jmp 0xae60f
jmp 0xadf49
movsbl 0x38c(%rsp), %ecx
movb $0x0, 0x31e(%rsp)
movb $0x0, 0x31d(%rsp)
xorl %eax, %eax
cmpl $0x61, %ecx
movb %al, 0x74(%rsp)
jne 0xadc0c
movb 0x38d(%rsp), %al
movb %al, 0x67(%rsp)
leaq 0x31f(%rsp), %rdi
movq %rdi, 0x68(%rsp)
callq 0xdd50
movq 0x68(%rsp), %rdx
movb $0x1, 0x31e(%rsp)
leaq 0x3ab90(%rip), %rsi     # 0xe8761
leaq 0x320(%rsp), %rdi
callq 0xfae0
jmp 0xadbe0
movb 0x67(%rsp), %al
movb $0x1, 0x31d(%rsp)
movsbl %al, %edi
leaq 0x320(%rsp), %rsi
callq 0x4cba0
movb %al, 0x66(%rsp)
jmp 0xadc02
movb 0x66(%rsp), %al
movb %al, 0x74(%rsp)
jmp 0xadc0c
movb 0x74(%rsp), %al
movb %al, 0x65(%rsp)
testb $0x1, 0x31d(%rsp)
jne 0xadc20
jmp 0xadc2d
leaq 0x320(%rsp), %rdi
callq 0xdf08
testb $0x1, 0x31e(%rsp)
jne 0xadc39
jmp 0xadc46
leaq 0x31f(%rsp), %rdi
callq 0xd7a0
movb 0x65(%rsp), %al
testb $0x1, %al
jne 0xadc50
jmp 0xadcbd
movb $0x42, 0x37f(%rsp)
jmp 0xadcbd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
jmp 0xadc9f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
testb $0x1, 0x31d(%rsp)
jne 0xadc90
jmp 0xadc9d
leaq 0x320(%rsp), %rdi
callq 0xdf08
jmp 0xadc9f
testb $0x1, 0x31e(%rsp)
jne 0xadcab
jmp 0xadcb8
leaq 0x31f(%rsp), %rdi
callq 0xd7a0
jmp 0xae60f
jmp 0xadf49
movsbl 0x38c(%rsp), %ecx
movb $0x0, 0x2f6(%rsp)
movb $0x0, 0x2f5(%rsp)
xorl %eax, %eax
cmpl $0x61, %ecx
movb %al, 0x64(%rsp)
jne 0xadd51
movb 0x38d(%rsp), %al
movb %al, 0x57(%rsp)
leaq 0x2f7(%rsp), %rdi
movq %rdi, 0x58(%rsp)
callq 0xdd50
movq 0x58(%rsp), %rdx
movb $0x1, 0x2f6(%rsp)
leaq 0x3aa47(%rip), %rsi     # 0xe875d
leaq 0x2f8(%rsp), %rdi
callq 0xfae0
jmp 0xadd25
movb 0x57(%rsp), %al
movb $0x1, 0x2f5(%rsp)
movsbl %al, %edi
leaq 0x2f8(%rsp), %rsi
callq 0x4cba0
movb %al, 0x56(%rsp)
jmp 0xadd47
movb 0x56(%rsp), %al
movb %al, 0x64(%rsp)
jmp 0xadd51
movb 0x64(%rsp), %al
movb %al, 0x55(%rsp)
testb $0x1, 0x2f5(%rsp)
jne 0xadd65
jmp 0xadd72
leaq 0x2f8(%rsp), %rdi
callq 0xdf08
testb $0x1, 0x2f6(%rsp)
jne 0xadd7e
jmp 0xadd8b
leaq 0x2f7(%rsp), %rdi
callq 0xd7a0
movb 0x55(%rsp), %al
testb $0x1, %al
jne 0xadd95
jmp 0xade02
movb $0x5a, 0x37f(%rsp)
jmp 0xade02
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
jmp 0xadde4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
testb $0x1, 0x2f5(%rsp)
jne 0xaddd5
jmp 0xadde2
leaq 0x2f8(%rsp), %rdi
callq 0xdf08
jmp 0xadde4
testb $0x1, 0x2f6(%rsp)
jne 0xaddf0
jmp 0xaddfd
leaq 0x2f7(%rsp), %rdi
callq 0xd7a0
jmp 0xae60f
jmp 0xadf49
movsbl 0x38c(%rsp), %ecx
movb $0x0, 0x2ce(%rsp)
movb $0x0, 0x2cd(%rsp)
xorl %eax, %eax
cmpl $0x74, %ecx
movb %al, 0x54(%rsp)
jne 0xade96
movb 0x38d(%rsp), %al
movb %al, 0x47(%rsp)
leaq 0x2cf(%rsp), %rdi
movq %rdi, 0x48(%rsp)
callq 0xdd50
movq 0x48(%rsp), %rdx
movb $0x1, 0x2ce(%rsp)
leaq 0x3a902(%rip), %rsi     # 0xe875d
leaq 0x2d0(%rsp), %rdi
callq 0xfae0
jmp 0xade6a
movb 0x47(%rsp), %al
movb $0x1, 0x2cd(%rsp)
movsbl %al, %edi
leaq 0x2d0(%rsp), %rsi
callq 0x4cba0
movb %al, 0x46(%rsp)
jmp 0xade8c
movb 0x46(%rsp), %al
movb %al, 0x54(%rsp)
jmp 0xade96
movb 0x54(%rsp), %al
movb %al, 0x45(%rsp)
testb $0x1, 0x2cd(%rsp)
jne 0xadeaa
jmp 0xadeb7
leaq 0x2d0(%rsp), %rdi
callq 0xdf08
testb $0x1, 0x2ce(%rsp)
jne 0xadec3
jmp 0xaded0
leaq 0x2cf(%rsp), %rdi
callq 0xd7a0
movb 0x45(%rsp), %al
testb $0x1, %al
jne 0xadeda
jmp 0xadf47
movb $0x4c, 0x37f(%rsp)
jmp 0xadf47
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
jmp 0xadf29
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
testb $0x1, 0x2cd(%rsp)
jne 0xadf1a
jmp 0xadf27
leaq 0x2d0(%rsp), %rdi
callq 0xdf08
jmp 0xadf29
testb $0x1, 0x2ce(%rsp)
jne 0xadf35
jmp 0xadf42
leaq 0x2cf(%rsp), %rdi
callq 0xd7a0
jmp 0xae60f
jmp 0xadf49
callq 0xd0a0
movl $0x0, (%rax)
movb 0x37f(%rsp), %al
movb %al, 0x2f(%rsp)
movq 0x72e42(%rip), %rax     # 0x120da8
movq %rax, 0x30(%rsp)
leaq 0x2a7(%rsp), %rdi
movq %rdi, 0x38(%rsp)
callq 0xdd50
movq 0x30(%rsp), %rsi
movq 0x38(%rsp), %rdx
leaq 0x2a8(%rsp), %rdi
callq 0xfae0
jmp 0xadf96
movb 0x2f(%rsp), %al
movsbl %al, %edi
leaq 0x2a8(%rsp), %rsi
callq 0x4cba0
movb %al, 0x2e(%rsp)
jmp 0xadfb0
movb 0x2e(%rsp), %al
xorb $-0x1, %al
movb %al, 0x2d(%rsp)
leaq 0x2a8(%rsp), %rdi
callq 0xdf08
leaq 0x2a7(%rsp), %rdi
callq 0xd7a0
movb 0x2d(%rsp), %al
testb $0x1, %al
jne 0xadfe1
jmp 0xae2b1
callq 0xd8c0
cmpl $0x0, %eax
jne 0xae2a7
leaq 0x1ff(%rsp), %rdi
movq %rdi, 0x20(%rsp)
callq 0xdd50
movq 0x20(%rsp), %rdx
leaq 0x3a439(%rip), %rsi     # 0xe8446
leaq 0x200(%rsp), %rdi
callq 0xfae0
jmp 0xae01c
leaq 0x1d8(%rsp), %rdi
movl $0x52e, %esi            # imm = 0x52E
callq 0x11600
jmp 0xae030
leaq 0x220(%rsp), %rdi
leaq 0x200(%rsp), %rsi
leaq 0x1d8(%rsp), %rdx
callq 0x11510
jmp 0xae04f
leaq 0x3517b(%rip), %rdx     # 0xe31d1
leaq 0x240(%rsp), %rdi
leaq 0x220(%rsp), %rsi
callq 0x114c0
jmp 0xae06d
leaq 0x197(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0xdd50
movq 0x18(%rsp), %rdx
leaq 0x3a6da(%rip), %rsi     # 0xe8765
leaq 0x198(%rsp), %rdi
callq 0xfae0
jmp 0xae09a
leaq 0x35903(%rip), %rdx     # 0xe39a4
leaq 0x1b8(%rsp), %rdi
leaq 0x198(%rsp), %rsi
callq 0x114c0
jmp 0xae0b8
leaq 0x260(%rsp), %rdi
leaq 0x240(%rsp), %rsi
leaq 0x1b8(%rsp), %rdx
callq 0x11510
jmp 0xae0d7
leaq 0x3a6ba(%rip), %rdx     # 0xe8798
leaq 0x280(%rsp), %rdi
leaq 0x260(%rsp), %rsi
callq 0x114c0
jmp 0xae0f5
leaq 0x280(%rsp), %rdi
callq 0x173d0
jmp 0xae104
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
jmp 0xae13b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
leaq 0x2a8(%rsp), %rdi
callq 0xdf08
leaq 0x2a7(%rsp), %rdi
callq 0xd7a0
jmp 0xae60f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
jmp 0xae295
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
jmp 0xae288
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
jmp 0xae27b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
jmp 0xae26e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
jmp 0xae254
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
jmp 0xae247
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
jmp 0xae23a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
jmp 0xae22d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
leaq 0x280(%rsp), %rdi
callq 0xdf08
leaq 0x260(%rsp), %rdi
callq 0xdf08
leaq 0x1b8(%rsp), %rdi
callq 0xdf08
leaq 0x198(%rsp), %rdi
callq 0xdf08
leaq 0x197(%rsp), %rdi
callq 0xd7a0
leaq 0x240(%rsp), %rdi
callq 0xdf08
leaq 0x220(%rsp), %rdi
callq 0xdf08
leaq 0x1d8(%rsp), %rdi
callq 0xdf08
leaq 0x200(%rsp), %rdi
callq 0xdf08
leaq 0x1ff(%rsp), %rdi
callq 0xd7a0
jmp 0xae60f
movl $0x1, %edi
callq 0xd8e0
testb $0x1, 0x38e(%rsp)
je 0xae600
movb $0x0, 0x196(%rsp)
movzbl 0x38f(%rsp), %eax
decl %eax
movl %eax, %ecx
movq %rcx, 0x10(%rsp)
subl $0x18, %eax
ja 0xae407
movq 0x10(%rsp), %rax
leaq 0x39f53(%rip), %rcx     # 0xe8240
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movsbl 0x38b(%rsp), %eax
cmpl $0x61, %eax
jne 0xae325
movsbl 0x38c(%rsp), %eax
cmpl $0x74, %eax
jne 0xae325
movsbl 0x38d(%rsp), %eax
cmpl $0x67, %eax
jne 0xae325
movb $0x1, 0x196(%rsp)
jmp 0xae5e0
movsbl 0x38c(%rsp), %eax
cmpl $0x74, %eax
jne 0xae344
movsbl 0x38d(%rsp), %eax
cmpl $0x67, %eax
je 0xae385
movsbl 0x38b(%rsp), %eax
cmpl $0x61, %eax
jne 0xae35e
movsbl 0x38c(%rsp), %eax
cmpl $0x74, %eax
je 0xae385
movsbl 0x38b(%rsp), %eax
cmpl $0x74, %eax
jne 0xae38d
movsbl 0x38c(%rsp), %eax
cmpl $0x74, %eax
jne 0xae38d
movsbl 0x38d(%rsp), %eax
cmpl $0x61, %eax
jne 0xae38d
movb $0x1, 0x196(%rsp)
jmp 0xae5e0
movsbl 0x38c(%rsp), %eax
cmpl $0x74, %eax
jne 0xae3ac
movsbl 0x38d(%rsp), %eax
cmpl $0x67, %eax
je 0xae3c6
movsbl 0x38b(%rsp), %eax
cmpl $0x61, %eax
jne 0xae3ce
movsbl 0x38c(%rsp), %eax
cmpl $0x74, %eax
jne 0xae3ce
movb $0x1, 0x196(%rsp)
jmp 0xae5e0
movsbl 0x38b(%rsp), %eax
cmpl $0x63, %eax
je 0xae402
movsbl 0x38c(%rsp), %eax
cmpl $0x74, %eax
jne 0xae402
movsbl 0x38d(%rsp), %eax
cmpl $0x67, %eax
jne 0xae402
movb $0x1, 0x196(%rsp)
jmp 0xae5e0
movb $0x1, 0xe7(%rsp)
movl $0x10, %edi
callq 0xd3b0
movq %rax, (%rsp)
leaq 0x10f(%rsp), %rdi
movq %rdi, 0x8(%rsp)
callq 0xdd50
movq 0x8(%rsp), %rdx
leaq 0x3a32a(%rip), %rsi     # 0xe8765
leaq 0x110(%rsp), %rdi
callq 0xfae0
jmp 0xae44a
leaq 0x3a36e(%rip), %rdx     # 0xe87bf
leaq 0x130(%rsp), %rdi
leaq 0x110(%rsp), %rsi
callq 0x114c0
jmp 0xae468
movzbl 0x38f(%rsp), %esi
leaq 0xe8(%rsp), %rdi
callq 0x11600
jmp 0xae47f
leaq 0x150(%rsp), %rdi
leaq 0x130(%rsp), %rsi
leaq 0xe8(%rsp), %rdx
callq 0x11510
jmp 0xae49e
leaq 0x34ca0(%rip), %rdx     # 0xe3145
leaq 0x170(%rsp), %rdi
leaq 0x150(%rsp), %rsi
callq 0x114c0
jmp 0xae4bc
movq (%rsp), %rdi
leaq 0x170(%rsp), %rsi
callq 0xdbf0
jmp 0xae4cf
movq (%rsp), %rdi
movb $0x0, 0xe7(%rsp)
movq 0x71b0e(%rip), %rsi     # 0x11fff0
movq 0x71a87(%rip), %rdx     # 0x11ff70
callq 0xdcd0
jmp 0xae61c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
jmp 0xae5bc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
jmp 0xae5af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
jmp 0xae5a2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
jmp 0xae595
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
jmp 0xae588
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x348(%rsp)
movl %eax, 0x344(%rsp)
leaq 0x170(%rsp), %rdi
callq 0xdf08
leaq 0x150(%rsp), %rdi
callq 0xdf08
leaq 0xe8(%rsp), %rdi
callq 0xdf08
leaq 0x130(%rsp), %rdi
callq 0xdf08
leaq 0x110(%rsp), %rdi
callq 0xdf08
leaq 0x10f(%rsp), %rdi
callq 0xd7a0
testb $0x1, 0xe7(%rsp)
jne 0xae5d5
jmp 0xae5de
movq (%rsp), %rdi
callq 0xd570
jmp 0xae60f
testb $0x1, 0x196(%rsp)
je 0xae5fe
movsbl 0x37f(%rsp), %edi
callq 0x4cb20
movb %al, 0x37f(%rsp)
jmp 0xae600
movb 0x37f(%rsp), %al
addq $0x398, %rsp            # imm = 0x398
retq
movq 0x348(%rsp), %rdi
callq 0xdd40
nopl (%rax)