// File: /workspace/github_cpp_makefile_star2_O3/temelmertcan[P]multgen/src/multgen.cpp
// Function: create_adder(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, int, std::queue<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::deque<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>&)
int create_adder (string final_stage_adder,
                  bool carryin, int adder_size,
                  queue<string>& verilog){

  if (final_stage_adder.compare ("RP") == 0)
    create_rp_adder (adder_size, carryin, verilog);
  else if (final_stage_adder.compare ("HC") == 0)
    create_hc_adder (adder_size, carryin, verilog);
  else if (final_stage_adder.compare ("LF") == 0)
    create_lf_adder (adder_size, carryin, verilog);
  else if (final_stage_adder.compare ("KS") == 0)
    create_ks_adder (adder_size, carryin, verilog);
  else if (final_stage_adder.compare ("BK") == 0)
    create_bk_adder (adder_size, carryin, verilog);
   else if (final_stage_adder.compare ("JSkCond") == 0)
     create_JSkCond_adder (adder_size, carryin, verilog);
  else{
    cout << "Bad Final Stage Adder Selection!" << endl;
    return 1;
  }

  string module_name = final_stage_adder+"_"+to_string(adder_size)+ (carryin?"_carry":"");
  
  verilog.push ("module "+module_name+"_spec (");
  verilog.push("indent");
  verilog.push("indent");
  if(carryin)
    verilog.push ("input logic carryin,");
  verilog.push ("input logic [" + to_string(adder_size-1) + ":0] IN1,");
  verilog.push ("input logic [" + to_string(adder_size-1) +  ":0] IN2,");
  verilog.push ("output logic adder_correct,");
  verilog.push ("output logic ["  + to_string(adder_size) +  ":0] spec_res);");
  verilog.push("outdent");
  verilog.push("");
  verilog.push((string)"assign spec_res = IN1 + IN2" + (string)(carryin?" + carryin;":";"));
  verilog.push("wire ["  + to_string(adder_size) +  ":0] adder_res;");
  verilog.push(module_name + " adder("+(carryin?"carryin, ":"")+"IN1, IN2, adder_res);");
  verilog.push("assign adder_correct = ((spec_res == adder_res) ? 1 : 0);");
  verilog.push("");
  verilog.push("outdent");
  verilog.push ("endmodule");
  verilog.push("");

  verilog.push ("\n");

  cout << endl;
  cout << "Adder Module (" << module_name << ") is created." << endl;
  cout << "   Inputs: IN1[" << adder_size-1 << ":0], IN2[" << adder_size-1 << ":0]" << (carryin?", carryin":"")<< endl;
  cout << "   Output: result[" <<adder_size << ":0]" << endl;
  cout << "   Function: result=IN1 + IN2" << (carryin?" + carryin":"") << endl;

  return 0;

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xb8, %rsp
movq %rcx, %r12
movl %edx, %r15d
movl %esi, %r14d
movq %rdi, %rbx
leaq 0x70df8(%rip), %rsi     # 0x7731e
callq 0x3090
testl %eax, %eax
je 0x65f2
leaq 0x7119f(%rip), %rsi     # 0x776d9
movq %rbx, %rdi
callq 0x3090
testl %eax, %eax
je 0x6603
leaq 0x7118b(%rip), %rsi     # 0x776dc
movq %rbx, %rdi
callq 0x3090
testl %eax, %eax
je 0x6614
leaq 0x71177(%rip), %rsi     # 0x776df
movq %rbx, %rdi
callq 0x3090
testl %eax, %eax
je 0x6625
leaq 0x71163(%rip), %rsi     # 0x776e2
movq %rbx, %rdi
callq 0x3090
testl %eax, %eax
je 0x6636
leaq 0x7114f(%rip), %rsi     # 0x776e5
movq %rbx, %rdi
callq 0x3090
testl %eax, %eax
je 0x6647
movq 0x7fa23(%rip), %rbx     # 0x85fd0
leaq 0x716cc(%rip), %rsi     # 0x77c80
movl $0x20, %edx
movq %rbx, %rdi
callq 0x3240
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x31e0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x3160
movl $0x1, %eax
jmp 0x7630
movzbl %r14b, %esi
movl %r15d, %edi
movq %r12, %rdx
callq 0x2bbd3
jmp 0x6656
movzbl %r14b, %esi
movl %r15d, %edi
movq %r12, %rdx
callq 0x301ff
jmp 0x6656
movzbl %r14b, %esi
movl %r15d, %edi
movq %r12, %rdx
callq 0x3388a
jmp 0x6656
movzbl %r14b, %esi
movl %r15d, %edi
movq %r12, %rdx
callq 0x3516e
jmp 0x6656
movzbl %r14b, %esi
movl %r15d, %edi
movq %r12, %rdx
callq 0x36964
jmp 0x6656
movzbl %r14b, %esi
movl %r15d, %edi
movq %r12, %rdx
callq 0x39a07
leaq -0x60(%rbp), %rax
movq %rax, -0x10(%rax)
movq (%rbx), %rsi
movq 0x8(%rbx), %rdx
addq %rsi, %rdx
leaq -0x70(%rbp), %rbx
movq %rbx, %rdi
callq 0x2a8a4
leaq 0x72afb(%rip), %rsi     # 0x79176
movq %rbx, %rdi
callq 0x33d0
movl %r15d, %eax
negl %eax
cmovsl %r15d, %eax
movl $0x1, %ebx
movl %eax, -0x4c(%rbp)
cmpl $0xa, %eax
jb 0x66de
movl $0x4, %ebx
movl $0xd1b71759, %eax       # imm = 0xD1B71759
movl -0x4c(%rbp), %ecx
cmpl $0x63, %ecx
jbe 0x66d7
cmpl $0x3e7, %ecx            # imm = 0x3E7
jbe 0x66dc
cmpl $0x2710, %ecx           # imm = 0x2710
jb 0x66de
movl %ecx, %edx
imulq %rax, %rdx
shrq $0x2d, %rdx
addl $0x4, %ebx
cmpl $0x1869f, %ecx          # imm = 0x1869F
movl %edx, %ecx
ja 0x66a6
addl $-0x3, %ebx
jmp 0x66de
addl $-0x2, %ebx
jmp 0x66de
decl %ebx
movl %r15d, %r13d
shrl $0x1f, %r13d
leal (%rbx,%r13), %esi
leaq -0x80(%rbp), %rax
movq %rax, -0x10(%rax)
leaq -0x90(%rbp), %rdi
movl $0x2d, %edx
callq 0x3250
movl %r13d, %eax
movq -0x90(%rbp), %rdi
movq %rax, -0xc8(%rbp)
addq %rax, %rdi
movl %ebx, %esi
movl -0x4c(%rbp), %edx
callq 0x2a6a5
movq -0x70(%rbp), %rcx
movq -0x68(%rbp), %r8
movq -0x88(%rbp), %rdx
leaq (%rdx,%r8), %rax
movl $0xf, %edi
leaq -0x60(%rbp), %rsi
cmpq %rsi, %rcx
je 0x6745
movq -0x60(%rbp), %rdi
movq -0x90(%rbp), %rsi
cmpq %rdi, %rax
jbe 0x6768
movl $0xf, %edi
leaq -0x80(%rbp), %r9
cmpq %r9, %rsi
je 0x6763
movq -0x80(%rbp), %rdi
cmpq %rdi, %rax
jbe 0x6773
leaq -0x70(%rbp), %rdi
callq 0x30a0
jmp 0x6783
leaq -0x90(%rbp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3230
leaq -0x38(%rbp), %rdx
movq %rdx, -0x10(%rdx)
movq (%rax), %rsi
leaq 0x10(%rax), %rcx
cmpq %rcx, %rsi
je 0x67a4
movq %rsi, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x67aa
movups (%rcx), %xmm0
movups %xmm0, (%rdx)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, -0x40(%rbp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x714d4(%rip), %rax     # 0x77ca1
leaq 0x72e2d(%rip), %rsi     # 0x79601
testb %r14b, %r14b
cmovneq %rax, %rsi
leaq -0x48(%rbp), %rdi
callq 0x33d0
leaq -0xa8(%rbp), %rsi
movq %rsi, -0x10(%rsi)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x6811
movq %rdx, -0xb8(%rbp)
movq (%rcx), %rdx
movq %rdx, -0xa8(%rbp)
jmp 0x6817
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0xb0(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x38(%rbp), %rbx
movq -0x10(%rbx), %rdi
cmpq %rbx, %rdi
je 0x6843
callq 0x31d0
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
je 0x6858
callq 0x31d0
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x686a
callq 0x31d0
leaq 0x71437(%rip), %rsi     # 0x77ca8
leaq -0x70(%rbp), %rdi
leaq -0xb8(%rbp), %rdx
callq 0x2a567
leaq 0x71428(%rip), %rsi     # 0x77cb0
leaq -0x70(%rbp), %rdi
callq 0x33d0
movq %rbx, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x68b1
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x68b7
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq -0x48(%rbp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r12, %rdi
callq 0x2a942
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x68e8
callq 0x31d0
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x68fa
callq 0x31d0
leaq -0x48(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x713b0(%rip), %rsi     # 0x77cb8
leaq 0x713af(%rip), %rdx     # 0x77cbe
callq 0x2ac04
leaq -0x48(%rbp), %rsi
movq %r12, %rdi
callq 0x2a942
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x692e
callq 0x31d0
leaq -0x48(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x7137c(%rip), %rsi     # 0x77cb8
leaq 0x7137b(%rip), %rdx     # 0x77cbe
callq 0x2ac04
leaq -0x48(%rbp), %rsi
movq %r12, %rdi
callq 0x2a942
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x6962
callq 0x31d0
testb %r14b, %r14b
je 0x699b
leaq -0x48(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x7134a(%rip), %rsi     # 0x77cbf
leaq 0x71357(%rip), %rdx     # 0x77cd3
callq 0x2ac04
leaq -0x48(%rbp), %rsi
movq %r12, %rdi
callq 0x2a942
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x699b
callq 0x31d0
movq %r13, -0xc0(%rbp)
movq %r12, -0xd0(%rbp)
movl %r14d, -0x98(%rbp)
leal -0x1(%r15), %esi
movl %esi, %ebx
negl %ebx
cmovsl %esi, %ebx
movl $0x1, %r13d
cmpl $0xa, %ebx
jb 0x6a0f
movl $0x4, %r13d
movl $0xd1b71759, %eax       # imm = 0xD1B71759
movl %ebx, %ecx
cmpl $0x63, %ecx
jbe 0x6a06
cmpl $0x3e7, %ecx            # imm = 0x3E7
jbe 0x6a0c
cmpl $0x2710, %ecx           # imm = 0x2710
jb 0x6a0f
movl %ecx, %edx
imulq %rax, %rdx
shrq $0x2d, %rdx
addl $0x4, %r13d
cmpl $0x1869f, %ecx          # imm = 0x1869F
movl %edx, %ecx
ja 0x69d3
addl $-0x3, %r13d
jmp 0x6a0f
addl $-0x2, %r13d
jmp 0x6a0f
decl %r13d
movq %r15, -0xd8(%rbp)
movl %esi, -0x94(%rbp)
movl %esi, %r12d
shrl $0x1f, %r12d
leal (%r12,%r13), %esi
leaq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
movq %rax, (%rdi)
movl $0x2d, %edx
callq 0x3250
movl %r12d, %r14d
leaq -0x90(%rbp), %r15
movq (%r15), %rdi
addq %r14, %rdi
movl %r13d, %esi
movl %ebx, %edx
callq 0x2a6a5
leaq 0x71274(%rip), %rcx     # 0x77cd4
movl $0xd, %r8d
movq %r15, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3230
leaq -0x60(%rbp), %rsi
movq %rsi, -0x70(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
movq -0xd0(%rbp), %r15
je 0x6a9d
movq %rdx, -0x70(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x60(%rbp)
jmp 0x6aa3
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
leaq -0x70(%rbp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x7121d(%rip), %rsi     # 0x77ce2
callq 0x33d0
leaq -0x38(%rbp), %rsi
movq %rsi, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x6aee
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x6af4
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
leaq -0x48(%rbp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r15, %rdi
callq 0x2a942
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
leaq -0x60(%rbp), %r15
je 0x6b2d
callq 0x31d0
movq -0x70(%rbp), %rdi
cmpq %r15, %rdi
je 0x6b3b
callq 0x31d0
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
je 0x6b50
callq 0x31d0
movl $0x1, %r13d
cmpl $0xa, %ebx
jb 0x6ba4
movl $0x4, %r13d
movl $0xd1b71759, %eax       # imm = 0xD1B71759
movl %ebx, %ecx
cmpl $0x63, %ecx
jbe 0x6b9b
cmpl $0x3e7, %ecx            # imm = 0x3E7
jbe 0x6ba1
cmpl $0x2710, %ecx           # imm = 0x2710
jb 0x6ba4
movl %ecx, %edx
imulq %rax, %rdx
shrq $0x2d, %rdx
addl $0x4, %r13d
cmpl $0x1869f, %ecx          # imm = 0x1869F
movl %edx, %ecx
ja 0x6b68
addl $-0x3, %r13d
jmp 0x6ba4
addl $-0x2, %r13d
jmp 0x6ba4
decl %r13d
addl %r13d, %r12d
leaq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
movq %rax, (%rdi)
movq %r12, %rsi
movl $0x2d, %edx
callq 0x3250
leaq -0x90(%rbp), %r15
addq (%r15), %r14
movq %r14, %rdi
movl %r13d, %esi
movl %ebx, %edx
callq 0x2a6a5
leaq 0x710f4(%rip), %rcx     # 0x77cd4
movl $0xd, %r8d
movq %r15, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3230
leaq -0x60(%rbp), %r15
movq %r15, -0x70(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
movl -0x98(%rbp), %r12d
movq -0xd0(%rbp), %r13
leaq -0x38(%rbp), %rbx
je 0x6c28
movq %rdx, -0x70(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x60(%rbp)
jmp 0x6c2f
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0x8(%rax), %rdx
leaq -0x70(%rbp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x7109a(%rip), %rsi     # 0x77ceb
callq 0x33d0
movq %rbx, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x6c76
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x6c7c
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq -0x48(%rbp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r13, %rdi
callq 0x2a942
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x6cad
callq 0x31d0
movq -0x70(%rbp), %rdi
cmpq %r15, %rdi
je 0x6cbb
callq 0x31d0
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
je 0x6cd0
callq 0x31d0
leaq -0x48(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x71016(%rip), %rsi     # 0x77cf4
leaq 0x7102a(%rip), %rdx     # 0x77d0f
callq 0x2ac04
leaq -0x48(%rbp), %rsi
movq %r13, %rdi
callq 0x2a942
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x6d04
callq 0x31d0
movl $0x1, %ebx
cmpl $0xa, -0x4c(%rbp)
jb 0x6d54
movl $0x4, %ebx
movl $0xd1b71759, %eax       # imm = 0xD1B71759
movl -0x4c(%rbp), %ecx
cmpl $0x63, %ecx
jbe 0x6d4d
cmpl $0x3e7, %ecx            # imm = 0x3E7
jbe 0x6d52
cmpl $0x2710, %ecx           # imm = 0x2710
jb 0x6d54
movl %ecx, %edx
imulq %rax, %rdx
shrq $0x2d, %rdx
addl $0x4, %ebx
cmpl $0x1869f, %ecx          # imm = 0x1869F
movl %edx, %ecx
ja 0x6d1c
addl $-0x3, %ebx
jmp 0x6d54
addl $-0x2, %ebx
jmp 0x6d54
decl %ebx
movq -0xc0(%rbp), %rax
leal (%rbx,%rax), %esi
leaq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
movq %rax, (%rdi)
movl $0x2d, %edx
callq 0x3250
leaq -0x90(%rbp), %r14
movq (%r14), %rdi
addq -0xc8(%rbp), %rdi
movl %ebx, %esi
movl -0x4c(%rbp), %edx
callq 0x2a6a5
leaq 0x70f78(%rip), %rcx     # 0x77d10
movl $0xe, %r8d
movq %r14, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3230
movq %r15, -0x70(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
leaq -0x38(%rbp), %rbx
je 0x6dce
movq %rdx, -0x70(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x60(%rbp)
jmp 0x6dd5
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0x8(%rax), %rdx
leaq -0x70(%rbp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x70f28(%rip), %rsi     # 0x77d1f
callq 0x33d0
movq %rbx, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x6e1c
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x6e22
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq -0x48(%rbp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r13, %rdi
callq 0x2a942
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x6e53
callq 0x31d0
movq -0x70(%rbp), %rdi
cmpq %r15, %rdi
je 0x6e61
callq 0x31d0
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
je 0x6e76
callq 0x31d0
leaq -0x48(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x70eaa(%rip), %rsi     # 0x77d2e
leaq 0x70eaa(%rip), %rdx     # 0x77d35
callq 0x2ac04
leaq -0x48(%rbp), %rsi
movq %r13, %rdi
callq 0x2a942
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x6eaa
callq 0x31d0
leaq -0x48(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x72749(%rip), %rbx     # 0x79601
movq %rbx, %rsi
movq %rbx, %rdx
callq 0x2ac04
leaq -0x48(%rbp), %rsi
movq %r13, %rdi
callq 0x2a942
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x6ee1
callq 0x31d0
leaq -0x70(%rbp), %rdi
movq %r15, (%rdi)
leaq 0x70e47(%rip), %rsi     # 0x77d36
leaq 0x70e5b(%rip), %rdx     # 0x77d51
callq 0x2ac04
leaq 0x70e50(%rip), %rax     # 0x77d52
leaq 0x72808(%rip), %rsi     # 0x79711
testb %r12b, %r12b
cmovneq %rax, %rsi
leaq 0x1(%rsi), %rdx
leaq 0xb(%rsi), %rax
testb %r12b, %r12b
leaq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rcx
movq %rcx, (%rdi)
cmovneq %rax, %rdx
callq 0x2ac04
movq -0x70(%rbp), %rcx
movq -0x68(%rbp), %r8
movq -0x88(%rbp), %rdx
leaq (%rdx,%r8), %rax
movl $0xf, %edi
cmpq %r15, %rcx
je 0x6f53
movq -0x60(%rbp), %rdi
movq -0x90(%rbp), %rsi
cmpq %rdi, %rax
jbe 0x6f76
movl $0xf, %edi
leaq -0x80(%rbp), %r9
cmpq %r9, %rsi
je 0x6f71
movq -0x80(%rbp), %rdi
cmpq %rdi, %rax
jbe 0x6f81
leaq -0x70(%rbp), %rdi
callq 0x30a0
jmp 0x6f91
leaq -0x90(%rbp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3230
leaq -0x38(%rbp), %rsi
movq %rsi, -0x48(%rbp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x6fb2
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x6fb8
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, -0x40(%rbp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq -0x48(%rbp), %rsi
movq %r13, %rdi
callq 0x2a942
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x6ff2
callq 0x31d0
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
je 0x7007
callq 0x31d0
movq -0x70(%rbp), %rdi
cmpq %r15, %rdi
je 0x7015
callq 0x31d0
movl $0x1, %r14d
cmpl $0xa, -0x4c(%rbp)
jb 0x706b
movl $0x4, %r14d
movl $0xd1b71759, %eax       # imm = 0xD1B71759
movl -0x4c(%rbp), %ecx
cmpl $0x63, %ecx
jbe 0x7062
cmpl $0x3e7, %ecx            # imm = 0x3E7
jbe 0x7068
cmpl $0x2710, %ecx           # imm = 0x2710
jb 0x706b
movl %ecx, %edx
imulq %rax, %rdx
shrq $0x2d, %rdx
addl $0x4, %r14d
cmpl $0x1869f, %ecx          # imm = 0x1869F
movl %edx, %ecx
ja 0x702f
addl $-0x3, %r14d
jmp 0x706b
addl $-0x2, %r14d
jmp 0x706b
decl %r14d
movq -0xc0(%rbp), %rsi
addl %r14d, %esi
leaq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
movq %rax, (%rdi)
movl $0x2d, %edx
callq 0x3250
leaq -0x90(%rbp), %r15
movq -0xc8(%rbp), %rdi
addq (%r15), %rdi
movl %r14d, %esi
movl -0x4c(%rbp), %edx
callq 0x2a6a5
leaq 0x70cae(%rip), %rcx     # 0x77d5e
movl $0x6, %r8d
movq %r15, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3230
leaq -0x60(%rbp), %r14
movq %r14, -0x70(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x70e6
movq %rdx, -0x70(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x60(%rbp)
jmp 0x70ed
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq 0x8(%rax), %rdx
leaq -0x70(%rbp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x70c56(%rip), %rsi     # 0x77d65
callq 0x33d0
leaq -0x38(%rbp), %rsi
movq %rsi, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7138
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x713e
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
leaq -0x48(%rbp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r13, %rdi
callq 0x2a942
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x7173
callq 0x31d0
movq -0x70(%rbp), %rdi
cmpq %r14, %rdi
je 0x7181
callq 0x31d0
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
je 0x7196
callq 0x31d0
leaq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
movq %rax, (%rdi)
movq -0xb8(%rbp), %rsi
movq -0xb0(%rbp), %rdx
addq %rsi, %rdx
callq 0x2a8a4
leaq 0x70bb3(%rip), %rsi     # 0x77d74
leaq -0x90(%rbp), %rdi
callq 0x33d0
leaq 0x70ba8(%rip), %rax     # 0x77d7c
testb %r12b, %r12b
cmovneq %rax, %rbx
leaq -0x90(%rbp), %rdi
movq %rbx, %rsi
callq 0x33d0
movq %r14, -0x70(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
leaq -0x38(%rbp), %rbx
je 0x720e
movq %rdx, -0x70(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x60(%rbp)
jmp 0x7215
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq 0x8(%rax), %rdx
leaq -0x70(%rbp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x70b4f(%rip), %rsi     # 0x77d86
callq 0x33d0
movq %rbx, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x725c
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x7262
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq -0x48(%rbp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r13, %rdi
callq 0x2a942
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x7293
callq 0x31d0
movq -0x70(%rbp), %rdi
cmpq %r14, %rdi
je 0x72a1
callq 0x31d0
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
je 0x72b6
callq 0x31d0
leaq -0x48(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x70ad8(%rip), %rsi     # 0x77d9c
leaq 0x70b0a(%rip), %rdx     # 0x77dd5
callq 0x2ac04
leaq -0x48(%rbp), %rsi
movq %r13, %rdi
callq 0x2a942
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x72ea
callq 0x31d0
leaq -0x48(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x72309(%rip), %rdx     # 0x79601
movq %rdx, %rsi
callq 0x2ac04
leaq -0x48(%rbp), %rsi
movq %r13, %rdi
callq 0x2a942
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x731a
callq 0x31d0
leaq -0x48(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x70a06(%rip), %rsi     # 0x77d2e
leaq 0x70a06(%rip), %rdx     # 0x77d35
callq 0x2ac04
leaq -0x48(%rbp), %rsi
movq %r13, %rdi
callq 0x2a942
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x734e
callq 0x31d0
leaq -0x48(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x70a7a(%rip), %rsi     # 0x77dd6
leaq 0x70a7c(%rip), %rdx     # 0x77ddf
callq 0x2ac04
leaq -0x48(%rbp), %rsi
movq %r13, %rdi
callq 0x2a942
movq -0x48(%rbp), %rdi
cmpq %rbx, %rdi
je 0x7382
callq 0x31d0
leaq -0x48(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x72271(%rip), %rbx     # 0x79601
movq %rbx, %rsi
movq %rbx, %rdx
callq 0x2ac04
leaq -0x48(%rbp), %rsi
movq %r13, %rdi
callq 0x2a942
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x73b9
callq 0x31d0
leaq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
movq %rax, (%rdi)
leaq 0x6f4ac(%rip), %rsi     # 0x76877
leaq 0x6f4a6(%rip), %rdx     # 0x76878
callq 0x2ac04
leaq -0x48(%rbp), %rsi
movq %r13, %rdi
callq 0x2a942
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x73f5
callq 0x31d0
movq 0x7ebd4(%rip), %rdi     # 0x85fd0
movq (%rdi), %rax
addq -0x18(%rax), %rdi
movl $0xa, %esi
callq 0x31e0
movsbl %al, %esi
movq 0x7ebb9(%rip), %rdi     # 0x85fd0
callq 0x3040
movq %rax, %rdi
callq 0x3160
movq 0x7eba5(%rip), %rdi     # 0x85fd0
leaq 0x709ae(%rip), %rsi     # 0x77de0
movl $0xe, %edx
callq 0x3240
movq -0xb8(%rbp), %rsi
movq -0xb0(%rbp), %rdx
movq 0x7eb7f(%rip), %rdi     # 0x85fd0
callq 0x3240
movq %rax, %r14
leaq 0x7098f(%rip), %rsi     # 0x77def
movl $0xd, %edx
movq %rax, %rdi
callq 0x3240
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x31e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x3160
movq 0x7eb35(%rip), %rdi     # 0x85fd0
leaq 0x7095b(%rip), %rsi     # 0x77dfd
movl $0xf, %edx
callq 0x3240
movq 0x7eb1d(%rip), %rdi     # 0x85fd0
movl -0x94(%rbp), %esi
callq 0x3380
movq %rax, %r14
leaq 0x70945(%rip), %rsi     # 0x77e0d
movl $0x9, %edx
movq %rax, %rdi
callq 0x3240
movq %r14, %rdi
movl -0x94(%rbp), %esi
callq 0x3380
movq %rax, %r14
leaq 0x7092a(%rip), %rsi     # 0x77e17
movl $0x3, %edx
movq %rax, %rdi
callq 0x3240
leaq 0x7091a(%rip), %rsi     # 0x77e1b
testb %r12b, %r12b
cmoveq %rbx, %rsi
movzbl %r12b, %eax
leaq (%rax,%rax,8), %rdx
movq %r14, %rdi
callq 0x3240
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x31e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x3160
movq 0x7ea8a(%rip), %rdi     # 0x85fd0
leaq 0x708d8(%rip), %rsi     # 0x77e25
movl $0x12, %edx
callq 0x3240
movq 0x7ea72(%rip), %rdi     # 0x85fd0
movq -0xd8(%rbp), %rsi
callq 0x3380
movq %rax, %r14
leaq 0x708a3(%rip), %rsi     # 0x77e17
movl $0x3, %edx
movq %rax, %rdi
callq 0x3240
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x31e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x3160
movq 0x7ea21(%rip), %rdi     # 0x85fd0
leaq 0x70882(%rip), %rsi     # 0x77e38
movl $0x1d, %edx
callq 0x3240
leaq 0x7088f(%rip), %rax     # 0x77e56
xorl %ecx, %ecx
testb %r12b, %r12b
cmovneq %rax, %rbx
movl $0xa, %edx
cmoveq %rcx, %rdx
movq 0x7e9f0(%rip), %r14     # 0x85fd0
movq %r14, %rdi
movq %rbx, %rsi
callq 0x3240
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x31e0
movsbl %al, %esi
movq 0x7e9c7(%rip), %rdi     # 0x85fd0
callq 0x3040
movq %rax, %rdi
callq 0x3160
movq -0xb8(%rbp), %rdi
leaq -0xa8(%rbp), %rax
cmpq %rax, %rdi
je 0x762e
callq 0x31d0
xorl %eax, %eax
addq $0xb8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x7784
jmp 0x7806
jmp 0x76f2
jmp 0x7806
jmp 0x76f2
jmp 0x7806
jmp 0x7784
jmp 0x7806
jmp 0x7784
jmp 0x7806
jmp 0x7784
jmp 0x7806
jmp 0x7784
jmp 0x7806
jmp 0x7720
jmp 0x7751
jmp 0x7768
jmp 0x7768
jmp 0x7806
jmp 0x773a
jmp 0x7751
jmp 0x7768
jmp 0x7806
movq %rax, %rbx
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x76cf
callq 0x31d0
jmp 0x76cf
movq %rax, %rbx
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
jne 0x77a6
jmp 0x77b0
jmp 0x77ad
jmp 0x7806
movq %rax, %rbx
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
jmp 0x77b8
jmp 0x7806
jmp 0x7784
jmp 0x7806
jmp 0x7720
jmp 0x7751
jmp 0x7768
jmp 0x7806
jmp 0x7784
jmp 0x7806
movq %rbx, %rcx
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %rcx, %rdi
jne 0x774a
jmp 0x7754
jmp 0x7751
jmp 0x7768
jmp 0x7806
movq %rax, %rbx
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x7754
callq 0x31d0
jmp 0x7754
movq %rax, %rbx
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x776b
callq 0x31d0
jmp 0x776b
movq %rax, %rbx
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
jmp 0x77b8
jmp 0x7806
jmp 0x7784
jmp 0x7806
movq %rbx, %rcx
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %rcx, %rdi
jne 0x77bd
jmp 0x7809
jmp 0x7806
movq %rbx, %rcx
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %rcx, %rdi
je 0x77b0
callq 0x31d0
jmp 0x77b0
movq %rax, %rbx
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x7809
callq 0x31d0
jmp 0x7809
jmp 0x7806
movq %rax, %rbx
leaq -0x38(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x77e0
callq 0x31d0
jmp 0x77e0
movq %rax, %rbx
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
je 0x77fc
callq 0x31d0
jmp 0x77fc
jmp 0x77f9
movq %rax, %rbx
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
jmp 0x7817
movq %rax, %rbx
movq -0xb8(%rbp), %rdi
leaq -0xa8(%rbp), %rax
cmpq %rax, %rdi
je 0x7821
callq 0x31d0
movq %rbx, %rdi
callq 0x33a0